Hyödynnä Pandas GroupBy:n teho data-analyysiin. Tämä opas tutkii aggregointi- ja muunnostekniikoita käytännön esimerkein kansainväliselle datalle.
Pandas GroupBy -operaatioiden hallinta: Aggregointi vs. Muunnos
Pandas, Pythonin datan käsittelyn kulmakivi, tarjoaa tehokkaan työkalun datan analysointiin ja ymmärtämiseen: GroupBy-operaation. Tämän ominaisuuden avulla voit segmentoida datasi ryhmiin jaettujen ominaisuuksien perusteella ja soveltaa sitten funktioita näihin ryhmiin paljastaen oivalluksia, jotka muuten jäisivät piiloon. Tämä artikkeli sukeltaa syvälle kahteen avain GroupBy-operaatioon: aggregointiin ja muunnokseen, tarjoten käytännön esimerkkejä ja selityksiä, jotka soveltuvat data-ammattilaisille maailmanlaajuisesti.
GroupBy-konseptin ymmärtäminen
Ytimeltään GroupBy on prosessi, joka sisältää kolme päävaihetta: datan jakaminen ryhmiin yhden tai useamman kriteerin perusteella, funktion soveltaminen kuhunkin ryhmään itsenäisesti ja tulosten yhdistäminen uuteen datarakenteeseen. Tämä "split-apply-combine" -strategia on perustavanlaatuinen konsepti data-analyysissä ja tarjoaa joustavan kehyksen monimutkaisten datajoukkojen tutkimiseen.
GroupBy:n teho piilee sen kyvyssä käsitellä erilaisia datatyyppejä ja -rakenteita, mikä tekee siitä soveltuvan monille eri aloille. Analysoitpa myyntidataa useilta alueilta, anturilukemia eri laitteista tai sosiaalisen median toimintaa eri väestöryhmissä, GroupBy voi auttaa sinua poimimaan merkityksellisiä oivalluksia.
Aggregointi: Datan tiivistäminen ryhmien sisällä
Aggregointi on yhteenvetotilastojen laskemista kullekin ryhmälle. Nämä tilastot tarjoavat ytimekkään yleiskatsauksen ryhmän ominaisuuksista, joiden avulla voit verrata ja vastakohtia datasi eri segmenttejä. Yleisiä aggregointifunktioita ovat:
sum(): Laskee arvojen summan kussakin ryhmässä.mean(): Laskee keskiarvon kussakin ryhmässä.median(): Laskee keskiarvon kussakin ryhmässä.min(): Etsii pienimmän arvon kussakin ryhmässä.max(): Etsii suurimman arvon kussakin ryhmässä.count(): Laskee ei-null-arvojen määrän kussakin ryhmässä.size(): Palauttaa kunkin ryhmän koon (mukaan lukien null-arvot).std(): Laskee keskihajonnan kussakin ryhmässä.var(): Laskee varianssin kussakin ryhmässä.
Käytännön esimerkkejä aggregoinnista
Tarkastellaan hypoteettisen verkkokauppayrityksen kansainvälistä myyntidataa. Tiedot sisältävät tietoja tuoteryhmästä, myyntimaasta ja myyntisummasta.
import pandas as pd
# Esimerkkidata
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)
Tämä tulostaa:
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
Esimerkki 1: Kokonaismyynnin laskeminen luokittain
Laskiaksemme kunkin tuoteryhmän kokonaismyynnin, voimme käyttää groupby()-menetelmää, jota seuraa sum()-aggregointifunktio.
category_sales = df.groupby('Category')['Sales'].sum()
print(category_sales)
Tämä tulostaa:
Category
Clothing 155
Electronics 265
Home Goods 150
Name: Sales, dtype: int64
Esimerkki 2: Keskimääräisen myynnin laskeminen maittain
Samoin, laskeaksemme keskimääräisen myynnin maittain, voimme käyttää mean()-aggregointifunktiota.
country_sales = df.groupby('Country')['Sales'].mean()
print(country_sales)
Tämä tulostaa:
Country
Canada 60.0
Germany 75.0
UK 70.0
USA 80.0
Name: Sales, dtype: float64
Esimerkki 3: Useiden aggregointifunktioiden käyttäminen
Pandasin avulla voit soveltaa useita aggregointifunktioita samanaikaisesti käyttämällä agg()-menetelmää. Tämä tarjoaa kattavan yhteenvedon ryhmän ominaisuuksista.
category_summary = df.groupby('Category')['Sales'].agg(['sum', 'mean', 'median', 'count'])
print(category_summary)
Tämä tulostaa:
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
Esimerkki 4: Mukautetut aggregointifunktiot
Voit myös määrittää omia mukautettuja aggregointifunktioita käyttämällä lambda-lausekkeita tai nimettyjä funktioita. Tämän avulla voit laskea tiettyjä tilastoja, joita ei ole saatavana vakioaggregointifunktioissa.
# Mukautettu funktio alueen (max - min) laskemiseen
def custom_range(x):
return x.max() - x.min()
category_summary = df.groupby('Category')['Sales'].agg(['sum', 'mean', custom_range])
print(category_summary)
Tämä tulostaa:
sum mean custom_range
Category
Clothing 155 51.666667 15
Electronics 265 88.333333 25
Home Goods 150 75.000000 10
Muunnos: Datan muokkaaminen ryhmien sisällä
Muunnos puolestaan liittyy datan muokkaamiseen kussakin ryhmässä jonkin laskelman perusteella. Toisin kuin aggregointi, joka palauttaa tiivistetyn arvon kullekin ryhmälle, muunnos palauttaa arvon kullekin riville alkuperäisessä datassa, mutta arvo lasketaan sen ryhmän perusteella, johon kyseinen rivi kuuluu. Muunnosoperaatiot säilyttävät DataFrame-tiedoston alkuperäisen indeksin ja muodon.
Yleisiä muunnoksen käyttötapauksia ovat:
- Datan standardointi kussakin ryhmässä.
- Sijoituksen tai prosenttipisteen laskeminen kussakin ryhmässä.
- Puuttuvien arvojen täyttäminen ryhmätilastojen perusteella.
Käytännön esimerkkejä muunnoksesta
Jatketaan kansainvälisellä myyntidatallamme. Voimme soveltaa muunnosta suorittaaksemme laskelmia, jotka liittyvät myyntilukuihin kussakin maassa.
Esimerkki 1: Myyntidatan standardointi kussakin maassa (Z-pisteet)
Datan standardointi edellyttää arvojen muuntamista siten, että niiden keskiarvo on 0 ja keskihajonta 1. Tämä on hyödyllistä verrattaessa dataa eri asteikoilla ja jakaumissa. Voimme käyttää transform()-menetelmää lambda-lausekkeen kanssa tämän saavuttamiseksi.
from scipy.stats import zscore
df['Sales_Zscore'] = df.groupby('Country')['Sales'].transform(zscore)
print(df)
Tämä tulostaa:
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
Sales_Zscore -sarake sisältää nyt standardoidut myyntiarvot kullekin maalle. Arvot yli 0 ovat kyseisen maan keskimääräisen myynnin yläpuolella ja arvot alle 0 ovat alle keskiarvon.
Esimerkki 2: Myyntiluokituksen laskeminen kussakin luokassa
Laskeaksemme kunkin myynnin sijoituksen omassa luokassaan, voimme käyttää rank()-menetelmää transform()-funktion sisällä.
df['Sales_Rank'] = df.groupby('Category')['Sales'].transform(lambda x: x.rank(method='dense'))
print(df)
Tämä tulostaa:
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
Sales_Rank -sarake osoittaa kunkin myynnin sijoituksen omassa luokassaan. Argumentti `method='dense'` varmistaa, että peräkkäiset sijoitukset määritetään ilman aukkoja.
Esimerkki 3: Puuttuvien arvojen täyttäminen ryhmän keskiarvon perusteella
Lisätään joitain puuttuvia arvoja myyntidataan ja täytetään ne sitten kunkin maan keskimääräisen myynnin perusteella.
import numpy as np
# Lisää puuttuvia arvoja
df.loc[[0, 3], 'Sales'] = np.nan
print(df)
# Täytä puuttuvat arvot maan keskiarvon perusteella
df['Sales_Filled'] = df['Sales'].fillna(df.groupby('Country')['Sales'].transform('mean'))
print(df)
Alkuperäinen DataFrame, jossa on puuttuvia arvoja, näyttäisi tältä:
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
Ja puuttuvien arvojen täyttämisen jälkeen:
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
Tärkeä huomautus: Koska `USA`:lle ei ollut olemassa keskiarvoa, tuloksena olevat arvot `Sales_Filled`-kentässä ovat `NaN`. Tällaisten reunatapauksien käsittely on ratkaisevan tärkeää luotettavan data-analyysin kannalta, ja se tulisi ottaa huomioon toteutuksen aikana.
Aggregointi vs. Muunnos: Keskeiset erot
Vaikka sekä aggregointi että muunnos ovat tehokkaita GroupBy-operaatioita, ne palvelevat eri tarkoituksia ja niillä on selkeät ominaisuudet:
- Tulosteen muoto: Aggregointi pienentää datan kokoa palauttamalla yhden arvon kullekin ryhmälle. Muunnos säilyttää alkuperäisen datan koon palauttamalla muunnetun arvon kullekin riville.
- Tarkoitus: Aggregointia käytetään datan tiivistämiseen ja oivallusten saamiseen ryhmän ominaisuuksista. Muunnosta käytetään datan muokkaamiseen ryhmien sisällä, usein standardointia tai normalisointia varten.
- Palautusarvo: Aggregointi palauttaa uuden DataFrame- tai Series-objektin, jossa on aggregoidut arvot. Muunnos palauttaa Series-objektin, jossa on muunnetut arvot, jotka voidaan sitten lisätä uutena sarakkeena alkuperäiseen DataFrame-objektiin.
Aggregoinnin ja muunnoksen välillä valinta riippuu analyyttisistä tavoitteistasi. Jos sinun on tiivistettävä dataa ja verrattava ryhmiä, aggregointi on oikea valinta. Jos sinun on muokattava dataa ryhmien sisällä säilyttäen alkuperäisen datarakenteen, muunnos on parempi vaihtoehto.
Edistyneet GroupBy-tekniikat
Perusaggregoinnin ja muunnoksen lisäksi Pandas GroupBy tarjoaa valikoiman edistyneitä tekniikoita kehittyneempään data-analyysiin.
Mukautettujen funktioiden soveltaminen apply()-menetelmällä
apply()-menetelmä tarjoaa eniten joustavuutta, jonka avulla voit soveltaa mitä tahansa mukautettua funktiota kuhunkin ryhmään. Tämä funktio voi suorittaa minkä tahansa operaation, mukaan lukien aggregoinnin, muunnoksen tai jopa monimutkaisempia laskelmia.
def custom_function(group):
# Laske kunkin ryhmän luokan myynnin summa vain, jos ryhmässä on useampi kuin yksi rivi
if len(group) > 1:
group['Sales_Sum'] = group['Sales'].sum()
else:
group['Sales_Sum'] = 0 # Tai jokin muu oletusarvo
return group
df_applied = df.groupby('Country').apply(custom_function)
print(df_applied)
Tässä esimerkissä määrittelemme mukautetun funktion, joka laskee myynnin summan kussakin ryhmässä (maa). apply()-menetelmä soveltaa tätä funktiota kuhunkin ryhmään, jolloin tuloksena on uusi sarake, joka sisältää kyseisen ryhmän myynnin summan.
Tärkeä huomautus: apply-funktio voi olla laskennallisesti kalliimpi kuin muut menetelmät. Optimoi koodisi ja harkitse vaihtoehtoisia toteutuksia, kun työskentelet massiivisten datajoukkojen kanssa.
Ryhmittely useiden sarakkeiden perusteella
Voit ryhmitellä datasi useiden sarakkeiden perusteella luodaksesi tarkempia segmenttejä. Tämän avulla voit analysoida dataa useiden ominaisuuksien leikkauspisteen perusteella.
category_country_sales = df.groupby(['Category', 'Country'])['Sales'].sum()
print(category_country_sales)
Tämä ryhmittelee datan sekä Category että Country -kentän perusteella, jolloin voit laskea kunkin luokan kokonaismyynnin kussakin maassa. Tämä tarjoaa yksityiskohtaisemman kuvan myynnin kehityksestä eri alueilla ja tuotelinjoilla.
Ryhmien läpikäyminen
Monimutkaisempaa analyysia varten voit käydä ryhmät läpi for-silmukalla. Tämän avulla voit käyttää jokaista ryhmää yksilöllisesti ja suorittaa mukautettuja operaatioita sille.
for name, group in df.groupby('Category'):
print(f"Category: {name}")
print(group)
Tämä käy läpi jokaisen tuoteryhmän ja tulostaa vastaavat tiedot. Tästä voi olla hyötyä mukautetun analyysin suorittamisessa tai raporttien luomisessa kullekin luokalle.
Parhaat käytännöt GroupBy:n käyttämiseen
Varmistaaksesi GroupBy-objektin tehokkaan ja tuloksellisen käytön, ota huomioon seuraavat parhaat käytännöt:
- Ymmärrä datasi: Ennen kuin käytät
GroupBy-objektia, käytä aikaa datasi ymmärtämiseen ja tunnista asiaankuuluvat ryhmittelykriteerit ja aggregointi-/muunnosfunktiot. - Valitse oikea operaatio: Harkitse huolellisesti, onko aggregointi vai muunnos sopiva valinta analyyttisille tavoitteillesi.
- Optimoi suorituskyky: Suurissa datajoukoissa harkitse koodisi optimointia käyttämällä vektorisoituja operaatioita ja välttämällä tarpeettomia silmukoita.
- Käsittele puuttuvia arvoja: Ole tietoinen datasi puuttuvista arvoista ja käsittele niitä asianmukaisesti käyttämällä menetelmiä, kuten
fillna()taidropna(). - Dokumentoi koodisi: Dokumentoi koodisi selkeästi selittääksesi kunkin
GroupBy-operaation tarkoituksen ja valintojesi perustelut.
Johtopäätös
Pandas GroupBy on tehokas työkalu data-analyysiin, jonka avulla voit segmentoida datasi, soveltaa funktioita kuhunkin ryhmään ja poimia arvokkaita oivalluksia. Hallitsemalla aggregointi- ja muunnostekniikat voit hyödyntää datasi koko potentiaalin ja saada syvemmän käsityksen taustalla olevista malleista ja trendeistä. Analysoitpa myyntidataa, anturilukemia tai sosiaalisen median toimintaa, GroupBy voi auttaa sinua tekemään datalähtöisiä päätöksiä ja saavuttamaan analyyttiset tavoitteesi. Ota GroupBy:n teho käyttöön ja nosta data-analyysitaitosi uudelle tasolle.
Tämä opas on tarjonnut kattavan yleiskatsauksen Pandas GroupBy -operaatioista keskittyen aggregointiin vs. muunnokseen. Käyttämällä näitä tekniikoita kansainväliseen dataan, datatieteilijät maailmanlaajuisesti pystyvät poimimaan tärkeitä liiketoimintaoivalluksia eri datajoukoista. Harjoittele, kokeile ja räätälöi näitä tekniikoita omiin tarpeisiisi hyödyntääksesi Pandasin koko potentiaalin.