Dati mancanti?

Apr 20 2023
Conosciamo tutti quella sensazione: finalmente metti le mani su un succoso set di dati, pronto a scoprire alcune intuizioni nascoste, solo per scoprire che è pieno di valori mancanti. È abbastanza per far venire voglia di strapparsi i capelli anche all'analista più esperto! Fortunatamente per noi, esiste un potente strumento nell'arsenale di analisi dei dati che può aiutare a superare questo ostacolo: l'imputazione iterativa.

Conosciamo tutti quella sensazione: finalmente metti le mani su un succoso set di dati, pronto a scoprire alcune intuizioni nascoste, solo per scoprire che è pieno di valori mancanti. È abbastanza per far venire voglia di strapparsi i capelli anche all'analista più esperto! Fortunatamente per noi, esiste un potente strumento nell'arsenale di analisi dei dati che può aiutare a superare questo ostacolo: l'imputazione iterativa.

L'assegnazione iterativa è il processo di riempimento dei punti dati mancanti con stime basate sui dati disponibili e può essere un punto di svolta per l'analisi.

In questa guida pratica per principianti, ci immergeremo in profondità in una delle tecniche di imputazione più efficaci e facili da usare in circolazione: l' imputazione iterativa . Che tu sia un professionista esperto o che abbia appena iniziato il tuo viaggio nell'analisi dei dati, questa guida ti fornirà le conoscenze e gli strumenti necessari per migliorare la tua analisi e ottenere il massimo dai tuoi dati.

In questo tutorial lavoreremo con un set di dati denominato set di dati California Housing Prices . Questo set di dati è stato creato da Kaggle per aiutare le persone a conoscere gli algoritmi di Machine Learning. Tuttavia, abbiamo apportato alcune modifiche al set di dati per soddisfare le nostre esigenze per questo tutorial. Se vuoi seguire questo tutorial e utilizzare lo stesso set di dati che stiamo utilizzando, puoi scaricare la versione modificata da questo link .

# Packages
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import random

# Read Data
data1 = pd.read_csv("California_Housing_Data_Part1.csv")
print(data1.head(5))

      
                

# About 300 random indices were chosen
indices = random.sample(range(len(data1)), 300)

# Indices were utilized to replace values with NaN
data1.loc[indices, 'median_house_value'] = np.nan

# Check Null values
data1.info()

      
                

# Standardize dataset
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
data1[data1.columns] = scaler.fit_transform(data1[data1.columns])
print(data1.head(5))

      
                

# Visualization - Before Imputation

# Bar Plot for Missing Values in each column
plt.figure(figsize=(15, 8))

sns.heatmap(data1.isnull(), cmap='viridis', cbar_kws={'ticks': [0, 1]}, vmin=0, vmax=1)
plt.title('Heat Map Describing Missing Data')
plt.xlabel('Dataset Columns')
plt.ylabel('Observation/Index values')
plt.show()

# Line Plot for Missing Values Column
plt.figure(figsize=(15, 8))
plt.plot(data1['median_house_value'], label='Median House Value', linewidth=2, color = 'Green')
plt.xlabel('Index Values')
plt.ylabel('Median House Value')
plt.title('Line Plot Describing Median House Data')
plt.show()

      
                
For the heatmap, a value of 1 (Yellow) indicates a Null value, while a value of 0 (Purple) indicates Non-Null.

L'assegnazione iterativa è un metodo avanzato per inserire i valori mancanti in un set di dati creando un modello basato sui valori non mancanti e quindi utilizzando tale modello per fare previsioni per i valori mancanti. Per impostazione predefinita, Iterative Imputation utilizza lo stimatore "BayesianRidge" per creare questo modello, ma è anche possibile utilizzare altri stimatori come Regressione lineare, ElasticNet e altri. Controlla la documentazione !

# Iterative Imputer from Scikit-learn
from sklearn.impute import IterativeImputer

# Setup the Imputer and perform Imputation
imputer = IterativeImputer()
data1[data1.columns] = imputer.fit_transform(data1[data1.columns])
data1.info()

      
                

Ma questi nuovi valori sono appropriati? Hanno senso secondo i dati? Eseguiamo la visualizzazione ancora una volta per controllare!

# Visualization - After Imputation

# Bar Plot for Missing Values in each column
plt.figure(figsize=(15, 8))
sns.heatmap(data1.isnull(), cmap='viridis', cbar_kws={'ticks': [0, 1]}, vmin=0, vmax=1)
plt.title('Heat Map Describing Missing Data')
plt.xlabel('Dataset Columns')
plt.ylabel('Observation/Index values')
plt.show()

# Line Plot for Missing Values Column
plt.figure(figsize=(15, 8))
plt.plot(data1['median_house_value'], label='Median House Value', linewidth=2, color = 'Green')
plt.xlabel('Index Values')
plt.ylabel('Median House Value')
plt.title('Line Plot Describing Median House Data')
plt.show()

      
                
For the heatmap, a value of 1 (Yellow) indicates a Null value, while a value of 0 (Purple) indicates Non-Null.

Il codice sorgente può essere trovato qui .