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.

15 KiB

تصور العلاقات: كل شيء عن العسل 🍯

 رسم توضيحي بواسطة (@sketchthedocs)
تصور العلاقات - رسم توضيحي بواسطة @nitya

استمرارًا في التركيز على الطبيعة في بحثنا، دعونا نكتشف تصورات مثيرة للاهتمام لعرض العلاقات بين أنواع العسل المختلفة، وفقًا لمجموعة بيانات مستمدة من وزارة الزراعة الأمريكية.

تتضمن هذه المجموعة حوالي 600 عنصر تعرض إنتاج العسل في العديد من الولايات الأمريكية. على سبيل المثال، يمكنك النظر في عدد المستعمرات، الإنتاج لكل مستعمرة، الإنتاج الإجمالي، المخزون، السعر لكل رطل، وقيمة العسل المنتج في ولاية معينة من عام 1998 إلى 2012، مع صف واحد لكل سنة لكل ولاية.

سيكون من المثير تصور العلاقة بين إنتاج ولاية معينة سنويًا وبين، على سبيل المثال، سعر العسل في تلك الولاية. أو بدلاً من ذلك، يمكنك تصور العلاقة بين إنتاج العسل لكل مستعمرة في الولايات المختلفة. تغطي هذه الفترة الزمنية ظهور "اضطراب انهيار المستعمرات" أو "CCD" الذي شوهد لأول مرة في عام 2006 (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()

ستلاحظ أن بيانات العسل تحتوي على عدة أعمدة مثيرة للاهتمام، بما في ذلك السنة والسعر لكل رطل. دعونا نستكشف هذه البيانات، مجمعة حسب الولايات الأمريكية:

الولاية numcol yieldpercol totalprod stocks priceperlb prodvalue السنة
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

مع هذا التغيير في نظام الألوان، يمكنك أن ترى بوضوح تقدمًا قويًا على مدار السنوات فيما يتعلق بسعر العسل لكل رطل. بالفعل، إذا نظرت إلى مجموعة بيانات للتحقق (اختر ولاية معينة، مثل أريزونا)، يمكنك رؤية نمط زيادة الأسعار عامًا بعد عام، مع بعض الاستثناءات:

الولاية numcol yieldpercol totalprod stocks priceperlb prodvalue السنة
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);

الإجابة: نعم، مع بعض الاستثناءات حول عام 2003:

line chart 1

لأن Seaborn يقوم بتجميع البيانات حول خط واحد، فإنه يعرض "القياسات المتعددة عند كل قيمة x عن طريق رسم المتوسط وفاصل الثقة بنسبة 95% حول المتوسط". المصدر. يمكن تعطيل هذا السلوك الذي يستغرق وقتًا عن طريق إضافة ci=None.

السؤال: حسنًا، في عام 2003 هل يمكننا أيضًا رؤية زيادة في كمية العسل المتوفرة؟ ماذا لو نظرت إلى الإنتاج الإجمالي عامًا بعد عام؟

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

line chart 2

الإجابة: ليس حقًا. إذا نظرت إلى الإنتاج الإجمالي، يبدو أنه قد زاد في ذلك العام تحديدًا، على الرغم من أن كمية العسل المنتجة عمومًا في انخفاض خلال هذه السنوات.

السؤال: في هذه الحالة، ما الذي يمكن أن يكون سبب تلك الزيادة في سعر العسل حول عام 2003؟

لاكتشاف ذلك، يمكنك استكشاف شبكة الأوجه.

شبكات الأوجه

تأخذ شبكات الأوجه جانبًا واحدًا من مجموعة البيانات الخاصة بك (في حالتنا، يمكنك اختيار "السنة" لتجنب إنتاج عدد كبير جدًا من الأوجه). يمكن لـ Seaborn بعد ذلك إنشاء مخطط لكل من هذه الأوجه للإحداثيات x وy التي اخترتها للمقارنة بسهولة. هل يبرز عام 2003 في هذا النوع من المقارنة؟

قم بإنشاء شبكة أوجه باستخدام relplot كما هو موصى به في وثائق Seaborn.

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

في هذا التصور، يمكنك مقارنة الإنتاج لكل مستعمرة وعدد المستعمرات عامًا بعد عام، جنبًا إلى جنب مع التفاف مضبوط على 3 للأعمدة:

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

بينما لا يبرز شيء للعين حول عام 2003، فإنه يسمح لنا بإنهاء هذا الدرس بملاحظة أكثر إيجابية: على الرغم من وجود انخفاض عام في عدد المستعمرات، فإن عدد المستعمرات يستقر حتى لو كان إنتاجها لكل مستعمرة يتناقص.

هيا أيها النحل، استمروا!

🐝❤️

🚀 التحدي

في هذا الدرس، تعلمت المزيد عن استخدامات مخططات التبعثر وشبكات الخطوط، بما في ذلك شبكات الأوجه. تحدى نفسك لإنشاء شبكة أوجه باستخدام مجموعة بيانات مختلفة، ربما واحدة استخدمتها قبل هذه الدروس. لاحظ الوقت الذي تستغرقه لإنشائها وكيف تحتاج إلى الحذر بشأن عدد الشبكات التي تحتاج إلى رسمها باستخدام هذه التقنيات.

اختبار ما بعد المحاضرة

المراجعة والدراسة الذاتية

يمكن أن تكون المخططات الخطية بسيطة أو معقدة للغاية. قم ببعض القراءة في وثائق Seaborn حول الطرق المختلفة التي يمكنك من خلالها بناؤها. حاول تحسين المخططات الخطية التي أنشأتها في هذا الدرس باستخدام طرق أخرى مدرجة في الوثائق.

الواجب

استكشف خلية النحل


إخلاء المسؤولية:
تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي Co-op Translator. بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.