13 KiB
Vizualizacija porazdelitev
![]() |
---|
Vizualizacija porazdelitev - Sketchnote by @nitya |
V prejšnji lekciji ste spoznali nekaj zanimivih dejstev o podatkovnem naboru o pticah Minnesote. Z vizualizacijo odstopanj ste našli nekaj napačnih podatkov in si ogledali razlike med kategorijami ptic glede na njihovo največjo dolžino.
Predlekcijski kviz
Raziskovanje podatkovnega nabora ptic
Drug način za raziskovanje podatkov je pogled na njihovo porazdelitev oziroma kako so podatki organizirani vzdolž osi. Morda bi na primer želeli izvedeti več o splošni porazdelitvi največjega razpona kril ali največje telesne mase ptic Minnesote v tem podatkovnem naboru.
Odkrijmo nekaj dejstev o porazdelitvah podatkov v tem podatkovnem naboru. V datoteki notebook.ipynb v korenski mapi te lekcije uvozite Pandas, Matplotlib in svoje podatke:
import pandas as pd
import matplotlib.pyplot as plt
birds = pd.read_csv('../../data/birds.csv')
birds.head()
Ime | ZnanstvenoIme | Kategorija | Red | Družina | Rod | StatusOhranjanja | MinDolžina | MaxDolžina | MinTelesnaMasa | MaxTelesnaMasa | MinRazponKril | MaxRazponKril | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Črno-trebušna piščalka | Dendrocygna autumnalis | Race/Goske/Vodne ptice | Anseriformes | Anatidae | Dendrocygna | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
1 | Rjava piščalka | Dendrocygna bicolor | Race/Goske/Vodne ptice | Anseriformes | Anatidae | Dendrocygna | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
2 | Snežna goska | Anser caerulescens | Race/Goske/Vodne ptice | Anseriformes | Anatidae | Anser | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
3 | Rossova goska | Anser rossii | Race/Goske/Vodne ptice | Anseriformes | Anatidae | Anser | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
4 | Velika bela-frontna goska | Anser albifrons | Race/Goske/Vodne ptice | Anseriformes | Anatidae | Anser | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
Na splošno lahko hitro pogledate, kako so podatki porazdeljeni, z uporabo razsevnega diagrama, kot smo to storili v prejšnji lekciji:
birds.plot(kind='scatter',x='MaxLength',y='Order',figsize=(12,8))
plt.title('Max Length per Order')
plt.ylabel('Order')
plt.xlabel('Max Length')
plt.show()
To daje pregled splošne porazdelitve dolžine telesa po redih ptic, vendar to ni optimalen način za prikaz resničnih porazdelitev. Ta naloga je običajno izvedena z ustvarjanjem histograma.
Delo s histogrami
Matplotlib ponuja zelo dobre načine za vizualizacijo porazdelitve podatkov z uporabo histogramov. Ta vrsta grafikona je podobna stolpčnemu diagramu, kjer je porazdelitev vidna skozi vzpon in padec stolpcev. Za izdelavo histograma potrebujete numerične podatke. Za izdelavo histograma lahko narišete grafikon, kjer določite vrsto kot 'hist' za histogram. Ta grafikon prikazuje porazdelitev MaxBodyMass za celoten razpon numeričnih podatkov v podatkovnem naboru. Z razdelitvijo podatkovnega niza na manjše razpone lahko prikaže porazdelitev vrednosti podatkov:
birds['MaxBodyMass'].plot(kind = 'hist', bins = 10, figsize = (12,12))
plt.show()
Kot lahko vidite, večina od 400+ ptic v tem podatkovnem naboru spada v razpon pod 2000 za njihovo največjo telesno maso. Pridobite več vpogleda v podatke tako, da spremenite parameter bins
na večjo številko, na primer 30:
birds['MaxBodyMass'].plot(kind = 'hist', bins = 30, figsize = (12,12))
plt.show()
Ta grafikon prikazuje porazdelitev na nekoliko bolj podroben način. Grafikon, ki ni tako nagnjen v levo, bi lahko ustvarili tako, da zagotovite, da izberete samo podatke znotraj določenega razpona:
Filtrirajte svoje podatke, da dobite samo tiste ptice, katerih telesna masa je pod 60, in prikažite 40 bins
:
filteredBirds = birds[(birds['MaxBodyMass'] > 1) & (birds['MaxBodyMass'] < 60)]
filteredBirds['MaxBodyMass'].plot(kind = 'hist',bins = 40,figsize = (12,12))
plt.show()
✅ Preizkusite nekaj drugih filtrov in podatkovnih točk. Če želite videti celotno porazdelitev podatkov, odstranite filter ['MaxBodyMass']
, da prikažete označene porazdelitve.
Histogram ponuja tudi nekaj lepih izboljšav barv in označevanja, ki jih lahko preizkusite:
Ustvarite 2D histogram za primerjavo razmerja med dvema porazdelitvama. Primerjajmo MaxBodyMass
in MaxLength
. Matplotlib ponuja vgrajen način za prikaz konvergence z uporabo svetlejših barv:
x = filteredBirds['MaxBodyMass']
y = filteredBirds['MaxLength']
fig, ax = plt.subplots(tight_layout=True)
hist = ax.hist2d(x, y)
Zdi se, da obstaja pričakovana korelacija med tema dvema elementoma vzdolž pričakovane osi, z eno posebej močno točko konvergence:
Histograme privzeto dobro delujejo za numerične podatke. Kaj pa, če morate videti porazdelitve glede na besedilne podatke?
Raziskovanje podatkovnega nabora za porazdelitve z uporabo besedilnih podatkov
Ta podatkovni nabor vključuje tudi dobre informacije o kategoriji ptic ter njihovem rodu, vrsti in družini, pa tudi o njihovem statusu ohranjanja. Raziščimo te informacije o ohranjanju. Kakšna je porazdelitev ptic glede na njihov status ohranjanja?
✅ V podatkovnem naboru je uporabljenih več kratic za opis statusa ohranjanja. Te kratice izhajajo iz IUCN Red List Categories, organizacije, ki katalogizira status vrst.
- CR: Kritično ogrožene
- EN: Ogrožene
- EX: Izumrle
- LC: Najmanj zaskrbljujoče
- NT: Skoraj ogrožene
- VU: Ranljive
To so vrednosti, ki temeljijo na besedilu, zato boste morali izvesti transformacijo za ustvarjanje histograma. Z uporabo podatkovnega okvira filteredBirds prikažite njegov status ohranjanja skupaj z minimalnim razponom kril. Kaj opazite?
x1 = filteredBirds.loc[filteredBirds.ConservationStatus=='EX', 'MinWingspan']
x2 = filteredBirds.loc[filteredBirds.ConservationStatus=='CR', 'MinWingspan']
x3 = filteredBirds.loc[filteredBirds.ConservationStatus=='EN', 'MinWingspan']
x4 = filteredBirds.loc[filteredBirds.ConservationStatus=='NT', 'MinWingspan']
x5 = filteredBirds.loc[filteredBirds.ConservationStatus=='VU', 'MinWingspan']
x6 = filteredBirds.loc[filteredBirds.ConservationStatus=='LC', 'MinWingspan']
kwargs = dict(alpha=0.5, bins=20)
plt.hist(x1, **kwargs, color='red', label='Extinct')
plt.hist(x2, **kwargs, color='orange', label='Critically Endangered')
plt.hist(x3, **kwargs, color='yellow', label='Endangered')
plt.hist(x4, **kwargs, color='green', label='Near Threatened')
plt.hist(x5, **kwargs, color='blue', label='Vulnerable')
plt.hist(x6, **kwargs, color='gray', label='Least Concern')
plt.gca().set(title='Conservation Status', ylabel='Min Wingspan')
plt.legend();
Zdi se, da ni dobre korelacije med minimalnim razponom kril in statusom ohranjanja. Preizkusite druge elemente podatkovnega nabora z uporabo te metode. Lahko preizkusite tudi različne filtre. Ali najdete kakšno korelacijo?
Grafi gostote
Morda ste opazili, da so histogrami, ki smo jih doslej pregledali, 'stopničasti' in ne tečejo gladko v loku. Za prikaz bolj gladkega grafa gostote lahko poskusite graf gostote.
Za delo z grafi gostote se seznanite z novo knjižnico za risanje, Seaborn.
Z nalaganjem Seaborn poskusite osnovni graf gostote:
import seaborn as sns
import matplotlib.pyplot as plt
sns.kdeplot(filteredBirds['MinWingspan'])
plt.show()
Vidite lahko, kako graf odraža prejšnjega za podatke o minimalnem razponu kril; le da je nekoliko bolj gladek. Po dokumentaciji Seaborn: "V primerjavi s histogramom lahko KDE ustvari graf, ki je manj natrpan in bolj razumljiv, zlasti pri risanju več porazdelitev. Vendar pa lahko povzroči izkrivljanja, če je osnovna porazdelitev omejena ali ni gladka. Tako kot histogram tudi kakovost predstavitve je odvisna od izbire dobrih parametrov glajenja." vir Z drugimi besedami, odstopanja bodo, kot vedno, povzročila nepravilno obnašanje vaših grafikonov.
Če bi želeli ponovno pregledati tisto nazobčano črto MaxBodyMass v drugem grafu, ki ste ga ustvarili, bi jo lahko zelo dobro zgladili z uporabo te metode:
sns.kdeplot(filteredBirds['MaxBodyMass'])
plt.show()
Če bi želeli gladko, a ne preveč gladko črto, uredite parameter bw_adjust
:
sns.kdeplot(filteredBirds['MaxBodyMass'], bw_adjust=.2)
plt.show()
✅ Preberite o razpoložljivih parametrih za to vrsto grafa in eksperimentirajte!
Ta vrsta grafikona ponuja čudovito razlagalne vizualizacije. Z nekaj vrsticami kode lahko na primer prikažete gostoto največje telesne mase po redih ptic:
sns.kdeplot(
data=filteredBirds, x="MaxBodyMass", hue="Order",
fill=True, common_norm=False, palette="crest",
alpha=.5, linewidth=0,
)
Prav tako lahko na enem grafu prikažete gostoto več spremenljivk. Primerjajte največjo dolžino in najmanjšo dolžino ptice glede na njihov status ohranjanja:
sns.kdeplot(data=filteredBirds, x="MinLength", y="MaxLength", hue="ConservationStatus")
Morda je vredno raziskati, ali je skupina 'Ranljivih' ptic glede na njihove dolžine smiselna ali ne.
🚀 Izziv
Histogrami so bolj izpopolnjena vrsta grafikona kot osnovni razsevni diagrami, stolpčni diagrami ali črtni diagrami. Poiščite dobre primere uporabe histogramov na internetu. Kako se uporabljajo, kaj prikazujejo in na katerih področjih ali področjih raziskovanja se običajno uporabljajo?
Po-lekcijski kviz
Pregled in samostojno učenje
V tej lekciji ste uporabili Matplotlib in začeli delati s Seaborn za prikaz bolj izpopolnjenih grafikonov. Raziskujte kdeplot
v Seaborn, "neprekinjeno krivuljo gostote verjetnosti v eni ali več dimenzijah". Preberite dokumentacijo, da razumete, kako deluje.
Naloga
Omejitev odgovornosti:
Ta dokument je bil preveden z uporabo storitve AI za prevajanje Co-op Translator. Čeprav si prizadevamo za natančnost, vas prosimo, da upoštevate, da lahko avtomatizirani prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem izvirnem jeziku je treba obravnavati kot avtoritativni vir. Za ključne informacije priporočamo profesionalni človeški prevod. Ne odgovarjamo za morebitne nesporazume ali napačne razlage, ki bi nastale zaradi uporabe tega prevoda.