Split-Apply-Combine

Processamento de Dados em Escala no R

Michael Kane

Assistant Professor, Yale University

Split-Apply-Combine

  • Split: split()
  • Apply: Map()
  • Combine: Reduce()
Processamento de Dados em Escala no R

Particionar com split()

A função split() particiona os dados

  • Primeiro argumento: um vetor ou data.frame a ser particionado
  • Segundo argumento: um factor ou integer cujos valores definem as partições
Processamento de Dados em Escala no R
# Obter as linhas correspondentes a cada ano nos dados de hipotecas
 year_splits <- split(1:nrow(mort), mort[,"year"])
# year_splits é uma lista
class(year_splits)
"list"
# Os anos usados na partição
names(year_splits)
"2008" "2009" "2010" "2011" "2012" "2013" "2014" "2015"
# As primeiras linhas correspondentes ao ano de 2010
year_splits[["2010"]][1:10]
1  6  7 10 21 23 24 27 29 38
Processamento de Dados em Escala no R

Calcular com Map()

A função Map() processa as partições

  • Primeiro argumento: a função aplicada a cada partição
  • Segundo argumento: as partições
Processamento de Dados em Escala no R

Calcular com Map()

col_missing_count <- function(mort) {
   apply(mort, 2, function(x) sum(x == 9))} 
# Para cada ano, contar o número de ausências em 
# todas as colunas
missing_by_year <- Map(
   function(x) col_missing_count(mort[x, ]),
   year_splits)

missing_by_year[["2008"]]
enterprise         record_number                   msa 
        0                    12                     0 
# ...
Processamento de Dados em Escala no R

Combinar com Reduce()

A função Reduce() combina os resultados de todas as partições

  • Primeiro argumento: a função usada para combinar
  • Segundo argumento: os dados particionados
Processamento de Dados em Escala no R
# Calcular o total de ausências por coluna
Reduce(`+`, missing_by_year)
enterprise         record_number                   msa 
         0                    64                     0 
# ... 
# Rotular os nomes das linhas com o ano
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

Processamento de Dados em Escala no R

Vamos praticar!

Processamento de Dados em Escala no R

Preparing Video For Download...