Mercurial Hosting > traffic-intelligence
changeset 437:830136bc0e18
integrating Alexandre functions
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Tue, 21 Jan 2014 16:31:30 -0500 |
parents | b64ff7fe7b45 |
children | ca114520605f |
files | python/pavement.py |
diffstat | 1 files changed, 160 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/python/pavement.py Wed Jan 08 02:56:12 2014 -0500 +++ b/python/pavement.py Tue Jan 21 16:31:30 2014 -0500 @@ -1,11 +1,15 @@ #! /usr/bin/env python '''Tools for processing and analyzing pavement marking data''' +import numpy as np + __metaclass__ = type class RTSS: 'class for data related to a RTSS, including agregating pavement marking measurements' - pass + + def __init__(self, id): + self.id = id class MarkingTest: '''class for a test site for a given product''' @@ -31,3 +35,158 @@ def plotMarkingMeasures(self, measure, options = 'o', dayRatio = 1., **kwargs): for i in range(1,7): self.plot('{}_{}'.format(measure, i), options, dayRatio, **kwargs) + + +def occ_max(a): + if a != []: + s = set(a) + l = list(s) + occ = [] + for i in range(len(l)): + b = 0 + for j in range(len(a)): + if a[j] == l[i]: + b += 1 + occ.append([l[i], b]) + nbre_occs = [] + for i in range(len(occ)): + nbre_occs.append(occ[i][1]) + return occ[nbre_occs.index(max(nbre_occs))][0] + else: + return "" + +def caracteristiques(rtss, maintenanceLevel, rtssWeatherStation, fmr, paintType): + '''Computes characteristic data for the RTSS (class rtss) + maintenanceLevel = pylab.csv2rec('C:\Users\Alexandre\Desktop\Projet_maitrise_recherche\BDD_access\\analyse_donnees_deneigement\\exigence_circuits.txt', delimiter = ';') + 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 = ',') + fmr = pylab.csv2rec('C:\Users\Alexandre\Desktop\Projet_maitrise_recherche\BDD_access\\analyse_donnees_deneigement\\fmr.txt', delimiter = ';') + paintType = pylab.csv2rec('C:\Users\Alexandre\Desktop\Projet_maitrise_recherche\BDD_access\\analyse_donnees_deneigement\\type_peinture.txt', delimiter = ';') + ''' + # determination exigence deneigement + if rtss.id in maintenanceLevel['rtss_debut']: + for i in range(len(maintenanceLevel)-1): + if maintenanceLevel['rtss_debut'][i] == rtss.id: + exigence = maintenanceLevel['exigence'][i] + else: + exigence = '' + + # determination x/y + if rtss.id in rtssWeatherStation['rtss']: + for i in range(len(rtssWeatherStation)-1): + if rtssWeatherStation['rtss'][i] == rtss.id: + x_moy = rtssWeatherStation['x_moy'][i] + y_moy = rtssWeatherStation['y_moy'][i] + else: + x_moy, y_moy = '','' + + # determination info fmr + age_revtm, classe_fonct, type_revtm, milieu, djma, pourc_camions = [], [], [], [], [], [] + if rtss.id in fmr['rtss_debut']: + for i in range(len(fmr)-1): + if fmr['rtss_debut'][i] == rtss.id: + age_revtm.append(fmr['age_revtm'][i]) + classe_fonct.append(fmr['des_clasf_fonct'][i]) + type_revtm.append(fmr['des_type_revtm'][i]) + milieu.append(fmr['des_cod_mil'][i]) + djma.append(fmr['val_djma'][i]) + pourc_camions.append(fmr['val_pourc_camns'][i]) + age_revtm = occ_max(age_revtm) + classe_fonct = occ_max(classe_fonct) + type_revtm = occ_max(type_revtm) + milieu = occ_max(milieu) + djma = occ_max(djma) + pourc_camions = occ_max(pourc_camions) + if pourc_camions == "" or pourc_camions < 0: + djma_camions = "" + else: + djma_camions = pourc_camions*djma/100 + else: + age_revtm, classe_fonct, type_revtm, milieu, djma, djma_camions = '','','','','','' + + # determination type peinture + peinture_rd, peinture_rg, peinture_cl = [], [], [] + peinture_lrd, peinture_lrg, peinture_lc = 0,0,0 + if rtss.id in paintType['rtss_debut_orig']: + for i in range(len(paintType)-1): + if paintType['rtss_debut_orig'][i] == rtss.id: + peinture_rd.append((paintType['peinture_rd'][i])) + peinture_rg.append((paintType['peinture_rg'][i])) + peinture_cl.append((paintType['peinture_cl'][i])) + peinture_lrd = occ_max(peinture_rd) + peinture_lrg = occ_max(peinture_rg) + peinture_lc = occ_max(peinture_cl) + else: + peinture_lrd, peinture_lrg, peinture_lc = '','','' + + return [exigence, x_moy, y_moy, age_revtm, classe_fonct, type_revtm, milieu, djma, djma_camions, peinture_lrd, peinture_lrg, peinture_lc] + +def winterMaintenanceIndicators(data, startDate, endDate, circuitReference, snowThreshold): + '''Computes several winter maintenance indicators + data = entretien_hivernal = pylab.csv2rec('C:\Users\Alexandre\Documents\Cours\Poly\Projet\mesures_entretien_hivernal\mesures_deneigement.txt', delimiter = ',')''' + 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 + + if circuitReference in data['ref_circuit']: + for i in range(len(data)-1): + if data['ref_circuit'][i] == circuitReference and (data['date'][i] + datetime.timedelta(days = 6)) <= endDate and (data['date'][i] + datetime.timedelta(days = 6)) > startDate: + premiere_neige += data['premiere_neige'][i] + somme_neige += float(data['neige'][i]) + somme_eau += float(data['eau'][i]) + somme_abrasif += float(data['abrasif'][i]) + somme_sel += float(data['sel'][i]) + somme_lc += float(data['lc'][i]) + somme_lrg += float(data['lrg'][i]) + somme_lrd += float(data['lrd'][i]) + compteur_somme_abrasif += float(data['autre_abrasif_binaire'][i]) + if compteur_somme_abrasif >= 1: + autres_abrasifs = 1 + else: + autres_abrasifs = 0 + if somme_neige < snowThreshold: + neigeMTQ_sup_seuil = 0 + else: + neigeMTQ_sup_seuil = 1 + else: + somme_eau, somme_neige, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, autres_abrasifs, neigeMTQ_sup_seuil = '','','','','','','','','','' + + return [somme_eau, somme_neige, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, autres_abrasifs, neigeMTQ_sup_seuil] + +def environmentCanadaIndicators(data, startDate, endDate): + '''Computes the indicators from Environment Canada files + (loaded as a recarray using csv2rec in data), + between start and end dates (datetime.datetime objects)''' + nbre_jours_T_negatif,nbre_jours_gel_degel,pluie_tot,neige_tot,ecart_type_T = 0,0,0,0,0 + compteur,nbre_jours_gel_consecutifs=0,0 + tmoys = [] + seuils_T = [20,15,10,5] + deltas_T = [0,0,0,0] + for i in range(int((endDate - startDate).days)+1): + if data['tmax'][i] != '' and data['tmax'][i] != None: + tmax = float(data['tmax'][i].replace(',','.')) + if data['tmin'][i] != '' and data['tmin'][i] != None: + tmin = float(data['tmin'][i].replace(',','.')) + if data['pluie_tot'][i] != '' and data['pluie_tot'][i] != None: + pluie_tot += float(data['pluie_tot'][i].replace(',','.')) + if data['neige_tot'][i] != '' and data['neige_tot'][i] != None: + neige_tot += float(data['neige_tot'][i].replace(',','.')) + if data['tmax'][i] != '' and data['tmax'][i] != None: + if tmax < 0: + nbre_jours_T_negatif += 1 + if data['tmax'][i] != '' and data['tmax'][i] != None and data['tmin'][i] != '' and data['tmin'][i] != None: + if tmax > 0 and tmin < 0: + nbre_jours_gel_degel += 1 + for l in range(len(seuils_T)): + if tmax - tmin >=seuils_T[l]: + deltas_T[l] += 1 + if data['tmoy'][i] != '' and data['tmoy'][i] != None: + tmoys.append(float(data['tmoy'][i].replace(',','.'))) + if data['tmax'][i] != '' and data['tmax'][i] != None and tmax < 0: + compteur += 1 + elif (tmax >= 0 or data['tmax'][i] == '' or data['tmax'][i] == None) and compteur >= nbre_jours_gel_consecutifs: + nbre_jours_gel_consecutifs = compteur + compteur = 0 + else: + compteur = 0 + nbre_jours_gel_consecutifs = max(nbre_jours_gel_consecutifs,compteur) + ecart_type_T = np.std(tmoys) + + return [nbre_jours_T_negatif,nbre_jours_gel_degel, deltas_T[0], deltas_T[1], deltas_T[2], deltas_T[3], nbre_jours_gel_consecutifs, pluie_tot, neige_tot, ecart_type_T]