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/sr/3-Data-Visualization/10-visualization-distributions/README.md

18 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: Ранљиве

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

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. Иако се трудимо да превод буде тачан, молимо вас да имате у виду да аутоматизовани преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати меродавним извором. За критичне информације препоручује се професионални превод од стране људи. Не преузимамо одговорност за било каква погрешна тумачења или неспоразуме који могу настати услед коришћења овог превода.