En juillet 2010, le Canard Enchaîné évoquait, en première page, les drôles de guerres de Nicolas Sarkozy. L’article notait que le Président de la République Française avait tendance à voir des guerres partout. N’ayant pas les outils d’archivage suffisant pour creuser, je me suis dis qu’il serait toutefois assez facile de voir si le Président de la République utilise souvent cette rhétorique guerrière dans ses discours. Un peu dans le même esprit qu’un vieux billet montrant que l’on peut reconnaître le Président au travers du discours de fin d’année.
On peut aller sur la page http://www.elysee.fr/ pour trouver des liens vers tous les discours du président, que l’on va scanner, et parcourir,
elysee=scan( "http://www.elysee.fr/president/les-actualites/ discours/discours.18.html", what="character") which(elysee=="id=\"mainContent\">") nl=nchar("/president/les-actualites/discours/") n=pmin(nchar(elysee),nl) L=which(substr(elysee,1,n)== "/president/les-actualites/discours/") LIST=elysee[L] ULIST=unique(LIST) ULIST=ULIST[-length(ULIST)] ULIST=strsplit(ULIST, '\'>') pages=unlist(ULIST) pages=pages[substr(pages,1,4)=="/pre"]
Ensuite, on va balayer toutes les pages de discours, et extraire les mots. La difficulté est d’identifier le discours, i.e. le début et la fin. Pour le début, je cherche les messieurs et les mesdames, voire les altesses et autre majestés. Dans un discours, je cherche un lieu car le discours ne commence pas par une interpellation, comme les autres. Quant à la fin, je cherche les vive et les merci. Là encore, il y a un discours qui ne fini pas. Je cherche alors un lien vers la biographie du président. Après, on cherche la date, souvent avant le début du discours.
longueur=0 DATEDISCOURS=rep(NA,length(pages)) for(i in 1:length(pages)){ discours=scan(paste("http://www.elysee.fr", pages[i],sep=""),what="character") if(length(discours)!=longueur){ (indice1=which(discours%in%c("Mesdames,","Mesdames","chers", "Madame","Monsieur","Messieurs","Majesté,","Altesse,","L'Ile"))) (indice2=which(discours%in%c("Vive","remercie."))) (indice3=which(discours== "href='/president/la-presidence/le-president-de-la-republique/ nicolas-sarkozy-biographie/nicolas-sarkozy- biographie-officielle.482.html'")) if(length(indice2)==0){indice2=indice3[length(indice3)-1]} LD=discours[(indice1[1]+2):(indice2[1]-1)] banir=c("<br","<p>","</p>","/>","--","-",":") sentence=LD[-which(LD%in%banir)] #mots=lower.case(mots) sentence = gsub('[[:punct:]]', '', sentence) sentence = gsub('[[:cntrl:]]', '', sentence) sentence = gsub('\\d+', '', sentence) #sentence = lower.case(sentence) sentence = tolower(sentence) word.list = strsplit(sentence, '\\s+') words = unlist(word.list) sdate=discours[indice1[1]+((-200):1)] isd=which(sdate%in%c("Lundi","Mardi","Mercredi","Jeudi", "Vendredi","Samedi","Dimanche")) MOIS=c("janvier","février","mars","avril","mai","juin", "juillet","août","septembre","octobre","novembre","décembre") mois=which(MOIS==sdate[isd+2]) date=paste(mois,"-",substr(sdate[isd+3],1,4),sep="") if(length(mois)==0){date="99-9999"} if(length(mois)>0){if(mois<10){date=paste("0",mois,"-", substr(sdate[isd+3],1,4),sep="")}} print(paste(i," --- ",date," ----- ",length(words))) write.table(words,paste("/home/discours/discours",i,".txt",sep="")) DATEDISCOURS[i]=date} longueur=length(discours) }
La stratégie est de stocker les listes de mots, discours par discours, dans des fichiers séparés. On va ensuite aller balayer ces fichiers, à la recherche de mots intéressants. C’est ce que fait la petite fonction suivante
DATEDISCOURS0=DATEDISCOURS for(i in 1:length(DATEDISCOURS0)){ if(is.na(DATEDISCOURS0[i])){ DATEDISCOURS0[i]=DATEDISCOURS0[i=1]} if(DATEDISCOURS0[i]=="-9900"){ DATEDISCOURS0[i]=DATEDISCOURS0[i=1]} } comptage=function(MOT="devoir",normalise=TRUE){ DATES=paste(rep(c(paste("0",1:9,sep=""), 10:12),6),rep(2007:2012,each=12),sep="-") COMPTE=rep(0,length(DATES)) COMPTENorm=COMPTE Li=(1:length(pages))[-133] for(i in Li){ if(is.na(DATEDISCOURS[i])==FALSE){ listemots=read.table(paste( "/home/discours/discours",i,".txt",sep="")) COMPTE[DATES==DATEDISCOURS0[i]]= COMPTE[DATES==DATEDISCOURS0[i]]+ sum(listemots==MOT) COMPTENorm[DATES==DATEDISCOURS0[i]]= COMPTENorm[DATES==DATEDISCOURS0[i]]+ sum(listemots=="le")+sum(listemots=="la")+ sum(listemots=="une")+sum(listemots=="un") } } if(normalise==FALSE){ plot(seq(2007+1/24,2012+11/24,by=1/12), COMPTE[1:66],type="s",col="red",xlab="", ylab="",axes=FALSE); axis(1);axis(2);title(MOT)} if(normalise==TRUE){ ratio=COMPTE[1:66]/COMPTENorm[1:66]* mean(COMPTENorm[1:66]) ratio[is.nan(ratio)]=NA plot(seq(2007+1/24,2012+11/24,by=1/12), COMPTE[1:66]/COMPTENorm[1:66]*mean( COMPTENorm[1:66]),type="p",col="red",xlab="", ylab="",axes=FALSE); axis(1);axis(2);title(MOT) tp=seq(2007+1/24,2012+11/24,by=1/12) reg=lm(ratio~bs(tp,7)) lines(seq(2007+15/24,2012+3/24,by=1/24), predict(reg,newdata=data.frame(tp= seq(2007+15/24,2012+3/24,by=1/24)))) }}
Comme il n’y a pas des discours toutes les semaines, on peut normaliser le comptage. Pour ça, je compare avec un comptage de mots basiques, comme le, la, une ou un. Pour revenir à la question qui nous intéressait au début de ce billet,
comptage("guerre")

C’est un mot important, visiblement, qui a eu son heure de gloire fin 2007, que l’on retrouve ponctuellement depuis, et qui semble être revenu dans la bouche du Président au cours des derniers mois. Par comparaison, la justice est à peine plus évoquée, et semble en perte de vitesse depuis quelques années
comptage("justice")

On peut noter que la sécurité,
comptage("sécurité")

ou la police
comptage("police")

ont eu leur heure de gloire au milieu du quinquennat. Parmi les mots qui ont gardé une importance constante, mais à peine plus présent que la guerre, il y a le travail,
comptage("travail")

alors que la santé peine, mais remonte depuis quelques mois,
comptage("santé")

Cela dit, le Président veut que l’on soit heureux,
comptage("heureux")

même si cela reste globalement assez faible. Ou bien il nous dit qu’il est heureux. Parce qu’avec mon comptage je ne sais pas trop de qui il parle dans ses discours… Enfin… si, on le sait de qui il parle…
comptage("je")

Just imagine that your kids need some help, to prepare fishes for April 1st, like








soit stationnaire, de moyenne
. Alors en prenant l’espérance de part et d’autre dans l’expression précédente,
, i.e.
, ou
. Plus généralement, avec un ARMA,
, en prenant la encore l’espérance des deux cotés, on en déduit
.



(afin de se débarrasser de cette tendance). Alors


ou encore
suit alors un processus ARIMA(1,1,0) sans constante cette fois.
avec



dans le modèle de
. Mais il faut des hypothèses complémentaires pour que cette relation soit vraie. Le fait que
existe par exemple ne suffit pas ! (je laisse les amateurs de résultats contre-intuitifs le temps de réfléchir à cette affirmation)
, conditionnellement à
, suive une loi normale centrée, d’écart-type
,
quelle que soit la loi de
. Mais si la loi de 
on, d’un autre côté, c’est très lié à la définition de l’espérance conditionnelle retenue. En l’occurrence, j’utilisais l’espérance de la loi conditionnelle. Mais je ferais peut être un billet un jour sur les diverses constructions de l’espérance conditionnelle.
(qui vont correspondre aux durées entre sauts), et éventuellement aussi des amplitudes de sauts (e.g. des pertes qui suivent des lois exponentielles). On a ici
. On commence par générer
en notant que
sont Gaussiens (centrés et de variance
) et indépendants les uns des autres. Quant aux durées entre sauts, les
. Voilà le code qui permet de générer les trois composantes,

est la date où survient le
ième saut,
, alors conditionnellement au fait que
, les variables
correspondent aux statistiques d’ordres de
, i.e.
,
)













intégrable, alors pour tout
et
,
. La conséquence de cette propriété (qui est juste) est que
dès lors que la transformation n’est pas linéaire (ou au moins, il n’y a aucune raison pour qu’il y ait égalité).
(définies sur le même espace),
, pour tout
, et que l’on simule les couples
, alors

sera grande. Donc effectivement, l’approximation pourrait être relativement mauvaise si on est sur des couples présentant une forte dépendance.





de voter pour A, sachant que l’on a alors une probabilité
pour qu’une personne prise au hasard ne vote par pour A. Sur
personnes interrogées, le nombre de personnes qui déclarera voter pour A est
, qui suit une loi binomiale de paramètres 
, i.e.
,
désigne la fonction quantile de la loi normale centrée réduite; ou encore, en remplaçant les quantités inconnues par des estimateurs,





alors la loi a posteriori, sachant que sur 

















