a few fixes
[talweg.git] / Etude_En_Cours_R_E_bis.R
CommitLineData
d2ab47a7
BA
1setwd("/Users/bp/Desktop/CONTRATS_AirNormand/2016/RapportFinalBruno")
2rm(list=ls())
3
4# Lecture des données
5pm = read.table("DATA/mesures_horaires_hloc_pm10_a_filer.csv",sep=";",dec=".",header=T) #,row.names=1)
6n = dim(pm)[1]
7datedebut = "10/12/2008"
8
9# Chargement des données météo et indicateurs
10VarExp <- read.table("DATA/meteo_extra_jourMois.csv",sep=";",dec=".",header=T)
11VarExp <- VarExp[-1,]
12
13# Lecture des dates
14dates = read.table("DATA/Dates_jours.csv",header=F,as.is=T)
15dates = dates[,1]
16
17# Contruction des matrices de données
18pm.h <- matrix(pm[,2],ncol=24,byrow=TRUE)
19
20Nlignes = nrow(pm.h)
21Data = cbind(pm.h[1:(Nlignes -1), ], pm.h[2:Nlignes, ])
22dates2 = dates[2:Nlignes]
23rownames(Data) = dates2
24# df contient l'ensemble des données.
25#df <- cbind(Data,varexp[,-1])
26df <- Data
27PMjour <- apply(df[,25:48],1,mean,na.rm=T)
28dfexp <- cbind(VarExp,PMjour)
29
30Dates = c(
31"16/03/2015",
32"19/01/2015",
33"27/04/2015")
34
35Categorie = c("Epandage", "Chauffage", "Non Polluée")
36
37RepFig = "FIGURES_Etude"
38
39ResDates = NULL
40
41nbvois=10
42j=1 # numéro de semaine
43ij=6 # numéro du jour (0 = lundi)
44
45Err24 = NULL
46ErrPrev = NULL
47Kvois = NULL
48
49for (Hc in 5:24) {
50
51H=24+Hc
52fen=H
53#fen=12 ou 24 ou H
54L = (H-fen+1):H
55
56# Premier conditionnement : mois
57indcond <- dfexp[,"Mois"] == 2 | dfexp[,"Mois"] == 3 | dfexp[,"Mois"] == 4 | dfexp[,"Mois"] == 9 | dfexp[,"Mois"] == 10
58data = df[indcond,]
59varexp = dfexp[indcond,]
60
61nl = (1:nrow(data))[rownames(data)==Dates[j]]
62dateJPrev = rownames(data)[nl+ij]
63dataj = as.numeric(data[nl+ij, 1:48])
64data = data[-(nl + ij), ]
65varexp = varexp[-(nl + ij), ]
66indNA = attr(na.omit(data[, 1:48]),"na.action")
67data = data[-indNA,]
68varexp = varexp[-indNA,]
69
70# Conditionnement : les jours avec PMjour +/- large
71large = 1
72bornes = mean(dataj[25:48])+c(-large,large)
73indcond = varexp[,"PMjour"]>=bornes[1] & varexp[,"PMjour"]<=bornes[2]
74data = data[indcond,]
75varexp = varexp[indcond,]
76
77D = rep(0,nrow(data))
78for (k in 1:nrow(data)) {
79 #D[k] = sqrt(sum((1:H)*(dataj[L] -data[k,L])^2))
80 D[k] = sqrt(sum((dataj[L] -data[k,L])^2))
81}
82ind = order(D)[1:nbvois]
83w = 1/(D[ind]^2)
84w = w/sum(w)
85W = w%o%rep(1,48)
86JourMoy = apply(data[ind, 1:48], 2, mean)
87#JourMoy = apply(W*data[ind, 1:48], 2, sum)
88NomFile = paste("Voisins_Epandage_PMjour_Hc_",Hc,".png",sep="")
89Titre = paste("Jour à prévoir : ",dateJPrev," - ", length(ind)," voisins",sep="")
90#erreur = sqrt(sum((dataj[25:48] - JourMoy[25:48])^2))
91if(Hc==24){erreurPrev=NA}else{erreurPrev = mean(abs(dataj[(H+1):48] - JourMoy[(H+1):48]))}
92erreur24 = mean(abs(dataj[25:48] - JourMoy[25:48]))
93png(NomFile)
94matplot(t(data[ind, 1:48]), type = "l", lwd=1.4, lty=1, col=1:length(ind),
95 cex.axis=1.4, cex.main = 1.7, cex.lab=1.5,
96 xlab="Heures locales", ylab=paste0("PM10 - Erreurs = ",round(erreur24,1)," / ",round(erreurPrev,1)), main=Titre)
97legend("top",rownames(data)[ind],ncol=2,lwd=1.4, lty=1, col=1:length(ind))
98lines(1:48, dataj, lwd=2.5)
99lines(JourMoy, lty = 2, lwd=2)
100abline(v=c(24.5,H+0.5), lty = 2, lwd=1.2)
101xx=dev.off()
102
103
104
105 Err24 = c(Err24, erreur24)
106 ErrPrev = c(ErrPrev, erreurPrev)
107ResDates = cbind(ResDates, rownames(data)[ind])
108}
109
110
111rownames(ResDates) = 1:10
112
113Kvois = NULL
114for (Col in ncol(ResDates):1) {
115K = 0
116for (I in 1:10){
117 for (J in 1:10){
118 if (ResDates[I,1] == ResDates[J,Col]) K = K +1
119 }
120}
121Kvois = c(Kvois, K)
122}
123
124# pdf("Erreur_Epandage_PMjour.pdf")
125ymin = min(na.omit(ErrPrev), Err24)
126ymin = min(ymin, Kvois)
127ymax = max(na.omit(ErrPrev), Err24)
128ymax = max(ymax, Kvois)
129plot(5:24,Err24, type = "l", lwd = 2, cex.axis=1.4, cex.lab = 1.5,
130 ylab = "MAE",xlab = "Heures de prévision", ylim= c(ymin,ymax))
131lines(5:24,ErrPrev, lwd=2, lty = 2)
132legend("topright", legend=c("Erreur 24h", "Erreur prévision"), lty = c(1,2), lwd=2, cex=1.5)
133points(5:24, Kvois, cex=1.8, pch = 19)
134# xx = dev.off()
135
136length(D)