You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

13 KiB

Vizualizacija porazdelitev

 Sketchnote by (@sketchthedocs)
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()

največja dolžina po redu

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()

porazdelitev po celotnem podatkovnem naboru

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()

porazdelitev po celotnem podatkovnem naboru z večjim parametrom bins

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()     

filtriran histogram

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:

2D grafikon

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();

razpon kril in status ohranjanja

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()

Graf gostote

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()

gladka črta telesne mase

Če bi želeli gladko, a ne preveč gladko črto, uredite parameter bw_adjust:

sns.kdeplot(filteredBirds['MaxBodyMass'], bw_adjust=.2)
plt.show()

manj gladka črta telesne mase

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,
)

telesna masa po redih

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")

več gostot, prekrivajoče

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

Uporabite svoje veščine


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.