Mercurial > hg > nsaunier > 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: |
