Tels sont les titres des journaux en ce moment. Comme j’avais sous la main des données météo à Paris, et après avoir analysé les températures, c’est la bonne occasion d’analyse les précipitations à Paris.
Informations sur dans le fichier des données:
EUROPEAN CLIMATE ASSESSMENT & DATASET (ECA&D), file created on 27-04-2016 THESE DATA CAN BE USED FREELY PROVIDED THAT THE FOLLOWING SOURCE IS ACKNOWLEDGED:
Klein Tank, A.M.G. and Coauthors, 2002. Daily dataset of 20th-century surface air temperature and precipitation series for the European Climate Assessment. Int. J. of Climatol., 22, 1441-1453. Data and metadata available at http://www.ecad.eu
FILE FORMAT (MISSING VALUE CODE IS -9999):
01-06 SOUID: Source identifier 08-15 DATE : Date YYYYMMDD 17-21 RR : daily Precipitation amount in 0.1 mm 23-27 Q_RR : quality code for RR (0=‘valid’; 1=‘suspect’; 9=‘missing’)
This is the blended series of station FRANCE, PARIS-14E PARC MONTSOURIS (STAID: 38). Blended and updated with sources: 104968 118006 907149 907156 See file sources.txt and stations.txt for more info.
De nombreux packages sont disponibles sous R. En particulier, pour la visualisation des données, les packages sont de plus en plus nombreux et performants. Pour cette analyse, ce sera aussi l’occasion de découvrir :
# install.packages("rmarkdown", type = "source")
# install.packages(c("zoo","TTR","forecast","fitdistrplus","ggplot2"))
library(data.table)
#library(zoo)
library(TTR)
#library(forecast)
#library(fitdistrplus)
library(ggplot2)
library(plotly)
library(dygraphs)
library(xts)
#save(data,file="test.RData")
Avant de commencer l’analyse, il est nécessaire de préparer les données:
#### creation ts ####
data=data.table(read.table("RR_STAID000038.txt",sep=",",header=TRUE,skip=19))
table(data$Q_RR)
data=data[Q_RR==0,]
data[,mj:=as.Date(substr(data[,DATE],5,8),"%m%d")]
data[,annee:=as.numeric(substr(data[,DATE],1,4))]
data[,semaine:=as.numeric(format(as.Date(paste0(substr(data[,DATE],7,8),"/",
substr(data[,DATE],5,6),"/",
substr(data[,DATE],1,4)),"%d/%m/%Y"), "%W"))]
data[,Date:=as.Date(paste0(substr(data[,DATE],7,8),"/",
substr(data[,DATE],5,6),"/",
substr(data[,DATE],1,4)),"%d/%m/%Y")]
data[,t:=ifelse(RR==0,0,1)]
Grâce à dygraphs, vous pouvez:
ts=xts(data$RR,order.by=data$Date,frequency=365)
dygraph(ts, main = "Précipations à Paris", ylab = "Quantité (0.1mm)") %>%
dyRoller(rollPeriod = 61)%>%
dyOptions(fillGraph = TRUE, fillAlpha = 0.4) %>%
dyRangeSelector()
On peut ramener toutes les données sur une année (en supposant qu’il y a une certaine saisonalité dans les données).
par_jour=data[,.(.N,m=mean(RR),nj=mean(t),
q60=quantile(RR,probs = 0.6),
q70=quantile(RR,probs = 0.7),
q80=quantile(RR,probs = 0.8),
q90=quantile(RR,probs = 0.9),
q95=quantile(RR,probs = 0.95)),by=mj]
par_jour=par_jour[order(mj),]
La période de calcul de moyenne peut être changé dans la case en bas à gauche du grahpique. En lissant avec 30 jours, on peut voir que la période de début fin représent un pic annuel en terme de précipitations.
par_jour_ts=xts(par_jour$m,order=par_jour$mj,frequency=1)
dygraph(par_jour_ts, main = "Précipitations dans une année à Paris", ylab = "Quantité (0.1mm)") %>%
dyRoller(rollPeriod = 7)%>%
dyOptions(fillGraph = TRUE, fillAlpha = 0.4)
On peut également afficher plus d’informations, avec quelques quantiles intéressants. On peut constater que pur les quantiles inférieurs à 50% sont très souvent nuls.
par_jour_ts=xts(par_jour[,c("m","q60","q70","q80","q90"),with=F],order=par_jour$mj,frequency=1)
dygraph(par_jour_ts, main = "Précipitations dans une année à Paris", ylab = "Quantité (0.1mm)") %>%
dyRoller(rollPeriod = 7)%>%
dyOptions(fillGraph = TRUE, fillAlpha = 0.4)
Les quantitités de précipitations ont été moyennées, pour jours de pluie et les jours de beau temps. Afin d’analyse de façon un peu plus précise, on peut d’abord calculer une probabilité de précipitations; ensuite en cas de pluie, analyser la distribution des précipitations.
La probabilité de beau temps est variable au cours de l’année.
Ainsi, cela veut dire que pendant Roland Garros, il y a un jour sur deux, la précipitation journalière n’est pas nulle.
par_jour_ts=xts(par_jour$nj,order=par_jour$mj,frequency=1)
dygraph(par_jour_ts, main = "Précipitations dans une année à Paris", ylab = "Quantité (0.1mm)") %>%
dyRoller(rollPeriod = 7)%>%
dyOptions(fillGraph = TRUE, fillAlpha = 0.4)
Plus précisément, on peut visualiser la répartition du nombre de jours de pluie sur les deux semaines de Roland Garros. Je ne sais pas si les numéros de semaines sont toujours les mêmes pour Roland Garros. Cette année, ce sont les numéros 21 et 22. Pour avoir un peu plus de données, j’ai pris 4 semaines.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 4.625 6.500 6.200 7.500 12.000
Selon l’analyse des nombres de jours de pluie, on peut voir qu’on a une chance sur deux d’avoir de la pluie pendant Roland Garros. Maintenant, on doit également analyser la quantité de pluie. En effet, s’il y a juste quelques gouttes de pluie en présence d’un grand soleil, cela ne peut qu’ajouter du charme à Roland Garros. Aussi, les précipitations sont mesurées sur 24h, on ne pourra pas mesurer précisément les probabilités d’annulation.
On peut aussi afficher les quantiles :
## 0% 5% 10% 15% 20% 25% 30% 35% 40% 45% 50% 55%
## 1.0 1.0 2.0 3.0 5.0 6.0 8.0 12.0 15.0 18.0 22.5 27.0
## 60% 65% 70% 75% 80% 85% 90% 95% 100%
## 33.0 40.0 48.0 58.0 70.0 86.0 114.0 163.9 682.0
On peut voir que ce sont en général de petites pluies. Il est difficile de quantifier le seuil pour lequel les matchs doivent être annulés. Pour mardi dernier, il y a un match de 2 heures et DEUX MINUTES, pour une quantité de 8,4mm de pluie.
On peut comparer la densité pendant Roland Garros à d’autres périodes. On peut voir que les pluies pendant Roland Garros sont relativement plus grosses que les périodes d’hiver.
De façon approximative, on peut dire que la probabilité d’annulation est de 4,5%. Ainsi, sur 14 jours, la probabilité de ne pas avoir d’annulations est de 52%, ce qui fait 48% de chance d’avoir au moins un jour d’annulé.
(1-0.045)^14
## [1] 0.5248645
Il est temps de couvrir de Roland Garros !