Bonjour amis R-addicts,
Nous vous proposons de nous retrouver tous
ensemble le jeudi 2 Avril autour de victuailles pour
co...
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ço...
Historique
● 21 mars 2013 : naissance du Meetup R-Addict
● 3 avril 2014 : premier anniversaire
– Présentation mémorable su...
Qui suis-je ?
● Barthélémy-François
● Arrière^36 petit-fils de
Charlemagne
● Docteur ès Sciences
Cognitives de l'Universit...
La Grande Queste du Nombre
de Participants
● Objectif :
A partir des données collectées sur les différents meetups R dans ...
Les données
● load(url("http://francoisguillem.fr/data/events.rda"))
> attributes(events)
$names
[1] "Id" "Title" "Date" "...
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
participant...
Qu'est-ce que le temps ?
● events$Date <- as.Date(events$Date) #comme ça c'est clair..
## Calcul du temps entre l'évènemen...
L'assaut de la grotte du temps
● Objectif : étudier l'évolution du nombre de
participants aux évènements en fonction de la...
Qu'est-ce que le temps ?
● events$Date <- as.Date(events$Date) #comme ça c'est clair..
● ## Calcul du temps entre l'évènem...
Qu'est-ce que le temps ?
● events$Date <- as.Date(events$Date) #comme ça c'est clair..
● ## Calcul du délais depuis le déb...
Qu'est-ce que le temps ?
● events$Date <- as.Date(events$Date) #comme ça c'est clair..
● ## Calcul du délais depuis le déb...
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"...
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...
Unstructured Data & Semantic Analysis: A Behind-the-Scenes Look
Jessica Williamson
Do you understand semantic analysis? Do...
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 ...
Calcul d'un score de succès
● Préliminaire : calculer un score d'intérêt
res <- ddply(events,.(Id),.fun = function(x)
{dat...
Constitution de groupes
summary(events$Interest)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
-3.93800 -0.28940 0.05662 0.00...
Création de la matrice termes /
documents pour tout le corpus
data <- Corpus(VectorSource(events$Description))
● meta(data...
A quoi ressemble une matrice
termes / documents ?
>tdm
● A term-document matrix (12113 terms, 1293 documents)
● Non-/spars...
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 =>...
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
...
Le chi2 de Saint Antoine
● res <- chisq.test(mattdmGl)# ce qu'on fait d'habitude
● # Ce qu'on fait pour devenir un saint l...
cols<-colorRampPalette(c("green","red"))(30)
wordcloud(poswords,10*expWords$X.0.368.2.52.[expWords$X.0.368.2.52.>2], max.w...
cols<-colorRampPalette(c("green","blue"))(30)
wordcloud(negwords,10*expWords$X..3.94..0.289.[expWords$X..3.94..0.289.>2], ...
Quelques recommandations
Préférer plutôt :
"How to forecast the use of Hadoop in Google
Big Data Analytics"
à :
"The frida...
tdmpos <- TermDocumentMatrix(data,list(dictionary = poswords))#un seul n a dictionary
res <- findAssocs(tdmpos,poswords[1:...
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 th...
La prise de Coeur de Lion
● Objectif : étudier l'influence de l'émotion
dominante du discours sur la participation à un
év...
Calcul de l'indice emotionnel du
discours
● ###Sentiment analysis
● sent_score <- vector(mode ="numeric",length =
length(e...
plot(events$Sentiment,events$logUsers)
Pour être bien sûr
● cor.test(events$Sentiment,events$logUsers)
● Pearson's product-moment correlation
● data: events$Sent...
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
p...
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 !!
20150402  meetup r addicts du printemps
20150402  meetup r addicts du printemps
20150402  meetup r addicts du printemps
20150402  meetup r addicts du printemps
Prochain SlideShare
Chargement dans…5
×

20150402 meetup r addicts du printemps

416 vues

Publié le

Présentation lors du Meetup R Addicts du printemps 2015 sur l'influence des description des évènements meetup sur le succès de la rencontre

Publié dans : Données & analyses
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
416
Sur SlideShare
0
Issues des intégrations
0
Intégrations
4
Actions
Partages
0
Téléchargements
4
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

20150402 meetup r addicts du printemps

  1. 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. 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. 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. 4. 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
  5. 5. 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")
  6. 6. 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 !!
  7. 7. 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 ● ● ● ● ● ● ● ● ● ● ● ● ●
  8. 8. 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...
  9. 9. 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.)
  10. 10. 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")
  11. 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. 12. 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.)
  13. 13. 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.)
  14. 14. Qu'est-ce que le temps ?
  15. 15. 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
  16. 16. La preuve ! qplot(DateFromOnset,UsersFromOnsetLog, facets = ~Id, data = events, geom = "point")
  17. 17. qplot(DateFromOnset,UsersFromOnsetLog, data = events, geom = "smooth")
  18. 18. Acte 2 : le combast du sac de Mots où l'on apprend qu'il ne faut surtout pas prononcer le mot hackaton...
  19. 19. 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")
  20. 20. 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
  21. 21. 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
  22. 22. 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...
  23. 23. 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)
  24. 24. 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)
  25. 25. 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
  26. 26. 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))
  27. 27. 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
  28. 28. 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,])
  29. 29. 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)
  30. 30. 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)
  31. 31. 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"
  32. 32. 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)
  33. 33. Acte 3 : la prise de Coeur de Pigeon où l'on apprend que les sentiments sont plus forts que les mots...
  34. 34. 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.)
  35. 35. 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")
  36. 36. 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
  37. 37. plot(events$Sentiment,events$logUsers)
  38. 38. 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
  39. 39. 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...
  40. 40. Work in progress !!
  41. 41. Conclusion : le Graal où l'on apprend que l'essentiel n'est pas dans lactel...
  42. 42. Un grand merci à Timeri et François pour l'organisation et le maintien de ce beau Meetup !!

×