<jupyter_start><jupyter_text>Questa esercitazione si articola in tre parti.1. Nella prima, leggiamo il file CSV rappresentativo dei passeggeri del dataset Titanic mediante Pandas, e salviamo i suoi contenuti all'interno di un oggetto di classe `DataFrame`.2. Nella seconda, individuiamo le feature caratterizzate da un valore *univoco* per ciascun dato (come, ad esempio, il nome del passeggero).3. Nella terza ed ultima, mostriamo a schermo istogramma, mediana, deviazione standard e range interquartile per ciascuna delle feature numeriche presenti nel dataframe.  Lettura dei datiSalviamo i dati in un dataframe mediante la funzione `read_csv`, e mostriamo le prime cinque righe.<jupyter_code>df = pd.read_csv('../dataset/train.csv')
df.head()<jupyter_output><empty_output><jupyter_text>Notiamo che la colonna `PassengerId` può essere usata come indice. Usiamo in tal senso la funzione [`set_index`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.set_index.html).<jupyter_code>df.set_index('PassengerId', inplace=True)
df.head()
feature = list(df.columns)
feature_i_ma = df[df.columns[2]]
len(set(feature_i_ma)) == len(feature_i_ma)<jupyter_output><empty_output><jupyter_text>Individuazione delle feature univocheCreiamo la funzione `get_all_unique(df)` che, dato in ingresso il dataframe `df`, restituisce tutte le feature che assumono un valore univoco per ogni campione (ad esempio, il nome del passeggero).<jupyter_code>def get_all_unique(df):
    return [True if len(set(df[col])) == len(df[col]) else False for col in df.columns]

uniques = get_all_unique(df)
print(uniques)<jupyter_output>[False, False, True, False, False, False, False, False, False, False, False]<jupyter_text>Statistiche per le feature numericheScriviamo adesso una serie di istruzioni (**non** una funzione) per individuare tutte le feature numeriche presenti nel dataframe. Per ciascuna di queste, mostriamo a schermo l'istogramma, e calcoliamo mediana, deviazione standard e range interquartile. Per quest'ultimo, usiamo la funzione [`iqr`](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.iqr.html) di `scipy.stats`.<jupyter_code>for i in range(len(df.dtypes)):
    if df.dtypes[i] == 'int64' or df.dtypes[i] == 'float64':
        col = df.columns[i]
        plt.hist(df[col])
        plt.show()
        print('Feature: {} - Mediana: {} - Deviazione standard: {} - Range interquartile: {}'
              .format(
                  col,
                  round(np.median(df[col]), 2),
                  round(np.std(df[col]), 2),
                  round(iqr(df[col]), 2)))<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10970948012232416, 'fraction_numerical': 0.004204892966360856, 'mean_word_length': 4.777041942604857, 'pattern_counts': {'":': 0, '<': 16, '<?xml version=': 0, '>': 16, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '381919', 'license': 'MIT', 'n_tokens_mistral': 917, 'n_tokens_neox': 890, 'n_words': 247, 'path': 'docs/notebooks/base/esercizi/esercizi_10.ipynb', 'repo_name': 'anhelus/python-data-science', 'size': '2616'}