Datenanalyse-Skill-Beispiel
Ein Skill für Data-Science-Workflows und Analytics-Best-Practices.
Anwendungsfall
Dieser Skill hilft bei:
- Datenexploration und -bereinigung
- Statistische Analyse
- Best Practices für Visualisierung
- Python/Pandas-Workflows
Vollständige SKILL.md
markdown
---
name: Data Analysis Best Practices
description: Guide for exploratory data analysis and statistical workflows
version: 1.0.0
author: Data Science Community
platforms:
- claude-code
- codex
categories:
- data
- ai-ml
tags:
- python
- pandas
- statistics
- visualization
---
# Data Analysis Best Practices
## Workflow-Überblick
1. **Verstehen** - Die Frage definieren
2. **Erkunden** - Die Daten untersuchen
3. **Bereinigen** - Probleme behandeln
4. **Analysieren** - Methoden anwenden
5. **Visualisieren** - Erkenntnisse kommunizieren
6. **Dokumentieren** - Prozess aufzeichnen
## Datenexploration
### Erste Bewertung
\`\`\`python
import pandas as pd
def explore_dataset(df: pd.DataFrame) -> None:
"""Umfassende erste Datenexploration."""
print(f"Form: {df.shape}")
print(f"\nSpaltentypen:\n{df.dtypes}")
print(f"\nFehlende Werte:\n{df.isnull().sum()}")
print(f"\nGrundstatistiken:\n{df.describe()}")
print(f"\nBeispielzeilen:\n{df.head()}")
\`\`\`
### Spaltenanalyse
\`\`\`python
def analyze_column(df: pd.DataFrame, column: str) -> dict:
"""Detaillierte Analyse einer einzelnen Spalte."""
col = df[column]
analysis = {
'dtype': col.dtype,
'missing': col.isnull().sum(),
'unique': col.nunique(),
'memory': col.memory_usage(deep=True),
}
if pd.api.types.is_numeric_dtype(col):
analysis.update({
'mean': col.mean(),
'median': col.median(),
'std': col.std(),
'min': col.min(),
'max': col.max(),
})
return analysis
\`\`\`
## Datenbereinigung
### Fehlende Werte
\`\`\`python
# Strategie 1: Zeilen mit fehlenden Werten entfernen
df_clean = df.dropna()
# Strategie 2: Mit Mittelwert/Median/Modus füllen
df['column'] = df['column'].fillna(df['column'].median())
# Strategie 3: Vorwärts-/Rückwärtsfüllung (Zeitreihen)
df['column'] = df['column'].fillna(method='ffill')
# Strategie 4: Interpolation
df['column'] = df['column'].interpolate(method='linear')
\`\`\`
### Ausreißer
\`\`\`python
def detect_outliers_iqr(df: pd.DataFrame, column: str) -> pd.Series:
"""Ausreißer mit IQR-Methode erkennen."""
Q1 = df[column].quantile(0.25)
Q3 = df[column].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
return (df[column] < lower_bound) | (df[column] > upper_bound)
\`\`\`
## Statistische Analyse
### Hypothesentests
\`\`\`python
from scipy import stats
# T-Test zum Vergleich zweier Gruppen
t_stat, p_value = stats.ttest_ind(group_a, group_b)
# Chi-Quadrat-Test für kategoriale Daten
chi2, p_value, dof, expected = stats.chi2_contingency(contingency_table)
# Korrelation
correlation, p_value = stats.pearsonr(x, y)
\`\`\`
### Effektstärke
\`\`\`python
def cohens_d(group1, group2):
"""Cohens d Effektstärke berechnen."""
n1, n2 = len(group1), len(group2)
var1, var2 = group1.var(), group2.var()
pooled_std = np.sqrt(((n1-1)*var1 + (n2-1)*var2) / (n1+n2-2))
return (group1.mean() - group2.mean()) / pooled_std
\`\`\`
## Visualisierung
### Best Practices
1. **Klare Titel** - Angeben, was das Diagramm zeigt
2. **Beschriftete Achsen** - Einheiten einbeziehen
3. **Angemessener Diagrammtyp** - Daten mit Visual abgleichen
4. **Farbe mit Zweck** - Bedeutungsvoll, zugänglich
5. **Minimale Unordnung** - Unnötige Elemente entfernen
### Diagrammauswahl
| Datentyp | Beziehung | Diagrammtyp |
|-----------|--------------|------------|
| Kategorial | Verteilung | Balkendiagramm |
| Numerisch | Verteilung | Histogramm |
| Zwei numerische | Korrelation | Streudiagramm |
| Zeitreihe | Trend | Liniendiagramm |
| Teile eines Ganzen | Zusammensetzung | Kreis-/Gestapeltes Balken |
| Vergleich | Rangfolge | Horizontales Balken |
### Beispielvisualisierung
\`\`\`python
import matplotlib.pyplot as plt
import seaborn as sns
def create_distribution_plot(df: pd.DataFrame, column: str):
"""Eine saubere Verteilungsvisualisierung erstellen."""
fig, ax = plt.subplots(figsize=(10, 6))
sns.histplot(data=df, x=column, kde=True, ax=ax)
ax.set_title(f'Verteilung von {column}', fontsize=14, fontweight='bold')
ax.set_xlabel(column, fontsize=12)
ax.set_ylabel('Häufigkeit', fontsize=12)
# Zusammenfassende Statistiken hinzufügen
mean_val = df[column].mean()
median_val = df[column].median()
ax.axvline(mean_val, color='red', linestyle='--', label=f'Mittelwert: {mean_val:.2f}')
ax.axvline(median_val, color='green', linestyle='--', label=f'Median: {median_val:.2f}')
ax.legend()
plt.tight_layout()
return fig
\`\`\`
## Dokumentation
### Notebook-Struktur
1. **Titel und Überblick**
2. **Daten laden**
3. **Exploration**
4. **Bereinigung**
5. **Analyse**
6. **Schlussfolgerungen**
7. **Nächste Schritte**
### Code-Kommentare
\`\`\`python
# Gut: Erklärt WARUM
# Einträge vor 2020 entfernen, da die Datenqualität unzuverlässig ist
df = df[df['date'] >= '2020-01-01']
# Schlecht: Erklärt WAS (offensichtlich aus dem Code)
# Dataframe nach Datum filtern
df = df[df['date'] >= '2020-01-01']
\`\`\`
Nächste Schritte
- API-Integration - Backend-API-Skill
- Best Practices - Allgemeine Skill-Richtlinien