أدوات التحليل: Pandas و NumPy
Series و DataFrame و NumPy: البِنى التي يقوم عليها كل تحليل لاحق. ⏱ نحو 40 دقيقة.
- تميّز بين
SeriesوDataFrame. - تفحص جدولًا جديدًا بـ
shapeوcolumns. - تجري حسابًا متجهيًّا بـ
NumPyدون حلقات. - ترسم أعمدة بسيطة بـ
Matplotlib.
١Series و DataFrame: لبِنتا Pandas
في Pandas بنيتان: Series عمودٌ واحد مُفهرَس، وDataFrame جدولٌ من عدة أعمدة. معظم عملك على DataFrame، وكل عمود فيه هو Series.
import pandas as pd # Series: عمود واحدclicks = pd.Series([120, 95, 210, 55], name="clicks")print(clicks)print("المجموع:", clicks.sum(), "| الأعلى:", clicks.max()) # DataFrame: جدول من أعمدةdf = pd.DataFrame({ "page": ["home", "products", "cart", "checkout"], "clicks": [120, 95, 210, 55], "bounce": [0.52, 0.31, 0.40, 0.20],})print(df)print("الأعمدة:", list(df.columns), "| الشكل:", df.shape)
لاحظ df.shape: صفّان من الأرقام (الصفوف، الأعمدة). وdf.columns أسماء الأعمدة. هاتان أول ما تنظر إليه في أي جدول جديد.
٢NumPy: الحساب المتجهي السريع
تحت Pandas يعمل NumPy: مصفوفات أرقام تُحسب دفعةً واحدة، أسرع بكثير من حلقة for. الفكرة: عمليةٌ واحدة على كل العناصر معًا (تُسمّى vectorization).
import numpy as np sec = np.array([12, 45, 30, 90, 52])print("المتوسط:", sec.mean())print("الانحراف المعياري:", round(sec.std(), 2)) # عملية على كل العناصر دفعة واحدة — بلا حلقةminutes = sec / 60print("بالدقائق:", np.round(minutes, 2)) # شرط متجهي: كم زيارة تجاوزت 40 ثانية؟print("زيارات طويلة:", int((sec > 40).sum()))
الكتابة المتجهية ليست أسرع فحسب، بل أوضح: sec / 60 تقرؤها «حوّل كل القيم إلى دقائق»، دون حلقة ولا متغيّر عدّاد.
٣من الأرقام إلى رسم
Matplotlib يرسم البيانات. أنشئ الشكل ثم اضغط ▶ شغّل هنا لترى الرسمة تظهر داخل المخرجات:
import matplotlib.pyplot as plt pages = ["home", "products", "cart", "checkout"]clicks = [120, 95, 210, 55] plt.figure(figsize=(5, 3))plt.bar(pages, clicks, color="#0F766E")plt.title("Clicks per page")plt.ylabel("clicks")plt.tight_layout()# لا نحتاج plt.show() هنا: المختبر يعرض الرسمة تلقائيًّا
توقّع وتحقّق
كل عمود في DataFrame هو:
df.shape يعطي:
sec / 60 على مصفوفة NumPy:
(sec > 40).sum() تعطي:
الخلاصة
Seriesعمودٌ مُفهرَس، وDataFrameجدولٌ من أعمدة؛ كل عمودSeries.- ابدأ أي جدول بـ
df.shapeوdf.columnsلتعرف حجمه وأعمدته. NumPyيحسب على كل العناصر دفعة واحدة(vectorization): أسرع وأوضح من الحلقات.Matplotlibيحوّل الأرقام إلى رسوم؛ ابنِ الرسم خطوة خطوة.
تحدٍّ برمجي: إحصاء سريع
تمهيديلديك مصفوفة أزمنة بقاء (بالثواني). اطبع المتوسط مقرّبًا لمنزلة واحدة، وعدد القيم التي تجاوزت المتوسط.
- اطبع متوسط
secمقرّبًا إلى منزلة عشرية واحدة. - اطبع عدد القيم الأكبر من المتوسط.
ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:
import numpy as npsec = np.array([12, 45, 30, 90, 52, 8, 64, 25])# اطبع المتوسط (منزلة واحدة) ثم عدد القيم فوق المتوسط
💡 تلميح 1
m = sec.mean().💡 تلميح 2
(sec > m).sum().حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
import numpy as npsec = np.array([12, 45, 30, 90, 52, 8, 64, 25])m = sec.mean()print(round(m, 1))print(int((sec > m).sum()))