Come sostituire i dati mancanti in un dataset con Python

Per sostituire i dati mancanti in un dataset, uso le classi impute della libreria scikit learn del linguaggio python.

    Un esempio pratico

    Importo la libreria numpy

    import numpy as np

    Creo un dataset di prova contenente cinque esempi e due colonne

    X = [
    [10, np.nan],
    [np.nan, 'y'],
    [15, 'n'],
    [10, 'n'],
    [np.nan, np.nan],
    ]

    I dati np.nan sono i dati mancanti (nan significa not a number).

    Ora importo la classe ColumnTransformer di scikit-learn per modificare le colonne del dataset.

    from sklearn.compose import ColumnTransformer

    Poi importo la classe SimpleImputer per sostituire i dati sempre da scikit-learn.

    from sklearn.impute import SimpleImputer

    Creo un trasformatore da applicare alla prima colonna

    Uso la classe SimpleImputer con la strategia 'most frequent' per sostituire il dato mancante con il dato più frequente nella feature (prima colonna).

    tr = [
    ['nome qualsiasi', SimpleImputer(strategy='most_frequent'), [0]]
    ]
    ct=ColumnTransformer(tr, remainder='passthrough')

    Per applicare l'imputer a entrambe le colonne basta sostituire [0] con [0,1].

    Se non avessi indicato la strategia, la classe avrebbe usato di default la strategia della media aritmetica ossia strategy="mean".

    Nota. Altre strategie sono "median" (mediana) e "constant" che permette di sostituire il dato mancante con una determinata costante numerica o alfanumerica indicata nel parametro fill_value.

    Uso il trasformatore per modificare il dataset

    X = ct.fit_transform(X)

    Infine stampo il dataset dopo la modifica per vedere cos'è successo.

    print(X)

    Il risultato è il seguente:

    [[10 nan]
    [10 'y']
    [15 'n']
    [10 'n']
    [10 nan]]

    L'algoritmo ha sostituito il secondo e il quinto np.nan della prima colonna con il dato più frequente (10) della prima colonna.

    E per applicare imputer diversi a colonne differenti?

    Per applicare un imputer mi basta aggiungere un secondo metodo di trasformazione per ogni feature (colonna) o gruppi di feature.

    tr = [
    ['nome qualsiasi 1', SimpleImputer(strategy='median'), [0]],
    ['nome qualsiasi 2', SimpleImputer(strategy='most_frequent'), [1]],
    ['nome qualsiasi 3', SimpleImputer(strategy='constant'), fill_value='no', [2]]
    ]

    Ogni imputer deve essere separato dal successivo tramite una virgola.

    E così via.

     


     

    Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

    FacebookTwitterLinkedinLinkedin
    knowledge base

    Libri di approfondimento

    Scikit-learn

    1. Cos'è sklearn
    2. Come installare sklearn
    3. Un esempio di machine learning
    4. Come usare i datasets didattici di scikit-learn
    5. Come creare un dataset con Excel
    6. Come rappresentare le regioni decisionali
    7. La vettorizzazione delle categorie
    8. StandardScaler ( riduzione di scala )
    9. L'analisi degli errori del classificatore
    10. L'analisi degli errori del regressore
    11. Perceptron
    12. La regressione lineare
    13. La regressione logistica
    14. Decision Tree Classifier
    15. k-NN (k Nearest Neighbors)
    16. MLPClassifier