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 ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفه‌ای انسانی توصیه می‌شود. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.