Diviser‑Appliquer‑Combiner

Traitement de données évolutif en R

Michael Kane

Assistant Professor, Yale University

Diviser‑Appliquer‑Combiner

  • Diviser : split()
  • Appliquer : Map()
  • Combiner : Reduce()
Traitement de données évolutif en R

Partitionner avec split()

La fonction split() partitionne les données

  • 1er argument : vecteur ou data.frame à diviser
  • 2e argument : factor ou integer dont les valeurs définissent les partitions
Traitement de données évolutif en R
# Obtenir les lignes correspondant à chaque année des données hypothécaires
 year_splits <- split(1:nrow(mort), mort[,"year"])
# year_splits est une liste
class(year_splits)
"list"
# Les années utilisées pour la partition
names(year_splits)
"2008" "2009" "2010" "2011" "2012" "2013" "2014" "2015"
# Les premières lignes correspondant à l'année 2010
year_splits[["2010"]][1:10]
1  6  7 10 21 23 24 27 29 38
Traitement de données évolutif en R

Calculer avec Map()

La fonction Map() traite les partitions

  • 1er argument : fonction à appliquer à chaque partition
  • 2e argument : les partitions
Traitement de données évolutif en R

Calculer avec Map()

col_missing_count <- function(mort) {
   apply(mort, 2, function(x) sum(x == 9))} 
# Pour chaque année, compter le nombre de valeurs manquantes
# pour toutes les colonnes
missing_by_year <- Map(
   function(x) col_missing_count(mort[x, ]),
   year_splits)

missing_by_year[["2008"]]
enterprise         record_number                   msa 
        0                    12                     0 
# ...
Traitement de données évolutif en R

Combiner avec Reduce()

La fonction Reduce() combine les résultats de toutes les partitions

  • 1er argument : fonction de combinaison
  • 2e argument : données partitionnées
Traitement de données évolutif en R
# Calculer le total des valeurs manquantes par colonne
Reduce(`+`, missing_by_year)
enterprise         record_number                   msa 
         0                    64                     0 
# ... 
# Étiqueter les noms de lignes avec l'année
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

Traitement de données évolutif en R

Passons à la pratique !

Traitement de données évolutif en R

Preparing Video For Download...