Pandas Praxis der E-Commerce-Datenanalyse
Dieser Abschnitt verwendet einen vollständigen E-Commerce-Datenanalysefall, um verschiedene Pandas-Funktionen umfassend für die Datenanalyse anzuwenden.
Fallübersicht
Analysiere Bestelldaten einer E-Commerce-Plattform, einschließlich Umsatztrends, Produktleistung, Kundenanalyse und anderer Dimensionen.
Datenvorbereitung
Beispiel
import pandas as pd
import numpy as np
# Simuliere E-Commerce-Bestelldaten
np.random.seed(42)
n_orders = 1000
orders = pd.DataFrame({
"Order ID": range(1, n_orders + 1),
"Customer ID": np.random.randint(100, 200, n_orders),
"Product ID": np.random.randint(1, 20, n_orders),
"Order Date": pd.date_range("2024-01-01", periods=n_orders, freq="30min"),
"Quantity": np.random.randint(1, 5, n_orders),
"Unit Price": np.random.uniform(10, 500, n_orders).round(2)
})
# Berechne Bestellbetrag
orders["Order Amount"] = (orders["Quantity"] * orders["Unit Price"]).round(2)
print("Überblick über die Bestelldaten:")
print(orders.head(10))
print(f"\nDatenmenge: {len(orders)} Datensätze")
import numpy as np
# Simuliere E-Commerce-Bestelldaten
np.random.seed(42)
n_orders = 1000
orders = pd.DataFrame({
"Order ID": range(1, n_orders + 1),
"Customer ID": np.random.randint(100, 200, n_orders),
"Product ID": np.random.randint(1, 20, n_orders),
"Order Date": pd.date_range("2024-01-01", periods=n_orders, freq="30min"),
"Quantity": np.random.randint(1, 5, n_orders),
"Unit Price": np.random.uniform(10, 500, n_orders).round(2)
})
# Berechne Bestellbetrag
orders["Order Amount"] = (orders["Quantity"] * orders["Unit Price"]).round(2)
print("Überblick über die Bestelldaten:")
print(orders.head(10))
print(f"\nDatenmenge: {len(orders)} Datensätze")
Datenvorverarbeitung
Beispiel
# Datumsmerkmale extrahieren
orders["Date"] = orders["Order Date"].dt.date
orders["Hour"] = orders["Order Date"].dt.hour
orders["Weekday"] = orders["Order Date"].dt.day_name()
orders["Month"] = orders["Order Date"].dt.month
print("Nach dem Hinzufügen von Zeitmerkmalen:")
print(orders.head())
print()
# Prüfung auf fehlende Werte
print("Prüfung auf fehlende Werte:")
print(orders.isnull().sum())
orders["Date"] = orders["Order Date"].dt.date
orders["Hour"] = orders["Order Date"].dt.hour
orders["Weekday"] = orders["Order Date"].dt.day_name()
orders["Month"] = orders["Order Date"].dt.month
print("Nach dem Hinzufügen von Zeitmerkmalen:")
print(orders.head())
print()
# Prüfung auf fehlende Werte
print("Prüfung auf fehlende Werte:")
print(orders.isnull().sum())
Verkaufsanalyse
Gesamte Verkaufssituation
Beispiel
# Gesamte Verkaufsmetriken
print("=== Gesamte Verkaufssituation ==="\n")
print(f"Bestellungen insgesamt: {len(orders):,}")
print(f"Gesamtumsatz: ¥{orders['Order Amount'].sum():,.2f}")
print(f"Durchschnittlicher Bestellbetrag: ¥{orders['Order Amount'].mean():,.2f}")
print(f"Median-Bestellbetrag: ¥{orders['Order Amount'].median():,.2f}")
print()
# Monatliche Statistik
monthly = orders.groupby("Month").agg({
"Order ID": "count",
"Order Amount": "sum",
"Customer ID": "nunique"
}).rename(columns={
"Order ID": "Order Count",
"Order Amount": "Sales Amount",
"Customer ID": "Customer Count"
})
print("Monatlicher Umsatztrend:")
print(monthly)
print("=== Gesamte Verkaufssituation ==="\n")
print(f"Bestellungen insgesamt: {len(orders):,}")
print(f"Gesamtumsatz: ¥{orders['Order Amount'].sum():,.2f}")
print(f"Durchschnittlicher Bestellbetrag: ¥{orders['Order Amount'].mean():,.2f}")
print(f"Median-Bestellbetrag: ¥{orders['Order Amount'].median():,.2f}")
print()
# Monatliche Statistik
monthly = orders.groupby("Month").agg({
"Order ID": "count",
"Order Amount": "sum",
"Customer ID": "nunique"
}).rename(columns={
"Order ID": "Order Count",
"Order Amount": "Sales Amount",
"Customer ID": "Customer Count"
})
print("Monatlicher Umsatztrend:")
print(monthly)
Produktanalyse
Beispiel
# Produktverkaufsrangliste
product_sales = orders.groupby("Product ID").agg({
"Order ID": "count",
"Quantity": "sum",
"Order Amount": "sum"
}).rename(columns={
"Order ID": "Order Count",
"Quantity": "Sales Volume",
"Order Amount": "Sales Amount"
}).sort_values("Sales Amount", ascending=False)
print("=== Top 10 Produktverkaufsrangliste ==="\n")
print(product_sales.head(10))
print()
# Meistverkauftes Produkt
print(f"Meistverkauftes Produkt: Produkt {product_sales.index)
print(f"Verkaufsbetrag: ¥{product_sales.iloc)
product_sales = orders.groupby("Product ID").agg({
"Order ID": "count",
"Quantity": "sum",
"Order Amount": "sum"
}).rename(columns={
"Order ID": "Order Count",
"Quantity": "Sales Volume",
"Order Amount": "Sales Amount"
}).sort_values("Sales Amount", ascending=False)
print("=== Top 10 Produktverkaufsrangliste ==="\n")
print(product_sales.head(10))
print()
# Meistverkauftes Produkt
print(f"Meistverkauftes Produkt: Produkt {product_sales.index)
print(f"Verkaufsbetrag: ¥{product_sales.iloc)
Kundenanalyse
Beispiel
# Kundenausgabenanalyse
customer_sales = orders.groupby("Customer ID").agg({
"Order ID": "count",
"Order Amount": "sum"
}).rename(columns={
"Order ID": "Order Count",
"Order Amount": "Total Spending"
})
print("=== Kundenanalyse ==="\n")
print(f"Anzahl aktiver Kunden: {len(customer_sales)}")
print(f"Durchschnittliche Bestellungen pro Kunde: {customer_sales['Order Count'].mean():.1f}")
print(f"Durchschnittliche Ausgaben pro Kunde: ¥{customer_sales['Total Spending'].mean():,.2f}")
print()
# Kundensegmentierung
customer_sales["Segment"] = pd.cut(
customer_sales["Total Spending"],
bins=[0, 1000, 5000, 10000, float("inf")],
labels=["Standard", "Silber", "Gold", "VIP"]
)
print("Statistiken zu Kundensegmenten:")
print(customer_sales["Segment"].value_counts())
customer_sales = orders.groupby("Customer ID").agg({
"Order ID": "count",
"Order Amount": "sum"
}).rename(columns={
"Order ID": "Order Count",
"Order Amount": "Total Spending"
})
print("=== Kundenanalyse ==="\n")
print(f"Anzahl aktiver Kunden: {len(customer_sales)}")
print(f"Durchschnittliche Bestellungen pro Kunde: {customer_sales['Order Count'].mean():.1f}")
print(f"Durchschnittliche Ausgaben pro Kunde: ¥{customer_sales['Total Spending'].mean():,.2f}")
print()
# Kundensegmentierung
customer_sales["Segment"] = pd.cut(
customer_sales["Total Spending"],
bins=[0, 1000, 5000, 10000, float("inf")],
labels=["Standard", "Silber", "Gold", "VIP"]
)
print("Statistiken zu Kundensegmenten:")
print(customer_sales["Segment"].value_counts())
Zeitanalyse
Beispiel
# Analyse nach Zeitraum
hourly = orders.groupby("Hour")["Order Amount"].sum()
print("=== Umsatzanalyse nach Zeitraum ==="\n")
print(f"Stunde mit dem höchsten Umsatz: {hourly.idxmax()} Uhr")
print(f"Umsatz in diesem Zeitraum: ¥{hourly.max():,.2f}")
print()
# Analyse nach Wochentag
weekday = orders.groupby("Weekday")["Order Amount"].sum().reindex([
"Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"
])
print("Umsatz nach Wochentag:")
for day, amount in weekday.items():
print(f"{day}: ¥{amount:,.2f}")
hourly = orders.groupby("Hour")["Order Amount"].sum()
print("=== Umsatzanalyse nach Zeitraum ==="\n")
print(f"Stunde mit dem höchsten Umsatz: {hourly.idxmax()} Uhr")
print(f"Umsatz in diesem Zeitraum: ¥{hourly.max():,.2f}")
print()
# Analyse nach Wochentag
weekday = orders.groupby("Weekday")["Order Amount"].sum().reindex([
"Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"
])
print("Umsatz nach Wochentag:")
for day, amount in weekday.items():
print(f"{day}: ¥{amount:,.2f}")
Analysezusammenfassung
Beispiel
print("""
=== Zusammenfassung der E-Commerce-Datenanalyse ===
1. Umsatzübersicht
- Gesamtbestellungen: {0}
- Gesamtumsatz: ¥{1:,.2f}
- Durchschnittlicher Bestellwert: ¥{2:.2f}
2. Produktleistung
- Meistverkauftes Produkt: Produkt {3}
- Die Umsatzverteilung der Produkte ist ungleichmäßig, wobei die Top-Produkte erheblich zum Umsatz beitragen
3. Kundenerkenntnisse
- Aktive Kunden: {4} Personen
- Empfehlung: Priorisierung der Bindung von High-Value-Kunden
4. Zeitmuster
- Verkaufsspitze gegen {5} Uhr
- Marketingstrategien können basierend auf Spitzenzeiten angepasst werden
5. Optimierungsvorschläge
- 1) Lagerbestand und Promotion für meistverkaufte Produkte erhöhen
- 2) Personalisierte Services für High-Value-Kunden bereitstellen
- 3) Kundenservice-Personal während der Spitzenverkaufszeiten aufstocken
""".format(
len(orders),
orders["Order Amount"].sum(),
orders["Order Amount"].mean(),
product_sales.index[0],
len(customer_sales),
hourly.idxmax()
))
=== Zusammenfassung der E-Commerce-Datenanalyse ===
1. Umsatzübersicht
- Gesamtbestellungen: {0}
- Gesamtumsatz: ¥{1:,.2f}
- Durchschnittlicher Bestellwert: ¥{2:.2f}
2. Produktleistung
- Meistverkauftes Produkt: Produkt {3}
- Die Umsatzverteilung der Produkte ist ungleichmäßig, wobei die Top-Produkte erheblich zum Umsatz beitragen
3. Kundenerkenntnisse
- Aktive Kunden: {4} Personen
- Empfehlung: Priorisierung der Bindung von High-Value-Kunden
4. Zeitmuster
- Verkaufsspitze gegen {5} Uhr
- Marketingstrategien können basierend auf Spitzenzeiten angepasst werden
5. Optimierungsvorschläge
- 1) Lagerbestand und Promotion für meistverkaufte Produkte erhöhen
- 2) Personalisierte Services für High-Value-Kunden bereitstellen
- 3) Kundenservice-Personal während der Spitzenverkaufszeiten aufstocken
""".format(
len(orders),
orders["Order Amount"].sum(),
orders["Order Amount"].mean(),
product_sales.index[0],
len(customer_sales),
hourly.idxmax()
))