12 KiB
Wizualizacja relacji: Wszystko o miodzie 🍯
![]() |
|---|
| Wizualizacja relacji - Sketchnote autorstwa @nitya |
Kontynuując nasz fokus na naturę w badaniach, odkryjmy ciekawe wizualizacje, które pokazują relacje między różnymi rodzajami miodu, na podstawie danych pochodzących z Departamentu Rolnictwa Stanów Zjednoczonych.
Ten zbiór danych, zawierający około 600 pozycji, przedstawia produkcję miodu w wielu stanach USA. Można na przykład przeanalizować liczbę kolonii, wydajność na kolonię, całkowitą produkcję, zapasy, cenę za funt oraz wartość wyprodukowanego miodu w danym stanie w latach 1998-2012, z jednym wierszem na każdy rok dla każdego stanu.
Ciekawie będzie zwizualizować relację między produkcją w danym stanie w danym roku a, na przykład, ceną miodu w tym stanie. Alternatywnie, można zwizualizować relację między wydajnością miodu na kolonię w różnych stanach. Ten zakres czasowy obejmuje niszczycielski okres 'CCD' (Colony Collapse Disorder), który po raz pierwszy zaobserwowano w 2006 roku (http://npic.orst.edu/envir/ccd.html), co czyni ten zbiór danych szczególnie wartym analizy. 🐝
Quiz przed wykładem
W tej lekcji możesz użyć biblioteki Seaborn, którą już wcześniej stosowałeś, jako świetnego narzędzia do wizualizacji relacji między zmiennymi. Szczególnie interesująca jest funkcja relplot w Seaborn, która umożliwia tworzenie wykresów punktowych i liniowych, pozwalając szybko wizualizować 'relacje statystyczne', co pomaga naukowcom danych lepiej zrozumieć, jak zmienne są ze sobą powiązane.
Wykresy punktowe
Użyj wykresu punktowego, aby pokazać, jak cena miodu zmieniała się rok po roku w poszczególnych stanach. Seaborn, korzystając z relplot, wygodnie grupuje dane stanowe i wyświetla punkty danych zarówno dla danych kategorycznych, jak i liczbowych.
Zacznijmy od zaimportowania danych i biblioteki Seaborn:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
honey = pd.read_csv('../../data/honey.csv')
honey.head()
Zauważysz, że dane dotyczące miodu zawierają kilka interesujących kolumn, w tym rok i cenę za funt. Przyjrzyjmy się tym danym, pogrupowanym według stanów USA:
| state | numcol | yieldpercol | totalprod | stocks | priceperlb | prodvalue | year |
|---|---|---|---|---|---|---|---|
| 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 |
Stwórz podstawowy wykres punktowy, aby pokazać relację między ceną za funt miodu a stanem jego pochodzenia. Ustaw oś y na tyle wysoką, aby wyświetlić wszystkie stany:
sns.relplot(x="priceperlb", y="state", data=honey, height=15, aspect=.5);
Teraz pokaż te same dane z kolorystyką nawiązującą do miodu, aby zobrazować, jak cena zmienia się na przestrzeni lat. Możesz to zrobić, dodając parametr 'hue', który pokaże zmiany rok po roku:
✅ Dowiedz się więcej o paletach kolorów dostępnych w Seaborn - wypróbuj piękną paletę tęczową!
sns.relplot(x="priceperlb", y="state", hue="year", palette="YlOrBr", data=honey, height=15, aspect=.5);
Dzięki tej zmianie kolorystyki widać wyraźnie, że cena miodu za funt wykazuje silny trend wzrostowy na przestrzeni lat. Jeśli spojrzysz na próbkę danych (na przykład dla stanu Arizona), zauważysz wzorzec wzrostu cen rok po roku, z nielicznymi wyjątkami:
| state | numcol | yieldpercol | totalprod | stocks | priceperlb | prodvalue | year |
|---|---|---|---|---|---|---|---|
| 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 |
Innym sposobem wizualizacji tego trendu jest użycie rozmiaru zamiast koloru. Dla osób z daltonizmem może to być lepsza opcja. Zmień wizualizację, aby pokazać wzrost ceny poprzez zwiększenie obwodu punktów:
sns.relplot(x="priceperlb", y="state", size="year", data=honey, height=15, aspect=.5);
Widać, że rozmiar punktów stopniowo się zwiększa.
Czy to prosty przypadek podaży i popytu? Czy z powodu takich czynników jak zmiany klimatyczne i upadek kolonii dostępność miodu maleje z roku na rok, a cena rośnie?
Aby odkryć korelację między niektórymi zmiennymi w tym zbiorze danych, przyjrzyjmy się wykresom liniowym.
Wykresy liniowe
Pytanie: Czy cena miodu za funt wyraźnie rośnie z roku na rok? Najłatwiej to sprawdzić, tworząc pojedynczy wykres liniowy:
sns.relplot(x="year", y="priceperlb", kind="line", data=honey);
Odpowiedź: Tak, z pewnymi wyjątkami w okolicach roku 2003:
✅ Ponieważ Seaborn agreguje dane w jednej linii, wyświetla "wiele pomiarów dla każdej wartości x, rysując średnią i 95% przedział ufności wokół średniej". Źródło. To czasochłonne zachowanie można wyłączyć, dodając ci=None.
Pytanie: Czy w 2003 roku można również zauważyć wzrost podaży miodu? Co jeśli spojrzysz na całkowitą produkcję rok po roku?
sns.relplot(x="year", y="totalprod", kind="line", data=honey);
Odpowiedź: Niekoniecznie. Jeśli spojrzysz na całkowitą produkcję, wydaje się, że w tym konkretnym roku faktycznie wzrosła, mimo że ogólnie rzecz biorąc ilość produkowanego miodu maleje w tych latach.
Pytanie: W takim razie, co mogło spowodować wzrost ceny miodu w okolicach roku 2003?
Aby to odkryć, możesz zbadać siatkę wykresów (facet grid).
Siatki wykresów (Facet grids)
Siatki wykresów pozwalają na podział danych na mniejsze części (w naszym przypadku możesz wybrać 'rok', aby uniknąć zbyt wielu wykresów). Seaborn może następnie stworzyć wykres dla każdej z tych części, używając wybranych współrzędnych x i y, co ułatwia porównanie. Czy rok 2003 wyróżnia się w tego typu porównaniu?
Stwórz siatkę wykresów, kontynuując użycie relplot, zgodnie z zaleceniami dokumentacji Seaborn.
sns.relplot(
data=honey,
x="yieldpercol", y="numcol",
col="year",
col_wrap=3,
kind="line"
Na tej wizualizacji możesz porównać wydajność na kolonię i liczbę kolonii rok po roku, obok siebie, z ustawieniem wrap na 3 dla kolumn:
Dla tego zbioru danych nic szczególnego nie wyróżnia się w odniesieniu do liczby kolonii i ich wydajności, rok po roku i stan po stanie. Czy istnieje inny sposób na znalezienie korelacji między tymi dwiema zmiennymi?
Wykresy z dwiema liniami
Spróbuj stworzyć wykres z wieloma liniami, nakładając na siebie dwa wykresy liniowe, używając funkcji 'despine' w Seaborn, aby usunąć górne i prawe osie, oraz ax.twinx pochodzącej z Matplotlib. Twinx pozwala na współdzielenie osi x i wyświetlanie dwóch osi y. Wyświetl wydajność na kolonię i liczbę kolonii, nakładając je na siebie:
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();
Chociaż nic szczególnego nie rzuca się w oczy w okolicach roku 2003, pozwala to zakończyć tę lekcję na nieco bardziej optymistycznej nucie: mimo ogólnego spadku liczby kolonii, ich liczba stabilizuje się, nawet jeśli ich wydajność na kolonię maleje.
Brawo, pszczoły!
🐝❤️
🚀 Wyzwanie
W tej lekcji dowiedziałeś się więcej o innych zastosowaniach wykresów punktowych i siatek wykresów, w tym siatek wykresów (facet grids). Wyzwanie dla Ciebie: stwórz siatkę wykresów, używając innego zbioru danych, być może takiego, którego używałeś wcześniej w tych lekcjach. Zwróć uwagę, ile czasu zajmuje ich stworzenie i jak ważne jest ostrożne dobieranie liczby wykresów w tych technikach.
Quiz po wykładzie
Przegląd i samodzielna nauka
Wykresy liniowe mogą być proste lub dość złożone. Przeczytaj więcej w dokumentacji Seaborn na temat różnych sposobów ich budowy. Spróbuj ulepszyć wykresy liniowe, które stworzyłeś w tej lekcji, korzystając z innych metod opisanych w dokumentacji.
Zadanie
Zastrzeżenie:
Ten dokument został przetłumaczony za pomocą usługi tłumaczenia AI Co-op Translator. Chociaż staramy się zapewnić dokładność, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego języku źródłowym powinien być uznawany za autorytatywne źródło. W przypadku informacji krytycznych zaleca się skorzystanie z profesjonalnego tłumaczenia przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.







