comparison python/pavement.py @ 457:95a8eb38d9a2

update to weather function
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Wed, 19 Feb 2014 16:33:49 -0500
parents 825e5d49325d
children 28ff95845c65
comparison
equal deleted inserted replaced
456:825e5d49325d 457:95a8eb38d9a2
138 else: 138 else:
139 somme_eau, somme_neige, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, autres_abrasifs, neigeMTQ_sup_seuil = '','','','','','','','','','' 139 somme_eau, somme_neige, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, autres_abrasifs, neigeMTQ_sup_seuil = '','','','','','','','','',''
140 140
141 return (somme_eau, somme_neige, neigeMTQ_sup_seuil, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, autres_abrasifs) 141 return (somme_eau, somme_neige, neigeMTQ_sup_seuil, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, autres_abrasifs)
142 142
143 def ecWeatherIndicators(data, startDate, endDate, snowThreshold, minProportionMeasures = 0.): 143 def ecWeatherIndicators(data, startDate, endDate, snowThreshold, datatype, minProportionMeasures = 0.):
144 '''Computes the indicators from Environment Canada files 144 '''Computes the indicators from Environment Canada files
145 (loaded as a recarray using csv2rec in data), 145 (loaded as a recarray using csv2rec in data),
146 between start and end dates (datetime.datetime objects) 146 between start and end dates (datetime.datetime objects)
147 147
148 dataType is to indicate Environnement Canada data ('ec') or else MTQ
148 minProportionMeasures is proportion of measures necessary to consider the indicators''' 149 minProportionMeasures is proportion of measures necessary to consider the indicators'''
149 from matplotlib.mlab import find 150 from matplotlib.mlab import find
150 nbre_jours_T_negatif,nbre_jours_gel_degel,pluie_tot,neige_tot,ecart_type_T = 0,0,0,0,0 151 nbre_jours_T_negatif,nbre_jours_gel_degel,pluie_tot,neige_tot,ecart_type_T = 0,0,0,0,0
151 compteur,nbre_jours_gel_consecutifs=0,0 152 compteur,nbre_jours_gel_consecutifs=0,0
152 tmoys = [] 153 tmoys = []
154 deltas_T = [0,0,0,0] 155 deltas_T = [0,0,0,0]
155 startIndex = find(data['date'] == startDate) 156 startIndex = find(data['date'] == startDate)
156 nDays = (endDate - startDate).days+1 157 nDays = (endDate - startDate).days+1
157 if startIndex.size != 0: 158 if startIndex.size != 0:
158 for i in range(startIndex, startIndex+int(nDays)): 159 for i in range(startIndex, startIndex+int(nDays)):
159 if data['tmax'][i] != '' and data['tmax'][i] != None: 160 if not np.isnan(data['tmax'][i]):
160 tmax = float(data['tmax'][i].replace(',','.')) 161 tmax = data['tmax'][i]
161 else: 162 else:
162 tmax = None 163 tmax = None
163 if data['tmin'][i] != '' and data['tmin'][i] != None: 164 if not np.isnan(data['tmin'][i]):
164 tmin = float(data['tmin'][i].replace(',','.')) 165 tmin = data['tmin'][i]
165 if data['pluie_tot'][i] != '' and data['pluie_tot'][i] != None: 166 else:
166 pluie_tot += float(data['pluie_tot'][i].replace(',','.')) 167 tmin = None
167 if data['neige_tot'][i] != '' and data['neige_tot'][i] != None: 168 if datatype == 'ec':
168 neige_tot += float(data['neige_tot'][i].replace(',','.')) 169 if data['pluie_tot'][i] != None and not np.isnan(data['pluie_tot'][i]):
170 pluie_tot += data['pluie_tot'][i]
171 if data['neige_tot'][i] != None and not np.isnan(data['neige_tot'][i]):
172 neige_tot += data['neige_tot'][i]
169 if tmax != None: 173 if tmax != None:
170 if tmax < 0: 174 if tmax < 0:
171 nbre_jours_T_negatif += 1 175 nbre_jours_T_negatif += 1
172 if tmax != None and data['tmin'][i] != '' and data['tmin'][i] != None: 176 if tmax != None and tmin != None:
173 if tmax > 0 and tmin < 0: 177 if tmax > 0 and tmin < 0:
174 nbre_jours_gel_degel += 1 178 nbre_jours_gel_degel += 1
175 for l in range(len(seuils_T)): 179 for l in range(len(seuils_T)):
176 if tmax - tmin >=seuils_T[l]: 180 if tmax - tmin >=seuils_T[l]:
177 deltas_T[l] += 1 181 deltas_T[l] += 1
178 if data['tmoy'][i] != '' and data['tmoy'][i] != None: 182 if not np.isnan(data['tmoy'][i]):
179 tmoys.append(float(data['tmoy'][i].replace(',','.'))) 183 tmoys.append(data['tmoy'][i])
180 if tmax != None: 184 if tmax != None:
181 if tmax < 0: 185 if tmax < 0:
182 compteur += 1 186 compteur += 1
183 elif tmax >= 0 and compteur >= nbre_jours_gel_consecutifs: 187 elif tmax >= 0 and compteur >= nbre_jours_gel_consecutifs:
184 nbre_jours_gel_consecutifs = compteur 188 nbre_jours_gel_consecutifs = compteur
185 compteur = 0 189 compteur = 0
186 else: 190 else:
187 compteur = 0 191 compteur = 0
188 nbre_jours_gel_consecutifs = max(nbre_jours_gel_consecutifs,compteur) 192 nbre_jours_gel_consecutifs = max(nbre_jours_gel_consecutifs,compteur)
189 if float(len(tmoys))/nDays >= minProportionMeasures: 193 if len(tmoys) > 0 and float(len(tmoys))/nDays >= minProportionMeasures:
190 if tmoys != []: 194 if tmoys != []:
191 ecart_type_T = np.std(tmoys) 195 ecart_type_T = np.std(tmoys)
192 else: 196 else:
193 ecart_type = None 197 ecart_type = None
194 if neige_tot < snowThreshold: 198 if neige_tot < snowThreshold: