Download - Présentation de data.table
![Page 1: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/1.jpg)
1
Introduction à data.table
Timeri VECCELLA
![Page 2: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/2.jpg)
2
SÉLECTION DE DONNÉESSans data.table on pleure !
![Page 3: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/3.jpg)
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
![Page 4: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/4.jpg)
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>]
![Page 5: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/5.jpg)
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")
![Page 6: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/6.jpg)
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
![Page 7: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/7.jpg)
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)]
![Page 8: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/8.jpg)
8
UTILISATIONS PRINCIPALESYoupi !
![Page 9: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/9.jpg)
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)
![Page 10: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/10.jpg)
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" ]
![Page 11: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/11.jpg)
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)]
![Page 12: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/12.jpg)
12
Grouper
• Sélectionner, filtrer, calculer par groupe (calculer des statistiques agrégées…)
data[<where>, <select>, by = <group>]
![Page 13: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/13.jpg)
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)
![Page 14: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/14.jpg)
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" )]
![Page 15: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/15.jpg)
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]
![Page 16: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/16.jpg)
16
Mettre à jours des observations
• Opérateur « := » pour :
– Créer des variables – Modifier des variables– Supprimer des variables
![Page 17: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/17.jpg)
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]
![Page 18: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/18.jpg)
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]
![Page 19: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/19.jpg)
19
Conclusion
• Utiliser une bibliothèque permettant de• Selectionner• Filtrer• Grouper• Mettre à jour
De manière efficiente !!!
![Page 20: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/20.jpg)
20
MERCIC’est tout… pour l’instant !!
![Page 21: Présentation de data.table](https://reader036.vdocuments.net/reader036/viewer/2022081421/559058ca1a28ab504b8b47b4/html5/thumbnails/21.jpg)
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