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.

17 KiB

Візуалізація взаємозв'язків: усе про мед 🍯

 Скетчнот від (@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()

Ви помітите, що дані про мед мають кілька цікавих колонок, включаючи рік і ціну за фунт. Давайте дослідимо ці дані, згруповані за штатами США:

штат 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);

scatterplot 1

Тепер покажіть ті ж дані з кольоровою схемою меду, щоб продемонструвати, як ціна змінюється рік за роком. Ви можете зробити це, додавши параметр 'hue', щоб показати зміни за роками:

Дізнайтеся більше про кольорові палітри, які можна використовувати в Seaborn - спробуйте красиву райдужну кольорову схему!

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

scatterplot 2

З цією зміною кольорової схеми ви можете побачити очевидну тенденцію до зростання ціни за фунт меду протягом років. Дійсно, якщо ви перевірите вибірку даних (наприклад, виберіть штат Аризона), ви побачите закономірність зростання цін рік за роком, з деякими винятками:

штат 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);

Ви можете побачити, як розмір точок поступово збільшується.

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 про різні способи їх створення. Спробуйте вдосконалити лінійні графіки, які ви створили в цьому уроці, використовуючи інші методи, зазначені в документації.

Завдання

Зануртеся у вулик


Відмова від відповідальності:
Цей документ було перекладено за допомогою сервісу автоматичного перекладу Co-op Translator. Хоча ми прагнемо до точності, зверніть увагу, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ мовою оригіналу слід вважати авторитетним джерелом. Для критично важливої інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникли внаслідок використання цього перекладу.