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