16 KiB
تجسم روابط: همه چیز درباره عسل 🍯
![]() |
|---|
| تجسم روابط - اسکتچنوت توسط @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);
حالا، همان دادهها را با یک طرح رنگی مرتبط با عسل نمایش دهید تا نشان دهید قیمت چگونه در طول سالها تغییر کرده است. میتوانید این کار را با افزودن پارامتر 'hue' برای نمایش تغییرات سال به سال انجام دهید:
✅ درباره طرحهای رنگی که میتوانید در Seaborn استفاده کنید بیشتر بیاموزید - یک طرح رنگی رنگینکمانی زیبا را امتحان کنید!
sns.relplot(x="priceperlb", y="state", hue="year", palette="YlOrBr", data=honey, height=15, aspect=.5);
با این تغییر طرح رنگ، میتوانید ببینید که به وضوح یک پیشرفت قوی در طول سالها از نظر قیمت عسل به ازای هر پوند وجود دارد. در واقع، اگر یک مجموعه نمونه از دادهها را برای تأیید بررسی کنید (مثلاً ایالت آریزونا)، میتوانید الگویی از افزایش قیمت سال به سال با چند استثنا مشاهده کنید:
| ایالت | تعداد کلنی | بازدهی هر کلنی | تولید کل | ذخایر | قیمت هر پوند | ارزش تولید | سال |
|---|---|---|---|---|---|---|---|
| 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);
میتوانید ببینید که اندازه نقاط به تدریج افزایش مییابد.
آیا این یک مورد ساده از عرضه و تقاضا است؟ آیا به دلیل عواملی مانند تغییرات اقلیمی و فروپاشی کلنی، عسل کمتری برای خرید در دسترس است و بنابراین قیمت افزایش مییابد؟
برای کشف همبستگی بین برخی از متغیرهای این مجموعه داده، بیایید چند نمودار خطی را بررسی کنیم.
نمودارهای خطی
سؤال: آیا افزایش واضحی در قیمت عسل به ازای هر پوند در طول سالها وجود دارد؟ میتوانید به راحتی این موضوع را با ایجاد یک نمودار خطی ساده کشف کنید:
sns.relplot(x="year", y="priceperlb", kind="line", data=honey);
پاسخ: بله، با چند استثنا در حدود سال ۲۰۰۳:
✅ از آنجا که Seaborn دادهها را حول یک خط تجمیع میکند، "اندازهگیریهای متعدد در هر مقدار x را با رسم میانگین و فاصله اطمینان ۹۵٪ در اطراف میانگین نمایش میدهد". منبع. این رفتار زمانبر را میتوان با افزودن ci=None غیرفعال کرد.
سؤال: خب، آیا در سال ۲۰۰۳ میتوانیم افزایش در عرضه عسل را نیز مشاهده کنیم؟ اگر تولید کل را سال به سال بررسی کنید چه؟
sns.relplot(x="year", y="totalprod", kind="line", data=honey);
پاسخ: نه واقعاً. اگر به تولید کل نگاه کنید، به نظر میرسد که در آن سال خاص افزایش یافته است، حتی اگر به طور کلی مقدار عسل تولید شده در این سالها در حال کاهش باشد.
سؤال: در این صورت، چه چیزی میتوانست باعث افزایش قیمت عسل در حدود سال ۲۰۰۳ شود؟
برای کشف این موضوع، میتوانید یک شبکه فاست را بررسی کنید.
شبکههای فاست
شبکههای فاست یک جنبه از مجموعه داده شما را میگیرند (در مورد ما، میتوانید 'سال' را انتخاب کنید تا از تولید بیش از حد فاستها جلوگیری شود). سپس Seaborn میتواند یک نمودار برای هر یک از این فاستها از مختصات x و y انتخابی شما ایجاد کند تا مقایسه بصری آسانتر شود. آیا سال ۲۰۰۳ در این نوع مقایسه برجسته است؟
یک شبکه فاست ایجاد کنید و به استفاده از relplot همانطور که در مستندات Seaborn توصیه شده است، ادامه دهید.
sns.relplot(
data=honey,
x="yieldpercol", y="numcol",
col="year",
col_wrap=3,
kind="line"
در این تجسم، میتوانید بازدهی هر کلنی و تعداد کلنیها را سال به سال، کنار هم با تنظیم wrap روی ۳ برای ستونها مقایسه کنید:
برای این مجموعه داده، هیچ چیز خاصی در مورد تعداد کلنیها و بازدهی آنها، سال به سال و ایالت به ایالت برجسته نیست. آیا راه دیگری برای یافتن همبستگی بین این دو متغیر وجود دارد؟
نمودارهای دوخطی
یک نمودار چندخطی را با قرار دادن دو نمودار خطی روی یکدیگر امتحان کنید، با استفاده از '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();
در حالی که چیزی در حدود سال ۲۰۰۳ به چشم نمیآید، این نمودار به ما اجازه میدهد درس را با یک نکته خوشحالکنندهتر به پایان برسانیم: در حالی که تعداد کلنیها به طور کلی در حال کاهش است، تعداد کلنیها در حال تثبیت است، حتی اگر بازدهی هر کلنی کاهش یابد.
زنده باد زنبورها! 🐝❤️
🚀 چالش
در این درس، کمی بیشتر درباره استفادههای دیگر نمودارهای پراکندگی و شبکههای خطی، از جمله شبکههای فاست یاد گرفتید. خودتان را به چالش بکشید تا یک شبکه فاست با استفاده از یک مجموعه داده دیگر، شاید یکی از مجموعه دادههایی که قبلاً در این درسها استفاده کردهاید، ایجاد کنید. توجه کنید که ایجاد آنها چقدر طول میکشد و چگونه باید مراقب باشید که چند شبکه باید با استفاده از این تکنیکها رسم کنید.
آزمون پس از درس
مرور و مطالعه شخصی
نمودارهای خطی میتوانند ساده یا بسیار پیچیده باشند. کمی در مستندات Seaborn درباره روشهای مختلفی که میتوانید آنها را بسازید مطالعه کنید. سعی کنید نمودارهای خطی که در این درس ساختهاید را با روشهای دیگر ذکر شده در مستندات بهبود دهید.
تکلیف
سلب مسئولیت:
این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما برای دقت تلاش میکنیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادقتیها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، ترجمه حرفهای انسانی توصیه میشود. ما هیچ مسئولیتی در قبال سوءتفاهمها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.







