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
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)
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)
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)
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)
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)]
mots | Freq |
---|---|
manifestants | 9 |
mariage | 8 |
mediapart | 8 |
france | 7 |
hollande | 7 |
journalistes | 6 |
plus | 6 |
contre | 5 |
gouvernement | 5 |
crs | 4 |
Le figaro
print(xtable(head(mots.t, 10), caption = "Top 10 des mots"),
include.rownames = FALSE, type = "html")
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)
Le Monde
print(xtable(head(mots.t, 10), caption = "Top 10 des mots"),
include.rownames = FALSE, type = "html")
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)
Le parisien
mots | Freq |
---|---|
paris | 11 |
psg | 7 |
ans | 6 |
france | 6 |
gouvernement | 6 |
morts | 6 |
plus | 6 |
chine | 5 |
contre | 5 |
corse | 5 |
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)
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")
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)
En fait, on a encore parlé du mariage gay. A suivre la semaine prochaine…
No comments:
Post a Comment