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/bg/3-Data-Visualization/12-visualization-relationships
leestott c4b1965093
🌐 Update translations via Co-op Translator
1 year ago
..
solution 🌐 Update translations via Co-op Translator 1 year ago
README.md 🌐 Update translations via Co-op Translator 1 year ago
assignment.md 🌐 Update translations via Co-op Translator 1 year ago
notebook.ipynb 🌐 Update translations via Co-op Translator 1 year ago

README.md

Визуализиране на връзки: Всичко за меда 🍯

 Скетч от (@sketchthedocs)
Визуализиране на връзки - Скетч от @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);

scatterplot 1

Сега покажете същите данни с цветова схема, вдъхновена от меда, за да покажете как цената се променя през годините. Можете да направите това, като добавите параметър 'hue', който показва промяната година след година:

Научете повече за цветовите палитри, които можете да използвате в Seaborn - опитайте красива дъгова цветова схема!

sns.relplot(x="priceperlb", y="state", hue="year", palette="YlOrBr", data=honey, height=15, aspect=.5);

scatterplot 2

С тази промяна в цветовата схема можете да видите, че има очевидна силна прогресия през годините по отношение на цената на меда на килограм. Всъщност, ако разгледате примерен набор от данни, за да проверите (например щата Аризона), можете да видите модел на увеличение на цените година след година, с малко изключения:

щат колонии добив/колония общо производство запаси цена/кг стойност на продукцията година
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);

Можете да видите как размерът на точките постепенно се увеличава.

scatterplot 3

Дали това е просто случай на търсене и предлагане? Поради фактори като климатични промени и колапс на колониите, има ли по-малко мед, наличен за покупка година след година, и затова цената се увеличава?

За да открием корелация между някои от променливите в този набор от данни, нека изследваме някои линейни графики.

Линейни графики

Въпрос: Има ли ясно увеличение на цената на меда на килограм година след година? Най-лесно можете да откриете това, като създадете единична линейна графика:

sns.relplot(x="year", y="priceperlb", kind="line", data=honey);

Отговор: Да, с някои изключения около 2003 година:

line chart 1

Тъй като Seaborn агрегира данни около една линия, той показва "многократните измервания за всяка стойност на x, като изобразява средната стойност и 95% доверителен интервал около средната стойност". Източник. Това времеемко поведение може да бъде деактивирано, като добавите ci=None.

Въпрос: Е, през 2003 година можем ли също да видим скок в предлагането на мед? Какво ще стане, ако разгледате общото производство година след година?

sns.relplot(x="year", y="totalprod", kind="line", data=honey);

line chart 2

Отговор: Не съвсем. Ако разгледате общото производство, всъщност изглежда, че то се е увеличило през тази конкретна година, въпреки че като цяло количеството произведен мед намалява през тези години.

Въпрос: В такъв случай, какво би могло да е причинило този скок в цената на меда около 2003 година?

За да откриете това, можете да изследвате мрежа от фасети.

Мрежи от фасети

Мрежите от фасети вземат един аспект от вашия набор от данни (в нашия случай можете да изберете 'година', за да избегнете създаването на твърде много фасети). Seaborn може да създаде графика за всеки от тези аспекти на избраните x и y координати за по-лесно визуално сравнение. Изпъква ли 2003 година в този тип сравнение?

Създайте мрежа от фасети, като продължите да използвате relplot, както е препоръчано от документацията на Seaborn.

sns.relplot(
    data=honey, 
    x="yieldpercol", y="numcol",
    col="year", 
    col_wrap=3,
    kind="line"

В тази визуализация можете да сравните добива на колония и броя на колониите година след година, една до друга, с настройка на wrap на 3 за колоните:

facet grid

За този набор от данни нищо особено не изпъква по отношение на броя на колониите и техния добив, година след година и щат след щат. Има ли различен начин да се открие корелация между тези две променливи?

Двойни линейни графики

Опитайте многолинейна графика, като наложите две линейни графики една върху друга, използвайки despine на Seaborn, за да премахнете горните и десните оси, и използвайки 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();

superimposed plots

Докато нищо не изпъква около 2003 година, това ни позволява да завършим урока с малко по-щастлива нотка: въпреки че броят на колониите като цяло намалява, той се стабилизира, дори ако техният добив на колония намалява.

Напред, пчели, напред!

🐝❤️

🚀 Предизвикателство

В този урок научихте малко повече за други приложения на разпръснати графики и линейни мрежи, включително мрежи от фасети. Предизвикайте себе си да създадете мрежа от фасети, използвайки различен набор от данни, може би такъв, който сте използвали преди тези уроци. Обърнете внимание колко време отнема създаването им и как трябва да бъдете внимателни относно броя на мрежите, които трябва да нарисувате, използвайки тези техники.

Тест след лекцията

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

Линейните графики могат да бъдат прости или доста сложни. Прочетете малко повече в документацията на Seaborn за различните начини, по които можете да ги изградите. Опитайте да подобрите линейните графики, които създадохте в този урок, с други методи, изброени в документацията.

Задание

Потопете се в кошера


Отказ от отговорност:
Този документ е преведен с помощта на AI услуга за превод Co-op Translator. Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да било недоразумения или погрешни интерпретации, произтичащи от използването на този превод.