سوف نستعرض في هذا المقال بعض دوال مكتبة pandas التي يمكن استخدامها لاستخراج خصائص البيانات (feature engineering). لتوضيح ذلك سوف نستخدم البيانات بيانات الأزمة الاقتصادية والمصرفية لأفريقيا [1]. في البداية سوف نقوم باستيراد البيانات كما يلي:
In:
import pandas as pd
african_crises = pd.read_csv("african_crises.csv")
بعد ذلك نستعرض عدد من النقاط ذات العلاقة بالاستخراج خصائص البيانات ونوضح طريقة التعامل معها وهي كما يلي:
أولاُ: تحويل المتغيرات الأسمية (Nominal variables) الى متغيرات عددية (numeric variables)
لتحويل المتغيرات الأسمية الى متغيرات عددية يمكن استخدام الدالة:
df.replace(to_replace=None, value=None, inplace=False, ...)
والتي تقوم باستبدال القيم الحالية في إطار البيانات (df) بقيمة اخرى من خلال إنشاء متغير جديد عندما يكون inplace=False او استبدال القيمة في نفس موقعها عندما يكون inplace=True، وذلك كما في المثال التالي:
In: african_crises['encoded_banking_crisis'] = african_crises['banking_crisis'].replace({'crisis':1,'no_crisis':0}) african_crises[['encoded_banking_crisis','banking_crisis']].head() Out: encoded_banking_crisis banking_crisis 0 1 crisis 1 0 no_crisis 2 0 no_crisis 3 0 no_crisis 4 0 no_crisis
ثانياً: تحويل المتغيرات الفئوية (categorical variables) إلى وهمية (dummy variables)
لتحويل المتغيرات الفئوية الى وهمية يمكن استخدام الدالة:
pd.get_dummies(data, ...)
وذلك كما في الكود التالي:
In: Dumm_banking_crisis = pd.get_dummies(african_crises['banking_crisis']) Dumm_banking_crisis=pd.concat([african_crises['banking_crisis'], Dumm_banking_crisis], axis=1) Dumm_banking_crisis.head() Out: banking_crisis crisis no_crisis 0 crisis 1 0 1 no_crisis 0 1 2 no_crisis 0 1 3 no_crisis 0 1 4 no_crisis 0 1
ثالثاً: حساب عدد القيم الفريدة (unique values) لمتغير.
لحساب عدد القيم الفريدة يمكن استخدام الدالة:
Series.value_counts(normalize=False,ascending=False, dropna=True, ...)
والتي تعطي عدد القيم الفريدة في سلسلة (Series) بترتيب تنازلي بحيث يكون العنصر الأول هو العنصر الأكثر تكرارا، كذلك يتم استبعاد القيم المفقودة (NA) بشكل افتراضي. إذا كان normalize=True فإن مخرجات الدالة هي التكرارات النسبية للقيم الفريدة. ويمكن استخدام هذه الدالة كما يلي:
In: country_freq = african_crises['country'].value_counts() country_freq Out: Egypt 155 South Africa 114 Zimbabwe 90 Algeria 85 Angola 77 Tunisia 75 Morocco 75 Zambia 72 Mauritius 68 Kenya 67 Ivory Coast 63 Nigeria 60 Central African Republic 58
رابعاً: تقسيم متغير الى فئات (Quantile-based discretization)
لتقسيم متغير الى فئات يمكن استخدام الدالة:
pd.qcut(x, q, labels=None, ...)
والتي تقوم بتقسيم المتغير x إلى فئات متساوية الحجم عددها q ومسمياتها labels بناء على الرتبة أو بناء على تقسيمات العينة (sample quantiles) وذلك كما في المثال التالي:
In: level = ['Very Low', 'Low', 'Med', 'High', 'Very High'] african_crises['inflation_annual_cpi_level'] = pd.qcut(african_crises['inflation_annual_cpi'], q=5, labels=level) african_crises[['inflation_annual_cpi', 'inflation_annual_cpi_level']].head() Out: inflation_annual_cpi inflation_annual_cpi_level 0 3.441456 Low 1 14.149140 Very High 2 -3.718593 Very Low 3 11.203897 High 4 -3.848561 Very Low
كذلك يمكن استخدام الدالة:
pd.cut(x, bins, labels=None, ...)
والي تقوم بتقسيم متغير x الى فئات حدودها bins ومسمياتها labels كما في الكود التالي:
In: level = ['Very Low', 'Low', 'Med', 'High', 'Very High'] bins = [-18, -1, 3 ,10 , 15, 30] african_crises['inflation_annual_cpi_level'] = pd.cut(african_crises['inflation_annual_cpi'], bins=bins, labels=level) african_crises[['inflation_annual_cpi', 'inflation_annual_cpi_level']].head() Out: inflation_annual_cpi inflation_annual_cpi_level 0 3.441456 Med 1 14.149140 High 2 -3.718593 Very Low 3 11.203897 High 4 -3.848561 Very Low
خامساً: تجميع البيانات (grouping data)
لتجميع البيانات يمكن استخدام الدالة:
df.groupby(by=None, ...)
والتي تقوم بتجميع البيانات (df) حسب متغير او مجموعة متغيرات، حيث يمكن اجراء العمليات الحسابية أو الإحصائية على هذه المجموعات. فمثلاً، لحساب المتوسط الحسابي لسعر الصرف مقابل الدولار الأمريكي في كل دولة يمكن استخدام الكود:
In: african_crises.groupby(['country'])['exch_usd'].mean() Out: country Algeria 20.177565 Angola 15.099671 Central African Republic 367.686066 Egypt 1.006045 Ivory Coast 153.320635 Kenya 30.713180 Mauritius 13.759661 Morocco 5.865309 Nigeria 38.951022 South Africa 1.719339 Tunisia 50.692807 Zambia 1.116342 Zimbabwe 20.207800
سادساً: العمليات الإحصائية (Statistical operations)
لاجراء عدد من العمليات الإحصائية على متغير او أكثر في إطار البيانات يمكن استخدام الدوال التالية:
الوصف | الدالة |
عدد القيم | count |
مجموع القيم | sum |
حاصل ضرب القيم | prod |
أصغر قيمة | min |
اكبر قيمة | max |
الانحراف المعياري | std |
المتوسط الحسابي | mean |
الوسيط الحسابي | mediam |
وذلك كما في المثال التالي:
In: print("The max of exch_usd is: ",african_crises.exch_usd.max()) print("The min of exch_usd is: ",african_crises.exch_usd.min()) print("The count of exch_usd is: ",african_crises.exch_usd.count()) print("The sum of exch_usd is: ",african_crises.exch_usd.sum()) print("The mean of exch_usd is: ",african_crises.exch_usd.mean()) print("The median of exch_usd is: ",african_crises.exch_usd.median ()) Out: The max of exch_usd is: 744.3061387 The min of exch_usd is: 0.0 The count of exch_usd is: 1059 The sum of exch_usd is: 45686.1396807569 The mean of exch_usd is: 43.14083067115856 The median of exch_usd is: 0.8684
[1] مصدر البيانات: kaggle