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

با ادامه تمرکز بر طبیعت در تحقیقاتمان، بیایید تجسم‌های جالبی را کشف کنیم که روابط بین انواع مختلف عسل را نشان می‌دهند، بر اساس یک مجموعه داده که از وزارت کشاورزی ایالات متحده استخراج شده است.

این مجموعه داده شامل حدود ۶۰۰ مورد است که تولید عسل در بسیاری از ایالت‌های آمریکا را نمایش می‌دهد. به عنوان مثال، می‌توانید تعداد کلنی‌ها، بازده هر کلنی، تولید کل، ذخایر، قیمت هر پوند و ارزش عسل تولید شده در یک ایالت خاص را از سال ۱۹۹۸ تا ۲۰۱۲ بررسی کنید، به طوری که هر ردیف نشان‌دهنده یک سال برای هر ایالت است.

جالب خواهد بود که رابطه بین تولید سالانه یک ایالت و مثلاً قیمت عسل در آن ایالت را تجسم کنیم. یا می‌توانید رابطه بین بازده عسل هر کلنی در ایالت‌های مختلف را بررسی کنید. این بازه زمانی شامل دوره‌ای است که اختلال فروپاشی کلنی (CCD) برای اولین بار در سال ۲۰۰۶ مشاهده شد (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);

پاسخ: بله، با چند استثنا در حدود سال ۲۰۰۳:

line chart 1

از آنجا که Seaborn داده‌ها را در یک خط تجمیع می‌کند، "اندازه‌گیری‌های متعدد در هر مقدار x را با رسم میانگین و فاصله اطمینان ۹۵٪ در اطراف میانگین نمایش می‌دهد". منبع. این رفتار زمان‌بر را می‌توان با افزودن ci=None غیرفعال کرد.

سؤال: خب، آیا در سال ۲۰۰۳ می‌توانیم افزایش در عرضه عسل را نیز مشاهده کنیم؟ اگر تولید کل را سال به سال بررسی کنید چه؟

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

line chart 2

پاسخ: نه واقعاً. اگر به تولید کل نگاه کنید، به نظر می‌رسد که در آن سال خاص افزایش یافته است، حتی اگر به طور کلی مقدار عسل تولید شده در این سال‌ها در حال کاهش باشد.

سؤال: در این صورت، چه چیزی می‌توانسته باعث افزایش قیمت عسل در حدود سال ۲۰۰۳ شود؟

برای کشف این موضوع، می‌توانید یک شبکه فاست را بررسی کنید.

شبکه‌های فاست

شبکه‌های فاست یک جنبه از مجموعه داده شما را می‌گیرند (در مورد ما، می‌توانید 'سال' را انتخاب کنید تا از تولید بیش از حد فاست‌ها جلوگیری شود). سپس Seaborn می‌تواند یک نمودار برای هر یک از این فاست‌ها از مختصات x و y انتخابی شما ایجاد کند تا مقایسه بصری آسان‌تر شود. آیا سال ۲۰۰۳ در این نوع مقایسه برجسته است؟

یک شبکه فاست ایجاد کنید و به استفاده از relplot همان‌طور که در مستندات Seaborn توصیه شده است، ادامه دهید.

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

در این تجسم، می‌توانید بازده هر کلنی و تعداد کلنی‌ها را سال به سال، کنار هم با تنظیم wrap در ۳ برای ستون‌ها مقایسه کنید:

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

در حالی که چیزی در حدود سال ۲۰۰۳ به چشم نمی‌آید، این نمودار به ما اجازه می‌دهد این درس را با یک نکته خوشحال‌کننده‌تر به پایان برسانیم: در حالی که تعداد کلنی‌ها به طور کلی در حال کاهش است، تعداد کلنی‌ها در حال تثبیت است حتی اگر بازده هر کلنی کاهش یابد.

زنبورها، موفق باشید! 🐝❤️

🚀 چالش

در این درس، کمی بیشتر درباره استفاده‌های دیگر نمودارهای پراکندگی و شبکه‌های خطی، از جمله شبکه‌های فاست، یاد گرفتید. خودتان را به چالش بکشید تا یک شبکه فاست با استفاده از یک مجموعه داده دیگر ایجاد کنید، شاید یکی از مجموعه داده‌هایی که قبل از این درس‌ها استفاده کرده‌اید. توجه کنید که ایجاد آن‌ها چقدر زمان می‌برد و چگونه باید مراقب باشید که چند شبکه باید با استفاده از این تکنیک‌ها رسم کنید.

آزمون پس از درس

مرور و مطالعه شخصی

نمودارهای خطی می‌توانند ساده یا بسیار پیچیده باشند. کمی در مستندات Seaborn درباره روش‌های مختلفی که می‌توانید آن‌ها را بسازید مطالعه کنید. سعی کنید نمودارهای خطی که در این درس ساخته‌اید را با روش‌های دیگر ذکر شده در مستندات بهبود ببخشید.

تکلیف

به کندوی زنبور شیرجه بزنید


سلب مسئولیت:
این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما برای دقت تلاش می‌کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادقتی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، ترجمه حرفه‌ای انسانی توصیه می‌شود. ما هیچ مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.