Pandas cut() vs qcut() Funktionen

Zeeshan Afridi 21 Juni 2023
  1. Pandas cut() Funktion
  2. Pandas qcut() Funktion
  3. Unterschied zwischen den Funktionen cut() und qcut()
  4. Abschluss
Pandas cut() vs qcut() Funktionen

Das Binden kontinuierlicher numerischer Daten in verschiedene Bereiche für zusätzliche Analysen ist häufig nützlich, wenn man mit solchen Daten umgeht. Binning kann auch als Bucketing, diskretes Binning, Diskretisierung oder Quantisierung bezeichnet werden.

Pandas cut() Funktion

Die Array-Elemente werden mit der Pandas-Funktion cut() in verschiedene Bins aufgeteilt. Die cut()-Funktion wird hauptsächlich für die statistische Analyse von Skalardaten verwendet.

Syntax:

cut(
    x,
    bins,
    right=True,
    labels=None,
    retbins=False,
    precision=3,
    include_lowest=False,
    duplicates="raise",
)

Pandas qcut() Funktion

qcut() ist laut der Beschreibung der Pandas eine Quantil-basierte Diskretisierungsfunktion. Das bedeutet, dass qcut sich bemüht, aus den zugrunde liegenden Daten gleichgroße Bins zu erstellen. Anstatt die tatsächlichen numerischen Kanten der Klassen zu verwenden, bestimmt die Funktion sie anhand von Perzentilen, je nachdem, wie die Daten verteilt sind.

Syntax:

pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates="raise")

Unterschied zwischen den Funktionen cut() und qcut()

Kurz gesagt, ist der Hauptunterschied zwischen cut() und qcut(). Verwenden Sie qcut(), um sicherzustellen, dass die Artikel in Ihren Behältern gleichmäßig verteilt sind, und verwenden Sie cut(), um Ihre eigenen benutzerdefinierten numerischen Behälterbereiche zu erstellen.

Wir werden diesen Unterschied in dem unten angegebenen Beispiel lernen.

Codebeispiel:

# import libraries
import numpy as np
import pandas as pd

# create a data frame
df = pd.DataFrame(
    {
        "column_x": np.random.randint(1, 50, size=50),
        "column_y": np.random.randint(20, 100, size=50),
        "column_z": np.random.random(size=50).round(2),
    }
)
df.head()

Ausgang:

      column_x  column_y  column_z
0         6        68      0.70
1        30        83      0.50
2        35        64      0.41
3        28        98      0.73
4         5        24      0.79

In den ersten 2-Spalten befinden sich Zahlen im Bereich von 1 bis 50 bzw. 20 bis 100. Floats in der dritten Spalte reichen von 0 bis 1, und wir haben diese Werte zufällig mithilfe von numpy-Routinen generiert.

Da wir nun wissen, dass die Funktion cut() den gesamten Wertebereich in kleine Bins verteilt, wird der von jedem Bin abgedeckte Bereich gleich sein. Als Ergebnis weisen wir der ersten Spalte (Spalte x) verschiedene ganze Zahlen zwischen 1 und 50 zu. Lassen Sie uns zuerst die niedrigsten und höchsten Werte dieser Spalte überprüfen.

Codebeispiel:

df.column_x.max(), df.column_x.min()

Ausgang:

(49, 3)

Wenn wir diese Spalte beispielsweise in 5 gleiche Teile teilen, erhalten wir die Größe jedes Behälters als 9.2, wie im Folgenden dargestellt.

$$
(49 - 3) / 5 = 9,2
$$

Dieser Binning-Prozess wird von der Funktion cut() durchgeführt, die jeden Wert in den entsprechenden Bin legt.

Codebeispiel:

df["column_x_binned"] = pd.cut(df.column_x, bins=5)
df.column_x_binned.value_counts()

Ausgang:

(21.4, 30.6]     16
(39.8, 49.0]     14
(12.2, 21.4]      8
(30.6, 39.8]      6
(2.954, 12.2]     6

Wie Sie sehen können, ist jeder Behälter bis auf den kleinsten genau 9,2 Zoll groß. Die unteren Grenzen beinhalten nichts.

Dazu muss die Untergrenze des kleinsten Bins etwas kleiner als der niedrigste Wert 3 sein.

Durch manuelles Festlegen der Bin-Grenzen können Sie das Aussehen der Bins ändern. Das Argument bins erhält die Kantenwerte als Liste.

Codebeispiel:

pd.cut(df.column_x, bins=[0, 10, 40, 50]).value_counts()

Ausgang:

(10, 40]    33
(40, 50]    13
(0, 10]      4

Standardmäßig sind die rechten Kanten inklusive. Dies kann jedoch geändert werden.

Codebeispiel:

pd.cut(df.column_x, bins=[0, 10, 40, 50], right=False).value_counts()

Ausgang:

[10, 40)    33
[40, 50)    13
[0, 10)      4

Die Werte, die in die einzelnen Bins fallen Werte, die in die einzelnen Bins fallen, während Sie die Funktion cut() verwenden, liegen vollständig außerhalb Ihrer Kontrolle. Sie sind darauf beschränkt, die Behälterkanten zu definieren.

An dieser Stelle müssen Sie sich mit der Funktion qcut() vertraut machen. Die Werte können in Buckets aufgeteilt werden, sodass in jedem Bucket ungefähr die gleichen Werte vorhanden sind.

Codebeispiel:

pd.qcut(df.column_x, q=4).value_counts()

Ausgang:

(40.75, 49.0]    13
(19.5, 25.0]     13
(2.999, 19.5]    13
(25.0, 40.75]    11

Jeder unserer 4 Eimer enthält ungefähr die gleichen Werte. Die Buckets werden manchmal als Quartile bezeichnet, wenn es vier gibt.

Das erste Quartil enthält ein Viertel der Gesamtzahl der Werte, und die ersten beiden Buckets enthalten fünfzig Prozent und so weiter.

Wir kontrollieren die Bin-Ränder nicht mit der Funktion qcut(). Sie werden automatisch berechnet.

Stellen Sie sich eine Spalte vor, die 40 Werte (40 Zeilen) enthält, und wir möchten 4 Buckets haben. Der obere Bereich des ersten Eimers wird so gewählt, dass er 10 Werte enthält, beginnend mit dem kleinsten Wert.

Abschluss

Eine Menge kontinuierlicher Werte kann mit den Funktionen cut() oder qcut() in eine diskrete oder kategoriale Variable umgewandelt werden.

Die Funktion cut() betrifft den Wertebereich der Bins. Die Differenz zwischen der kleinsten und der größten Zahl wird verwendet, um den gesamten Bereich zu ermitteln.

Das gesamte Sortiment wird dann in die gewünschte Anzahl von Behältern unterteilt. Standardmäßig hat jeder Behälter ungefähr die gleiche Größe, und die einzige Variable ist der Abstand zwischen den Rändern des unteren und des oberen Behälters.

Die Menge der Werte in jedem Bin ist das Hauptaugenmerk der Funktion qcut(). Die Werte sind in absteigender Reihenfolge des Wertes angeordnet.

Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

Verwandter Artikel - Pandas Function