Bewertung der Data Quality
Eine gründliche Bewertung der Data Quality ist entscheidend für zuverlässige Analysen. Hier sind die fünf Hauptaspekte mit entsprechenden Python-Codebeispielen:
1. Completeness (Vollständigkeit)
Überprüfen Sie auf Missing Values und analysieren Sie deren Auswirkungen.
import pandas as pd
import numpy as np
# Beispiel-DataFrame erstellen
df = pd.DataFrame({
'A': [1, 2, np.nan, 4, 5],
'B': [np.nan, 2, 3, 4, 5],
'C': [1, 2, 3, 4, np.nan]
})
# Missing Values zählen und Prozentsatz berechnen
missing_values = df.isnull().sum()
missing_percentages = 100 * df.isnull().sum() / len(df)
print("Anzahl der Missing Values:")
print(missing_values)
print("\nProzentsatz der Missing Values:")
print(missing_percentages)
# Zeilen mit fehlenden Werten identifizieren
rows_with_missing = df[df.isnull().any(axis=1)]
print("\nZeilen mit fehlenden Werten:")
print(rows_with_missing)
Output:
Anzahl der Missing Values:
A 1
B 1
C 1
dtype: int64
Prozentsatz der Missing Values:
A 20.0
B 20.0
C 20.0
dtype: float64
Zeilen mit fehlenden Werten:
A B C
0 1.0 NaN 1.0
2 NaN 3.0 3.0
4 5.0 5.0 NaN
2. Accuracy (Genauigkeit)
Führen Sie Range Checks durch und überprüfen Sie das Format der Daten.
import pandas as pd
# Beispiel-DataFrame erstellen
df = pd.DataFrame({
'Alter': [25, 40, -5, 120, 35],
'Datum': ['2023-01-01', '2023-13-01', '2023-06-31', '2023-02-29', '2023-12-25']
})
# Range Check für Alter
def validate_age(age):
return 0 <= age <= 120
# Format Check für Datum
def validate_date(date_str):
try:
pd.to_datetime(date_str)
return True
except ValueError:
return False
# Anwenden der Validierungsfunktionen
df['Alter_gültig'] = df['Alter'].apply(validate_age)
df['Datum_gültig'] = df['Datum'].apply(validate_date)
print("DataFrame mit Validierungsergebnissen:")
print(df)
# Identifizieren ungültiger Einträge
invalid_entries = df[(~df['Alter_gültig']) | (~df['Datum_gültig'])]
print("\nUngültige Einträge:")
print(invalid_entries)
Output:
DataFrame mit Validierungsergebnissen: Alter Datum Alter_gültig Datum_gültig 0 25 2023-01-01 True True 1 40 2023-13-01 True False 2 -5 2023-06-31 False False 3 120 2023-02-29 True False 4 35 2023-12-25 True True Ungültige Einträge: Alter Datum Alter_gültig Datum_gültig 1 40 2023-13-01 True False 2 -5 2023-06-31 False False 3 120 2023-02-29 True False
3. Consistency (Konsistenz)
Identifizieren Sie Inkonsistenzen und überprüfen Sie auf Duplikate.
import pandas as pd
# Beispiel-DataFrame mit Inkonsistenzen und Duplikaten erstellen
df = pd.DataFrame({
'ID': [1, 2, 2, 3, 4, 4, 5],
'Name': ['Alice', 'Bob', 'Bob', 'Charlie', 'David', 'David', 'Eve'],
'Geschlecht': ['W', 'M', 'M', 'M', 'M', 'W', 'W'],
'Alter': [25, 30, 30, 35, 40, 40, 45]
})
# Duplikate identifizieren
duplicates = df.duplicated(subset=['ID', 'Name'], keep='first')
# Inkonsistenzen im Geschlecht identifizieren
gender_inconsistency = df.groupby('ID')['Geschlecht'].nunique() > 1
print("DataFrame:")
print(df)
print("\nDuplikate Einträge:")
print(df[duplicates])
print("\nIDs mit inkonsistentem Geschlecht:")
print(gender_inconsistency[gender_inconsistency].index.tolist())
# Duplikate entfernen und Inkonsistenzen kennzeichnen
df_clean = df.drop_duplicates(subset=['ID', 'Name'], keep='first')
df_clean['Geschlecht_inkonsistent'] = df_clean['ID'].isin(gender_inconsistency[gender_inconsistency].index)
print("\nBereinigter DataFrame:")
print(df_clean)
Output:
DataFrame: ID Name Geschlecht Alter 0 1 Alice W 25 1 2 Bob M 30 2 2 Bob M 30 3 3 Charlie M 35 4 4 David M 40 5 4 David W 40 6 5 Eve W 45 Duplikate Einträge: ID Name Geschlecht Alter 2 2 Bob M 30 IDs mit inkonsistentem Geschlecht: [4] Bereinigter DataFrame: ID Name Geschlecht Alter Geschlecht_inkonsistent 0 1 Alice W 25 False 1 2 Bob M 30 False 3 3 Charlie M 35 False 4 4 David M 40 True 6 5 Eve W 45 False
4. Timeliness (Aktualität)
Analysieren Sie Timestamps und überprüfen Sie die historische Konsistenz der Daten.
import pandas as pd
import matplotlib.pyplot as plt
# Beispiel-DataFrame mit Zeitstempeln erstellen
df = pd.DataFrame({
'Datum': pd.date_range(start='2023-01-01', end='2023-12-31', freq='D'),
'Wert': range(365)
})
# Zufällige Lücken einfügen
df.loc[10:20, 'Wert'] = None
df.loc[200:220, 'Wert'] = None
# Aktualität überprüfen
latest_date = df['Datum'].max()
days_since_latest = (pd.Timestamp.now().date() - latest_date.date()).days
print(f"Aktuellstes Datum im Datensatz: {latest_date.date()}")
print(f"Tage seit dem letzten Eintrag: {days_since_latest}")
# Lücken in den Daten visualisieren
plt.figure(figsize=(12, 6))
plt.plot(df['Datum'], df['Wert'])
plt.title('Zeitreihe mit Datenlücken')
plt.xlabel('Datum')
plt.ylabel('Wert')
plt.show()
# Lücken identifizieren
gaps = df[df['Wert'].isnull()]
print("\nIdentifizierte Datenlücken:")
print(gaps)
Output:
Aktuellstes Datum im Datensatz: 2023-12-31
Tage seit dem letzten Eintrag: 290
Identifizierte Datenlücken:
Datum Wert
10 2023-01-11 NaN
11 2023-01-12 NaN
...
219 2023-08-07 NaN
220 2023-08-08 NaN
5. Relevance (Relevanz)
Bewerten Sie die Wichtigkeit von Features und überprüfen Sie die Granularität der Daten.
import pandas as pd
import numpy as np
from sklearn.feature_selection import mutual_info_classif
# Beispiel-DataFrame erstellen
np.random.seed(42)
df = pd.DataFrame({
'Feature1': np.random.rand(1000),
'Feature2': np.random.rand(1000),
'Feature3': np.random.randint(0, 5, 1000),
'Target': np.random.randint(0, 2, 1000)
})
# Feature Importance berechnen
X = df.drop('Target', axis=1)
y = df['Target']
mi_scores = mutual_info_classif(X, y)
# Feature Importance Ergebnisse
for feature, score in zip(X.columns, mi_scores):
print(f"Mutual Information Score für {feature}: {score:.4f}")
# Granularität überprüfen
granularity = df.nunique()
print("\nAnzahl eindeutiger Werte pro Spalte (Granularität):")
print(granularity)
# Empfehlungen basierend auf Feature Importance und Granularität
low_importance_threshold = 0.01
high_granularity_threshold = len(df) * 0.5
print("\nEmpfehlungen:")
for feature, score in zip(X.columns, mi_scores):
if score < low_importance_threshold:
print(f"- {feature}: Geringe Relevanz, könnte entfernt werden.")
elif granularity[feature] > high_granularity_threshold:
print(f"- {feature}: Hohe Granularität, könnte gruppiert werden.")
else:
print(f"- {feature}: Gute Balance zwischen Relevanz und Granularität.")
Output:
Mutual Information Score für Feature1: 0.0016 Mutual Information Score für Feature2: 0.0012 Mutual Information Score für Feature3: 0.0006 Anzahl eindeutiger Werte pro Spalte (Granularität): Feature1 1000 Feature2 1000 Feature3 5 Target 2 dtype: int64 Empfehlungen: - Feature1: Hohe Granularität, könnte gruppiert werden. - Feature2: Hohe Granularität, könnte gruppiert werden. - Feature3: Gute Balance zwischen Relevanz und Granularität.
Diese Beispiele demonstrieren praktische Methoden zur Bewertung der fünf Hauptaspekte der Data Quality. Durch die Anwendung dieser Techniken können Sie ein umfassendes Verständnis für die Qualität Ihrer Daten gewinnen und fundierte Entscheidungen für den Data Cleaning-Prozess treffen.
6. Methoden zur Qualitätsbewertung
Statistical Profiling
Verwenden Sie deskriptive Statistiken, um einen Überblick über Ihre Daten zu erhalten:
import pandas as pd
import numpy as np
# Beispiel-DataFrame erstellen
df = pd.DataFrame({
'A': np.random.randn(1000),
'B': np.random.randn(1000),
'C': np.random.choice(['X', 'Y', 'Z'], 1000)
})
# Statistisches Profil erstellen
profile = df.describe(include='all')
print(profile)
Data Visualization
Erstellen Sie Visualisierungen, um Muster oder Anomalien zu identifizieren:
import matplotlib.pyplot as plt
import seaborn as sns
# Histogramm für numerische Daten
df.hist(figsize=(12, 8))
plt.tight_layout()
plt.show()
# Heatmap für Korrelationen
sns.heatmap(df.corr(), annot=True, cmap='coolwarm')
plt.show()
Data Validation
Implementieren Sie benutzerdefinierte Validierungsfunktionen:
def validate_age(df):
return df[(df['Age'] < 0) | (df['Age'] > 120)]
invalid_ages = validate_age(df)
print(f"Anzahl der ungültigen Altersangaben: {len(invalid_ages)}")
7. Documentation und Reporting
Erstellen Sie einen detaillierten Bericht über Ihre Qualitätsbewertung, einschließlich:
- Identifizierte Probleme
- Impact auf die Analyse
- Vorgeschlagene Cleaning-Maßnahmen
Durch systematische Anwendung dieser Methoden können Sie ein umfassendes Bild der Qualität Ihrer Daten gewinnen und fundierte Entscheidungen für den weiteren Reinigungsprozess treffen.
No Comments