Fonction Pandas pd.qcut()

Pandas 通用函数Fonctions courantes de Pandas


pd.qcut()est une fonction de la bibliothèque Pandas utilisée pourdiscrétisation par quantiles. Elle divise les données en un nombre égal d'échantillons, chaque classe contenant approximativement le même nombre de points de données.

etpd.cut()Contrairement à (la discrétisation à largeur égale),pd.qcut()elle garantit que chaque intervalle contient une quantité égale de données, ce qui la rend très adaptée au traitement de distributions asymétriques ou de cas où les données doivent être divisées selon leurs quantiles naturels.

Significations des mots: qcutDans ce nom, "q" représente "quantile" (Dividebitsnumber), ce qui signifie « découper » les données par quantiles.


Syntaxe de base et paramètres

pd.qcut()C'est une fonction de premier niveau de la bibliothèque Pandas, utilisée pour la discrétisation basée sur les quantiles.

Format de syntaxe

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

Description du paramètre

  • Paramètre: x
    • Type : Objet de type tableau, tel qu'une liste, une Series, un array, etc.
    • Description : Données numériques continues à discrétiser.
  • Paramètre: q
    • Type : Entier ou tableau de quantiles.
    • Description : Le nombre de classes ou les quantiles spécifiques. S'il s'agit d'un entier n, cela signifie diviser les données en n groupes de taille égale (chaque groupe contient environ 1/n des données). Cela peut aussi être un tableau de quantiles (par exemple, [0, 0.25, 0.5, 0.75, 1.0]).
  • Paramètre: labels
    • Type : tableau ou None.
    • Description : Spécifiez des étiquettes personnalisées pour chaque intervalle. Si elles ne sont pas spécifiées, la notation des quantiles (telle que "(0, 25]") est utilisée.
  • Paramètre: retbins
    • Type : valeur booléenne.
    • Description : SiTrue, le résultat renvoyé inclut les valeurs limites des classes. La valeur par défaut estFalse。
  • Paramètre: duplicates
    • Type: String ('raise' or 'drop').
    • Description: If the bin edges have duplicates (resulting in fewer intervals than the specified q value),'raise'raises an exception,'drop'deletes duplicate edges. Default is'raise'。

Description de la fonction

  • Valeur de retour: Renvoie une Series de type Categorical, chaque valeur correspondant à son groupe de quantiles.
  • Effet: Transforme les valeurs continues en catégories discrètes par quantiles, chaque catégorie contenant approximativement le même nombre d'échantillons.

Exemples

Maîtrisons à fond, à travers une série d'exemples du plus simple au plus complexe,pd.qcut()l'utilisation de.

Exemple 1 : Utilisation de base - Discrétisation par quartile

Exemple

import pandas as pd
import numpy as np

# 1. Créer des données numériques asymétriques (la plupart des valeurs sont petites)
np.random.seed(42)
data = np.random.exponential(scale=2, size=100)  # Données de distribution exponentielle

# Prendre un sous-ensemble des données pour la lisibilité
scores = pd.Series(data[:20])

print("=== Données originales ===")
print(scores.sort_values().values)

# 2. Utiliser pd.qcut() pour diviser les données en 4 groupes de quantiles (quartile)
result = pd.qcut(scores, q=4)
print("\n=== pd.qcut(scores, q=4) discrétisation par quartile ===)
print(result.value_counts().sort_index())

Sortie attendue :

=== 原始数据 ===
[ 0.078  0.29   0.68   0.91   1.03  1.06  1.23  1.3   1.5   1.69
  1.86  2.01  2.12  2.3   2.32  2.42  3.03  3.39  5.29  7.39]

=== pd.qcut(scores, q=4) 四分位分箱 ===
(0.0783, 1.547]     5
(1.547, 2.315]     5
(2.315, 3.151]     5
(3.151, 7.393]     5
dtype: int64

Explication du code :

  1. Pour des données distribuées exponentiellement, si une discrétisation à largeur égale est utilisée, la plupart des données se concentreront dans une seule classe.
  2. pd.qcut()Cela garantit que chaque classe contient approximativement le même nombre d'échantillons (ici 5, exactement 20/4).
  3. Les points de quantiles sont calculés à partir de la distribution réelle des données, plutôt que d'être répartis uniformément.

Exemple 2 : Spécification de quantiles personnalisés

Grâce à laqparamètre, vous pouvez spécifier des quantiles arbitraires, tels que les déciles, les percentiles, etc.

Exemple

import pandas as pd
import numpy as np

# 1. Créer les données
df = pd.DataFrame({
    'name': ['Student_' + str(i) for i in range(1, 11)],
    'score': [65, 78, 82, 55, 90, 72, 68, 85, 45, 95]
})

print("=== Données de scores des étudiants ===")
print(df)

# 2. Discrétiser selon des quantiles personnalisés [0, 0.3, 0.7, 1.0] représentant 30%, 70%, 100%
result = pd.qcut(df['score'], q=[0, 0.3, 0.7, 1.0])
print("\n=== Discrétisation par quantiles de 30% et 70% ===)
print(result)

# 3. Ajouter des étiquettes personnalisées
labels = ['Réussi', 'Bien', 'Excellent']
result_labeled = pd.qcut(df['score'], q=3, labels=labels)
print("\n=== Étiquettes personnalisées ajoutées ===)
print(result_labeled)

Sortie attendue :

=== 学生成绩数据 ===
      name  score
0  Student_1     65
1  Student_2     78
2  Student_3     82
3  Student_4     55
4  Student_5     90
5  Student_6     72
6  Student_7     68
7  Student_8     85
8  Student_9     45
9  Student_10    95

=== 按 30% 和 70% 分位数分箱 ===
0      (44.999, 65.8]
1      (65.8, 86.4]
2      (65.8, 86.4]
3      (44.999, 65.8]
4      (86.4, 95.0]
5      (65.8, 86. 86.4]
6      (0.0, 44.999]
7      (44.999, 65.8]
8      (0.0, 44.999]
9      (65.8, 86.4]
10     (65.8, 86.4]

Explication du code :

  • q=[0, 0.3, 0.7, 1.0]Trois intervalles sont définis : 0-30% (scores faibles), 30%-70% (moyens), et 70%-100% (scores élevés).
  • En utilisant lalabelsparamètre, vous pouvez nommer chaque intervalle au lieu d'utiliser la notation d'intervalle par défaut.

Exemple 3 : Comparaison entre cut et qcut

Grâce à la comparaison, vous pouvez mieux comprendrecutetqcutla différence.

Exemple

import pandas as pd
import numpy as np

# 1. Créer des données asymétriques (la plupart des valeurs sont petites)
data = pd.Series([1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 20, 30, 40, 50])

print("=== Données originales ===")
print(data.values)

# 2. Discrétisation à largeur égale (pd.cut)
print("\n=== pd.cut discrétisation à largeur égale ===)
cut_result = pd.cut(data, bins=4)
print(cut_result.value_counts().sort_index())

# 3. Discrétisation à fréquence égale (pd.qcut)
print("\n=== pd.qcut discrétisation à fréquence égale ===)
qcut_result = pd.qcut(data, q=4)
print(qcut_result.value_counts().sort_index())

Sortie attendue :

=== 原始数据 ===
[ 1  1  1  1  1  1  1  1  1 10 20 30 40 50]

=== pd.cut 等宽分箱 ===
(0.975, 13.25]    10   # 10 个值在这个区间
(13.25, 25.5]      1
(25.5, 37.75]      1
(37.75, 50.0]      2   # 2 个值在这个区间
dtype: 50

=== pd.qcut 等量分箱 ===
(0.999, 7.75]      4   # 约 1/4 的数据
(7.75, 25.0]       4
(25.0, 42.5]       4
(10.0, 50.0]       4   # 约 1/4 的数据

Explication du code :

  • pd.cut()La plage de données est divisée uniformément en 4 parties, mais comme les données sont fortement asymétriques, la plupart des valeurs (neuf 1) tombent dans le premier intervalle.
  • pd.qcut()Cela garantit que chaque intervalle contient le même nombre de points de données (4), même si les largeurs des intervalles diffèrent grandement.

Astuce : pd.cut()Convient aux cas où la distribution des données est uniforme ou lorsque des intervalles de largeur fixe sont nécessaires.pd.qcut()Convient aux cas où la distribution des données est inégale ou lorsqu'une division par rang/pourcentage est requise.

Pandas 常用函数Fonctions courantes de Pandas

Autres extensions