La specifica del formato di input è la seguente: 13 record di campi separati da tabulazione di cui il primo è il record di intestazione degli anni (composto da N campi) e gli altri 12 sono i record delle piogge mensili (uno per ciascun mese) composti da N+1 campi (di cui il primo è il nome del mese) e i rimanenti N sono le piogge del mese lungo gli N anni.
Si richiede di calcolare:
Parametri di input:
Requisiti generali:
compute_mean()
per calcolare la media di una lista di numericount_elements_greater_than()
per contare il numero di valori che sono almeno una certa sogliaVariabili di output:
means_per_month_tuples
di 12 tuple delle precipitazioni medie mensili, in cui ogni tupla contiene le prime tre lettere del nome del mese in maiuscolo come primo elemento e la media lungo gli anni come secondo elementotot_per_year_tuples
di N tuple delle precipitazioni totali annue, in cui ogni tupla contiene l'anno come primo elemento e la precipitazione totale come secondo elementocount_per_year_tuples
di N tuple del numero di mesi con almeno p mm di pioggia (per anno), in cui ogni tupla contiene l'anno come primo elemento e il numero di mesi con almeno p mm di pioggia come secondo elementoImportare il modulo numpy
come np
per costruire e gestire matrici.
In [1]:
import numpy as np
In [1]:
def compute_mean(list_of_numbers):
return float(sum(list_of_numbers))/len(list_of_numbers)
count_elements_greater_than()
, conteggio del numero di valori di una lista sono che almeno uguali a una certa soglia
In [3]:
def count_elements_greater_than(list_of_numbers, threshold):
b_list = [number >= threshold for number in list_of_numbers]
return b_list.count(True)
In [4]:
input_file_name = './input-precipitazioni.txt'
p = 100
In [5]:
with open(input_file_name, 'r') as input_file:
file_rows = input_file.readlines()
In [6]:
file_rows
Out[6]:
In [7]:
years = file_rows.pop(0).rstrip().split()
In [8]:
years
Out[8]:
NOTA BENE: a questo punto la riga di intestazione del dataset in input non deve più essere presente nella lista file_rows
.
In [9]:
file_rows
Out[9]:
In [10]:
months = [row.rstrip().split()[0] for row in file_rows]
In [11]:
months
Out[11]:
NOTA BENE: ogni riga della matrice rains_per_month
deve contenere le piogge di un dato mese (lungo gli anni) come valori di tipo int
.
Costruire la lista list_rains_per_months_str
in cui il singolo elemento è la lista delle piogge in un dato mese, come valori di tipo str
In [12]:
list_rains_per_months_str = [row.rstrip().split()[1:] for row in file_rows]
In [13]:
list_rains_per_months_str
Out[13]:
Convertire la lista list_rains_per_months_str
in una lista list_rains_per_months_int
di oggetti di tipo int
.
In [14]:
list_rains_per_months_int = [[int(rain) for rain in rains] for rains in list_rains_per_months_str]
In [15]:
list_rains_per_months_int
Out[15]:
Ottenere dalla lista list_rains_per_months_int
la matrice rains_per_month
.
In [16]:
rains_per_month = np.array(list_rains_per_months_int)
In [17]:
rains_per_month
Out[17]:
NOTA BENE: ogni riga della matrice rains_per_year
deve contenere le piogge di un dato anno (lungo i mesi) come valori di tipo int
In [18]:
rains_per_year = rains_per_month.transpose()
In [19]:
rains_per_year
Out[19]:
Calcolare la lista means_per_month
delle precipitazioni medie di ogni mese.
NOTA BENE: means_per_month[i]
è la media relativa al mese months[i]
.
In [20]:
means_per_month = [compute_mean(rains_of_a_month) for rains_of_a_month in rains_per_month]
In [21]:
means_per_month
Out[21]:
Costruire la lista means_per_month_tuples
di 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 relativa media lungo gli anni come secondo elemento.
In [22]:
means_per_month_tuples = [(months[i][0:3].upper(), means_per_month[i]) for i in range(len(months))]
In [23]:
means_per_month_tuples
Out[23]:
Calcolare la lista tot_per_year
delle piogge totali di ogni anno.
NOTA BENE: tot_per_year[i]
è la media relativa al mese years[i]
.
In [24]:
tot_per_year = [sum(rains_of_a_year) for rains_of_a_year in rains_per_year]
In [25]:
tot_per_year
Out[25]:
Costruire la lista tot_per_year_tuples
di N tuple di dimensione 2 in cui ogni tupla contiene l'anno come primo elemento e la relativa precipitazione totale come secondo elemento.
In [26]:
tot_per_year_tuples = [(years[i], tot_per_year[i]) for i in range(len(years))]
In [27]:
tot_per_year_tuples
Out[27]:
Calcolare la lista count_per_year
del numero di mesi con almeno p mm di pioggia.
NOTA BENE: count_per_year[i]
è numero di mesi con pioggia almeno p mm relativo all'anno year[i]
.
In [28]:
count_per_year = [count_elements_greater_than(rains_per_year[i], p) for i in range(len(rains_per_year))]
In [29]:
count_per_year
Out[29]:
Costruire la lista count_per_year_tuples
di N tuple di dimensione 2 in cui ogni tupla contiene l'anno come primo elemento e il relativo numero di mesi con almeno p mm di pioggia come secondo elemento.
In [30]:
count_per_year_tuples = [(years[i], count_per_year[i]) for i in range(len(years))]
In [31]:
count_per_year_tuples
Out[31]: