<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Introduzione a Pandas
Pandas è una libreria, costruita sulla base della libreria numpy, che ha lo scopo di manipolare data frames.
Oggetto di tipo DataFrame = tabella organizzata in righe (records) e colonne intestate.
Pandas offre tre funzionalità principali
Step1:  Leggere un file csv con Pandas
Un file csv è un file composto di record di campi separati da , di cui il primo è il record di intestazione che specifica il nome di ognuno dei campi dei record seguenti che contengono i dati.
Funzione read_csv() per leggere un file csv
Step2:  Ottenere informazioni sul data frame
informazioni generali sul data frame
df.info()
statistiche generali sul data frame
df.describe()
Step3:  Ottenere la copia di un data frame
    df.copy()
Step4:  Variabili shape e columns
shape, tupla contenente il numero di righe e numero di colonne del data frame
columns, oggetto Index che contiene i nomi delle colonne del data frame
Step5:  Cambiare i nomi delle colonne
df.rename(columns = name_dict, inplace = True|False)
name_dict, dizionario che mappa un nome a un nuovo nome
Step6:  Rimuovere colonne
df.drop(column_list, axis = 1, inplace = True|False)
Step7:  Rimuovere righe per indice
df.drop(index_list, axis = 0, inplace = True|False)
Step8:  Ottenere le prime/ultime righe
df.head(n)
df.tail(n)
Step9:  Selezionare righe per posizione (slicing)
df[start_pos
Step10:  Selezionare una colonna
L'espressione
Step11:  In alternativa si può usare la notazione con il punto
Step12:  Selezionare colonne
L'espressione
Step13:  NB
Step14:  Controllare se ci sono valori nulli
Le espressioni
Step15:  Le espressioni
Step16:  Metodo unique()
Il metodo unique() degli oggetti Series restituisce l'array dei valori distinti presenti nell'oggetto invocante.
Step17:  Selezionare le righe che verificano una certa condizione
Le istruzioni equivalenti
Step18:  L'espressione
Step19:  Ottenere gli indici delle righe che verificano una certa condizione
df[mask].index
Step20:  Localizzare righe con iloc[]
L'espressione
Step21:  L'espressione
Step22:  L'espressione
Step23:  Uso di  loc[]
accesso a una riga tramite il suo indicedf.loc[index]
Step24:  accesso a più righe tramite i loro indicidf.loc[[index1, index2, ...]]
Step25:  accesso a un valore del data framedf.loc[index, column_name]
Step26:  accesso a più valori del data framedf.loc[[index1, index2, ...], column_name]
Step27:  accesso a più valori del data framedf.loc[[index1, index2, ...], [column_name1, column_name2, ...]]
Step28:  accesso alle righe che verificano una certa condizionedf.loc[mask]
Step29:  Ottenere un valore tramite un indice con at[]
df.at[index, column_name]
Step30:  Ordinare valori
Ordinare per valori di una colonna
Step31:  Raggruppare i valori
L'espressione
Step32:  Aggiungere una colonna
df[new_column] = new_series_obj
Step33:  Applicare una funzione a un oggetto Series
L'espressione
Step34:  Applicare una funzione a un oggetto DataFrame
L'espressione
Step35:  Come iterare i record di un data frame
for (index, record) in df.iterrows()
Step36:  Scrivere un data frame su un file in formato csv
    df.to_csv(file_name, index=False|True)
Step37:  Richiamare matplotlib da Pandas
<ASSISTANT_TASK:>
Python Code:
import pandas as pd
Explanation: Introduzione a Pandas
Pandas è una libreria, costruita sulla base della libreria numpy, che ha lo scopo di manipolare data frames.
Oggetto di tipo DataFrame = tabella organizzata in righe (records) e colonne intestate.
Pandas offre tre funzionalità principali:
costruzione
interrogazione
aggiornamento
Pandas permette di ottenere un data frame a partire da un file in formato tabulare come csv, excel ma anche a partire da un file in formato json.
Per usare Pandas bisogna importarlo scrivendo:
End of explanation
df = pd.read_csv("./2017-german-election-overall.csv")
type(df)
df
Explanation: Leggere un file csv con Pandas
Un file csv è un file composto di record di campi separati da , di cui il primo è il record di intestazione che specifica il nome di ognuno dei campi dei record seguenti che contengono i dati.
Funzione read_csv() per leggere un file csv:
df = pd.read_csv(csv_file_name)
df è il riferimento a oggetto di tipo DataFrame
Ad esempio leggiamo il file 2017-german-election-overall.csv
Pandas riconosce automaticamente il file di input come file in formato csv e riconosce i tipi di dati in esso contenuti.
Ogni colonna della tabella contiene dati omogenei.
Ad ognuno dei record Pandas associa un indice progressivo che ha il ruolo di chiave primaria.
End of explanation
df.info()
df.describe()
Explanation: Ottenere informazioni sul data frame
informazioni generali sul data frame
df.info()
statistiche generali sul data frame
df.describe()
End of explanation
df.copy()
Explanation: Ottenere la copia di un data frame
    df.copy()
End of explanation
df.shape
list(df.columns)
Explanation: Variabili shape e columns
shape, tupla contenente il numero di righe e numero di colonne del data frame
columns, oggetto Index che contiene i nomi delle colonne del data frame
End of explanation
df.rename(columns = {'registered.voters':'registered_voters', 'area_names':'area'}, inplace = True)
df
Explanation: Cambiare i nomi delle colonne
df.rename(columns = name_dict, inplace = True|False)
name_dict, dizionario che mappa un nome a un nuovo nome
End of explanation
df.drop(['invalid_second_votes', 'valid_second_votes'], axis=1, inplace = True)
df
Explanation: Rimuovere colonne
df.drop(column_list, axis = 1, inplace = True|False)
End of explanation
df.drop([7,9,12], axis=0, inplace = True)
df
Explanation: Rimuovere righe per indice
df.drop(index_list, axis = 0, inplace = True|False)
End of explanation
df.head(8)
df.tail(8)
df.head()
df.tail()
Explanation: Ottenere le prime/ultime righe
df.head(n)
df.tail(n)
End of explanation
df[0:11]
df[:11]
df.head(11)
Explanation: Selezionare righe per posizione (slicing)
df[start_pos:end_pos]
End of explanation
type(df['registered_voters'])
df['registered_voters']
df['registered_voters'].describe()
Explanation: Selezionare una colonna
L'espressione:
df[column_name]
restituisce la colonna con nome column_name in un oggetto Series, attraverso cui si possono applicare metodi come max(), min(), count(), var(), std(), mean() etc. oppure describe().
End of explanation
df.registered_voters.describe()
Explanation: In alternativa si può usare la notazione con il punto:
df.column_name
End of explanation
type(df[['registered_voters', 'total_votes']])
df[['registered_voters', 'total_votes']].mean()
df[['registered_voters', 'total_votes']].mean()[1]
df[['registered_voters', 'total_votes']].corr()
Explanation: Selezionare colonne
L'espressione:
df[column_list]
restituisce un data frame con le colonne specificate in column_list, attraverso cui si possono applicare metodi come max(), min(), count(), var(), std(), mean(), corr() etc.
End of explanation
df.mean()
df.corr()
Explanation: NB: i metodi possono anche essere invocati sul dataset intero.
End of explanation
pd.isnull(df)
df.isnull()
Explanation: Controllare se ci sono valori nulli
Le espressioni:
pd.isnull(df)
df.isnull()
restituiscono un data frame di valori booleani.
End of explanation
df['state'].isnull()
pd.isnull(df['state'])
Explanation: Le espressioni:
pd.isnull(series_obj)
series_obj.isnull()
restituiscono un data frame di valori booleani.
End of explanation
df['state'].unique()
df.state.unique()
Explanation: Metodo unique()
Il metodo unique() degli oggetti Series restituisce l'array dei valori distinti presenti nell'oggetto invocante.
End of explanation
mask = df['state'] == 'Berlin'
mask
mask = df.state == 'Berlin'
mask
Explanation: Selezionare le righe che verificano una certa condizione
Le istruzioni equivalenti:
mask = df[column_name] cfr_op value
mask = df.column_name cfr_op value
dove cfr_op è un operatore di confronto, assegnano alla variabile mask un oggetto Series di valori booleani in cui l'i-esimo booleano è True se il valore nell'i-esima riga in corrispondenza della colonna column_name verifica l'espressione di confronto.
End of explanation
df[mask]
mask = (df['state'] == 'Berlin') | (df['state'] == 'Bayern')
df[mask]
df[mask][['area', 'registered_voters']]
Explanation: L'espressione:
df[mask]
restituisce un data frame con le sole righe che corrispondono a un valore True in mask.
End of explanation
df[mask][['area', 'registered_voters']].index
Explanation: Ottenere gli indici delle righe che verificano una certa condizione
df[mask].index
End of explanation
df.iloc[7]
df.iloc[7]['area']
Explanation: Localizzare righe con iloc[]
L'espressione:
df.iloc[pos_index]
restituisce in un oggetto di tipo Series la riga in posizione di indice pos_index.
End of explanation
df.iloc[7:12]
df.iloc[7:12]['area']
Explanation: L'espressione:
df.iloc[start_pos_index:end_pos_index]
restituisce in un oggetto di tipo DataFrame tutte le righe dalla posizione di indice start_pos_index a quella di indice end_pos_index-1.
End of explanation
df.iloc[[7, 8, 11, 13]]
df.iloc[[7, 8, 11, 13]]['area']
Explanation: L'espressione:
df.iloc[pos_index_list]
restituisce in un oggetto di tipo DataFrame tutte le righe dalla posizione di indice start_pos_index a quella di indice end_pos_index-1.
End of explanation
df.loc[5]
Explanation: Uso di  loc[]
accesso a una riga tramite il suo indicedf.loc[index]
End of explanation
df.loc[[5,8,10]]
Explanation: accesso a più righe tramite i loro indicidf.loc[[index1, index2, ...]]
End of explanation
df.loc[5, 'state']
Explanation: accesso a un valore del data framedf.loc[index, column_name]
End of explanation
df.loc[[5,10,11], 'state']
df.loc[[5,10,11], 'state'] = 'unknown'
Explanation: accesso a più valori del data framedf.loc[[index1, index2, ...], column_name]
End of explanation
df.loc[[5,10,11], ['area', 'state']]
Explanation: accesso a più valori del data framedf.loc[[index1, index2, ...], [column_name1, column_name2, ...]]
End of explanation
df.loc[df['state'] == 'Berlin']
Explanation: accesso alle righe che verificano una certa condizionedf.loc[mask]
End of explanation
df.at[11, 'area']
df.at[11, 'area'] = 'unknown'
Explanation: Ottenere un valore tramite un indice con at[]
df.at[index, column_name]
End of explanation
df.sort_values('total_votes', ascending = False)
df.sort_values(['state', 'area'], ascending = True)
Explanation: Ordinare valori
Ordinare per valori di una colonna:
df.sort_values(column_name, ascending = True|False, inplace = True|False)
Ordinare per valori di più colonne:
df.sort_values(column_list, ascending = True|False, inplace = True|False)
End of explanation
df.groupby('state')['registered_voters'].sum()
df.groupby(['state', 'area'])['registered_voters'].sum()
Explanation: Raggruppare i valori
L'espressione:
df.groupby(column_name)
df.groupby(column_list)
restituisce un oggetto DataFrameGroupBy.
End of explanation
df['difference'] = df['valid_first_votes'] - df['invalid_first_votes']
df
Explanation: Aggiungere una colonna
df[new_column] = new_series_obj
End of explanation
df['registered_voters'].apply(lambda x: float(x+1))
Explanation: Applicare una funzione a un oggetto Series
L'espressione:
    series_obj.apply(fun)
applica la funzione fun a tutti i valori in series_obj e restituisce un altro oggetto di tipo Series.
End of explanation
df[['registered_voters', 'total_votes']].applymap(lambda x: 'votes='+str(x))
Explanation: Applicare una funzione a un oggetto DataFrame
L'espressione:
    df.applymap(fun)
applica la funzione fun a tutti i valori in df e restituisce un altro oggetto di tipo DataFrame.
End of explanation
for (index, record) in df.iterrows():
        print(str(index) + ' ' + record['state'])
Explanation: Come iterare i record di un data frame
for (index, record) in df.iterrows():
    do_something
End of explanation
df.to_csv('./output.csv', index = False)
Explanation: Scrivere un data frame su un file in formato csv
    df.to_csv(file_name, index=False|True)
End of explanation
df.registered_voters.plot(label="Registered voters", legend=True)
Explanation: Richiamare matplotlib da Pandas
End of explanation
<END_TASK>