تسريع تحليل البيانات الاستكشافية باستخدام مكتبة ملفات تعريف الباندا

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

تزودنا مكتبة الباندا بالعديد من الأدوات المفيدة لإجراء تحليل البيانات الاستكشافية (EDA). ولكن قبل استخدامها ، تحتاج عادةً إلى البدء بوظائف أكثر عمومية مثل df.describe (). صحيح ، تجدر الإشارة إلى أن الإمكانيات التي توفرها هذه الوظائف محدودة ، وغالبًا ما تكون المراحل الأولية للعمل مع أي مجموعات بيانات عند أداء EDA متشابهة جدًا مع بعضها البعض.

تسريع تحليل البيانات الاستكشافية باستخدام مكتبة ملفات تعريف الباندا

يقول مؤلف المادة التي ننشرها اليوم إنه ليس من المعجبين بأداء الأعمال المتكررة. نتيجة لذلك ، بحثًا عن أدوات لإجراء تحليل البيانات الاستكشافية بسرعة وكفاءة ، وجد مكتبة التنميط الباندا. لا يتم التعبير عن نتائج عملها في شكل بعض المؤشرات الفردية ، ولكن في شكل تقرير HTML مفصل إلى حد ما يحتوي على معظم المعلومات حول البيانات التي تم تحليلها والتي قد تحتاج إلى معرفتها قبل البدء في العمل معها عن كثب.

هنا سننظر في ميزات استخدام مكتبة ملفات تعريف الباندا باستخدام مجموعة بيانات Titanic كمثال.

تحليل البيانات الاستكشافية مع الباندا

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

أولاً ، دعنا نستورد البيانات ونستخدم الباندا للحصول على الدرجات الإحصائية الوصفية:

# импорт необходимых пакетов
import pandas as pd
import pandas_profiling
import numpy as np

# импорт данных
df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv')

# вычисление показателей описательной статистики
df.describe()

بعد تنفيذ هذا الجزء من الكود ، ستحصل على ما هو مبين في الشكل التالي.

تسريع تحليل البيانات الاستكشافية باستخدام مكتبة ملفات تعريف الباندا
الدرجات الإحصائية الوصفية التي تم الحصول عليها باستخدام أدوات الباندا القياسية

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

تحليل البيانات الاستكشافية مع التنميط الباندا

الآن لنفعل الشيء نفسه باستخدام تنميط الباندا:

pandas_profiling.ProfileReport(df)

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

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

تسريع تحليل البيانات الاستكشافية باستخدام مكتبة ملفات تعريف الباندا
قسم تقرير النظرة العامة

التحليل الاستكشافي للمتغيرات

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

تسريع تحليل البيانات الاستكشافية باستخدام مكتبة ملفات تعريف الباندا
معلومات حول المتغير الرقمي Age

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

عند التفكير في متغير فئوي ، تختلف مقاييس المخرجات قليلاً عن تلك الموجودة للمتغير الرقمي.

تسريع تحليل البيانات الاستكشافية باستخدام مكتبة ملفات تعريف الباندا
معلومات عن المتغير الفئوي الجنس

وبالتحديد ، بدلاً من العثور على المتوسط ​​والحد الأدنى والحد الأقصى ، وجدت مكتبة ملفات تعريف الباندا عدد الفصول الدراسية. لأن Sex هو متغير ثنائي ، يتم تمثيل قيمه بفئتين.

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

def describe_numeric_1d(series, **kwargs):
    """Compute summary statistics of a numerical (`TYPE_NUM`) variable (a Series).
    Also create histograms (mini an full) of its distribution.
    Parameters
    ----------
    series : Series
        The variable to describe.
    Returns
    -------
    Series
        The description of the variable as a Series with index being stats keys.
    """
    # Format a number as a percentage. For example 0.25 will be turned to 25%.
    _percentile_format = "{:.0%}"
    stats = dict()
    stats['type'] = base.TYPE_NUM
    stats['mean'] = series.mean()
    stats['std'] = series.std()
    stats['variance'] = series.var()
    stats['min'] = series.min()
    stats['max'] = series.max()
    stats['range'] = stats['max'] - stats['min']
    # To avoid to compute it several times
    _series_no_na = series.dropna()
    for percentile in np.array([0.05, 0.25, 0.5, 0.75, 0.95]):
        # The dropna() is a workaround for https://github.com/pydata/pandas/issues/13098
        stats[_percentile_format.format(percentile)] = _series_no_na.quantile(percentile)
    stats['iqr'] = stats['75%'] - stats['25%']
    stats['kurtosis'] = series.kurt()
    stats['skewness'] = series.skew()
    stats['sum'] = series.sum()
    stats['mad'] = series.mad()
    stats['cv'] = stats['std'] / stats['mean'] if stats['mean'] else np.NaN
    stats['n_zeros'] = (len(series) - np.count_nonzero(series))
    stats['p_zeros'] = stats['n_zeros'] * 1.0 / len(series)
    # Histograms
    stats['histogram'] = histogram(series, **kwargs)
    stats['mini_histogram'] = mini_histogram(series, **kwargs)
    return pd.Series(stats, name=series.name)

على الرغم من أن هذا الجزء من الكود قد يبدو كبيرًا ومعقدًا إلى حد ما ، إلا أنه من السهل جدًا فهمه. نحن نتحدث عن حقيقة أنه في الكود المصدري للمكتبة توجد وظيفة تحدد أنواع المتغيرات. إذا اتضح أن المكتبة واجهت متغيرًا رقميًا ، فستجد الوظيفة أعلاه المؤشرات التي أخذناها في الاعتبار. تستخدم هذه الوظيفة عمليات الباندا القياسية للعمل مع كائنات من النوع Series، يحب series.mean(). يتم تخزين نتائج الحساب في قاموس stats. يتم تشكيل الرسوم البيانية باستخدام نسخة معدلة من الوظيفة matplotlib.pyplot.hist. يهدف التكيف إلى ضمان أن الوظيفة يمكن أن تعمل مع أنواع مختلفة من مجموعات البيانات.

عشرات الارتباط وعينة البيانات

بعد نتائج التحليل المتغير ، سينتج تصنيف الباندا ، في قسم الارتباطات ، مصفوفات ارتباط بيرسون وسبيرمان.

تسريع تحليل البيانات الاستكشافية باستخدام مكتبة ملفات تعريف الباندا
مصفوفة ارتباط بيرسون

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

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

تسريع تحليل البيانات الاستكشافية باستخدام مكتبة ملفات تعريف الباندا
قسم يحتوي على عينة من البيانات التي تم البحث عنها

نتيجة لذلك ، لا أوصي بالاهتمام بهذا القسم الأخير. بدلاً من ذلك ، من الأفضل استخدام الأمر df.sample(5)، والتي ستختار عشوائيًا 5 ملاحظات من مجموعة البيانات.

نتائج

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

إذا كنت تريد إلقاء نظرة على الشكل الذي يبدو عليه تحليل الذكاء بالكامل في دفتر Jupyter ، فقم بإلقاء نظرة عليه هذا تم إنشاء مشروعي باستخدام nbviewer. و في هذا يمكن لمستودعات GitHub العثور على الكود المقابل.

القراء الأعزاء! كيف تبدأ في تحليل مجموعات البيانات الجديدة؟

تسريع تحليل البيانات الاستكشافية باستخدام مكتبة ملفات تعريف الباندا

المصدر: www.habr.com

إضافة تعليق