SlideShare una empresa de Scribd logo
1 de 21
Introduction à data.table
Timeri VECCELLA
1
SÉLECTION DE DONNÉES
Sans data.table on pleure !
2
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
3
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>]
4
Exemple selection
# installation de la librairie
install.packages("data.table")
# chargement de la librairie
library(data.table)
# chargement des données
load("C:/Users/Ve/Desktop/Raddicts/pokemon.rda")
5
Exemple selection
# 1. Selectionner : data.frame et data.table #############
# details / conversions :
class(data)
dfPokemon <- data
dtPokemon <- data.table(data)
class(dfPokemon)
class(dtPokemon)
# # details sur les données :
# dfPokemon
# dtPokemon
6
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 table
dtPokemon[Attack - Defense > 10 & Speed > 120 & LastEvolution, Name]
dtPokemon[Attack - Defense > 10 & Speed > 120 & LastEvolution,
list(Name,HP)]
7
UTILISATIONS PRINCIPALES
Youpi !
8
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)
9
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 table
dtPokemon[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 table
dtPokemon[ Name %like% "^A" ]
10
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)]
11
Grouper
• Sélectionner, filtrer, calculer par groupe
(calculer des statistiques agrégées…)
data[<where>, <select>, by = <group>]
12
.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)
13
Exemple d’opérations par groupe
# calculer une moyenne
dtPokemon[ , 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 keyby
dtPokemon[ , mean(Speed), keyby = list(LastEvolution, aName = Name %like% "^A" )]
14
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'évolution
dtPokemon[, .SD[which.max(Speed)] , by = LastEvolution]
15
Mettre à jours des observations
• Opérateur « := » pour :
– Créer des variables
– Modifier des variables
– Supprimer des variables
16
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$Attack
dfPokemon$attackMoyenne <- 15
dfPokemon$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 table
dtPokemon$attackMin <- dtPokemon$Attack
dtPokemon$attackMoyenne <- 15
dtPokemon$attackMax <- dtPokemon$SpAttack
# ou
dtPokemon[,attackMax := SpAttack]
17
Exemple de modifications
# pour une modification :
dtPokemon[SpAttack < Attack, attackMax := Attack]
# pour plusieurs modifications :
dtPokemon[SpAttack < Attack, ':=' (attackMax=Attack, attackMin = SpAttack)]
# ou
dtPokemon[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 table
dtPokemon[,c("attackMax","attackMoyenne","attackMin") := NULL]
18
Conclusion
• Utiliser une bibliothèque permettant de
• Selectionner
• Filtrer
• Grouper
• Mettre à jour
De manière efficiente !!!
19
MERCI
C’est tout… pour l’instant !!
20
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
21

Más contenido relacionado

La actualidad más candente

Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmiqueAbdoulaye Dieng
 
.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHPAbdoulaye Dieng
 
Csharp1 : quelques elements de base
Csharp1 :  quelques elements de baseCsharp1 :  quelques elements de base
Csharp1 : quelques elements de baseAbdoulaye Dieng
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...ECAM Brussels Engineering School
 
Programmation fonctionnelle
Programmation fonctionnelleProgrammation fonctionnelle
Programmation fonctionnelleGeeks Anonymes
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmiqueAbdoulaye Dieng
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptAbdoulaye Dieng
 
Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchronesAbdoulaye Dieng
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptAbdoulaye Dieng
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreECAM Brussels Engineering School
 

La actualidad más candente (17)

R Devtools
R DevtoolsR Devtools
R Devtools
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Csharp1 : quelques elements de base
Csharp1 :  quelques elements de baseCsharp1 :  quelques elements de base
Csharp1 : quelques elements de base
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...
 
Programmation fonctionnelle
Programmation fonctionnelleProgrammation fonctionnelle
Programmation fonctionnelle
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Introduction à jQuery
Introduction à jQueryIntroduction à jQuery
Introduction à jQuery
 
Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchrones
 
Programmation Fonctionnelle
Programmation FonctionnelleProgrammation Fonctionnelle
Programmation Fonctionnelle
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Arbre et algorithme de recherche
Arbre et algorithme de rechercheArbre et algorithme de recherche
Arbre et algorithme de recherche
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
Introduction au Jquery
Introduction au JqueryIntroduction au Jquery
Introduction au Jquery
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbre
 

Destacado

Plutniak maisonobe resto atelier2-network
Plutniak maisonobe resto atelier2-networkPlutniak maisonobe resto atelier2-network
Plutniak maisonobe resto atelier2-networkMarion Maisonobe
 
Analyse de données avec R : Une petite introduction
Analyse de données avec R : Une petite introductionAnalyse de données avec R : Une petite introduction
Analyse de données avec R : Une petite introductionAhmadou DICKO
 
Social Media ROI - Retour Sur Investissement des media sociaux : 15 choses à ...
Social Media ROI - Retour Sur Investissement des media sociaux : 15 choses à ...Social Media ROI - Retour Sur Investissement des media sociaux : 15 choses à ...
Social Media ROI - Retour Sur Investissement des media sociaux : 15 choses à ...Emmanuel Vivier
 
04 Introduction au logiciel R
04 Introduction au logiciel R04 Introduction au logiciel R
04 Introduction au logiciel RBoris Guarisma
 
Estrategia Semanal de Cortal Consors
Estrategia Semanal de Cortal ConsorsEstrategia Semanal de Cortal Consors
Estrategia Semanal de Cortal ConsorsSalainversion
 
Dialnet tanger maroc-3244116
Dialnet tanger maroc-3244116Dialnet tanger maroc-3244116
Dialnet tanger maroc-3244116DRISS ELQALBI
 
CEEI NCA - Agenda Octobre 2014
CEEI NCA - Agenda Octobre 2014CEEI NCA - Agenda Octobre 2014
CEEI NCA - Agenda Octobre 2014CEEI NCA
 
Présentation équipe richard duvauchelle
Présentation équipe richard duvauchellePrésentation équipe richard duvauchelle
Présentation équipe richard duvauchellerichardduvauchelle2014
 
Sangrados anormales en ginecología
Sangrados anormales en ginecologíaSangrados anormales en ginecología
Sangrados anormales en ginecologíaManuel Ayala
 
Dossier de presse de la 9e édition du Festival Bargny Rythmes Sur Mer 2014
Dossier de presse de la 9e édition du Festival Bargny Rythmes Sur Mer 2014Dossier de presse de la 9e édition du Festival Bargny Rythmes Sur Mer 2014
Dossier de presse de la 9e édition du Festival Bargny Rythmes Sur Mer 2014Ibra Seck Cassis
 
192739 mouette
192739 mouette192739 mouette
192739 mouettemaryconte
 
Rencontre économique du diocèse d'angoulême 19 septembre 2014
Rencontre économique du diocèse d'angoulême   19 septembre 2014Rencontre économique du diocèse d'angoulême   19 septembre 2014
Rencontre économique du diocèse d'angoulême 19 septembre 2014Diocèse d'Angoulême
 
Una bella mujer JULIA URBIÑA
Una bella mujer JULIA URBIÑAUna bella mujer JULIA URBIÑA
Una bella mujer JULIA URBIÑABenito Peñate
 
Voyance audiotel
Voyance audiotelVoyance audiotel
Voyance audiotelEva Voyance
 
Classement général Pronodix
Classement général PronodixClassement général Pronodix
Classement général Pronodixbenjaave
 
Instituci%C3%B3n%20 Educativa%20 Municipal%20 Luis%20 Eduardo%20 Mora%20 Osej...
Instituci%C3%B3n%20 Educativa%20 Municipal%20 Luis%20 Eduardo%20 Mora%20 Osej...Instituci%C3%B3n%20 Educativa%20 Municipal%20 Luis%20 Eduardo%20 Mora%20 Osej...
Instituci%C3%B3n%20 Educativa%20 Municipal%20 Luis%20 Eduardo%20 Mora%20 Osej...diana
 

Destacado (20)

Plutniak maisonobe resto atelier2-network
Plutniak maisonobe resto atelier2-networkPlutniak maisonobe resto atelier2-network
Plutniak maisonobe resto atelier2-network
 
Analyse de données avec R : Une petite introduction
Analyse de données avec R : Une petite introductionAnalyse de données avec R : Une petite introduction
Analyse de données avec R : Une petite introduction
 
Atelier r-gerad
Atelier r-geradAtelier r-gerad
Atelier r-gerad
 
Social Media ROI - Retour Sur Investissement des media sociaux : 15 choses à ...
Social Media ROI - Retour Sur Investissement des media sociaux : 15 choses à ...Social Media ROI - Retour Sur Investissement des media sociaux : 15 choses à ...
Social Media ROI - Retour Sur Investissement des media sociaux : 15 choses à ...
 
04 Introduction au logiciel R
04 Introduction au logiciel R04 Introduction au logiciel R
04 Introduction au logiciel R
 
Estrategia Semanal de Cortal Consors
Estrategia Semanal de Cortal ConsorsEstrategia Semanal de Cortal Consors
Estrategia Semanal de Cortal Consors
 
Dialnet tanger maroc-3244116
Dialnet tanger maroc-3244116Dialnet tanger maroc-3244116
Dialnet tanger maroc-3244116
 
CEEI NCA - Agenda Octobre 2014
CEEI NCA - Agenda Octobre 2014CEEI NCA - Agenda Octobre 2014
CEEI NCA - Agenda Octobre 2014
 
Présentation équipe richard duvauchelle
Présentation équipe richard duvauchellePrésentation équipe richard duvauchelle
Présentation équipe richard duvauchelle
 
Softwaresocial
SoftwaresocialSoftwaresocial
Softwaresocial
 
Pi3 7538
Pi3 7538Pi3 7538
Pi3 7538
 
Sangrados anormales en ginecología
Sangrados anormales en ginecologíaSangrados anormales en ginecología
Sangrados anormales en ginecología
 
Web 3
Web 3Web 3
Web 3
 
Dossier de presse de la 9e édition du Festival Bargny Rythmes Sur Mer 2014
Dossier de presse de la 9e édition du Festival Bargny Rythmes Sur Mer 2014Dossier de presse de la 9e édition du Festival Bargny Rythmes Sur Mer 2014
Dossier de presse de la 9e édition du Festival Bargny Rythmes Sur Mer 2014
 
192739 mouette
192739 mouette192739 mouette
192739 mouette
 
Rencontre économique du diocèse d'angoulême 19 septembre 2014
Rencontre économique du diocèse d'angoulême   19 septembre 2014Rencontre économique du diocèse d'angoulême   19 septembre 2014
Rencontre économique du diocèse d'angoulême 19 septembre 2014
 
Una bella mujer JULIA URBIÑA
Una bella mujer JULIA URBIÑAUna bella mujer JULIA URBIÑA
Una bella mujer JULIA URBIÑA
 
Voyance audiotel
Voyance audiotelVoyance audiotel
Voyance audiotel
 
Classement général Pronodix
Classement général PronodixClassement général Pronodix
Classement général Pronodix
 
Instituci%C3%B3n%20 Educativa%20 Municipal%20 Luis%20 Eduardo%20 Mora%20 Osej...
Instituci%C3%B3n%20 Educativa%20 Municipal%20 Luis%20 Eduardo%20 Mora%20 Osej...Instituci%C3%B3n%20 Educativa%20 Municipal%20 Luis%20 Eduardo%20 Mora%20 Osej...
Instituci%C3%B3n%20 Educativa%20 Municipal%20 Luis%20 Eduardo%20 Mora%20 Osej...
 

Similar a Présentation de data.table

Algorithme distribués pour big data saison 2 @DevoxxFR 2016
Algorithme distribués pour big data saison 2 @DevoxxFR 2016Algorithme distribués pour big data saison 2 @DevoxxFR 2016
Algorithme distribués pour big data saison 2 @DevoxxFR 2016Duyhai Doan
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introOlivier Mallassi
 
Java Database Connectivity
Java Database ConnectivityJava Database Connectivity
Java Database ConnectivityKorteby Farouk
 
Deep Learning on Apache Spark: TensorFrames & Deep Learning Pipelines
Deep Learning on Apache Spark: TensorFrames & Deep Learning Pipelines Deep Learning on Apache Spark: TensorFrames & Deep Learning Pipelines
Deep Learning on Apache Spark: TensorFrames & Deep Learning Pipelines Databricks
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications JavaAntoine Rey
 
Analyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL ServeurAnalyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL ServeurMicrosoft Technet France
 
Data Mining (Partie 2).pdf
Data Mining (Partie 2).pdfData Mining (Partie 2).pdf
Data Mining (Partie 2).pdfOuailChoukhairi
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanMicrosoft
 
ArrayList et LinkedList sont dans un bateau
ArrayList et LinkedList sont dans un bateauArrayList et LinkedList sont dans un bateau
ArrayList et LinkedList sont dans un bateauJosé Paumard
 

Similar a Présentation de data.table (20)

Algorithme distribués pour big data saison 2 @DevoxxFR 2016
Algorithme distribués pour big data saison 2 @DevoxxFR 2016Algorithme distribués pour big data saison 2 @DevoxxFR 2016
Algorithme distribués pour big data saison 2 @DevoxxFR 2016
 
Crud
CrudCrud
Crud
 
Présentation nouveauté java7
Présentation nouveauté java7Présentation nouveauté java7
Présentation nouveauté java7
 
Theme 7
Theme 7Theme 7
Theme 7
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
 
Présentation de ISP 7.1 (ex TSM)
Présentation de ISP 7.1 (ex TSM)Présentation de ISP 7.1 (ex TSM)
Présentation de ISP 7.1 (ex TSM)
 
Ruby Pour RoR
Ruby Pour RoRRuby Pour RoR
Ruby Pour RoR
 
Hello mongo
Hello mongoHello mongo
Hello mongo
 
Java Database Connectivity
Java Database ConnectivityJava Database Connectivity
Java Database Connectivity
 
Deep Learning on Apache Spark: TensorFrames & Deep Learning Pipelines
Deep Learning on Apache Spark: TensorFrames & Deep Learning Pipelines Deep Learning on Apache Spark: TensorFrames & Deep Learning Pipelines
Deep Learning on Apache Spark: TensorFrames & Deep Learning Pipelines
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
oracle : le PL-SQL
oracle : le PL-SQLoracle : le PL-SQL
oracle : le PL-SQL
 
Analyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL ServeurAnalyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL Serveur
 
Cours3 gdm sql
Cours3 gdm sqlCours3 gdm sql
Cours3 gdm sql
 
Data Mining (Partie 2).pdf
Data Mining (Partie 2).pdfData Mining (Partie 2).pdf
Data Mining (Partie 2).pdf
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
 
Sql
SqlSql
Sql
 
Tp-jquery
Tp-jqueryTp-jquery
Tp-jquery
 
ArrayList et LinkedList sont dans un bateau
ArrayList et LinkedList sont dans un bateauArrayList et LinkedList sont dans un bateau
ArrayList et LinkedList sont dans un bateau
 
C# 7 - Nouveautés
C# 7 - NouveautésC# 7 - Nouveautés
C# 7 - Nouveautés
 

Más de François Guillem

Cartographie interactive avec R
Cartographie interactive avec RCartographie interactive avec R
Cartographie interactive avec RFrançois Guillem
 
Cartographie politique avec R
Cartographie politique avec RCartographie politique avec R
Cartographie politique avec RFrançois Guillem
 
Outils cartographiques et en statistique spatiale sur R
Outils cartographiques et en statistique spatiale sur ROutils cartographiques et en statistique spatiale sur R
Outils cartographiques et en statistique spatiale sur RFrançois Guillem
 

Más de François Guillem (6)

Ltv r addicts
Ltv r addictsLtv r addicts
Ltv r addicts
 
Cartographie interactive avec R
Cartographie interactive avec RCartographie interactive avec R
Cartographie interactive avec R
 
Cartographie politique avec R
Cartographie politique avec RCartographie politique avec R
Cartographie politique avec R
 
Outils cartographiques et en statistique spatiale sur R
Outils cartographiques et en statistique spatiale sur ROutils cartographiques et en statistique spatiale sur R
Outils cartographiques et en statistique spatiale sur R
 
CaRtogRaphie avec R
CaRtogRaphie avec RCaRtogRaphie avec R
CaRtogRaphie avec R
 
Meetup raddicts reshape2
Meetup raddicts reshape2Meetup raddicts reshape2
Meetup raddicts reshape2
 

Présentation de data.table

  • 2. SÉLECTION DE DONNÉES Sans data.table on pleure ! 2
  • 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 3
  • 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>] 4
  • 5. Exemple selection # installation de la librairie install.packages("data.table") # chargement de la librairie library(data.table) # chargement des données load("C:/Users/Ve/Desktop/Raddicts/pokemon.rda") 5
  • 6. Exemple selection # 1. Selectionner : data.frame et data.table ############# # details / conversions : class(data) dfPokemon <- data dtPokemon <- data.table(data) class(dfPokemon) class(dtPokemon) # # details sur les données : # dfPokemon # dtPokemon 6
  • 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 table dtPokemon[Attack - Defense > 10 & Speed > 120 & LastEvolution, Name] dtPokemon[Attack - Defense > 10 & Speed > 120 & LastEvolution, list(Name,HP)] 7
  • 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) 9
  • 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 table dtPokemon[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 table dtPokemon[ Name %like% "^A" ] 10
  • 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)] 11
  • 12. Grouper • Sélectionner, filtrer, calculer par groupe (calculer des statistiques agrégées…) data[<where>, <select>, by = <group>] 12
  • 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) 13
  • 14. Exemple d’opérations par groupe # calculer une moyenne dtPokemon[ , 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 keyby dtPokemon[ , mean(Speed), keyby = list(LastEvolution, aName = Name %like% "^A" )] 14
  • 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'évolution dtPokemon[, .SD[which.max(Speed)] , by = LastEvolution] 15
  • 16. Mettre à jours des observations • Opérateur « := » pour : – Créer des variables – Modifier des variables – Supprimer des variables 16
  • 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$Attack dfPokemon$attackMoyenne <- 15 dfPokemon$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 table dtPokemon$attackMin <- dtPokemon$Attack dtPokemon$attackMoyenne <- 15 dtPokemon$attackMax <- dtPokemon$SpAttack # ou dtPokemon[,attackMax := SpAttack] 17
  • 18. Exemple de modifications # pour une modification : dtPokemon[SpAttack < Attack, attackMax := Attack] # pour plusieurs modifications : dtPokemon[SpAttack < Attack, ':=' (attackMax=Attack, attackMin = SpAttack)] # ou dtPokemon[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 table dtPokemon[,c("attackMax","attackMoyenne","attackMin") := NULL] 18
  • 19. Conclusion • Utiliser une bibliothèque permettant de • Selectionner • Filtrer • Grouper • Mettre à jour De manière efficiente !!! 19
  • 20. MERCI C’est tout… pour l’instant !! 20
  • 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 21