Split-Apply-Combine

Elaborazione scalabile dei dati in R

Michael Kane

Assistant Professor, Yale University

Split-Apply-Combine

  • Split: split()
  • Apply: Map()
  • Combine: Reduce()
Elaborazione scalabile dei dati in R

Partizionare con split()

La funzione split() partiziona i dati

  • Primo argomento: un vettore o data.frame da suddividere
  • Secondo argomento: un factor o integer le cui valori definiscono le partizioni
Elaborazione scalabile dei dati in R
# Ottieni le righe corrispondenti a ciascun anno nei dati dei mutui
 year_splits <- split(1:nrow(mort), mort[,"year"])
# year_splits è una lista
class(year_splits)
"list"
# Gli anni su cui abbiamo fatto lo split
names(year_splits)
"2008" "2009" "2010" "2011" "2012" "2013" "2014" "2015"
# Le prime righe corrispondenti all'anno 2010
year_splits[["2010"]][1:10]
1  6  7 10 21 23 24 27 29 38
Elaborazione scalabile dei dati in R

Calcolare con Map()

La funzione Map() elabora le partizioni

  • Primo argomento: la funzione da applicare a ciascuna partizione
  • Secondo argomento: le partizioni
Elaborazione scalabile dei dati in R

Calcolare con Map()

col_missing_count <- function(mort) {
   apply(mort, 2, function(x) sum(x == 9))} 
# Per ciascun anno conta i valori mancanti per 
# tutte le colonne
missing_by_year <- Map(
   function(x) col_missing_count(mort[x, ]),
   year_splits)

missing_by_year[["2008"]]
enterprise         record_number                   msa 
        0                    12                     0 
# ...
Elaborazione scalabile dei dati in R

Combinare con Reduce()

La funzione Reduce() combina i risultati di tutte le partizioni

  • Primo argomento: la funzione con cui combinare
  • Secondo argomento: i dati partizionati
Elaborazione scalabile dei dati in R
# Calcola i mancanti totali per colonna
Reduce(`+`, missing_by_year)
enterprise         record_number                   msa 
         0                    64                     0 
# ... 
# Etichetta i nomi riga con l'anno
mby <- Reduce(rbind, missing_by_year)
row.names(mby) <- names(year_splits)
mby[1:3, 1:3]
     enterprise record_number msa
2008          0            12   0
2009          0             8   0
2010          0            10   0

Elaborazione scalabile dei dati in R

Esercitiamoci!

Elaborazione scalabile dei dati in R

Preparing Video For Download...