MatteB_01

INQUINAMENTO ACUSTICO

Feb 12th, 2021
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.75 KB | None | 0 0
  1. def main():
  2.     # -------------SALVO IL FILE IN MEMORIA NEL PROGRAMMA----------
  3.  
  4.     INPUT = "input_file.csv"
  5.     OUTPUT = "region_bad.txt"
  6.     PRIMOANNO = 2008
  7.     ULTIMOANNO = 2012
  8.     valori = []
  9.  
  10.     try:
  11.         with open(INPUT, "r") as file:
  12.             for line in file:
  13.                 lista = line.strip().split(";")
  14.                 if lista[3].isnumeric():
  15.                     valori.append(lista)
  16.  
  17.     except IOError:
  18.         print("il programma non è riuscito ad aprire il file contenente i dati")
  19.         exit()
  20.  
  21.     # ---------------CALCOLO LA MEDIA NAZIONALE ANNUA-------------
  22.  
  23.     medieNazionali = mediaAnnua(valori, PRIMOANNO, ULTIMOANNO)
  24.  
  25.     # ------------CALCOLO LA MEDIA REGIONALE ANNUA------------
  26.     medieRegionali = []
  27.     # ---------creo un insieme ausiliario per avere il nome delle regioni----
  28.  
  29.     regioni = set()
  30.     for line in valori:
  31.         regioni.add(line[2])
  32.  
  33.     for regione in sorted(regioni):
  34.         valoriRegionali = []
  35.         for dato in valori:
  36.             if dato[2] == regione:
  37.                 valoriRegionali.append(dato)
  38.  
  39.         # creo una tabella regione-media
  40.         mediaRegionale = mediaAnnua(valoriRegionali, PRIMOANNO, ULTIMOANNO)
  41.         listaRegione = [regione, mediaRegionale, len(valoriRegionali)]
  42.         medieRegionali.append(listaRegione)
  43.  
  44.     # ------------ SALVO IL NUMERO DI ANNI IN CUI LE SINGOLE REGIONI SONO STATE SOPRA E LO NORMALIZZO----------------
  45.     maggNormalizzate = {}
  46.     for valore in medieRegionali:
  47.         maggNormalizzate[valore[0]] = sopraMedia(valore[1], medieNazionali) / valore[2]
  48.  
  49.     with open(OUTPUT, "w")as file:
  50.         for regione in maggNormalizzate.keys():
  51.             file.write(f"{regione} >>> {maggNormalizzate[regione]}\n")
  52.  
  53.     # ------------SALVO IL NUMERO DI ANNI IN CUI LE SINGOLE REGIONI SONO STATE SOPRA LA MEDIA E CREO LA LISTA DI REGIONI PIU VIRTUOSE-------------
  54.     minNormalizzate = {}
  55.     for valore in medieRegionali:
  56.         minNormalizzate[valore[0]] = sottoMedia(valore[1], medieNazionali) / valore[2]
  57.  
  58.     #-----------trovo la regione con la media normalizzata più virtuosa----------------------------
  59.     minorInquinamento = 0
  60.     for regione in minNormalizzate.keys():
  61.  
  62.         if minNormalizzate[regione] > minorInquinamento:
  63.             minorInquinamento = minNormalizzate[regione]
  64.  
  65.     #------------------aggiungo alla lista tutte le regioni più virtuose------------------
  66.     migliori = []
  67.     for regione in minNormalizzate.keys():
  68.         if minNormalizzate[regione] == minorInquinamento:
  69.             migliori.append(regione)
  70.  
  71.  
  72.     #------------------aggiungo al file di testo le regioni virtuose-------------
  73.     with open(OUTPUT, "a") as file:
  74.         file.write(f"regione/i più virtuosa/e: {migliori}")
  75.  
  76.     with open(OUTPUT, "r") as file:
  77.         for line in file:
  78.             print(line)
  79.  
  80.  
  81. # -------------------FUNZIONI--------------------------
  82. def mediaAnnua(tabella, primoAnno, ultimoAnno):  # definisco la funzione per calcolare le medie annue
  83.     medieAnnue = {}
  84.  
  85.     for anno in range(primoAnno, ultimoAnno + 1):
  86.         media = 0
  87.         counter = 0
  88.         for linea in tabella:
  89.             if int(linea[3]) == anno:
  90.                 media += float(linea[4])
  91.                 counter += 1
  92.         media = media / counter
  93.         medieAnnue[anno] = media
  94.     return medieAnnue
  95.  
  96.  
  97. def sopraMedia(medieRegione, medieNazione):
  98.     counter = 0
  99.     for anno in sorted(medieRegione.keys()):
  100.         if medieRegione[anno] >= medieNazione[anno]:
  101.             counter += 1
  102.     return counter
  103.  
  104.  
  105. def sottoMedia(medieRegione, medieNazione):
  106.     counter = 0
  107.     for anno in sorted(medieRegione.keys()):
  108.         if medieRegione[anno] < medieNazione[anno]:
  109.             counter += 1
  110.     return counter
  111.  
  112.  
  113. main()
Advertisement
Add Comment
Please, Sign In to add comment