نرمال سازی داده به کمک کتابخانه scikit-learn
در مقاله آموزشی پیشرو، شیوه نرمال سازی دادهها در کتابخانه پایتون scikit-learn را با یکدیگر بررسی میکنیم. همانگونه که پیش از این نیز گفتیم، نرمال سازی داده به فرایندی گفته میشود که طی آن مقیاس دادهها یکسانسازی میشود.
نرمال سازی داده
عملیات نرمال سازی داده فقط بر روی ستونهایی اجرا میشود که مقادیر عددی را در خود جای دادهاند. پنج متد نرمال سازی عبارتند از:
- مقیاسبندی ویژگی Single feature scaling
- کمینه بیشینه Min max
- نمره Z-score z
- مقیاسبندی لگاریتمی Log scaling
- کوتاهسازی Clipping
در مقاله آموزشی پیشرو برای انجام عملیات نرمال سازی داده از کتابخانه scikit-learn استفاده میکنیم. برای انجام این پروژه از همان دیتاست قبلی استفاده میکنیم تا بتوانیم نتایج را با یکدیگر مقایسه کنیم. البته با استفاده از این دو متد به نتایج یکسانی دست پیدا خواهیم کرد.
در این مقاله دو متد مقیاسبندی لگاریتمی و کوتاهسازی را معرفی نمیکنیم و در مقالات آتی به آنها خواهیم پرداخت.
همانگونه که قبلا توضیح داده شد، از کتابخانه scikit-learn برای حل مشکل مقادیر گمشده هم میتوان استفاده کرد.
تمامی عملیاتهای scikit-learn که در این مقاله آموزشی توضیح خواهیم داد، طبق مراحل زیر عمل میکنند:
- انتخاب متد پیشپردازش
- برازش آن بر روی تابع ()fit
- اجرای آن بر روی دادهها با استفاده از تابع ()transform
کتابخانه scikit-learn فقط با آرایهها کار میکند و به همین دلیل در زمان اجرای هر یک از این عملیاتها باید ستون دیتافریم را به یک آرایه تبدیل کنیم. برای انجام این کار میتوانیم از تابع ()numpy.array استفاده کنیم که ورودی آن ستونهای دیتافریم است. ورودی تابع ()fit آرایهای از آرایهها است و هر کدام از این آرایهها نماینده نمونهای از دیتاست است. برای تبدیل یک آرایه استاندارد به آرایهای از آرایهها میتوانیم از تابع ()reshape استفاده کنیم.
بارگذاری دادهها
برای انجام پروژه حاضر از دیتاست ارائه شده از سوی نهاد Protexione Civile (واقع در ایتالیا) استفاده میکنیم؛ این دیتاست شامل آمار مبتلایان به ویروس کووید 19 ( از زمان شیوع این ویروس تا به امروز) است. این دیتاست روزانه بهروز رسانی میشود.
ابتدا باید کتابخانه pandas را بارگذاری کنیم و دیتاست را به کمک تابع ()read_csv بخوانیم. در گام بعدی باید تمامی ستونهای حاوی مقادیر NaN را حذف کنیم. برای این منظور میتوانیم از تابع ()dropna استفاده کنیم.
import pandas as pd df = pd.read_csv('https://raw.githubusercontent.com/pcm-dpc/COVID- 19/master/dati-regioni/dpc-covid19-ita-regioni.csv') df.dropna(axis=1,inplace=True) df.head(10)
مقیاسبندی ویژگی
در روش مقیاسبندی ویژگی تمامی مقادیر موجود در یک ستون به اعدادی بین 0 و یک تبدیل میشود. برای محاسبه مقدار جدید، مقدار کنونی را بر مقدار بیشینه (بزرگترین) ستون تقسیم میکنیم. برای انجام این کار میتوانیم از کلاس MaxAbsScaler استفاده کنیم. مقیاسبند (Scaler) را بر روی ستون tamponi اعمال میکنیم چرا که باید به یک آرایه تبدیل شود و تغییر شکل دهد.
import numpy as np from sklearn.preprocessing import MaxAbsScaler X = np.array(df['tamponi']).reshape(-1,1) scaler = MaxAbsScaler()
در این مرحله میتوانیم مقیاسبند را fit کرده و عملیات transformation را انجام دهیم. با اجرای تابع ()reshape ، مقیاسبند را به شکل اصلی تغییر میدهیم و نتیجه به دست آمده را در یک ستون جدید از دیتافریم df ذخیره میکنیم.
scaler.fit(X) X_scaled = scaler.transform(X) df['single feature scaling'] = X_scaled.reshape(1,-1)[0]
در ضمن کتابخانه scikit-learn تابعی دارد که از طریق آن میتوانیم مقادیر اصلی را، با توجه به تغییراتی که در داده حاصل شده، بازیابی کنیم. این تابع در عملیات تغییرشکل که در ادامه مقاله به آن خواهیم پرداخت نیز کاربرد دارد.
scaler.inverse_transform(X_scaled)
و خروجی آن بدین شکل است:
array([[5.000000e+00], [0.000000e+00], [1.000000e+00], ..., [5.507300e+05], [6.654400e+04], [3.643743e+06]])
کمینه بیشینه
در این متد نیز همانند مقیاسبندی ویژگی، تمامی مقادیر یک ستون به اعدادی بین 0 و 1 تبدیل میشوند. اینگونه که برای محاسبه مقدار جدید، مقدار کمینه را از مقدار کنونی کم میکنیم و سپس مقدار به دست آمده را بر دامنه مقادیر موجود در ستون تقسیم میکنیم. در کتابخانه scikit-learn برای انجام این عملیات ریاضی از کلاس MinMaxScaler استفاده میکنیم. برای مثال میتوانیم این روش را بر روی ستون totale_casi اعمال و اجرا کنیم.
from sklearn.preprocessing import MinMaxScaler X = np.array(df['totale_casi']).reshape(-1,1) scaler = MinMaxScaler() scaler.fit(X) X_scaled = scaler.transform(X) df['min max'] = X_scaled.reshape(1,-1)[0]
نمره z
نمره z تمامی مقادیر موجود در یک ستون را به عددی در حدود 0 تبدیل میکند. اعداد حاصل از روش نمره z اغلب بین 3- و 3 هستند. در این روش برای محاسبه مقدار جدید، مقدار میانگین از مقدار کنونی کم میشود و مقدار حاصل بر انحراف معیار تقسیم میشود. در کتابخانه scikit-learn برای انجام این عملیات ریاضی میتوانیم از تابع StandardScaler استفاده کنیم. برای مثال فرض کنید میخواهیم نمره z ستون deceduti را محاسبه کنیم:
from sklearn.preprocessing import StandardScaler X = np.array(df['deceduti']).reshape(-1,1) scaler = StandardScaler() scaler.fit(X) X_scaled = scaler.transform(X) df['z score'] = X_scaled.reshape(1,-1)[0]
جمع بندی
در این مقاله به شما نشان دادیم که چگونه میتوان با استفاده از پکیج preprocessing کتابخانه scikit-learn ، یک دیتاست را نرمال سازی کنیم. اگر تصمیم دارید عملیات نرمال سازی داده را به صورت دستی انجام دهید، میتوانید از فرمولهایی که در مقالههای قبلی ارائه شده، استفاده کنید.
از جمله مزایای استفاده از کتابخانه scikit-learn میتوان به موارد زیر اشاره کرد:
- لازم نیست از قبل فرمولها را یاد بگیرید، چرا که این کتابخانه دارای کلاسهایی است که از پیش دستهبندی شدهاند و برای انجام عملیاتهای مختلف میتوانید از آنها استفاده کنید.
- با اجرای تابع ()inverse_transform میتوانید دادههای اصلی را بازیابی کنید.