présentation de data.table
Post on 29-Jun-2015
484 Views
Preview:
DESCRIPTION
TRANSCRIPT
1
Introduction à data.table
Timeri VECCELLA
2
SÉLECTION DE DONNÉESSans data.table on pleure !
3
data.frame et data.table
• Un «data.table» est un «data.frame» avec des fonctionnalités additionnelles
• Plus lisible, plus compréhensible, plus compact, plus rapide…
• Efficient
4
data.table et SQL
• Semblable à du SQL (possibilité de définir des clefs)
• Permet de réaliser des requêtes dans un tableau mais avec la syntaxe de R :
data[<where>, <select>, <group by>]
5
Exemple selection
# installation de la librairie install.packages("data.table")
# chargement de la librairielibrary(data.table)
# chargement des donnéesload("C:/Users/Ve/Desktop/Raddicts/pokemon.rda")
6
Exemple selection# 1. Selectionner : data.frame et data.table #############
# details / conversions :class(data)dfPokemon <- datadtPokemon <- data.table(data)
class(dfPokemon)class(dtPokemon)
# # details sur les données :# dfPokemon# dtPokemon
7
Exemple selection# selectionnner le nom des pokemons avec des caracteristiques particulières :# avec un data frame dfPokemon[(dfPokemon$Attack - dfPokemon$Defense) > 10 & dfPokemon$Speed > 120 & dfPokemon$LastEvolution, ]$Name
dfPokemon[(dfPokemon$Attack - dfPokemon$Defense) > 10 & dfPokemon$Speed > 120 & dfPokemon$LastEvolution, c("Name", "HP")]
# avec un data tabledtPokemon[Attack - Defense > 10 & Speed > 120 & LastEvolution, Name]
dtPokemon[Attack - Defense > 10 & Speed > 120 & LastEvolution, list(Name,HP)]
8
UTILISATIONS PRINCIPALESYoupi !
9
Filtrer
• Garder les lignes qui nous intéresse :– Soit avec une clause– Soit avec une clef (ou plusieurs clefs)
• data[ <where>, <select>, <group by>]
• Plus rapide avec des clefs (ne parcourt pas toutes les lignes d’un tableau)
10
Exemple de filtres # 2. Filtrer des observations ##### avec un data frame dfPokemon[(dfPokemon$Attack - dfPokemon$Defense) > 10 & dfPokemon$Speed > 120 & dfPokemon$LastEvolution, ]
# avec un data tabledtPokemon[Attack - Defense > 10 & Speed > 120 & LastEvolution]
# Filtrer les noms des pokemon commencant par la lettre "A" :# avec un data frame dfPokemon[ grep("^A",dfPokemon$Name), ]
# avec un data tabledtPokemon[ Name %like% "^A" ]
11
Exemple de filtres
## 3. Filtrer des observations avec clefs ####
# définir une clef :setkey(dtPokemon,LastEvolution)dtPokemon[J(TRUE)]
# définir deux clefs :setkey(dtPokemon, Attack, LastEvolution)dtPokemon[J(c(110:120),TRUE)]
12
Grouper
• Sélectionner, filtrer, calculer par groupe (calculer des statistiques agrégées…)
data[<where>, <select>, by = <group>]
13
.SD et .N
• En groupant, on peut utiliser des « objets spéciaux » dans le select :– Pour chaque groupe, ".SD" est la partie du tableau
qui correspond à ce groupe. C’est aussi un data.table et on peut lui appliquer une fonction arbitraire
– .N nombre d’observations dans chaque groupe .N = nrow(.SD)
14
Exemple d’opérations par groupe# calculer une moyennedtPokemon[ , mean(Speed), by = LastEvolution]
# calculer une moyenne et renommer la statistique calculée dtPokemon[ , list( vitesseMoyenne = mean(Speed) ), by = LastEvolution]
# calculer une moyenne en créant une variable de groupe dtPokemon[ , mean(Speed), by = list(LastEvolution, aName = Name %like% "^A" )]
# ordonner les valeurs par le keybydtPokemon[ , mean(Speed), keyby = list(LastEvolution, aName = Name %like% "^A" )]
15
Exemple d’opérations par groupe
# faire des opérations par groupe avec .SD et .N :dtPokemon[, nrow(.SD) , by = LastEvolution]# ou dtPokemon[,.N, by =LastEvolution]
# sélectioner le pokemon le plus rapide pour les deux catégories d'évolutiondtPokemon[, .SD[which.max(Speed)] , by = LastEvolution]
16
Mettre à jours des observations
• Opérateur « := » pour :
– Créer des variables – Modifier des variables– Supprimer des variables
17
Exemple de modifications # 5. Mettre à jour des observations : data.frame et data.table ##### Créer une nouvelle variable
# avec un data frame dfPokemon$attackMin <- dfPokemon$AttackdfPokemon$attackMoyenne <- 15dfPokemon$attackMax <- dfPokemon$SpAttack
# modifier la variable si l'attaque spéciale est inférieur à l'attaque (normale) dfPokemon$attackMax[dfPokemon$SpAttack < dfPokemon$Attack] <- dfPokemon$Attack[dfPokemon$SpAttack < dfPokemon$Attack]
# avec un data tabledtPokemon$attackMin <- dtPokemon$AttackdtPokemon$attackMoyenne <- 15dtPokemon$attackMax <- dtPokemon$SpAttack# oudtPokemon[,attackMax := SpAttack]
18
Exemple de modifications # pour une modification :dtPokemon[SpAttack < Attack, attackMax := Attack]
# pour plusieurs modifications : dtPokemon[SpAttack < Attack, ':=' (attackMax=Attack, attackMin = SpAttack)]# oudtPokemon[SpAttack < Attack, c("attackMax","attackMin") := list(Attack,SpAttack)]
# # supprimer des variables: # # avec un data frame # dfPokemon$attackMax <- NULL# dtPokemon$attackMin <- NULL# dtPokemon$attackMoyenne <- NULL
# avec un data tabledtPokemon[,c("attackMax","attackMoyenne","attackMin") := NULL]
19
Conclusion
• Utiliser une bibliothèque permettant de• Selectionner• Filtrer• Grouper• Mettre à jour
De manière efficiente !!!
20
MERCIC’est tout… pour l’instant !!
21
Liens / CRAN• http://cran.r-project.org/web/packages/data.table/index.html
• http://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.pdf
top related