Mercurial Hosting > traffic-intelligence
comparison python/pavement.py @ 511:ad518f0c3218
merged pulling from main
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Wed, 28 May 2014 17:46:38 -0400 |
parents | 7978b286fcfa |
children | 3058e00887bc |
comparison
equal
deleted
inserted
replaced
510:b0dac840c24f | 511:ad518f0c3218 |
---|---|
13 3: "Alkyde", | 13 3: "Alkyde", |
14 4: "Autre"} | 14 4: "Autre"} |
15 | 15 |
16 durabilities = {1: 98, #96 to 100 | 16 durabilities = {1: 98, #96 to 100 |
17 2: 85, #75 to 96 | 17 2: 85, #75 to 96 |
18 3: 72, #50 to 75 | 18 3: 62, #50 to 75 |
19 4: 32, #15 to 50 | 19 4: 32, #15 to 50 |
20 5: 7 #0 to 15 | 20 5: 7 #0 to 15 |
21 } | 21 } |
22 | 22 |
23 roadFunctionalClasses = {40: "Collectrice", | 23 roadFunctionalClasses = {40: "Collectrice", |
104 | 104 |
105 def winterMaintenanceIndicators(data, startDate, endDate, circuitReference, snowThreshold): | 105 def winterMaintenanceIndicators(data, startDate, endDate, circuitReference, snowThreshold): |
106 '''Computes several winter maintenance indicators | 106 '''Computes several winter maintenance indicators |
107 data = entretien_hivernal = pylab.csv2rec('C:\Users\Alexandre\Documents\Cours\Poly\Projet\mesures_entretien_hivernal\mesures_deneigement.txt', delimiter = ',')''' | 107 data = entretien_hivernal = pylab.csv2rec('C:\Users\Alexandre\Documents\Cours\Poly\Projet\mesures_entretien_hivernal\mesures_deneigement.txt', delimiter = ',')''' |
108 import datetime | 108 import datetime |
109 somme_eau, somme_neige, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, compteur_somme_abrasif = 0,0,0,0,0,0,0,0,0 | 109 somme_eau, somme_neige, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, compteur_premiere_neige, compteur_somme_abrasif = 0,0,0,0,0,0,0,0,0 |
110 | 110 |
111 if circuitReference in data['ref_circuit']: | 111 if circuitReference in data['ref_circuit']: |
112 for i in range(len(data)): | 112 for i in range(len(data)): |
113 if data['ref_circuit'][i] == circuitReference and (data['date'][i] + datetime.timedelta(days = 6)) <= endDate and (data['date'][i] + datetime.timedelta(days = 6)) > startDate: | 113 if data['ref_circuit'][i] == circuitReference and (data['date'][i] + datetime.timedelta(days = 6)) <= endDate and (data['date'][i] + datetime.timedelta(days = 6)) > startDate: |
114 premiere_neige += data['premiere_neige'][i] | 114 compteur_premiere_neige += float(data['premiere_neige'][i]) |
115 somme_neige += float(data['neige'][i]) | 115 somme_neige += float(data['neige'][i]) |
116 somme_eau += float(data['eau'][i]) | 116 somme_eau += float(data['eau'][i]) |
117 somme_abrasif += float(data['abrasif'][i]) | 117 somme_abrasif += float(data['abrasif'][i]) |
118 somme_sel += float(data['sel'][i]) | 118 somme_sel += float(data['sel'][i]) |
119 somme_lc += float(data['lc'][i]) | 119 somme_lc += float(data['lc'][i]) |
120 somme_lrg += float(data['lrg'][i]) | 120 somme_lrg += float(data['lrg'][i]) |
121 somme_lrd += float(data['lrd'][i]) | 121 somme_lrd += float(data['lrd'][i]) |
122 compteur_somme_abrasif += float(data['autre_abrasif_binaire'][i]) | 122 compteur_somme_abrasif += float(data['autre_abrasif_binaire'][i]) |
123 if compteur_premiere_neige >= 1: | |
124 premiere_neige = 1 | |
125 else: | |
126 premiere_neige = 0 | |
123 if compteur_somme_abrasif >= 1: | 127 if compteur_somme_abrasif >= 1: |
124 autres_abrasifs = 1 | 128 autres_abrasifs = 1 |
125 else: | 129 else: |
126 autres_abrasifs = 0 | 130 autres_abrasifs = 0 |
127 if somme_neige < snowThreshold: | 131 if somme_neige < snowThreshold: |
131 else: | 135 else: |
132 somme_eau, somme_neige, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, autres_abrasifs, neigeMTQ_sup_seuil = '','','','','','','','','','' | 136 somme_eau, somme_neige, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, autres_abrasifs, neigeMTQ_sup_seuil = '','','','','','','','','','' |
133 | 137 |
134 return (somme_eau, somme_neige, neigeMTQ_sup_seuil, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, autres_abrasifs) | 138 return (somme_eau, somme_neige, neigeMTQ_sup_seuil, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, autres_abrasifs) |
135 | 139 |
136 def ecWeatherIndicators(data, startDate, endDate, snowThreshold, weatherDatatype, minProportionMeasures = 0.): | 140 def weatherIndicators(data, startDate, endDate, snowThreshold, weatherDatatype, minProportionMeasures = 0.): |
137 '''Computes the indicators from Environment Canada files | 141 '''Computes the indicators from Environment Canada files |
138 (loaded as a recarray using csv2rec in data), | 142 (loaded as a recarray using csv2rec in data), |
139 between start and end dates (datetime.datetime objects) | 143 between start and end dates (datetime.datetime objects) |
140 | 144 |
141 weatherDataType is to indicate Environnement Canada data ('ec') or else MTQ | 145 weatherDataType is to indicate Environnement Canada data ('ec') or else MTQ |
145 compteur,nbre_jours_gel_consecutifs=0,0 | 149 compteur,nbre_jours_gel_consecutifs=0,0 |
146 tmoys = [] | 150 tmoys = [] |
147 seuils_T = [20,15,10,5] | 151 seuils_T = [20,15,10,5] |
148 deltas_T = [0,0,0,0] | 152 deltas_T = [0,0,0,0] |
149 startIndex = find(data['date'] == startDate) | 153 startIndex = find(data['date'] == startDate) |
150 nDays = (endDate - startDate).days+1 | 154 nDays = int((endDate - startDate).days)+1 |
151 if startIndex.size != 0: | 155 if len(startIndex) > 0 and startIndex+nDays <= len(data): |
152 for i in range(startIndex, startIndex+int(nDays)): | 156 startIndex = startIndex[0] |
157 for i in range(startIndex, startIndex+nDays): | |
153 if not np.isnan(data['tmax'][i]): | 158 if not np.isnan(data['tmax'][i]): |
154 tmax = data['tmax'][i] | 159 tmax = data['tmax'][i] |
155 else: | 160 else: |
156 tmax = None | 161 tmax = None |
157 if not np.isnan(data['tmin'][i]): | 162 if not np.isnan(data['tmin'][i]): |
158 tmin = data['tmin'][i] | 163 tmin = data['tmin'][i] |
159 else: | 164 else: |
195 return (nbre_jours_T_negatif,nbre_jours_gel_degel, deltas_T, nbre_jours_gel_consecutifs, pluie_tot, neige_tot, neigeEC_sup_seuil, ecart_type_T) | 200 return (nbre_jours_T_negatif,nbre_jours_gel_degel, deltas_T, nbre_jours_gel_consecutifs, pluie_tot, neige_tot, neigeEC_sup_seuil, ecart_type_T) |
196 else: | 201 else: |
197 return [None]*2+[[None]*len(seuils_T)]+[None]*5 | 202 return [None]*2+[[None]*len(seuils_T)]+[None]*5 |
198 | 203 |
199 def mtqWeatherIndicators(data, startDate, endDate,tmax,tmin,tmoy): | 204 def mtqWeatherIndicators(data, startDate, endDate,tmax,tmin,tmoy): |
205 print("Deprecated, use weatherIndicators") | |
200 from matplotlib.mlab import find | 206 from matplotlib.mlab import find |
201 nbre_jours_T_negatif,nbre_jours_gel_degel,ecart_type_T = 0,0,0 | 207 nbre_jours_T_negatif,nbre_jours_gel_degel,ecart_type_T = 0,0,0 |
202 compteur,nbre_jours_gel_consecutifs=0,0 | 208 compteur,nbre_jours_gel_consecutifs=0,0 |
203 tmoys = [] | 209 tmoys = [] |
204 seuils_T = [20,15,10,5] | 210 seuils_T = [20,15,10,5] |
294 nonZeroIndices = ~np.isnan(self.data[dataLabel]) | 300 nonZeroIndices = ~np.isnan(self.data[dataLabel]) |
295 days = self.data[nonZeroIndices]['jours'] | 301 days = self.data[nonZeroIndices]['jours'] |
296 dates = self.data[nonZeroIndices]['date_mesure'] | 302 dates = self.data[nonZeroIndices]['date_mesure'] |
297 measures = self.data[nonZeroIndices][dataLabel] | 303 measures = self.data[nonZeroIndices][dataLabel] |
298 for i in range(1, len(dates)): | 304 for i in range(1, len(dates)): |
299 nDaysTNegative, nDaysThawFreeze, deltaTemp, nConsecutiveFrozenDays, totalRain, totalSnow, snowAboveThreshold, stdevTemp = ecWeatherIndicators(weatherData, dates[i-1], dates[i], snowThreshold, weatherDataType, minProportionMeasures) | 305 nDaysTNegative, nDaysThawFreeze, deltaTemp, nConsecutiveFrozenDays, totalRain, totalSnow, snowAboveThreshold, stdevTemp = weatherIndicators(weatherData, dates[i-1], dates[i], snowThreshold, weatherDataType, minProportionMeasures) |
300 if dates[i-1].year+1 == dates[i].year: | 306 if dates[i-1].year+1 == dates[i].year: |
301 winter = 1 | 307 winter = 1 |
302 if days[i-1]<365: | 308 if days[i-1]<365: |
303 firstWinter = 1 | 309 firstWinter = 1 |
304 else: | 310 else: |