یکی از مهمترین اقداماتی که پیش از اجرای مدل ماشین لرنینگ باید انجام شود، پیش پردازش (Pre-Processing) داده ها است.
در این مرحله داده ها مورد بررسی قرار گرفته و ممکن است با هدف تطابق با مدل مورد نظر، تغییراتی بر روی آن ها انجام شود. از جمله این تغییرات می توان به موارد زیر اشاره نمود:
در این مطلب به تبدیل متغیرهای غیرعددی (Categorical) به متغیرهای عددی (Numerical) می پردازیم.
ساده و خلاصه، بر خلاف داده های عددی (Numerical)، برخی دادi ها به صورت رشته ای(string) هستند که به آن ها Categorical می گوییم. برای اینکه بتوانیم از این مقادیر نیز به عنوان ویژگی های ورودی مدل استفاده کنیم، دو روش کلی وجود دارد:
برای مثال جدول زیر را در نظر بگیرید.
این اطلاعات مربوط به تعدادی آگهی فروش خودروی پژو 207 صفرکیلومتر در اواخر مرداد 1400 است. می خواهیم یک مدل ماشین لرنینگ بسازیم که بر پایه این اطلاعات بتواند قیمت مناسب برای یک خودرو پژو 207 صفرکیلومتر را پیش بینی کند.
اما همانطور که مشخص است، به غیر از ستون های مربوط به سال (year)، رنگ (color)، جعبه دنده (gearbox) و امکانات جانبی (option) این خودرو ها تفاوت دیگری با هم ندارند. به بیان دیگر، داده های موجود در این ستون ها به صورت غیرعددی و Categorical هستند.
همانطور که گفته شد دو روش کلی برای قابل استفاده کردن این داده ها وجود دارد:
در روش replace کردن همانطور که از نام این روش مشخص است هر عبارت رشته ای را با یک مقدار عددی دلخواه جایگزین می کنیم. مثلا به جای Grey عدد 1، به جای White عدد 2 و...
اما روش اصولی تر استفاده از One Hot Encoding و ساخت Dummy variables است. برای این کار ستونی که حاوی این مقادیر هست را به تعداد تنوع داده های به ستون های حاوی صفر و یک تبدیل می کنیم.
مثلا با توجه به تنوع داده های ستون color که حاوی انواع Grey, White, Black, Silver، 4 ستون خواهیم داشت.
همچنین برای ستون gearbox دو ستون Manual و Automatic و برای option نیز دو ستون Typical و Panoramic ساخته می شود.
با انجام این کار می توانیم در ادامه از این مقادیر نیز به عنوان ویژگی های ورودی مدل استفاده کنیم.
ابتدا کتابخانه پانداز را فراخوانی می کنیم
import pandas as pd
سپس با استفاده از امکانات پانداز، فایل CSV مربوط به اطلاعات خودروها را می خوانیم.
cars_data = pd.read_csv("Peugeot207.csv")
با استفاده از ()unique. می توانیم انواع داده های موجود در یک ستون را مشاهده کنیم. برای مثال انواع داده های موجود در ستون color در نتیجه اجرای کد زیر نشان داده خواهند شد.
cars_data["color"].unique()
در ادامه قصد داریم بر روی ستون color و مقادیر آن One Hot Encoding را اجرا کنیم.
colors = pd.get_dummies(cars_data["color"]) colors
خط اول One Hot Encoding را بر روی ستون color اجرا می کنیم و نتیجه آن را داخل متغیر colors می ریزیم.
نتیجه اجرای خط دوم، نمایش داده های موجود در colors است.
در ادامه با استفاده از کد زیر، colors را به جدول اصلی اضافه می کنیم.
cars_data = pd.concat([cars_data,colors],axis=1)
نتیجه این بخش با استفاده از کد زیر نشان داده می شود.
cars_data
همانطور که مشخص است که بر اساس تعداد و اسامی رنگ های موجود در ستون color، ستون هایی به جدول انتهای جدول اضافه شده اند. مقادیر این ستون ها صفر یا یک است. «صفر» به معنی اینکه آن ردیف از جدول دارای آن مقدار نیست و «یک» به معنی اینکه آن مقدار را دارد.
برای مثال در ردیف اول به دلیل آن رنگ خودروی موردنظر، Grey است، در 4 ستون آخر نیز تنها مقدار ستون Grey یک است و سایر ستون ها صفر هستند.
به همین ترتیب برای ستون های gearbox و option نیز، کدبندی وان هات به صورت زیر انجام می شود.
gearbox_types = pd.get_dummies(cars_data["gearbox"]) cars_data = pd.concat([cars_data,gearbox_types],axis=1) cars_data
options = pd.get_dummies(cars_data["option"]) cars_data = pd.concat([cars_data,options],axis=1) cars_data
در پایان و در نتیجه اجرای تمامی کدهای بالا، جدول به صورت زیر خواهد بود.
لینک دانلود دیتاست:
https://www.kaggle.com/alifallahi1/simple-peugeot207-pricelist
لینک دانلود کد:
https://www.kaggle.com/alifallahi1/peugeot207-notebook<br/>