<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Esercizio 1
Si consideri il dataset delle precipitazioni mensili (mm) nei sette anni dal 2009 al 2015, che ha il seguente formato
Step1:  2) Definizione della funzione compute_mean()
Step2:  3) Definizione della funzione count_elements_greater_than()
Step3:  4) Definizione dei parametri di input
Step4:  5) Lettura del dataset nella lista delle sue righe
Step5:  6) Estrazione della lista degli anni
Step6:  NOTA BENE
Step7:  7) Estrazione della lista dei mesi
Step8:  8) Costruzione della matrice dei valori (interi) di pioggia
a) Ottenere dalla lista delle righe del dataset la lista delle liste delle piogge mensili i oggetti di tipo intero.
Step9:  b) Convertire la lista in matrice.
Step10:  NOTA BENE
Step11:  NOTA BENE
Step12:  NOTA BENE
Step13:  11) Output delle precipitazioni totali annue
a) Calcolo della lista delle precipitazioni totali annue.
Step14:  b) Costruzione della lista di output delle 12 tuple di dimensione 2 in cui ogni tupla contiene il nome dell'anno come primo elemento e la precipitazione totale come secondo elemento.
Step15:  12) Output del numero annuo di mesi con almeno threshold mm di pioggia
a) Calcolo della lista del numero annuo di mesi con almeno threshold mm di pioggia.
Step16:  b) Costruzione della lista di output delle N=7 tuple di dimensione 2 in cui ogni tupla contiene il nome dell'anno come primo elemento e il numero di mesi con almeno threshold mm di pioggia come secondo elemento.
<ASSISTANT_TASK:>
Python Code:
import numpy as np
Explanation: Esercizio 1
Si consideri il dataset delle precipitazioni mensili (mm) nei sette anni dal 2009 al 2015, che ha il seguente formato: 13 record di campi separati da tabulazione di cui il primo è il record di intestazione degli anni (composto da 7 campi) e gli altri 12 sono i record delle piogge mensili (un record per ciascun mese) composti da 8 campi di cui il primo è il nome del mese e i rimanenti 7 sono le piogge mensili lungo gli anni.
Si richiede di predisporre un notebook che permetta di calcolare:
le precipitazioni medie mensili 
le precipitazioni totali annue 
per ognuno degli anni considerati, il numero di mesi con pioggia oltre la soglia S
Parametri di input:
- dataset delle precipitazioni
- soglia S
Requisiti:
- il notebook deve funzionare anche per un dataset che contiene le rilevazioni per un numero di anni diverso da 7
definire la funzione compute_mean() che prenda in input una lista di numeri e produca in output il valore medio
definire la funzione count_elements_greater_than() che prenda in input una lista di numeri e un valore di soglia e produca in output il numero di valori che superano tale soglia
Come produrre l'output?
produrre le piogge medie mensili in una lista di 12 tuple di dimensione 2 in cui il primo elemento (stringa) sono le prime tre lettere del nome del mese in maiuscolo e il secondo elemento (decimale) è il suo valore medio di pioggia.
produrre le piogge totali annue in una lista di N (sarà N=7 per questo dataset) tuple di dimensione 2 in cui il primo elemento (stringa) è l'anno e il secondo elemento (intero) è il suo valore totale di pioggia.
produrre per ogni anno il numero di mesi con pioggia oltre la soglia P in una lista di N tuple di dimensione 2 in cui il primo elemento (stringa) è l'anno e il secondo elemento (intero) il numero di mesi con almeno S mm di pioggia
Soluzione
1) Importazione del modulo numpy
End of explanation
def compute_mean(list_of_numbers):
    return float(sum(list_of_numbers))/len(list_of_numbers)
Explanation: 2) Definizione della funzione compute_mean()
End of explanation
def count_elements_greater_than(list_of_numbers, threshold):
    bool_list = [number >= threshold for number in list_of_numbers]
    return bool_list.count(True)
Explanation: 3) Definizione della funzione count_elements_greater_than()
End of explanation
input_file_name = './input-precipitazioni.txt'
threshold = 100
Explanation: 4) Definizione dei parametri di input
End of explanation
with open(input_file_name, 'r') as input_file:
    file_rows = input_file.readlines()
file_rows
Explanation: 5) Lettura del dataset nella lista delle sue righe
End of explanation
years = file_rows.pop(0).rstrip().split()
years
Explanation: 6) Estrazione della lista degli anni
End of explanation
file_rows
Explanation: NOTA BENE: rimuovere la riga di intestazione degli anni dalla lista file_rows.
End of explanation
months = [row.rstrip().split()[0] for row in file_rows]
months
Explanation: 7) Estrazione della lista dei mesi
End of explanation
rains_per_month = [list(map(int, row.rstrip().split()[1:])) for row in file_rows]
rains_per_month
Explanation: 8) Costruzione della matrice dei valori (interi) di pioggia
a) Ottenere dalla lista delle righe del dataset la lista delle liste delle piogge mensili i oggetti di tipo intero.
End of explanation
rains_per_month = np.array(rains_per_month)
rains_per_month
Explanation: b) Convertire la lista in matrice.
End of explanation
rains_per_year = rains_per_month.transpose()
rains_per_year
Explanation: NOTA BENE: ogni riga della matrice contiene tutte le piogge annue di un determinato mese.
9) Calcolo della trasposta della matrice dei valori (interi) di pioggia
End of explanation
monthly_averages = [compute_mean(rain_list) for rain_list in rains_per_month]
monthly_averages
Explanation: NOTA BENE: ogni riga della matrice trasposta contiene tutte le piogge mensili di un determinato anno.
10) Output delle precipitazioni medie mensili
a) Calcolo della lista delle precipitazioni medie mensili.
End of explanation
months = [month[:3].upper() for month in months]
monthly_output = list(zip(months, monthly_averages))
monthly_output
Explanation: NOTA BENE: il valore i-esimo nella lista è la media relativa al mese i-esimo.
b) Costruzione della lista di output delle 12 tuple di dimensione 2 in cui ogni tupla contiene le prime tre lettere del nome del mese in maiuscolo come primo elemento e la media mensile come secondo elemento.
End of explanation
yearly_total = [sum(rain_list) for rain_list in rains_per_year]
yearly_total
Explanation: 11) Output delle precipitazioni totali annue
a) Calcolo della lista delle precipitazioni totali annue.
End of explanation
yearly_output1 = list(zip(years, yearly_total))
yearly_output1
Explanation: b) Costruzione della lista di output delle 12 tuple di dimensione 2 in cui ogni tupla contiene il nome dell'anno come primo elemento e la precipitazione totale come secondo elemento.
End of explanation
yearly_count = [count_elements_greater_than(rain_list, threshold) for rain_list in rains_per_year]
yearly_count
Explanation: 12) Output del numero annuo di mesi con almeno threshold mm di pioggia
a) Calcolo della lista del numero annuo di mesi con almeno threshold mm di pioggia.
End of explanation
yearly_output2 = list(zip(years, yearly_count))
yearly_output2
Explanation: b) Costruzione della lista di output delle N=7 tuple di dimensione 2 in cui ogni tupla contiene il nome dell'anno come primo elemento e il numero di mesi con almeno threshold mm di pioggia come secondo elemento.
End of explanation
<END_TASK>