|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "af6a12015c6e250e500b570a9fa42593",
|
|
|
"translation_date": "2025-08-27T10:47:25+00:00",
|
|
|
"source_file": "3-Data-Visualization/11-visualization-proportions/README.md",
|
|
|
"language_code": "ar"
|
|
|
}
|
|
|
-->
|
|
|
# تصور النسب
|
|
|
|
|
|
|](../../sketchnotes/11-Visualizing-Proportions.png)|
|
|
|
|:---:|
|
|
|
|تصور النسب - _رسم توضيحي من [@nitya](https://twitter.com/nitya)_ |
|
|
|
|
|
|
في هذا الدرس، ستستخدم مجموعة بيانات تركز على الطبيعة لتصور النسب، مثل عدد الأنواع المختلفة من الفطريات الموجودة في مجموعة بيانات عن الفطر. دعونا نستكشف هذه الفطريات المثيرة للاهتمام باستخدام مجموعة بيانات مأخوذة من Audubon تحتوي على تفاصيل حول 23 نوعًا من الفطر ذو الخياشيم من عائلتي Agaricus وLepiota. ستجرب تصورات شهية مثل:
|
|
|
|
|
|
- مخططات دائرية 🥧
|
|
|
- مخططات دونات 🍩
|
|
|
- مخططات وافل 🧇
|
|
|
|
|
|
> 💡 مشروع مثير للاهتمام جدًا يسمى [Charticulator](https://charticulator.com) من Microsoft Research يقدم واجهة مجانية للسحب والإفلات لإنشاء تصورات البيانات. في أحد دروسهم التعليمية، يستخدمون أيضًا مجموعة بيانات الفطر هذه! لذا يمكنك استكشاف البيانات وتعلم المكتبة في نفس الوقت: [درس Charticulator](https://charticulator.com/tutorials/tutorial4.html).
|
|
|
|
|
|
## [اختبار ما قبل المحاضرة](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/20)
|
|
|
|
|
|
## تعرف على الفطر الخاص بك 🍄
|
|
|
|
|
|
الفطر مثير جدًا للاهتمام. دعونا نستورد مجموعة بيانات لدراسته:
|
|
|
|
|
|
```python
|
|
|
import pandas as pd
|
|
|
import matplotlib.pyplot as plt
|
|
|
mushrooms = pd.read_csv('../../data/mushrooms.csv')
|
|
|
mushrooms.head()
|
|
|
```
|
|
|
يتم طباعة جدول يحتوي على بيانات رائعة للتحليل:
|
|
|
|
|
|
| الفئة | شكل القبعة | سطح القبعة | لون القبعة | كدمات | الرائحة | ارتباط الخياشيم | تباعد الخياشيم | حجم الخياشيم | لون الخياشيم | شكل الساق | جذر الساق | سطح الساق فوق الحلقة | سطح الساق تحت الحلقة | لون الساق فوق الحلقة | لون الساق تحت الحلقة | نوع الحجاب | لون الحجاب | عدد الحلقات | نوع الحلقة | لون طباعة الأبواغ | الكثافة | الموطن |
|
|
|
| ---------- | ---------- | ----------- | ---------- | ------ | ------- | ---------------- | -------------- | ------------ | ------------ | ---------- | --------- | -------------------- | -------------------- | -------------------- | -------------------- | ---------- | ---------- | ------------ | ---------- | ----------------- | --------- | ------ |
|
|
|
| سام | محدب | أملس | بني | كدمات | نفاذ | حر | قريب | ضيق | أسود | متسع | متساوٍ | أملس | أملس | أبيض | أبيض | جزئي | أبيض | واحد | معلق | أسود | متناثر | حضري |
|
|
|
| صالح للأكل | محدب | أملس | أصفر | كدمات | لوزي | حر | قريب | عريض | أسود | متسع | مضرب | أملس | أملس | أبيض | أبيض | جزئي | أبيض | واحد | معلق | بني | كثير | أعشاب |
|
|
|
| صالح للأكل | جرس | أملس | أبيض | كدمات | يانسون | حر | قريب | عريض | بني | متسع | مضرب | أملس | أملس | أبيض | أبيض | جزئي | أبيض | واحد | معلق | بني | كثير | مروج |
|
|
|
| سام | محدب | متقشر | أبيض | كدمات | نفاذ | حر | قريب | ضيق | بني | متسع | متساوٍ | أملس | أملس | أبيض | أبيض | جزئي | أبيض | واحد | معلق | أسود | متناثر | حضري |
|
|
|
|
|
|
على الفور، تلاحظ أن جميع البيانات نصية. ستحتاج إلى تحويل هذه البيانات لتتمكن من استخدامها في مخطط. في الواقع، يتم تمثيل معظم البيانات ككائن:
|
|
|
|
|
|
```python
|
|
|
print(mushrooms.select_dtypes(["object"]).columns)
|
|
|
```
|
|
|
|
|
|
الناتج هو:
|
|
|
|
|
|
```output
|
|
|
Index(['class', 'cap-shape', 'cap-surface', 'cap-color', 'bruises', 'odor',
|
|
|
'gill-attachment', 'gill-spacing', 'gill-size', 'gill-color',
|
|
|
'stalk-shape', 'stalk-root', 'stalk-surface-above-ring',
|
|
|
'stalk-surface-below-ring', 'stalk-color-above-ring',
|
|
|
'stalk-color-below-ring', 'veil-type', 'veil-color', 'ring-number',
|
|
|
'ring-type', 'spore-print-color', 'population', 'habitat'],
|
|
|
dtype='object')
|
|
|
```
|
|
|
خذ هذه البيانات وحوّل العمود 'الفئة' إلى فئة:
|
|
|
|
|
|
```python
|
|
|
cols = mushrooms.select_dtypes(["object"]).columns
|
|
|
mushrooms[cols] = mushrooms[cols].astype('category')
|
|
|
```
|
|
|
|
|
|
```python
|
|
|
edibleclass=mushrooms.groupby(['class']).count()
|
|
|
edibleclass
|
|
|
```
|
|
|
|
|
|
الآن، إذا قمت بطباعة بيانات الفطر، يمكنك أن ترى أنها تم تجميعها في فئات وفقًا لفئة السام/الصالح للأكل:
|
|
|
|
|
|
| | شكل القبعة | سطح القبعة | لون القبعة | كدمات | الرائحة | ارتباط الخياشيم | تباعد الخياشيم | حجم الخياشيم | لون الخياشيم | شكل الساق | ... | سطح الساق تحت الحلقة | لون الساق فوق الحلقة | لون الساق تحت الحلقة | نوع الحجاب | لون الحجاب | عدد الحلقات | نوع الحلقة | لون طباعة الأبواغ | الكثافة | الموطن |
|
|
|
| ---------- | ---------- | ----------- | ---------- | ------ | ------- | ---------------- | -------------- | ------------ | ------------ | ---------- | --- | -------------------- | -------------------- | -------------------- | ---------- | ---------- | ------------ | ---------- | ----------------- | --------- | ------ |
|
|
|
| الفئة | | | | | | | | | | | | | | | | | | | | | |
|
|
|
| صالح للأكل | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | ... | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 |
|
|
|
| سام | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | ... | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 |
|
|
|
|
|
|
إذا اتبعت الترتيب المقدم في هذا الجدول لإنشاء تسميات فئاتك، يمكنك إنشاء مخطط دائري:
|
|
|
|
|
|
## دائري!
|
|
|
|
|
|
```python
|
|
|
labels=['Edible','Poisonous']
|
|
|
plt.pie(edibleclass['population'],labels=labels,autopct='%.1f %%')
|
|
|
plt.title('Edible?')
|
|
|
plt.show()
|
|
|
```
|
|
|
ها هو، مخطط دائري يظهر نسب هذه البيانات وفقًا لهاتين الفئتين من الفطر. من المهم جدًا ترتيب التسميات بشكل صحيح، خاصة هنا، لذا تأكد من التحقق من ترتيب بناء مصفوفة التسميات!
|
|
|
|
|
|

|
|
|
|
|
|
## دونات!
|
|
|
|
|
|
مخطط دائري أكثر إثارة بصريًا هو مخطط الدونات، وهو مخطط دائري مع ثقب في المنتصف. دعونا نلقي نظرة على بياناتنا باستخدام هذه الطريقة.
|
|
|
|
|
|
ألقِ نظرة على البيئات المختلفة التي ينمو فيها الفطر:
|
|
|
|
|
|
```python
|
|
|
habitat=mushrooms.groupby(['habitat']).count()
|
|
|
habitat
|
|
|
```
|
|
|
هنا، تقوم بتجميع بياناتك حسب البيئة. هناك 7 بيئات مدرجة، لذا استخدمها كتسميات لمخطط الدونات الخاص بك:
|
|
|
|
|
|
```python
|
|
|
labels=['Grasses','Leaves','Meadows','Paths','Urban','Waste','Wood']
|
|
|
|
|
|
plt.pie(habitat['class'], labels=labels,
|
|
|
autopct='%1.1f%%', pctdistance=0.85)
|
|
|
|
|
|
center_circle = plt.Circle((0, 0), 0.40, fc='white')
|
|
|
fig = plt.gcf()
|
|
|
|
|
|
fig.gca().add_artist(center_circle)
|
|
|
|
|
|
plt.title('Mushroom Habitats')
|
|
|
|
|
|
plt.show()
|
|
|
```
|
|
|
|
|
|

|
|
|
|
|
|
يرسم هذا الكود مخططًا ودائرة مركزية، ثم يضيف تلك الدائرة المركزية في المخطط. قم بتعديل عرض الدائرة المركزية عن طريق تغيير `0.40` إلى قيمة أخرى.
|
|
|
|
|
|
يمكن تعديل مخططات الدونات بطرق عدة لتغيير التسميات. يمكن تسليط الضوء على التسميات لتحسين القراءة. تعرف على المزيد في [المستندات](https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html?highlight=donut).
|
|
|
|
|
|
الآن بعد أن عرفت كيفية تجميع بياناتك وعرضها كمخطط دائري أو دونات، يمكنك استكشاف أنواع أخرى من المخططات. جرب مخطط الوافل، وهو مجرد طريقة مختلفة لاستكشاف الكميات.
|
|
|
|
|
|
## وافل!
|
|
|
|
|
|
مخطط "الوافل" هو طريقة مختلفة لتصور الكميات كمصفوفة ثنائية الأبعاد من المربعات. جرب تصور الكميات المختلفة لألوان قبعات الفطر في هذه المجموعة. للقيام بذلك، تحتاج إلى تثبيت مكتبة مساعدة تسمى [PyWaffle](https://pypi.org/project/pywaffle/) واستخدام Matplotlib:
|
|
|
|
|
|
```python
|
|
|
pip install pywaffle
|
|
|
```
|
|
|
|
|
|
اختر جزءًا من بياناتك لتجميعه:
|
|
|
|
|
|
```python
|
|
|
capcolor=mushrooms.groupby(['cap-color']).count()
|
|
|
capcolor
|
|
|
```
|
|
|
|
|
|
قم بإنشاء مخطط وافل عن طريق إنشاء تسميات ثم تجميع بياناتك:
|
|
|
|
|
|
```python
|
|
|
import pandas as pd
|
|
|
import matplotlib.pyplot as plt
|
|
|
from pywaffle import Waffle
|
|
|
|
|
|
data ={'color': ['brown', 'buff', 'cinnamon', 'green', 'pink', 'purple', 'red', 'white', 'yellow'],
|
|
|
'amount': capcolor['class']
|
|
|
}
|
|
|
|
|
|
df = pd.DataFrame(data)
|
|
|
|
|
|
fig = plt.figure(
|
|
|
FigureClass = Waffle,
|
|
|
rows = 100,
|
|
|
values = df.amount,
|
|
|
labels = list(df.color),
|
|
|
figsize = (30,30),
|
|
|
colors=["brown", "tan", "maroon", "green", "pink", "purple", "red", "whitesmoke", "yellow"],
|
|
|
)
|
|
|
```
|
|
|
|
|
|
باستخدام مخطط الوافل، يمكنك رؤية نسب ألوان قبعات الفطر في هذه المجموعة بوضوح. من المثير للاهتمام أن هناك العديد من الفطر ذي القبعات الخضراء!
|
|
|
|
|
|

|
|
|
|
|
|
✅ يدعم PyWaffle الرموز داخل المخططات التي تستخدم أي رمز متاح في [Font Awesome](https://fontawesome.com/). قم ببعض التجارب لإنشاء مخطط وافل أكثر إثارة باستخدام الرموز بدلاً من المربعات.
|
|
|
|
|
|
في هذا الدرس، تعلمت ثلاث طرق لتصور النسب. أولاً، تحتاج إلى تجميع بياناتك في فئات ثم تقرر الطريقة الأفضل لعرض البيانات - دائري، دونات، أو وافل. جميعها لذيذة وتمنح المستخدم لمحة فورية عن مجموعة البيانات.
|
|
|
|
|
|
## 🚀 تحدٍ
|
|
|
|
|
|
حاول إعادة إنشاء هذه المخططات الشهية في [Charticulator](https://charticulator.com).
|
|
|
## [اختبار ما بعد المحاضرة](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/21)
|
|
|
|
|
|
## المراجعة والدراسة الذاتية
|
|
|
|
|
|
أحيانًا لا يكون من الواضح متى يجب استخدام مخطط دائري، دونات، أو وافل. إليك بعض المقالات لقراءتها حول هذا الموضوع:
|
|
|
|
|
|
https://www.beautiful.ai/blog/battle-of-the-charts-pie-chart-vs-donut-chart
|
|
|
|
|
|
https://medium.com/@hypsypops/pie-chart-vs-donut-chart-showdown-in-the-ring-5d24fd86a9ce
|
|
|
|
|
|
https://www.mit.edu/~mbarker/formula1/f1help/11-ch-c6.htm
|
|
|
|
|
|
https://medium.datadriveninvestor.com/data-visualization-done-the-right-way-with-tableau-waffle-chart-fdf2a19be402
|
|
|
|
|
|
قم ببعض البحث للعثور على مزيد من المعلومات حول هذا القرار الصعب.
|
|
|
|
|
|
## الواجب
|
|
|
|
|
|
[جربه في Excel](assignment.md)
|
|
|
|
|
|
---
|
|
|
|
|
|
**إخلاء المسؤولية**:
|
|
|
تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. |