Cet après midi, sur le site de 60 millions de consommateurs, Lionel Maugain revenait sur les stations services qui avaient de très fortes variations de prix pendant les jours de pénurie.
En utilisant la base des prix des carburants à la pompe, téléchargeable sur http://www.prix-carburants.economie.gouv.fr/, il est possible de visualiser ces fortes variations de prix. Pour lire la base, rien de plus simple
> rm(list=ls()) > annee=year=2016 > fichier="PrixCarburants_annuel_2016.xml" > library(plyr) > library(XML) > library(lubridate) > l=xmlToList(fichier)
Ensuite, on transforme la grosse liste en une série temporelle, à l’aide de la fonction suivante
> time_series=function(no,type_gas="Gazole"){ + prix=list() + date=list() + nom=list() + j=0 + for(i in 1:length(l[[no]])){ + v=names(l[[no]]) + if(!is.null(v[i])){ + if(v[i]=="prix"){ + j=j+1 + date[[j]]=as.character(l[[no]][[i]]["maj"]) + prix[[j]]=as.character(l[[no]][[i]]["valeur"]) + nom[[j]]=as.character(l[[no]][[i]]["nom"]) + }} + } + id=which(unlist(nom)==type_gas) + n=length(id) + jour=function(j) as.Date(substr(date[[id[j]]],1,10),"%Y-%m-%d") + jour_heure=function(j) as.POSIXct(substr(date[[id[j]]],1,19), format = "%Y-%m-%d %H:%M:%S", tz = "UTC") + ext_y=function(j) substr(date[[id[j]]],1,4) + ext_m=function(j) substr(date[[id[j]]],6,7) + ext_d=function(j) substr(date[[id[j]]],9,10) + ext_h=function(j) substr(date[[id[j]]],12,13) + ext_mn=function(j) substr(date[[id[j]]],15,16) + prix_essence=function(i) as.numeric(prix[[id[i]]])/1000 + base1=data.frame(indice=no, + id=l[[no]]$.attrs["id"], + adresse=l[[no]]$adresse, + ville=l[[no]]$ville, + lat=as.numeric(l[[no]]$.attrs["latitude"]) /100000, + lon=as.numeric(l[[no]]$.attrs["longitude"]) /100000, + cp=l[[no]]$.attrs["cp"], + saufjour=l[[no]]$ouverture["saufjour"], + Y=unlist(lapply(1:n,ext_y)), + M=unlist(lapply(1:n,ext_m)), + D=unlist(lapply(1:n,ext_d)), + H=unlist(lapply(1:n,ext_h)), + MN=unlist(lapply(1:n,ext_mn)), + prix=unlist(lapply(1:n,prix_essence))) + base1=base1[!is.na(base1$prix),] + date_d=paste(year,"-01-01 12:00:00",sep="") + date_f=paste(year,"-06-01 12:00:00",sep="") + vecteur_date=seq(as.POSIXct(date_d, format = + "%Y-%m-%d %H:%M:%S"), + as.POSIXct(date_f, format = + "%Y-%m-%d %H:%M:%S"),by="days") + date=paste(base1$Y,"-",base1$M,"-",base1$D, + " ",base1$H,":",base1$MN,":00",sep="") + date_base=as.POSIXct(date, format = + "%Y-%m-%d %H:%M:%S", tz = "UTC") + idx=function(t) sum(vecteur_date[t]>=date_base) + vect_idx=Vectorize(idx)(1:length(vecteur_date)) + P=c(NA,base1$prix) + vp=P[1+vect_idx] + vp=vp*100/(vp[!is.na(vp)][1]) + base2=ts(vp,start=year,frequency=365) + list(base=base1,ts=base2) + }
Dans l’article, la plus forte variation a été observée à Sevran. Pour récupérer la liste des stations services, on utilise
> ville=list() > for(no in 1:length(l)) ville[[no]]=l[[no]]$ville > ville=unlist(ville) > idx=which(ville=="Sevran")
Pour la première station, l’évolution du prix est relativement modérée
> plot(time_series(idx[1])$ts,col="red",type="l") > abline(h=100,lty=2)
Même si le prix semble avoir augmenté de 5% pendant les dernières semaines. Mais ce n’est effectivement rien en comparaison de l’autre station,
> plot(time_series(idx[2])$ts,col="red",type="l") > abline(h=100,lty=2)
avec un prix qui a augmenté de 50% en 2 mois, et presque 30% en quelques jours.
A Villeneuve-d’Asq, on retrouve un comportement similaire, mais moins important
> idx=which(ville=="Villeneuve-d'Ascq") > plot(time_series(idx[3])$ts,col="red",type="l") > abline(h=100,lty=2)