|
|
1 year ago | |
|---|---|---|
| .. | ||
| solution | 1 year ago | |
| README.md | 1 year ago | |
| assignment.md | 1 year ago | |
| notebook.ipynb | 1 year ago | |
README.md
Візуалізація взаємозв'язків: усе про мед 🍯
![]() |
|---|
| Візуалізація взаємозв'язків - Скетчнот від @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()
Ви помітите, що дані про мед мають кілька цікавих колонок, включаючи рік і ціну за фунт. Давайте дослідимо ці дані, згруповані за штатами США:
| штат | numcol | yieldpercol | totalprod | stocks | priceperlb | prodvalue | рік |
|---|---|---|---|---|---|---|---|
| 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);
З цією зміною кольорової схеми ви можете побачити очевидну сильну прогресію з роками щодо ціни меду за фунт. Дійсно, якщо ви перевірите вибірку даних (наприклад, виберіть штат Аризона), ви побачите тенденцію до зростання цін рік за роком, з деякими винятками:
| штат | numcol | yieldpercol | totalprod | stocks | priceperlb | prodvalue | рік |
|---|---|---|---|---|---|---|---|
| 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 для колонок:
Для цього набору даних нічого особливого не виділяється щодо кількості колоній та їх урожайності рік за роком і штат за штатом. Чи є інший спосіб знайти кореляцію між цими двома змінними?
Двохлінійні графіки
Спробуйте багатолінійний графік, наклавши два лінійні графіки один на одного, використовуючи 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();
Хоча нічого особливого не виділяється приблизно у 2003 році, це дозволяє нам завершити цей урок на трохи щасливішій ноті: хоча загалом кількість колоній зменшується, їх кількість стабілізується, навіть якщо їх урожайність на колонію знижується.
Вперед, бджоли, вперед!
🐝❤️
🚀 Виклик
У цьому уроці ви дізналися трохи більше про інші способи використання точкових графіків і сіток ліній, включаючи сітки фасетів. Викличте себе на створення сітки фасетів, використовуючи інший набір даних, можливо, той, який ви використовували до цих уроків. Зверніть увагу, скільки часу вони займають для створення і як потрібно бути обережним щодо кількості сіток, які потрібно намалювати за допомогою цих технік.
Тест після лекції
Огляд і самостійне навчання
Лінійні графіки можуть бути простими або досить складними. Проведіть трохи читання в документації Seaborn про різні способи їх створення. Спробуйте вдосконалити лінійні графіки, які ви створили в цьому уроці, використовуючи інші методи, зазначені в документації.
Завдання
Відмова від відповідальності:
Цей документ був перекладений за допомогою сервісу автоматичного перекладу Co-op Translator. Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникають внаслідок використання цього перекладу.







