About Me

My photo
Just wasting time sharing knowledge about, Big Data and Analytics

Apr 28, 2013

Qu'on dit les médias cette semaine ?: Timeline de TwitteR

On va utiliser les packages twitteR, Worlcoud pour dire à partir de twitter de quoi a parlé la France cette dernière semaine.

On essayera dans un avenir proche de développer un outil de Monitoring qui pourrait synthétiser le contenu des médias en ligne par un nuage de mots.

Récupération des derniers fils

mediapart <- userTimeline(user = "mediapart", n = 200, cainfo = "cacert.pem")
lemonde <- userTimeline(user = "lemondefr", n = 200, cainfo = "cacert.pem")
lefigaro <- userTimeline(user = "Le_Figaro", n = 200, cainfo = "cacert.pem")
leparisien <- userTimeline(user = "le_Parisien", n = 200, cainfo = "cacert.pem")
lepoint <- userTimeline(user = "LePoint", n = 200, cainfo = "cacert.pem")
# En data.frame
mediapart.df <- do.call("rbind", lapply(mediapart, as.data.frame))
lemonde.df <- do.call("rbind", lapply(lemonde, as.data.frame))
lefigaro.df <- do.call("rbind", lapply(lefigaro, as.data.frame))
leparisien.df <- do.call("rbind", lapply(leparisien, as.data.frame))
lepoint.df <- do.call("rbind", lapply(lepoint, as.data.frame))
Media.df <- rbind(mediapart.df, lemonde.df, lefigaro.df, leparisien.df, lepoint.df)

De quoi parle la presse?

mediapart.txt = laply(mediapart, function(t) t$getText())
# En fin de semaine, on parle de
head(mediapart.txt, 3)
## [1] "Pour un cours nouveau ! http://t.co/EVeMUAmgqJ"                                                                        
## [2] "« Les racines de l’apartheid sont les mêmes en Afrique du Sud qu’en Israël » http://t.co/xtKWKFoNF4 #Israël #Palestine"
## [3] "Bernard Henri-Lévy condamné pour diffamation : http://t.co/qfFklVyl3P #BHL via @LMDiplo"
tail(mediapart.txt, 3)
## [1] "De Rocard à Hollande, la galaxie Valls-Cahuzac http://t.co/Tiaio2MeCH"                                                                       
## [2] "Argent sale et eaux usées entre la France et l'Espagne http://t.co/OSiY5wslZr"                                                               
## [3] "RT @PierrePuchot: A denfert peu de Monde encore  Nuée de caméras autour f Barjot, on se croirait a Cannes... Manif pour tous http://t.co/gf…"
lemonde.txt = laply(lemonde, function(t) t$getText())
head(lemonde.txt, 3)
## [1] "Madagascar : 49 candidats à la candidature pour la présidentielle http://t.co/Wq23K4tAqL"                   
## [2] "François Hollande : la résilience pour seule arme http://t.co/nkTt3KcbB0"                                   
## [3] "Bangladesh : après le drame, interrogations sur la présence de sociétés occidentales http://t.co/HD0l7sLxOr"
tail(lemonde.txt, 3)
## [1] "Le patron du Bayern de Munich aurait caché 10 millions d'euros en Suisse http://t.co/1FsjdqILSA"
## [2] "Victoire irlandaise sur la classique Liège-Bastogne-Liège http://t.co/UMsgLmx2Rd"               
## [3] "Cortège des anti-mariage homosexuel à Paris http://t.co/iWxqslFCGM"
lefigaro.txt = laply(lefigaro, function(t) t$getText())
head(lefigaro.txt, 3)
## [1] "Alger s'interroge sur l'avenir de Bouteflika http://t.co/wCNMXE5yN2"
## [2] "Hollande va solder l'affaire des «pigeons» http://t.co/QWaGbiA3TO"  
## [3] "Obama se prête au rituel de l'autodérision http://t.co/JdotQCKiG3"
tail(lefigaro.txt, 3)
## [1] "«Quel honneur d'être traité de con par des imbéciles !» http://t.co/l8Lq5f06X0"                                                                
## [2] "RT @SamuelPotier: Yves Thréard au SM : \"Quel honneur d'être traité de con par des imbéciles, des crypto-marxistes, des sadomasos !\" http://…"
## [3] "«Mur des cons» : «Je trouve ça à la fois drôle et inadmissible» http://t.co/tiikBhwufF"
leparisien.txt = laply(leparisien, function(t) t$getText())
head(leparisien.txt, 3)
## [1] "Villeneuve-Saint-Georges : deux blessés dans une fusillade au Bois-Matar http://t.co/XhXexVdnQi"  
## [2] "EN IMAGES. Le «vrai» Dark Vador ravit les fans de Star Wars http://t.co/TRtnn18f9n"               
## [3] "EN DIRECT. Ligue 1, 34e journée : suivez Evian - PSG à partir de 21 heures http://t.co/eToCYrC2C6"
tail(leparisien.txt, 5)
## [1] "Station spatiale : un vaisseau russe menacé de problèmes d'arrimage http://t.co/YQP0Xjd5Bi"                                                  
## [2] "Haute-Saône : un homme meurt en s'immolant dans la rue http://t.co/9dBUcDhr6Y"                                                               
## [3] "EN IMAGES. Gwyneth Paltrow élue plus belle femme du monde http://t.co/lkPTrci42y"                                                            
## [4] "EN IMAGES. Visite impériale pour Hollande en Chine http://t.co/a5t3EgoD4S"                                                                   
## [5] "RT @LeParisien_Auto: Le périphérique fête ses 40 ans. Retour en images sur le chantier de cette ceinture de la capitale http://t.co/hFBuHDK…"

Qui est le plus actif?

Media.df$date <- as.Date(Media.df$created)
ParJour <- as.data.frame(table(Media.df$date, Media.df$screenName))
colnames(ParJour) <- c("date", "media", "tweets")
p = ggplot(ParJour, aes(x = tweets, fill = media)) + geom_density(alpha = 0.3) + ggtitle("Quel média est le plus actif?")
p

plot of chunk unnamed-chunk-4

Activité des médias par périodes

mediapart.df$date <- as.Date(mediapart.df$created)
ParJour <- as.data.frame(table(mediapart.df$date))
colnames(ParJour) <- c("date", "tweets")
m = ggplot(ParJour) + geom_bar(aes(date, tweets), fill = "salmon4") + theme_bw() + ggtitle("Activité de Mediapart")
lemonde.df$date <- as.Date(lemonde.df$created)
ParJour <- as.data.frame(table(lemonde.df$date))
colnames(ParJour) <- c("date", "tweets")
q = ggplot(ParJour) + geom_bar(aes(date, tweets), fill = "turquoise4") + theme_bw() + ggtitle("Activité du site du monde")
lefigaro.df$date <- as.Date(lefigaro.df$created)
ParJour <- as.data.frame(table(lefigaro.df$date))
colnames(ParJour) <- c("date", "tweets")
w = ggplot(ParJour) + geom_bar(aes(date, tweets), fill = "slateblue2") + theme_bw() + ggtitle("Activité du site du Figaro")
leparisien.df$date <- as.Date(leparisien.df$created)
ParJour <- as.data.frame(table(leparisien.df$date))
colnames(ParJour) <- c("date", "tweets")
z = ggplot(ParJour) + geom_bar(aes(date, tweets), fill = "seashell3") + theme_bw() + ggtitle("Activité du site du Parisien")
print(z)
## Mapping a variable to y and also using stat="bin".  With stat="bin", it
## will attempt to set the y value to the count of cases in each group.  This
## can result in unexpected behavior and will not be allowed in a future
## version of ggplot2.  If you want y to represent counts of cases, use
## stat="bin" and don't map a variable to y.  If you want y to represent
## values in the data, use stat="identity".  See ?geom_bar for examples.
## (Deprecated; last used in version 0.9.2)

plot of chunk unnamed-chunk-5

print(w)
## Mapping a variable to y and also using stat="bin".  With stat="bin", it
## will attempt to set the y value to the count of cases in each group.  This
## can result in unexpected behavior and will not be allowed in a future
## version of ggplot2.  If you want y to represent counts of cases, use
## stat="bin" and don't map a variable to y.  If you want y to represent
## values in the data, use stat="identity".  See ?geom_bar for examples.
## (Deprecated; last used in version 0.9.2)

plot of chunk unnamed-chunk-5

print(q)
## Mapping a variable to y and also using stat="bin".  With stat="bin", it
## will attempt to set the y value to the count of cases in each group.  This
## can result in unexpected behavior and will not be allowed in a future
## version of ggplot2.  If you want y to represent counts of cases, use
## stat="bin" and don't map a variable to y.  If you want y to represent
## values in the data, use stat="identity".  See ?geom_bar for examples.
## (Deprecated; last used in version 0.9.2)

plot of chunk unnamed-chunk-5

print(m)
## Mapping a variable to y and also using stat="bin".  With stat="bin", it
## will attempt to set the y value to the count of cases in each group.  This
## can result in unexpected behavior and will not be allowed in a future
## version of ggplot2.  If you want y to represent counts of cases, use
## stat="bin" and don't map a variable to y.  If you want y to represent
## values in the data, use stat="identity".  See ?geom_bar for examples.
## (Deprecated; last used in version 0.9.2)

plot of chunk unnamed-chunk-5

Quels sont les mots qui reviennent le plus par media ?

Chez Mediapart :

mots <- strsplit(mediapart.df$text, " ")
sw <- c("a", stopwords("fr"))
mots <- lapply(mots, function(x) x[grep("^[A-Za-z0-9]+$", x)])
mots <- unlist(mots)
mots <- tolower(mots)
mots <- mots[-grep("^[rm]t$", mots)]
Top 10 des mots
mots Freq
manifestants 9
mariage 8
mediapart 8
france 7
hollande 7
journalistes 6
plus 6
contre 5
gouvernement 5
crs 4

plot of chunk unnamed-chunk-7

Le figaro

print(xtable(head(mots.t, 10), caption = "Top 10 des mots"), 
    include.rownames = FALSE, type = "html")
Top 10 des mots
mots Freq
france 10
hollande 10
alerte 9
gouvernement 8
paris 8
ans 7
ayrault 6
chine 6
jeu 6
affaire 5
pal <- brewer.pal(9, "Set1")
wordcloud(mots.t$mots, mots.t$Freq, scale = c(6, 0.3), 
    min.freq = 1, max.words = 150, random.order = FALSE, 
    rot.per = 0.3, colors = pal)

plot of chunk unnamed-chunk-9

Le Monde

print(xtable(head(mots.t, 10), caption = "Top 10 des mots"), 
    include.rownames = FALSE, type = "html")
Top 10 des mots
mots Freq
contre 12
a 11
hollande 7
paris 7
1 6
ligue 6
gouvernement 5
syrie 5
attentat 4
massacre 4
pal <- brewer.pal(9, "Pastel1")
wordcloud(mots.t$mots, mots.t$Freq, scale = c(6, 0.3), 
    min.freq = 1, max.words = 150, random.order = FALSE, 
    rot.per = 0.3, colors = pal)

plot of chunk unnamed-chunk-11

Le parisien

Top 10 des mots
mots Freq
paris 11
psg 7
ans 6
france 6
gouvernement 6
morts 6
plus 6
chine 5
contre 5
corse 5

plot of chunk unnamed-chunk-13

Le Point

print(xtable(head(mots.tt, 10), caption = "Top 10 des mots"), 
    include.rownames = FALSE, type = "html")
## Error: objet 'mots.tt' introuvable
pal <- brewer.pal(9, "Paired")
wordcloud(mots.t$mots, mots.t$Freq, scale = c(6, 0.3), 
    min.freq = 1, max.words = 150, random.order = FALSE, 
    rot.per = 0.3, colors = pal)

plot of chunk unnamed-chunk-15

De quoi a t-on parlé au final cette semaine?

print(xtable(head(mots.t, 10), caption = "Top 10 des mots"), 
    include.rownames = FALSE, type = "html")
Top 10 des mots
mots Freq
hollande 35
mariage 30
contre 29
france 28
paris 28
gouvernement 26
plus 25
ans 18
affaire 16
chine 16
pal <- brewer.pal(11, "BrBG")
wordcloud(mots.t$mots, mots.t$Freq, scale = c(7, 0.3), min.freq = 1, 
    max.words = 100, random.order = FALSE, rot.per = 0.3, colors = pal)

plot of chunk unnamed-chunk-17

En fait, on a encore parlé du mariage gay. A suivre la semaine prochaine…

No comments:

Post a Comment

There was an error in this gadget