18 KiB
Визуализација односа: Све о меду 🍯
![]() |
|---|
| Визуализација односа - Скетч од @nitya |
Настављајући са природним фокусом нашег истраживања, хајде да откријемо занимљиве визуализације које приказују односе између различитих врста меда, према подацима добијеним од Министарства пољопривреде Сједињених Америчких Држава.
Овај скуп података, који садржи око 600 ставки, приказује производњу меда у многим америчким државама. На пример, можете погледати број колонија, принос по колонији, укупну производњу, залихе, цену по фунти и вредност произведеног меда у одређеној држави од 1998-2012, са једним редом по години за сваку државу.
Биће занимљиво визуализовати однос између производње у одређеној држави по години и, на пример, цене меда у тој држави. Алтернативно, можете визуализовати однос између приноса меда по колонији у различитим државама. Овај временски период обухвата разорни 'CCD' или 'Колапс колонија' који је први пут примећен 2006. године (http://npic.orst.edu/envir/ccd.html), па је то значајан скуп података за проучавање. 🐝
Квиз пре предавања
У овом предавању можете користити Seaborn, који сте већ користили, као добру библиотеку за визуализацију односа између променљивих. Посебно је занимљива употреба функције relplot у Seaborn-у која омогућава креирање расејаних графикона и линијских графикона за брзу визуализацију 'статистичких односа', што омогућава научнику података да боље разуме како се променљиве међусобно односе.
Расејани графикони
Користите расејани графикон да покажете како се цена меда развијала из године у годину, по државама. Seaborn, користећи relplot, практично групише податке по државама и приказује тачке за категоријске и нумеричке податке.
Хајде да почнемо са увозом података и Seaborn-а:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
honey = pd.read_csv('../../data/honey.csv')
honey.head()
Приметићете да подаци о меду имају неколико занимљивих колона, укључујући годину и цену по фунти. Хајде да истражимо ове податке, груписане по америчким државама:
| држава | број колонија | принос по колонији | укупна производња | залихе | цена по фунти | вредност производње | година |
|---|---|---|---|---|---|---|---|
| AL | 16000 | 71 | 1136000 | 159000 | 0.72 | 818000 | 1998 |
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
| AR | 53000 | 65 | 3445000 | 1688000 | 0.59 | 2033000 | 1998 |
| CA | 450000 | 83 | 37350000 | 12326000 | 0.62 | 23157000 | 1998 |
| CO | 27000 | 72 | 1944000 | 1594000 | 0.7 | 1361000 | 1998 |
Креирајте основни расејани графикон да покажете однос између цене по фунти меда и његовог порекла из америчких држава. Направите y осу довољно високом да прикаже све државе:
sns.relplot(x="priceperlb", y="state", data=honey, height=15, aspect=.5);
Сада, прикажите исте податке са шемом боја меда да покажете како се цена развија током година. То можете урадити додавањем параметра 'hue' да покажете промену из године у годину:
✅ Сазнајте више о палетама боја које можете користити у Seaborn-у - пробајте прелепу шему боја дуге!
sns.relplot(x="priceperlb", y="state", hue="year", palette="YlOrBr", data=honey, height=15, aspect=.5);
Са овом променом шеме боја, можете видети да постоји очигледан снажан напредак током година у погледу цене меда по фунти. Заиста, ако погледате узорак података да бисте проверили (изаберите одређену државу, на пример Аризону), можете видети образац повећања цена из године у годину, са неколико изузетака:
| држава | број колонија | принос по колонији | укупна производња | залихе | цена по фунти | вредност производње | година |
|---|---|---|---|---|---|---|---|
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
| AZ | 52000 | 62 | 3224000 | 1548000 | 0.62 | 1999000 | 1999 |
| AZ | 40000 | 59 | 2360000 | 1322000 | 0.73 | 1723000 | 2000 |
| AZ | 43000 | 59 | 2537000 | 1142000 | 0.72 | 1827000 | 2001 |
| AZ | 38000 | 63 | 2394000 | 1197000 | 1.08 | 2586000 | 2002 |
| AZ | 35000 | 72 | 2520000 | 983000 | 1.34 | 3377000 | 2003 |
| AZ | 32000 | 55 | 1760000 | 774000 | 1.11 | 1954000 | 2004 |
| AZ | 36000 | 50 | 1800000 | 720000 | 1.04 | 1872000 | 2005 |
| AZ | 30000 | 65 | 1950000 | 839000 | 0.91 | 1775000 | 2006 |
| AZ | 30000 | 64 | 1920000 | 902000 | 1.26 | 2419000 | 2007 |
| AZ | 25000 | 64 | 1600000 | 336000 | 1.26 | 2016000 | 2008 |
| AZ | 20000 | 52 | 1040000 | 562000 | 1.45 | 1508000 | 2009 |
| AZ | 24000 | 77 | 1848000 | 665000 | 1.52 | 2809000 | 2010 |
| AZ | 23000 | 53 | 1219000 | 427000 | 1.55 | 1889000 | 2011 |
| AZ | 22000 | 46 | 1012000 | 253000 | 1.79 | 1811000 | 2012 |
Други начин да визуализујете овај напредак је да користите величину, уместо боје. За кориснике који су далтонисти, ово би могла бити боља опција. Уредите своју визуализацију да покажете повећање цене кроз повећање обима тачке:
sns.relplot(x="priceperlb", y="state", size="year", data=honey, height=15, aspect=.5);
Можете видети да се величина тачака постепено повећава.
Да ли је ово једноставан случај понуде и потражње? Због фактора као што су климатске промене и колапс колонија, да ли је мање меда доступно за куповину из године у годину, па се цена повећава?
Да бисмо открили корелацију између неких променљивих у овом скупу података, хајде да истражимо неке линијске графиконе.
Линијски графикони
Питање: Да ли постоји јасан раст цене меда по фунти из године у годину? Најлакше можете то открити креирањем једног линијског графикона:
sns.relplot(x="year", y="priceperlb", kind="line", data=honey);
Одговор: Да, са неким изузецима око 2003. године:
✅ Пошто Seaborn агрегира податке око једне линије, он приказује "више мерења за сваку x вредност тако што црта просек и 95% интервал поверења око просека". Извор. Ово временски захтевно понашање може се онемогућити додавањем ci=None.
Питање: Па, да ли можемо видети скок у залихама меда 2003. године? Шта ако погледате укупну производњу из године у годину?
sns.relplot(x="year", y="totalprod", kind="line", data=honey);
Одговор: Не баш. Ако погледате укупну производњу, чини се да је она заправо повећана те године, иако генерално гледано количина произведеног меда опада током ових година.
Питање: У том случају, шта је могло узроковати тај скок у цени меда око 2003. године?
Да бисмо то открили, можемо истражити мрежу фасета.
Мреже фасета
Мреже фасета узимају један аспект вашег скупа података (у нашем случају, можете изабрати 'годину' да избегнете превише фасета). Seaborn затим може направити графикон за сваку од тих фасета ваших изабраних x и y координата ради лакшег визуелног поређења. Да ли се 2003. година истиче у оваквом поређењу?
Креирајте мрежу фасета настављајући да користите relplot како препоручује документација Seaborn-а.
sns.relplot(
data=honey,
x="yieldpercol", y="numcol",
col="year",
col_wrap=3,
kind="line"
У овој визуализацији можете упоредити принос по колонији и број колонија из године у годину, један поред другог, са подешавањем wrap-а на 3 за колоне:
За овај скуп података, ништа посебно не истиче се у погледу броја колонија и њиховог приноса, из године у годину и из државе у државу. Да ли постоји другачији начин да се пронађе корелација између ове две променљиве?
Двоструки линијски графикони
Пробајте графикон са више линија тако што ћете преклопити два линијска графикона један преко другог, користећи Seaborn-ов 'despine' да уклоните њихове горње и десне ивице, и користећи ax.twinx изведено из Matplotlib-а. Twinx омогућава графикону да дели x осу и приказује две y осе. Дакле, прикажите принос по колонији и број колонија, преклопљено:
fig, ax = plt.subplots(figsize=(12,6))
lineplot = sns.lineplot(x=honey['year'], y=honey['numcol'], data=honey,
label = 'Number of bee colonies', legend=False)
sns.despine()
plt.ylabel('# colonies')
plt.title('Honey Production Year over Year');
ax2 = ax.twinx()
lineplot2 = sns.lineplot(x=honey['year'], y=honey['yieldpercol'], ax=ax2, color="r",
label ='Yield per colony', legend=False)
sns.despine(right=False)
plt.ylabel('colony yield')
ax.figure.legend();
Иако ништа не упада у очи око 2003. године, ово нам омогућава да завршимо ово предавање на мало срећнијој ноти: иако је укупан број колонија у опадању, број колонија се стабилизује чак и ако њихов принос по колонији опада.
Напред, пчеле, напред!
🐝❤️
🚀 Изазов
У овом предавању, научили сте мало више о другим употребама расејаних графикона и мрежа линија, укључујући мреже фасета. Изазовите себе да креирате мрежу фасета користећи другачији скуп података, можда онај који сте користили пре ових предавања. Приметите колико времена је потребно за креирање и како морате бити пажљиви у погледу броја мрежа које треба да нацртате користећи ове технике.
Квиз после предавања
Преглед и самостално учење
Линијски графикони могу бити једноставни или прилично сложени. Урадите мало читања у документацији Seaborn-а о различитим начинима на које их можете изградити. Покушајте да побољшате линијске графиконе које сте направили у овом предавању другим методама наведеним у документацији.
Задатак
Одрицање од одговорности:
Овај документ је преведен коришћењем услуге за превођење помоћу вештачке интелигенције Co-op Translator. Иако се трудимо да обезбедимо тачност, молимо вас да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати меродавним извором. За критичне информације препоручује се професионални превод од стране људи. Не преузимамо одговорност за било каква погрешна тумачења или неспоразуме који могу настати услед коришћења овог превода.







