En resa för en data scientist

Action creates insight

En resa för en data scientist

Hur jobbar man egentligen som en data scientist? Jag har funderat mycket på vad det är jag gör på mitt jobb. En resa för en data scientist ser ofta ut på en liknande sätt för de flesta projektet. Idag tänker jag dela med mig av min mentala modell jag använder mig för att beskriva denna process. Det involverar fem steg som en data scientist gör, där det ibland är fler eller färre, lite beroende på vad man har för folk runt om sig. Initialt är det viktigt att fråga sig vad som är syftet med projektet och vad är det som förväntas av personerna som ska använda resultaten.

R for Data Science Day 1 · Darya Vanichkina
Resan som en data scientist genomför

Steg 1 – Datainhämtning

Som data scientist är det viktigt att ha sin data på plats. Denna kan komma in i en arbetsmiljö på väldigt många sätt. Du tänker säkert att det bara är att ta den där excel filen och lägga den i en mapp som heter data och sedan importera den till miljön så är du set. Det är absolut en väg att gå, men det finns många fler sätt att få in data i sin miljö. Vi ska dyka in i detta strax.

Datainhämtning handlar också om att samla in data, det är lättare då att styra exakt vad som samlas in och för att nå ett specifikt syfte, med en rejäl nackdel att det princip alltid tar mycket tid. Använder du sekundär data så är det lättare, du sparar mycket tid men kanske inte riktigt lika fokuserade frågor på det du vill ha reda på.

Ladda in material

När du ska ladda in materialet i din analysmiljö kan du göra det genom att lägga det i en mapp där du tänker genomföra majoriteten av projektet. Detta är väldigt vanligt att göra det på detta sättet. Materialet kan komma i väldigt många olika filformat, men det vanligaste är troligen excel eller csv. Här när några exempelkoder på hur du kan läsa in det i R. CSV, EXCEL, FEATHER och TXT.

library(readr)
library(readxl)
library(openxlsx)

# CSV
readr::write_csv(mtcars, "mtcars.csv")
readr::read_csv(file = "mtcars.csv")

# WRITE XLSX - Skriver flera dataset till flera sheets
l <- list(iris = iris, mtcars = mtcars, chickwts = chickwts, quakes = quakes)
openxlsx::write.xlsx(l, file = "datasets.xlsx")

# READ EXCEL - Returnerar en tibble!
readxl::read_excel("datasets.xlsx")

# Feather
library(feather)
write_feather(mtcars,"mtcars.feather")
read_feather("mtcars.feather")

# Text
write.table(mtcars,file = "mtcars_comma.txt",sep = ",") # comma sep
write.table(mtcars,file = "mtcars_tab.txt",sep = "\t") # tab sep
read.table("mtcars_comma.txt",sep = ",")
read.table("mtcars_tab.txt",sep = "\t")

Läsa in en bulk med csv filer, händer oftare än vad du tror.

# Läsa in bulk med csv filer
tbl <-
    list.files(pattern = "*.csv") %>% 
    map_df(~read_csv(.))

Ett bra paket att ladda in format som SAS, STATA och andra konstiga format är genom R-paketet HAVEN.

Hämta data direkt från Github

Det finns många andra sätt att hämta in data. Exempelvis går det kanon att ladda in material direkt från github genom read_csv().

readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-11-03/ikea.csv")

I praktiken kan du ladda ner vilken fil som helst som finns öppet på webben. Exempelvis som denna mtcars kopia som finns på min hemsida.

readr::read_csv("https://jakobj.se/test/mtcars.csv")

Pins – en data scientists bästa vän

I en tidigare post jag gjorde beskrev jag kort hur jag hämtar materialet från Kaggle direkt in i R. För att göra detta behöver du paketet pins, som finns på CRAN och är under förhållandevis aktiv utveckling. Största fördelen med pins är om man jobbar flera i en molnmiljö, då är det viktigt att smidigt skicka material mellan varandra. Jag kommer säkert att skriva mer om pins i framtiden. Här är en liten kod som hämtar kaggle data in i R.

pins::board_register_kaggle(token = "kaggle.json") # viktigt med token!

pins::pin(mtcars, BOARD = "kaggle") # Fungerar ej just nu?
pins::pin_find("motor", board = "kaggle", extended = TRUE)
pins::pin_get("telcos-copy",board = "kaggle") %>% read_csv() 

# Hemmabakad funktion som fungerar som google search "jag har tur"

quick_set<-function(text){
  kaggle_find<-pins::pin_find(text = text, board = "kaggle",extended=TRUE) %>% 
    dplyr::arrange(desc(downloadCount)) %>% 
    dplyr::slice(1) %>% 
    dplyr::select(name)
  df<-pins::pin_get(kaggle_find,board="kaggle") %>% stringr::str_subset(pattern = "csv")
  if(length(df)==1){
    df<-df %>% readr::read_csv()
  } else {
    df<-df[1] %>% readr::read_csv()
  }
  return(df)
}

quick_set(text = "ikea")

Pins och github

Github är ett riktigt bra ställe att parkera sina filer på om det inte är något känsligt. För att komma igång med det är det bara gå till sitt github konto och skaffa sig en API nyckel så kan man lägga in den.

pins::board_register_github(repo = "USERNAME/SECRETREPO",
                      branch = "BRANCH", token="API KEY")

Jag rekommenderar varmt att komma igång med pins, det är väldigt kul.

Pins och Azure

Med djupa fickor är molnet din bästa vän, det är en varm rek att skaffa ett Azure konto. Lägg in din API nyckel så kan du pinna till Azure direkt!

pins::board_register_azure(container = "snake",account = "justanotherstorage",
  key = "API KEY")

pins::pin(mtcars,board="azure")

Ladda ner en fil från nätet, läs in den, pinna den

Det som är kul med pins är att det är roligt att samla på fina dataset. På nätet minskar risken lite också att filerna försvinner, därför är det rätt smart att tanka upp sina fina offentliga material till github. Här är en annan variant!

# Laddar ner en fil från nätet, läser in den och sparar till github.
download.file('https://mathcs.org/statistics/datasets/titanic.xlsx',destfile = "titanic.xlsx")
titanic<-readxl::read_excel("titanic.xlsx")
pins::pin(titanic,board="github")

API:er

API:er, troligen ett av de absolut mest skalbara sätten att dela med sig av datamaterial utan att ha allt komma kraschande ner. Jag har tidigare visat hur du kan ansluta dig till Börsdatas API, givet att du har en API nyckel. Om du saknar en nyckel, men ändå vill ansluta till något som faktiskt har en auth, då kan jag rekommendera att testa ansluta till Systembolagets API.

Exempelvis finns det helt öppna API:er, se gärna SCBs databas. Ett varmt tips till den som inte är så sugen på att grotta ner sig och bygga en egen API wrapper så finns det som tur redan ett bra paket för att hämta SCB data. Min personliga favorit SCB API wrapper är pxweb.

pxweb::interactive_pxweb()

En data scientist börjar princip alltid med att hämta in data

Och avlutar ofta med att skapa en rapport. Nu vet du lite mer om hur man hämtar in data i R. Att hämta data in till R är antagligen det lättaste av alla fem stegen som en data scientist gör, men det är förstås också en fråga om hur materialet har samlats in. Det finns förstår fler sätt att göra detta på, som exempelvis att hämta data ur en databas, däremot lämnar jag det till ett framtida kapital. Detta har varit en resa för en data scientist del 1 av 5. Hoppas min lilla kod kan vara till nytta!