présentation de data.table

21
Introduction à data.table Timeri VECCELLA 1

Upload: francois-guillem

Post on 29-Jun-2015

484 views

Category:

Technology


0 download

DESCRIPTION

data.table est un package qui facilite et accélère les opérations de filtrage, création et mises à jours de variables et d'agrégation d'un tableau de donénes.

TRANSCRIPT

Page 1: Présentation de data.table

1

Introduction à data.table

Timeri VECCELLA

Page 2: Présentation de data.table

2

SÉLECTION DE DONNÉESSans data.table on pleure !

Page 3: Présentation de data.table

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

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

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

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

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

8

UTILISATIONS PRINCIPALESYoupi !

Page 9: Présentation de data.table

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

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

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

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

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

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

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

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

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

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

19

Conclusion

• Utiliser une bibliothèque permettant de• Selectionner• Filtrer• Grouper• Mettre à jour

De manière efficiente !!!

Page 20: Présentation de data.table

20

MERCIC’est tout… pour l’instant !!