داده‌کاوی با پایتون

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

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

آماده‌سازی داده‌ها[ویرایش]

اولین قدم در داده کاوی آماده‌سازی داده هاست که روش‌های مختلفی با استفاده از کتابخانه‌های متفاوت (بسته به نوع داده‌ها و نتیجه مورد نیاز) دارد. آماده‌سازی داده برای الگوریتم‌های معروف یادگیری ماشین(machine learning) که یکی از ابزارهای داده کاوی در پایتون محسوب می‌شود نیز کاربرد دارد:

  1. تحلیل داده‌ها
  2. مدیریت داده‌های ناکامل
  3. نرمال ساختن داده‌ها
  4. دسته‌بندی داده‌ها به انواع آنها
  5. یکی از روش‌های معرفی داده به برنامه از طریق دستور زیر است (مثال:داده‌های ما در این نمونه کار شامل ۵۰ نمونه از ۳ مدل گل مورد تحقیق می‌باشد. داده‌ها به صورت سی ای وی می‌باشد. داده‌های دریافتی شامل ۵ ردیف می‌باشند ۴ ردیف اول مقادیر و ردیف آخر کلاس نمونه ما می‌باشد):
import urllib2
url = 'http://aima.cs.berkeley.edu/data/iris.csv'
u = urllib2.urlopen(url)
localFile = open('iris.csv', 'w')
localFile.write(u.read())
numpy
import genfromtxt, zeros
# read the first 4 columns
data = genfromtxt('iris.csv',delimiter=',',usecols=(0,1,2,3))
# read the fifth column
target = genfromtxt('iris.csv',delimiter=',',usecols=(4),dtype=str)
print set(target) # build a collection of unique elements
set(['setosa', 'versicolor', 'virginica'])

تصویر سازی[ویرایش]

فهمیدن این که داده‌ها چه اطلاعاتی به ما می‌دهند و چگونگی ساختار آنها یک معموریت مهم در داده کاوی می‌باشد. تصویر سازی به ما کمک می‌کند تا به صورت گرافیکی این اطلاعات را بدست آوریم. استفاده از دستورهای نمودار کشیدن به ما کمک می‌کند تا مقدارهای دو داده مختلف را به صورت گرافیکی با هم مقایسه کنیم. مثال:دستور زیر برای ما گرافی را رسم می‌کند:[۲]

import plot, show
plot(data[target== 'setosa',0],data[target =='setosa',2],'bo')
plot(data[target== 'versicolor',0],data[target =='versicolor',2],'ro')
plot(data[target== 'virginica',0],data[target =='virginica',2],'go')
show()

گراف حاصل شامل ۱۵۰ نقطه و ۳ رنگ که نشانگر کلاسها هستند است.

نمودار حاصل

قواعد و توابع[۳][ویرایش]

نمونه‌ای از کد همبستگی در پایتون

انجمنی یا همبستگی(Association)[ویرایش]

هدف این قوانین یافتن مواردی است که بطور معناداری با یکدیگر همبستگی دارند. بطور مثال شما می‌توانید تراکنش خریدهایی را بررسی کنید تا ترکیبی از کالاهایی را که بطور معمول باهم خریداری می‌شوند را بدست آورید. این خواص به سوالاتی ازین قبیل پاسخ می‌دهند: اگر دسته‌ای از موارد در یک تراکنش باشند کدام مورد یا موارد بنظر می‌رسد که در تراکنشی یکسان با آنها قرار داشته باشد؟ تابعی که این قانون را از داده‌ها استخراج می‌کند تابع انجمنی نام دارد. مثال:میتوان تحلیل کرد مثلاً اگر مشتری رنگ خریداری کند به احتمال ۲۰٪ قلمو هم خریداری می‌کند. همچنین برای هم بستگی چندگانه اگر مشتری رنگ و قلمو بخرد به احتمال ۴۰٪ تینر نیز می‌خرد. بهترین میزان سنجش همبستگی ضریب همبستگی پیرسون می‌باشد و آن را می‌توان از تقسیم کواریانس دو متغیر بدست آورد. دستور زیر به وضوح بیانگر روش محاسبه است:

from numpy import corrcoef
corr = corrcoef(data.T) # .T gives the transpose
print corr

حاصل یک ماتریس شد شامل همبستگی‌ها. ردیف‌ها نشان دهنده متغیرها و ستون‌ها مشاهدات ما هستند. هر عضو ماتریس نشان دهنده همبستگی دو متغیر می‌باشد. همبستگی زمانی مثبت ست که دو متغیر با هم رشد کنند. زمانی منفی است که یکی رشد و دیگری کاهش یابد. وقتی تعداد متغیرها بالا باشد می‌توان نموداری با دستور زیر برای آنها رسم کرد:

from pylab import pcolor, colorbar, xticks, yticks
from numpy import arrange
pcolor(corr)
colorbar() # add
# arranging the names of the variables on the axis
xticks(arange(0.5,4.5),['sepal length',  'sepal width', 'petal length', 'petal width'],rotation=-20)
yticks(arange(0.5,4.5),['sepal length',  'sepal width', 'petal length', 'petal width'],rotation=-20)
show()

حاصل دستور فوق این نمودار است:

نمودار ۲

ترتیب یا وابستگی(sequence)[ویرایش]

این قاعده توالی اتفاقات را بررسی می‌کند که هر موردی چه مورد دیگری را در پی دارد.

نمونه‌ای از کد طبقه‌بندی در پایتون

طبقه‌بندی(classification)[ویرایش]

این مورد نسبت به بقیه به نسبت قابل درک تر است. ابتدا داده‌ها را رده‌بندی می‌کند برای اینکه مدلی ساخته شود که بتوان از آن برای پیش بینی رده آنهایی که مشخص نیستند استفاده کرد. همان روند شناخت دسته‌ای که یک شیی متعلق به آن است. بعنوان مثال طبقه‌بندی ایمیل بعنوان اسپم یا قانونی/مثلاً بررسی میزان اعتبار یک فرد و تصویب یا رد درخواست وام او

خوشه بندی(clustering)[ویرایش]

فرایندی اتوماتیک است که داده‌ها را به مجموعه و دسته‌هایی که اعضای آنها مشابه‌اند تقسیم می‌کند. شباهت مورد نظر بسته به کاربرد و نتیجه و نوع تحلیل متغیر است. در هر دسته اعضا با هم مشابه‌اند و با دسته‌های دیگر نامشابه. هدف این قاعده پیدا کردن مجموعه مشابه از موارد در بین داده‌های ورودی است. تعداد خوشه‌ها معیار و ملاک خوشه بندی و اینکه کدام خوشه بندی مطلوب تر است بسته به الگوریتم و هدف ما است. در کنار خوشه بندی مفهوم دسته‌بندی وجود دارد. هدف خوشه بندی پیدا کردن دسته شمارا و متناهی از خوشه هاست برای توصیف داده هاست اما دسته‌بندی هدف ایجاد یک مدل پیشگویی کننده را دارد که هم توانایی دسته‌بندی داده‌های ورودی را داشته باشد و هم بتوان از آن برای پیش گویی اینکه داده تازه‌وارد شده متعلق به کدام دسته است استفاده کرد.[۴]

رگرسیون(Regression)[ویرایش]

این الگوریتم به بررسی روابط میان داده‌ها و مدل سازی آنها می‌پردازد. هدف این تکنیک پیش بینی مقدار یک متغیر پیوسته بر اساس مقادیر دیگر متغیرهاست. شامل دونوع است:
۱.رگرسیون خطی
۲.رگرسیون غیر خطی

رگرسیون خطی[ویرایش]

یکی از روشهای ساخت رگرسیون خطی پیروی از دستور زیر است:

from numpy.random import rand
x = rand(40,1) # explanatory variable
y = x*x*x+rand(40,1)/5 # depentend variable
from sklearn.linear_model import LinearRegression
linreg = LinearRegression()
linreg.fit(x,y)

جهت رسم نمودار نیز کد زیر مورد استفاده است:

from numpy import linspace, matrix
xx = linspace(0,1,40)
plot(x,y,'o',xx,linreg.predict(matrix(xx).T),'--r')
show()

نتیجه کد بدین صورت است:

نمودار ۳

کتابخانه‌های لازم داده کاوی با پایتون[۵][ویرایش]

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

Numpy: ماژولی توسعه یافته و متن باز است که عملکردهای از پیش تعیین شده‌ای از روتین‌های عددی در اختیار ما قرار می‌دهد.

Scipy: این امکان را به ما می‌دهد که در ارایه‌های n بعدی دست ببریم.

Matplotlib: برای ما تصویر سازی و ترسیم و ویژوالیزیشن را ممکن می‌کند.

Matplotlib: بیشتر برای الگوریتم‌های معروف یادگیری ماشین است.

Pandas: دارای ساختارهای اطلاعاتی سطح بالا و ابزارهای طراحی برای عملیات ساده و سریه آنالیزی است.

دیگر: Theono ,NLTK ,statsmodels ,gensim, ...

فراخوانی کتابخانه[ویرایش]

برای استفاده از کتابخانه‌ها پیش از شروع کدنویسی باید آنها را فراخواند:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
import seaborn as sns

جستارهای وابسته[ویرایش]

منابع[ویرایش]