Mercurial Hosting > traffic-intelligence
annotate python/pavement.py @ 439:ad61d21d3d1b
corrected bug with last array position lookup
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Tue, 21 Jan 2014 17:30:48 -0500 |
parents | ca114520605f |
children | b5cc6b001ae6 |
rev | line source |
---|---|
431
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
1 #! /usr/bin/env python |
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
2 '''Tools for processing and analyzing pavement marking data''' |
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
3 |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
4 import numpy as np |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
5 |
431
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
6 __metaclass__ = type |
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
7 |
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
8 class RTSS: |
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
9 'class for data related to a RTSS, including agregating pavement marking measurements' |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
10 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
11 def __init__(self, id): |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
12 self.id = id |
431
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
13 |
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
14 class MarkingTest: |
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
15 '''class for a test site for a given product''' |
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
16 |
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
17 def __init__(self, siteId, paintingDate, paintingType, color, data): |
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
18 self.siteId = siteId |
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
19 self.paintingDate = paintingDate |
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
20 self.paintingType = paintingType |
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
21 self.color = color |
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
22 self.data = data |
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
23 self.nMeasures = len(data) |
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
24 |
432 | 25 def plot(self, measure, options = 'o', dayRatio = 1., **kwargs): |
431
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
26 from matplotlib.pyplot import plot |
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
27 plot(self.data['jours']/float(dayRatio), |
432 | 28 self.data[measure], options, **kwargs) |
431
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
29 |
434 | 30 def getMarkingMeasures(self, dataLabel): |
433
d40ad901b272
added kernel smoothing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
432
diff
changeset
|
31 from numpy import isnan |
d40ad901b272
added kernel smoothing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
432
diff
changeset
|
32 nonZeroIndices = ~isnan(self.data[dataLabel]) |
d40ad901b272
added kernel smoothing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
432
diff
changeset
|
33 return self.data[nonZeroIndices]['jours'], self.data[nonZeroIndices][dataLabel] |
431
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
34 |
433
d40ad901b272
added kernel smoothing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
432
diff
changeset
|
35 def plotMarkingMeasures(self, measure, options = 'o', dayRatio = 1., **kwargs): |
431
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
36 for i in range(1,7): |
433
d40ad901b272
added kernel smoothing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
432
diff
changeset
|
37 self.plot('{}_{}'.format(measure, i), options, dayRatio, **kwargs) |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
38 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
39 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
40 def occ_max(a): |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
41 if a != []: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
42 s = set(a) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
43 l = list(s) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
44 occ = [] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
45 for i in range(len(l)): |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
46 b = 0 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
47 for j in range(len(a)): |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
48 if a[j] == l[i]: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
49 b += 1 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
50 occ.append([l[i], b]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
51 nbre_occs = [] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
52 for i in range(len(occ)): |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
53 nbre_occs.append(occ[i][1]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
54 return occ[nbre_occs.index(max(nbre_occs))][0] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
55 else: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
56 return "" |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
57 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
58 def caracteristiques(rtss, maintenanceLevel, rtssWeatherStation, fmr, paintType): |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
59 '''Computes characteristic data for the RTSS (class rtss) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
60 maintenanceLevel = pylab.csv2rec('C:\Users\Alexandre\Desktop\Projet_maitrise_recherche\BDD_access\\analyse_donnees_deneigement\\exigence_circuits.txt', delimiter = ';') |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
61 rtssWeatherStation = pylab.csv2rec('C:\Users\Alexandre\Desktop\Projet_maitrise_recherche\stations_environnement_canada\\rtssWeatherStation\juste_pour_rtss_avec_donnees_entretien_hiv\\rtssWeatherStation_EC3.txt', delimiter = ',') |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
62 fmr = pylab.csv2rec('C:\Users\Alexandre\Desktop\Projet_maitrise_recherche\BDD_access\\analyse_donnees_deneigement\\fmr.txt', delimiter = ';') |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
63 paintType = pylab.csv2rec('C:\Users\Alexandre\Desktop\Projet_maitrise_recherche\BDD_access\\analyse_donnees_deneigement\\type_peinture.txt', delimiter = ';') |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
64 ''' |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
65 # determination exigence deneigement |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
66 if rtss.id in maintenanceLevel['rtss_debut']: |
439
ad61d21d3d1b
corrected bug with last array position lookup
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
438
diff
changeset
|
67 for i in range(len(maintenanceLevel)): |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
68 if maintenanceLevel['rtss_debut'][i] == rtss.id: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
69 exigence = maintenanceLevel['exigence'][i] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
70 else: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
71 exigence = '' |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
72 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
73 # determination x/y |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
74 if rtss.id in rtssWeatherStation['rtss']: |
439
ad61d21d3d1b
corrected bug with last array position lookup
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
438
diff
changeset
|
75 for i in range(len(rtssWeatherStation)): |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
76 if rtssWeatherStation['rtss'][i] == rtss.id: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
77 x_moy = rtssWeatherStation['x_moy'][i] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
78 y_moy = rtssWeatherStation['y_moy'][i] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
79 else: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
80 x_moy, y_moy = '','' |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
81 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
82 # determination info fmr |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
83 age_revtm, classe_fonct, type_revtm, milieu, djma, pourc_camions = [], [], [], [], [], [] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
84 if rtss.id in fmr['rtss_debut']: |
439
ad61d21d3d1b
corrected bug with last array position lookup
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
438
diff
changeset
|
85 for i in range(len(fmr)): |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
86 if fmr['rtss_debut'][i] == rtss.id: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
87 age_revtm.append(fmr['age_revtm'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
88 classe_fonct.append(fmr['des_clasf_fonct'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
89 type_revtm.append(fmr['des_type_revtm'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
90 milieu.append(fmr['des_cod_mil'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
91 djma.append(fmr['val_djma'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
92 pourc_camions.append(fmr['val_pourc_camns'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
93 age_revtm = occ_max(age_revtm) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
94 classe_fonct = occ_max(classe_fonct) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
95 type_revtm = occ_max(type_revtm) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
96 milieu = occ_max(milieu) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
97 djma = occ_max(djma) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
98 pourc_camions = occ_max(pourc_camions) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
99 if pourc_camions == "" or pourc_camions < 0: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
100 djma_camions = "" |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
101 else: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
102 djma_camions = pourc_camions*djma/100 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
103 else: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
104 age_revtm, classe_fonct, type_revtm, milieu, djma, djma_camions = '','','','','','' |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
105 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
106 # determination type peinture |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
107 peinture_rd, peinture_rg, peinture_cl = [], [], [] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
108 peinture_lrd, peinture_lrg, peinture_lc = 0,0,0 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
109 if rtss.id in paintType['rtss_debut_orig']: |
439
ad61d21d3d1b
corrected bug with last array position lookup
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
438
diff
changeset
|
110 for i in range(len(paintType)): |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
111 if paintType['rtss_debut_orig'][i] == rtss.id: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
112 peinture_rd.append((paintType['peinture_rd'][i])) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
113 peinture_rg.append((paintType['peinture_rg'][i])) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
114 peinture_cl.append((paintType['peinture_cl'][i])) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
115 peinture_lrd = occ_max(peinture_rd) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
116 peinture_lrg = occ_max(peinture_rg) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
117 peinture_lc = occ_max(peinture_cl) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
118 else: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
119 peinture_lrd, peinture_lrg, peinture_lc = '','','' |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
120 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
121 return [exigence, x_moy, y_moy, age_revtm, classe_fonct, type_revtm, milieu, djma, djma_camions, peinture_lrd, peinture_lrg, peinture_lc] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
122 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
123 def winterMaintenanceIndicators(data, startDate, endDate, circuitReference, snowThreshold): |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
124 '''Computes several winter maintenance indicators |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
125 data = entretien_hivernal = pylab.csv2rec('C:\Users\Alexandre\Documents\Cours\Poly\Projet\mesures_entretien_hivernal\mesures_deneigement.txt', delimiter = ',')''' |
438
ca114520605f
minor bug update
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
437
diff
changeset
|
126 import datetime |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
127 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 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
128 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
129 if circuitReference in data['ref_circuit']: |
439
ad61d21d3d1b
corrected bug with last array position lookup
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
438
diff
changeset
|
130 for i in range(len(data)): |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
131 if data['ref_circuit'][i] == circuitReference and (data['date'][i] + datetime.timedelta(days = 6)) <= endDate and (data['date'][i] + datetime.timedelta(days = 6)) > startDate: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
132 premiere_neige += data['premiere_neige'][i] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
133 somme_neige += float(data['neige'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
134 somme_eau += float(data['eau'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
135 somme_abrasif += float(data['abrasif'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
136 somme_sel += float(data['sel'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
137 somme_lc += float(data['lc'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
138 somme_lrg += float(data['lrg'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
139 somme_lrd += float(data['lrd'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
140 compteur_somme_abrasif += float(data['autre_abrasif_binaire'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
141 if compteur_somme_abrasif >= 1: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
142 autres_abrasifs = 1 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
143 else: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
144 autres_abrasifs = 0 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
145 if somme_neige < snowThreshold: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
146 neigeMTQ_sup_seuil = 0 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
147 else: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
148 neigeMTQ_sup_seuil = 1 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
149 else: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
150 somme_eau, somme_neige, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, autres_abrasifs, neigeMTQ_sup_seuil = '','','','','','','','','','' |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
151 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
152 return [somme_eau, somme_neige, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, autres_abrasifs, neigeMTQ_sup_seuil] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
153 |
438
ca114520605f
minor bug update
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
437
diff
changeset
|
154 def ecWeatherIndicators(data, startDate, endDate): |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
155 '''Computes the indicators from Environment Canada files |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
156 (loaded as a recarray using csv2rec in data), |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
157 between start and end dates (datetime.datetime objects)''' |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
158 nbre_jours_T_negatif,nbre_jours_gel_degel,pluie_tot,neige_tot,ecart_type_T = 0,0,0,0,0 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
159 compteur,nbre_jours_gel_consecutifs=0,0 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
160 tmoys = [] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
161 seuils_T = [20,15,10,5] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
162 deltas_T = [0,0,0,0] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
163 for i in range(int((endDate - startDate).days)+1): |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
164 if data['tmax'][i] != '' and data['tmax'][i] != None: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
165 tmax = float(data['tmax'][i].replace(',','.')) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
166 if data['tmin'][i] != '' and data['tmin'][i] != None: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
167 tmin = float(data['tmin'][i].replace(',','.')) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
168 if data['pluie_tot'][i] != '' and data['pluie_tot'][i] != None: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
169 pluie_tot += float(data['pluie_tot'][i].replace(',','.')) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
170 if data['neige_tot'][i] != '' and data['neige_tot'][i] != None: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
171 neige_tot += float(data['neige_tot'][i].replace(',','.')) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
172 if data['tmax'][i] != '' and data['tmax'][i] != None: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
173 if tmax < 0: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
174 nbre_jours_T_negatif += 1 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
175 if data['tmax'][i] != '' and data['tmax'][i] != None and data['tmin'][i] != '' and data['tmin'][i] != None: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
176 if tmax > 0 and tmin < 0: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
177 nbre_jours_gel_degel += 1 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
178 for l in range(len(seuils_T)): |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
179 if tmax - tmin >=seuils_T[l]: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
180 deltas_T[l] += 1 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
181 if data['tmoy'][i] != '' and data['tmoy'][i] != None: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
182 tmoys.append(float(data['tmoy'][i].replace(',','.'))) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
183 if data['tmax'][i] != '' and data['tmax'][i] != None and tmax < 0: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
184 compteur += 1 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
185 elif (tmax >= 0 or data['tmax'][i] == '' or data['tmax'][i] == None) and compteur >= nbre_jours_gel_consecutifs: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
186 nbre_jours_gel_consecutifs = compteur |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
187 compteur = 0 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
188 else: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
189 compteur = 0 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
190 nbre_jours_gel_consecutifs = max(nbre_jours_gel_consecutifs,compteur) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
191 ecart_type_T = np.std(tmoys) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
192 |
438
ca114520605f
minor bug update
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
437
diff
changeset
|
193 return (nbre_jours_T_negatif,nbre_jours_gel_degel, deltas_T, nbre_jours_gel_consecutifs, pluie_tot, neige_tot, ecart_type_T) |