13 KiB
Pagpapakita ng Relasyon: Lahat Tungkol sa Pulot 🍯
![]() |
---|
Pagpapakita ng Relasyon - Sketchnote ni @nitya |
Sa pagpapatuloy ng ating pananaliksik na nakatuon sa kalikasan, tuklasin natin ang mga kawili-wiling paraan ng pagpapakita ng relasyon sa pagitan ng iba't ibang uri ng pulot, batay sa dataset mula sa United States Department of Agriculture.
Ang dataset na ito, na may humigit-kumulang 600 item, ay nagpapakita ng produksyon ng pulot sa maraming estado sa U.S. Halimbawa, maaari mong tingnan ang bilang ng mga kolonya, ani bawat kolonya, kabuuang produksyon, imbentaryo, presyo bawat libra, at halaga ng pulot na ginawa sa isang partikular na estado mula 1998-2012, na may isang row bawat taon para sa bawat estado.
Magiging kawili-wiling ipakita ang relasyon sa pagitan ng produksyon ng isang estado bawat taon at, halimbawa, ang presyo ng pulot sa estado na iyon. Bilang alternatibo, maaari mong ipakita ang relasyon sa pagitan ng ani ng pulot bawat kolonya sa iba't ibang estado. Ang saklaw ng taon na ito ay sumasaklaw sa mapaminsalang 'CCD' o 'Colony Collapse Disorder' na unang nakita noong 2006 (http://npic.orst.edu/envir/ccd.html), kaya't ito ay isang makabuluhang dataset na pag-aralan. 🐝
Pre-lecture quiz
Sa araling ito, maaari mong gamitin ang Seaborn, na ginamit mo na dati, bilang isang mahusay na library para ipakita ang relasyon sa pagitan ng mga variable. Partikular na kawili-wili ang paggamit ng relplot
function ng Seaborn na nagbibigay-daan sa scatter plots at line plots upang mabilis na ipakita ang 'statistical relationships', na tumutulong sa data scientist na mas maunawaan kung paano nauugnay ang mga variable sa isa't isa.
Scatterplots
Gumamit ng scatterplot upang ipakita kung paano nagbago ang presyo ng pulot, taon-taon, sa bawat estado. Ang Seaborn, gamit ang relplot
, ay maginhawang naggugrupo ng data ng estado at nagpapakita ng mga data point para sa parehong categorical at numeric na data.
Magsimula tayo sa pag-import ng data at Seaborn:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
honey = pd.read_csv('../../data/honey.csv')
honey.head()
Mapapansin mo na ang data ng pulot ay may ilang kawili-wiling mga column, kabilang ang taon at presyo bawat libra. Tuklasin natin ang data na ito, na naka-grupo ayon sa estado ng U.S.:
estado | 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 |
Gumawa ng basic scatterplot upang ipakita ang relasyon sa pagitan ng presyo bawat libra ng pulot at ng estado kung saan ito nagmula. Gawing sapat na mataas ang y
axis upang maipakita ang lahat ng estado:
sns.relplot(x="priceperlb", y="state", data=honey, height=15, aspect=.5);
Ngayon, ipakita ang parehong data gamit ang isang honey color scheme upang ipakita kung paano nagbabago ang presyo sa paglipas ng mga taon. Magagawa mo ito sa pamamagitan ng pagdaragdag ng 'hue' parameter upang ipakita ang pagbabago, taon-taon:
✅ Alamin ang higit pa tungkol sa mga color palettes na maaari mong gamitin sa Seaborn - subukan ang isang magandang rainbow color scheme!
sns.relplot(x="priceperlb", y="state", hue="year", palette="YlOrBr", data=honey, height=15, aspect=.5);
Sa pagbabago ng color scheme na ito, makikita mo na malinaw na may malakas na pagtaas sa paglipas ng mga taon sa presyo ng pulot bawat libra. Sa katunayan, kung titingnan mo ang isang sample set sa data upang i-verify (pumili ng isang partikular na estado, Arizona halimbawa) makikita mo ang pattern ng pagtaas ng presyo taon-taon, na may ilang mga eksepsyon:
estado | 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 |
Isa pang paraan upang ipakita ang progresyon na ito ay ang paggamit ng laki, sa halip na kulay. Para sa mga gumagamit na may colorblindness, maaaring mas magandang opsyon ito. I-edit ang iyong visualization upang ipakita ang pagtaas ng presyo sa pamamagitan ng pagtaas ng circumference ng mga tuldok:
sns.relplot(x="priceperlb", y="state", size="year", data=honey, height=15, aspect=.5);
Makikita mo ang unti-unting pagtaas ng laki ng mga tuldok.
Ito ba ay simpleng kaso ng supply at demand? Dahil sa mga salik tulad ng pagbabago ng klima at colony collapse, mas kaunti ba ang pulot na magagamit para bilhin taon-taon, kaya't tumataas ang presyo?
Upang matuklasan ang ugnayan sa pagitan ng ilang mga variable sa dataset na ito, tuklasin natin ang ilang line charts.
Line charts
Tanong: May malinaw bang pagtaas sa presyo ng pulot bawat libra taon-taon? Pinakamadaling matuklasan ito sa pamamagitan ng paggawa ng isang simpleng line chart:
sns.relplot(x="year", y="priceperlb", kind="line", data=honey);
Sagot: Oo, na may ilang mga eksepsyon sa paligid ng taong 2003:
✅ Dahil ang Seaborn ay nag-a-aggregate ng data sa isang linya, ipinapakita nito "ang maramihang sukat sa bawat x value sa pamamagitan ng pag-plot ng mean at ang 95% confidence interval sa paligid ng mean". Source. Ang time-consuming na behavior na ito ay maaaring i-disable sa pamamagitan ng pagdaragdag ng ci=None
.
Tanong: Sa 2003, makikita rin ba natin ang pagtaas sa supply ng pulot? Paano kung tingnan mo ang kabuuang produksyon taon-taon?
sns.relplot(x="year", y="totalprod", kind="line", data=honey);
Sagot: Hindi talaga. Kung titingnan mo ang kabuuang produksyon, tila ito ay tumaas sa partikular na taon, kahit na sa pangkalahatan ang dami ng pulot na ginagawa ay bumababa sa mga taong ito.
Tanong: Sa kasong iyon, ano kaya ang sanhi ng pagtaas ng presyo ng pulot sa paligid ng 2003?
Upang matuklasan ito, maaari kang mag-explore ng facet grid.
Facet grids
Ang facet grids ay kumukuha ng isang aspeto ng iyong dataset (sa ating kaso, maaari mong piliin ang 'year' upang maiwasan ang sobrang dami ng facets). Ang Seaborn ay maaaring gumawa ng plot para sa bawat isa sa mga facets ng iyong napiling x at y coordinates para sa mas madaling visual na paghahambing. Kapansin-pansin ba ang 2003 sa ganitong uri ng paghahambing?
Gumawa ng facet grid sa pamamagitan ng patuloy na paggamit ng relplot
tulad ng inirerekomenda ng Seaborn's documentation.
sns.relplot(
data=honey,
x="yieldpercol", y="numcol",
col="year",
col_wrap=3,
kind="line"
)
Sa visualization na ito, maaari mong ihambing ang ani bawat kolonya at bilang ng mga kolonya taon-taon, magkatabi na may wrap na nakatakda sa 3 para sa mga column:
Para sa dataset na ito, walang partikular na kapansin-pansin tungkol sa bilang ng mga kolonya at kanilang ani, taon-taon at estado sa estado. Mayroon bang ibang paraan upang tingnan ang paghahanap ng ugnayan sa pagitan ng dalawang variable na ito?
Dual-line Plots
Subukan ang isang multiline plot sa pamamagitan ng pag-overlay ng dalawang lineplots sa ibabaw ng isa't isa, gamit ang despine
ng Seaborn upang alisin ang kanilang top at right spines, at gamit ang ax.twinx
mula sa Matplotlib. Ang Twinx ay nagbibigay-daan sa isang chart na magbahagi ng x axis at magpakita ng dalawang y axes. Kaya, ipakita ang ani bawat kolonya at bilang ng mga kolonya, na naka-overlay:
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();
Habang walang kapansin-pansin sa mata sa paligid ng taong 2003, pinapayagan tayo nitong tapusin ang araling ito sa isang mas masayang tala: habang may pangkalahatang pagbaba sa bilang ng mga kolonya, ang bilang ng mga kolonya ay nagiging matatag kahit na ang kanilang ani bawat kolonya ay bumababa.
Go, bees, go!
🐝❤️
🚀 Hamon
Sa araling ito, natutunan mo ang higit pa tungkol sa iba pang gamit ng scatterplots at line grids, kabilang ang facet grids. Hamunin ang iyong sarili na gumawa ng facet grid gamit ang ibang dataset, marahil isa na ginamit mo bago ang mga araling ito. Pansinin kung gaano katagal ang paggawa nito at kung paano mo kailangang maging maingat sa dami ng grids na kailangang iguhit gamit ang mga teknik na ito.
Post-lecture quiz
Review & Self Study
Ang mga line plots ay maaaring simple o medyo kumplikado. Magbasa nang kaunti sa Seaborn documentation tungkol sa iba't ibang paraan kung paano mo ito mabubuo. Subukang pagandahin ang mga line charts na ginawa mo sa araling ito gamit ang iba pang mga pamamaraan na nakalista sa docs.
Assignment
Paunawa:
Ang dokumentong ito ay isinalin gamit ang AI translation service na Co-op Translator. Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang orihinal na wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.