SlideShare une entreprise Scribd logo
Extraire, transformer et
repr´esenter la social data avec R
Premi`ere partie
jean jacques gauguier S´eance 1 janvier 2018 1 / 216
Introduction g´en´erale du cours
Ce cours permet aux ´etudiants de se familiariser avec les donn´ees capturant la
mani`ere dont les individus interagissent sur les r´eseaux sociaux.
Les techniques utilisent le logiciel r et diff´erentes de ses librairies. Chaque ´etudiant devra
installer sur sa machine r, l’environnement de travail Rstudio
(https://www.rstudio.com/) et les biblioth`eques n´ecessaires.
Le cours est construit sur 6 s´eances. Id´ealement, chaque s´eance sera d´ecoup´e de la
sorte:
matin: pr´esentation et d´emonstration du code r
apr`es-midi: mise en application des ´el´ements
A la fin du cours, chaque ´etudiant devra pr´esenter une analyse autour de social data de
son choix.
jean jacques gauguier S´eance 1 janvier 2018 2 / 216
plan (du cours
le contenu du cours est le suivant:
PREMIERE PARTIE
S´eance 1: social data et extraction de la social data avec r
S´eance 2: manipuler les donn´ees dans r
S´eance 3: repr´esenter les donn´ees dans r
SECONDE PARTIE
S´eance 4: les basiques du text mining dans r
S´eance 5: l’analyse de sentiment avec r
S´eance 6: le nlp avec r
jean jacques gauguier S´eance 1 janvier 2018 3 / 216
ressources
Le cours est bas´e sur plusieurs ouvrages r´ecents et consultables en ligne:
R for Data Science, Wickham & Grolemund, O’Reilly, 2017, disponible en ligne:
http://r4ds.had.co.nz/
Advanced R, Wickham, CRC Press, 2014, disponible en ligne:
https://adv-r.hadley.nz/
Data Visualization for Social Science, Healy, forthcoming, Princeton University
Press, disponible en ligne: http://socviz.co/
Cookbook for R, Chang, O’Reilly, 2013, seconde ´edition, disponible en ligne:
http://www.cookbook-r.com/
Text Mining with R, Silge & Robinson, O’Reilly, 2017, disponible en ligne:
https://www.tidytextmining.com/
Introduction `a la programmation en R, Goulet, 2016, cinqui`eme ´edition:
https://cran.r-project.org/doc/contrib/Goulet introduction programmation R.pdf
The Art of R Programming, Matloff, 2011, no starch press,
http://www.freetechbooks.com/the-art-of-r-programming-t1087.html
Speech and Language Processing, Jurafsky et Martin, 2017,
https://web.stanford.edu/ jurafsky/slp3/
jean jacques gauguier S´eance 1 janvier 2018 4 / 216
ressources hors ouvrages
En dehors de ces ouvrages, diff´erentes ressources peuvent ˆetre int´eressantes:
la documentation sur la suite tidyverse: https://www.tidyverse.org/
les cheatsheets `a t´el´echarger sur le site de rstudio:
https://www.rstudio.com/resources/cheatsheets/
le site de Hadley Wickham: http://hadley.nz/
le blog de thinkR: https://thinkr.fr/le-blog/
le m´eta blog r-bloggers.com: https://www.r-bloggers.com/
le blog de David Robinson: http://varianceexplained.org/
le blog de Julia Silge: https://juliasilge.com/blog/
le blog Rstudio: https://blog.rstudio.com
sur twitter le hastag #rstats
jean jacques gauguier S´eance 1 janvier 2018 5 / 216
ressources th´eoriques
Mis `a part quelques incursions, le cours n’est pas un cours de datascience. Pour les
´etudiants d´esireux d’acqu´erir les techniques de base de la datascience, deux ouvrages de
base pourront ˆetre consult´es:
The Elements of Statistical Learning, Hastie, Tibshirani & Friedman , Springer,
seconde edition 2008 : https://web.stanford.edu/ hastie/Papers/ESLII.pdf
An Introduction to Statistical Learning with Applications in R, James, Witten,
Hastie & Tibshirani, Springer, sixi`eme edition 2013 :
http://www-bcf.usc.edu/ gareth/ISL/
Concernant le deep learning et R, ce blog (https://tensorflow.rstudio.com/blog.html)
est une source int´eressante en lien avec cet ouvrage r´ecent:
https://www.manning.com/books/deep-learning-with-r.
jean jacques gauguier S´eance 1 janvier 2018 6 / 216
s´eance 1: social data et introduction `a R
jean jacques gauguier
janvier 2018
jean jacques gauguier S´eance 1 janvier 2018 7 / 216
la social data
jean jacques gauguier S´eance 1 janvier 2018 8 / 216
du big data `a la social data
Le big data, une vari´et´e des donn´ees grandissante:
des donn´ees structur´ees (cat´egorielles car l’ensemble des valeurs
possibles est connue `a l’avance) qui peuvent facilement ˆetre int´egr´ees
dans des bases de donn´ees relationnelles
des donn´ees semi-structur´ees (format json, xml) qui proviennent
des api (google api, twitter api, etc. . . )
des donn´ees non-structur´ees (texte, images, vid´eos) qui sont
impossibles `a cat´egoriser `a priori et qui n´ecessitent un traitement
sp´ecifique (ex traitement des images)
jean jacques gauguier S´eance 1 janvier 2018 9 / 216
big data landscape
Figure: big data landscape 2017, http://mattturck.com/bigdata2017/
jean jacques gauguier S´eance 1 janvier 2018 10 / 216
du big data `a la social data
Le big data, une production de donn´ees qui s’acc´el`ere:
Selon IBM, chaque jour nous g´en´erons 2,5 trillions d’octets de
donn´ees
90% des donn´ees dans le monde ont ´et´e cr´e´ees au cours des deux
derni`eres ann´ees seulement
Ces donn´ees proviennent par exemple:
des diff´erents capteurs utilis´es pour collecter les informations
(automobile et habitat)
des enregistrements transactionnels d’achats en ligne
des signaux GPS des t´el´ephones mobiles
les traces laiss´ees sur les r´eseaux sociaux = social data
jean jacques gauguier S´eance 1 janvier 2018 11 / 216
la social data
la social data peut ˆetre d´efinie comme ´etant toutes les formes de donn´ees
capturant la mani`ere dont les individus interagissent sur les r´eseaux sociaux.
Figure: Data Never Sleeps 5.0, https://www.domo.com/learn/data-never-sleeps-5
jean jacques gauguier S´eance 1 janvier 2018 12 / 216
les principales caract´eristiques de la social data
une donn´ee prot´eiforme
La social data peut ˆetre une donn´ee chiffr´ee (likes, shares), du text
(commentaires), des ´emojis, des photos ou encore des vid´eos
une donn´ee ”difficile” `a traiter
La social data est une mati`ere premi`ere `a manipuler avec pr´ecaution:
des m´etriques rarement harmonis´ees entre les plate formes
des donn´ees textuelles n´ecessitant de lourdes phases de pr´etraitement
(la pauvret´e dans l’abondance)
jean jacques gauguier S´eance 1 janvier 2018 13 / 216
la cr´eation, l’extraction et le traitement de la social data
social data
cr´eation extraction analyse
texte, photo,
vid´eo
r´eactions
autres types de
donn´ees
plateforme so-
cial media
listening
m´ethode ad
hoc
brokers
s´election
pr´e-traitement
analyse
insight
jean jacques gauguier S´eance 1 janvier 2018 14 / 216
l’analyse de la social data (adapt´e de wikip´edia)
A partir de donn´ees collect´ees au sein des r´eseaux sociaux, globalement
l’analyse de la social data cherche `a comprendre la mani`ere dont des
interactions entre les individus s’effectuent, la mani`ere dont l’information
cirucule au sein des r´eseaux sociaux. Des analyses sp´ecifiques peuvent
porter sur:
la mesure de la performance des ´el´ements publi´es
la compr´ehension des m´ecanismes de viralit´e
l’identification des influenceurs
l’identification de sujet (ex: suivi de crise social m´edia
...
En r´esum´e, l’analyse de la social data vise `a identifier certaines
caract´eristiques ”cach´ees” dans la social data.
jean jacques gauguier S´eance 1 janvier 2018 15 / 216
une diversit´e croissante de la social data
Toujours plus de donn´ees `a capturer potentiellement
Figure:
http://www.slate.fr/story/114629/facebook-nouveaux-boutons-reaction-data
jean jacques gauguier S´eance 1 janvier 2018 16 / 216
des donn´ees en libre acc`es...dans un environnement
mouvant
Les contours des donn´ees r´ecoltables ´evoluent constamment du fait des ajouts et des
retraits des donn´ees. Avec l’utilisation crissante du m´edia au sein des r´eseau sociaux et
le soucis de mon´etiser les donn´ees, les plateformes sont de plus en plus tent´ees de
r´eduire l’offre de donn´ees en libre acc`es.
l’api des donn´ees propri´etaires
les consoles insight l’api en libre acc`es
jean jacques gauguier S´eance 1 janvier 2018 17 / 216
l’int´erˆet de collecter des donn´ees libres d’acc`es
A partir de ces donn´ees, il est possible :
d’effectuer des veilles sur un sujet (ex: suivre une crise sur twitter),
de mesurer l’activit´e des diff´erents comptes (ex: suivre une campagne sur fb),
d’effectuer des analyses textuelles (titre des posts, titre des tweets, analyse des
commentaires ,...).
donn´ees publiques
r´ecolter
des m´eta-donn´ees
r´ecolter
des donn´ees d’activit´e
suivre un
sujet sur twitter
jean jacques gauguier S´eance 1 janvier 2018 18 / 216
les m´eta-donn´ees et les donn´ees d’activit´e
Parmi les donn´ees libres d’acc`es, il est possible de distinguer entre:
les m´eta-donn´ees: le nombre de likes d’une page FB, le nombre de followers d’un
compte twitter, le nombre d’abonn´es et de vues depuis la cr´eation d’une chaˆıne YT
les donn´ees d’activit´e:
des donn´ees de publications d’une page FB, d’un compte twitter et le
nombre de vid´eo h´eberg´ees sur une chaˆıne YT.
des donn´ees engagement: likes, comments, shares et facebook
reactions sur FB, retweets sur twitter et likes sur YT
id d’un compte
m´eta-donn´ees
facebook,
twitter,
youtube
donn´ees d’activit´es
facebook,
twitter,
youtube
jean jacques gauguier S´eance 1 janvier 2018 19 / 216
un autre int´erˆet des donn´ees libre d’acc`es: suivre l’int´erˆet
d’un sujet sur twitter
Twitter permet d’obtenir des donn´ees en libre acc`es via deux api distinctes:
api rest: permet de remonter sur les 8 derniers jours les tweets mentionnant un
hashtag ou plus g´en´eralement un terme particulier
api streaming twitter: permet de capturer en temps r´eel une partie des
conversations sur twitter mentionnant un hashtag ou un terme particulier
# hastags
api rest twitter api streaming twitter
jean jacques gauguier S´eance 1 janvier 2018 20 / 216
les modalit´es d’extraction de la social data
social data
les consoles insight l’api propri´etaire l’api publique
scripts ad hoc
extracteurs
scripts ad hoc
extracteurs
Diff´erentes solutions existent donc pour capturer de ”la social data” en libre acc`es.
jean jacques gauguier S´eance 1 janvier 2018 21 / 216
les outils d’extraction de la social data via les api
api social
data
les extracteurs les etl la programmation
next analytics
datagrabber
...
talend
dataiku dss
...
python
r
...
Les d´eveloppeurs s’appuient sur la documentation et l’existant (librairies, scripts
d’extraction et packages cr´ees,...)
jean jacques gauguier S´eance 1 janvier 2018 22 / 216
pourquoi privil´egier r pour travailler avec la social data?
Pourquoi r?
avec Python r est le langage le plus utilis´e en ”datascience”
il existe un environnement de d´eveloppement appel´e RStudio qui
permet de travailler facilement dans l’environnement R
il existe une documentation abondante sur r (livres en ligne, blogs,
stackoverflow, etc...)
de nombreux packages r permettant d’importer, transformer analyser
et mod´eliser les donn´ees sont continuellement d´evelopp´es et mis `a jour
des packages r permettant d’extraire facilement des donn´ees via les
api publiques existent
jean jacques gauguier S´eance 1 janvier 2018 23 / 216
les principaux packages d’extraction de la social data dans r
plateforme social m´edia et
package(s) associ´es
1 Facebook → Rfacebook
2 Twitter → streamR,
twitteR, rtweets
3 (Youtube → tuber)
4 (Instagram → instaR)
5 (Google Trends → Gtrends)
6 ....
Pour les plateformes social m´edia
les plus utilis´ees, un ou plusieurs
packages r existent. Ces packages
s’apparentent `a des interfaces
permettant d’utiliser les api des
plateformes sans en ´ecrire les
requˆetes. Bien souvent il s’agira
d’appeler une fonction du package
afin de r´ecup´erer des donn´ees
particuli`eres. A noter qu’il existe
un m´etapackage appel´e Social
Media Lab.
jean jacques gauguier S´eance 1 janvier 2018 24 / 216
extraire la social data avec des packages r
jean jacques gauguier S´eance 1 janvier 2018 25 / 216
configurer l’environnement de travail
installer
r studio
et r
installer
package
cr´eer les
appli-
cations
installer rstudio:
https://www.rstudio.com/products/rstudio/download/
installer package (cf. console Rstudio ou github du package)
cr´eer les applications pour les plateformes:
facebook: https://developers.facebook.com/docs/apps/register
twitter: https://apps.twitter.com/
youtube: https://developers.google.com/
Pour instagram si un package existe (instaR) les changements des conditions
d’utilisation de l’api limitent aujourd’hui l’int´erˆet d’utiliser ce package.
jean jacques gauguier S´eance 1 janvier 2018 26 / 216
installer r studio
pr´e-requis: installer r: https://cran.rstudio.com/
avant d’installer r studio desktop `a l’adresse suivante:
https://www.rstudio.com/products/rstudio/download/#download
Figure: https://www.rstudio.com/products/rstudio/download/#download
jean jacques gauguier S´eance 1 janvier 2018 27 / 216
installer les packages r (via rstudio)
A partir de rstudio installer les packages via Rstudio: ggplot2, dplyr, jsonlite, lda, lsa,
openNLP, plyr, purr, quanteda, RCurl, readr, readxl, lubridate,Rfacebook, rJava,
rlang, rvest, stringi, stringr, tensorflow, tibble, tidytext, tidyselect, tidyverse, tm,
tokenizers, topicmodels, twitteR, vkR, streamR et rtweets.
Figure: online learning: https://www.rstudio.com/online-learning/#R
jean jacques gauguier S´eance 1 janvier 2018 28 / 216
cr´eer des applications
Pour acc´eder aux donn´ees, il est n´ecessaire d’ˆetre authentifier souvent via un protocole
d’acc`es Oauth 2.0. Ce protocole a de nombreuses variantes mais globalement le sch´ema
est identique: une application permet `a l’utilisateur d’obtenir des jetons
d’authentification (tokens) pour s’identifier et acc´eder aux ressources.
jean jacques gauguier S´eance 1 janvier 2018 29 / 216
utilisation des identifiants
Google, Facebook et Twitter ont mis en place des m´ethodes simples de cr´eation
d’application. La cr´eation de l’application g´en`ere des identifiants que nous utiliserons
dans r pour acc´eder aux ressources des apis. R´ecemment des plateformes comme
instagram ont mis en place des process de review avant d’autoriser une application.
je cr´ee
une ap-
plication
par plate-
forme
j’obtiens
des iden-
tifiants
je
m’identifie
via les
packages
r pour
acc´eder
aux
ressources
jean jacques gauguier S´eance 1 janvier 2018 30 / 216
cr´eer une application facebook
https://developers.facebook.com/docs/apps/register
Pr´e-requis: avoir un compte FB et ˆere connect´e `a FB
jean jacques gauguier S´eance 1 janvier 2018 31 / 216
visualiser ses identifiants de l’app facebook
Une fois l’application cr´ee, l’application g´en`ere deux ´el´ements:
APP ID
APP Secret
Ce sont de ces identifiants qui nous permettrons de nous connecter `a l’api facebook via
le package Rfacebook.
Figure: https://developers.facebook.com/apps/xxxxxxxxxxxxxxxx/dashboard/
jean jacques gauguier S´eance 1 janvier 2018 32 / 216
cr´eer une application twitter: https://apps.twitter.com
Pr´e-requis: avoir un compte twitter, ˆetre connect´e `a twitter et...fournir son num´ero de
mobile
jean jacques gauguier S´eance 1 janvier 2018 33 / 216
visualiser ses identifiants de l’app twitter
Une fois l’application cr´ee, l’application g´en`ere quatre ´el´ements:
Consumer Key (API Key)
Consumer Secret (API Secret)
Access Token
Acess Token Secret
Ce sont de ces identifiants qui nous permettrons de nous connecter `a l’api twitter via les
packages twitteR et streamR.
jean jacques gauguier S´eance 1 janvier 2018 34 / 216
pr´esentation et utilisation du package Rfacebook
A chaque information correspond une requˆete particuli`ere qu’il faut parfois optimiser
avec diff´erents param`etres.
R facebook
my graph fb graph fb
mes publica-
tions
mes amis
publications
d’une page
informations
sur un post
commentaires
d’un post
replies dans un
post
jean jacques gauguier S´eance 1 janvier 2018 35 / 216
initialisation de Rfacebook
Example (Code)
library(Rfacebook)
fb_oauth <- fbOAuth(app_id="xxxxxxxxxxxx",
app_secret="xxxxxxxxxxxxx")
save(fb_oauth, file="fb_oauth")
load("fb_oauth")
me <- getUsers("me", token=fb_oauth)
me$username
Une fois ce code ex´ecut´e une fenˆetre du navigateur s’ouvre et valide la
connexion `a l’api.
jean jacques gauguier S´eance 1 janvier 2018 36 / 216
obtenir les publications d’une page: la fonction ”getPage”
Example (Code)
# exemple 1
extract_salomonrunning<-getPage(page="salomonrunning",
token=fb_oauth, n =1000, feed = FALSE,
reactions = FALSE)
# exemple 2
extract_suunto<-getPage(page="Suunto", token=fb_oauth,
n =10, feed = TRUE , reactions = TRUE, verbose = TRUE)
# exemple 3
extract_rossignol<-getPage(page="rossignol", token=fb_oauth,
n = 3000, since=’2017/01/01’, until=’2017/12/31’,
feed = FALSE, reactions = TRUE)
jean jacques gauguier S´eance 1 janvier 2018 37 / 216
les param`etres de la fonction ”getPage”
La fonction ”getPage” poss`ede les param`etres suivants:
page: un id de page facebook
token: OAuth token cr´e´e avec fbOAuth
n: le nombre de posts souhait´e
since: d´ebut de la p´eriode d’extraction souhait´ee. ex: ’2017/01/01’
until fin de la p´eriode d’extraction souhait´ee. ex: ’2017/12/01’
feed: capture des posts non officiels (true/false)
reactions: ajout des facebook r´eactions `a l’extract par d´efaut
(true/false)
verbose: ajout d’un compteur du nombre de posts captur´es
(true/false)
api: version de l’api utilis´ee (true/false)
jean jacques gauguier S´eance 1 janvier 2018 38 / 216
le r´esultat de la fonction ”getPage”
Une fois la requˆete ex´ecut´ee, les donn´ees sont directement obtenues sous la forme d’un
dataframe.
jean jacques gauguier S´eance 1 janvier 2018 39 / 216
obtenir les commentaires d’une publication: la fonction
”getPage”
Example (la proc´edure s’effectue en trois temps)
#1 extraction des publications d’une page
extract_salomonrunning<-getPage(page="salomonrunning",
token=fb_oauth, n =1000, feed = FALSE,
reactions = FALSE)
#2 extraction des commentaires d’un post
sr_1<-getPost(extract_salomonrunning$id[1], token=fb_oauth,
n=500, comments = TRUE,reactions = FALSE)
#3 cr´eation d’un dataframe
sr_1<-jsonlite::flatten(sr_1$comments[c("from_id",
"from_name","message", "created_time","likes_count",
"comments_count", "id")])
sr_1<-as.data.frame(sr_1)
jean jacques gauguier S´eance 1 janvier 2018 40 / 216
le r´esultat de la fonction ”getPost”
Une fois la requˆete ex´ecut´ee, il faut transformer les donn´ees afin d’obtenir un dataframe.
Par ailleurs, il est n´ecessaire de cr´eer une boucle afin de capturer les commentaires sur
l’ensemble des posts.
jean jacques gauguier S´eance 1 janvier 2018 41 / 216
les param`etres de la fonction ”getPost”
La fonction ”getPage” poss`ede les param`etres suivants:
post: un Id de post
token: OAuth token cr´e´e avec fbOAuth
n: le nombre maximum de commentaires `a capturer
comments: extraction du nombre de commentaires obtenus par les
commentaires
likes: extraction des likes obtenus par les commentaires
reactions: ajout des facebook r´eactions `a l’extract par d´efaut
n.likes: nombre max de likes
n.comments: nombre max de comments
n.reactions: nombre max de reactions
api: version de l’api utilis´ee
jean jacques gauguier S´eance 1 janvier 2018 42 / 216
obtenir les replies `a un commentaire d’une publication: la
fonction ”getCommentReplies”
Example (la proc´edure s’effectue en plusieurs temps)
#1 extraction des publications d’une page
extract_salomonrunning<-getPage(page="salomonrunning",
token=fb_oauth, n =1000, feed = FALSE,
reactions = FALSE)
#2 extraction des commentaires d’un post
sr_1<-getPost(extract_salomonrunning$id[1], token=fb_oauth,
n=500, comments = TRUE,reactions = FALSE)
#3 extraction des replies d’un commentaire
rp_1<-getCommentReplies(sr_1$id[1], token=fb_oauth, n = 500, replies = TRUE,
likes = TRUE, api = NULL)
#4 transformation
rp_1<- jsonlite::flatten(rp_1$replies[c("from_id", "from_name", "message",
"created_time", "likes_count","id")])
rp_1<-as.data.frame(rp_1)
jean jacques gauguier S´eance 1 janvier 2018 43 / 216
quelques commentaires sur le package Rfacebook
Les points positifs:
exploitation des principaux endpoint de l’api facebook,
permet d’obtenir des donn´ees facilement via les fonctions,
extract ”page level” est directement utilisable
package est globalement v´eloce (rapidit´e pour obtenir les donn´ees)
Les points n´egatifs:
manipulations pour obtenir les commentaires
certaine lenteur pour obtenir les replies (double
boucle+transformation des donn´ees)
Au global, le package reste un outil tr`es int´eressant pour capturer
facilement des donn´ees FB.
jean jacques gauguier S´eance 1 janvier 2018 44 / 216
pr´esentation et utilisation du package twitteR
Ce package permet de collecter des donn´ees via l’api rest de twitter.
Comme pour Rfacebook, diff´erents endpoint de l’api ont ´et´e cod´es par des
fonctions que l’on utilise pour collecter les donn´ees. Nous utiliserons
principalement deux fonctions:
userTimeline: cette fonction permet de collecter les n publications
r´ecentes d’un compte twitter,
searchTwitter: cette fonction permet de collecter une partie des
tweets contenant un sujet particulier.
twitteR
”userTimeline” ”searchTwitter”
jean jacques gauguier S´eance 1 janvier 2018 45 / 216
initialisation de twitteR
Example (Code)
# oauth twitteR
setup_twitter_oauth("xxxxxxxxxxxxxxxxxxxxxxx",
consumer_secret="xxxxxxxxxxxxxxxxxxxxxxx",
access_token="xxxxxxxxxxxxxxxxxxxxxxx",
access_secret="xxxxxxxxxxxxxxxxxxxxxxx")
Une fois ce code ex´ecut´e, le code suivant doit apparaˆıtre dans r:
1 ”Using direct authentication”
jean jacques gauguier S´eance 1 janvier 2018 46 / 216
obtenir les publications d’un compte twitter: la fonction
”userTimeline”
Example (la proc´edure s’effectue en deux temps)
#1 extraction des publications d’un compte
hd<-userTimeline("hadleywickham", n=3200, maxID=NULL, sinceID=NULL,
includeRts=FALSE, excludeReplies=FALSE)
#2 cr´eation d’un dataframe
hd_df<-twListToDF(hd) #creation d’un dataframe
jean jacques gauguier S´eance 1 janvier 2018 47 / 216
le r´esultat de la fonction ”usertime”
En th´eorie, l’api doit retourner au maximum les 3200 derniers tweets ce qui n’est pas
toujours le cas avec ce package (bien souvent le nombre de tweets est largement
inf´erieur).
jean jacques gauguier S´eance 1 janvier 2018 48 / 216
les param`etres de la m´etafonction ”timelines”
Le package int`egre diff´erentes fonctions permettant de capturer des
´el´ements d’une timeline:
userTimeline(user, n=20, maxID=NULL, sinceID=NULL,
includeRts=FALSE, excludeReplies=FALSE, ...)
homeTimeline(n=25, maxID=NULL, sinceID=NULL, ...)
mentions(n=25, maxID=NULL, sinceID=NULL, ...)
Les param`etres des fonctions:
user: nom du compte twitter
n: le nombre maximun de tweets `a capturer (max=3200)
maxID: maximum d’id `a rechercher
sinceID: minimum d’id `a rechercher
includeRts: si FALSE les RT ne seront pas captur´es
excludeReplies: si TRUE les replies ne seront pas captur´es
jean jacques gauguier S´eance 1 janvier 2018 49 / 216
obtenir les publications twitter mentionnant un terme: la
fonction ”searchTwitter”
Example (la proc´edure s’effectue en deux temps)
#1 extraction des publications twitter
==>je veux 100 tweets mentionnant le hashtag #rstats
rstats<-searchTwitter("#rstats", n=100)
#autres requ^etes possibles:
rstats<-searchTwitter("#rstats", since=’2017-12-01’, until=’2017-12-31’)
rstats<-searchTwitter("#rstats+hadley", resultType="popular", n=15)
rstats<-searchTwitter("from:hadleywickham", resultType="recent", n=10)
#2 cr´eation d’un dataframe
rstats_df<- twListToDF(rstats) #cr´eation d’un dataframe
jean jacques gauguier S´eance 1 janvier 2018 50 / 216
le r´esultat de la fonction ”searchTwitter”
En th´eorie, l’api doit retourner au maximum les 3200 derniers tweets ce qui n’est pas
toujours le cas avec ce package (bien souvent le nombre de tweets est largement
inf´erieur).
jean jacques gauguier S´eance 1 janvier 2018 51 / 216
les param`etres de la fonction ”searchTwitter”
Diff´erents param`etres sont possibles pour optimiser les recherches:
searchString: terme(s) recherch´e(s) ajout d’un ”+” entre les termes
de recherche
n: le nombre maximum de tweets `a capturer
since: d´ebut de la p´eriode d’extraction souhait´ee. ex: ’2017/01/01’
until fin de la p´eriode d’extraction souhait´ee. ex: ’2017/12/01’
geocode: matching de la recherche sur coordonn´ees g´eo
resultType: filtre tweets selon la valeur ”popular”, ”recent”, etc...
jean jacques gauguier S´eance 1 janvier 2018 52 / 216
pr´esentation et utilisation du package streamR
Ce package collecte des donn´ees via l’api streaming de twitter. Il capture
en temps r´eel les conversations sur un sujet sur twitter: la collecte d´ebute
lorsque l’on lance une requˆete et s’arrˆete lorsque l’on stoppe la fonction
(pas de donn´ees avant ou apr`es la collecte). Le package comprend
plusieurs fonction mais nous utiliserons principalement la fonction
filterStream.
streamR
filterStream
jean jacques gauguier S´eance 1 janvier 2018 53 / 216
initialisation de streamR
Example (Code)
library(streamR)
library(ROAuth)
library(rjson)
requestURL <- "xxxxxxxxxxxxxxxxxxxxxxxxxx"
accessURL <- "xxxxxxxxxxxxxxxxxxxxxxxxxx"
authURL <- "xxxxxxxxxxxxxxxxxxxxxxxxxx"
consumerKey <- "xxxxxxxxxxxxxxxxxxxxxxxxxx"
consumerSecret <- "xxxxxxxxxxxxxxxxxxxxxxxxxx"
my_oauth <- OAuthFactory$new(consumerKey=consumerKey,consumerSecret=consumerSecret,
requestURL=requestURL, accessURL=accessURL, authURL=authURL)
#authentification aupr`es de l’api
my_oauth$handshake(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl"))
#message
"To enable the connection, please direct your web browser to:
https://api.twitter.com/oauth/authorize?oauth_token=PR8m4gAAAAAAVPmzAAABYOAHHOY
When complete, record the PIN given to you and provide it here:
1319182 #coller le pin
La documentation de streamR :http://pablobarbera.com/code/streamR.html
jean jacques gauguier S´eance 1 janvier 2018 54 / 216
extraire des donn´ees en streaming la fonction filterStream
Example (Code)
=> je souhaite capter au fil de l’eau des tweets contenant le terme #rstats
# j’appelle la fonction filterStream
filterStream( file="#rstats.json", track="#rstats",timeout=0, oauth=my_oauth )
=>le package cr´ee un fichier "#rstats.json"dans mon r´epertoire
o`u il ´ecrit les tweets.
=>dans la console appara^ıt le message "capturing tweets".
=>une fois la capture stopp´ee, j’utilise une fonction du package
pour transformer le fichier json en dataframe
# j’appelle la fonction tweets.df afin de cr´eer un dataframe
tweets.df <- parseTweets("#rstats.json", simplify = TRUE)
jean jacques gauguier S´eance 1 janvier 2018 55 / 216
le r´esultat de la fonction filterStream
Au final, on obtient un dataframe assez riche notamment au niveau des donn´ees des
personnes qui ont publi´e le tweet. A noter que ce stream n’est pas exhaustif: une partie
des tweets est captur´ee (seul un abonnement au firehose twitter permet d’atteindre
l’exhaustivit´e).
jean jacques gauguier S´eance 1 janvier 2018 56 / 216
pr´esentation et utilisation du package rtweet
Comme streamR et twitteR, ce package permet de se collecter aux api twitter. Tr`es
r´ecent, ce package permet `a la fois de se collecter aussi bien `a l’api rest qu’`a l’api
streaming de twitter. Il est poss`ede de nombreuses fonctions qui exploitent les
endpoints les plus int´eressants des api twitter. Par ailleurs, il semble qu’il soit plus
efficace que twitteR pour collecter le max de tweets d’une timeline soit 3200 tweets.
rtweets
api search api streaming
publications
followers
search d’un
terme
stream
stream geo
stream temps
jean jacques gauguier S´eance 1 janvier 2018 57 / 216
initialisation de rtweet
Example (Code)
# installer rtweet via cette commande pour installer la derni`ere version du package
qui permet de s’authentifier plus facilement vis `a vis de l’api twitter)
load(devtools)
devtools::install_github("mkearney/rtweet")
# load le package
library(rtweet)
#authentification aupr`es de l’api
lorsque l’on lance une fonction, une fen^etre s’ouvre demandant
d’autoriser l’application.
Apr`es acceptation, l’authentification est effectu´ee
et l’on peut utiliser le package et ses fonctions.
La documentation du package rtweet: http://rtweet.info/
jean jacques gauguier S´eance 1 janvier 2018 58 / 216
la fenˆetre d’authentification
Apr`es avoir cliqu´e sur ”authorize app”, l’authentification est effective.
jean jacques gauguier S´eance 1 janvier 2018 59 / 216
obtenir les publications twitter: la fonction ”get timeline”
Example (Code)
#1 extraction des publications twitter d’un compte
=>je veux les 3200 derniers tweets d’un compte
tml <- get_timeline("juliasilge", n = 3200)
#2 extraction des publications twitter de plusieurs comptes
=>je veux les 3200 derniers tweets d’un compte
=>je cr´ee une liste de compte dans la fonction
tmls <- get_timelines(c("hadleywickham", "drob", "juliasilge"), n = 3200)
jean jacques gauguier S´eance 1 janvier 2018 60 / 216
le r´esultat de la fonction ”get timeline”
A noter que les r´esultats sont directement obtenus sous la forme d’un dataframe
jean jacques gauguier S´eance 1 janvier 2018 61 / 216
les param`etres de la fonction ”get timeline”
Diff´erents param`etres sont possibles pour optimiser les recherches:
user: compte(s) twitter `a capturer
n: le nombre maximum de tweets `a capturer par timeline
max id:
home: logique, user-time ou home-timeline (retweets)
parse: logique, par d´efaut transformation en dataframe
check: v´erification avant le lancement de la requˆete des cr´edits
d’extraction
token: logique, par d´efaut par de tokens dans les requˆetes (cf.
twitteR)
jean jacques gauguier S´eance 1 janvier 2018 62 / 216
autres fonctions int´eressantes sur l’api search
Example (Code)
#1 recherche d’utilisateurs en fonction de mots dans le profil
rstats_users<- search_users("#rstats", n = 1000)
#2 extraction des followers d’un compte
hd_flw <- get_followers("/hadleywickham", n = 55000)
#3 search sur tweets contenant un hashtag
rstat_ht <- search_tweets( "#rstats", n = 18000, include_rts = FALSE
#4 search sur tweets contenant un mot
data<- search_tweets( "data", n = 250000, retryonratelimit = TRUE
#5 search selon geoloc
by_us <- search_tweets( "lang:en", geocode = lookup_coords("usa"), n = 10000)
# autres fonctions (look up)
jean jacques gauguier S´eance 1 janvier 2018 63 / 216
les fonctions de streaming de rtweet
Example (Code)
#1 stream de 30s
data_stream <- stream_tweets("data")
#code g´en´er´e par l’extract
Streaming tweets for 30 seconds...
Downloading: 210 kB Finished streaming tweets!
opening file input connection.
Imported 134 records. Simplifying...
closing file input connection.
#2 stream sur une semaine (60 s *60 min* 24 h* 7 j)
stream_tweets("rstats,datascience", timeout = 60 * 60 * 24 * 7,
file_name = "rstatsdatascience.json",parse = FALSE)
#fonction de parsing
djt <- parse_stream("rstatsdatascience.json")
#3 stream sur une base de geoloc des tweets (60s)
rt <- stream_tweets(lookup_coords("london, uk"), timeout = 60)
jean jacques gauguier S´eance 1 janvier 2018 64 / 216
le r´esultat de la fonction ”get timeline”
Ici, les r´esultats sont directement obtenus sous la forme d’un dataframe
jean jacques gauguier S´eance 1 janvier 2018 65 / 216
pr´esentation et utilisation du package tuber
Ce package permet de se collecter `a l’api data de youtube. Avant d’utiliser le package: il
faut n´ecessaire de se cr´eer:
un compte xx@gmail.com
un compte d´eveloppeur youtube
une application reli´ee `a l’api youtube
Nous utiliserons principalement ce package pour extraire les commentaires d’une vid´eo.
Pour les m´etriques, nous utiliserons l’outil youtubedatatools qui sera pr´esent´e plus loin.
tuber
chanel level video level
m´eta donn´ees
playlists
stats de la
vid´eo
commentaires
jean jacques gauguier S´eance 1 janvier 2018 66 / 216
initialisation de tuber
Example (Code)
# load le package
library(tuber)
#authentification aupr`es de l’api
yt_oauth("998136489867-5t3tq1g7hbovoj46dreqd6k5kd35ctjn.apps.googleusercontent.com",
"MbOSt6cQhhFkwETXKur-L9rN")
code g´en´er´e dans l’interface Rstudio
Use a local file (’.httr-oauth’), to cache OAuth access
credentials between R sessions?
1: Yes
2: No ==>No
#pop-up qui s’ouvre
s´election du compte gmail rattach´e `a l’application
validation de l’utilisation du compte pour acc´eder aux ressources de l’api
La documentation du package
https://cran.r-project.org/web/packages/tuber/tuber.pdf
jean jacques gauguier S´eance 1 janvier 2018 67 / 216
obtenir les stats d’une vid´eo sur youtube
Example (Code)
#1 capture de l’id de la vid´eo youtube
=>https://www.youtube.com/watch?v= 9p1kAvDL52U
a<-get_stats(video_id="9p1kAvDL52U")
a_df<-as.data.frame(a) (mise sous dataframe)
#2 extraction des statistiques d’une cha^ıne
==>https://www.youtube.com/channel/UCpVm7bg6pXKo1Pr6k5kxG9A
b<-get_channel_stats(channel_id="UCpVm7bg6pXKo1Pr6k5kxG9A")
b_df<-as.data.frame(b) (mise sous dataframe)
jean jacques gauguier S´eance 1 janvier 2018 68 / 216
le r´esultat des fonctions
jean jacques gauguier S´eance 1 janvier 2018 69 / 216
obtenir des commentaires d´epos´es sur youtube
Example (Code)
#1 capture des commentaires sur une vid´eo (hors replies)
video_c <- get_comment_threads(c(video_id="9p1kAvDL52U"))
==>argument sur le max de commentaires
video_c <- get_comment_threads(c(video_id="9p1kAvDL52U"), max_results = 101)
#2 extraction verbatim d’un commentaire/reply sp´ecifique
==>extraction data d’un commentaire sp´ecifique
video_d <- get_comments(filter = c(comment_id = "Ugx9yHVg6_ncD4DmWqV4AaABAg"))
==>extraction data des replies sur un commentaire sp´ecifique
video_e <- get_comments(filter = c(parent_id = "Ugx9yHVg6_ncD4DmWqV4AaABAg"))
#3 extraction verbatim de deux commentaires
video_f <- get_comments(filter = c(comment_id = "Ugwa9SBHiUq1Pvp1aDp4AaABAg,
Ugx9yHVg6_ncD4DmWqV4AaABAg"))
#4 extraction verbatim des replies sur deux commentaires
video_f <- get_comments(filter = c(parent_id = "Ugwa9SBHiUq1Pvp1aDp4AaABAg,
Ugx9yHVg6_ncD4DmWqV4AaABAg"))
jean jacques gauguier S´eance 1 janvier 2018 70 / 216
obtenir des statistiques de l’ensemble des vid´eos d´epos´es
sur une chaine youtube
Example (Code)
#1 je cr´ee une liste si je veux les donn´ees pour plusieurs chaines
a <- list_channel_resources(filter = c(channel_id = "UCT5Cx1l4IS3wHkJXNyuj4TA"), par
# obtenir les playlists d’une chaine
playlist_id <- a$items[[1]]$contentDetails$relatedPlaylists$uploads
# si je veux les donn´ees pour chaque vidj´eo appartement `a une playlist
vids <- get_playlist_items(filter= c(playlist_id=playlist_id))
# obtenir les ids des vid´eos h´eberg´ees par une chaine
vid_ids <- as.vector(vids$contentDetails.videoId)
# obtenir les stats pour chaque ids des vid´eos h´eberg´ees par une chaine
get_all_stats <- function(id) {
get_stats(id)
}
# obtenir d’un tableau d’agr´egation des r´esultats
res <- lapply(vid_ids, get_all_stats)
res_df <- do.call(rbind, lapply(res, data.frame))
jean jacques gauguier S´eance 1 janvier 2018 71 / 216
quelques remarques sur tuber
tuber permet d’acc´eder `a l’api youtube et utiliser les principaux endpoints de l’api de
youtube. Les r´esultats sont int´eressants mais certains ´el´ements pourraient ˆetre optimis´es:
le titre de la vid´eo et/ou la date de publication de la vid´eo ne sont pas dans
l’extract par d´efaut du package,
il est possible d’extraire les donn´ees de l’ensemble des vid´eos h´eberg´ees par un
chaˆıne `a un instant t.
comme pour Rfacebook pour obtenir `a la fois les commentaires et les replies il faut
cr´eer des boucles pour collecter les donn´ees.
jean jacques gauguier S´eance 1 janvier 2018 72 / 216
l’extacteur youtubedatatools
Cet extracteur est un projet acad´emique h´eberg´e ici:
https://tools.digitalmethods.net/netvizz/youtube/mod video info.php. ll permet
d’extraire les donn´ees de l’api youtube sur les m´etriques des chaˆınes et/ou des vid´eos
ainsi que les commentaires. Les avantages:
facilit´e d’utilisation: pas de compte d´eveloppeur `a cr´eer
fonctionnalit´e: extraction group´ee des m´etriques de l’ensemble des vid´eos
h´eberg´ees sur une chaˆıne
Les inconv´enients:
phase d’importation des datas dans r
pas d’extraction des replies `a date
jean jacques gauguier S´eance 1 janvier 2018 73 / 216
un aper¸cu de youtubedatatools
jean jacques gauguier S´eance 1 janvier 2018 74 / 216
utilisation de youtubedatatools
ytdt
chanel level video level
m´eta donn´ees
vid´eos d’une
chaine
network chan-
nel
stats de la
vid´eo
network vid´eo
commentaires
de la vid´eo
jean jacques gauguier S´eance 1 janvier 2018 75 / 216
extraire des stats de l’ensemble des vid´eos d’une chaˆıne
Apr`es avoir entr´e l’id youtube de la chaˆıne, il faut lancer l’extract. L’outil affiche le
nombre de vid´eos extraites au fur et `a mesure de l’avancement de la proc´edure. Une fois
l’extract termin´e, l’outil cr´ee un fichier .tab. Il faut cliquer sur ce fichier afin de
l’enregistrer sur sa machine.
jean jacques gauguier S´eance 1 janvier 2018 76 / 216
importer les donn´ees collect´ees ytdt dans r
Example (Code)
#1 soit par Rstudio directement
==>je clique sur l’´el´ement "Import Dataset" et je me dirige dans la machine pour
trouver le fichier.
==>apr`es validation, les donn´ees sont import´ees sous la forme d’un dataframe.
#2 soit en ligne de commande
videolist<- read.delim("C:/Users/jjg/Downloads/videolist")
jean jacques gauguier S´eance 1 janvier 2018 77 / 216
exporter un dataframe r dans un fichier excel
Lorsqu’elle sont sous forme de dataframe, il est possible d’exporter sous la
forme d’un fichier csv ou excel des donn´ees `a condition que le fichier ne
soit pas trop volumineux.
Example (Code)
#code `a ins´erer
#trick rjava (dans le cas o`u il y a une erreur avec le package rjava)
if (Sys.getenv("JAVA_HOME")!="")
Sys.setenv(JAVA_HOME="")
#load les librairies
library(rJava)
library(xlsx)
#instruction pour export
write.xlsx(nom_du_dataframe, file ="C:/Users/jjg/study/nom_du_fichier.xlsx" ,
sheetName="1", col.names=TRUE, row.names=TRUE, append=FALSE, showNA=TRUE)
==>fichier devrait ^etre cr´ee au m^eme endroit que rstudio est install´e.
jean jacques gauguier S´eance 1 janvier 2018 78 / 216
S´eance 2:manipuler les donn´ees dans r
jean jacques gauguier S´eance 1 janvier 2018 79 / 216
Les types de donn´ees dans r
r est un langage orient´e objet: tout est un objet dans r. Chaque objet poss`ede une
longueur, certains attributs (des m´etadonn´ees) et un mode. Le mode prescrit ce qu’un
objet peut contenir. Voici les principaux modes:
les nombres r´eels appartiennent au mode numeric
les nombres complexes appartiennent au mode complexe
les nombres entiers sont appel´es integers
les bool´eens (TRUE/FALSE) appartiennent au mode logical
les chaˆınes de caract`eres appartiennent au mode character
les fonctions appartiennent au mode fonction
les lists appartiennent au mode list
Les objets de mode ”numeric”, ”complex”, ”logical” et ”character” sont des objets
simples (atomic en anglais) qui ne peuvent contenir `a la fois que des donn´ees d’un seul
type. Les objets de mode ”list” ou ”expression” sont des objets qui peuvent contenir
dans le mˆeme temps diff´erents objets.
jean jacques gauguier S´eance 1 janvier 2018 80 / 216
les objets dans r
Example
#1 d´eclaration et assignement
a <- NULL # a est un objet nul, vide (null)
b <- TRUE # b est un objet bool´een (logical)
c <- 101 # c est un objet num´erique (numeric: double (approximation)
c <- 101.21 L # c est un objet num´erique (numeric: integer (L))
d <- ’’hello world’’ # d est un objet cha^ıne des caract`eres (character)
e <-list(1,2,3) (list) #e est un objet liste (list)
#2 identifier les types de donn´ees: la fonction typeof
typeof(a)
=>[1] "NULL"
typeof(d)
=>[1] "character"
#3 identifier le mode de donn´ees
mode(a)
=>[1] "numeric"
mode(d)
=>[1] "character"
#4 identifier la longueur des objets
length(c)
=>[1] 1
length(e)
=>[1] 3
A noter que le mode et le type d’un objet sont souvent identiques.jean jacques gauguier S´eance 1 janvier 2018 81 / 216
les vecteurs
tout objet est un vecteur dans r. Pour construire un vecteur on utilise l’op´erateur c
(concatenate).
Example
#1 d´eclaration et assignement
f <-c(1,2,3)
g <- c("un", "deux", "trois", "quatre", "cinq", "six", "sept")
h<- c(1, "deux", "trois", "quatre", "cinq", "six", FALSE) ###
#2 identifier la longueur des vecteurs
length(f)
=>[1] 3
length(h)
=>[1] 7
#3 nommer les ´el´ements d’un vecteur
names(f) <- c("a", "b", "c")
f
a b c
1 2 3
jean jacques gauguier S´eance 1 janvier 2018 82 / 216
la hi´erarchie et types de vecteur
Parmi les vecteurs, il est possible de distinguer:
vecteur atomic ou simple: un seul type de donn´ees (logical, integer, double,
character et complex)
list ou vecteurs r´ecursifs: des listes emboˆıt´ees (ou nested list).
Figure: Hi´erarchie des vecteurs, wickham et grolemund
jean jacques gauguier S´eance 1 janvier 2018 83 / 216
vecteur et attributs
Les vecteurs peuvent contenir des m´etadonn´ees suppl´ementaires, on parle d’attributs.
Ces attributs sont utilis´es pour cr´eer des vectors augment´es qui peuvent ˆetre de quatre
types:
factor qui sont construits sur la base des vecteur integer
dates et date-times qui sont construits sur la base des vecteur numeric
data frames et tibbles qui sont construits sur la base des vecteurs list.
Par ailleurs, il est possible de s’assurer du type de vecteur lorsque l’on travaille avec des
vecteurs en utilisant les commandes suivantes:
as.logical(),
as.integer(),
as.double(),
as.character()
jean jacques gauguier S´eance 1 janvier 2018 84 / 216
les facteurs
Les facteurs sont utilis´es avec des variables qui ne peuvent prendre qu’un nombre
d´etermin´e de valeurs. On parle de variables cat´egorielles
Example
#1 vecteur avec des mois que l’on souhaite ordonner
x1 <- c("Dec", "Apr", "Jan", "Mar")
#2 r´esultat sans transformation
sort(x1)
=>[1] "Apr" "Dec" "Jan" "Mar" #ne respecte pas l’ordre calendaire
length(h)
=>[1] 7
#3 cr´eer un vecteur ordonn´e avec l’ensemble des niveaux possibles
month_levels <- c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
"Sep", "Oct", "Nov", "Dec")
#4 transormation
x2 <- factor(x1, levels = month_levels)
sort(x2)
=>[1] Jan Mar Apr Dec
Levels: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
jean jacques gauguier S´eance 1 janvier 2018 85 / 216
les fonctions en lien avec les facteurs
Example
#1 test
class(x1)
==>[1] "factor"
#2 afficher les niveaux d’un facteur
sort(x1)
=>[1] Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
#3 afficher les effectifs pour level (fonction table)
table(x1)
Apr Dec Jan Mar
1 1 1 1
# 4 ordonner selon l’ordre d’apparition historique des donn´ees
x3 <- factor(x1, levels = unique(x1))
x3
==>[1] Dec Apr Jan Mar Levels: Dec Apr Jan Mar
jean jacques gauguier S´eance 1 janvier 2018 86 / 216
les matrices
r supporte ´egalement les matrices et les tableaux. D’une certaine mani`ere, une matrice
est un vecteur avec un attribut suppl´ementaire, l’attribut dim, dont la longueur est ´egale
`a 2 dans le cas d’une matrice simple.
Example
#1 la fonction de base
x1 <-matrix(1:6, nrow = 2, ncol = 3) # colonne puis ligne
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
#2 l’argument byrow = TRUE
x2 <-matrix(1:6, nrow = 2, ncol = 3, byrow = TRUE) #ligne puis colonne
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
jean jacques gauguier S´eance 1 janvier 2018 87 / 216
les tableaux
Un tableau (array) est une matrice qui poss`ede plus de deux dimensions.
Example
#1 la fonction de base
x1 <-array(1:24, dim = c(3, 4, 2)) #lignes, colonnes et dimensions
, , 1 #premiere dimension
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[,3] 3 6 9 12
, , 2 #seconde dimension
[,1] [,2] [,3] [,4]
[1,] 13 16 19 22
[2,] 14 17 20 23
[,3] 15 18 21 24
nrow(x1, ncol(x1), dim(x1),
rownames(x1) <- c("A", "B",’’C’’)
colnames(x1)<-c(‘D’’,’’E’’,’’F’’,’’G’’)
dimnames(x1) <- list(c("A", "B",’’C’’),c(‘D’’,’’E’’,’’F’’,’’G’’),c(‘H’’,’’I’’))
jean jacques gauguier S´eance 1 janvier 2018 88 / 216
comment visualiser les tableaux (tir´e de goulet 2016)
L’ordre de remplissage inhabituel des tableaux rend leur manipulation difficile.
Imaginons un tableau de dimensions 3*4*5.
il faut voir le tableau comme 5 matrices 3*4 les unes derri`ere les autres.
le tableau est un prisme rectangulaire haut de 3 unit´es, large de 4 et profond de 5
avec une quatri`eme dimension, cela revient `a aligner des prismes
Figure: Repr´esentation sch´ematique de tableaux. Les chiffres encercl´es identifient
l’ordre de remplissage, goulet (2016)
jean jacques gauguier S´eance 1 janvier 2018 89 / 216
les listes
Les listes sont la forme de stockage des donn´ees la plus g´en´erale:
les ´el´ements d’une liste peuvent ˆetre de diff´erents modes (numeric, character, boolean),
il est possible d’emboˆıter des listes dans une liste (nested ou recursive list)
Example
#1 la fonction de base pour cr´eer une liste
x <- list(1:3, "a", c(TRUE, FALSE, TRUE), c(2.3, 5.9))
#2 obtenir les informations sur les ´el´ements
str(x)
=> List of 4
$ : int [1:3] 1 2 3
$ : chr "a"
$ : logi [1:3] TRUE FALSE TRUE
$ : num [1:2] 2.3 5.9
#3 une fonction r´ecursive
x <- list(list(list(list())))
#4 obtenir les informations sur les ´el´ements
=> > List of 1
#> $ :List of 1
#> ..$ :List of 1
#> .. ..$ : list()
#5 tests list et/ou recursivit´e
is.recursive(x) is.list(x)
#> [1] TRUE
jean jacques gauguier S´eance 1 janvier 2018 90 / 216
le dataframe
La structure de stockage des donn´ees dataframe est la forme plus commune....et la plus simple
pour effectuer des analyses. Voici quelques commandes de base en lien avec la structure
dataframe.
Example
#1 cr´eer un dataframe
df <- data.frame(x = 1:3, y = c("a", "b", "c")
#2 afficher le dataframe
df
#3 afficher le dataframe dans une fen^etre
View(df)
#4 afficher la structure du dataframe
str(df)
#5 statistique du dataframe
summary(df)
#6 afficher le type
typeof(df)
==>’’list’’
#7 v´erification si dataframe
is.data.frame(df)
==>TRUE
#7 afficher la classe
class(df)
jean jacques gauguier S´eance 1 janvier 2018 91 / 216
les commandes pour manipuler un dataframe
Example
#1 transformer en dataframe une structure existante
df<-as.data.frame(x)
#2 s´electionner une colonne d’un dataframe (nom)
df$ma_colonne
#3 s´electionner une colonne d’un dataframe (num´ero de colonne)
df[,1] ou d[[1]]
#4 s´electionner une colonne d’un dataframe (nom)
df[’’nom_de_ma_colonne’’]
#5 s´electionner diff´erentes colonnes
df[c("premi`ere_colonne’’, "deuxi`eme_colonne")]
#6 s´electionner une ligne particuli`ere (12)
df[12,]
#7 s´electionner deux lignes particuli`eres
df[c(12,40),]
jean jacques gauguier S´eance 1 janvier 2018 92 / 216
autres commandes pour un dataframe
Example
#1 s´electionner une cellule particuli`ere (premi`ere ligne, seconde colonne)
df[1,2]
#2 s´electionner une cellule particuli`ere avec nom des col. et lignes.
df[’’nom_de_la_ligne’’,’’nom_de_ma_colonne’’]
#3 combiner deux dataframes (m^eme structure) par les colonnes
df<-cbind(df_1, df_2) (l’un en dessous de l’autre)
#4 combiner deux dataframes (m^eme structure) par les
df<-rbind(df_1, df_2) (l’un `a c^ot´e de l’autre)
#5 afficher le nombre de lignes
nrow(df)
==>’’list’’
#6 afficher le nombre de colonnes
ncol(df)
==>TRUE
#7 afficher le haut du dataframe
head(df)
jean jacques gauguier S´eance 1 janvier 2018 93 / 216
la structure tibble et le package tibble
La structure de stockage tibble est une structure proche de la structure dataframe. De cr´eation
plus r´ecente, les tibbles proposent une structure plus souple et largement optimis´ee pour
travailler dans la suite tidyverse (les avantages de cette structure de stockage des donn´ees sont
d´etaill´es ici: https://cran.r-project.org/web/packages/tibble/vignettes/tibble.html.) Voici
quelques commandes en lien avec cette structure:
Example
#1 cr´eer un tibble
tbl <- tibble(mes_datas)
#2 afficher le tibble
tbl
#3 transformer en tibble
tbl <- as_tibble(df)
#4 afficher une partie du tibble (x=nb de rows) + condition (sur colonnes)
tibble(x = 1:31)
#5 extraire une colonne
tbl[, 1]
#6 extraire des colonnes
tbl[, 1:2])
jean jacques gauguier S´eance 1 janvier 2018 94 / 216
La Manipulation des donn´ees dans r
jean jacques gauguier S´eance 1 janvier 2018 95 / 216
la logique tidy data
Les donn´ees peuvent ˆetre organis´ee de diff´erentes mani`eres au niveau de la mani`ere dont sont
architectur´ees les variables et les dimensions. La logique ”tidydata” est une logique
d’organisation des donn´ees particuli`eres selon trois principes:
chaque variable doit avoir sa propre colonne,
chaque observation doit avoir sa propre ligne,
chaque valeur doit avoir sa propre cellule
Ces trois principes sont reli´es entre eux. L’int´erˆet d’utiliser cette logique est double:
int´erˆet de travailler sur une structure identique de donn´ees entre les datasets,
int´erˆet d’utiliser les variables en colonne car cette structure s’applique bien aux
traitements vectoris´es et aux packages construits autour de ce type de traitement
.
Figure: La logique ’tidydata”, wickham et grolemund (2017)
jean jacques gauguier S´eance 1 janvier 2018 96 / 216
la suite de package tidyverse
Lorsque l’utilisateur charge la library (tidyverse) les packages suivant sont
automatiquement charg´es :
le package ggplot2 qui permet d’effectuer des repr´esentations graphiques
tibble qui permet de travailler avec des donn´ees stock´ees sous la forme de tibble,
tidyr qui permet de transformer les structures de donn´ees en donn´ees ”’tidy”
purr qui permet d’appliquer des fonctions de mani`ere vectorielles,
dplyr qui permet d’appliquer des transformations aux donn´ees sous forme ”tidy”
readr qui permet d’importer des donn´ees dans r.
jean jacques gauguier S´eance 1 janvier 2018 97 / 216
les donn´ees ”non tidy”et ”tidy”
L’extrait de gauche repr´esente des donn´ees non organis´ees sans la forme ’tidy’. Cette de
droite repr´esente des donn´ees organis´ees selon la principe.
Figure: donn´ees non tidy et tidy, wickham et grolemund (2017)
jean jacques gauguier S´eance 1 janvier 2018 98 / 216
le package tidyr
Ce package permet d’organiser des donn´ees non organis´ees sous la forme ’tidy’. Au
global, ce package est organis´e autour de deux verbs qui sont:
gather(): permet de d´evelopper le dataframe en transformant des donn´ees en
lignes en variables ”colonne”
spread(): permet de supprimer des lignes en les regroupant.
separate(): permet de spitter une colonne en deux colonnes ex:
tidyr::separate(mes donn´ees, into = c(”num´erateur”, ”d´enominateur”)) (si ratio
existe au d´epart)
unite(): inverse du verb separate. ex tidyr::unite(mes donn´ees,num´erateur,
d´enominateur)
jean jacques gauguier S´eance 1 janvier 2018 99 / 216
la fonction gather
#1 ´ecriture g´en´erique de la fonction
tidyr::gather(mes donn´ees, mes colonnes, key=’’ma cl´e’’, value=’’mes_valeurs’’)
Figure: wickham et grolemund (2017)
jean jacques gauguier S´eance 1 janvier 2018 100 / 216
la fonction spread
#1 ´ecriture g´en´erique de la fonction
tidyr::spread(mes donn´ees,key=’’ma cl´e’’, value=’’mes_valeurs’’)
Figure: wickham et grolemund (2017)
jean jacques gauguier S´eance 1 janvier 2018 101 / 216
le package dplyr et ses principales fonctions
Le package dplyr fait partie de la ”suite” tidyverse. Ce package permet de manipuler et
transformer les donn´ees stock´ees sous forme de dataframe. Diff´erentes fonctions existent
pour manipuler les donn´ees:
filter() pour filtrer les donn´ees selon des r`egles
arrange() pour r´eorganiser les donn´ees en changeant l’ordre des lignes,
mutate() pour cr´eer de nouvelles variables `a partir des variables existantes,
select() pour s´electionner des colonnes du dataframe
group by() pour s´electionner et combiner des colonnes du dataframe
summarise() pour effectuer des totaux des colonnes
jean jacques gauguier S´eance 1 janvier 2018 102 / 216
la fonction select: s´electionner les colonnes d’un dataframe
La fonction poss`ede diff´erents arguments permettant de filtrer sur les colonnes
Example
#1 ´ecriture g´en´erique de la fonction
dplyr::select(mes_donn´ees, ma_r`egle)
#2 s´electionner une colonne enti`ere
dplyr::select(mes_donn´ees, la_colonne_de_mon_dataframe)
#3 s´electionner diff´erentes colonnes
dplyr::select(mes_donn´ees, la_colonne_de_mon_dataframe, la_seconde_colonne)
#4 s´electionner toutes les colonnes sauf une
dplyr::select(mes_donn´ees,- la_colonne_de_mon_dataframe)
#5 s´electionner les ´el´ements d’une colonne selon termes
dplyr::select(mes_donn´ees, contains(’’mon_terme’’)
#6 s´electionner les ´el´ements d’une colonne selon termes
dplyr::select(mes_donn´ees, starts_with(’’mon_terme’’)
#7 s´electionner les ´el´ements d’une colonne selon termes
dplyr::select(mes_donn´ees, ends_with(’’mon_terme’’)
#8 s´electionner les ´el´ements d’une colonne selon les positions
dplyr::select(mes_donn´ees, 3:5)
jean jacques gauguier S´eance 1 janvier 2018 103 / 216
la fonction filter: filtrer parmi les lignes d’un dataframe
La fonction poss`ede diff´erents arguments permettant de filtrer les lignes
Example
#1 ´ecriture g´en´erique de la fonction
dplyr::filtrer(mes_donn´ees, ma_r`egle)
#2 s´electionner des lignes (valeurs de la variable)
dplyr::filtrer(mes_donn´ees, valeur de la variable >’’valeur’’)
#3 s´electionner des lignes (nom de la variable)
dplyr::filtrer(mes_donn´ees, variable de la colonne == mon_terme)
#4 s´electionner avec des combinaisons
dplyr::filtrer(mes_donn´ees, variable de la colonne == mon_terme &
valeur de la variable $>$ ’’valeur’’)
jean jacques gauguier S´eance 1 janvier 2018 104 / 216
la fonction arrange: r´eorganiser l’ordre des lignes
La fonction poss`ede diff´erents arguments permettant de modifier l’ordre des lignes
Example
#1 ´ecriture g´en´erique de la fonction
dplyr::arrange(mes_donn´ees, arg(ma_colonne))
#2 ordre d´ecroissant des valeurs de ma colonne #Ok top 10, top 5, etc...
dplyr::arrange(mes_donn´ees, desc(ma_colonne))
#3 ordre alphab´etique de la premi`ere colonne
dplyr::arrange(mes_donn´ees)
#4 ordre alphab´etique d’une colonne particuli`ere
dplyr::arrange(mes_donn´ees, ma_colonne)
jean jacques gauguier S´eance 1 janvier 2018 105 / 216
la fonction mutate: cr´eer de nouvelles colonnes/variables
La fonction permet d’ajouter de nouvelles colonnes construites sur les colonnes existantes (ratio,
pourcentage,etc....
Example
#1 ´ecriture g´en´erique de la fonction
dplyr::mutate(mes_donn´ees, ma_nouvelle_variable= combinaison)
#2 supprimer une variable existante
dplyr::mutate(mes_donn´ees, ma_variable_existante= NULL)
#3 garder seulement la variable nouvellement cr´ee
dplyr::transmute(mes_donn´ees, ma_nouvelle_variable =combinaison)
#4 utilisation les noms des variables dans la combinaison
dplyr::mutate(mes_donn´ees, ma_nouvelle_variable= !!quo(nom_var_1 * nom_var_2))
Le verb de la fonction mutate peut ˆetre utilis´ee avec les fonctions suivantes de r
+, - etc
log()
lead(), lag()
dense rank(), min rank(), percent rank(), row number(), cume dist(), ntile()
cumsum(), cummean(), cummin(), cummax(), cumany(), cumall()
fil else(), recode(), case when()
existe aussi: mutate() (mutate all(), mutate if(), mutate at() et transmute all(),
transmute if(), transmute at()
jean jacques gauguier S´eance 1 janvier 2018 106 / 216
la fonction summarize: cr´eer des agr´egations de colonnes
La fonction permet d’effectuer des calculs sur une colonne enti`ere
Example
#1 ´ecriture g´en´erique de la fonction
dplyr::summarize(mes_donn´ees, mon_calcul= calcul*ma_variable)
#2 exemple (afficher moyenne d’une colonne+ nombre de lignes
dplyr::summarise(mes_donn´ees, mean = mean(ma_variable), n = n())
Le verb de la fonction summarize peut ˆetre utilis´ee avec les fonctions suivantes de r
mesure de la centralit´e: mean(), median()
mesure de la densit´e: sd(), IQR(), mad()
min(), max(), quantile()
mesure de la position: first(), last(), nth(),
nombre: n(), n distinct()
expression: any(), all()
jean jacques gauguier S´eance 1 janvier 2018 107 / 216
la fonction group by: grouper des variables
La fonction permet d’effectuer des groupements (ex: regrouper des observations qui
appartiennent `a la mˆeme cat´egorie (ex: homme, femme, image, vid´eo, etc...)) pour ensuite
effectuer des calculs. Utilis´ee seule, cette fonction ne modifie pas la structure des donn´ees.
Example
#1 ´ecriture g´en´erique de la fonction
dplyr::group_by(mes_donn´ees, ma_variable)
#2 grouper diff´erentes variables
dplyr::group_by(mes_donn´ees, ma_variable_1,ma_variable_2,ma_variable_3)
jean jacques gauguier S´eance 1 janvier 2018 108 / 216
la fonction pipe
La fonction pipe % > % permet d’enchaˆıner les transformations permet de relier les phases de
s´election, de transformation et repr´esentation. L’exemple ci-dessus illustre le principe
Example
graphique_page_mois_eng_secteur<-df%>% # nom du graphique/nom des donn´ees de d´epart
mutate(mois = format(time, "%m"), ann´ee = format(time, "%Y")) %>% #verb mutate
group_by(secteur,name,from_name,mois,annee)%>% #verb group_by
summarise(total = sum(engagement_tot))%>% #verb summarize
filter(annee>="2017")%>% #verb filter graphique ensuite
ggplot(aes(x= mois,y=total,fill=from_name))+geom_bar(stat = "identity")+
theme_minimal()+ theme(legend.position="bottom")+
theme(legend.text=element_text(size=5))+
facet_grid(. ~secteur)+ theme(legend.title=element_text(size=5))+
theme(strip.text.x = element_text(size = 6, angle = 90))+
theme(axis.text.x=element_text(size=3))+
scale_y_continuous(labels = comma)+ labs(x = "mois",
y = "volume d’engagement par page",
title = "volume d’engagement mensuel en 2017 par page",
subtitle = "hors dark posts")
jean jacques gauguier S´eance 1 janvier 2018 109 / 216
le package Dplyr et ses fonctions
Figure: `a t´el´echarger ici: https://www.rstudio.com/resources/cheatsheets/
jean jacques gauguier S´eance 1 janvier 2018 110 / 216
la gestion des dates dans r
La gestion des dates est g´en´eralement complexe compte tenu des diff´erences de format,
des fuseaux horaires et aux autres sp´ecificit´es (ex: ann´ee bissextile) La ”suite” tidyverse
comprend un package d´edi´e `a la gestion des dates. D’autres packages plus anciens
comme chron permettent ´egalement de g´erer les dates. Enfin la classe POSIX est
´egalement int´eressante car elle permet de g´erer les fuseaux horaires (time zone). Pour
d´ebuter commen¸cons par la fonction as.Date qui repose sur cette codification:
d jour du mois (d´ecimal)
m mois (d´ecimal)
b mois en abr´eviation
B mois sans abr´eviation
y ann´ee avec deux chiffres
y ann´ee avec quatre chiffres
jean jacques gauguier S´eance 1 janvier 2018 111 / 216
la fonction de base as.Date
Example
# 1 cas o`u la date est d´ej`a format´ee
ma_date<-as.Date(’2017-01-28’)
# 2 cas o`u la date n’est pas format´ee de la bonne mani`ere
ma_date<-as.Date(’1/28/2018’, format=’%m/%d/%Y’)
#j’indique le format en m’aidant du tableau
ma_date<-as.Date(’28JANV18’,format=’%d%b%y’)
#exemple transformation de date d’un extract twitter
created<-as.Date(publication$created, format="%Y-%m-%d")
jean jacques gauguier S´eance 1 janvier 2018 112 / 216
la gestion des dates avec le package chron
Le package chron permet de formater les donn´ees calendaires int´egrant les heures,
minutes et secondes. A noter que ce package ne g`ere pas les fuseaux horaires:
d jour du mois (d´ecimal)
m mois (d´ecimal)
mon mois en abr´eviation
month mois sans abr´eviation
y ann´ee avec deux chiffres
h heure
m minute
s seconde
jean jacques gauguier S´eance 1 janvier 2018 113 / 216
la fonction as.Date
Example
ma_date<-chron::dates(’’01/28/2018)
mes_dates <-dates(c(’’01/28/2018,’’02/21/2018,’’03/28/2018,’’04/15/2018))
mon_heure <-chron:: times("23:03:20")
mes_heures<-chron::times(c("23:03:20", "22:29:56", "01:03:30",
"18:21:03"))
mes_dates_et_heures<-chron::chron(dates = mes_dates , times = mes_heures)
#effectuer des op´erations cf documentation chron
mes_dates_et_heures[1] - mes_dates_et_heures[3]
jean jacques gauguier S´eance 1 janvier 2018 114 / 216
la gestion des dates avec la classe Posix
Comme les autres packages, POSIX repose sur un ensemble de conventions pour le formatage
des dates et heures
a jour de la semaine en abr´eviation
c localisation sp´ecifique du format
j jour en d´ecimal
M minute en d´ecimal
S seconde en d´ecimal
x date sp´ecifique
w num´ero du jour de la semaine
(dimanche=0)
y ann´ee (deux d´ecimales 18)
z d´ecalage par rapport `a l’heure GMT
A jour de la semaine
B mois complet
d jour en d´ecimal
I heure en d´ecimal (12)
m mois en d´ecimal
p gestion am/pm
U num´ero de la semaine de l’ann´ee
(dimanche)
W num´ero de la semaine de l’ann´ee
(lundi)
X localisation de l’heure
Y ann´ee (4 chiffres 2018)
Z time zone en texte
argument option tz pour sp´ecifier la
time zone
jean jacques gauguier S´eance 1 janvier 2018 115 / 216
les transformations avec le format Posix
Example
# on utilise la fonction strptime pour cr´eer une date
ma_date<-strptime(’01/Janv/2018:07:51:00’,format=’%d/%b/%Y:%H:%M:%S’)
# on transforme l’objet date en un format Posixt
(Posixt:nombre de secondes depuis le 01/01/1970 (UTC))
#identifier le formatage pour extraire les donn´ees
mydate<-as.POSIXlt(’2018-01-28 08:12:43’)
names(mydate)
mydate$mday
==>28
# transformation du format de date d’un extract vk date+formatage tz
metrics$date <- as.POSIXct(metrics$date, origin="1970-01-01", tz=’Europe/Moscow’)
jean jacques gauguier S´eance 1 janvier 2018 116 / 216
la gestion des dates avec le package lubridate
Lubridate permet de formater de nombreux formats en input, g´erer les fuseau horaires ou encore
extraire des ´el´ements de la date ou encore effectuer les op´erations entre les dates. Par ailleurs, il
est totalement compatible avec dplyr et la fonction pipe.
Ce package permet de g´erer facilement trois cas de figure que l’on rencontre souvent lorsque
l’on importe des donn´ees:
la date est encod´ee sous la forme d’une chaˆıne de caract`ere
la date est scind´ee en plusieurs colonnes (mois, ann´ee, jour)
la date existe mais dans un format inad´equat
Par ailleurs lubridate permet de travailler aussi bien avec les dates que les heures ou la
combinaison des deux:
date format date
time format heure
date-time format date et heure
jean jacques gauguier S´eance 1 janvier 2018 117 / 216
les fonctions int´egr´ees dans lubridate
Example
#1 afficher la date du jour: lubridate::today()
#2 afficher la date et l’heure actuelle: lubridate::now()
#3 formater une date `a partir d’une cha^ıne de caract`eres
madate<-ymd("2018-01-28")
madate<-mdy("January 31st, 2018")
madate<-dmy("31-Jan-2017")
madate<-ymd(20170131)
madateeheure<-ymd_hms("2017-01-31 20:11:59")
madateeheure<-mdy_hm("01/31/2017 08:01")
#4 sp´ecifier un fuseau horaire
madate<-ymd(20170131, tz = "UTC")
#5 formater une date `a partir de plusieurs colonnes
mesdonn´ees%>%
select(year, month, day, hour, minute)
#6 formater et cr´eer une variable une date `a partir de plusieurs colonnes
mesdonn´ees %>%
select(year, month, day, hour, minute) %>%
mutate(madate = make_datetime(year, month, day, hour, minute))
#7 transformer date-time en date, et date en date-time
madateeheure<-as_datetime(today())
madate<-as_date(now())
jean jacques gauguier S´eance 1 janvier 2018 118 / 216
l’aide m´emoire sur le package lubridate
Figure: `a t´el´echarger ici: https://www.rstudio.com/resources/cheatsheets
jean jacques gauguier S´eance 1 janvier 2018 119 / 216
l’aide m´emoire global sur les dates
Figure: `a t´el´echarger ici: http://blog.yhat.com/static/pdf/R date cheat sheet.pdf
jean jacques gauguier S´eance 1 janvier 2018 120 / 216
la navigation dans les listes
Dans le cadre de l’´ecriture d’une fonction ou d’une boucle il est n´ecessaire de maˆıtriser l’indicage
notamment lorsque l’on travaille avec les nested lists. Le graphique tir´ee de ”R for datascience”
(2017) indique la mani`ere dont on acc`ede aux ´el´ements d’une liste r´ecursive avec ”[ ]” ou ”[[
]]”). A noter que la notation a[[”b”]] est ´equivalente `a la notation a$b. Enfin ’[[ ]]” d´etruit la
hi´erarchie de la structure de stockage originelle.
Figure: wickham et grolemund (2017)
jean jacques gauguier S´eance 1 janvier 2018 121 / 216
la jointure des tables
Lorsque l’on manipule de la social data, nous sommes souvent amen´es `a joindre des
fichiers sur la base d’un ´el´ement commun (observation et/ variable).
Par exemple, `a partir d’un extract facebook j’effectue diff´erents traitements de
textmining en cr´eant un nouveau dataframe. In fine, je souhaite construire un fichier
unique constitu´e de l’extract de d´epart et de mon fichier de traitement. Les deux fichiers
ont un ´el´ement commun: l’id de mon post facebook. Je vais donc pouvoir r´ealiser une
jointure entre mes deux fichiers.
Le package dplyr permet de manipuler ´egalement les tables `a l’aide de diff´erentes
jointures grˆace `a ses fonctions int´egr´ees. (u e vignette pr´esente les possibilit´es offertes
en mati`ere de jointure. on pourra le t´el´echarger `a cette adresse:
https://cran.r-project.org/web/packages/dplyr/vignettes/two-table.html).
Bien ´evidemment, la condition obligatoire pour que les jointures s’effectuent r´eside
dans le fait que chaque fichier sous ˆetre stock´ee sous la forme ”tidy”.
Enfin les fonctions pr´esent´ees ici fonctionnent seulement sur la base d’une jointure entre
deux tables. Pour les jointures impliquant plus de deux tables, il faudra utiliser Reduce.
jean jacques gauguier S´eance 1 janvier 2018 122 / 216
les fonctions ”mutate” pour joindre les donn´es dans dplyr
La famille ”mutate” (inner join, left join, right join et full join) permet d’ajouter des
variables d’une table `a une premi`ere table sous certaines conditions.
Example
# premier cas ’’natural joint’’ sans sp´ecification d’un pivot
(toutes les colonnes de ma premi`ere table devront exister dans la seconde pour que
jointure fonctionne)
ma_premi`ere_table %>% left_join(ma_deuxi`eme_table)
# second cas je sp´ecifie un pivot par l’arg by
ma_premi`ere_table %>% left_join(ma_deuxi`eme_table, by=’’mon_pivot’’)
==>exemple id_facebook
# troisi`eme cas je force un pivot mais en sp´ecifiant le lien c
ma_premi`ere_table %>% left_join(ma_deuxi`eme_table, c(’’mon_pivot_pr’’,’’mon_pivot_sd
jean jacques gauguier S´eance 1 janvier 2018 123 / 216
les quatre types de jointure mutate dans dplyr
Example
# premier cas (inner_join)
(jointure si seulement si les ´el´ements sont pr´esents dans les DEUX tables)
(toutes les observations de la table finale devront exister au niveau de ma premi`er
ma_premi`ere_table %>% inner_join(ma_deuxi`eme_table)
# second cas (left_join)
ma_premi`ere_table %>% left_join(ma_deuxi`eme_table)
(toutes les observations de ma premi`ere table sont pr´eserv´ees et la jointure s’effec
de la seconde table)
# troisi`eme cas (right_join)
ma_premi`ere_table %>% right_join(ma_deuxi`eme_table)
(toutes les observations de ma seconde table sont pr´eserv´ees et la jointure s’effect
de la premi`ere table)
# quatri`eme cas (full_join)
ma_premi`ere_table %>% full_join(ma_deuxi`eme_table)
(mise en commun)
jean jacques gauguier S´eance 1 janvier 2018 124 / 216
les fonctions ’filtering” pour joindre les donn´es dans dplyr
La famille ”filtering” (semi join et anti join) permet d’ajouter des
observations d’une table `a une autre.
Example
# premier cas (semi_join)
(toutes les observations de ma premi`ere table devront exister dans la seconde pour q
jointure fonctionne)
ma_premiere_table %>% semi_join(ma_deuxi`eme_table)
# second cas (anti_join)
ma_premiere_table %>% anti_join(ma_deuxi`eme_table, by=’’mon_pivot’’)
(toutes les obervations de ma premi`ere table qui existent dans la seconde seront sup
une fois la jointure r´ealis´ee)
jean jacques gauguier S´eance 1 janvier 2018 125 / 216
trois fonctions pour op´erer des jointures entre tables
identiques
Sous r´eserve que les deux tables poss`edent une structure identique (c’est `a
dire les mˆemes variables), dplyr permet d’effectuer facilement l’union,
l’intersection et la diff´erence entre les observations appartenant `a deux
tables.
Example
# premier cas (intersect)
monnintersection<-intersect( ma_premi`ere_table, ma_deuxi`eme_table)
# second cas (union)
monunion<-union(ma_premi`ere_table, ma_deuxi`eme_table)
# second cas (setdiff)
madifference<-setdiff(ma_premi`ere_table, ma_deuxi`eme_table)
jean jacques gauguier S´eance 1 janvier 2018 126 / 216
les expressions r´eguli`eres avec le package grep
Le package grep permet d’utiliser les expressions r´eguli`eres pour manipuler
et transformer les chaˆınes de caract`eres dans r. En text miming, apr`es
avoir captur´e les donn´ees, l’´etape suivante consiste `a nettoyer les donn´ees
en puisant dans les expressions r´eguli`eres.
Le principe d’utilisation des expressions r´eguli`eres (regex) est simple: via
une expression ou m´etacaract`ere on recherche dans une chaˆıne de
caract`ere un mod`ele ou un pattern, sp´ecifique. Selon les
arguments/fonctions ajout´es `a l’expression celle-ci cherchera `a :
localiser du texte ce sont les fonctions grep, grepl, regexpr et
gregexpr,
substituer du texte ce sont les fonctions sub et gsub,
d´ecouper du texte la fonction strsplit
jean jacques gauguier S´eance 1 janvier 2018 127 / 216
les principaux m´etacaract`eres
[...]: un des caract`eres indiqu´es entre les crochets
[ˆ...]: tous les caract`eres sauf ceux indiqu´es apr`es le ˆ
[x-y]: les caract`eres compris entre x `a y inclus.
[:alpha:]: a-zA-Z
[:digit:]: 0-9
[:alnum:]: a-zA-Z0-9 et caract`eres sp´eciaux
[:lower:]: a-z
[:upper:]: A-Z
[:xdigit:]: 0-9a-fA-FT
[:graph:]: tout caract`ere graphique
[:print:]: tout caract`ere affichable
[:punct:]: tout caract`ere de ponctuation
[:blank:]: espace, tabulation
[:space:]: espace, tabulation, nouvelle ligne, retour chariot
[:cntrl:]: tout caract`ere de contrˆole.
jean jacques gauguier S´eance 1 janvier 2018 128 / 216
les principaux op´erateurs
. :n’importe quel caract`ere
ˆ: en dehors du ˆ, indique le d´ebut du texte
& indique la fin du texte
+: 1 ou plusieurs occurrences du motif qui pr´ec`ede le +
*: 0 ou plusieurs occurrences du motif qui pr´ec`ede le *
?: 0 ou 1 occurrence du motif pr´ec´edant du ?
n: a-z
x,: x ou plus occurrences du motif qui pr´ec`ede
,y: y occurrences au plus du motif qui pr´ec`ede
x,y: x `a y occurrences du motif qui pr´ec`ede
jean jacques gauguier S´eance 1 janvier 2018 129 / 216
les principales fonctions et leurs syntaxes
Example
#localiser du texte: les fonctions grep, grepl, regexpr et gregexpr
grep(mon_expression_r´eguli`ere, ma_cha^ıne_de_caract`ere, value=FALSE)
grep(mon_expression_r´eguli`ere, ma_cha^ıne_de_caract`ere, value=TRUE)
grepl(mon_expression_r´eguli`ere, ma_cha^ıne_de_caract`ere)
regexpr(mon_expression_r´eguli`ere, ma_cha^ıne_de_caract`ere)
gregexp(mon_expression_r´eguli`ere, ma_cha^ıne_de_caract`ere)
#substituer du texte: les fonctions sub et gsub
sub(mon_expression_r´eguli`ere, ma_cha^ıne_de_caract`ere_a_ajouter_si_true,
ma_cha^ıne_de_caract`ere)
gsub(mon_expression_r´eguli`ere, ma_cha^ıne_de_caract`ere_a_ajouter_si_true,
ma_cha^ıne_de_caract`ere)
gsub ==>expression vectoris´ee.....
#substituer du texte: la fonction strsplit
strsplit(ma_cha^ıne_de_caract`ere, " mon_pattern")
jean jacques gauguier S´eance 1 janvier 2018 130 / 216
l’aide m´emoire pour les regex
Figure: `a t´el´echarger ici: https://www.rstudio.com/resources/cheatsheets/
jean jacques gauguier S´eance 1 janvier 2018 131 / 216
les structures de contrˆole ou boucles
Comme les fonctions que nous verrons un peu plus tard, les boucles sont des outils int´eressants
qui permettent d’´eviter de dupliquer le code. En effet, la duplication est probl´ematique `a
diff´erents plans:
g´en´eratrice d’erreurs: mauvaise recopie (oubli de caract`eres, mauvaise indentation, etc....)
obscurcit les programmes: allonge la longueur du code et complexifie la lecture
complexifie les mises `a jour: duplication oblige `a modifier chaque ligne de code identique,
...
Une boucle comprend trois ´el´ements:
le r´esultat: structure de donn´ees dans laquelle sera stock´ee le r´esultat de la boucle
(mon resultat”<-vector(”integer”, length))
la s´equence: indique la longueur de l’it´eration ex: 1: length(mon vecteur) du premi`ere
´el´ement au dernier (length(mon vecteur)=n)
l’op´eration `a r´ealiser ou la fonction `a op´erer: il s’agit de l’op´eration que la boucle
effectuera `a chaque pas et stockera par la suite (ex: output[[i]]<- median(df[[i]]) donc
output[[1]]<- median(df[[1]]) puis output[[2]] <-median(df[[2]]) et ainsi de suite....
Avant d’introduire les boucles, nous attardons nous sur les op´erateurs arithm´etiques et logiques
ainsi que les structures de test.
jean jacques gauguier S´eance 1 janvier 2018 132 / 216
les op´erateurs arithm´etiques et logiques
x+y: addition
x-y: soustraction
x*y: multiplication
x/y: division
x/y: exposant (** autre ´ecriture)
x %% y: modulo (reste)
x == y: test ´egalit´e
x <= y: test inf´erieur ou ´egal `a
x > = y: test sup´erieur ou ´egal `a
> : test sup´erieur
<: test inf´erieur
!=: test si diff´erent
x||y: ou
&: et
isTRUE(x): test si vrai
jean jacques gauguier S´eance 1 janvier 2018 133 / 216
les structures de test
Example
#if-then-else
if (condition) expr.si.vrai else expr.si.faux
#if-then-else (forme simplifi´ee)
if (condition) expr.si.vrai
#ifelse
operation(ifelse(condition, expr.si.vrai, expr.si.faux))
#swith (´equivalent `a case: choisir d’ex´ecuter un bloc de code en fonction d’un ´el´em
switch(expr,
´etiquette-1 = bloc-de-code-1,
´etiquette-2 = bloc-de-code-2,
...
...
...)
jean jacques gauguier S´eance 1 janvier 2018 134 / 216
les boucles dans r
Example
#la boucle while (tant que, alors fait cela)
i <- 1
while (i <= 10) i <- i+4
# la boucle while +break
while(TRUE) {
i <- i+4
if (i > 10) break }
#la boucle repeat+break
i <- 1
repeat {
i <- i+4
if (i > 10) break }
#m^eme r´esultat pour les trois boucles ci-dessus
i
[1] 13
#la boucle for (pour chaque it´eration, fait cela)
x<- c(5,12,13)
for (n in x) print(n^2)
[1] 25, 144,169
jean jacques gauguier S´eance 1 janvier 2018 135 / 216
les fonctions vectoris´ees
Parmi les utilisateurs de r, une blague circule: if you’ are using a loop in
r, you’re probably doing something wrong”.
En effet, comme souvent avec r, il y a plusieurs solutions pour effectuer
une op´eration. Comme nous l’avons vu, il est souvent question d’appliquer
une op´eration par exemple une fonction sp´ecifique `a chaque ´el´ement d’une
structure de donn´ees (liste, ligne d’un dataframe, etc...).
r et certains packages fournissent des fonctions int´eressantes pour
permettent d’´eviter l’utilisation des boucles. Nous pr´esentons ici
successivement:
: la famille apply() soit lapply(), dapply(), etc...
: le package purr qui permet d’appliquer une fonction `a des listes.
jean jacques gauguier S´eance 1 janvier 2018 136 / 216
la famille apply()
La fonction apply et ses d´eriv´ees permettent d’´eviter l’utilisation de boucles: elles permettent
d’appliquer des transformations `a chaque ´el´ement d’une matrice, d’un tableau, d’un dataframe
ou encore d’une liste.
La fonction apply est construite de diff´erents arguments
x: x est un tableau ou une matrice
MARGIN: argument qui sp´ecifie la mani`ere dont va s’appliquer apply:
MARGIN=1, apply s’applique sur les lignes
MARGIN=2, apply s’applique sur les colonnes
FUN: la fonction que l’on veut appliquer.
...: arguments suppl´ementaires
A partir de la fonction apply, toute une famille de fonction peuvent ˆetre appel´ees:
lapply: s’applique sur les dataframes, listes ou encore vecteurs et renvoie une liste d’o`u
lapply
sapply: similaire `a lapply mais renvoie un r´esultat simplifi´e en comparaison de lapply: un
vecteur au lieu d’une liste
mapply: version multidimensionnelle de sapply La diff´erence entre cette fonction et les
fonctions lapply et lapply est qu’elle peut fournir `a fonction FUN des arguments
suppl´ementaires prenant des valeurs qui diff`erent selon les sous-objets
tapply: s’applique sur des facteurs et renvoie une liste
aggregate: s’applique sur un dataframe et applique la fonction s´epar´ement pour chaque
colonne du dataframe
jean jacques gauguier S´eance 1 janvier 2018 137 / 216
les fonctions apply par les exemples
Example
data<-matrix(c(1,2,3,4,5,6), nrow=2)
#naming
colnames(data)=c("C1","C2","C3")
rownames(data)=c("L1","L2")
# la fonction apply() pour faire la somme de chaque ligne
apply(data, 1, sum)
# la fonction apply() pour faire la somme de chaque ligne
en rempla¸cant 1 par 2
apply(data, 2, sum)
x <- lapply(5:8, sample, x = 1:10))
lapply(x, mean)
sapply(x, mean)
jean jacques gauguier S´eance 1 janvier 2018 138 / 216
le package purr et sa fonction map
Le package purr avec sa fonction map permet d’´eviter l’utilisation des boucles. En
fonction de l’output d´esir´e, on utilisera des fonctions diff´erentes:
map(): une liste en sortie
map lgl(): un vector logique (TRUE, FALSE,...)
map int(): un vecteur num´erique
map dbl(): un vecteur double
map chr(): une liste de chaines de caract`eres
Comme la fonction apply, la fonction map est construite `a partir de diff´erents
arguments
x: x est structure de stockage sur laquelle on peut appliquer les fonctions
FUN: la fonction que l’on veut appliquer
...: arguments suppl´ementaires
Enfin, la fonction map poss`ede les d´eclinaisons: map2, pmap, invoke map qui permettent
d’appliquer finement des fonctions `a chaque ´el´ements d’une liste ou d’un vecteur.
jean jacques gauguier S´eance 1 janvier 2018 139 / 216
l’aide m´emoire pour le package purr
Figure: `a t´el´echarger ici: https://www.rstudio.com/resources/cheatsheets/
jean jacques gauguier S´eance 1 janvier 2018 140 / 216
pourquoi ´ecrire une fonction?
r´eponse simple....
jean jacques gauguier S´eance 1 janvier 2018 141 / 216
la construction d’une fonction dans r
Une fonction est compos´ee obligatoirement de trois ´el´ements
un nom: un nom (un nom explicite de pr´ef´erence)
un corps/les instructions: les op´erations effectu´ees par la fonction
les arguments: les inputs n´ecessaires
Example
# structure d’une fonction
le_nom_de_ma_fonction <- function(input_1, input_2, input_3,..) {
le_corps_de_ma_fonction
}
Il est possible d’ajouter d’autres ´el´ements
la v´erification: contrˆole le type des arguments
la fin de la fonction:la fonction return() permet de s’assurer de la bonne fin de la fonction
l’argument res: sp´ecifie finement la structure de stockage de l’output
Example
# structure d´evelopp´ee d’une fonction
le_nom_de_ma_fonction <- function(input_1, input_2, input_3) {
stopifnot(all(is.numeric(input_1),is.numeric(input_2),is.numeric(input_3)))
le_corps_de_ma_fonction
res <- list()
}
jean jacques gauguier S´eance 1 janvier 2018 142 / 216
S´eance 3: repr´esenter les donn´ees dans r
jean jacques gauguier S´eance 1 janvier 2018 143 / 216
Introduction
jean jacques gauguier S´eance 1 janvier 2018 144 / 216
le choix d’une repr´esentation graphique: un processus
it´eratif
Figure: adapt´e de Yau: Data Points: Visualization That Means Something, 2013, Wiley
jean jacques gauguier S´eance 1 janvier 2018 145 / 216
le choix d’un graphique: un choix...un peu..balis´e
jean jacques gauguier S´eance 1 janvier 2018 146 / 216
Quelques conseils pour r´eussir ses graphiques
Avant de nous plonger dans le code, voici quelques conseils basiques en mati`ere de choix de repr´esentation graphique
S’appliquer le process it´eratif dans la phase de s´election du graphique
Ne pas h´esiter `a faire des nombreux essais
Adapter les visualisations `a mon audience (combattez votre ´ego !!!!)
Soigner la surcouche (l´egende, titre des axes, datatips, d´efinition....)
Limiter le nombre de typo, etc...pour ne pas distraire le lecteur
MAIS SURTOUT SOYEZ HONNˆETE AVEC VOS DATAS
De nombreux ouvrages et exemples existent pour aider `a la repr´esentation graphique. En dehors de l’univers r (et des classiques
Cleveland, Tufte et Few) voici une liste d’ouvrages basiques et utiles en mati`ere de visualisation des donn´ees:
Data Points: Visualization That Means Something, Yau, 2013, Wiley
The Wall Street Journal Guide to Information Graphics, Wong, 2014, Norton
Storytelling with Data: A Data Visualization Guide for Business Professionals, Nussbaumer Knaflic, 2013, Wiley
The functional art: An introduction to information graphics and visualization, Cairo, 2013,Berkeley: New Riders
Good Charts: The HBR Guide to Making Smarter, More Persuasive Data Visualizations, Berinato, 2016, HBR Press
A signaler que ces auteurs ont tous des blogs. Le blog de Nathan Yau http://flowingdata.com/ est souvent cit´e parmi les blogs
de r´ef´erence en mati`ere de dataviz. A noter l’excellent dataviz catalogue https://datavizcatalogue.com/
jean jacques gauguier S´eance 1 janvier 2018 147 / 216
la repr´esentation graphique avec r
jean jacques gauguier S´eance 1 janvier 2018 148 / 216
La r´ealisation de graphiques dans r
r poss`ede d’excellentes capacit´es au niveau de la cr´eation graphiques grˆace
notamment:
aux fonctionnalit´es du package de base graphics
`a diff´erents packages destin´es `a la visualisation:
le package ggplot2
le package lattice pour repr´esenter les variables multivari´ees,
les packages destin´es `a repr´esenter les r´eseaux: igraph et ggraph
le package maps pour la cartographie
....
Au fil de cette session, nous verrons dans un premier temps les possibilit´es
offertes par le package de base graphics. Dans un second temps nous nous
int´eressons `a ggplot2 qui est probablement le package le plus utilis´e dans
l’univers r en mati`ere de repr´esentation graphique.
jean jacques gauguier S´eance 1 janvier 2018 149 / 216
cr´eer un graphique avec graphics: un process en deux
temps
Quelque soit le choix effectu´e dans r pour r´ealiser un graphique, la
r´ealisation d’un graphique passe par les ´etapes suivantes:
l’´etape de base: la r´ealisation d’un graphique ”nu”:
j’indique les variables que je veux repr´esenter
j’indique le type de graphique que je veux (barres, camembert, ligne,
heat map, etc....)
l’´etape de finition: l’ajout des couches suppl´ementaires:
modification du th`eme,
modification des axes (taille, couleur, orientation, font,etc...)
cr´eation et/ou modification du titre (taille, couleur, orientation,
font,etc...)
....
jean jacques gauguier S´eance 1 janvier 2018 150 / 216
La liste des repr´esentations graphiques
Le package graphics permet de repr´esenter de nombreux types de graphiques. En fonction du
type de variables (continues, discr`etes, ordonn´ees, non ordonn´ees, etc...), il est possible de
choisir parmi cette liste (non exhaustive) de graphiques:
barplot() diagramme en bˆaton (variable discrˆete)
boxplot() boite `a moustaches (variables continues)
hist(): histogramme (variables continues) #choix les classes
pie(): camembert #barplot plus efficace
plot(): diagramme de dispersion (diagramme de base)
curve(): graphique pour repr´esenter une fonction
sunflowerplot(): diagramme de dispersion sans chevauchement (jitter)
pairs(): matrice de diagramme de dispersion
...
jean jacques gauguier S´eance 1 janvier 2018 151 / 216
la grammaire de base pour plot
La palette des arguments et de fonctions permettant de modifier l’apparence des graphiques avec plot est large
(https://stat.ethz.ch/R-manual/R-devel/library/graphics/html/00Index.html pour la documentation). La liste ci-dessous int`egre
les principaux choix:
x variable en ordonn´ee
y variable en abscisse
type=“p” trace des points (choix par d´efaut)
lty=”type de tiret”) choix du type de tiret (de 0 `a 6)
lwd=nombre ´epaisseur du point
pch = nombre type de point (de 0 `a 25: chaque
nombre correspond `a un type)
col=”ma couleur” choix de couleur
main= ”mon titre” choix du titre
xlab= ”titre axe x” choix titre x
ylab= ”titre axe y” choix titre y
xlim= c(valeur min, valeur max) lim de x (aussi log)
ylim= c(valeur min, valeur max) lim de y
sub=”sous titre” choix du sous titre
col.main=”ma couleur” couleur du titre
col.lab=”ma couleur” couleur titre des axes
col.sub=”ma couleur” couleur du sous titre
font.main=nombre’ font du titre (ex font.main=4)
font.lab font des axes
font.sub font du sous titre
cex.main=nombre taille des font 1 est la r´ef´erence
cex.lab taille font des axes
cex.sub taille font du sous titre
la fonction title() int`egre les param`etres li´es au titre
la fonction legend() int`egre les param`etres li´es `a la
l´egende
la fonction abline() ajoute une droite au graphique
la fonction axis() pour ajouter des axes
la fonction box() pour ajouter un cadre
la fonction texte () pour ajouter des axes
la fonction arrows() pour ajouter des fl`eches
la fonction grid() pour ajouter une grille
la fonction gridpar() pour changer de mani`ere
permanente les param`etres graphiques
jean jacques gauguier S´eance 1 janvier 2018 152 / 216
un premier graphique plot
Example
#1 je g´en`ere des donn´ees
x<-1:10
y1<-x*x
y2=3*y1
#2 un premier graphique
plot(x)
jean jacques gauguier S´eance 1 janvier 2018 153 / 216
un second graphique
Example
#1 graphique (x,y)+type+taille+couleur+label des axes
plot(x, y1, type="b", pch=19, col="red", xlab=" ", ylab=" ")
jean jacques gauguier S´eance 1 janvier 2018 154 / 216
mon second graphique avec une troisi`eme variable
Example
#1 graphique (x,y1)+type+taille+couleur+label des axes
plot(x, y1, type="b", pch=19, col="red", xlab=" ", ylab=" ")
#2 graphique (x,y2)+type+taille+couleur+choix des tirets
lines(x, y2, pch=18, col="blue", type="b", lty=2)
jean jacques gauguier S´eance 1 janvier 2018 155 / 216
mon second graphique optimis´e
Example
#1 graphique (x,y1)+type+taille+couleur+label des axes
plot(x, y1, type="b", pch=19, col="red", xlab=" ", ylab=" ")
#2 graphique (x,y2)+type+taille+couleur+choix des tirets
lines(x, y2, pch=18, col="blue", type="b", lty=2)
#3 ajout d’un titre+param`etres du titre
title(main = "Mon titre", sub = "Mon sous titre",
xlab = "Le titre de mon axe des x", ylab = "Le titre de mon axe des y",
cex.main = 2, font.main= 4, col.main= "black", cex.sub = 0.75,
font.sub = 3, col.sub = "black", col.lab ="darkblue")
jean jacques gauguier S´eance 1 janvier 2018 156 / 216
mon second graphique encore...plus optimis´e
Example
#1 graphique (x,y1)+type+taille+couleur+label des axes
plot(x, y1, type="b", pch=19, col="red", xlab=" ", ylab=" ")
#2 graphique (x,y2)+type+taille+couleur+choix des tirets
lines(x, y2, pch=18, col="blue", type="b", lty=2)
#3 ajout d’un bloc titre+param`etres du titre
title(main = "Mon titre", sub = "Mon sous titre",
xlab = "Le titre de mon axe des x", ylab = "Le titre de mon axe des y",
cex.main = 2, font.main= 4, col.main= "black", cex.sub = 0.75,
font.sub = 3, col.sub = "black", col.lab ="darkblue")
#4 ajout d’un bloc l´egende+param`etres de la l´egende
legend(list(x = 1,y = 80), legend=c("Line 1", "Line 2"),
col=c("red", "blue"), lty=1:2, cex=0.8)
jean jacques gauguier S´eance 1 janvier 2018 157 / 216
mon second graphique optimis´e avec des lignes
Example
#5 ajout de ligne (hypoth`ese mod`ele lin´eaire)
abline(lsfit(x,y1),col="red")
abline(lsfit(x,y2),col="blue")
#6 ajout de ligne (hypoth`ese mod`ele lin´eaire+ avanc´e)
abline(lm(x,y1),col="red") #
abline(lm(x,y2),col="blue")
#7 r´egression non param´etrique
lines(lowess(x,y1),col="red4")
lines(lowess(x,y2),col="blue4")
jean jacques gauguier S´eance 1 janvier 2018 158 / 216
exemple de graphique barplot
Les repr´esentations diagramme en bˆaton ou barplot() et les histogrammes ou hist() sont
souvent confondues....alors qu’elles s’appliquent `a des donn´ees diff´erentes:
variables discr`etes: barplot (taille des barres = valeur de la cat´egorie)
variables continues: histogramme (taille des barres = effectif dans l’intervalle)
A noter que le choix automatique de l’intervalle pour illustrer la r´epartition des valeurs
n’est pas toujours satisfaisant.
Example
#1 je g´en`ere des donn´ees
valeurs<-sample(1:100, 5, replace=F)
names(valeurs)<-c("cat_a","cat_b","cat_c","cat_d","cat_e")
#2 un premier graphique
barplot(effectifs)
jean jacques gauguier S´eance 1 janvier 2018 159 / 216
mon second graphique optimis´e
Example
#3 j’ajoute des ´el´ements
barplot(valeurs, col=c(1,2,7,0,8), border="black", xlab="mes_categories",
ylab="mes_valeurs", main="mon_histogramme")
jean jacques gauguier S´eance 1 janvier 2018 160 / 216
mon second graphique modifi´e
Example
#4 je modifie l’orientation du graphique et les graduations
avec les param`etres: horiz=T et las=1
barplot(valeurs, col=c(1,2,7,0,8),border="black", xlab="mes_categories",
ylab="mes_valeurs", main="mon_histogramme", horiz=T , las=1)
jean jacques gauguier S´eance 1 janvier 2018 161 / 216
exemple de graphique histogramme
Un histogramme avec graphics se construit avec la fonction hist(). r choisit automatiquement la
taille de l’intervalle de base.
Example
#1 je g´en`ere des donn´ees
count<- sample(1:100, 100, replace=T)
dataframe_hist<-as.data.frame (count)
#2 un premier graphique
hist(dataframe_hist$count)
jean jacques gauguier S´eance 1 janvier 2018 162 / 216
mon histogramme optimis´e
r via un algorithme (il existe diff´erents algo.) choisit la largeur de l’intervalle de base.
L’utilisateur a le loisir de choisir son intervalle ”manuellement” via la fonction breaks:
breaks=seq(min(x), max(x), length=xx), include.lowest=TRUE
Example
#3 je g´en`ere des donn´ees
hist(dataframe_hist$count,breaks=seq(0,12000,500),include.lowest=TRUE,col="grey",
main="mon_histogramme",xlab="mes_trajets", ylab="fr´equence")
jean jacques gauguier S´eance 1 janvier 2018 163 / 216
mon histogramme encore plus optimis´e
j’ajoute via la fonction abline() deux lignes calculant la m´ediane et la moyenne.
Example
hist(dataframe_hist$count,breaks=seq(0,12000,500),include.lowest=TRUE,col="grey",
main="mon_histogramme",xlab="mes_trajets", ylab="fr~A c quence")
abline(v=c(mean(dataframe_hist$count),median(dataframe_hist$count)),lty=c(2,3),lwd=2
jean jacques gauguier S´eance 1 janvier 2018 164 / 216
mon histogramme encore encore plus optimis´e
j’ajoute la l´egende
Example
#4 je g´en`ere des donn´ees
legend("topright",legend=c("mean km","median km"),lty=c(2,3),lwd=2)
jean jacques gauguier S´eance 1 janvier 2018 165 / 216
un pie chart
Un pie chart avec graphics se construit avec la fonction pie(). la documentation pour ce graphique se trouve ici:
https://stat.ethz.ch/R-manual/R-devel/library/graphics/html/pie.html.
A noter cette note dans la documentation: Pie charts are a very bad way of displaying information. The eye is good at judging
linear measures and bad at judging relative areas. A bar chart or dot chart is a preferable way of displaying this type of data.
Example
pie(effectifs, abels = names(x), edges = 200, radius = 0.8,
density = NULL, angle = 45, col = "grey", border = "white",
lty = 2, main = "mon_titre", sub = "Mon sous titre",
cex.main = 2, font.main= 2)
jean jacques gauguier S´eance 1 janvier 2018 166 / 216
un box plot
Un box plot avec graphics se construit avec la fonction boxplot(). cette graphique permet de visualiser la r´epartition des valeurs
au sein de la boite (premier quartile, troisi`eme quartile et m´ediane) et `a l’ext´erieur de la boite les fameuses moustaches dont la
longueur ´equivalaut `a 1.5 fois l’espace interquartile (la distance entre le 1er et le 3`eme quartile)
Example
boxplot(dataframe_hist$count, main="ma_boite",
xlab="mes_donn´ees", ylab="mes_valeurs", col="darkgreen")
jean jacques gauguier S´eance 1 janvier 2018 167 / 216
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r
extraire, transformer et représenter des données dans r

Contenu connexe

Tendances

La veille stratégique
La veille stratégiqueLa veille stratégique
La veille stratégique
ghizlane bennour
 
Questionnaire sous spss
Questionnaire sous spssQuestionnaire sous spss
Questionnaire sous spss
Adad Med Chérif
 
La datavisualisation
La datavisualisationLa datavisualisation
La datavisualisation
Soft Computing
 
Data mining - ACP Analyse en Composantes Principales
Data mining - ACP Analyse en Composantes PrincipalesData mining - ACP Analyse en Composantes Principales
Data mining - ACP Analyse en Composantes Principales
Mohamed Heny SELMI
 
GP Chapitre 2 : Les méthodes de prévision
GP Chapitre 2 : Les méthodes de prévision GP Chapitre 2 : Les méthodes de prévision
GP Chapitre 2 : Les méthodes de prévision ibtissam el hassani
 
Méthodes et outils en intelligence économique territoriale
Méthodes et outils en intelligence économique territorialeMéthodes et outils en intelligence économique territoriale
Méthodes et outils en intelligence économique territoriale
Christophe Marnat
 
Analyse de données avec spss,
Analyse de données avec spss,Analyse de données avec spss,
Analyse de données avec spss,
Mohamed Amine Sansar
 
5.3 Régression logistique
5.3 Régression logistique5.3 Régression logistique
5.3 Régression logistique
Boris Guarisma
 
Presentation budget programmes methodologies
Presentation budget programmes methodologiesPresentation budget programmes methodologies
Presentation budget programmes methodologiesRACHID MABROUKI
 
BigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceBigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-Reduce
Lilia Sfaxi
 
5.2 Régression linéaire
5.2 Régression linéaire5.2 Régression linéaire
5.2 Régression linéaire
Boris Guarisma
 
Veille et méthodologie de veille
Veille et méthodologie de veilleVeille et méthodologie de veille
Veille et méthodologie de veillePatrick Bérard
 
Le système d’information de l’entreprise
Le système d’information de l’entrepriseLe système d’information de l’entreprise
Le système d’information de l’entreprise
Lee Schlenker
 
L´environnement
L´environnementL´environnement
L´environnement
mercheguillen
 
Cours datamining
Cours dataminingCours datamining
Cours datamining
sarah Benmerzouk
 
Présentation de thèse : modèle DISTICE
Présentation de thèse : modèle DISTICEPrésentation de thèse : modèle DISTICE
Présentation de thèse : modèle DISTICEaliasdem
 
La stratégie Facebook
La stratégie FacebookLa stratégie Facebook
La stratégie Facebook
Nicholas Roy
 
Outils décisionnels : Data-Mining and Data-warehouse
Outils décisionnels : Data-Mining and Data-warehouseOutils décisionnels : Data-Mining and Data-warehouse
Outils décisionnels : Data-Mining and Data-warehouse
BEL MRHAR Mohamed Amine
 
Chap1 systéme d'information
Chap1 systéme d'informationChap1 systéme d'information
Chap1 systéme d'informationGhita Benabdellah
 
Diaporama archivage electronique
Diaporama archivage electroniqueDiaporama archivage electronique
Diaporama archivage electronique
Vanessa GENDRIN
 

Tendances (20)

La veille stratégique
La veille stratégiqueLa veille stratégique
La veille stratégique
 
Questionnaire sous spss
Questionnaire sous spssQuestionnaire sous spss
Questionnaire sous spss
 
La datavisualisation
La datavisualisationLa datavisualisation
La datavisualisation
 
Data mining - ACP Analyse en Composantes Principales
Data mining - ACP Analyse en Composantes PrincipalesData mining - ACP Analyse en Composantes Principales
Data mining - ACP Analyse en Composantes Principales
 
GP Chapitre 2 : Les méthodes de prévision
GP Chapitre 2 : Les méthodes de prévision GP Chapitre 2 : Les méthodes de prévision
GP Chapitre 2 : Les méthodes de prévision
 
Méthodes et outils en intelligence économique territoriale
Méthodes et outils en intelligence économique territorialeMéthodes et outils en intelligence économique territoriale
Méthodes et outils en intelligence économique territoriale
 
Analyse de données avec spss,
Analyse de données avec spss,Analyse de données avec spss,
Analyse de données avec spss,
 
5.3 Régression logistique
5.3 Régression logistique5.3 Régression logistique
5.3 Régression logistique
 
Presentation budget programmes methodologies
Presentation budget programmes methodologiesPresentation budget programmes methodologies
Presentation budget programmes methodologies
 
BigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceBigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-Reduce
 
5.2 Régression linéaire
5.2 Régression linéaire5.2 Régression linéaire
5.2 Régression linéaire
 
Veille et méthodologie de veille
Veille et méthodologie de veilleVeille et méthodologie de veille
Veille et méthodologie de veille
 
Le système d’information de l’entreprise
Le système d’information de l’entrepriseLe système d’information de l’entreprise
Le système d’information de l’entreprise
 
L´environnement
L´environnementL´environnement
L´environnement
 
Cours datamining
Cours dataminingCours datamining
Cours datamining
 
Présentation de thèse : modèle DISTICE
Présentation de thèse : modèle DISTICEPrésentation de thèse : modèle DISTICE
Présentation de thèse : modèle DISTICE
 
La stratégie Facebook
La stratégie FacebookLa stratégie Facebook
La stratégie Facebook
 
Outils décisionnels : Data-Mining and Data-warehouse
Outils décisionnels : Data-Mining and Data-warehouseOutils décisionnels : Data-Mining and Data-warehouse
Outils décisionnels : Data-Mining and Data-warehouse
 
Chap1 systéme d'information
Chap1 systéme d'informationChap1 systéme d'information
Chap1 systéme d'information
 
Diaporama archivage electronique
Diaporama archivage electroniqueDiaporama archivage electronique
Diaporama archivage electronique
 

Similaire à extraire, transformer et représenter des données dans r

Archiver les réseaux sociaux : Panorama des pratiques et des enjeux : entre a...
Archiver les réseaux sociaux : Panorama des pratiques et des enjeux : entre a...Archiver les réseaux sociaux : Panorama des pratiques et des enjeux : entre a...
Archiver les réseaux sociaux : Panorama des pratiques et des enjeux : entre a...
Antoine Courtin
 
Archiver le web social: Quelles méthodes pour quels objectif ?
Archiver le web social: Quelles méthodes pour quels objectif ?Archiver le web social: Quelles méthodes pour quels objectif ?
Archiver le web social: Quelles méthodes pour quels objectif ?
Antoine Courtin
 
AGMQ 2011 : Les données libres et le territoire
AGMQ 2011 : Les données libres et le territoireAGMQ 2011 : Les données libres et le territoire
AGMQ 2011 : Les données libres et le territoire
noucher
 
Médias sociaux
Médias sociauxMédias sociaux
Médias sociauxThonnard
 
[Greta] Web et réseaux sociaux juin 2015 - séance 1 + 2 + 3 + Test
[Greta] Web et réseaux sociaux juin 2015 - séance 1 + 2 + 3 + Test[Greta] Web et réseaux sociaux juin 2015 - séance 1 + 2 + 3 + Test
[Greta] Web et réseaux sociaux juin 2015 - séance 1 + 2 + 3 + Test
Gilles Regad
 
Avant la veille : tentative de grammaire du web
Avant la veille : tentative de grammaire du webAvant la veille : tentative de grammaire du web
Avant la veille : tentative de grammaire du web
richard peirano
 
Outils numériques à l'usage des bibliothécaires
Outils numériques à l'usage des bibliothécairesOutils numériques à l'usage des bibliothécaires
Outils numériques à l'usage des bibliothécaires
Flora Gousset
 
2014 05 vf j2 strasbourg_app_itg_j_vds
2014 05 vf j2 strasbourg_app_itg_j_vds2014 05 vf j2 strasbourg_app_itg_j_vds
2014 05 vf j2 strasbourg_app_itg_j_vdsJean Vanderspelden
 
Mémoire de fin d'étude - La big data et les réseaux sociaux
Mémoire de fin d'étude - La big data et les réseaux sociauxMémoire de fin d'étude - La big data et les réseaux sociaux
Mémoire de fin d'étude - La big data et les réseaux sociaux
Chloé Marty
 
Veille et social bookmarking
Veille et social bookmarkingVeille et social bookmarking
Veille et social bookmarking
Claire Chignard
 
Visualisation de données & Open data (Introduction)
Visualisation de données & Open data (Introduction)Visualisation de données & Open data (Introduction)
Visualisation de données & Open data (Introduction)
at Backbook
 
Comment analyser une mobilisation collective dans les réseaux socionumériques...
Comment analyser une mobilisation collective dans les réseaux socionumériques...Comment analyser une mobilisation collective dans les réseaux socionumériques...
Comment analyser une mobilisation collective dans les réseaux socionumériques...
Guillaume Cabanac
 
L’influence des internautes sur les marques à travers les médias sociaux 2009
L’influence des internautes sur les marques à travers les médias sociaux 2009L’influence des internautes sur les marques à travers les médias sociaux 2009
L’influence des internautes sur les marques à travers les médias sociaux 2009
Sarah Connor
 
Infopresse cgt-final
Infopresse cgt-finalInfopresse cgt-final
Infopresse cgt-final
Claude G. Théoret
 
Publiciser ses travaux de recherche : être (re)connu
Publiciser ses travaux de recherche : être (re)connuPubliciser ses travaux de recherche : être (re)connu
Publiciser ses travaux de recherche : être (re)connu
Urfist Méditerranée
 
Curation urfist fevrier_mars_2013
Curation urfist fevrier_mars_2013Curation urfist fevrier_mars_2013
Curation urfist fevrier_mars_2013
François Magnan
 
Mettre en place et optimiser une veille professionnelle
Mettre en place et optimiser une veille professionnelleMettre en place et optimiser une veille professionnelle
Mettre en place et optimiser une veille professionnelle
Diane Le Hénaff
 
Exploiter les medias sociaux en entreprise
Exploiter les medias sociaux en entrepriseExploiter les medias sociaux en entreprise
Exploiter les medias sociaux en entreprise
Romain Biard
 

Similaire à extraire, transformer et représenter des données dans r (20)

Archiver les réseaux sociaux : Panorama des pratiques et des enjeux : entre a...
Archiver les réseaux sociaux : Panorama des pratiques et des enjeux : entre a...Archiver les réseaux sociaux : Panorama des pratiques et des enjeux : entre a...
Archiver les réseaux sociaux : Panorama des pratiques et des enjeux : entre a...
 
Archiver le web social: Quelles méthodes pour quels objectif ?
Archiver le web social: Quelles méthodes pour quels objectif ?Archiver le web social: Quelles méthodes pour quels objectif ?
Archiver le web social: Quelles méthodes pour quels objectif ?
 
AGMQ 2011 : Les données libres et le territoire
AGMQ 2011 : Les données libres et le territoireAGMQ 2011 : Les données libres et le territoire
AGMQ 2011 : Les données libres et le territoire
 
Médias sociaux
Médias sociauxMédias sociaux
Médias sociaux
 
[Greta] Web et réseaux sociaux juin 2015 - séance 1 + 2 + 3 + Test
[Greta] Web et réseaux sociaux juin 2015 - séance 1 + 2 + 3 + Test[Greta] Web et réseaux sociaux juin 2015 - séance 1 + 2 + 3 + Test
[Greta] Web et réseaux sociaux juin 2015 - séance 1 + 2 + 3 + Test
 
Avant la veille : tentative de grammaire du web
Avant la veille : tentative de grammaire du webAvant la veille : tentative de grammaire du web
Avant la veille : tentative de grammaire du web
 
Outils numériques à l'usage des bibliothécaires
Outils numériques à l'usage des bibliothécairesOutils numériques à l'usage des bibliothécaires
Outils numériques à l'usage des bibliothécaires
 
2014 05 vf j2 strasbourg_app_itg_j_vds
2014 05 vf j2 strasbourg_app_itg_j_vds2014 05 vf j2 strasbourg_app_itg_j_vds
2014 05 vf j2 strasbourg_app_itg_j_vds
 
Mémoire de fin d'étude - La big data et les réseaux sociaux
Mémoire de fin d'étude - La big data et les réseaux sociauxMémoire de fin d'étude - La big data et les réseaux sociaux
Mémoire de fin d'étude - La big data et les réseaux sociaux
 
Veille et social bookmarking
Veille et social bookmarkingVeille et social bookmarking
Veille et social bookmarking
 
Visualisation de données & Open data (Introduction)
Visualisation de données & Open data (Introduction)Visualisation de données & Open data (Introduction)
Visualisation de données & Open data (Introduction)
 
Comment analyser une mobilisation collective dans les réseaux socionumériques...
Comment analyser une mobilisation collective dans les réseaux socionumériques...Comment analyser une mobilisation collective dans les réseaux socionumériques...
Comment analyser une mobilisation collective dans les réseaux socionumériques...
 
L’influence des internautes sur les marques à travers les médias sociaux 2009
L’influence des internautes sur les marques à travers les médias sociaux 2009L’influence des internautes sur les marques à travers les médias sociaux 2009
L’influence des internautes sur les marques à travers les médias sociaux 2009
 
Infopresse cgt-final
Infopresse cgt-finalInfopresse cgt-final
Infopresse cgt-final
 
Publiciser ses travaux de recherche : être (re)connu
Publiciser ses travaux de recherche : être (re)connuPubliciser ses travaux de recherche : être (re)connu
Publiciser ses travaux de recherche : être (re)connu
 
Curation urfist fevrier_mars_2013
Curation urfist fevrier_mars_2013Curation urfist fevrier_mars_2013
Curation urfist fevrier_mars_2013
 
Mettre en place et optimiser une veille professionnelle
Mettre en place et optimiser une veille professionnelleMettre en place et optimiser une veille professionnelle
Mettre en place et optimiser une veille professionnelle
 
Cgo&co ujjef-210510
Cgo&co ujjef-210510 Cgo&co ujjef-210510
Cgo&co ujjef-210510
 
Presentation uqam
Presentation uqamPresentation uqam
Presentation uqam
 
Exploiter les medias sociaux en entreprise
Exploiter les medias sociaux en entrepriseExploiter les medias sociaux en entreprise
Exploiter les medias sociaux en entreprise
 

Dernier

Webinaire santé prédation - Doré Nicolas Inrae 31 mai 2024.pdf
Webinaire santé prédation - Doré Nicolas Inrae 31 mai 2024.pdfWebinaire santé prédation - Doré Nicolas Inrae 31 mai 2024.pdf
Webinaire santé prédation - Doré Nicolas Inrae 31 mai 2024.pdf
Institut de l'Elevage - Idele
 
Barometre_de_l_Economie_S1_2024_-_BAT__1_.pdf
Barometre_de_l_Economie_S1_2024_-_BAT__1_.pdfBarometre_de_l_Economie_S1_2024_-_BAT__1_.pdf
Barometre_de_l_Economie_S1_2024_-_BAT__1_.pdf
Paperjam_redaction
 
Webinaire santé prédation - Martin MSA 31 mai 2024.pdf
Webinaire santé prédation - Martin MSA 31 mai 2024.pdfWebinaire santé prédation - Martin MSA 31 mai 2024.pdf
Webinaire santé prédation - Martin MSA 31 mai 2024.pdf
Institut de l'Elevage - Idele
 
Webinaire Qui sont les jeunes installés avec un bac +5 ?
Webinaire Qui sont les jeunes installés avec un bac +5 ?Webinaire Qui sont les jeunes installés avec un bac +5 ?
Webinaire Qui sont les jeunes installés avec un bac +5 ?
Institut de l'Elevage - Idele
 
Webinaire santé prédation programme 31 mai 2024.pdf
Webinaire santé prédation programme 31 mai 2024.pdfWebinaire santé prédation programme 31 mai 2024.pdf
Webinaire santé prédation programme 31 mai 2024.pdf
Institut de l'Elevage - Idele
 
Novascope Télécoms et Réseaux Informatiques en BtoB 2023
Novascope Télécoms et Réseaux Informatiques en BtoB 2023Novascope Télécoms et Réseaux Informatiques en BtoB 2023
Novascope Télécoms et Réseaux Informatiques en BtoB 2023
Enov
 

Dernier (6)

Webinaire santé prédation - Doré Nicolas Inrae 31 mai 2024.pdf
Webinaire santé prédation - Doré Nicolas Inrae 31 mai 2024.pdfWebinaire santé prédation - Doré Nicolas Inrae 31 mai 2024.pdf
Webinaire santé prédation - Doré Nicolas Inrae 31 mai 2024.pdf
 
Barometre_de_l_Economie_S1_2024_-_BAT__1_.pdf
Barometre_de_l_Economie_S1_2024_-_BAT__1_.pdfBarometre_de_l_Economie_S1_2024_-_BAT__1_.pdf
Barometre_de_l_Economie_S1_2024_-_BAT__1_.pdf
 
Webinaire santé prédation - Martin MSA 31 mai 2024.pdf
Webinaire santé prédation - Martin MSA 31 mai 2024.pdfWebinaire santé prédation - Martin MSA 31 mai 2024.pdf
Webinaire santé prédation - Martin MSA 31 mai 2024.pdf
 
Webinaire Qui sont les jeunes installés avec un bac +5 ?
Webinaire Qui sont les jeunes installés avec un bac +5 ?Webinaire Qui sont les jeunes installés avec un bac +5 ?
Webinaire Qui sont les jeunes installés avec un bac +5 ?
 
Webinaire santé prédation programme 31 mai 2024.pdf
Webinaire santé prédation programme 31 mai 2024.pdfWebinaire santé prédation programme 31 mai 2024.pdf
Webinaire santé prédation programme 31 mai 2024.pdf
 
Novascope Télécoms et Réseaux Informatiques en BtoB 2023
Novascope Télécoms et Réseaux Informatiques en BtoB 2023Novascope Télécoms et Réseaux Informatiques en BtoB 2023
Novascope Télécoms et Réseaux Informatiques en BtoB 2023
 

extraire, transformer et représenter des données dans r

  • 1. Extraire, transformer et repr´esenter la social data avec R Premi`ere partie jean jacques gauguier S´eance 1 janvier 2018 1 / 216
  • 2. Introduction g´en´erale du cours Ce cours permet aux ´etudiants de se familiariser avec les donn´ees capturant la mani`ere dont les individus interagissent sur les r´eseaux sociaux. Les techniques utilisent le logiciel r et diff´erentes de ses librairies. Chaque ´etudiant devra installer sur sa machine r, l’environnement de travail Rstudio (https://www.rstudio.com/) et les biblioth`eques n´ecessaires. Le cours est construit sur 6 s´eances. Id´ealement, chaque s´eance sera d´ecoup´e de la sorte: matin: pr´esentation et d´emonstration du code r apr`es-midi: mise en application des ´el´ements A la fin du cours, chaque ´etudiant devra pr´esenter une analyse autour de social data de son choix. jean jacques gauguier S´eance 1 janvier 2018 2 / 216
  • 3. plan (du cours le contenu du cours est le suivant: PREMIERE PARTIE S´eance 1: social data et extraction de la social data avec r S´eance 2: manipuler les donn´ees dans r S´eance 3: repr´esenter les donn´ees dans r SECONDE PARTIE S´eance 4: les basiques du text mining dans r S´eance 5: l’analyse de sentiment avec r S´eance 6: le nlp avec r jean jacques gauguier S´eance 1 janvier 2018 3 / 216
  • 4. ressources Le cours est bas´e sur plusieurs ouvrages r´ecents et consultables en ligne: R for Data Science, Wickham & Grolemund, O’Reilly, 2017, disponible en ligne: http://r4ds.had.co.nz/ Advanced R, Wickham, CRC Press, 2014, disponible en ligne: https://adv-r.hadley.nz/ Data Visualization for Social Science, Healy, forthcoming, Princeton University Press, disponible en ligne: http://socviz.co/ Cookbook for R, Chang, O’Reilly, 2013, seconde ´edition, disponible en ligne: http://www.cookbook-r.com/ Text Mining with R, Silge & Robinson, O’Reilly, 2017, disponible en ligne: https://www.tidytextmining.com/ Introduction `a la programmation en R, Goulet, 2016, cinqui`eme ´edition: https://cran.r-project.org/doc/contrib/Goulet introduction programmation R.pdf The Art of R Programming, Matloff, 2011, no starch press, http://www.freetechbooks.com/the-art-of-r-programming-t1087.html Speech and Language Processing, Jurafsky et Martin, 2017, https://web.stanford.edu/ jurafsky/slp3/ jean jacques gauguier S´eance 1 janvier 2018 4 / 216
  • 5. ressources hors ouvrages En dehors de ces ouvrages, diff´erentes ressources peuvent ˆetre int´eressantes: la documentation sur la suite tidyverse: https://www.tidyverse.org/ les cheatsheets `a t´el´echarger sur le site de rstudio: https://www.rstudio.com/resources/cheatsheets/ le site de Hadley Wickham: http://hadley.nz/ le blog de thinkR: https://thinkr.fr/le-blog/ le m´eta blog r-bloggers.com: https://www.r-bloggers.com/ le blog de David Robinson: http://varianceexplained.org/ le blog de Julia Silge: https://juliasilge.com/blog/ le blog Rstudio: https://blog.rstudio.com sur twitter le hastag #rstats jean jacques gauguier S´eance 1 janvier 2018 5 / 216
  • 6. ressources th´eoriques Mis `a part quelques incursions, le cours n’est pas un cours de datascience. Pour les ´etudiants d´esireux d’acqu´erir les techniques de base de la datascience, deux ouvrages de base pourront ˆetre consult´es: The Elements of Statistical Learning, Hastie, Tibshirani & Friedman , Springer, seconde edition 2008 : https://web.stanford.edu/ hastie/Papers/ESLII.pdf An Introduction to Statistical Learning with Applications in R, James, Witten, Hastie & Tibshirani, Springer, sixi`eme edition 2013 : http://www-bcf.usc.edu/ gareth/ISL/ Concernant le deep learning et R, ce blog (https://tensorflow.rstudio.com/blog.html) est une source int´eressante en lien avec cet ouvrage r´ecent: https://www.manning.com/books/deep-learning-with-r. jean jacques gauguier S´eance 1 janvier 2018 6 / 216
  • 7. s´eance 1: social data et introduction `a R jean jacques gauguier janvier 2018 jean jacques gauguier S´eance 1 janvier 2018 7 / 216
  • 8. la social data jean jacques gauguier S´eance 1 janvier 2018 8 / 216
  • 9. du big data `a la social data Le big data, une vari´et´e des donn´ees grandissante: des donn´ees structur´ees (cat´egorielles car l’ensemble des valeurs possibles est connue `a l’avance) qui peuvent facilement ˆetre int´egr´ees dans des bases de donn´ees relationnelles des donn´ees semi-structur´ees (format json, xml) qui proviennent des api (google api, twitter api, etc. . . ) des donn´ees non-structur´ees (texte, images, vid´eos) qui sont impossibles `a cat´egoriser `a priori et qui n´ecessitent un traitement sp´ecifique (ex traitement des images) jean jacques gauguier S´eance 1 janvier 2018 9 / 216
  • 10. big data landscape Figure: big data landscape 2017, http://mattturck.com/bigdata2017/ jean jacques gauguier S´eance 1 janvier 2018 10 / 216
  • 11. du big data `a la social data Le big data, une production de donn´ees qui s’acc´el`ere: Selon IBM, chaque jour nous g´en´erons 2,5 trillions d’octets de donn´ees 90% des donn´ees dans le monde ont ´et´e cr´e´ees au cours des deux derni`eres ann´ees seulement Ces donn´ees proviennent par exemple: des diff´erents capteurs utilis´es pour collecter les informations (automobile et habitat) des enregistrements transactionnels d’achats en ligne des signaux GPS des t´el´ephones mobiles les traces laiss´ees sur les r´eseaux sociaux = social data jean jacques gauguier S´eance 1 janvier 2018 11 / 216
  • 12. la social data la social data peut ˆetre d´efinie comme ´etant toutes les formes de donn´ees capturant la mani`ere dont les individus interagissent sur les r´eseaux sociaux. Figure: Data Never Sleeps 5.0, https://www.domo.com/learn/data-never-sleeps-5 jean jacques gauguier S´eance 1 janvier 2018 12 / 216
  • 13. les principales caract´eristiques de la social data une donn´ee prot´eiforme La social data peut ˆetre une donn´ee chiffr´ee (likes, shares), du text (commentaires), des ´emojis, des photos ou encore des vid´eos une donn´ee ”difficile” `a traiter La social data est une mati`ere premi`ere `a manipuler avec pr´ecaution: des m´etriques rarement harmonis´ees entre les plate formes des donn´ees textuelles n´ecessitant de lourdes phases de pr´etraitement (la pauvret´e dans l’abondance) jean jacques gauguier S´eance 1 janvier 2018 13 / 216
  • 14. la cr´eation, l’extraction et le traitement de la social data social data cr´eation extraction analyse texte, photo, vid´eo r´eactions autres types de donn´ees plateforme so- cial media listening m´ethode ad hoc brokers s´election pr´e-traitement analyse insight jean jacques gauguier S´eance 1 janvier 2018 14 / 216
  • 15. l’analyse de la social data (adapt´e de wikip´edia) A partir de donn´ees collect´ees au sein des r´eseaux sociaux, globalement l’analyse de la social data cherche `a comprendre la mani`ere dont des interactions entre les individus s’effectuent, la mani`ere dont l’information cirucule au sein des r´eseaux sociaux. Des analyses sp´ecifiques peuvent porter sur: la mesure de la performance des ´el´ements publi´es la compr´ehension des m´ecanismes de viralit´e l’identification des influenceurs l’identification de sujet (ex: suivi de crise social m´edia ... En r´esum´e, l’analyse de la social data vise `a identifier certaines caract´eristiques ”cach´ees” dans la social data. jean jacques gauguier S´eance 1 janvier 2018 15 / 216
  • 16. une diversit´e croissante de la social data Toujours plus de donn´ees `a capturer potentiellement Figure: http://www.slate.fr/story/114629/facebook-nouveaux-boutons-reaction-data jean jacques gauguier S´eance 1 janvier 2018 16 / 216
  • 17. des donn´ees en libre acc`es...dans un environnement mouvant Les contours des donn´ees r´ecoltables ´evoluent constamment du fait des ajouts et des retraits des donn´ees. Avec l’utilisation crissante du m´edia au sein des r´eseau sociaux et le soucis de mon´etiser les donn´ees, les plateformes sont de plus en plus tent´ees de r´eduire l’offre de donn´ees en libre acc`es. l’api des donn´ees propri´etaires les consoles insight l’api en libre acc`es jean jacques gauguier S´eance 1 janvier 2018 17 / 216
  • 18. l’int´erˆet de collecter des donn´ees libres d’acc`es A partir de ces donn´ees, il est possible : d’effectuer des veilles sur un sujet (ex: suivre une crise sur twitter), de mesurer l’activit´e des diff´erents comptes (ex: suivre une campagne sur fb), d’effectuer des analyses textuelles (titre des posts, titre des tweets, analyse des commentaires ,...). donn´ees publiques r´ecolter des m´eta-donn´ees r´ecolter des donn´ees d’activit´e suivre un sujet sur twitter jean jacques gauguier S´eance 1 janvier 2018 18 / 216
  • 19. les m´eta-donn´ees et les donn´ees d’activit´e Parmi les donn´ees libres d’acc`es, il est possible de distinguer entre: les m´eta-donn´ees: le nombre de likes d’une page FB, le nombre de followers d’un compte twitter, le nombre d’abonn´es et de vues depuis la cr´eation d’une chaˆıne YT les donn´ees d’activit´e: des donn´ees de publications d’une page FB, d’un compte twitter et le nombre de vid´eo h´eberg´ees sur une chaˆıne YT. des donn´ees engagement: likes, comments, shares et facebook reactions sur FB, retweets sur twitter et likes sur YT id d’un compte m´eta-donn´ees facebook, twitter, youtube donn´ees d’activit´es facebook, twitter, youtube jean jacques gauguier S´eance 1 janvier 2018 19 / 216
  • 20. un autre int´erˆet des donn´ees libre d’acc`es: suivre l’int´erˆet d’un sujet sur twitter Twitter permet d’obtenir des donn´ees en libre acc`es via deux api distinctes: api rest: permet de remonter sur les 8 derniers jours les tweets mentionnant un hashtag ou plus g´en´eralement un terme particulier api streaming twitter: permet de capturer en temps r´eel une partie des conversations sur twitter mentionnant un hashtag ou un terme particulier # hastags api rest twitter api streaming twitter jean jacques gauguier S´eance 1 janvier 2018 20 / 216
  • 21. les modalit´es d’extraction de la social data social data les consoles insight l’api propri´etaire l’api publique scripts ad hoc extracteurs scripts ad hoc extracteurs Diff´erentes solutions existent donc pour capturer de ”la social data” en libre acc`es. jean jacques gauguier S´eance 1 janvier 2018 21 / 216
  • 22. les outils d’extraction de la social data via les api api social data les extracteurs les etl la programmation next analytics datagrabber ... talend dataiku dss ... python r ... Les d´eveloppeurs s’appuient sur la documentation et l’existant (librairies, scripts d’extraction et packages cr´ees,...) jean jacques gauguier S´eance 1 janvier 2018 22 / 216
  • 23. pourquoi privil´egier r pour travailler avec la social data? Pourquoi r? avec Python r est le langage le plus utilis´e en ”datascience” il existe un environnement de d´eveloppement appel´e RStudio qui permet de travailler facilement dans l’environnement R il existe une documentation abondante sur r (livres en ligne, blogs, stackoverflow, etc...) de nombreux packages r permettant d’importer, transformer analyser et mod´eliser les donn´ees sont continuellement d´evelopp´es et mis `a jour des packages r permettant d’extraire facilement des donn´ees via les api publiques existent jean jacques gauguier S´eance 1 janvier 2018 23 / 216
  • 24. les principaux packages d’extraction de la social data dans r plateforme social m´edia et package(s) associ´es 1 Facebook → Rfacebook 2 Twitter → streamR, twitteR, rtweets 3 (Youtube → tuber) 4 (Instagram → instaR) 5 (Google Trends → Gtrends) 6 .... Pour les plateformes social m´edia les plus utilis´ees, un ou plusieurs packages r existent. Ces packages s’apparentent `a des interfaces permettant d’utiliser les api des plateformes sans en ´ecrire les requˆetes. Bien souvent il s’agira d’appeler une fonction du package afin de r´ecup´erer des donn´ees particuli`eres. A noter qu’il existe un m´etapackage appel´e Social Media Lab. jean jacques gauguier S´eance 1 janvier 2018 24 / 216
  • 25. extraire la social data avec des packages r jean jacques gauguier S´eance 1 janvier 2018 25 / 216
  • 26. configurer l’environnement de travail installer r studio et r installer package cr´eer les appli- cations installer rstudio: https://www.rstudio.com/products/rstudio/download/ installer package (cf. console Rstudio ou github du package) cr´eer les applications pour les plateformes: facebook: https://developers.facebook.com/docs/apps/register twitter: https://apps.twitter.com/ youtube: https://developers.google.com/ Pour instagram si un package existe (instaR) les changements des conditions d’utilisation de l’api limitent aujourd’hui l’int´erˆet d’utiliser ce package. jean jacques gauguier S´eance 1 janvier 2018 26 / 216
  • 27. installer r studio pr´e-requis: installer r: https://cran.rstudio.com/ avant d’installer r studio desktop `a l’adresse suivante: https://www.rstudio.com/products/rstudio/download/#download Figure: https://www.rstudio.com/products/rstudio/download/#download jean jacques gauguier S´eance 1 janvier 2018 27 / 216
  • 28. installer les packages r (via rstudio) A partir de rstudio installer les packages via Rstudio: ggplot2, dplyr, jsonlite, lda, lsa, openNLP, plyr, purr, quanteda, RCurl, readr, readxl, lubridate,Rfacebook, rJava, rlang, rvest, stringi, stringr, tensorflow, tibble, tidytext, tidyselect, tidyverse, tm, tokenizers, topicmodels, twitteR, vkR, streamR et rtweets. Figure: online learning: https://www.rstudio.com/online-learning/#R jean jacques gauguier S´eance 1 janvier 2018 28 / 216
  • 29. cr´eer des applications Pour acc´eder aux donn´ees, il est n´ecessaire d’ˆetre authentifier souvent via un protocole d’acc`es Oauth 2.0. Ce protocole a de nombreuses variantes mais globalement le sch´ema est identique: une application permet `a l’utilisateur d’obtenir des jetons d’authentification (tokens) pour s’identifier et acc´eder aux ressources. jean jacques gauguier S´eance 1 janvier 2018 29 / 216
  • 30. utilisation des identifiants Google, Facebook et Twitter ont mis en place des m´ethodes simples de cr´eation d’application. La cr´eation de l’application g´en`ere des identifiants que nous utiliserons dans r pour acc´eder aux ressources des apis. R´ecemment des plateformes comme instagram ont mis en place des process de review avant d’autoriser une application. je cr´ee une ap- plication par plate- forme j’obtiens des iden- tifiants je m’identifie via les packages r pour acc´eder aux ressources jean jacques gauguier S´eance 1 janvier 2018 30 / 216
  • 31. cr´eer une application facebook https://developers.facebook.com/docs/apps/register Pr´e-requis: avoir un compte FB et ˆere connect´e `a FB jean jacques gauguier S´eance 1 janvier 2018 31 / 216
  • 32. visualiser ses identifiants de l’app facebook Une fois l’application cr´ee, l’application g´en`ere deux ´el´ements: APP ID APP Secret Ce sont de ces identifiants qui nous permettrons de nous connecter `a l’api facebook via le package Rfacebook. Figure: https://developers.facebook.com/apps/xxxxxxxxxxxxxxxx/dashboard/ jean jacques gauguier S´eance 1 janvier 2018 32 / 216
  • 33. cr´eer une application twitter: https://apps.twitter.com Pr´e-requis: avoir un compte twitter, ˆetre connect´e `a twitter et...fournir son num´ero de mobile jean jacques gauguier S´eance 1 janvier 2018 33 / 216
  • 34. visualiser ses identifiants de l’app twitter Une fois l’application cr´ee, l’application g´en`ere quatre ´el´ements: Consumer Key (API Key) Consumer Secret (API Secret) Access Token Acess Token Secret Ce sont de ces identifiants qui nous permettrons de nous connecter `a l’api twitter via les packages twitteR et streamR. jean jacques gauguier S´eance 1 janvier 2018 34 / 216
  • 35. pr´esentation et utilisation du package Rfacebook A chaque information correspond une requˆete particuli`ere qu’il faut parfois optimiser avec diff´erents param`etres. R facebook my graph fb graph fb mes publica- tions mes amis publications d’une page informations sur un post commentaires d’un post replies dans un post jean jacques gauguier S´eance 1 janvier 2018 35 / 216
  • 36. initialisation de Rfacebook Example (Code) library(Rfacebook) fb_oauth <- fbOAuth(app_id="xxxxxxxxxxxx", app_secret="xxxxxxxxxxxxx") save(fb_oauth, file="fb_oauth") load("fb_oauth") me <- getUsers("me", token=fb_oauth) me$username Une fois ce code ex´ecut´e une fenˆetre du navigateur s’ouvre et valide la connexion `a l’api. jean jacques gauguier S´eance 1 janvier 2018 36 / 216
  • 37. obtenir les publications d’une page: la fonction ”getPage” Example (Code) # exemple 1 extract_salomonrunning<-getPage(page="salomonrunning", token=fb_oauth, n =1000, feed = FALSE, reactions = FALSE) # exemple 2 extract_suunto<-getPage(page="Suunto", token=fb_oauth, n =10, feed = TRUE , reactions = TRUE, verbose = TRUE) # exemple 3 extract_rossignol<-getPage(page="rossignol", token=fb_oauth, n = 3000, since=’2017/01/01’, until=’2017/12/31’, feed = FALSE, reactions = TRUE) jean jacques gauguier S´eance 1 janvier 2018 37 / 216
  • 38. les param`etres de la fonction ”getPage” La fonction ”getPage” poss`ede les param`etres suivants: page: un id de page facebook token: OAuth token cr´e´e avec fbOAuth n: le nombre de posts souhait´e since: d´ebut de la p´eriode d’extraction souhait´ee. ex: ’2017/01/01’ until fin de la p´eriode d’extraction souhait´ee. ex: ’2017/12/01’ feed: capture des posts non officiels (true/false) reactions: ajout des facebook r´eactions `a l’extract par d´efaut (true/false) verbose: ajout d’un compteur du nombre de posts captur´es (true/false) api: version de l’api utilis´ee (true/false) jean jacques gauguier S´eance 1 janvier 2018 38 / 216
  • 39. le r´esultat de la fonction ”getPage” Une fois la requˆete ex´ecut´ee, les donn´ees sont directement obtenues sous la forme d’un dataframe. jean jacques gauguier S´eance 1 janvier 2018 39 / 216
  • 40. obtenir les commentaires d’une publication: la fonction ”getPage” Example (la proc´edure s’effectue en trois temps) #1 extraction des publications d’une page extract_salomonrunning<-getPage(page="salomonrunning", token=fb_oauth, n =1000, feed = FALSE, reactions = FALSE) #2 extraction des commentaires d’un post sr_1<-getPost(extract_salomonrunning$id[1], token=fb_oauth, n=500, comments = TRUE,reactions = FALSE) #3 cr´eation d’un dataframe sr_1<-jsonlite::flatten(sr_1$comments[c("from_id", "from_name","message", "created_time","likes_count", "comments_count", "id")]) sr_1<-as.data.frame(sr_1) jean jacques gauguier S´eance 1 janvier 2018 40 / 216
  • 41. le r´esultat de la fonction ”getPost” Une fois la requˆete ex´ecut´ee, il faut transformer les donn´ees afin d’obtenir un dataframe. Par ailleurs, il est n´ecessaire de cr´eer une boucle afin de capturer les commentaires sur l’ensemble des posts. jean jacques gauguier S´eance 1 janvier 2018 41 / 216
  • 42. les param`etres de la fonction ”getPost” La fonction ”getPage” poss`ede les param`etres suivants: post: un Id de post token: OAuth token cr´e´e avec fbOAuth n: le nombre maximum de commentaires `a capturer comments: extraction du nombre de commentaires obtenus par les commentaires likes: extraction des likes obtenus par les commentaires reactions: ajout des facebook r´eactions `a l’extract par d´efaut n.likes: nombre max de likes n.comments: nombre max de comments n.reactions: nombre max de reactions api: version de l’api utilis´ee jean jacques gauguier S´eance 1 janvier 2018 42 / 216
  • 43. obtenir les replies `a un commentaire d’une publication: la fonction ”getCommentReplies” Example (la proc´edure s’effectue en plusieurs temps) #1 extraction des publications d’une page extract_salomonrunning<-getPage(page="salomonrunning", token=fb_oauth, n =1000, feed = FALSE, reactions = FALSE) #2 extraction des commentaires d’un post sr_1<-getPost(extract_salomonrunning$id[1], token=fb_oauth, n=500, comments = TRUE,reactions = FALSE) #3 extraction des replies d’un commentaire rp_1<-getCommentReplies(sr_1$id[1], token=fb_oauth, n = 500, replies = TRUE, likes = TRUE, api = NULL) #4 transformation rp_1<- jsonlite::flatten(rp_1$replies[c("from_id", "from_name", "message", "created_time", "likes_count","id")]) rp_1<-as.data.frame(rp_1) jean jacques gauguier S´eance 1 janvier 2018 43 / 216
  • 44. quelques commentaires sur le package Rfacebook Les points positifs: exploitation des principaux endpoint de l’api facebook, permet d’obtenir des donn´ees facilement via les fonctions, extract ”page level” est directement utilisable package est globalement v´eloce (rapidit´e pour obtenir les donn´ees) Les points n´egatifs: manipulations pour obtenir les commentaires certaine lenteur pour obtenir les replies (double boucle+transformation des donn´ees) Au global, le package reste un outil tr`es int´eressant pour capturer facilement des donn´ees FB. jean jacques gauguier S´eance 1 janvier 2018 44 / 216
  • 45. pr´esentation et utilisation du package twitteR Ce package permet de collecter des donn´ees via l’api rest de twitter. Comme pour Rfacebook, diff´erents endpoint de l’api ont ´et´e cod´es par des fonctions que l’on utilise pour collecter les donn´ees. Nous utiliserons principalement deux fonctions: userTimeline: cette fonction permet de collecter les n publications r´ecentes d’un compte twitter, searchTwitter: cette fonction permet de collecter une partie des tweets contenant un sujet particulier. twitteR ”userTimeline” ”searchTwitter” jean jacques gauguier S´eance 1 janvier 2018 45 / 216
  • 46. initialisation de twitteR Example (Code) # oauth twitteR setup_twitter_oauth("xxxxxxxxxxxxxxxxxxxxxxx", consumer_secret="xxxxxxxxxxxxxxxxxxxxxxx", access_token="xxxxxxxxxxxxxxxxxxxxxxx", access_secret="xxxxxxxxxxxxxxxxxxxxxxx") Une fois ce code ex´ecut´e, le code suivant doit apparaˆıtre dans r: 1 ”Using direct authentication” jean jacques gauguier S´eance 1 janvier 2018 46 / 216
  • 47. obtenir les publications d’un compte twitter: la fonction ”userTimeline” Example (la proc´edure s’effectue en deux temps) #1 extraction des publications d’un compte hd<-userTimeline("hadleywickham", n=3200, maxID=NULL, sinceID=NULL, includeRts=FALSE, excludeReplies=FALSE) #2 cr´eation d’un dataframe hd_df<-twListToDF(hd) #creation d’un dataframe jean jacques gauguier S´eance 1 janvier 2018 47 / 216
  • 48. le r´esultat de la fonction ”usertime” En th´eorie, l’api doit retourner au maximum les 3200 derniers tweets ce qui n’est pas toujours le cas avec ce package (bien souvent le nombre de tweets est largement inf´erieur). jean jacques gauguier S´eance 1 janvier 2018 48 / 216
  • 49. les param`etres de la m´etafonction ”timelines” Le package int`egre diff´erentes fonctions permettant de capturer des ´el´ements d’une timeline: userTimeline(user, n=20, maxID=NULL, sinceID=NULL, includeRts=FALSE, excludeReplies=FALSE, ...) homeTimeline(n=25, maxID=NULL, sinceID=NULL, ...) mentions(n=25, maxID=NULL, sinceID=NULL, ...) Les param`etres des fonctions: user: nom du compte twitter n: le nombre maximun de tweets `a capturer (max=3200) maxID: maximum d’id `a rechercher sinceID: minimum d’id `a rechercher includeRts: si FALSE les RT ne seront pas captur´es excludeReplies: si TRUE les replies ne seront pas captur´es jean jacques gauguier S´eance 1 janvier 2018 49 / 216
  • 50. obtenir les publications twitter mentionnant un terme: la fonction ”searchTwitter” Example (la proc´edure s’effectue en deux temps) #1 extraction des publications twitter ==>je veux 100 tweets mentionnant le hashtag #rstats rstats<-searchTwitter("#rstats", n=100) #autres requ^etes possibles: rstats<-searchTwitter("#rstats", since=’2017-12-01’, until=’2017-12-31’) rstats<-searchTwitter("#rstats+hadley", resultType="popular", n=15) rstats<-searchTwitter("from:hadleywickham", resultType="recent", n=10) #2 cr´eation d’un dataframe rstats_df<- twListToDF(rstats) #cr´eation d’un dataframe jean jacques gauguier S´eance 1 janvier 2018 50 / 216
  • 51. le r´esultat de la fonction ”searchTwitter” En th´eorie, l’api doit retourner au maximum les 3200 derniers tweets ce qui n’est pas toujours le cas avec ce package (bien souvent le nombre de tweets est largement inf´erieur). jean jacques gauguier S´eance 1 janvier 2018 51 / 216
  • 52. les param`etres de la fonction ”searchTwitter” Diff´erents param`etres sont possibles pour optimiser les recherches: searchString: terme(s) recherch´e(s) ajout d’un ”+” entre les termes de recherche n: le nombre maximum de tweets `a capturer since: d´ebut de la p´eriode d’extraction souhait´ee. ex: ’2017/01/01’ until fin de la p´eriode d’extraction souhait´ee. ex: ’2017/12/01’ geocode: matching de la recherche sur coordonn´ees g´eo resultType: filtre tweets selon la valeur ”popular”, ”recent”, etc... jean jacques gauguier S´eance 1 janvier 2018 52 / 216
  • 53. pr´esentation et utilisation du package streamR Ce package collecte des donn´ees via l’api streaming de twitter. Il capture en temps r´eel les conversations sur un sujet sur twitter: la collecte d´ebute lorsque l’on lance une requˆete et s’arrˆete lorsque l’on stoppe la fonction (pas de donn´ees avant ou apr`es la collecte). Le package comprend plusieurs fonction mais nous utiliserons principalement la fonction filterStream. streamR filterStream jean jacques gauguier S´eance 1 janvier 2018 53 / 216
  • 54. initialisation de streamR Example (Code) library(streamR) library(ROAuth) library(rjson) requestURL <- "xxxxxxxxxxxxxxxxxxxxxxxxxx" accessURL <- "xxxxxxxxxxxxxxxxxxxxxxxxxx" authURL <- "xxxxxxxxxxxxxxxxxxxxxxxxxx" consumerKey <- "xxxxxxxxxxxxxxxxxxxxxxxxxx" consumerSecret <- "xxxxxxxxxxxxxxxxxxxxxxxxxx" my_oauth <- OAuthFactory$new(consumerKey=consumerKey,consumerSecret=consumerSecret, requestURL=requestURL, accessURL=accessURL, authURL=authURL) #authentification aupr`es de l’api my_oauth$handshake(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl")) #message "To enable the connection, please direct your web browser to: https://api.twitter.com/oauth/authorize?oauth_token=PR8m4gAAAAAAVPmzAAABYOAHHOY When complete, record the PIN given to you and provide it here: 1319182 #coller le pin La documentation de streamR :http://pablobarbera.com/code/streamR.html jean jacques gauguier S´eance 1 janvier 2018 54 / 216
  • 55. extraire des donn´ees en streaming la fonction filterStream Example (Code) => je souhaite capter au fil de l’eau des tweets contenant le terme #rstats # j’appelle la fonction filterStream filterStream( file="#rstats.json", track="#rstats",timeout=0, oauth=my_oauth ) =>le package cr´ee un fichier "#rstats.json"dans mon r´epertoire o`u il ´ecrit les tweets. =>dans la console appara^ıt le message "capturing tweets". =>une fois la capture stopp´ee, j’utilise une fonction du package pour transformer le fichier json en dataframe # j’appelle la fonction tweets.df afin de cr´eer un dataframe tweets.df <- parseTweets("#rstats.json", simplify = TRUE) jean jacques gauguier S´eance 1 janvier 2018 55 / 216
  • 56. le r´esultat de la fonction filterStream Au final, on obtient un dataframe assez riche notamment au niveau des donn´ees des personnes qui ont publi´e le tweet. A noter que ce stream n’est pas exhaustif: une partie des tweets est captur´ee (seul un abonnement au firehose twitter permet d’atteindre l’exhaustivit´e). jean jacques gauguier S´eance 1 janvier 2018 56 / 216
  • 57. pr´esentation et utilisation du package rtweet Comme streamR et twitteR, ce package permet de se collecter aux api twitter. Tr`es r´ecent, ce package permet `a la fois de se collecter aussi bien `a l’api rest qu’`a l’api streaming de twitter. Il est poss`ede de nombreuses fonctions qui exploitent les endpoints les plus int´eressants des api twitter. Par ailleurs, il semble qu’il soit plus efficace que twitteR pour collecter le max de tweets d’une timeline soit 3200 tweets. rtweets api search api streaming publications followers search d’un terme stream stream geo stream temps jean jacques gauguier S´eance 1 janvier 2018 57 / 216
  • 58. initialisation de rtweet Example (Code) # installer rtweet via cette commande pour installer la derni`ere version du package qui permet de s’authentifier plus facilement vis `a vis de l’api twitter) load(devtools) devtools::install_github("mkearney/rtweet") # load le package library(rtweet) #authentification aupr`es de l’api lorsque l’on lance une fonction, une fen^etre s’ouvre demandant d’autoriser l’application. Apr`es acceptation, l’authentification est effectu´ee et l’on peut utiliser le package et ses fonctions. La documentation du package rtweet: http://rtweet.info/ jean jacques gauguier S´eance 1 janvier 2018 58 / 216
  • 59. la fenˆetre d’authentification Apr`es avoir cliqu´e sur ”authorize app”, l’authentification est effective. jean jacques gauguier S´eance 1 janvier 2018 59 / 216
  • 60. obtenir les publications twitter: la fonction ”get timeline” Example (Code) #1 extraction des publications twitter d’un compte =>je veux les 3200 derniers tweets d’un compte tml <- get_timeline("juliasilge", n = 3200) #2 extraction des publications twitter de plusieurs comptes =>je veux les 3200 derniers tweets d’un compte =>je cr´ee une liste de compte dans la fonction tmls <- get_timelines(c("hadleywickham", "drob", "juliasilge"), n = 3200) jean jacques gauguier S´eance 1 janvier 2018 60 / 216
  • 61. le r´esultat de la fonction ”get timeline” A noter que les r´esultats sont directement obtenus sous la forme d’un dataframe jean jacques gauguier S´eance 1 janvier 2018 61 / 216
  • 62. les param`etres de la fonction ”get timeline” Diff´erents param`etres sont possibles pour optimiser les recherches: user: compte(s) twitter `a capturer n: le nombre maximum de tweets `a capturer par timeline max id: home: logique, user-time ou home-timeline (retweets) parse: logique, par d´efaut transformation en dataframe check: v´erification avant le lancement de la requˆete des cr´edits d’extraction token: logique, par d´efaut par de tokens dans les requˆetes (cf. twitteR) jean jacques gauguier S´eance 1 janvier 2018 62 / 216
  • 63. autres fonctions int´eressantes sur l’api search Example (Code) #1 recherche d’utilisateurs en fonction de mots dans le profil rstats_users<- search_users("#rstats", n = 1000) #2 extraction des followers d’un compte hd_flw <- get_followers("/hadleywickham", n = 55000) #3 search sur tweets contenant un hashtag rstat_ht <- search_tweets( "#rstats", n = 18000, include_rts = FALSE #4 search sur tweets contenant un mot data<- search_tweets( "data", n = 250000, retryonratelimit = TRUE #5 search selon geoloc by_us <- search_tweets( "lang:en", geocode = lookup_coords("usa"), n = 10000) # autres fonctions (look up) jean jacques gauguier S´eance 1 janvier 2018 63 / 216
  • 64. les fonctions de streaming de rtweet Example (Code) #1 stream de 30s data_stream <- stream_tweets("data") #code g´en´er´e par l’extract Streaming tweets for 30 seconds... Downloading: 210 kB Finished streaming tweets! opening file input connection. Imported 134 records. Simplifying... closing file input connection. #2 stream sur une semaine (60 s *60 min* 24 h* 7 j) stream_tweets("rstats,datascience", timeout = 60 * 60 * 24 * 7, file_name = "rstatsdatascience.json",parse = FALSE) #fonction de parsing djt <- parse_stream("rstatsdatascience.json") #3 stream sur une base de geoloc des tweets (60s) rt <- stream_tweets(lookup_coords("london, uk"), timeout = 60) jean jacques gauguier S´eance 1 janvier 2018 64 / 216
  • 65. le r´esultat de la fonction ”get timeline” Ici, les r´esultats sont directement obtenus sous la forme d’un dataframe jean jacques gauguier S´eance 1 janvier 2018 65 / 216
  • 66. pr´esentation et utilisation du package tuber Ce package permet de se collecter `a l’api data de youtube. Avant d’utiliser le package: il faut n´ecessaire de se cr´eer: un compte xx@gmail.com un compte d´eveloppeur youtube une application reli´ee `a l’api youtube Nous utiliserons principalement ce package pour extraire les commentaires d’une vid´eo. Pour les m´etriques, nous utiliserons l’outil youtubedatatools qui sera pr´esent´e plus loin. tuber chanel level video level m´eta donn´ees playlists stats de la vid´eo commentaires jean jacques gauguier S´eance 1 janvier 2018 66 / 216
  • 67. initialisation de tuber Example (Code) # load le package library(tuber) #authentification aupr`es de l’api yt_oauth("998136489867-5t3tq1g7hbovoj46dreqd6k5kd35ctjn.apps.googleusercontent.com", "MbOSt6cQhhFkwETXKur-L9rN") code g´en´er´e dans l’interface Rstudio Use a local file (’.httr-oauth’), to cache OAuth access credentials between R sessions? 1: Yes 2: No ==>No #pop-up qui s’ouvre s´election du compte gmail rattach´e `a l’application validation de l’utilisation du compte pour acc´eder aux ressources de l’api La documentation du package https://cran.r-project.org/web/packages/tuber/tuber.pdf jean jacques gauguier S´eance 1 janvier 2018 67 / 216
  • 68. obtenir les stats d’une vid´eo sur youtube Example (Code) #1 capture de l’id de la vid´eo youtube =>https://www.youtube.com/watch?v= 9p1kAvDL52U a<-get_stats(video_id="9p1kAvDL52U") a_df<-as.data.frame(a) (mise sous dataframe) #2 extraction des statistiques d’une cha^ıne ==>https://www.youtube.com/channel/UCpVm7bg6pXKo1Pr6k5kxG9A b<-get_channel_stats(channel_id="UCpVm7bg6pXKo1Pr6k5kxG9A") b_df<-as.data.frame(b) (mise sous dataframe) jean jacques gauguier S´eance 1 janvier 2018 68 / 216
  • 69. le r´esultat des fonctions jean jacques gauguier S´eance 1 janvier 2018 69 / 216
  • 70. obtenir des commentaires d´epos´es sur youtube Example (Code) #1 capture des commentaires sur une vid´eo (hors replies) video_c <- get_comment_threads(c(video_id="9p1kAvDL52U")) ==>argument sur le max de commentaires video_c <- get_comment_threads(c(video_id="9p1kAvDL52U"), max_results = 101) #2 extraction verbatim d’un commentaire/reply sp´ecifique ==>extraction data d’un commentaire sp´ecifique video_d <- get_comments(filter = c(comment_id = "Ugx9yHVg6_ncD4DmWqV4AaABAg")) ==>extraction data des replies sur un commentaire sp´ecifique video_e <- get_comments(filter = c(parent_id = "Ugx9yHVg6_ncD4DmWqV4AaABAg")) #3 extraction verbatim de deux commentaires video_f <- get_comments(filter = c(comment_id = "Ugwa9SBHiUq1Pvp1aDp4AaABAg, Ugx9yHVg6_ncD4DmWqV4AaABAg")) #4 extraction verbatim des replies sur deux commentaires video_f <- get_comments(filter = c(parent_id = "Ugwa9SBHiUq1Pvp1aDp4AaABAg, Ugx9yHVg6_ncD4DmWqV4AaABAg")) jean jacques gauguier S´eance 1 janvier 2018 70 / 216
  • 71. obtenir des statistiques de l’ensemble des vid´eos d´epos´es sur une chaine youtube Example (Code) #1 je cr´ee une liste si je veux les donn´ees pour plusieurs chaines a <- list_channel_resources(filter = c(channel_id = "UCT5Cx1l4IS3wHkJXNyuj4TA"), par # obtenir les playlists d’une chaine playlist_id <- a$items[[1]]$contentDetails$relatedPlaylists$uploads # si je veux les donn´ees pour chaque vidj´eo appartement `a une playlist vids <- get_playlist_items(filter= c(playlist_id=playlist_id)) # obtenir les ids des vid´eos h´eberg´ees par une chaine vid_ids <- as.vector(vids$contentDetails.videoId) # obtenir les stats pour chaque ids des vid´eos h´eberg´ees par une chaine get_all_stats <- function(id) { get_stats(id) } # obtenir d’un tableau d’agr´egation des r´esultats res <- lapply(vid_ids, get_all_stats) res_df <- do.call(rbind, lapply(res, data.frame)) jean jacques gauguier S´eance 1 janvier 2018 71 / 216
  • 72. quelques remarques sur tuber tuber permet d’acc´eder `a l’api youtube et utiliser les principaux endpoints de l’api de youtube. Les r´esultats sont int´eressants mais certains ´el´ements pourraient ˆetre optimis´es: le titre de la vid´eo et/ou la date de publication de la vid´eo ne sont pas dans l’extract par d´efaut du package, il est possible d’extraire les donn´ees de l’ensemble des vid´eos h´eberg´ees par un chaˆıne `a un instant t. comme pour Rfacebook pour obtenir `a la fois les commentaires et les replies il faut cr´eer des boucles pour collecter les donn´ees. jean jacques gauguier S´eance 1 janvier 2018 72 / 216
  • 73. l’extacteur youtubedatatools Cet extracteur est un projet acad´emique h´eberg´e ici: https://tools.digitalmethods.net/netvizz/youtube/mod video info.php. ll permet d’extraire les donn´ees de l’api youtube sur les m´etriques des chaˆınes et/ou des vid´eos ainsi que les commentaires. Les avantages: facilit´e d’utilisation: pas de compte d´eveloppeur `a cr´eer fonctionnalit´e: extraction group´ee des m´etriques de l’ensemble des vid´eos h´eberg´ees sur une chaˆıne Les inconv´enients: phase d’importation des datas dans r pas d’extraction des replies `a date jean jacques gauguier S´eance 1 janvier 2018 73 / 216
  • 74. un aper¸cu de youtubedatatools jean jacques gauguier S´eance 1 janvier 2018 74 / 216
  • 75. utilisation de youtubedatatools ytdt chanel level video level m´eta donn´ees vid´eos d’une chaine network chan- nel stats de la vid´eo network vid´eo commentaires de la vid´eo jean jacques gauguier S´eance 1 janvier 2018 75 / 216
  • 76. extraire des stats de l’ensemble des vid´eos d’une chaˆıne Apr`es avoir entr´e l’id youtube de la chaˆıne, il faut lancer l’extract. L’outil affiche le nombre de vid´eos extraites au fur et `a mesure de l’avancement de la proc´edure. Une fois l’extract termin´e, l’outil cr´ee un fichier .tab. Il faut cliquer sur ce fichier afin de l’enregistrer sur sa machine. jean jacques gauguier S´eance 1 janvier 2018 76 / 216
  • 77. importer les donn´ees collect´ees ytdt dans r Example (Code) #1 soit par Rstudio directement ==>je clique sur l’´el´ement "Import Dataset" et je me dirige dans la machine pour trouver le fichier. ==>apr`es validation, les donn´ees sont import´ees sous la forme d’un dataframe. #2 soit en ligne de commande videolist<- read.delim("C:/Users/jjg/Downloads/videolist") jean jacques gauguier S´eance 1 janvier 2018 77 / 216
  • 78. exporter un dataframe r dans un fichier excel Lorsqu’elle sont sous forme de dataframe, il est possible d’exporter sous la forme d’un fichier csv ou excel des donn´ees `a condition que le fichier ne soit pas trop volumineux. Example (Code) #code `a ins´erer #trick rjava (dans le cas o`u il y a une erreur avec le package rjava) if (Sys.getenv("JAVA_HOME")!="") Sys.setenv(JAVA_HOME="") #load les librairies library(rJava) library(xlsx) #instruction pour export write.xlsx(nom_du_dataframe, file ="C:/Users/jjg/study/nom_du_fichier.xlsx" , sheetName="1", col.names=TRUE, row.names=TRUE, append=FALSE, showNA=TRUE) ==>fichier devrait ^etre cr´ee au m^eme endroit que rstudio est install´e. jean jacques gauguier S´eance 1 janvier 2018 78 / 216
  • 79. S´eance 2:manipuler les donn´ees dans r jean jacques gauguier S´eance 1 janvier 2018 79 / 216
  • 80. Les types de donn´ees dans r r est un langage orient´e objet: tout est un objet dans r. Chaque objet poss`ede une longueur, certains attributs (des m´etadonn´ees) et un mode. Le mode prescrit ce qu’un objet peut contenir. Voici les principaux modes: les nombres r´eels appartiennent au mode numeric les nombres complexes appartiennent au mode complexe les nombres entiers sont appel´es integers les bool´eens (TRUE/FALSE) appartiennent au mode logical les chaˆınes de caract`eres appartiennent au mode character les fonctions appartiennent au mode fonction les lists appartiennent au mode list Les objets de mode ”numeric”, ”complex”, ”logical” et ”character” sont des objets simples (atomic en anglais) qui ne peuvent contenir `a la fois que des donn´ees d’un seul type. Les objets de mode ”list” ou ”expression” sont des objets qui peuvent contenir dans le mˆeme temps diff´erents objets. jean jacques gauguier S´eance 1 janvier 2018 80 / 216
  • 81. les objets dans r Example #1 d´eclaration et assignement a <- NULL # a est un objet nul, vide (null) b <- TRUE # b est un objet bool´een (logical) c <- 101 # c est un objet num´erique (numeric: double (approximation) c <- 101.21 L # c est un objet num´erique (numeric: integer (L)) d <- ’’hello world’’ # d est un objet cha^ıne des caract`eres (character) e <-list(1,2,3) (list) #e est un objet liste (list) #2 identifier les types de donn´ees: la fonction typeof typeof(a) =>[1] "NULL" typeof(d) =>[1] "character" #3 identifier le mode de donn´ees mode(a) =>[1] "numeric" mode(d) =>[1] "character" #4 identifier la longueur des objets length(c) =>[1] 1 length(e) =>[1] 3 A noter que le mode et le type d’un objet sont souvent identiques.jean jacques gauguier S´eance 1 janvier 2018 81 / 216
  • 82. les vecteurs tout objet est un vecteur dans r. Pour construire un vecteur on utilise l’op´erateur c (concatenate). Example #1 d´eclaration et assignement f <-c(1,2,3) g <- c("un", "deux", "trois", "quatre", "cinq", "six", "sept") h<- c(1, "deux", "trois", "quatre", "cinq", "six", FALSE) ### #2 identifier la longueur des vecteurs length(f) =>[1] 3 length(h) =>[1] 7 #3 nommer les ´el´ements d’un vecteur names(f) <- c("a", "b", "c") f a b c 1 2 3 jean jacques gauguier S´eance 1 janvier 2018 82 / 216
  • 83. la hi´erarchie et types de vecteur Parmi les vecteurs, il est possible de distinguer: vecteur atomic ou simple: un seul type de donn´ees (logical, integer, double, character et complex) list ou vecteurs r´ecursifs: des listes emboˆıt´ees (ou nested list). Figure: Hi´erarchie des vecteurs, wickham et grolemund jean jacques gauguier S´eance 1 janvier 2018 83 / 216
  • 84. vecteur et attributs Les vecteurs peuvent contenir des m´etadonn´ees suppl´ementaires, on parle d’attributs. Ces attributs sont utilis´es pour cr´eer des vectors augment´es qui peuvent ˆetre de quatre types: factor qui sont construits sur la base des vecteur integer dates et date-times qui sont construits sur la base des vecteur numeric data frames et tibbles qui sont construits sur la base des vecteurs list. Par ailleurs, il est possible de s’assurer du type de vecteur lorsque l’on travaille avec des vecteurs en utilisant les commandes suivantes: as.logical(), as.integer(), as.double(), as.character() jean jacques gauguier S´eance 1 janvier 2018 84 / 216
  • 85. les facteurs Les facteurs sont utilis´es avec des variables qui ne peuvent prendre qu’un nombre d´etermin´e de valeurs. On parle de variables cat´egorielles Example #1 vecteur avec des mois que l’on souhaite ordonner x1 <- c("Dec", "Apr", "Jan", "Mar") #2 r´esultat sans transformation sort(x1) =>[1] "Apr" "Dec" "Jan" "Mar" #ne respecte pas l’ordre calendaire length(h) =>[1] 7 #3 cr´eer un vecteur ordonn´e avec l’ensemble des niveaux possibles month_levels <- c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec") #4 transormation x2 <- factor(x1, levels = month_levels) sort(x2) =>[1] Jan Mar Apr Dec Levels: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec jean jacques gauguier S´eance 1 janvier 2018 85 / 216
  • 86. les fonctions en lien avec les facteurs Example #1 test class(x1) ==>[1] "factor" #2 afficher les niveaux d’un facteur sort(x1) =>[1] Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec #3 afficher les effectifs pour level (fonction table) table(x1) Apr Dec Jan Mar 1 1 1 1 # 4 ordonner selon l’ordre d’apparition historique des donn´ees x3 <- factor(x1, levels = unique(x1)) x3 ==>[1] Dec Apr Jan Mar Levels: Dec Apr Jan Mar jean jacques gauguier S´eance 1 janvier 2018 86 / 216
  • 87. les matrices r supporte ´egalement les matrices et les tableaux. D’une certaine mani`ere, une matrice est un vecteur avec un attribut suppl´ementaire, l’attribut dim, dont la longueur est ´egale `a 2 dans le cas d’une matrice simple. Example #1 la fonction de base x1 <-matrix(1:6, nrow = 2, ncol = 3) # colonne puis ligne [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 #2 l’argument byrow = TRUE x2 <-matrix(1:6, nrow = 2, ncol = 3, byrow = TRUE) #ligne puis colonne [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 jean jacques gauguier S´eance 1 janvier 2018 87 / 216
  • 88. les tableaux Un tableau (array) est une matrice qui poss`ede plus de deux dimensions. Example #1 la fonction de base x1 <-array(1:24, dim = c(3, 4, 2)) #lignes, colonnes et dimensions , , 1 #premiere dimension [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [,3] 3 6 9 12 , , 2 #seconde dimension [,1] [,2] [,3] [,4] [1,] 13 16 19 22 [2,] 14 17 20 23 [,3] 15 18 21 24 nrow(x1, ncol(x1), dim(x1), rownames(x1) <- c("A", "B",’’C’’) colnames(x1)<-c(‘D’’,’’E’’,’’F’’,’’G’’) dimnames(x1) <- list(c("A", "B",’’C’’),c(‘D’’,’’E’’,’’F’’,’’G’’),c(‘H’’,’’I’’)) jean jacques gauguier S´eance 1 janvier 2018 88 / 216
  • 89. comment visualiser les tableaux (tir´e de goulet 2016) L’ordre de remplissage inhabituel des tableaux rend leur manipulation difficile. Imaginons un tableau de dimensions 3*4*5. il faut voir le tableau comme 5 matrices 3*4 les unes derri`ere les autres. le tableau est un prisme rectangulaire haut de 3 unit´es, large de 4 et profond de 5 avec une quatri`eme dimension, cela revient `a aligner des prismes Figure: Repr´esentation sch´ematique de tableaux. Les chiffres encercl´es identifient l’ordre de remplissage, goulet (2016) jean jacques gauguier S´eance 1 janvier 2018 89 / 216
  • 90. les listes Les listes sont la forme de stockage des donn´ees la plus g´en´erale: les ´el´ements d’une liste peuvent ˆetre de diff´erents modes (numeric, character, boolean), il est possible d’emboˆıter des listes dans une liste (nested ou recursive list) Example #1 la fonction de base pour cr´eer une liste x <- list(1:3, "a", c(TRUE, FALSE, TRUE), c(2.3, 5.9)) #2 obtenir les informations sur les ´el´ements str(x) => List of 4 $ : int [1:3] 1 2 3 $ : chr "a" $ : logi [1:3] TRUE FALSE TRUE $ : num [1:2] 2.3 5.9 #3 une fonction r´ecursive x <- list(list(list(list()))) #4 obtenir les informations sur les ´el´ements => > List of 1 #> $ :List of 1 #> ..$ :List of 1 #> .. ..$ : list() #5 tests list et/ou recursivit´e is.recursive(x) is.list(x) #> [1] TRUE jean jacques gauguier S´eance 1 janvier 2018 90 / 216
  • 91. le dataframe La structure de stockage des donn´ees dataframe est la forme plus commune....et la plus simple pour effectuer des analyses. Voici quelques commandes de base en lien avec la structure dataframe. Example #1 cr´eer un dataframe df <- data.frame(x = 1:3, y = c("a", "b", "c") #2 afficher le dataframe df #3 afficher le dataframe dans une fen^etre View(df) #4 afficher la structure du dataframe str(df) #5 statistique du dataframe summary(df) #6 afficher le type typeof(df) ==>’’list’’ #7 v´erification si dataframe is.data.frame(df) ==>TRUE #7 afficher la classe class(df) jean jacques gauguier S´eance 1 janvier 2018 91 / 216
  • 92. les commandes pour manipuler un dataframe Example #1 transformer en dataframe une structure existante df<-as.data.frame(x) #2 s´electionner une colonne d’un dataframe (nom) df$ma_colonne #3 s´electionner une colonne d’un dataframe (num´ero de colonne) df[,1] ou d[[1]] #4 s´electionner une colonne d’un dataframe (nom) df[’’nom_de_ma_colonne’’] #5 s´electionner diff´erentes colonnes df[c("premi`ere_colonne’’, "deuxi`eme_colonne")] #6 s´electionner une ligne particuli`ere (12) df[12,] #7 s´electionner deux lignes particuli`eres df[c(12,40),] jean jacques gauguier S´eance 1 janvier 2018 92 / 216
  • 93. autres commandes pour un dataframe Example #1 s´electionner une cellule particuli`ere (premi`ere ligne, seconde colonne) df[1,2] #2 s´electionner une cellule particuli`ere avec nom des col. et lignes. df[’’nom_de_la_ligne’’,’’nom_de_ma_colonne’’] #3 combiner deux dataframes (m^eme structure) par les colonnes df<-cbind(df_1, df_2) (l’un en dessous de l’autre) #4 combiner deux dataframes (m^eme structure) par les df<-rbind(df_1, df_2) (l’un `a c^ot´e de l’autre) #5 afficher le nombre de lignes nrow(df) ==>’’list’’ #6 afficher le nombre de colonnes ncol(df) ==>TRUE #7 afficher le haut du dataframe head(df) jean jacques gauguier S´eance 1 janvier 2018 93 / 216
  • 94. la structure tibble et le package tibble La structure de stockage tibble est une structure proche de la structure dataframe. De cr´eation plus r´ecente, les tibbles proposent une structure plus souple et largement optimis´ee pour travailler dans la suite tidyverse (les avantages de cette structure de stockage des donn´ees sont d´etaill´es ici: https://cran.r-project.org/web/packages/tibble/vignettes/tibble.html.) Voici quelques commandes en lien avec cette structure: Example #1 cr´eer un tibble tbl <- tibble(mes_datas) #2 afficher le tibble tbl #3 transformer en tibble tbl <- as_tibble(df) #4 afficher une partie du tibble (x=nb de rows) + condition (sur colonnes) tibble(x = 1:31) #5 extraire une colonne tbl[, 1] #6 extraire des colonnes tbl[, 1:2]) jean jacques gauguier S´eance 1 janvier 2018 94 / 216
  • 95. La Manipulation des donn´ees dans r jean jacques gauguier S´eance 1 janvier 2018 95 / 216
  • 96. la logique tidy data Les donn´ees peuvent ˆetre organis´ee de diff´erentes mani`eres au niveau de la mani`ere dont sont architectur´ees les variables et les dimensions. La logique ”tidydata” est une logique d’organisation des donn´ees particuli`eres selon trois principes: chaque variable doit avoir sa propre colonne, chaque observation doit avoir sa propre ligne, chaque valeur doit avoir sa propre cellule Ces trois principes sont reli´es entre eux. L’int´erˆet d’utiliser cette logique est double: int´erˆet de travailler sur une structure identique de donn´ees entre les datasets, int´erˆet d’utiliser les variables en colonne car cette structure s’applique bien aux traitements vectoris´es et aux packages construits autour de ce type de traitement . Figure: La logique ’tidydata”, wickham et grolemund (2017) jean jacques gauguier S´eance 1 janvier 2018 96 / 216
  • 97. la suite de package tidyverse Lorsque l’utilisateur charge la library (tidyverse) les packages suivant sont automatiquement charg´es : le package ggplot2 qui permet d’effectuer des repr´esentations graphiques tibble qui permet de travailler avec des donn´ees stock´ees sous la forme de tibble, tidyr qui permet de transformer les structures de donn´ees en donn´ees ”’tidy” purr qui permet d’appliquer des fonctions de mani`ere vectorielles, dplyr qui permet d’appliquer des transformations aux donn´ees sous forme ”tidy” readr qui permet d’importer des donn´ees dans r. jean jacques gauguier S´eance 1 janvier 2018 97 / 216
  • 98. les donn´ees ”non tidy”et ”tidy” L’extrait de gauche repr´esente des donn´ees non organis´ees sans la forme ’tidy’. Cette de droite repr´esente des donn´ees organis´ees selon la principe. Figure: donn´ees non tidy et tidy, wickham et grolemund (2017) jean jacques gauguier S´eance 1 janvier 2018 98 / 216
  • 99. le package tidyr Ce package permet d’organiser des donn´ees non organis´ees sous la forme ’tidy’. Au global, ce package est organis´e autour de deux verbs qui sont: gather(): permet de d´evelopper le dataframe en transformant des donn´ees en lignes en variables ”colonne” spread(): permet de supprimer des lignes en les regroupant. separate(): permet de spitter une colonne en deux colonnes ex: tidyr::separate(mes donn´ees, into = c(”num´erateur”, ”d´enominateur”)) (si ratio existe au d´epart) unite(): inverse du verb separate. ex tidyr::unite(mes donn´ees,num´erateur, d´enominateur) jean jacques gauguier S´eance 1 janvier 2018 99 / 216
  • 100. la fonction gather #1 ´ecriture g´en´erique de la fonction tidyr::gather(mes donn´ees, mes colonnes, key=’’ma cl´e’’, value=’’mes_valeurs’’) Figure: wickham et grolemund (2017) jean jacques gauguier S´eance 1 janvier 2018 100 / 216
  • 101. la fonction spread #1 ´ecriture g´en´erique de la fonction tidyr::spread(mes donn´ees,key=’’ma cl´e’’, value=’’mes_valeurs’’) Figure: wickham et grolemund (2017) jean jacques gauguier S´eance 1 janvier 2018 101 / 216
  • 102. le package dplyr et ses principales fonctions Le package dplyr fait partie de la ”suite” tidyverse. Ce package permet de manipuler et transformer les donn´ees stock´ees sous forme de dataframe. Diff´erentes fonctions existent pour manipuler les donn´ees: filter() pour filtrer les donn´ees selon des r`egles arrange() pour r´eorganiser les donn´ees en changeant l’ordre des lignes, mutate() pour cr´eer de nouvelles variables `a partir des variables existantes, select() pour s´electionner des colonnes du dataframe group by() pour s´electionner et combiner des colonnes du dataframe summarise() pour effectuer des totaux des colonnes jean jacques gauguier S´eance 1 janvier 2018 102 / 216
  • 103. la fonction select: s´electionner les colonnes d’un dataframe La fonction poss`ede diff´erents arguments permettant de filtrer sur les colonnes Example #1 ´ecriture g´en´erique de la fonction dplyr::select(mes_donn´ees, ma_r`egle) #2 s´electionner une colonne enti`ere dplyr::select(mes_donn´ees, la_colonne_de_mon_dataframe) #3 s´electionner diff´erentes colonnes dplyr::select(mes_donn´ees, la_colonne_de_mon_dataframe, la_seconde_colonne) #4 s´electionner toutes les colonnes sauf une dplyr::select(mes_donn´ees,- la_colonne_de_mon_dataframe) #5 s´electionner les ´el´ements d’une colonne selon termes dplyr::select(mes_donn´ees, contains(’’mon_terme’’) #6 s´electionner les ´el´ements d’une colonne selon termes dplyr::select(mes_donn´ees, starts_with(’’mon_terme’’) #7 s´electionner les ´el´ements d’une colonne selon termes dplyr::select(mes_donn´ees, ends_with(’’mon_terme’’) #8 s´electionner les ´el´ements d’une colonne selon les positions dplyr::select(mes_donn´ees, 3:5) jean jacques gauguier S´eance 1 janvier 2018 103 / 216
  • 104. la fonction filter: filtrer parmi les lignes d’un dataframe La fonction poss`ede diff´erents arguments permettant de filtrer les lignes Example #1 ´ecriture g´en´erique de la fonction dplyr::filtrer(mes_donn´ees, ma_r`egle) #2 s´electionner des lignes (valeurs de la variable) dplyr::filtrer(mes_donn´ees, valeur de la variable >’’valeur’’) #3 s´electionner des lignes (nom de la variable) dplyr::filtrer(mes_donn´ees, variable de la colonne == mon_terme) #4 s´electionner avec des combinaisons dplyr::filtrer(mes_donn´ees, variable de la colonne == mon_terme & valeur de la variable $>$ ’’valeur’’) jean jacques gauguier S´eance 1 janvier 2018 104 / 216
  • 105. la fonction arrange: r´eorganiser l’ordre des lignes La fonction poss`ede diff´erents arguments permettant de modifier l’ordre des lignes Example #1 ´ecriture g´en´erique de la fonction dplyr::arrange(mes_donn´ees, arg(ma_colonne)) #2 ordre d´ecroissant des valeurs de ma colonne #Ok top 10, top 5, etc... dplyr::arrange(mes_donn´ees, desc(ma_colonne)) #3 ordre alphab´etique de la premi`ere colonne dplyr::arrange(mes_donn´ees) #4 ordre alphab´etique d’une colonne particuli`ere dplyr::arrange(mes_donn´ees, ma_colonne) jean jacques gauguier S´eance 1 janvier 2018 105 / 216
  • 106. la fonction mutate: cr´eer de nouvelles colonnes/variables La fonction permet d’ajouter de nouvelles colonnes construites sur les colonnes existantes (ratio, pourcentage,etc.... Example #1 ´ecriture g´en´erique de la fonction dplyr::mutate(mes_donn´ees, ma_nouvelle_variable= combinaison) #2 supprimer une variable existante dplyr::mutate(mes_donn´ees, ma_variable_existante= NULL) #3 garder seulement la variable nouvellement cr´ee dplyr::transmute(mes_donn´ees, ma_nouvelle_variable =combinaison) #4 utilisation les noms des variables dans la combinaison dplyr::mutate(mes_donn´ees, ma_nouvelle_variable= !!quo(nom_var_1 * nom_var_2)) Le verb de la fonction mutate peut ˆetre utilis´ee avec les fonctions suivantes de r +, - etc log() lead(), lag() dense rank(), min rank(), percent rank(), row number(), cume dist(), ntile() cumsum(), cummean(), cummin(), cummax(), cumany(), cumall() fil else(), recode(), case when() existe aussi: mutate() (mutate all(), mutate if(), mutate at() et transmute all(), transmute if(), transmute at() jean jacques gauguier S´eance 1 janvier 2018 106 / 216
  • 107. la fonction summarize: cr´eer des agr´egations de colonnes La fonction permet d’effectuer des calculs sur une colonne enti`ere Example #1 ´ecriture g´en´erique de la fonction dplyr::summarize(mes_donn´ees, mon_calcul= calcul*ma_variable) #2 exemple (afficher moyenne d’une colonne+ nombre de lignes dplyr::summarise(mes_donn´ees, mean = mean(ma_variable), n = n()) Le verb de la fonction summarize peut ˆetre utilis´ee avec les fonctions suivantes de r mesure de la centralit´e: mean(), median() mesure de la densit´e: sd(), IQR(), mad() min(), max(), quantile() mesure de la position: first(), last(), nth(), nombre: n(), n distinct() expression: any(), all() jean jacques gauguier S´eance 1 janvier 2018 107 / 216
  • 108. la fonction group by: grouper des variables La fonction permet d’effectuer des groupements (ex: regrouper des observations qui appartiennent `a la mˆeme cat´egorie (ex: homme, femme, image, vid´eo, etc...)) pour ensuite effectuer des calculs. Utilis´ee seule, cette fonction ne modifie pas la structure des donn´ees. Example #1 ´ecriture g´en´erique de la fonction dplyr::group_by(mes_donn´ees, ma_variable) #2 grouper diff´erentes variables dplyr::group_by(mes_donn´ees, ma_variable_1,ma_variable_2,ma_variable_3) jean jacques gauguier S´eance 1 janvier 2018 108 / 216
  • 109. la fonction pipe La fonction pipe % > % permet d’enchaˆıner les transformations permet de relier les phases de s´election, de transformation et repr´esentation. L’exemple ci-dessus illustre le principe Example graphique_page_mois_eng_secteur<-df%>% # nom du graphique/nom des donn´ees de d´epart mutate(mois = format(time, "%m"), ann´ee = format(time, "%Y")) %>% #verb mutate group_by(secteur,name,from_name,mois,annee)%>% #verb group_by summarise(total = sum(engagement_tot))%>% #verb summarize filter(annee>="2017")%>% #verb filter graphique ensuite ggplot(aes(x= mois,y=total,fill=from_name))+geom_bar(stat = "identity")+ theme_minimal()+ theme(legend.position="bottom")+ theme(legend.text=element_text(size=5))+ facet_grid(. ~secteur)+ theme(legend.title=element_text(size=5))+ theme(strip.text.x = element_text(size = 6, angle = 90))+ theme(axis.text.x=element_text(size=3))+ scale_y_continuous(labels = comma)+ labs(x = "mois", y = "volume d’engagement par page", title = "volume d’engagement mensuel en 2017 par page", subtitle = "hors dark posts") jean jacques gauguier S´eance 1 janvier 2018 109 / 216
  • 110. le package Dplyr et ses fonctions Figure: `a t´el´echarger ici: https://www.rstudio.com/resources/cheatsheets/ jean jacques gauguier S´eance 1 janvier 2018 110 / 216
  • 111. la gestion des dates dans r La gestion des dates est g´en´eralement complexe compte tenu des diff´erences de format, des fuseaux horaires et aux autres sp´ecificit´es (ex: ann´ee bissextile) La ”suite” tidyverse comprend un package d´edi´e `a la gestion des dates. D’autres packages plus anciens comme chron permettent ´egalement de g´erer les dates. Enfin la classe POSIX est ´egalement int´eressante car elle permet de g´erer les fuseaux horaires (time zone). Pour d´ebuter commen¸cons par la fonction as.Date qui repose sur cette codification: d jour du mois (d´ecimal) m mois (d´ecimal) b mois en abr´eviation B mois sans abr´eviation y ann´ee avec deux chiffres y ann´ee avec quatre chiffres jean jacques gauguier S´eance 1 janvier 2018 111 / 216
  • 112. la fonction de base as.Date Example # 1 cas o`u la date est d´ej`a format´ee ma_date<-as.Date(’2017-01-28’) # 2 cas o`u la date n’est pas format´ee de la bonne mani`ere ma_date<-as.Date(’1/28/2018’, format=’%m/%d/%Y’) #j’indique le format en m’aidant du tableau ma_date<-as.Date(’28JANV18’,format=’%d%b%y’) #exemple transformation de date d’un extract twitter created<-as.Date(publication$created, format="%Y-%m-%d") jean jacques gauguier S´eance 1 janvier 2018 112 / 216
  • 113. la gestion des dates avec le package chron Le package chron permet de formater les donn´ees calendaires int´egrant les heures, minutes et secondes. A noter que ce package ne g`ere pas les fuseaux horaires: d jour du mois (d´ecimal) m mois (d´ecimal) mon mois en abr´eviation month mois sans abr´eviation y ann´ee avec deux chiffres h heure m minute s seconde jean jacques gauguier S´eance 1 janvier 2018 113 / 216
  • 114. la fonction as.Date Example ma_date<-chron::dates(’’01/28/2018) mes_dates <-dates(c(’’01/28/2018,’’02/21/2018,’’03/28/2018,’’04/15/2018)) mon_heure <-chron:: times("23:03:20") mes_heures<-chron::times(c("23:03:20", "22:29:56", "01:03:30", "18:21:03")) mes_dates_et_heures<-chron::chron(dates = mes_dates , times = mes_heures) #effectuer des op´erations cf documentation chron mes_dates_et_heures[1] - mes_dates_et_heures[3] jean jacques gauguier S´eance 1 janvier 2018 114 / 216
  • 115. la gestion des dates avec la classe Posix Comme les autres packages, POSIX repose sur un ensemble de conventions pour le formatage des dates et heures a jour de la semaine en abr´eviation c localisation sp´ecifique du format j jour en d´ecimal M minute en d´ecimal S seconde en d´ecimal x date sp´ecifique w num´ero du jour de la semaine (dimanche=0) y ann´ee (deux d´ecimales 18) z d´ecalage par rapport `a l’heure GMT A jour de la semaine B mois complet d jour en d´ecimal I heure en d´ecimal (12) m mois en d´ecimal p gestion am/pm U num´ero de la semaine de l’ann´ee (dimanche) W num´ero de la semaine de l’ann´ee (lundi) X localisation de l’heure Y ann´ee (4 chiffres 2018) Z time zone en texte argument option tz pour sp´ecifier la time zone jean jacques gauguier S´eance 1 janvier 2018 115 / 216
  • 116. les transformations avec le format Posix Example # on utilise la fonction strptime pour cr´eer une date ma_date<-strptime(’01/Janv/2018:07:51:00’,format=’%d/%b/%Y:%H:%M:%S’) # on transforme l’objet date en un format Posixt (Posixt:nombre de secondes depuis le 01/01/1970 (UTC)) #identifier le formatage pour extraire les donn´ees mydate<-as.POSIXlt(’2018-01-28 08:12:43’) names(mydate) mydate$mday ==>28 # transformation du format de date d’un extract vk date+formatage tz metrics$date <- as.POSIXct(metrics$date, origin="1970-01-01", tz=’Europe/Moscow’) jean jacques gauguier S´eance 1 janvier 2018 116 / 216
  • 117. la gestion des dates avec le package lubridate Lubridate permet de formater de nombreux formats en input, g´erer les fuseau horaires ou encore extraire des ´el´ements de la date ou encore effectuer les op´erations entre les dates. Par ailleurs, il est totalement compatible avec dplyr et la fonction pipe. Ce package permet de g´erer facilement trois cas de figure que l’on rencontre souvent lorsque l’on importe des donn´ees: la date est encod´ee sous la forme d’une chaˆıne de caract`ere la date est scind´ee en plusieurs colonnes (mois, ann´ee, jour) la date existe mais dans un format inad´equat Par ailleurs lubridate permet de travailler aussi bien avec les dates que les heures ou la combinaison des deux: date format date time format heure date-time format date et heure jean jacques gauguier S´eance 1 janvier 2018 117 / 216
  • 118. les fonctions int´egr´ees dans lubridate Example #1 afficher la date du jour: lubridate::today() #2 afficher la date et l’heure actuelle: lubridate::now() #3 formater une date `a partir d’une cha^ıne de caract`eres madate<-ymd("2018-01-28") madate<-mdy("January 31st, 2018") madate<-dmy("31-Jan-2017") madate<-ymd(20170131) madateeheure<-ymd_hms("2017-01-31 20:11:59") madateeheure<-mdy_hm("01/31/2017 08:01") #4 sp´ecifier un fuseau horaire madate<-ymd(20170131, tz = "UTC") #5 formater une date `a partir de plusieurs colonnes mesdonn´ees%>% select(year, month, day, hour, minute) #6 formater et cr´eer une variable une date `a partir de plusieurs colonnes mesdonn´ees %>% select(year, month, day, hour, minute) %>% mutate(madate = make_datetime(year, month, day, hour, minute)) #7 transformer date-time en date, et date en date-time madateeheure<-as_datetime(today()) madate<-as_date(now()) jean jacques gauguier S´eance 1 janvier 2018 118 / 216
  • 119. l’aide m´emoire sur le package lubridate Figure: `a t´el´echarger ici: https://www.rstudio.com/resources/cheatsheets jean jacques gauguier S´eance 1 janvier 2018 119 / 216
  • 120. l’aide m´emoire global sur les dates Figure: `a t´el´echarger ici: http://blog.yhat.com/static/pdf/R date cheat sheet.pdf jean jacques gauguier S´eance 1 janvier 2018 120 / 216
  • 121. la navigation dans les listes Dans le cadre de l’´ecriture d’une fonction ou d’une boucle il est n´ecessaire de maˆıtriser l’indicage notamment lorsque l’on travaille avec les nested lists. Le graphique tir´ee de ”R for datascience” (2017) indique la mani`ere dont on acc`ede aux ´el´ements d’une liste r´ecursive avec ”[ ]” ou ”[[ ]]”). A noter que la notation a[[”b”]] est ´equivalente `a la notation a$b. Enfin ’[[ ]]” d´etruit la hi´erarchie de la structure de stockage originelle. Figure: wickham et grolemund (2017) jean jacques gauguier S´eance 1 janvier 2018 121 / 216
  • 122. la jointure des tables Lorsque l’on manipule de la social data, nous sommes souvent amen´es `a joindre des fichiers sur la base d’un ´el´ement commun (observation et/ variable). Par exemple, `a partir d’un extract facebook j’effectue diff´erents traitements de textmining en cr´eant un nouveau dataframe. In fine, je souhaite construire un fichier unique constitu´e de l’extract de d´epart et de mon fichier de traitement. Les deux fichiers ont un ´el´ement commun: l’id de mon post facebook. Je vais donc pouvoir r´ealiser une jointure entre mes deux fichiers. Le package dplyr permet de manipuler ´egalement les tables `a l’aide de diff´erentes jointures grˆace `a ses fonctions int´egr´ees. (u e vignette pr´esente les possibilit´es offertes en mati`ere de jointure. on pourra le t´el´echarger `a cette adresse: https://cran.r-project.org/web/packages/dplyr/vignettes/two-table.html). Bien ´evidemment, la condition obligatoire pour que les jointures s’effectuent r´eside dans le fait que chaque fichier sous ˆetre stock´ee sous la forme ”tidy”. Enfin les fonctions pr´esent´ees ici fonctionnent seulement sur la base d’une jointure entre deux tables. Pour les jointures impliquant plus de deux tables, il faudra utiliser Reduce. jean jacques gauguier S´eance 1 janvier 2018 122 / 216
  • 123. les fonctions ”mutate” pour joindre les donn´es dans dplyr La famille ”mutate” (inner join, left join, right join et full join) permet d’ajouter des variables d’une table `a une premi`ere table sous certaines conditions. Example # premier cas ’’natural joint’’ sans sp´ecification d’un pivot (toutes les colonnes de ma premi`ere table devront exister dans la seconde pour que jointure fonctionne) ma_premi`ere_table %>% left_join(ma_deuxi`eme_table) # second cas je sp´ecifie un pivot par l’arg by ma_premi`ere_table %>% left_join(ma_deuxi`eme_table, by=’’mon_pivot’’) ==>exemple id_facebook # troisi`eme cas je force un pivot mais en sp´ecifiant le lien c ma_premi`ere_table %>% left_join(ma_deuxi`eme_table, c(’’mon_pivot_pr’’,’’mon_pivot_sd jean jacques gauguier S´eance 1 janvier 2018 123 / 216
  • 124. les quatre types de jointure mutate dans dplyr Example # premier cas (inner_join) (jointure si seulement si les ´el´ements sont pr´esents dans les DEUX tables) (toutes les observations de la table finale devront exister au niveau de ma premi`er ma_premi`ere_table %>% inner_join(ma_deuxi`eme_table) # second cas (left_join) ma_premi`ere_table %>% left_join(ma_deuxi`eme_table) (toutes les observations de ma premi`ere table sont pr´eserv´ees et la jointure s’effec de la seconde table) # troisi`eme cas (right_join) ma_premi`ere_table %>% right_join(ma_deuxi`eme_table) (toutes les observations de ma seconde table sont pr´eserv´ees et la jointure s’effect de la premi`ere table) # quatri`eme cas (full_join) ma_premi`ere_table %>% full_join(ma_deuxi`eme_table) (mise en commun) jean jacques gauguier S´eance 1 janvier 2018 124 / 216
  • 125. les fonctions ’filtering” pour joindre les donn´es dans dplyr La famille ”filtering” (semi join et anti join) permet d’ajouter des observations d’une table `a une autre. Example # premier cas (semi_join) (toutes les observations de ma premi`ere table devront exister dans la seconde pour q jointure fonctionne) ma_premiere_table %>% semi_join(ma_deuxi`eme_table) # second cas (anti_join) ma_premiere_table %>% anti_join(ma_deuxi`eme_table, by=’’mon_pivot’’) (toutes les obervations de ma premi`ere table qui existent dans la seconde seront sup une fois la jointure r´ealis´ee) jean jacques gauguier S´eance 1 janvier 2018 125 / 216
  • 126. trois fonctions pour op´erer des jointures entre tables identiques Sous r´eserve que les deux tables poss`edent une structure identique (c’est `a dire les mˆemes variables), dplyr permet d’effectuer facilement l’union, l’intersection et la diff´erence entre les observations appartenant `a deux tables. Example # premier cas (intersect) monnintersection<-intersect( ma_premi`ere_table, ma_deuxi`eme_table) # second cas (union) monunion<-union(ma_premi`ere_table, ma_deuxi`eme_table) # second cas (setdiff) madifference<-setdiff(ma_premi`ere_table, ma_deuxi`eme_table) jean jacques gauguier S´eance 1 janvier 2018 126 / 216
  • 127. les expressions r´eguli`eres avec le package grep Le package grep permet d’utiliser les expressions r´eguli`eres pour manipuler et transformer les chaˆınes de caract`eres dans r. En text miming, apr`es avoir captur´e les donn´ees, l’´etape suivante consiste `a nettoyer les donn´ees en puisant dans les expressions r´eguli`eres. Le principe d’utilisation des expressions r´eguli`eres (regex) est simple: via une expression ou m´etacaract`ere on recherche dans une chaˆıne de caract`ere un mod`ele ou un pattern, sp´ecifique. Selon les arguments/fonctions ajout´es `a l’expression celle-ci cherchera `a : localiser du texte ce sont les fonctions grep, grepl, regexpr et gregexpr, substituer du texte ce sont les fonctions sub et gsub, d´ecouper du texte la fonction strsplit jean jacques gauguier S´eance 1 janvier 2018 127 / 216
  • 128. les principaux m´etacaract`eres [...]: un des caract`eres indiqu´es entre les crochets [ˆ...]: tous les caract`eres sauf ceux indiqu´es apr`es le ˆ [x-y]: les caract`eres compris entre x `a y inclus. [:alpha:]: a-zA-Z [:digit:]: 0-9 [:alnum:]: a-zA-Z0-9 et caract`eres sp´eciaux [:lower:]: a-z [:upper:]: A-Z [:xdigit:]: 0-9a-fA-FT [:graph:]: tout caract`ere graphique [:print:]: tout caract`ere affichable [:punct:]: tout caract`ere de ponctuation [:blank:]: espace, tabulation [:space:]: espace, tabulation, nouvelle ligne, retour chariot [:cntrl:]: tout caract`ere de contrˆole. jean jacques gauguier S´eance 1 janvier 2018 128 / 216
  • 129. les principaux op´erateurs . :n’importe quel caract`ere ˆ: en dehors du ˆ, indique le d´ebut du texte & indique la fin du texte +: 1 ou plusieurs occurrences du motif qui pr´ec`ede le + *: 0 ou plusieurs occurrences du motif qui pr´ec`ede le * ?: 0 ou 1 occurrence du motif pr´ec´edant du ? n: a-z x,: x ou plus occurrences du motif qui pr´ec`ede ,y: y occurrences au plus du motif qui pr´ec`ede x,y: x `a y occurrences du motif qui pr´ec`ede jean jacques gauguier S´eance 1 janvier 2018 129 / 216
  • 130. les principales fonctions et leurs syntaxes Example #localiser du texte: les fonctions grep, grepl, regexpr et gregexpr grep(mon_expression_r´eguli`ere, ma_cha^ıne_de_caract`ere, value=FALSE) grep(mon_expression_r´eguli`ere, ma_cha^ıne_de_caract`ere, value=TRUE) grepl(mon_expression_r´eguli`ere, ma_cha^ıne_de_caract`ere) regexpr(mon_expression_r´eguli`ere, ma_cha^ıne_de_caract`ere) gregexp(mon_expression_r´eguli`ere, ma_cha^ıne_de_caract`ere) #substituer du texte: les fonctions sub et gsub sub(mon_expression_r´eguli`ere, ma_cha^ıne_de_caract`ere_a_ajouter_si_true, ma_cha^ıne_de_caract`ere) gsub(mon_expression_r´eguli`ere, ma_cha^ıne_de_caract`ere_a_ajouter_si_true, ma_cha^ıne_de_caract`ere) gsub ==>expression vectoris´ee..... #substituer du texte: la fonction strsplit strsplit(ma_cha^ıne_de_caract`ere, " mon_pattern") jean jacques gauguier S´eance 1 janvier 2018 130 / 216
  • 131. l’aide m´emoire pour les regex Figure: `a t´el´echarger ici: https://www.rstudio.com/resources/cheatsheets/ jean jacques gauguier S´eance 1 janvier 2018 131 / 216
  • 132. les structures de contrˆole ou boucles Comme les fonctions que nous verrons un peu plus tard, les boucles sont des outils int´eressants qui permettent d’´eviter de dupliquer le code. En effet, la duplication est probl´ematique `a diff´erents plans: g´en´eratrice d’erreurs: mauvaise recopie (oubli de caract`eres, mauvaise indentation, etc....) obscurcit les programmes: allonge la longueur du code et complexifie la lecture complexifie les mises `a jour: duplication oblige `a modifier chaque ligne de code identique, ... Une boucle comprend trois ´el´ements: le r´esultat: structure de donn´ees dans laquelle sera stock´ee le r´esultat de la boucle (mon resultat”<-vector(”integer”, length)) la s´equence: indique la longueur de l’it´eration ex: 1: length(mon vecteur) du premi`ere ´el´ement au dernier (length(mon vecteur)=n) l’op´eration `a r´ealiser ou la fonction `a op´erer: il s’agit de l’op´eration que la boucle effectuera `a chaque pas et stockera par la suite (ex: output[[i]]<- median(df[[i]]) donc output[[1]]<- median(df[[1]]) puis output[[2]] <-median(df[[2]]) et ainsi de suite.... Avant d’introduire les boucles, nous attardons nous sur les op´erateurs arithm´etiques et logiques ainsi que les structures de test. jean jacques gauguier S´eance 1 janvier 2018 132 / 216
  • 133. les op´erateurs arithm´etiques et logiques x+y: addition x-y: soustraction x*y: multiplication x/y: division x/y: exposant (** autre ´ecriture) x %% y: modulo (reste) x == y: test ´egalit´e x <= y: test inf´erieur ou ´egal `a x > = y: test sup´erieur ou ´egal `a > : test sup´erieur <: test inf´erieur !=: test si diff´erent x||y: ou &: et isTRUE(x): test si vrai jean jacques gauguier S´eance 1 janvier 2018 133 / 216
  • 134. les structures de test Example #if-then-else if (condition) expr.si.vrai else expr.si.faux #if-then-else (forme simplifi´ee) if (condition) expr.si.vrai #ifelse operation(ifelse(condition, expr.si.vrai, expr.si.faux)) #swith (´equivalent `a case: choisir d’ex´ecuter un bloc de code en fonction d’un ´el´em switch(expr, ´etiquette-1 = bloc-de-code-1, ´etiquette-2 = bloc-de-code-2, ... ... ...) jean jacques gauguier S´eance 1 janvier 2018 134 / 216
  • 135. les boucles dans r Example #la boucle while (tant que, alors fait cela) i <- 1 while (i <= 10) i <- i+4 # la boucle while +break while(TRUE) { i <- i+4 if (i > 10) break } #la boucle repeat+break i <- 1 repeat { i <- i+4 if (i > 10) break } #m^eme r´esultat pour les trois boucles ci-dessus i [1] 13 #la boucle for (pour chaque it´eration, fait cela) x<- c(5,12,13) for (n in x) print(n^2) [1] 25, 144,169 jean jacques gauguier S´eance 1 janvier 2018 135 / 216
  • 136. les fonctions vectoris´ees Parmi les utilisateurs de r, une blague circule: if you’ are using a loop in r, you’re probably doing something wrong”. En effet, comme souvent avec r, il y a plusieurs solutions pour effectuer une op´eration. Comme nous l’avons vu, il est souvent question d’appliquer une op´eration par exemple une fonction sp´ecifique `a chaque ´el´ement d’une structure de donn´ees (liste, ligne d’un dataframe, etc...). r et certains packages fournissent des fonctions int´eressantes pour permettent d’´eviter l’utilisation des boucles. Nous pr´esentons ici successivement: : la famille apply() soit lapply(), dapply(), etc... : le package purr qui permet d’appliquer une fonction `a des listes. jean jacques gauguier S´eance 1 janvier 2018 136 / 216
  • 137. la famille apply() La fonction apply et ses d´eriv´ees permettent d’´eviter l’utilisation de boucles: elles permettent d’appliquer des transformations `a chaque ´el´ement d’une matrice, d’un tableau, d’un dataframe ou encore d’une liste. La fonction apply est construite de diff´erents arguments x: x est un tableau ou une matrice MARGIN: argument qui sp´ecifie la mani`ere dont va s’appliquer apply: MARGIN=1, apply s’applique sur les lignes MARGIN=2, apply s’applique sur les colonnes FUN: la fonction que l’on veut appliquer. ...: arguments suppl´ementaires A partir de la fonction apply, toute une famille de fonction peuvent ˆetre appel´ees: lapply: s’applique sur les dataframes, listes ou encore vecteurs et renvoie une liste d’o`u lapply sapply: similaire `a lapply mais renvoie un r´esultat simplifi´e en comparaison de lapply: un vecteur au lieu d’une liste mapply: version multidimensionnelle de sapply La diff´erence entre cette fonction et les fonctions lapply et lapply est qu’elle peut fournir `a fonction FUN des arguments suppl´ementaires prenant des valeurs qui diff`erent selon les sous-objets tapply: s’applique sur des facteurs et renvoie une liste aggregate: s’applique sur un dataframe et applique la fonction s´epar´ement pour chaque colonne du dataframe jean jacques gauguier S´eance 1 janvier 2018 137 / 216
  • 138. les fonctions apply par les exemples Example data<-matrix(c(1,2,3,4,5,6), nrow=2) #naming colnames(data)=c("C1","C2","C3") rownames(data)=c("L1","L2") # la fonction apply() pour faire la somme de chaque ligne apply(data, 1, sum) # la fonction apply() pour faire la somme de chaque ligne en rempla¸cant 1 par 2 apply(data, 2, sum) x <- lapply(5:8, sample, x = 1:10)) lapply(x, mean) sapply(x, mean) jean jacques gauguier S´eance 1 janvier 2018 138 / 216
  • 139. le package purr et sa fonction map Le package purr avec sa fonction map permet d’´eviter l’utilisation des boucles. En fonction de l’output d´esir´e, on utilisera des fonctions diff´erentes: map(): une liste en sortie map lgl(): un vector logique (TRUE, FALSE,...) map int(): un vecteur num´erique map dbl(): un vecteur double map chr(): une liste de chaines de caract`eres Comme la fonction apply, la fonction map est construite `a partir de diff´erents arguments x: x est structure de stockage sur laquelle on peut appliquer les fonctions FUN: la fonction que l’on veut appliquer ...: arguments suppl´ementaires Enfin, la fonction map poss`ede les d´eclinaisons: map2, pmap, invoke map qui permettent d’appliquer finement des fonctions `a chaque ´el´ements d’une liste ou d’un vecteur. jean jacques gauguier S´eance 1 janvier 2018 139 / 216
  • 140. l’aide m´emoire pour le package purr Figure: `a t´el´echarger ici: https://www.rstudio.com/resources/cheatsheets/ jean jacques gauguier S´eance 1 janvier 2018 140 / 216
  • 141. pourquoi ´ecrire une fonction? r´eponse simple.... jean jacques gauguier S´eance 1 janvier 2018 141 / 216
  • 142. la construction d’une fonction dans r Une fonction est compos´ee obligatoirement de trois ´el´ements un nom: un nom (un nom explicite de pr´ef´erence) un corps/les instructions: les op´erations effectu´ees par la fonction les arguments: les inputs n´ecessaires Example # structure d’une fonction le_nom_de_ma_fonction <- function(input_1, input_2, input_3,..) { le_corps_de_ma_fonction } Il est possible d’ajouter d’autres ´el´ements la v´erification: contrˆole le type des arguments la fin de la fonction:la fonction return() permet de s’assurer de la bonne fin de la fonction l’argument res: sp´ecifie finement la structure de stockage de l’output Example # structure d´evelopp´ee d’une fonction le_nom_de_ma_fonction <- function(input_1, input_2, input_3) { stopifnot(all(is.numeric(input_1),is.numeric(input_2),is.numeric(input_3))) le_corps_de_ma_fonction res <- list() } jean jacques gauguier S´eance 1 janvier 2018 142 / 216
  • 143. S´eance 3: repr´esenter les donn´ees dans r jean jacques gauguier S´eance 1 janvier 2018 143 / 216
  • 144. Introduction jean jacques gauguier S´eance 1 janvier 2018 144 / 216
  • 145. le choix d’une repr´esentation graphique: un processus it´eratif Figure: adapt´e de Yau: Data Points: Visualization That Means Something, 2013, Wiley jean jacques gauguier S´eance 1 janvier 2018 145 / 216
  • 146. le choix d’un graphique: un choix...un peu..balis´e jean jacques gauguier S´eance 1 janvier 2018 146 / 216
  • 147. Quelques conseils pour r´eussir ses graphiques Avant de nous plonger dans le code, voici quelques conseils basiques en mati`ere de choix de repr´esentation graphique S’appliquer le process it´eratif dans la phase de s´election du graphique Ne pas h´esiter `a faire des nombreux essais Adapter les visualisations `a mon audience (combattez votre ´ego !!!!) Soigner la surcouche (l´egende, titre des axes, datatips, d´efinition....) Limiter le nombre de typo, etc...pour ne pas distraire le lecteur MAIS SURTOUT SOYEZ HONNˆETE AVEC VOS DATAS De nombreux ouvrages et exemples existent pour aider `a la repr´esentation graphique. En dehors de l’univers r (et des classiques Cleveland, Tufte et Few) voici une liste d’ouvrages basiques et utiles en mati`ere de visualisation des donn´ees: Data Points: Visualization That Means Something, Yau, 2013, Wiley The Wall Street Journal Guide to Information Graphics, Wong, 2014, Norton Storytelling with Data: A Data Visualization Guide for Business Professionals, Nussbaumer Knaflic, 2013, Wiley The functional art: An introduction to information graphics and visualization, Cairo, 2013,Berkeley: New Riders Good Charts: The HBR Guide to Making Smarter, More Persuasive Data Visualizations, Berinato, 2016, HBR Press A signaler que ces auteurs ont tous des blogs. Le blog de Nathan Yau http://flowingdata.com/ est souvent cit´e parmi les blogs de r´ef´erence en mati`ere de dataviz. A noter l’excellent dataviz catalogue https://datavizcatalogue.com/ jean jacques gauguier S´eance 1 janvier 2018 147 / 216
  • 148. la repr´esentation graphique avec r jean jacques gauguier S´eance 1 janvier 2018 148 / 216
  • 149. La r´ealisation de graphiques dans r r poss`ede d’excellentes capacit´es au niveau de la cr´eation graphiques grˆace notamment: aux fonctionnalit´es du package de base graphics `a diff´erents packages destin´es `a la visualisation: le package ggplot2 le package lattice pour repr´esenter les variables multivari´ees, les packages destin´es `a repr´esenter les r´eseaux: igraph et ggraph le package maps pour la cartographie .... Au fil de cette session, nous verrons dans un premier temps les possibilit´es offertes par le package de base graphics. Dans un second temps nous nous int´eressons `a ggplot2 qui est probablement le package le plus utilis´e dans l’univers r en mati`ere de repr´esentation graphique. jean jacques gauguier S´eance 1 janvier 2018 149 / 216
  • 150. cr´eer un graphique avec graphics: un process en deux temps Quelque soit le choix effectu´e dans r pour r´ealiser un graphique, la r´ealisation d’un graphique passe par les ´etapes suivantes: l’´etape de base: la r´ealisation d’un graphique ”nu”: j’indique les variables que je veux repr´esenter j’indique le type de graphique que je veux (barres, camembert, ligne, heat map, etc....) l’´etape de finition: l’ajout des couches suppl´ementaires: modification du th`eme, modification des axes (taille, couleur, orientation, font,etc...) cr´eation et/ou modification du titre (taille, couleur, orientation, font,etc...) .... jean jacques gauguier S´eance 1 janvier 2018 150 / 216
  • 151. La liste des repr´esentations graphiques Le package graphics permet de repr´esenter de nombreux types de graphiques. En fonction du type de variables (continues, discr`etes, ordonn´ees, non ordonn´ees, etc...), il est possible de choisir parmi cette liste (non exhaustive) de graphiques: barplot() diagramme en bˆaton (variable discrˆete) boxplot() boite `a moustaches (variables continues) hist(): histogramme (variables continues) #choix les classes pie(): camembert #barplot plus efficace plot(): diagramme de dispersion (diagramme de base) curve(): graphique pour repr´esenter une fonction sunflowerplot(): diagramme de dispersion sans chevauchement (jitter) pairs(): matrice de diagramme de dispersion ... jean jacques gauguier S´eance 1 janvier 2018 151 / 216
  • 152. la grammaire de base pour plot La palette des arguments et de fonctions permettant de modifier l’apparence des graphiques avec plot est large (https://stat.ethz.ch/R-manual/R-devel/library/graphics/html/00Index.html pour la documentation). La liste ci-dessous int`egre les principaux choix: x variable en ordonn´ee y variable en abscisse type=“p” trace des points (choix par d´efaut) lty=”type de tiret”) choix du type de tiret (de 0 `a 6) lwd=nombre ´epaisseur du point pch = nombre type de point (de 0 `a 25: chaque nombre correspond `a un type) col=”ma couleur” choix de couleur main= ”mon titre” choix du titre xlab= ”titre axe x” choix titre x ylab= ”titre axe y” choix titre y xlim= c(valeur min, valeur max) lim de x (aussi log) ylim= c(valeur min, valeur max) lim de y sub=”sous titre” choix du sous titre col.main=”ma couleur” couleur du titre col.lab=”ma couleur” couleur titre des axes col.sub=”ma couleur” couleur du sous titre font.main=nombre’ font du titre (ex font.main=4) font.lab font des axes font.sub font du sous titre cex.main=nombre taille des font 1 est la r´ef´erence cex.lab taille font des axes cex.sub taille font du sous titre la fonction title() int`egre les param`etres li´es au titre la fonction legend() int`egre les param`etres li´es `a la l´egende la fonction abline() ajoute une droite au graphique la fonction axis() pour ajouter des axes la fonction box() pour ajouter un cadre la fonction texte () pour ajouter des axes la fonction arrows() pour ajouter des fl`eches la fonction grid() pour ajouter une grille la fonction gridpar() pour changer de mani`ere permanente les param`etres graphiques jean jacques gauguier S´eance 1 janvier 2018 152 / 216
  • 153. un premier graphique plot Example #1 je g´en`ere des donn´ees x<-1:10 y1<-x*x y2=3*y1 #2 un premier graphique plot(x) jean jacques gauguier S´eance 1 janvier 2018 153 / 216
  • 154. un second graphique Example #1 graphique (x,y)+type+taille+couleur+label des axes plot(x, y1, type="b", pch=19, col="red", xlab=" ", ylab=" ") jean jacques gauguier S´eance 1 janvier 2018 154 / 216
  • 155. mon second graphique avec une troisi`eme variable Example #1 graphique (x,y1)+type+taille+couleur+label des axes plot(x, y1, type="b", pch=19, col="red", xlab=" ", ylab=" ") #2 graphique (x,y2)+type+taille+couleur+choix des tirets lines(x, y2, pch=18, col="blue", type="b", lty=2) jean jacques gauguier S´eance 1 janvier 2018 155 / 216
  • 156. mon second graphique optimis´e Example #1 graphique (x,y1)+type+taille+couleur+label des axes plot(x, y1, type="b", pch=19, col="red", xlab=" ", ylab=" ") #2 graphique (x,y2)+type+taille+couleur+choix des tirets lines(x, y2, pch=18, col="blue", type="b", lty=2) #3 ajout d’un titre+param`etres du titre title(main = "Mon titre", sub = "Mon sous titre", xlab = "Le titre de mon axe des x", ylab = "Le titre de mon axe des y", cex.main = 2, font.main= 4, col.main= "black", cex.sub = 0.75, font.sub = 3, col.sub = "black", col.lab ="darkblue") jean jacques gauguier S´eance 1 janvier 2018 156 / 216
  • 157. mon second graphique encore...plus optimis´e Example #1 graphique (x,y1)+type+taille+couleur+label des axes plot(x, y1, type="b", pch=19, col="red", xlab=" ", ylab=" ") #2 graphique (x,y2)+type+taille+couleur+choix des tirets lines(x, y2, pch=18, col="blue", type="b", lty=2) #3 ajout d’un bloc titre+param`etres du titre title(main = "Mon titre", sub = "Mon sous titre", xlab = "Le titre de mon axe des x", ylab = "Le titre de mon axe des y", cex.main = 2, font.main= 4, col.main= "black", cex.sub = 0.75, font.sub = 3, col.sub = "black", col.lab ="darkblue") #4 ajout d’un bloc l´egende+param`etres de la l´egende legend(list(x = 1,y = 80), legend=c("Line 1", "Line 2"), col=c("red", "blue"), lty=1:2, cex=0.8) jean jacques gauguier S´eance 1 janvier 2018 157 / 216
  • 158. mon second graphique optimis´e avec des lignes Example #5 ajout de ligne (hypoth`ese mod`ele lin´eaire) abline(lsfit(x,y1),col="red") abline(lsfit(x,y2),col="blue") #6 ajout de ligne (hypoth`ese mod`ele lin´eaire+ avanc´e) abline(lm(x,y1),col="red") # abline(lm(x,y2),col="blue") #7 r´egression non param´etrique lines(lowess(x,y1),col="red4") lines(lowess(x,y2),col="blue4") jean jacques gauguier S´eance 1 janvier 2018 158 / 216
  • 159. exemple de graphique barplot Les repr´esentations diagramme en bˆaton ou barplot() et les histogrammes ou hist() sont souvent confondues....alors qu’elles s’appliquent `a des donn´ees diff´erentes: variables discr`etes: barplot (taille des barres = valeur de la cat´egorie) variables continues: histogramme (taille des barres = effectif dans l’intervalle) A noter que le choix automatique de l’intervalle pour illustrer la r´epartition des valeurs n’est pas toujours satisfaisant. Example #1 je g´en`ere des donn´ees valeurs<-sample(1:100, 5, replace=F) names(valeurs)<-c("cat_a","cat_b","cat_c","cat_d","cat_e") #2 un premier graphique barplot(effectifs) jean jacques gauguier S´eance 1 janvier 2018 159 / 216
  • 160. mon second graphique optimis´e Example #3 j’ajoute des ´el´ements barplot(valeurs, col=c(1,2,7,0,8), border="black", xlab="mes_categories", ylab="mes_valeurs", main="mon_histogramme") jean jacques gauguier S´eance 1 janvier 2018 160 / 216
  • 161. mon second graphique modifi´e Example #4 je modifie l’orientation du graphique et les graduations avec les param`etres: horiz=T et las=1 barplot(valeurs, col=c(1,2,7,0,8),border="black", xlab="mes_categories", ylab="mes_valeurs", main="mon_histogramme", horiz=T , las=1) jean jacques gauguier S´eance 1 janvier 2018 161 / 216
  • 162. exemple de graphique histogramme Un histogramme avec graphics se construit avec la fonction hist(). r choisit automatiquement la taille de l’intervalle de base. Example #1 je g´en`ere des donn´ees count<- sample(1:100, 100, replace=T) dataframe_hist<-as.data.frame (count) #2 un premier graphique hist(dataframe_hist$count) jean jacques gauguier S´eance 1 janvier 2018 162 / 216
  • 163. mon histogramme optimis´e r via un algorithme (il existe diff´erents algo.) choisit la largeur de l’intervalle de base. L’utilisateur a le loisir de choisir son intervalle ”manuellement” via la fonction breaks: breaks=seq(min(x), max(x), length=xx), include.lowest=TRUE Example #3 je g´en`ere des donn´ees hist(dataframe_hist$count,breaks=seq(0,12000,500),include.lowest=TRUE,col="grey", main="mon_histogramme",xlab="mes_trajets", ylab="fr´equence") jean jacques gauguier S´eance 1 janvier 2018 163 / 216
  • 164. mon histogramme encore plus optimis´e j’ajoute via la fonction abline() deux lignes calculant la m´ediane et la moyenne. Example hist(dataframe_hist$count,breaks=seq(0,12000,500),include.lowest=TRUE,col="grey", main="mon_histogramme",xlab="mes_trajets", ylab="fr~A c quence") abline(v=c(mean(dataframe_hist$count),median(dataframe_hist$count)),lty=c(2,3),lwd=2 jean jacques gauguier S´eance 1 janvier 2018 164 / 216
  • 165. mon histogramme encore encore plus optimis´e j’ajoute la l´egende Example #4 je g´en`ere des donn´ees legend("topright",legend=c("mean km","median km"),lty=c(2,3),lwd=2) jean jacques gauguier S´eance 1 janvier 2018 165 / 216
  • 166. un pie chart Un pie chart avec graphics se construit avec la fonction pie(). la documentation pour ce graphique se trouve ici: https://stat.ethz.ch/R-manual/R-devel/library/graphics/html/pie.html. A noter cette note dans la documentation: Pie charts are a very bad way of displaying information. The eye is good at judging linear measures and bad at judging relative areas. A bar chart or dot chart is a preferable way of displaying this type of data. Example pie(effectifs, abels = names(x), edges = 200, radius = 0.8, density = NULL, angle = 45, col = "grey", border = "white", lty = 2, main = "mon_titre", sub = "Mon sous titre", cex.main = 2, font.main= 2) jean jacques gauguier S´eance 1 janvier 2018 166 / 216
  • 167. un box plot Un box plot avec graphics se construit avec la fonction boxplot(). cette graphique permet de visualiser la r´epartition des valeurs au sein de la boite (premier quartile, troisi`eme quartile et m´ediane) et `a l’ext´erieur de la boite les fameuses moustaches dont la longueur ´equivalaut `a 1.5 fois l’espace interquartile (la distance entre le 1er et le 3`eme quartile) Example boxplot(dataframe_hist$count, main="ma_boite", xlab="mes_donn´ees", ylab="mes_valeurs", col="darkgreen") jean jacques gauguier S´eance 1 janvier 2018 167 / 216