در نوشته قبلی گفتیم که چگونه داده های از دست رفته یا missing values را کنترل کنیم. در این نوشته میخواهیم در مورد استاندارد سازی داده ها صحبت کنیم.
Data Standardization
دیتاها معمولا از منابع متعددی بدست میآیند. استانداردسازی داده نوعی از data normalization است و برای رسیدن به دادههای استاندارد باید اختلاف دادهها از مقدار میانگین را بدست بیاوریم و بر standard deviation تقسیم کنیم.

What is standardization
فرآیندی که دیتا را به حالتی تبدیل کنیم که کاربر یا محقق بتواند مقایسه معناداری را انجام بدهد. یا بعبارت دیگر بتواند رفتار معنادار تری از دادهها مشاهده کند.
Data Normalization
نرمال سازی داده چیست؟
هرگاه مقادیر متغیرها را در یک بازه مشابه قرار دهیم، اصطلاحا دادهها را نرمالسازی کردهایم. نوعی از نرمالسازی این است که مقادیر متغیرها را چنان تغییر مقیاس بدهیم که مقدار میانگین دادههای آن صفر و واریانس آن یک باشد. و یا تغییر مقیاسی که تمامی دادهها در بازه 0 تا 1 قرار گیرند.

مثال:
فرض کنیم که میخواهیم مقادیر ستونهای length ,width و height را تغییر مقیاس دهیم:
Target: would like to normalize those variables so their value ranges from 0 to 1
Approach: replace original value by (original value)/(maximum value)
برای این هدف طبق دستورات زیر عمل میکنیم:
# replace (original value) by (original value)/(maximum value)
df['length'] = (df['length']-df['length'].min())/(df['length'].max()-df['length'].min())
df['width'] = (df['width']-df['width'].min())/(df['width'].max()-df['width'].min())
--> df['width']
--> df['width']>1
-->set(list(df['width']>1))
همانطور که مشاهده میشود، توانستیم دادههای مرتبط با طول و عرض را نرمالسازی کنیم.
Binning
پروسهای که طی آن متغیرهای پیوسته را به متغیرهای گسسته تبدیل میکنیم، binning گویند. مثال:
در دادههای ما ستون horsepower در بازه 48 تا 288 قرار میگیرد و جمعا 59 متغیر یکتا دارد. اگر بخواهیم این تعداد دادهها را در سه دسته :
* اسب بخار کم،
* اسب بخار متوسط و
* اسب بخار بالا دستهبندی کنیم،
از روش Binning استفاده میکنیم. برای این هدف از متود cut از کتابخانه pandas استفاده میکنیم.
df["horsepower"]=df["horsepower"].astype(int, copy=True)
sns.distplot(df["horsepower"],kde=False,bins=3)
-->bins = np.linspace(min(df["horsepower"]), max(df["horsepower"]), 4)
bins
--> group_names = ['Low', 'Medium', 'High']
از متد cut استفاده میکنیم که ببینیم هر داده از df[‘horsepower’] در کدام دسته قرار میگیرد:
df['horsepower-binned'] = pd.cut(df['horsepower'], bins, labels=group_names)
df[['horsepower','horsepower-binned']].head(20)
حال با دستور زیر میخواهیم ببینیم که در هر دسته چه تعداد خودرو قرار دارد:
df["horsepower-binned"].value_counts()
و با استفاده از دستور زیر میزان پراکندگی را ترسیم میکنیم:
sns.countplot(x='horsepower-binned',data=df)
Indicator Variable (or Dummy Variable)
متغیرهای عددی که برای برچسبگذاری دستهها استفاده میشود، را indicator variables یا dummy variableگویند (متغیر دامی). کلمه dummy به معنای ساختگی یا مصنوعی است. دلیل این نامگذاری این است که آنها به تنهایی هیچ معنایی ندارند. در این روش نمیتوان گفت که دادههای نوع numerical را به categorical تبدیل کردهایم. بلکه میتوانیم بگوییم برای پیش بردن اهداف محاسبات و تحلیلی، یک عدد را به هر یک از دستههای دادههای categorical نسبت دادهایم.

-->df.tail()
-->dummy_variable_1 = pd.get_dummies(df["fuel-type"])
dummy_variable_1.tail()
تا اینجا کار Data Cleaning تا حد خوبی پیش رفت و در نهایت دادههای تمیز شده را در یک متغیر مستقل ذخیره میکنیم:
df.to_csv('clean_df.csv')