يُعدّ تصوّر توزيعات البيانات حجر الزاوية في تحليل البيانات الفعال، والهستوجرام أداة قوية لهذا الغرض. وغالباً ما يحتاج المحللون إلى مقارنة توزيعات مجموعتين بيانات أو أكثر. توفر مكتبة Matplotlib، وهي مكتبة رسم بياني شائعة الاستخدام في بايثون، عدة طرق أنيقة لتحقيق هذه المقارنة. تستعرض هذه المقالة ثلاث طرق رئيسية لرسم العديد من الهستوجرامات في Matplotlib، مع أمثلة توضيحية وشروحات.
جدول المحتويات
- الطريقة الأولى: تراكب الهستوجرامات
- الطريقة الثانية: الهستوجرامات جنباً إلى جنب
- الطريقة الثالثة: تخصيص مظهر الهستوجرام
- الخلاصة
- الأسئلة الشائعة
الطريقة الأولى: تراكب الهستوجرامات
يتضمن النهج الأبسط تراكب الهستوجرامات مباشرة على نفس المحاور. وهذا يوفر مقارنة بصرية فورية للأشكال والتوزيعات. ومع ذلك، قد تصبح هذه الطريقة أقل فعالية إذا كانت التوزيعات متشابهة جداً أو إذا كانت كثافة البيانات عالية، مما يؤدي إلى إخفاء التفاصيل. الشفافية هي المفتاح للتخفيف من هذه المشكلة.
import matplotlib.pyplot as plt
import numpy as np
# بيانات عينة
data1 = np.random.randn(1000)
data2 = np.random.randn(1000) + 1 # مُزَحّزحة لمشاهدة أفضل
# الرسم البياني
plt.hist(data1, alpha=0.5, label='Data 1', bins=30)
plt.hist(data2, alpha=0.5, label='Data 2', bins=30)
plt.xlabel('القيمة')
plt.ylabel('التردد')
plt.title('الهستوجرامات المتراكبة')
plt.legend(loc='upper right')
plt.show()
يستخدم هذا الكود معلمة alpha
للتحكم في الشفافية، مما يسمح برؤية كلا الهستوجرامين بوضوح. تم إضافة تسميات لتسهيل التعريف، ويزيد المفتاح من الوضوح.
الطريقة الثانية: الهستوجرامات جنباً إلى جنب
من أجل وضوح أفضل، خاصة عند مقارنة التوزيعات المتشابهة، يوصى بشدة باستخدام الهستوجرامات جنباً إلى جنب. تجعل وظيفة الرسم الفرعي في Matplotlib هذا أمراً بسيطاً.
import matplotlib.pyplot as plt
import numpy as np
# بيانات عينة (كما هو مذكور أعلاه)
data1 = np.random.randn(1000)
data2 = np.random.randn(1000) + 1
# رسم بياني جنباً إلى جنب
fig, axes = plt.subplots(1, 2, figsize=(10, 5))
axes[0].hist(data1, bins=20)
axes[0].set_title('Data 1')
axes[0].set_xlabel('القيمة')
axes[0].set_ylabel('التردد')
axes[1].hist(data2, bins=20)
axes[1].set_title('Data 2')
axes[1].set_xlabel('القيمة')
axes[1].set_ylabel('التردد')
plt.tight_layout()
plt.show()
يقوم هذا الكود بإنشاء رسم بياني به رسمين فرعيين، كل منهما مخصص لهستوجرام واحد. يضمن plt.tight_layout()
المسافة المناسبة بين الرسوم الفرعية.
الطريقة الثالثة: تخصيص مظهر الهستوجرام
يمكن تحقيق مزيد من التمييز البصري من خلال استخدام ألوان مختلفة، وألوان حواف، وأنماط خطوط، أو حتى أنواع الهستوجرام (مثل الشريط مقابل الخطوة).
import matplotlib.pyplot as plt
import numpy as np
# بيانات عينة (كما هو مذكور أعلاه)
data1 = np.random.randn(1000)
data2 = np.random.randn(1000) + 1
# رسم بياني بأنماط مختلفة
plt.hist(data1, bins=20, color='skyblue', edgecolor='black', label='Data 1')
plt.hist(data2, bins=20, color='coral', edgecolor='black', alpha=0.7, label='Data 2', histtype='step')
plt.xlabel('القيمة')
plt.ylabel('التردد')
plt.title('الهستوجرامات بأنماط مختلفة')
plt.legend()
plt.show()
يوضح هذا المثال استخدام ألوان مختلفة، وألوان حواف، ومعلمة histtype
لإنشاء هستوجرامات متميزة بصرياً. يظل المفتاح ضرورياً للتسمية الصحيحة.
الخلاصة
توفر Matplotlib مجموعة أدوات مرنة وقوية لإنشاء تصورات إعلامية لتوزيعات البيانات. يعتمد اختيار طريقة رسم العديد من الهستوجرامات بشكل كبير على الخصائص المحددة للبيانات والمستوى المطلوب من التفاصيل في المقارنة. الهستوجرامات المتداخلة مناسبة للتحقق السريع، بينما توفر الهستوجرامات جنباً إلى جنب والرسوم المخصصة وضوحاً وتأثيراً بصرياً محسنين.
الأسئلة الشائعة
- س: كيف يمكنني ضبط عدد الحاويات؟ ج: استخدم معلمة
bins
فيplt.hist()
. جرّب لإيجاد ما يكشف أفضل عن بنية البيانات. - س: هل يمكنني استخدام ألوان وتسميات مختلفة؟ ج: بالتأكيد! استخدم معلمات
color
وlabel
، ودائماً ضمّن مفتاحاً باستخدامplt.legend()
. - س: كيف يمكنني حفظ الرسم البياني؟ ج: استخدم
plt.savefig('filename.png')
(أو وظيفة مشابهة) لحفظ الرسم البياني. استبدل'filename.png'
باسم الملف وامتداده المفضل لديك. - س: تتداخل الهستوجرامات الخاصة بي كثيراً. ماذا يمكنني أن أفعل؟ ج: جرب الهستوجرامات جنباً إلى جنب، زِد الشفافية (
alpha
)، استخدم خياراتhisttype
مختلفة، أو فكر في تطبيع بياناتك إذا كانت المقاييس مختلفة بشكل كبير.