دادهکاوی با پایتون
دادهکاوی فرایند کشف اطلاعات پیشبینی شده از تجزیه و تحلیل پایگاه دادههای بزرگ است. نتیجهٔ مورد نظر از دادهکاوی برای ایجاد یک مدل از یک مجموعه دادهاست با توجه به اینکه میتواند بینش خود را به مجموعه دادههای مشابه تعمیم دهد. به عنوان مثالی در دنیای واقعی از یک نرمافزار دادهکاوی موفق میتوان در تشخیص تقلب خودکار از بانکها و موسسات اعتباری دید. نرمافزار برنامهنویسی پایتون یکی از نرمافزارهای کارآمد در دادهکاوی میباشد. پایتون به دلیل سادگی و همه منظوره بودن و ایجاد برنامههای کاربردی و تحلیل داده مورد توجه همگان قرار گرفتهاست. همچنین داشتن کتابخانههای متعدد و دسترسی آسان به آن موجب گرایش بسیاری از برنامه نویسان شدهاست. به همین دلیل به توضیح نکاتی از تکنیکهای دادهکاوی با پایتون میپردازیم.
آمادهسازی دادهها
اولین قدم در داده کاوی آمادهسازی دادههاست که روشهای مختلفی با استفاده از کتابخانههای متفاوت (بسته به نوع دادهها و نتیجه مورد نیاز) دارد. آمادهسازی داده برای الگوریتمهای معروف یادگیری ماشین (به انگلیسی: machine learning) که یکی از ابزارهای داده کاوی در پایتون محسوب میشود، نیز کاربرد دارد:
- تحلیل دادهها
- مدیریت دادههای ناکامل
- نرمال ساختن دادهها
- دستهبندی دادهها به انواع آنها
یکی از روشهای معرفی داده به برنامه از طریق دستور زیر است (مثال: دادههای ما در این نمونه کار شامل ۵۰ نمونه از ۳ مدل گل مورد تحقیق میباشد. دادهها به صورت سیایوی میباشد. دادههای دریافتی شامل ۵ ردیف میباشند. ۴ ردیف اول مقادیر و ردیف آخر کلاس نمونه ما میباشد):
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