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.
Data-Science-For-Beginners/translations/lt/3-Data-Visualization/10-visualization-distributions/README.md

13 KiB

Vizualizuojant duomenų pasiskirstymą

 Sketchnote by (@sketchthedocs)
Vizualizuojant duomenų pasiskirstymą - Sketchnote by @nitya

Ankstesnėje pamokoje sužinojote keletą įdomių faktų apie Minesotos paukščių duomenų rinkinį. Vizualizuodami išskirtis aptikote klaidingus duomenis ir išnagrinėjote paukščių kategorijų skirtumus pagal jų maksimalų ilgį.

Prieš paskaitos testą

Tyrinėkite paukščių duomenų rinkinį

Kitas būdas gilintis į duomenis yra analizuoti jų pasiskirstymą, arba kaip duomenys yra organizuoti pagal ašį. Pavyzdžiui, galbūt norėtumėte sužinoti bendrą pasiskirstymą šiame duomenų rinkinyje pagal maksimalų sparnų ilgį ar maksimalų kūno masę Minesotos paukščiams.

Atraskime keletą faktų apie duomenų pasiskirstymą šiame duomenų rinkinyje. notebook.ipynb faile, esančiame šios pamokos aplanko šaknyje, importuokite Pandas, Matplotlib ir savo duomenis:

import pandas as pd
import matplotlib.pyplot as plt
birds = pd.read_csv('../../data/birds.csv')
birds.head()
Pavadinimas Mokslinis pavadinimas Kategorija Būrys Šeima Gentis Apsaugos statusas MinIlgis MaxIlgis MinKūnoMasa MaxKūnoMasa MinSparnųIlgis MaxSparnųIlgis
0 Juodapilvis švilpikas Dendrocygna autumnalis Antys/Giesmininkai Anseriformes Anatidae Dendrocygna LC 47 56 652 1020 76 94
1 Rudasis švilpikas Dendrocygna bicolor Antys/Giesmininkai Anseriformes Anatidae Dendrocygna LC 45 53 712 1050 85 93
2 Sniego žąsis Anser caerulescens Antys/Giesmininkai Anseriformes Anatidae Anser LC 64 79 2050 4050 135 165
3 Roso žąsis Anser rossii Antys/Giesmininkai Anseriformes Anatidae Anser LC 57.3 64 1066 1567 113 116
4 Didžioji baltakaktė žąsis Anser albifrons Antys/Giesmininkai Anseriformes Anatidae Anser LC 64 81 1930 3310 130 165

Apskritai, greitai pažvelgti į duomenų pasiskirstymą galima naudojant sklaidos diagramą, kaip tai darėme ankstesnėje pamokoje:

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

maksimalus ilgis pagal būrį

Tai suteikia bendrą kūno ilgio pasiskirstymo per paukščių būrius apžvalgą, tačiau tai nėra optimalus būdas parodyti tikrąjį pasiskirstymą. Šią užduotį paprastai atlieka histograma.

Darbas su histogramomis

Matplotlib siūlo puikius būdus vizualizuoti duomenų pasiskirstymą naudojant histogramas. Šio tipo diagrama yra panaši į stulpelinę diagramą, kur pasiskirstymas matomas per stulpelių kilimą ir kritimą. Norint sukurti histogramą, reikia skaitinių duomenų. Histogramą galima sukurti nurodant diagramos tipą kaip 'hist'. Ši diagrama rodo MaxBodyMass pasiskirstymą visame duomenų rinkinyje. Padalindama jai pateiktą duomenų masyvą į mažesnius intervalus, ji gali parodyti duomenų reikšmių pasiskirstymą:

birds['MaxBodyMass'].plot(kind = 'hist', bins = 10, figsize = (12,12))
plt.show()

pasiskirstymas visame duomenų rinkinyje

Kaip matote, dauguma iš 400+ paukščių šiame duomenų rinkinyje patenka į mažesnę nei 2000 Max Kūno Masės kategoriją. Gaukite daugiau įžvalgų apie duomenis pakeisdami bins parametrą į didesnį skaičių, pavyzdžiui, 30:

birds['MaxBodyMass'].plot(kind = 'hist', bins = 30, figsize = (12,12))
plt.show()

pasiskirstymas visame duomenų rinkinyje su didesniu bins parametru

Ši diagrama rodo pasiskirstymą šiek tiek detaliau. Mažiau į kairę pasvirusią diagramą galima sukurti užtikrinant, kad pasirinksite duomenis tik tam tikrame intervale:

Filtruokite savo duomenis, kad gautumėte tik tuos paukščius, kurių kūno masė yra mažesnė nei 60, ir parodykite 40 bins:

filteredBirds = birds[(birds['MaxBodyMass'] > 1) & (birds['MaxBodyMass'] < 60)]      
filteredBirds['MaxBodyMass'].plot(kind = 'hist',bins = 40,figsize = (12,12))
plt.show()     

filtruota histograma

Išbandykite kitus filtrus ir duomenų taškus. Norėdami pamatyti visą duomenų pasiskirstymą, pašalinkite ['MaxBodyMass'] filtrą, kad parodytumėte pažymėtus pasiskirstymus.

Histograma siūlo keletą gražių spalvų ir žymėjimo patobulinimų, kuriuos verta išbandyti:

Sukurkite 2D histogramą, kad palygintumėte dviejų pasiskirstymų santykį. Palyginkime MaxBodyMass ir MaxLength. Matplotlib siūlo įmontuotą būdą parodyti susikirtimą naudojant ryškesnes spalvas:

x = filteredBirds['MaxBodyMass']
y = filteredBirds['MaxLength']

fig, ax = plt.subplots(tight_layout=True)
hist = ax.hist2d(x, y)

Atrodo, kad yra tikėtinas ryšys tarp šių dviejų elementų pagal numatomą ašį, su vienu ypač stipriu susikirtimo tašku:

2D diagrama

Histogramos gerai veikia pagal numatytąją skaitinių duomenų funkciją. O kas, jei reikia pamatyti pasiskirstymus pagal tekstinius duomenis?

Tyrinėkite duomenų rinkinį pagal tekstinius duomenis

Šis duomenų rinkinys taip pat apima gerą informaciją apie paukščių kategoriją, jų gentį, rūšį, šeimą ir apsaugos statusą. Panagrinėkime šią apsaugos informaciją. Koks yra paukščių pasiskirstymas pagal jų apsaugos statusą?

Duomenų rinkinyje naudojami keli akronimai, apibūdinantys apsaugos statusą. Šie akronimai yra iš IUCN Raudonojo sąrašo kategorijų, organizacijos, kataloguojančios rūšių statusą.

  • CR: Kritiškai nykstantys
  • EN: Nykstantys
  • EX: Išnykę
  • LC: Mažiausiai susirūpinimą keliantys
  • NT: Netoli nykimo
  • VU: Pažeidžiami

Tai yra tekstinės reikšmės, todėl jums reikės atlikti transformaciją, kad sukurtumėte histogramą. Naudodami filteredBirds duomenų rėmelį, parodykite jo apsaugos statusą kartu su minimaliu sparnų ilgiu. Ką pastebite?

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

sparnų ilgis ir apsaugos statusas

Atrodo, kad nėra gero ryšio tarp minimalaus sparnų ilgio ir apsaugos statuso. Išbandykite kitus duomenų rinkinio elementus naudodami šį metodą. Taip pat galite išbandyti skirtingus filtrus. Ar pastebite kokį nors ryšį?

Tankio diagramos

Galbūt pastebėjote, kad histogramos, kurias iki šiol nagrinėjome, yra „žingsniuotos“ ir nesudaro sklandžios arkos. Norėdami parodyti sklandesnę tankio diagramą, galite išbandyti tankio diagramą.

Norėdami dirbti su tankio diagramomis, susipažinkite su nauja diagramos biblioteka, Seaborn.

Įkeldami Seaborn, išbandykite pagrindinę tankio diagramą:

import seaborn as sns
import matplotlib.pyplot as plt
sns.kdeplot(filteredBirds['MinWingspan'])
plt.show()

Tankio diagrama

Galite matyti, kaip diagrama atspindi ankstesnę minimalaus sparnų ilgio diagramą; ji tiesiog šiek tiek sklandesnė. Pasak Seaborn dokumentacijos, „Lyginant su histograma, KDE gali sukurti diagramą, kuri yra mažiau perkrauta ir lengviau interpretuojama, ypač kai piešiamos kelios pasiskirstymo kreivės. Tačiau ji gali sukelti iškraipymus, jei pagrindinis pasiskirstymas yra ribotas arba nesklidus. Kaip ir histograma, vaizdavimo kokybė taip pat priklauso nuo gerų išlyginimo parametrų pasirinkimo.“ šaltinis Kitaip tariant, išskirtys, kaip visada, gali neigiamai paveikti jūsų diagramas.

Jei norėtumėte peržiūrėti tą dantytą MaxBodyMass liniją antroje sukurtoje diagramoje, galėtumėte ją labai gerai išlyginti, naudodami šį metodą:

sns.kdeplot(filteredBirds['MaxBodyMass'])
plt.show()

lyginta kūno masės linija

Jei norėtumėte sklandžios, bet ne per daug sklandžios linijos, redaguokite bw_adjust parametrą:

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

mažiau sklandi kūno masės linija

Perskaitykite apie parametrus, galimus šio tipo diagramai, ir eksperimentuokite!

Šio tipo diagrama siūlo puikiai paaiškinančias vizualizacijas. Pavyzdžiui, su keliomis kodo eilutėmis galite parodyti maksimalios kūno masės tankį pagal paukščių būrį:

sns.kdeplot(
   data=filteredBirds, x="MaxBodyMass", hue="Order",
   fill=True, common_norm=False, palette="crest",
   alpha=.5, linewidth=0,
)

kūno masė pagal būrį

Taip pat galite žemėlapyje parodyti kelių kintamųjų tankį vienoje diagramoje. Palyginkite paukščio MaxLength ir MinLength su jų apsaugos statusu:

sns.kdeplot(data=filteredBirds, x="MinLength", y="MaxLength", hue="ConservationStatus")

kelios tankio kreivės, persidengiančios

Galbūt verta ištirti, ar „Pažeidžiamų“ paukščių grupė pagal jų ilgius yra reikšminga.

🚀 Iššūkis

Histogramos yra sudėtingesnis diagramų tipas nei paprastos sklaidos diagramos, stulpelinės diagramos ar linijinės diagramos. Ieškokite internete gerų histogramų naudojimo pavyzdžių. Kaip jos naudojamos, ką jos demonstruoja ir kokiose srityse ar tyrimų srityse jos dažniausiai naudojamos?

Po paskaitos testą

Apžvalga ir savarankiškas mokymasis

Šioje pamokoje naudojote Matplotlib ir pradėjote dirbti su Seaborn, kad sukurtumėte sudėtingesnes diagramas. Atlikite tyrimą apie kdeplot Seaborn bibliotekoje, „nuolatinės tikimybės tankio kreivę vienoje ar keliose dimensijose“. Perskaitykite dokumentaciją, kad suprastumėte, kaip ji veikia.

Užduotis

Praktikuokite savo įgūdžius


Atsakomybės apribojimas:
Šis dokumentas buvo išverstas naudojant AI vertimo paslaugą Co-op Translator. Nors siekiame tikslumo, prašome atkreipti dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Kritinei informacijai rekomenduojama naudoti profesionalų žmogaus vertimą. Mes neprisiimame atsakomybės už nesusipratimus ar klaidingus interpretavimus, atsiradusius dėl šio vertimo naudojimo.