Ako používať Pandas cut() a qcut()?


Pandas je knižnica Python, ktorá sa používa na manipuláciu s údajmi a analýzu štruktúrovaných údajov. Metódy cut() a qcut() pandy sa používajú na vytváranie kategorických premenných z číselných údajov. Metódy cut() a qcut() rozdeľujú číselné údaje na jednotlivé intervaly alebo kvantily a každému intervalu alebo kvantilu priraďujú označenie. V tomto článku pochopíme funkcie metód cut() a qcut() pomocou rôznych príkladov.

Funkcia cut().

Funkcia cut() rozdeľuje spojitú premennú do samostatných zásobníkov alebo intervalov na základe špecifikovaných kritérií. Vytvára skupiny alebo kategórie údajov na základe rozsahu hodnôt prítomných vo vstupných údajoch.

Syntax


pandas.cut(x, bins, labels=None, right=True, include_lowest=False, ...)

Parametre použité vo vyššie uvedenej syntaxi sú:

  • x: Vstupné údaje, ktorými môže byť séria Pandas alebo pole NumPy.

  • Zásobníky: Môže to byť celočíselná hodnota určujúca počet zásobníkov rovnakej šírky, ktoré sa majú vytvoriť, alebo postupnosť skalárnych hodnôt definujúcich okraje zásobníkov. Ak je zadané celé číslo, rozsah hodnôt v x sa rozdelí na toľko zásobníkov rovnakej šírky.

  • štítky (voliteľné): Objekt menoviek podobný poľu, ktoré sa majú priradiť ku každej priehradke. Ak nie sú uvedené, štítky budú celé čísla označujúce index zásobníka.

  • right (voliteľné): Booleovská hodnota označujúca, či majú byť intervaly zatvorené vpravo (zahŕňa pravý okraj zásobníka) alebo vľavo zatvorené (zahŕňa ľavý okraj zásobníka). V predvolenom nastavení je nastavená na hodnotu True.

  • include_lowest (voliteľné): Booleovská hodnota označujúca, či sa má zahrnúť najnižšia hodnota intervalu. V predvolenom nastavení je nastavená na hodnotu False.

Príklad 1: Zásobníky rovnakej šírky

V nižšie uvedenom príklade máme zoznam číselných údajov. Zásobníky špecifikujeme ako 3, čo znamená, že chceme rozdeliť údaje do troch zásobníkov rovnakej šírky. Výstup zobrazuje intervaly, do ktorých každá hodnota spadá, spolu s príslušnou kategóriou.


import pandas as pd

# Example 1: Equal-width bins
data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
bins = 3
categories = pd.cut(data, bins)
print(categories)

Výkon


[(9.91, 40.0], (9.91, 40.0], (9.91, 40.0], (9.91, 40.0], (40.0, 70.0], (40.0, 70.0], (40.0, 70.0], (70.0, 100.0], (70.0, 100.0], (70.0, 100.0]]
Categories (3, interval[float64, right]): [(9.91, 40.0] < (40.0, 70.0] < (70.0, 100.0]]

Príklad 2: Vlastný okraj zásobníka a štítky

V nižšie uvedenom príklade definujeme vlastné okraje koša [0, 30, 60, 100] a zodpovedajúce označenia ['Nízka', 'Stredná', 'Vysoká']. Funkcia cut() priradí každú hodnotu v údajoch do príslušnej kategórie na základe poskytnutých zásobníkov a štítkov.


# Example 2: Custom bin edges and labels
import pandas as pd
data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
bins = [0, 30, 60, 100]
labels = ['Low', 'Medium', 'High']
categories = pd.cut(data, bins, labels=labels)
print(categories)

Výkon


['Low', 'Low', 'Low', 'Medium', 'Medium', 'Medium', 'High', 'High', 'High', 'High']
Categories (3, object): ['Low' < 'Medium' < 'High']

Funkcia qcut().

Funkcia qcut() rozdeľuje údaje na základe kvantilov alebo percentilov na rozdiel od funkcie cut(), ktorá rozdeľuje údaje na intervaly rovnakej šírky. V každej priehradke je rovnaký počet dátových bodov, čo je užitočné na vytváranie rovnomerne rozdelených skupín.

Syntax


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

Parametre použité v syntaxi sú:

  • x: Vstupné údaje, ktorými môže byť séria Pandas alebo pole NumPy.

  • q: Celočíselná hodnota určujúca počet kvantilov, ktoré sa majú vytvoriť, alebo postupnosť kvantilov (hodnoty medzi 0 a 1), ktoré definujú hraničné body.

  • štítky (voliteľné): Objekt menoviek podobný poľu, ktoré sa majú priradiť ku každej priehradke. Ak nie sú uvedené, štítky budú celé čísla označujúce index zásobníka.

  • retbins (voliteľné): Booleovská hodnota označujúca, či sa majú vrátiť okraje koša spolu s kategóriami. V predvolenom nastavení je nastavená na hodnotu False.

  • presnosť (voliteľné): Celočíselná hodnota určujúca presnosť kvantilových hodnôt. Štandardne je nastavená na 3.

  • duplikáty (voliteľné): Ako zaobchádzať s duplicitnými hodnotami. Štandardne je nastavený na 'raise', čo spôsobuje chybu.

Príklad 1: Rovnaký počet kvantilov

V nižšie uvedenom príklade máme rovnaké číselné údaje ako predtým. Zadaním kvantilov ako 3 rozdelíme údaje do troch rovnako veľkých kvantilov. Výstup zobrazuje intervaly, do ktorých každá hodnota spadá, a zodpovedajúcu kategóriu.


import pandas as pd

# Example 1: Equal number of quantiles
data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
quantiles = 3
categories = pd.qcut(data, quantiles)
print(categories)

Výkon


[(9.999, 40.0], (9.999, 40.0], (9.999, 40.0], (9.999, 40.0], (40.0, 70.0], (40.0, 70.0], (40.0, 70.0], (70.0, 100.0], (70.0, 100.0], (70.0, 100.0]]
Categories (3, interval[float64, right]): [(9.999, 40.0] < (40.0, 70.0] < (70.0, 100.0]]

Príklad 2: Vlastné kvantily a štítky

V nižšie uvedenom príklade definujeme vlastné kvantily [0, 0,3, 0,6, 1] a zodpovedajúce označenia ['Nízke', 'Stredné', 'Vysoké']. Funkcia qcut() priradí každú hodnotu do príslušnej kategórie na základe poskytnutých kvantilov a označení.


import pandas as pd

# Example 2: Custom quantiles and labels
data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
quantiles = [0, 0.3, 0.6, 1]
labels = ['Low', 'Medium', 'High']
categories = pd.qcut(data, quantiles, labels=labels)
print(categories)

Výkon


['Low', 'Low', 'Low', 'Medium', 'Medium', 'Medium', 'High', 'High', 'High', 'High']
Categories (3, object): ['Low' < 'Medium' < 'High']

Záver

V tomto článku sme diskutovali o tom, ako môžeme použiť metódy pandas cut() a qcut() na vytváranie kategorických premenných z číselných údajov. Funkcia cut() rozdeľuje údaje do diskrétnych intervalov na základe daných podmienok, zatiaľ čo metóda qcut() rozdeľuje údaje na kvantily alebo percentily. Obe funkcie môžu tiež priraďovať označenia každému intervalu alebo kvantilu, čo pomáha pri transformácii číselných údajov na kategorické údaje.

Súvisiace články: