Pandas-Daten-Binning (cut / qcut)

Daten-Binning (auch Bucketing genannt) ist der Prozess der Diskretisierung kontinuierlicher Variablen, der häufig in der Datenvorverarbeitung, im Feature Engineering und in der Datenanalyse verwendet wird.


cut gleichbreites Binning

cutTeile die Daten in Intervalle gleicher Breite auf.

Beispiel

import pandas as pd
import numpy as np

# Altersdaten erstellen
ages = pd.Series([5, 15, 25, 35, 45, 55, 65, 75, 85])

print("Originaldaten:")
print(ages.tolist())
print()

# Gleichbreites Binning (5 Intervalle)
bins = [0, 20, 40, 60, 80, 100]
labels = ["Kind", "Jugend", "Mittleren Alters", "Jungsenioren", "Senioren"]

age_bins = pd.cut(ages, bins=bins, labels=labels)
print("Ergebnis des gleichbreiten Binnings:")
print(age_bins)
print()

# Rechte Grenze einschließen
age_bins2 = pd.cut(ages, bins=4)
print("Automatisches Binning mit gleicher Breite:")
print(age_bins2)

Kategorien und Grenzen zurückgeben

Beispiel

import pandas as pd
import numpy as np

ages = pd.Series([5, 15, 25, 35, 45])

# Intervallindizes zurückgeben
result = pd.cut(ages, bins=4, labels=False)
print("Intervallindizes:")
print(result)
print()

# Intervallgrenzen zurückgeben
result = pd.cut(ages, bins=4, retbins=True)
print("Intervallgrenzen:")
print(result[1])

qcut Binning mit gleicher Häufigkeit

qcutTeilen Sie die Daten in Intervalle mit ungefähr derselben Anzahl von Datenpunkten auf.

Beispiel

import pandas as pd
import numpy as np

# Ungleichmäßig verteilte Daten
data = pd.Series([1, 1, 1, 2, 3, 4, 5, 10, 20, 30, 50, 100])

print("Originaldaten:")
print(data.tolist())
print()

# Binning mit gleicher Breite (kann zu ungleichmäßiger Verteilung führen)
cut_result = pd.cut(data, q=4)
print("Binning mit gleicher Breite:")
print(cut_result.value_counts())
print()

# Binning mit gleicher Häufigkeit (ungefähr dieselbe Anzahl von Datenpunkten pro Intervall)
qcut_result = pd.qcut(data, q=4)
print("Binning mit gleicher Häufigkeit:")
print(qcut_result.value_counts())

Quantile festlegen

Beispiel

import pandas as pd

data = pd.Series(range(1, 101))

# Nach festgelegten Quantilen aufteilen
result = pd.qcut(data, q=[0, 0.1, 0.3, 0.7, 0.9, 1])
print("Nach Quantilen aufgeteilt:")
print(result.value_counts().sort_index())

Übung: Datenanalyse

Beispiel

import pandas as pd
import numpy as np

# Kundenausgabendaten simulieren
np.random.seed(42)
customers = pd.DataFrame({
    "Kunden-ID": range(1, 101),
    "Ausgabenbetrag": np.random.exponential(500, 100) + 100
})

# In verschiedene Ausgabenstufen einteilen
customers["Spending level"] = pd.cut(
    customers["Spending amount"],
    bins=[0, 300, 500, 800, float("inf")],
    labels=["Niedrig", "Mittel", "Hoch", "VIP"]
)

# Kunden in jeder Stufe zählen
print("Verteilung der Ausgabenstufen:")
print(customers["Spending level"].value_counts())
print()

# Durchschnittliche Ausgaben pro Stufe berechnen
print("Durchschnittliche Ausgaben pro Stufe:")
print(customers.groupby("Spending level")["Spending amount"].mean().round(2))
Andere Erweiterungen