Brakujące dane?

Apr 20 2023
Wszyscy znamy to uczucie — w końcu dostajesz w swoje ręce soczysty zestaw danych, gotowy do odkrycia ukrytych spostrzeżeń, tylko po to, by odkryć, że jest pełen brakujących wartości. To wystarczy, aby nawet najbardziej doświadczony analityk chciał wyrywać sobie włosy z głowy! Na szczęście dla nas istnieje potężne narzędzie w arsenale analizy danych, które może pomóc pokonać tę przeszkodę — imputacja iteracyjna.

Wszyscy znamy to uczucie — w końcu dostajesz w swoje ręce soczysty zestaw danych, gotowy do odkrycia ukrytych spostrzeżeń, tylko po to, by odkryć, że jest pełen brakujących wartości. To wystarczy, aby nawet najbardziej doświadczony analityk chciał wyrywać sobie włosy z głowy! Na szczęście dla nas istnieje potężne narzędzie w arsenale analizy danych, które może pomóc pokonać tę przeszkodę — imputacja iteracyjna.

Imputacja iteracyjna to proces uzupełniania brakujących punktów danych szacunkami opartymi na dostępnych danych i może to zmienić reguły gry w analizie.

W tym praktycznym przewodniku dla początkujących zagłębimy się w jedną z najbardziej efektywnych i przyjaznych dla użytkownika technik imputacji — imputację iteracyjną . Niezależnie od tego, czy jesteś doświadczonym profesjonalistą, czy dopiero zaczynasz przygodę z analizą danych, ten przewodnik zapewni Ci wiedzę i narzędzia potrzebne do ulepszenia analizy i maksymalnego wykorzystania danych.

W tym samouczku będziemy pracować z zestawem danych o nazwie California Housing Prices . Ten zestaw danych został stworzony przez Kaggle, aby pomóc ludziom poznać algorytmy uczenia maszynowego. Wprowadziliśmy jednak pewne zmiany w zestawie danych, aby dostosować je do naszych potrzeb w tym samouczku. Jeśli chcesz postępować zgodnie z tym samouczkiem i korzystać z tego samego zestawu danych, którego używamy, możesz pobrać zmodyfikowaną wersję z tego łącza .

# 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.

Imputacja iteracyjna to zaawansowana metoda uzupełniania brakujących wartości w zbiorze danych poprzez tworzenie modelu na podstawie brakujących wartości, a następnie wykorzystanie tego modelu do przewidywania brakujących wartości. Domyślnie iteracyjna imputacja używa estymatora „BayesianRidge” do tworzenia tego modelu, ale możliwe jest również użycie innych estymatorów, takich jak regresja liniowa, ElasticNet i inne. Sprawdź dokumentację !

# 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()

      
                

Ale czy te nowe wartości są odpowiednie? Czy mają one sens w świetle danych? Wykonujemy wizualizację jeszcze raz dla sprawdzenia!

# 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.

Kod źródłowy można znaleźć tutaj .