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.

19 KiB

Визуализација дистрибуција

 Скетч од (@sketchthedocs)
Визуализација дистрибуција - Скетч од @nitya

У претходној лекцији, научили сте неке занимљиве чињенице о скупу података о птицама из Минесоте. Пронашли сте погрешне податке визуализујући одступања и погледали разлике између категорија птица према њиховој максималној дужини.

Квиз пре предавања

Истражите скуп података о птицама

Још један начин да се дубље истражи скуп података је посматрање његове дистрибуције, односно како су подаци организовани дуж осе. На пример, можда желите да сазнате општу дистрибуцију максималног распона крила или максималне телесне масе птица из Минесоте у овом скупу података.

Хајде да откријемо неке чињенице о дистрибуцијама података у овом скупу. У notebook.ipynb датотеци која се налази у корену фасцикле ове лекције, увезите Pandas, Matplotlib и ваше податке:

import pandas as pd
import matplotlib.pyplot as plt
birds = pd.read_csv('../../data/birds.csv')
birds.head()
Име Научно име Категорија Ред Породица Род Статус заштите МинДужина МаксДужина МинТелеснаМаса МаксТелеснаМаса МинРаспонКрила МаксРаспонКрила
0 Црнобрки патка Dendrocygna autumnalis Патке/Гуске/Водене птице Anseriformes Anatidae Dendrocygna LC 47 56 652 1020 76 94
1 Жућкаста патка Dendrocygna bicolor Патке/Гуске/Водене птице Anseriformes Anatidae Dendrocygna LC 45 53 712 1050 85 93
2 Снежна гуска Anser caerulescens Патке/Гуске/Водене птице Anseriformes Anatidae Anser LC 64 79 2050 4050 135 165
3 Росова гуска Anser rossii Патке/Гуске/Водене птице Anseriformes Anatidae Anser LC 57.3 64 1066 1567 113 116
4 Велика бела гуска Anser albifrons Патке/Гуске/Водене птице Anseriformes Anatidae Anser LC 64 81 1930 3310 130 165

Уопштено, можете брзо погледати начин на који су подаци распоређени користећи расејани графикон као што смо то урадили у претходној лекцији:

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

макс дужина по реду

Ово даје преглед опште дистрибуције дужине тела по реду птица, али није оптималан начин за приказивање правих дистрибуција. Тај задатак се обично обавља креирањем хистограма.

Рад са хистограмима

Matplotlib нуди веома добре начине за визуализацију дистрибуције података користећи хистограме. Овај тип графикона је сличан стубичастом графикону где се дистрибуција може видети кроз успон и пад стубова. Да бисте направили хистограм, потребни су вам нумерички подаци. Да бисте направили хистограм, можете нацртати графикон дефинишући врсту као 'hist' за хистограм. Овај графикон приказује дистрибуцију MaxBodyMass за цео опсег нумеричких података скупа. Дељењем низа података на мање групе, може приказати дистрибуцију вредности података:

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

дистрибуција за цео скуп података

Као што можете видети, већина од 400+ птица у овом скупу података спада у опсег испод 2000 за њихову максималну телесну масу. Стеците више увида у податке променом параметра bins на већи број, нешто попут 30:

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

дистрибуција за цео скуп података са већим bins параметром

Овај графикон приказује дистрибуцију на мало детаљнији начин. Графикон мање искривљен улево могао би се направити тако што бисте осигурали да одаберете само податке у датом опсегу:

Филтрирајте своје податке да добијете само оне птице чија је телесна маса испод 60, и прикажите 40 bins:

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

филтрирани хистограм

Испробајте неке друге филтере и тачке података. Да бисте видели пуну дистрибуцију података, уклоните ['MaxBodyMass'] филтер да бисте приказали означене дистрибуције.

Хистограм нуди неке лепе боје и побољшања означавања које можете испробати:

Направите 2D хистограм да упоредите однос између две дистрибуције. Упоредимо MaxBodyMass и MaxLength. Matplotlib нуди уграђен начин да покаже конвергенцију користећи светлије боје:

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

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

Чини се да постоји очекивана корелација између ова два елемента дуж очекиване осе, са једном посебно снажном тачком конвергенције:

2D графикон

Хистограми добро функционишу по подразумеваним подешавањима за нумеричке податке. Шта ако треба да видите дистрибуције према текстуалним подацима?

Истражите скуп података за дистрибуције користећи текстуалне податке

Овај скуп података такође укључује добре информације о категорији птица, њиховом роду, врсти и породици, као и њиховом статусу заштите. Хајде да истражимо ове информације о заштити. Каква је дистрибуција птица према њиховом статусу заштите?

У скупу података, користи се неколико акронима за описивање статуса заштите. Ови акроними потичу из IUCN Red List Categories, организације која каталогизује статус врста.

  • CR: Критично угрожене
  • EN: Угрожене
  • EX: Изумрле
  • LC: Најмање забрињавајуће
  • NT: Близу угрожености
  • VU: Ранљиве

Ово су текстуалне вредности, па ћете морати да урадите трансформацију да бисте направили хистограм. Користећи filteredBirds dataframe, прикажите њихов статус заштите заједно са њиховим минималним распоном крила. Шта видите?

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

распон крила и статус заштите

Не чини се да постоји добра корелација између минималног распона крила и статуса заштите. Тестирајте друге елементе скупа података користећи овај метод. Можете испробати различите филтере. Да ли налазите неку корелацију?

Густински графикони

Можда сте приметили да хистограми које смо до сада гледали имају 'степенаст' изглед и не теку глатко у облику лука. Да бисте приказали глаткији графикон густине, можете пробати густински графикон.

Да бисте радили са густинским графиконима, упознајте се са новом библиотеком за графиконе, Seaborn.

Учитавањем Seaborn-а, пробајте основни густински графикон:

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

Густински графикон

Можете видети како графикон одражава претходни за податке о минималном распону крила; само је мало глаткији. Према документацији Seaborn-а, "У односу на хистограм, KDE може произвести графикон који је мање претрпан и лакши за интерпретацију, посебно када се цртају више дистрибуција. Али има потенцијал да уведе изобличења ако је основна дистрибуција ограничена или није глатка. Као и хистограм, квалитет репрезентације такође зависи од избора добрих параметара за глаткоћу." извор Другим речима, одступања ће, као и увек, учинити да ваши графикони лоше функционишу.

Ако желите да поново погледате ту назубљену линију MaxBodyMass у другом графикону који сте направили, могли бисте је веома добро изгладити поновним креирањем користећи овај метод:

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

глатка линија телесне масе

Ако желите глатку, али не превише глатку линију, измените параметар bw_adjust:

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

мање глатка линија телесне масе

Прочитајте о доступним параметрима за ову врсту графикона и експериментишите!

Ова врста графикона нуди лепе визуализације које објашњавају податке. Са неколико линија кода, на пример, можете приказати густину максималне телесне масе по реду птица:

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

телесна маса по реду

Такође можете мапирати густину неколико варијабли на једном графикону. Тестирајте максималну и минималну дужину птице у поређењу са њиховим статусом заштите:

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

више густина, преклопљене

Можда је вредно истражити да ли је кластер 'ранљивих' птица према њиховим дужинама значајан или не.

🚀 Изазов

Хистограми су софистициранија врста графикона од основних расејаних графикона, стубичастих графикона или линијских графикона. Потражите на интернету добре примере употребе хистограма. Како се користе, шта показују и у којим областима или областима истраживања се обично користе?

Квиз после предавања

Преглед и самостално учење

У овој лекцији, користили сте Matplotlib и почели да радите са Seaborn-ом да бисте приказали софистицираније графиконе. Истражите kdeplot у Seaborn-у, "континуирана крива густине вероватноће у једној или више димензија". Прочитајте документацију да бисте разумели како функционише.

Задатак

Примените своје вештине


Одрицање од одговорности:
Овај документ је преведен коришћењем услуге за превођење помоћу вештачке интелигенције Co-op Translator. Иако се трудимо да обезбедимо тачност, молимо вас да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитативним извором. За критичне информације препоручује се професионални превод од стране људи. Не преузимамо одговорност за било каква погрешна тумачења или неспоразуме који могу настати услед коришћења овог превода.