Fedezze fel a Pandas GroupBy erejét az adatelemzéshez. Ez az útmutató az összegzési és átalakítási technikákat mutatja be gyakorlati példákkal a nemzetközi adatokhoz.
A Pandas GroupBy Műveletek Mesterfokon: Összegzés vs. Átalakítás
A Python adatok kezelésének sarokköve, a Pandas egy hatékony eszközt kínál az adatok elemzéséhez és megértéséhez: a GroupBy műveletet. Ez a funkció lehetővé teszi, hogy az adatait a közös jellemzők alapján csoportokra bontsa, majd függvényeket alkalmazzon ezekre a csoportokra, feltárva azokat a betekintéseket, amelyek máskülönben rejtve maradnának. Ez a cikk mélyrehatóan belemerül két kulcsfontosságú GroupBy műveletbe: a összegzésbe és az átalakításba, gyakorlati példákat és magyarázatokat kínálva, amelyek a világ minden tájáról származó adatszakemberek számára is alkalmasak.
A GroupBy Koncepció megértése
A GroupBy alapvetően egy olyan folyamat, amely három fő lépésből áll: az adatok felosztása egy vagy több kritérium alapján, egy függvény alkalmazása mindegyik csoportra függetlenül, és az eredmények kombinálása egy új adatszerkezetbe. Ez a "felosztás-alkalmazás-kombinálás" stratégia alapvető fogalom az adatelemzésben, és rugalmas keretet biztosít a komplex adathalmazok felfedezéséhez.
A GroupBy ereje abban rejlik, hogy képes kezelni a különböző adattípusokat és -struktúrákat, így sokféle területen alkalmazható. Akár több régióból származó értékesítési adatokat, különböző eszközökről származó érzékelőleolvasásokat vagy demográfiai adatokon átívelő közösségi média aktivitást elemez, a GroupBy segíthet értelmes betekintések kinyerésében.
Összegzés: Adatok összegzése a csoportokon belül
Az összegzés az a folyamat, amely során összefoglaló statisztikákat számítanak ki az egyes csoportokhoz. Ezek a statisztikák tömör áttekintést nyújtanak a csoport jellemzőiről, lehetővé téve az adatok különböző szegmenseinek összehasonlítását és kontrasztálását. A gyakori összegzési függvények a következők:
sum(): Kiszámítja az értékek összegét az egyes csoportokon belül.mean(): Kiszámítja az átlagértéket az egyes csoportokon belül.median(): Kiszámítja a középső értéket az egyes csoportokon belül.min(): Megtalálja a minimális értéket az egyes csoportokon belül.max(): Megtalálja a maximális értéket az egyes csoportokon belül.count(): Megszámolja a nem null értékeket az egyes csoportokon belül.size(): Visszaadja az egyes csoportok méretét (beleértve a nullákat is).std(): Kiszámítja a szórásértéket az egyes csoportokon belül.var(): Kiszámítja a varianciát az egyes csoportokon belül.
Összegzés gyakorlati példái
Vegyünk egy nemzetközi értékesítési adatokat tartalmazó adathalmazt egy hipotetikus e-kereskedelmi cég számára. Az adatok a termékkategóriáról, az értékesítés országáról és az értékesítés összegéről tartalmaznak információkat.
import pandas as pd
# Példa adatok
data = {
'Category': ['Electronics', 'Clothing', 'Electronics', 'Clothing', 'Home Goods', 'Electronics', 'Clothing', 'Home Goods'],
'Country': ['USA', 'UK', 'Canada', 'USA', 'Germany', 'UK', 'Canada', 'Germany'],
'Sales': [100, 50, 75, 60, 80, 90, 45, 70]
}
df = pd.DataFrame(data)
print(df)
Ez a következőt adja ki:
Category Country Sales
0 Electronics USA 100
1 Clothing UK 50
2 Electronics Canada 75
3 Clothing USA 60
4 Home Goods Germany 80
5 Electronics UK 90
6 Clothing Canada 45
7 Home Goods Germany 70
1. példa: Összesített értékesítés kategóriánként
Az egyes termékkategóriák teljes értékesítésének kiszámításához a groupby() metódust, majd a sum() összegzési függvényt használhatjuk.
category_sales = df.groupby('Category')['Sales'].sum()
print(category_sales)
Ez a következőt adja ki:
Category
Clothing 155
Electronics 265
Home Goods 150
Name: Sales, dtype: int64
2. példa: Átlagos értékesítés országonként
Hasonlóképpen, az átlagos értékesítés országonkénti kiszámításához a mean() összegzési függvényt használhatjuk.
country_sales = df.groupby('Country')['Sales'].mean()
print(country_sales)
Ez a következőt adja ki:
Country
Canada 60.0
Germany 75.0
UK 70.0
USA 80.0
Name: Sales, dtype: float64
3. példa: Több összegzési függvény használata
A Pandas lehetővé teszi, hogy egyszerre több összegzési függvényt alkalmazzon a agg() metódussal. Ez átfogó összefoglalót ad a csoport jellemzőiről.
category_summary = df.groupby('Category')['Sales'].agg(['sum', 'mean', 'median', 'count'])
print(category_summary)
Ez a következőt adja ki:
sum mean median count
Category
Clothing 155 51.666667 50.0 3
Electronics 265 88.333333 90.0 3
Home Goods 150 75.000000 75.0 2
4. példa: Egyéni összegzési függvények
A saját egyéni összegzési függvényeit is meghatározhatja a lambda kifejezések vagy a megnevezett függvények használatával. Ez lehetővé teszi az olyan statisztikák kiszámítását, amelyek nem érhetők el a standard összegzési függvényekben.
# Egyéni függvény a tartomány (max - min) kiszámításához
def custom_range(x):
return x.max() - x.min()
category_summary = df.groupby('Category')['Sales'].agg(['sum', 'mean', custom_range])
print(category_summary)
Ez a következőt adja ki:
sum mean custom_range
Category
Clothing 155 51.666667 15
Electronics 265 88.333333 25
Home Goods 150 75.000000 10
Átalakítás: Adatok módosítása a csoportokon belül
Az átalakítás viszont magában foglalja az adatok módosítását az egyes csoportokon belül valamilyen számítás alapján. Az összegzéssel ellentétben, amely egy összefoglaló értéket ad vissza az egyes csoportokhoz, az átalakítás egy értéket ad vissza az eredeti adatok minden sorához, de az értéket azon csoport alapján számítják ki, amelyhez az a sor tartozik. Az átalakítási műveletek megőrzik az eredeti indexet és a DataFrame alakját.
Az átalakítás gyakori felhasználási esetei a következők:
- Adatok standardizálása az egyes csoportokon belül.
- Rang vagy percentilis kiszámítása az egyes csoportokon belül.
- Hiányzó értékek kitöltése a csoport statisztikái alapján.
Az átalakítás gyakorlati példái
Folytassuk a nemzetközi értékesítési adatokkal. Az átalakítást alkalmazhatjuk az értékesítési adatokkal kapcsolatos számítások elvégzéséhez az egyes országokon belül.
1. példa: Értékesítési adatok standardizálása az egyes országokon belül (Z-score)
Az adatok standardizálása magában foglalja az értékek átalakítását úgy, hogy az átlag 0 és a szórás 1 legyen. Ez hasznos az adatok összehasonlításához a különböző skálákon és eloszlásokon. A transform() metódust egy lambda kifejezéssel együtt használhatjuk ennek eléréséhez.
from scipy.stats import zscore
df['Sales_Zscore'] = df.groupby('Country')['Sales'].transform(zscore)
print(df)
Ez a következőt adja ki:
Category Country Sales Sales_Zscore
0 Electronics USA 100 1.000000
1 Clothing UK 50 -1.000000
2 Electronics Canada 75 1.000000
3 Clothing USA 60 -1.000000
4 Home Goods Germany 80 1.000000
5 Electronics UK 90 1.000000
6 Clothing Canada 45 -1.000000
7 Home Goods Germany 70 -1.000000
A Sales_Zscore oszlop most tartalmazza az egyes országok standardizált értékesítési értékeit. A 0 feletti értékek meghaladják az adott ország átlagos értékesítését, a 0 alatti értékek pedig az átlag alatt vannak.
2. példa: Értékesítési rang kiszámítása az egyes kategóriákon belül
Az egyes értékesítések rangjának kiszámításához a kategórián belül a rank() metódust használhatjuk a transform() függvényen belül.
df['Sales_Rank'] = df.groupby('Category')['Sales'].transform(lambda x: x.rank(method='dense'))
print(df)
Ez a következőt adja ki:
Category Country Sales Sales_Zscore Sales_Rank
0 Electronics USA 100 1.000000 3.0
1 Clothing UK 50 -1.000000 2.0
2 Electronics Canada 75 1.000000 1.0
3 Clothing USA 60 -1.000000 3.0
4 Home Goods Germany 80 1.000000 2.0
5 Electronics UK 90 1.000000 2.0
6 Clothing Canada 45 -1.000000 1.0
7 Home Goods Germany 70 -1.000000 1.0
A Sales_Rank oszlop az egyes értékesítések rangját jelzi a megfelelő kategórián belül. A `method='dense'` argumentum biztosítja, hogy a sorozatos rangok hézagok nélkül legyenek hozzárendelve.
3. példa: Hiányzó értékek kitöltése a csoport átlaga alapján
Vezessünk be néhány hiányzó értéket az értékesítési adatokban, majd töltsük ki azokat az egyes országok átlagos értékesítése alapján.
import numpy as np
# Hiányzó értékek bevezetése
df.loc[[0, 3], 'Sales'] = np.nan
print(df)
# Hiányzó értékek kitöltése az ország átlaga alapján
df['Sales_Filled'] = df['Sales'].fillna(df.groupby('Country')['Sales'].transform('mean'))
print(df)
A kezdeti DataFrame a hiányzó értékekkel így nézne ki:
Category Country Sales Sales_Zscore Sales_Rank
0 Electronics USA NaN 1.000000 3.0
1 Clothing UK 50 -1.000000 2.0
2 Electronics Canada 75 1.000000 1.0
3 Clothing USA NaN -1.000000 3.0
4 Home Goods Germany 80 1.000000 2.0
5 Electronics UK 90 1.000000 2.0
6 Clothing Canada 45 -1.000000 1.0
7 Home Goods Germany 70 -1.000000 1.0
És a hiányzó értékek kitöltése után:
Category Country Sales Sales_Zscore Sales_Rank Sales_Filled
0 Electronics USA NaN 1.000000 3.0 NaN
1 Clothing UK 50 -1.000000 2.0 50.0
2 Electronics Canada 75 1.000000 1.0 75.0
3 Clothing USA NaN -1.000000 3.0 NaN
4 Home Goods Germany 80 1.000000 2.0 80.0
5 Electronics UK 90 1.000000 2.0 90.0
6 Clothing Canada 45 -1.000000 1.0 45.0
7 Home Goods Germany 70 -1.000000 1.0 70.0
Fontos megjegyzés: Mivel nem volt meglévő átlag a `USA`-hoz, az eredményül kapott értékek a `Sales_Filled`-ben `NaN` értékek. Az ehhez hasonló peremfeltételek kezelése elengedhetetlen a megbízható adatelemzéshez, és a megvalósítás során figyelembe kell venni.
Összegzés vs. Átalakítás: Kulcsfontosságú különbségek
Bár az összegzés és az átalakítás is hatékony GroupBy művelet, különböző célokat szolgálnak, és eltérő jellemzőkkel rendelkeznek:
- Kimeneti alak: Az összegzés csökkenti az adatok méretét, és egyetlen értéket ad vissza az egyes csoportokhoz. Az átalakítás megőrzi az eredeti adatok méretét, és egy átalakított értéket ad vissza minden sorhoz.
- Cél: Az összegzést az adatok összefoglalására és a csoport jellemzőinek megismerésére használják. Az átalakítást az adatok módosítására használják a csoportokon belül, gyakran standardizáláshoz vagy normalizáláshoz.
- Visszatérési érték: Az összegzés egy új DataFrame-et vagy sorozatot ad vissza az összesített értékekkel. Az átalakítás egy sorozatot ad vissza az átalakított értékekkel, amelyeket aztán új oszlopként adhatunk az eredeti DataFrame-hez.
Az összegzés és az átalakítás közötti választás az adott analitikai céloktól függ. Ha az adatokat össze kell foglalni és a csoportokat össze kell hasonlítani, az összegzés a megfelelő választás. Ha az adatokat a csoportokon belül kell módosítani, miközben megőrizzük az eredeti adatszerkezetet, az átalakítás a jobb megoldás.
Haladó GroupBy technikák
Az alap összegzésen és átalakításon túl a Pandas GroupBy számos fejlett technikát kínál a kifinomultabb adatelemzéshez.
Egyéni függvények alkalmazása a apply() segítségével
A apply() metódus a legnagyobb rugalmasságot biztosítja, lehetővé téve bármilyen egyéni függvény alkalmazását az egyes csoportokra. Ez a függvény elvégezhet bármilyen műveletet, beleértve az összegzést, az átalakítást vagy akár a bonyolultabb számításokat is.
def custom_function(group):
# Számítsa ki az értékesítések összegét az egyes kategóriákhoz egy csoportban, csak akkor, ha egynél több sor van a csoportban
if len(group) > 1:
group['Sales_Sum'] = group['Sales'].sum()
else:
group['Sales_Sum'] = 0 # Vagy valamilyen más alapértelmezett érték
return group
df_applied = df.groupby('Country').apply(custom_function)
print(df_applied)
Ebben a példában egy egyéni függvényt határozunk meg, amely kiszámítja az értékesítések összegét az egyes csoportokban (ország). A apply() metódus ezt a függvényt alkalmazza az egyes csoportokra, ami egy új oszlopot eredményez, amely az adott csoport értékesítésének összegét tartalmazza.
Fontos megjegyzés: Az apply függvény számításigényesebb lehet, mint a többi metódus. Optimalizálja a kódot, és fontolja meg az alternatív megvalósításokat, amikor hatalmas adathalmazokkal dolgozik.
Több oszlop szerinti csoportosítás
Több oszlop szerint is csoportosíthatja az adatait, hogy részletesebb szegmenseket hozzon létre. Ez lehetővé teszi az adatok elemzését több jellemző metszéspontja alapján.
category_country_sales = df.groupby(['Category', 'Country'])['Sales'].sum()
print(category_country_sales)
Ez az adatokat a Category és a Country szerint csoportosítja, lehetővé téve az egyes kategóriák teljes értékesítésének kiszámítását az egyes országokon belül. Ez részletesebb képet nyújt az értékesítési teljesítményről a különböző régiókban és termékcsaládokban.
Csoportokon való iterálás
A bonyolultabb elemzéshez egy for ciklussal iterálhat a csoportokon. Ez lehetővé teszi, hogy az egyes csoportokat külön-külön érje el, és egyéni műveleteket hajtson végre rajtuk.
for name, group in df.groupby('Category'):
print(f"Kategória: {name}")
print(group)
Ez végigiterál az egyes termékkategóriákon, és kinyomtatja a megfelelő adatokat. Ez hasznos lehet egyéni elemzések elvégzéséhez vagy az egyes kategóriákhoz tartozó jelentések generálásához.
A GroupBy használatának bevált gyakorlatai
A GroupBy hatékony és hatékony használatának biztosítása érdekében vegye figyelembe a következő bevált gyakorlatokat:
- Értse meg az adatait: A
GroupByalkalmazása előtt szánjon időt az adatok megértésére, és azonosítsa a releváns csoportosítási kritériumokat és összegzési/átalakítási függvényeket. - Válassza a megfelelő műveletet: Gondosan fontolja meg, hogy az összegzés vagy az átalakítás a megfelelő választás az analitikai céljaihoz.
- Optimalizálja a teljesítményt: Nagyméretű adathalmazok esetén fontolja meg a kód optimalizálását vektorizált műveletek használatával, és kerülje a szükségtelen hurkokat.
- Hiányzó értékek kezelése: Legyen tisztában a hiányzó értékekkel az adatokban, és kezelje azokat megfelelően, például a
fillna()vagy adropna()metódusokkal. - Dokumentálja a kódot: Világosan dokumentálja a kódot a
GroupByminden egyes műveletének céljának és a választásai mögötti indoklásnak a magyarázatához.
Következtetés
A Pandas GroupBy egy hatékony eszköz az adatelemzéshez, amely lehetővé teszi az adatok szegmentálását, a függvények alkalmazását az egyes csoportokra, és értékes betekintések kinyerését. Az összegzési és átalakítási technikák elsajátításával kibonthatja az adatokban rejlő teljes potenciált, és mélyebben megértheti az alapul szolgáló mintákat és trendeket. Akár értékesítési adatokat, érzékelőleolvasásokat vagy közösségi média aktivitást elemez, a GroupBy segíthet adatvezérelt döntések meghozatalában és analitikai céljai elérésében. Fogadja el a GroupBy erejét, és emelje az adatelemzési készségeit a következő szintre.
Ez az útmutató átfogó áttekintést nyújtott a Pandas GroupBy műveletekről, az Összegzés vs. Átalakítás fókuszával. Ezeknek a technikáknak a nemzetközi adatokon történő használatával az adattudósok világszerte kulcsfontosságú üzleti betekintéseket nyerhetnek a különböző adathalmazokból. Gyakoroljon, kísérletezzen, és szabja ezeket a technikákat az egyéni igényeihez, hogy kihasználja a Pandas teljes potenciálját.