SlideShare une entreprise Scribd logo
1  sur  46
Télécharger pour lire hors ligne
Bonjour amis R-addicts,
Nous vous proposons de nous retrouver tous
ensemble le jeudi 2 Avril autour de victuailles pour
conter les glorieuses batailles que nous avons
menées avec R !
Meestup R-Addict de l'Avrill ,
de l'An de Grace MMXV
La Grande Queste du Nombre de Participants,
par Sir Barthélémy-François
Oyez, Oyez++ !
Historique
● 21 mars 2013 : naissance du Meetup R-Addict
● 3 avril 2014 : premier anniversaire
– Présentation mémorable sur les meetups R dans le monde
– Quels sont les facteurs qui influencent la réussite d'un meetup ?
Qui suis-je ?
● Barthélémy-François
● Arrière^36 petit-fils de
Charlemagne
● Docteur ès Sciences
Cognitives de l'Université
Joseph Fourier
● Membre de la confrérie des
chefs de projets R&D
● Spécialisé dans les données
RH
La Grande Queste du Nombre
de Participants
● Objectif :
A partir des données collectées sur les différents meetups R dans le monde par Timeri et François,
déterminer quels facteurs influencent le succès d'une rencontre meetup R
● Armes :
– library("plyr")
– library("reshape2")
– library("ggplot2")
– library("tm")
– library("koRpus")
– library("SnowballC")
– library("zoo")
– library("compiler")
– library("indicoio")
Les données
● load(url("http://francoisguillem.fr/data/events.rda"))
> attributes(events)
$names
[1] "Id" "Title" "Date" "Users" "Rating" "NRating" "Link" "Description"
> dim(events)
[1] 1293 8
> length(levels(as.factor(events$Id)))
– [1] 92
> max(events$Id)
[1] 107 !!
Les données
● summary(events$Users)
● Min. 1st Qu. Median Mean 3rd Qu. Max.
● 1.00 9.00 19.00 29.36 35.00 275.00
●
●
●
●
●
●
●
●
●
●
●
●
●
Acte 1 : l'assault de la grotte du Temps
où comment l'on s'aperçoit que plus le
temps passe et moins il y a de
participants...
Qu'est-ce que le temps ?
● events$Date <- as.Date(events$Date) #comme ça c'est clair..
## Calcul du temps entre l'évènement et la création du meetup
● deltaD <-ddply(events,.(Id),.fun = function(x)
{data.frame(tryCatch(x$Date[1]-x$Date, error = function(e) NA))}
,.drop = FALSE)
● events$DateFromOnset <-
as.numeric(deltaD$tryCatch.x.Date.1....x.Date..error...function.e..NA.)
L'assaut de la grotte du temps
● Objectif : étudier l'évolution du nombre de
participants aux évènements en fonction de la
date de création du meetup
● Armes :
– library("zoo")
– library("plyr")
– library("ggplot2")
Qu'est-ce que le temps ?
● events$Date <- as.Date(events$Date) #comme ça c'est clair..
● ## Calcul du temps entre l'évènement et la création du meetup
● deltaD <-ddply(events,.(Id),.fun = function(x)
{data.frame(tryCatch(x$Date[1]-x$Date, error = function(e) NA))}
,.drop = FALSE)
● events$DateFromOnset <-
as.numeric(deltaD$tryCatch.x.Date.1....x.Date..error...function.e..NA.)
Qu'est-ce que le temps ?
● events$Date <- as.Date(events$Date) #comme ça c'est clair..
● ## Calcul du délais depuis le début du groupe
● deltaD <-ddply(events,.(Id),.fun = function(x)
{data.frame(tryCatch(x$Date[1]-x$Date, error = function(e) NA))}
,.drop = FALSE)
● events$DateFromOnset <-
as.numeric(deltaD$tryCatch.x.Date.1....x.Date..error...function.e..NA.)
Qu'est-ce que le temps ?
● events$Date <- as.Date(events$Date) #comme ça c'est clair..
● ## Calcul du délais depuis le début du groupe
● deltaD <-ddply(events,.(Id),.fun = function(x)
{data.frame(tryCatch(x$Date[1]-x$Date, error = function(e) NA))}
,.drop = FALSE)
● events$DateFromOnset <-
as.numeric(deltaD$tryCatch.x.Date.1....x.Date..error...function.e..NA.)
Qu'est-ce que le temps ?
L'assault du temps
● Essais multiples pour trouver "l'espace de
représentation" offrant le plus possible une
"corrélation" d'"aspect linéaire"
● "meilleur aspect" => log(users) en fonction du
temps
La preuve !
qplot(DateFromOnset,UsersFromOnsetLog, facets = ~Id, data = events, geom = "point")
qplot(DateFromOnset,UsersFromOnsetLog, data = events, geom = "smooth")
Acte 2 : le combast du sac de Mots
où l'on apprend qu'il ne faut surtout pas prononcer
le mot hackaton...
Le combast du Sac de Mots
● Objectif : etudier l'influence de la description de
la rencontre sur le nombre de participants
● Armes :
– library("tm")
– library("wordcloud")
– library("slam")
– library("plyr")
Unstructured Data & Semantic Analysis: A Behind-the-Scenes Look
Jessica Williamson
Do you understand semantic analysis? Do you want to understand how
raw text is translated into behavioral data? This talk will give you an
intro to the cognitive and behavioral research methods used in semantic
analysis of text data. Examples will be included using manual and
automated techniques to identify patterns. Small and larger scale data
sets will be discussed including the use of algorithms in Hadoop and
MapReduce. Once the raw text is translated into quantitative data,
statistical analyses can be performed on the end product in programs like
R. This talk will focus on the research methods.
BEER and PIZZA will be provided so come and get to know your fellow
Austin UseRs.
Thanks to Revolution Analytics (http://www.revolutionanalytics.com/)
and Bazaarvoice (http://www.bazaarvoice.com/) for their sponsorship!
Thanks to Infochimps (http://www.infochimps.com/) for hosting us!
Un exemple
Qu'est-ce qu'un sac de mots ?
● Sac de mot = représentation d'un texte comme une collection
de mots (sans considérer leur ordre)
● Objectif : trouver les mots des descriptions qui attirent le
chaland
● Stratégie :
– Calculer un score de succès pour chaque évènement
– regrouper les descriptions d'évènements en fonction de ce score
– Etudier les sur/sous représentations des mots utilisés dans les
groupes formés
Calcul d'un score de succès
● Préliminaire : calculer un score d'intérêt
res <- ddply(events,.(Id),.fun = function(x)
{data.frame(tryCatch((lm(UsersFromOnsetLog~DateFromOns
et,x)$residuals),error = function(e) rep(NA,times = dim(x)[1])))}
,.drop =FALSE)
● events$Interest <-
res$tryCatch..lm.UsersFromOnsetLog...DateFromOnset..x..resi
duals...
Constitution de groupes
summary(events$Interest)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
-3.93800 -0.28940 0.05662 0.00000 0.36830 2.52200 75
> events$Group <- cut(events$Interest,quantile(events$Interest,na.rm=T))
●
●
●
●
●
●
●
●
●
●
● v qplot(Interest, data=events, color = Group,geom="histogram",binwidth = 0.05)
Création de la matrice termes /
documents pour tout le corpus
data <- Corpus(VectorSource(events$Description))
● meta(data,tag = 'Group',type = "local") <- events$Group
● data <- tm_map(data,tolower)
● data <- tm_map(data,stripWhitespace)
● data <- tm_map(data,removePunctuation)
● data <- tm_map(data,removeNumbers)
● data <- tm_map(data,removeWords,stopwords("english"))
● data <- tm_map(data,stemDocument)
● tdm <- TermDocumentMatrix(data)
A quoi ressemble une matrice
termes / documents ?
>tdm
● A term-document matrix (12113 terms, 1293 documents)
● Non-/sparse entries: 77863/15584246
● Sparsity : 100%
● Maximal term length: 257
● Weighting : term frequency (tf)
●
● Docs
● Terms 1 2 3 4 5 6 7 8 9 10
● acera 0 0 0 0 0 0 0 0 0 0
● acerca 0 0 0 0 0 0 0 0 0 0
● acf 0 0 0 0 0 0 0 0 0 0
● achiev 2 0 0 0 0 0 0 0 0 0
● achteraan 0 0 0 0 0 0 0 0 0 0
● acid 0 0 0 0 0 0 0 0 0 0
● acknowledg 0 0 0 0 0 0 0 0 0 0
● acm 0 0 0 0 0 0 0 0 0 0
● acompil 0 0 0 0 0 0 0 0 0 0
● acoust 0 0 0 0 0 0 0 0 0 0
● acoustician 0 0 0 0 0 0 0 0 0 0
Le tour de passe-passe du renard
● Idée : étudier la sur/sous représentation des mots en fonction
des groupes d'intérêt => chi2 sur une table de contingence
● library("slam")
● tdmG <- rollup(tdm,MARGIN = 2L,events$Group,sum)
#equivalent de la fonction apply pour les matrices creuses
● tdmGl <- removeSparseTerms(tdmG,0.50)
● mattdmGl <- (as.matrix(tdmGl))
La table de contingence (mattdmGl)
  row.name
s
(-3.94,-0.289] (-0.289,0.0566] (0.0566,0.368] (0.368,2.52]
1 aber 3 4 3 0
2 abil 2 1 4 5
3 abl 20 10 9 7
4 abstract 20 18 25 23
5 academ 4 11 8 6
6 academi 4 0 1 3
7 academia 2 2 4 4
8 accept 3 2 4 3
9 access 28 22 20 25
Le chi2 de Saint Antoine
● res <- chisq.test(mattdmGl)# ce qu'on fait d'habitude
● # Ce qu'on fait pour devenir un saint le temps d'une seconde
test <- apply(as.data.frame(res$expected),1,min)
expWords <- data.frame(res$residuals[as.vector(test)>5,])
● Le résultat :
negwords <- rownames(expWords[expWords$X..3.94..0.289. >2,])
poswords <- rownames(expWords[expWords$X.0.368.2.52. >2,])
cols<-colorRampPalette(c("green","red"))(30)
wordcloud(poswords,10*expWords$X.0.368.2.52.[expWords$X.0.368.2.52.>2], max.words = 70,
colors=cols, vfont=c("gothic english","plain"),rot.per = 0)
cols<-colorRampPalette(c("green","blue"))(30)
wordcloud(negwords,10*expWords$X..3.94..0.289.[expWords$X..3.94..0.289.>2], max.words = 70,
colors=cols, vfont=c("gothic english","plain"),rot.per = 0)
Quelques recommandations
Préférer plutôt :
"How to forecast the use of Hadoop in Google
Big Data Analytics"
à :
"The friday automn hackaton on using julia to
handle sql requests in a simulink project"
tdmpos <- TermDocumentMatrix(data,list(dictionary = poswords))#un seul n a dictionary
res <- findAssocs(tdmpos,poswords[1:64],corlimit = 0.11)
keep <- data.frame(lapply(res,length))
keep <- keep[,keep>0]
par_init <- par()
par(mfrow=c(1,1),cex =0.2)
plot(tdmpos, names(keep), corThreshold=0.11,weighting = T)
Acte 3 : la prise de Coeur de Pigeon
où l'on apprend que les sentiments sont plus forts
que les mots...
Ya pas que les grands qui s'aiment !
● Sentiment analysis : Sentiment analysis (also known
as opinion mining) refers to the use of natural
language processing, text analysis and
computational linguistics to identify and extract
subjective information in source materials. (wikipédia)
● Par exemple :
– Caractere positif/négatif du discours
– Identification d'émotions (colère, surprise, joie, etc.)
La prise de Coeur de Lion
● Objectif : étudier l'influence de l'émotion
dominante du discours sur la participation à un
événement
● Armes :
– library("indicoio")
Calcul de l'indice emotionnel du
discours
● ###Sentiment analysis
● sent_score <- vector(mode ="numeric",length =
length(events$Description))
● for (i in 1:length(events$Description))
● {sent_score[i] <-
tryCatch(sentiment(events$Description[i]), error =
function(e) NA)}
● events$Sentiment <- sent_score
plot(events$Sentiment,events$logUsers)
Pour être bien sûr
● cor.test(events$Sentiment,events$logUsers)
● Pearson's product-moment correlation
● data: events$Sentiment and events$logUsers
● t = 11.4256, df = 1264, p-value < 2.2e-16
● alternative hypothesis: true correlation is not equal to 0
● 95 percent confidence interval:
● 0.2551659 0.3550679
● sample estimates:
● cor 0.3059589
La tentation de Satan
ou l'on cède à l'envie de tout mettre dans un seul
modèle deux minutes avant la présentation juste
pour voir...
Work in progress !!
Conclusion : le Graal
où l'on apprend que l'essentiel n'est pas dans
lactel...
Un grand merci à Timeri et
François pour l'organisation et le
maintien de ce beau Meetup !!

Contenu connexe

En vedette

L’effet « Ripple » : l’outil au centre de tout
L’effet « Ripple » : l’outil au centre de toutL’effet « Ripple » : l’outil au centre de tout
L’effet « Ripple » : l’outil au centre de toutitSMF France
 
[P] Benjamin Thierry-présentation lhivic
[P] Benjamin Thierry-présentation lhivic[P] Benjamin Thierry-présentation lhivic
[P] Benjamin Thierry-présentation lhivicAudrey Leblanc
 
PresentacióN 3 La Naturaleza
PresentacióN 3 La NaturalezaPresentacióN 3 La Naturaleza
PresentacióN 3 La Naturalezakevomal
 
Paralisis Cerebral
Paralisis CerebralParalisis Cerebral
Paralisis CerebralVictoria
 
Trabajando con Google Docs
Trabajando con Google DocsTrabajando con Google Docs
Trabajando con Google Docsmethenyes
 
Tablas De MatemáTica
Tablas De MatemáTicaTablas De MatemáTica
Tablas De MatemáTicaPamtapx3
 
Dossier de presse France 3 Midi-Pyrénées 2013
Dossier de presse France 3 Midi-Pyrénées 2013Dossier de presse France 3 Midi-Pyrénées 2013
Dossier de presse France 3 Midi-Pyrénées 2013Fabrice Valéry
 
Pres Web2.0
Pres Web2.0Pres Web2.0
Pres Web2.0Guariz
 
Moodle en los colegios. Divertic y ApuntesJV
Moodle en los colegios. Divertic y ApuntesJVMoodle en los colegios. Divertic y ApuntesJV
Moodle en los colegios. Divertic y ApuntesJVEducaclic
 
Lanecesidaddeunacontrarreformacatlic
LanecesidaddeunacontrarreformacatlicLanecesidaddeunacontrarreformacatlic
Lanecesidaddeunacontrarreformacatlicapologeticu
 
ENVTECH - Présentation d'un service web
ENVTECH - Présentation d'un service webENVTECH - Présentation d'un service web
ENVTECH - Présentation d'un service webFlorian Nisolle
 

En vedette (20)

L’effet « Ripple » : l’outil au centre de tout
L’effet « Ripple » : l’outil au centre de toutL’effet « Ripple » : l’outil au centre de tout
L’effet « Ripple » : l’outil au centre de tout
 
Reciclaje
ReciclajeReciclaje
Reciclaje
 
[P] Benjamin Thierry-présentation lhivic
[P] Benjamin Thierry-présentation lhivic[P] Benjamin Thierry-présentation lhivic
[P] Benjamin Thierry-présentation lhivic
 
PresentacióN 3 La Naturaleza
PresentacióN 3 La NaturalezaPresentacióN 3 La Naturaleza
PresentacióN 3 La Naturaleza
 
[Code Camp 2009] Microsoft Surface (Mauro Castagnasso + Nicolás Padula)
[Code Camp 2009] Microsoft Surface (Mauro Castagnasso + Nicolás Padula)[Code Camp 2009] Microsoft Surface (Mauro Castagnasso + Nicolás Padula)
[Code Camp 2009] Microsoft Surface (Mauro Castagnasso + Nicolás Padula)
 
Paralisis Cerebral
Paralisis CerebralParalisis Cerebral
Paralisis Cerebral
 
Aleida Vladdo
Aleida VladdoAleida Vladdo
Aleida Vladdo
 
Trabajando con Google Docs
Trabajando con Google DocsTrabajando con Google Docs
Trabajando con Google Docs
 
tutorial.p.p.t
tutorial.p.p.ttutorial.p.p.t
tutorial.p.p.t
 
Maria Ju Li Ana !!
Maria Ju Li Ana !!Maria Ju Li Ana !!
Maria Ju Li Ana !!
 
HIDRATACION
HIDRATACIONHIDRATACION
HIDRATACION
 
Tablas De MatemáTica
Tablas De MatemáTicaTablas De MatemáTica
Tablas De MatemáTica
 
Dossier de presse France 3 Midi-Pyrénées 2013
Dossier de presse France 3 Midi-Pyrénées 2013Dossier de presse France 3 Midi-Pyrénées 2013
Dossier de presse France 3 Midi-Pyrénées 2013
 
Pres Web2.0
Pres Web2.0Pres Web2.0
Pres Web2.0
 
Atila: El azote de Dios
Atila: El azote de DiosAtila: El azote de Dios
Atila: El azote de Dios
 
Moodle en los colegios. Divertic y ApuntesJV
Moodle en los colegios. Divertic y ApuntesJVMoodle en los colegios. Divertic y ApuntesJV
Moodle en los colegios. Divertic y ApuntesJV
 
Lanecesidaddeunacontrarreformacatlic
LanecesidaddeunacontrarreformacatlicLanecesidaddeunacontrarreformacatlic
Lanecesidaddeunacontrarreformacatlic
 
Papa.jpg
Papa.jpgPapa.jpg
Papa.jpg
 
ENVTECH - Présentation d'un service web
ENVTECH - Présentation d'un service webENVTECH - Présentation d'un service web
ENVTECH - Présentation d'un service web
 
caballero carmelo
caballero carmelocaballero carmelo
caballero carmelo
 

Similaire à 20150402 meetup r addicts du printemps

Data Mining (Partie 2).pdf
Data Mining (Partie 2).pdfData Mining (Partie 2).pdf
Data Mining (Partie 2).pdfOuailChoukhairi
 
Génération automatique de texte
Génération automatique de texteGénération automatique de texte
Génération automatique de texteEstelle Delpech
 
Pourquoi et comment utiliser r - Sébastien Brodeur
Pourquoi et comment utiliser r - Sébastien BrodeurPourquoi et comment utiliser r - Sébastien Brodeur
Pourquoi et comment utiliser r - Sébastien BrodeurWeb à Québec
 
Spideo: Movie Recommendation Analytics with Cassandra (Français)
Spideo: Movie Recommendation Analytics with Cassandra (Français)Spideo: Movie Recommendation Analytics with Cassandra (Français)
Spideo: Movie Recommendation Analytics with Cassandra (Français)DataStax Academy
 
Oxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overviewOxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overviewLudovic Piot
 
Oxalide Academy : Workshop #3 Elastic Search
Oxalide Academy : Workshop #3 Elastic SearchOxalide Academy : Workshop #3 Elastic Search
Oxalide Academy : Workshop #3 Elastic SearchOxalide
 
L’apport des techniques statistiques dans les projets Lean 6 Sigma
L’apport des techniques statistiques dans les projets Lean 6 SigmaL’apport des techniques statistiques dans les projets Lean 6 Sigma
L’apport des techniques statistiques dans les projets Lean 6 SigmaXL Formation
 
Projet BI - 2 - Conception base de données
Projet BI - 2 - Conception base de donnéesProjet BI - 2 - Conception base de données
Projet BI - 2 - Conception base de donnéesJean-Marc Dupont
 
Elasticsearch - Esme sudria
Elasticsearch - Esme sudriaElasticsearch - Esme sudria
Elasticsearch - Esme sudriaDavid Pilato
 
Meetup pg recherche fulltext ES -> PG
Meetup pg recherche fulltext ES -> PGMeetup pg recherche fulltext ES -> PG
Meetup pg recherche fulltext ES -> PGLouise Grandjonc
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) univalence
 
Traitement des données massives (INF442, A2)
Traitement des données massives (INF442, A2)Traitement des données massives (INF442, A2)
Traitement des données massives (INF442, A2)Frank Nielsen
 
Mardi gras du 2 juin 2010 : CSIM2
Mardi gras du 2 juin 2010 : CSIM2Mardi gras du 2 juin 2010 : CSIM2
Mardi gras du 2 juin 2010 : CSIM2hortis
 
SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015Rodolphe Quiédeville
 
Matinale "Data Science et Machine Learning"
Matinale "Data Science et Machine Learning"Matinale "Data Science et Machine Learning"
Matinale "Data Science et Machine Learning"Aline Deschamps
 

Similaire à 20150402 meetup r addicts du printemps (20)

Data Mining (Partie 2).pdf
Data Mining (Partie 2).pdfData Mining (Partie 2).pdf
Data Mining (Partie 2).pdf
 
Génération automatique de texte
Génération automatique de texteGénération automatique de texte
Génération automatique de texte
 
cm-bd.pdf
cm-bd.pdfcm-bd.pdf
cm-bd.pdf
 
Pourquoi et comment utiliser r - Sébastien Brodeur
Pourquoi et comment utiliser r - Sébastien BrodeurPourquoi et comment utiliser r - Sébastien Brodeur
Pourquoi et comment utiliser r - Sébastien Brodeur
 
algo-imsi-2.pdf
algo-imsi-2.pdfalgo-imsi-2.pdf
algo-imsi-2.pdf
 
Hello mongo
Hello mongoHello mongo
Hello mongo
 
Une Introduction à R
Une Introduction à RUne Introduction à R
Une Introduction à R
 
Spideo: Movie Recommendation Analytics with Cassandra (Français)
Spideo: Movie Recommendation Analytics with Cassandra (Français)Spideo: Movie Recommendation Analytics with Cassandra (Français)
Spideo: Movie Recommendation Analytics with Cassandra (Français)
 
Oxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overviewOxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overview
 
Oxalide Academy : Workshop #3 Elastic Search
Oxalide Academy : Workshop #3 Elastic SearchOxalide Academy : Workshop #3 Elastic Search
Oxalide Academy : Workshop #3 Elastic Search
 
L’apport des techniques statistiques dans les projets Lean 6 Sigma
L’apport des techniques statistiques dans les projets Lean 6 SigmaL’apport des techniques statistiques dans les projets Lean 6 Sigma
L’apport des techniques statistiques dans les projets Lean 6 Sigma
 
Projet BI - 2 - Conception base de données
Projet BI - 2 - Conception base de donnéesProjet BI - 2 - Conception base de données
Projet BI - 2 - Conception base de données
 
Elasticsearch - Esme sudria
Elasticsearch - Esme sudriaElasticsearch - Esme sudria
Elasticsearch - Esme sudria
 
Meetup pg recherche fulltext ES -> PG
Meetup pg recherche fulltext ES -> PGMeetup pg recherche fulltext ES -> PG
Meetup pg recherche fulltext ES -> PG
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
 
Pytong2015
Pytong2015Pytong2015
Pytong2015
 
Traitement des données massives (INF442, A2)
Traitement des données massives (INF442, A2)Traitement des données massives (INF442, A2)
Traitement des données massives (INF442, A2)
 
Mardi gras du 2 juin 2010 : CSIM2
Mardi gras du 2 juin 2010 : CSIM2Mardi gras du 2 juin 2010 : CSIM2
Mardi gras du 2 juin 2010 : CSIM2
 
SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015
 
Matinale "Data Science et Machine Learning"
Matinale "Data Science et Machine Learning"Matinale "Data Science et Machine Learning"
Matinale "Data Science et Machine Learning"
 

Dernier

ELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel Attal
ELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel AttalELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel Attal
ELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel Attalcontact Elabe
 
Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...
Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...
Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...France Travail
 
analyse husseindey AMIROUCHE Abdeslem.pptx
analyse husseindey AMIROUCHE Abdeslem.pptxanalyse husseindey AMIROUCHE Abdeslem.pptx
analyse husseindey AMIROUCHE Abdeslem.pptxHadJer61
 
To_understand_transformers_together presentation
To_understand_transformers_together presentationTo_understand_transformers_together presentation
To_understand_transformers_together presentationbahija babzine
 
Bidirectional Encoder Representations from Transformers
Bidirectional Encoder Representations from TransformersBidirectional Encoder Representations from Transformers
Bidirectional Encoder Representations from Transformersbahija babzine
 
Le contrôle de la recherche d'emploi en 2023
Le contrôle de la recherche d'emploi en 2023Le contrôle de la recherche d'emploi en 2023
Le contrôle de la recherche d'emploi en 2023France Travail
 

Dernier (6)

ELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel Attal
ELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel AttalELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel Attal
ELABE BFMTV L'Opinion en direct - Les Français et les 100 jours de Gabriel Attal
 
Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...
Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...
Montant moyen du droit d'allocation chômage versé aux demandeurs d'emploi ind...
 
analyse husseindey AMIROUCHE Abdeslem.pptx
analyse husseindey AMIROUCHE Abdeslem.pptxanalyse husseindey AMIROUCHE Abdeslem.pptx
analyse husseindey AMIROUCHE Abdeslem.pptx
 
To_understand_transformers_together presentation
To_understand_transformers_together presentationTo_understand_transformers_together presentation
To_understand_transformers_together presentation
 
Bidirectional Encoder Representations from Transformers
Bidirectional Encoder Representations from TransformersBidirectional Encoder Representations from Transformers
Bidirectional Encoder Representations from Transformers
 
Le contrôle de la recherche d'emploi en 2023
Le contrôle de la recherche d'emploi en 2023Le contrôle de la recherche d'emploi en 2023
Le contrôle de la recherche d'emploi en 2023
 

20150402 meetup r addicts du printemps

  • 1. Bonjour amis R-addicts, Nous vous proposons de nous retrouver tous ensemble le jeudi 2 Avril autour de victuailles pour conter les glorieuses batailles que nous avons menées avec R !
  • 2. Meestup R-Addict de l'Avrill , de l'An de Grace MMXV La Grande Queste du Nombre de Participants, par Sir Barthélémy-François Oyez, Oyez++ !
  • 3. Historique ● 21 mars 2013 : naissance du Meetup R-Addict ● 3 avril 2014 : premier anniversaire – Présentation mémorable sur les meetups R dans le monde – Quels sont les facteurs qui influencent la réussite d'un meetup ?
  • 4.
  • 5.
  • 6. Qui suis-je ? ● Barthélémy-François ● Arrière^36 petit-fils de Charlemagne ● Docteur ès Sciences Cognitives de l'Université Joseph Fourier ● Membre de la confrérie des chefs de projets R&D ● Spécialisé dans les données RH
  • 7. La Grande Queste du Nombre de Participants ● Objectif : A partir des données collectées sur les différents meetups R dans le monde par Timeri et François, déterminer quels facteurs influencent le succès d'une rencontre meetup R ● Armes : – library("plyr") – library("reshape2") – library("ggplot2") – library("tm") – library("koRpus") – library("SnowballC") – library("zoo") – library("compiler") – library("indicoio")
  • 8. Les données ● load(url("http://francoisguillem.fr/data/events.rda")) > attributes(events) $names [1] "Id" "Title" "Date" "Users" "Rating" "NRating" "Link" "Description" > dim(events) [1] 1293 8 > length(levels(as.factor(events$Id))) – [1] 92 > max(events$Id) [1] 107 !!
  • 9. Les données ● summary(events$Users) ● Min. 1st Qu. Median Mean 3rd Qu. Max. ● 1.00 9.00 19.00 29.36 35.00 275.00 ● ● ● ● ● ● ● ● ● ● ● ● ●
  • 10. Acte 1 : l'assault de la grotte du Temps où comment l'on s'aperçoit que plus le temps passe et moins il y a de participants...
  • 11. Qu'est-ce que le temps ? ● events$Date <- as.Date(events$Date) #comme ça c'est clair.. ## Calcul du temps entre l'évènement et la création du meetup ● deltaD <-ddply(events,.(Id),.fun = function(x) {data.frame(tryCatch(x$Date[1]-x$Date, error = function(e) NA))} ,.drop = FALSE) ● events$DateFromOnset <- as.numeric(deltaD$tryCatch.x.Date.1....x.Date..error...function.e..NA.)
  • 12. L'assaut de la grotte du temps ● Objectif : étudier l'évolution du nombre de participants aux évènements en fonction de la date de création du meetup ● Armes : – library("zoo") – library("plyr") – library("ggplot2")
  • 13. Qu'est-ce que le temps ? ● events$Date <- as.Date(events$Date) #comme ça c'est clair.. ● ## Calcul du temps entre l'évènement et la création du meetup ● deltaD <-ddply(events,.(Id),.fun = function(x) {data.frame(tryCatch(x$Date[1]-x$Date, error = function(e) NA))} ,.drop = FALSE) ● events$DateFromOnset <- as.numeric(deltaD$tryCatch.x.Date.1....x.Date..error...function.e..NA.)
  • 14. Qu'est-ce que le temps ? ● events$Date <- as.Date(events$Date) #comme ça c'est clair.. ● ## Calcul du délais depuis le début du groupe ● deltaD <-ddply(events,.(Id),.fun = function(x) {data.frame(tryCatch(x$Date[1]-x$Date, error = function(e) NA))} ,.drop = FALSE) ● events$DateFromOnset <- as.numeric(deltaD$tryCatch.x.Date.1....x.Date..error...function.e..NA.)
  • 15. Qu'est-ce que le temps ? ● events$Date <- as.Date(events$Date) #comme ça c'est clair.. ● ## Calcul du délais depuis le début du groupe ● deltaD <-ddply(events,.(Id),.fun = function(x) {data.frame(tryCatch(x$Date[1]-x$Date, error = function(e) NA))} ,.drop = FALSE) ● events$DateFromOnset <- as.numeric(deltaD$tryCatch.x.Date.1....x.Date..error...function.e..NA.)
  • 16. Qu'est-ce que le temps ?
  • 17. L'assault du temps ● Essais multiples pour trouver "l'espace de représentation" offrant le plus possible une "corrélation" d'"aspect linéaire" ● "meilleur aspect" => log(users) en fonction du temps
  • 18. La preuve ! qplot(DateFromOnset,UsersFromOnsetLog, facets = ~Id, data = events, geom = "point")
  • 20. Acte 2 : le combast du sac de Mots où l'on apprend qu'il ne faut surtout pas prononcer le mot hackaton...
  • 21. Le combast du Sac de Mots ● Objectif : etudier l'influence de la description de la rencontre sur le nombre de participants ● Armes : – library("tm") – library("wordcloud") – library("slam") – library("plyr")
  • 22. Unstructured Data & Semantic Analysis: A Behind-the-Scenes Look Jessica Williamson Do you understand semantic analysis? Do you want to understand how raw text is translated into behavioral data? This talk will give you an intro to the cognitive and behavioral research methods used in semantic analysis of text data. Examples will be included using manual and automated techniques to identify patterns. Small and larger scale data sets will be discussed including the use of algorithms in Hadoop and MapReduce. Once the raw text is translated into quantitative data, statistical analyses can be performed on the end product in programs like R. This talk will focus on the research methods. BEER and PIZZA will be provided so come and get to know your fellow Austin UseRs. Thanks to Revolution Analytics (http://www.revolutionanalytics.com/) and Bazaarvoice (http://www.bazaarvoice.com/) for their sponsorship! Thanks to Infochimps (http://www.infochimps.com/) for hosting us! Un exemple
  • 23. Qu'est-ce qu'un sac de mots ? ● Sac de mot = représentation d'un texte comme une collection de mots (sans considérer leur ordre) ● Objectif : trouver les mots des descriptions qui attirent le chaland ● Stratégie : – Calculer un score de succès pour chaque évènement – regrouper les descriptions d'évènements en fonction de ce score – Etudier les sur/sous représentations des mots utilisés dans les groupes formés
  • 24. Calcul d'un score de succès ● Préliminaire : calculer un score d'intérêt res <- ddply(events,.(Id),.fun = function(x) {data.frame(tryCatch((lm(UsersFromOnsetLog~DateFromOns et,x)$residuals),error = function(e) rep(NA,times = dim(x)[1])))} ,.drop =FALSE) ● events$Interest <- res$tryCatch..lm.UsersFromOnsetLog...DateFromOnset..x..resi duals...
  • 25. Constitution de groupes summary(events$Interest) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's -3.93800 -0.28940 0.05662 0.00000 0.36830 2.52200 75 > events$Group <- cut(events$Interest,quantile(events$Interest,na.rm=T)) ● ● ● ● ● ● ● ● ● ● ● v qplot(Interest, data=events, color = Group,geom="histogram",binwidth = 0.05)
  • 26. Création de la matrice termes / documents pour tout le corpus data <- Corpus(VectorSource(events$Description)) ● meta(data,tag = 'Group',type = "local") <- events$Group ● data <- tm_map(data,tolower) ● data <- tm_map(data,stripWhitespace) ● data <- tm_map(data,removePunctuation) ● data <- tm_map(data,removeNumbers) ● data <- tm_map(data,removeWords,stopwords("english")) ● data <- tm_map(data,stemDocument) ● tdm <- TermDocumentMatrix(data)
  • 27. A quoi ressemble une matrice termes / documents ? >tdm ● A term-document matrix (12113 terms, 1293 documents) ● Non-/sparse entries: 77863/15584246 ● Sparsity : 100% ● Maximal term length: 257 ● Weighting : term frequency (tf) ● ● Docs ● Terms 1 2 3 4 5 6 7 8 9 10 ● acera 0 0 0 0 0 0 0 0 0 0 ● acerca 0 0 0 0 0 0 0 0 0 0 ● acf 0 0 0 0 0 0 0 0 0 0 ● achiev 2 0 0 0 0 0 0 0 0 0 ● achteraan 0 0 0 0 0 0 0 0 0 0 ● acid 0 0 0 0 0 0 0 0 0 0 ● acknowledg 0 0 0 0 0 0 0 0 0 0 ● acm 0 0 0 0 0 0 0 0 0 0 ● acompil 0 0 0 0 0 0 0 0 0 0 ● acoust 0 0 0 0 0 0 0 0 0 0 ● acoustician 0 0 0 0 0 0 0 0 0 0
  • 28. Le tour de passe-passe du renard ● Idée : étudier la sur/sous représentation des mots en fonction des groupes d'intérêt => chi2 sur une table de contingence ● library("slam") ● tdmG <- rollup(tdm,MARGIN = 2L,events$Group,sum) #equivalent de la fonction apply pour les matrices creuses ● tdmGl <- removeSparseTerms(tdmG,0.50) ● mattdmGl <- (as.matrix(tdmGl))
  • 29. La table de contingence (mattdmGl)   row.name s (-3.94,-0.289] (-0.289,0.0566] (0.0566,0.368] (0.368,2.52] 1 aber 3 4 3 0 2 abil 2 1 4 5 3 abl 20 10 9 7 4 abstract 20 18 25 23 5 academ 4 11 8 6 6 academi 4 0 1 3 7 academia 2 2 4 4 8 accept 3 2 4 3 9 access 28 22 20 25
  • 30. Le chi2 de Saint Antoine ● res <- chisq.test(mattdmGl)# ce qu'on fait d'habitude ● # Ce qu'on fait pour devenir un saint le temps d'une seconde test <- apply(as.data.frame(res$expected),1,min) expWords <- data.frame(res$residuals[as.vector(test)>5,]) ● Le résultat : negwords <- rownames(expWords[expWords$X..3.94..0.289. >2,]) poswords <- rownames(expWords[expWords$X.0.368.2.52. >2,])
  • 33. Quelques recommandations Préférer plutôt : "How to forecast the use of Hadoop in Google Big Data Analytics" à : "The friday automn hackaton on using julia to handle sql requests in a simulink project"
  • 34. tdmpos <- TermDocumentMatrix(data,list(dictionary = poswords))#un seul n a dictionary res <- findAssocs(tdmpos,poswords[1:64],corlimit = 0.11) keep <- data.frame(lapply(res,length)) keep <- keep[,keep>0] par_init <- par() par(mfrow=c(1,1),cex =0.2) plot(tdmpos, names(keep), corThreshold=0.11,weighting = T)
  • 35. Acte 3 : la prise de Coeur de Pigeon où l'on apprend que les sentiments sont plus forts que les mots...
  • 36. Ya pas que les grands qui s'aiment ! ● Sentiment analysis : Sentiment analysis (also known as opinion mining) refers to the use of natural language processing, text analysis and computational linguistics to identify and extract subjective information in source materials. (wikipédia) ● Par exemple : – Caractere positif/négatif du discours – Identification d'émotions (colère, surprise, joie, etc.)
  • 37. La prise de Coeur de Lion ● Objectif : étudier l'influence de l'émotion dominante du discours sur la participation à un événement ● Armes : – library("indicoio")
  • 38. Calcul de l'indice emotionnel du discours ● ###Sentiment analysis ● sent_score <- vector(mode ="numeric",length = length(events$Description)) ● for (i in 1:length(events$Description)) ● {sent_score[i] <- tryCatch(sentiment(events$Description[i]), error = function(e) NA)} ● events$Sentiment <- sent_score
  • 40. Pour être bien sûr ● cor.test(events$Sentiment,events$logUsers) ● Pearson's product-moment correlation ● data: events$Sentiment and events$logUsers ● t = 11.4256, df = 1264, p-value < 2.2e-16 ● alternative hypothesis: true correlation is not equal to 0 ● 95 percent confidence interval: ● 0.2551659 0.3550679 ● sample estimates: ● cor 0.3059589
  • 41. La tentation de Satan ou l'on cède à l'envie de tout mettre dans un seul modèle deux minutes avant la présentation juste pour voir...
  • 43. Conclusion : le Graal où l'on apprend que l'essentiel n'est pas dans lactel...
  • 44.
  • 45.
  • 46. Un grand merci à Timeri et François pour l'organisation et le maintien de ce beau Meetup !!