داده کاوی ۵۷۷ بازدید

یکی از مسائلی که در تحلیل داده‌ها وجود دارد، پاک‌سازی آن‌ها است بطوری که مدل‌سازی بر اساس آن‌ها با صحت همراه باشد. در این بین تشخیص صحت مقادیر متغیرهای موجود، احتیاج به تحلیل کاوشگرانه داده (Data Explanatory Analysis) یا به اختصار DEA دارد.

به بیان دیگر یک متخصص تحلیل داده (Data Scientist) باید به چیزی که در پس مقادیر و اعداد قرار دارد، پی ببرد و ریشه‌های اصلی تناقضات و مشکلات مجموعه داده (Data Set) را پیدا کند. در این نوشتار به موضوع تحلیل کاوشگرانه داده پرداخته و به کمک کدهای پایتون عملیات مربوط شناخت بهتر داده‌ها را صورت خواهیم داد.

به منظور آشنایی با مراحل اجرای یک پروژه داده‌کاوی و تحلیل داده بهتر است نوشتارهای داده کاوی (Data Mining) و مفاهیم کلیدی آن — راهنمای جامع و ساده و علم داده، تحلیل داده، داده‌کاوی و یادگیری ماشین ــ تفاوت‌ها و شباهت‌ها را مطالعه کنید. همچنین خواندن مطالب پیش پردازش داده ها در داده کاوی — به زبان ساده و کدام زبان برای داده کاوی بهتر است، پایتون یا R؟ نیز خالی از لطف نیست.

exploratory-research

تحلیل کاوشگرانه داده چیست؟

بنیاد ملی استاندارها و تکنولوژی (National Institute of Standards and Technology (NIST، تحلیل کاوشگرانه داده را یک رویکرد برای تحلیل داده‌ها با استفاده از تکنیک‌های زیر معرفی می‌کند.

  1. بیشینه‌سازی دانش نسبت به مجموعه داده
  2. آشکارسازی ساختار پنهان داده‌ها
  3. استخراج متغیرها پراهمیت
  4. شناسایی نقاط پرت و ناهنجار
  5. بررسی فرضیه‌های زمینه‌ای
  6. ایجاد مدل‌های ساده و کارا
  7. انتخاب بهینه تنظیمات مدل

به این ترتیب بسیاری از فعالیت‌هایی که در هرم عملیات مربوط به علم داده در نظر گرفته می‌شود، مرتبط با تحلیل کاوشگرانه داده EDA است. فرض کنید این هرم دارای مراتبی از بالا به پایین به شکل زیر باشد.

  • هوش‌مصنوعی و یادگیری عمیق
  • یادگیری ماشین
  • تجمیع و یکپارچه‌سازی داده‌ها
  • پاک‌سازی و تشخیص مشاهدات ناهنجار- آماده سازی داده‌ها برای تحلیل
  • ذخیره سازی و تعیین گردش صحیح اطلاعات
  • اندازه‌گیری و جمع‌آوری داده‌ها

مشخص است که همپوشانی زیادی بین عملیات صورت گرفته در تحلیل کاوشگرانه داده و فعالیت‌های مربوط به علم داده،‌ وجود دارد.

تحلیل کاوشگرانه داده و ابزارهای آن

ممکن است برای یک مسئله تحلیل کاوشگرانه داده دو فرد متفاوت نتایج گوناگونی بدست آورند. ولی آنچه مهم است روند فعالیت‌هایی است که در فرآیند تحلیل کاوشگرانه داده (EDA) به کار می‌رود. در ادامه به سه بحث اصلی و مراحل کاری در EDA به نام‌های کاوش (Explore)، پاک‌سازی (Clean) و مستند‌سازی (Document) خواهیم پرداخت.

Exploratory Data Analysis

کاوش و کاوشگر

برای درک و شناخت بهتر داده‌ها در این گام بهتر است از ابزارهای لغتنامه داده (Data Dictionary)، مراجع کدگذاری (Codebook)، و نمودار هویت-رابطه (Entity-Relationship) کمک گرفت.

معمولا برای مشخص شدن این موضوعات بهتر است با مهندس داده (Data Engineer) یا مدیر پایگاه داده (Database Administrator) سازمان خود در ارتباط باشید.

بررسی تعداد و علت وجود داده‌های گمشده (Missing Data) و مشاهدات ناهنجار (Anomaly Cases) در این گام صورت می‌گیرد. همچنین رکوردهای تکراری و حتی نامرتبط و مشکوک بوسیله عملیات کاوشگرانه پیدا خواهند شد.

یکی از دیگر فعالیت‌هایی که باید در این قسمت انجام شود، تشخیص یا محاسبه شاخص‌های آماری داده‌ها است. به این ترتیب با بدست آوردن معیارهای تمرکز (Central Tendency) و پراکندگی، به توزیع تقریبی داده‌های پی‌خواهید برد. به این ترتیب پیدا کردن نقاط پرت (Outlier) و محاسبه چولگی (Skewness) بوجود خواهد آمد.

کدی که در ادامه مشاهده می‌کنید، به زبان پایتون نوشته شده و براساس آن دستوراتی معرفی شده که پایه عملیات کاوش هر مجموعه داده‌ه‌ای خواهد بود.

تعداد متغیرهای خالی (isnull) جمع مقادیر (sum)، اندیس‌های (Index) مجموعه داده، نوع داده هر یک از متغیرها (dtypes) و شکل توزیع داده‌ها (shape) به همراه آماره‌های توصیفی (descriptive) از این گونه خروجی‌های هستند.

# pandas function creates a report from several common EDA commands
def eda(dataframe):
 print(“missing values: {}”.format(dataframe.isnull().sum()))
 print(“dataframe index: {}”.format(dataframe.index))
 print(“dataframe types: {}”.format(dataframe.dtypes))
 print(“dataframe shape: {}”.format(dataframe.shape))
 print(“dataframe describe: {}”.format(dataframe.describe()))
for item in dataframe:
 print(item)
 print(dataframe[item].nunique())

بعد از ایجاد این کد،‌ کافی است نام هر مجموعه داده‌ای را به تابع eda داده، تا این محاسبات و شاخص‌ها بدست آید. برای مثال دستور زیر عملیات یاد شده را برای مجموعه داده df_titanic انجام می‌دهد.

eda(df_titanic)

روش دیگر برای چنین کاری، استفاده از کتابخانه pandas_profiling است. استفاده از این بسته، امکان نمایش نمودارها و تصویرهایی مرتبط با توزیع آماری داده‌ها را هم فراهم می‌سازد.

برای مثال کد زیر یک نمودار ستونی (Bar Chart) برای نشان دادن درصد مقادیر گمشده در مجموعه داده فرضی train ترسیم می‌کند.

# imports:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
# plot missing data:
train.isnull().sum().plot(kind='bar')
# Add a title and show the plot.
plt.title('Number of Missing Values Per Column')
# Create tick mark labels on the Y axis and rotate them.
plt.xticks(rotation = 45)
# Create X axis label.
plt.xlabel("Columns")
# Create Y axis label.
plt.ylabel("NaN Values");

خروجی به این ترتیب به صورت زیر خواهد بود.

bar chart plot

پاک‌سازی و تصدیق

در گام بعدی باید اقدام به پاک‌سازی و ارزیابی داده‌ها کنید. این کار به شما اجازه می‌دهد حاصل عملیات تحلیل کاوشگرانه داده ها را با اطمینان خاطر برای مدل‌سازی به کار ببرید.

داده‌‌های پرتی که در گام قبلی پیدا شد را مجدد بررسی کنید تا مشخص شود که مقادیر ثبت شده حاصل از خطای اندازه‌گیری نبوده است. در صورتی که مقادیر گمشده زیاد باشند، بهتر است برای عدم کاهش دقت مدل، آن‌ها را با مقدار مناسب جایگزین کنید تا نمونه آماری شما کاهش نداشته باشد.

انجام تغییر متغیرها و تبدیلات گوناگون برای مناسب‌سازی داده‌ها برای ایجاد مدل، در این قسمت صورت می‌گیرد. بنابراین بهتر است از توابع مختلفی که در کتابخانه‌ pandas وجود دارد بهره ببرید. در ادامه بعضی از این توابع معرفی شده‌اند.

  • حذف مقادیر گمشده: ()dropna.
  • تغییر مقادیر گمشده: ()fillna.
  • حذف مشاهدات تکراری: ()drop_duplicates.
  • تغییر نوع داده: ()astype.

از آنجایی که همه مسائل مربوط به علم داده یکسان نیستند، شیوه‌های تحلیل کاوشگرانه داده ها نیز برایشان یکسان نخواهد بود. مهم‌ترین ویژگی در انجام عملیات تحلیلی در این گام شناخت کافی از هدف انجام تحلیل داده‌ها است. بنابراین باید بدانید که قرار است چه مدلی ایجاد شود و متغیرهای مستقل و وابسته در این مدل کدامند. به این ترتیب تمرکز را برای متغیرهای مورد توجه در مدل خواهید داشت.

برای مثال فرض کنید قرار است یک الگوریتم یادگیری ماشین را برای داده‌های دو دویی (Binary) به عنوان متغیر رده‌بندی (Classification) به کار ببرید. در این نتیجه مقادیر چنین متغیری می‌تواند به صورت بله/خیر، درست/غلط و حتی صفر/یک باشد. بنابراین لازم است متغیر وابسته را به دو طبقه تقسیم کنیم تا خاصیت دو دویی برایش بوجود آید.

اگر داده‌های طبقه‌ای (Categorical Data) در مجموعه داده وجود دارد شاید لازم باشد ابتدا با استفاده از اعداد آن‌ها را کد گذاری کرده سپس در الگوریتم یادگیری ماشین به کار ببرید. یکی از دستورات مناسب برای انجام این کار استفاده از تابع زیرا است. به این ترتیب متغیرهای مجازی (Dummies) برای این گونه متغیرهای طبقه‌ای ایجاد خواهد شد که از آن‌ها برای مدل‌سازی در رگرسیون خطی (Linear Regression) نیز می‌توانید بهره ببرید.

.get_dummies()

مستند و ذخیره سازی

در نهایت در پایان عملیات تحلیل کاوشگرانه داده ها لازم است داده‌های پاک‌سازی شده را در مکانی امن و ساده، ذخیره‌سازی کنید. این کار ممکن است به واسطه ذخیره‌سازی در یک فایل عمومی از نوع csv باشد که عملا، متغیرها را به کمک علامت ویرگول (,) از یکدیگر جدا کرده و به صورت متنی (Text) ذخیره می‌کند.

کد زیر به این منظور نوشته شده است. واضح است که نام فایل ایجاد شده export_2018_pricelist است. پسوند csv هم بیانگر comma separated value است.

# export dataframe to .csv
df.to_csv('export_2018_pricelist.csv', index=False)

بهتر است علاوه بر ذخیره‌سازی داده‌ها، مستنداتی نیز برای روشن شدن محتویات این فایل و ویژگی‌های متغیرهای ثبت شده، تهیه کنید. این اسناد ممکن است در قالب یک فایل متنی بوده و نتایج تحلیل و خصوصیاتی که کار شما به همراه داشته را در بر گیرند.

Exploratory Data Analysis schema

خلاصه و جمع‌بندی

در این نوشتار به بررسی و اهمیت تحلیل کاوشگرانه داده پرداختیم و از جنبه یک تحلیل‌گر داده به آن توجه کردیم. همچنین گام‌های مربوط به عملیات EDA نیز در این زمینه مورد بحث قرار گرفت. در این بین بعضی از توابع و کدهای پیشنهادی برای انجام تحلیل کاوشگرانه داده ها به زبان پایتون نیز یادآوری و به کار گرفته شدند.

اگر نوشته بالا برای شما مفید بوده، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

بر اساس رای ۰ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

«آرمان ری‌بد» دکتری آمار در شاخه آمار ریاضی دارد. از علاقمندی‌های او، یادگیری ماشین، خوشه‌بندی و داده‌کاوی است و در حال حاضر نوشتارهای مربوط به آمار و یادگیری ماشین را در مجله فرادرس تهیه می‌کند.