الدرس 7 من 8
الرسوم البيانية
رسمة واحدة بتوريك اللي جدول كامل مش هيوريهولك.
اختار الرسمة حسب السؤال
| سؤالك | الرسمة |
|---|---|
| بيتغير إزاي مع الوقت؟ | Line chart |
| مين أكبر من مين؟ | Bar chart |
| الأرقام متوزعة إزاي؟ | Histogram |
| فيه علاقة بين متغيرين؟ | Scatter plot |
Line chart: التغير مع الوقت
import matplotlib.pyplot as plt months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"] revenue = [42, 48, 45, 61, 70, 78] # thousands EGP plt.figure(figsize=(7, 3.5)) plt.plot(months, revenue, marker="o", color="#3776AB", linewidth=2.5) plt.title("Monthly revenue (K EGP)") plt.ylabel("Revenue") plt.grid(alpha=0.3) plt.show()
Bar chart: المقارنة
import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv("orders.csv") df["revenue"] = df["qty"] * df["price"] by_city = df.groupby("city")["revenue"].sum().sort_values() plt.figure(figsize=(7, 3.5)) plt.barh(by_city.index, by_city.values, color="#3776AB") plt.title("Revenue by city (EGP)") plt.show()
Histogram: التوزيع
import numpy as np import matplotlib.pyplot as plt rng = np.random.default_rng(7) delivery_days = rng.normal(loc=3, scale=1, size=500).clip(0.5, 8) plt.figure(figsize=(7, 3.5)) plt.hist(delivery_days, bins=25, color="#FFD43B", edgecolor="#14213D") plt.axvline(delivery_days.mean(), color="#D64545", linestyle="--", label="mean") plt.title("Delivery time (days)") plt.legend() plt.show()
الشكل ده هو منحنى الجرس (التوزيع الطبيعي) اللي شفناه في المرحلة ٣. أغلب الأوردرات بتوصل في ٢ لـ ٤ أيام، والقليل بياخد أكتر.
Scatter: فيه علاقة؟ (مع Seaborn)
Seaborn مبنية فوق Matplotlib، وبتعمل رسوم إحصائية حلوة بسطر واحد، وبتفهم الـ DataFrames على طول.
import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt rng = np.random.default_rng(1) area = rng.uniform(60, 200, 80) city = rng.choice(["Cairo", "Giza"], 80) price = area * 20 + np.where(city == "Cairo", 700, 0) + rng.normal(0, 150, 80) homes = pd.DataFrame({"area": area, "price_k": price, "city": city}) plt.figure(figsize=(7, 3.8)) sns.scatterplot(data=homes, x="area", y="price_k", hue="city", palette=["#3776AB", "#E0A800"]) plt.title("Area vs price (K EGP)") plt.show()
واضح إن كل ما المساحة تزيد السعر بيزيد (علاقة موجبة)، وإن القاهرة أغلى شوية من الجيزة بنفس المساحة. ده بالظبط نوع العلاقات اللي هنعلّمها للموديل في المرحلة الجاية.
⚠ الرسمة ممكن تكدبلو المحور الرأسي مش بادئ من صفر في bar chart، فرق صغير بيبان ضخم. وخلي دايماً للرسمة عنوان، وللمحاور أسماء ووحدات. رسمة من غير عنوان محدش هيفهم هي بتقول إيه.