数据科学-通过数据探索了解我们的特征
簡(jiǎn)介
對(duì)于數(shù)據(jù)科學(xué)而言,我們要做的第一件事情,必然是了解我們的數(shù)據(jù).而在數(shù)據(jù)探索期間,pandas和matplotlib 則是我們進(jìn)行數(shù)據(jù)探索的利器.本文主要分為三個(gè)部分,第一部分是利用pandas進(jìn)行一些基礎(chǔ)的數(shù)據(jù)分析,第二部分是利用pandas自身功能進(jìn)行一些有用的數(shù)據(jù)探索,最重要的是第三部分,利用pandas與matplotlib ,scikit-learn中的工具以及數(shù)據(jù)與算法本身的一些特性對(duì)數(shù)據(jù)進(jìn)行進(jìn)一步的分析與探索.
此外本文中所有的內(nèi)容都會(huì)給出源碼,并附帶數(shù)據(jù)文件.供大家參考.長(zhǎng)文多圖,部分圖片僅僅為了放松氣氛,與數(shù)據(jù)探索無關(guān).
準(zhǔn)備
在閱讀文章之前,你也許需要一些準(zhǔn)備
1.win下Pandas,matplotlib 無法顯示中文問題 解決方案
2.Ubuntu下Pandas,matplotlib 無法顯示中文
3.下載數(shù)據(jù)文件與全部代碼
或者從UCI讀取并存儲(chǔ)文件的CODE:
(pandas?不對(duì),pandas應(yīng)該是一群)
利用Pandas進(jìn)行基礎(chǔ)的統(tǒng)計(jì)分析
- 基礎(chǔ)性的統(tǒng)計(jì)分析
圖1 - 1
wine.describe()輸出的下部分是數(shù)據(jù)的四分位數(shù).這個(gè)功能在之后的箱形圖(Box-plot)時(shí)會(huì)使用到,同時(shí)之前的所有數(shù)據(jù)其實(shí)都在我們之后可視化部分可能用到.
- 累計(jì)計(jì)算
Pandas,matplotlib 利用數(shù)據(jù)可視化進(jìn)行數(shù)據(jù)探索
柱狀圖,基礎(chǔ)的統(tǒng)計(jì)分析,靈活多樣但是易學(xué)難精
柱狀圖基本上算是數(shù)據(jù)可視化中的helloWorld,利用柱狀圖,但是柱狀圖可不僅僅是看看統(tǒng)計(jì)數(shù)據(jù)這么簡(jiǎn)單
最基本的我們對(duì)所有的數(shù)據(jù)繪制柱狀圖
但是這樣的數(shù)據(jù)很難展示出,太大的價(jià)值,一個(gè)不錯(cuò)的做法就是將所有的數(shù)據(jù)進(jìn)行排序,以此展示數(shù)據(jù)之間的關(guān)系.很多時(shí)候我們都可以通過數(shù)據(jù)集之間的關(guān)系發(fā)現(xiàn)目標(biāo)與特征之間的特殊關(guān)系,有些時(shí)候關(guān)系是線性的,有些時(shí)候則與特征平方,開平方,log等呈線性關(guān)系,而必要的可視化則可以幫助我們盡快地發(fā)現(xiàn)這一情況.
本例子中,我們使用的是紅酒口感得分的數(shù)據(jù)集,由專業(yè)知識(shí)我們可知,一般紅酒口感的得分,與酒精的平方呈線性關(guān)系,雖然這是我們通過專業(yè)知識(shí)得到的,確實(shí)通過了解專業(yè)知識(shí)我們能夠更快地找到新的特征,但是事實(shí)上,僅僅是已有的知識(shí)是很難對(duì)我們要處理的數(shù)據(jù)進(jìn)行跟好的處理的,很多時(shí)候,自己去理解數(shù)據(jù)才能構(gòu)造與發(fā)現(xiàn)更好的特征,這也就是數(shù)據(jù)探索的一大重要意義.
至于特征構(gòu)造,
1.3 變量變換的常用方法是什么?
變換變量有許多方法,如平方根,立方根,對(duì)數(shù),合并,倒數(shù)等等。來看看這些方法的細(xì)節(jié)和利弊。
對(duì)數(shù)(log):變量求對(duì)數(shù)是用于在分布圖上更改變量分布形狀的常用變換方法。通常用于減少變量的右偏差,雖然,它也不能應(yīng)用于零值或負(fù)值。
平方/立方根:變量的平方和立方根對(duì)改變變量的分布有效果。然而,它不如對(duì)數(shù)變換那么有效。立方根有自己的優(yōu)勢(shì),可以應(yīng)用于包括零和負(fù)值,平方根可以應(yīng)用于包括零的正值。
分箱(Binning):用于對(duì)變量進(jìn)行分類。以原始值,百分位數(shù)或頻率進(jìn)行分類,分類技術(shù)的決策是基于對(duì)于業(yè)務(wù)的理解。例如,可以將收入分為三類:高,中,低,也可以對(duì)多個(gè)變量執(zhí)行分箱。
此處文章你可以參考:http://www.jianshu.com/p/73b35d4d144c
手機(jī)打開可能有一些問題,那么你也可以瀏覽我轉(zhuǎn)載后的文章:http://blog.csdn.net/fontthrone/article/details/78186578
除此之外,如果是文本信息,那么你也可以參考:http://blog.csdn.net/fontthrone/article/details/76358665
多重曲線圖,發(fā)現(xiàn)特征與得分之間的關(guān)系
假如僅僅是查看數(shù)據(jù)之間的關(guān)系的話,那么很多時(shí)候曲線圖確實(shí)也是一個(gè)不錯(cuò)的工具
我們使用多重曲線圖對(duì)之前的酒精特征與wine口感得分的關(guān)系進(jìn)行分析
從圖中可見,確實(shí)紅酒口感得分與酒精 的平方 呈線性關(guān)系而非究竟特征本身,同樣對(duì)于數(shù)據(jù)與特征關(guān)系的數(shù)據(jù)探索,也可以類推到立方,平方根,立方根,log等多種變量轉(zhuǎn)換上。
熱圖,線性關(guān)系的探索
我們可以利用pandas自帶的功能,計(jì)算各個(gè)特征之間的線性相關(guān)性,以及各個(gè)特征與得分之間的線性關(guān)系的熱圖
似乎即使是同一個(gè)版本的,在不同環(huán)境中的配色也是不同的,此圖中線性關(guān)系最高的也就是每個(gè)特征與自己本身,而顏色相反的(本圖中為黑色)則是閑心關(guān)系最低的.
def ShowCorrHeatMap(Data,method = 'pearson'): # 相關(guān)性熱圖#calculate correlation matrixcorMat = DataFrame(Data.corr(method=method))#visualize correlations using heatmapplot.pcolor(corMat)plot.show()ShowCorrHeatMap(Data=wine,method="pearson") ShowCorrHeatMap(Data=wine,method="kendall") ShowCorrHeatMap(Data=wine,method="spearman")# 一共有三種計(jì)算方法,差異不大,我個(gè)人偏好皮爾遜箱形圖,查看數(shù)據(jù)分布,查找異常點(diǎn)
首先上圖
箱形圖構(gòu)成解析
- 長(zhǎng)方形中間的橫線,第50百分位數(shù),也就是中位數(shù)
- 長(zhǎng)方形,上下邊分別是數(shù)據(jù)的第25百分位數(shù)和第75百分位數(shù),也就是第一四分位數(shù)和第三四分位數(shù)
- 長(zhǎng)方形外兩根黑色的橫線,即為四分位間距,也就是第25百分位數(shù)和第75百分位數(shù)的1.4倍.當(dāng)數(shù)據(jù)本身的范圍小于這個(gè)范圍時(shí),黑色橫線向中位數(shù)方向收縮,而超過黑色橫線的數(shù)據(jù)點(diǎn)都可以視為異常數(shù)據(jù)點(diǎn).
彩色平行坐標(biāo)圖,線性關(guān)系的判別.
彩色平行坐標(biāo)圖展示:
由圖可見,其中藍(lán)色部分與橙色部分在許多特征點(diǎn)上都可以比較清晰的展示出來,這就可以證明當(dāng)前數(shù)據(jù)及可以較好地分類當(dāng)前的數(shù)據(jù),下面再給出分對(duì)數(shù)轉(zhuǎn)換之后的彩色平行坐標(biāo)圖
這里因?yàn)閳D片大小原因,所以圖片細(xì)節(jié)展示的不是十分清晰,你可以運(yùn)行代碼,然后利用進(jìn)行程序的放大鏡查看.這樣可以比較好的觀察到圖片細(xì)節(jié).
散點(diǎn)圖,兩維數(shù)據(jù)的關(guān)系判別
首先是連續(xù)數(shù)據(jù)的分布關(guān)系
在此圖中,我們進(jìn)行一些簡(jiǎn)單的判斷,比如大量的數(shù)據(jù)異常點(diǎn)(主要分布于>77.5的區(qū)域),而去除異常點(diǎn)之后,我們則可以發(fā)現(xiàn),不同區(qū)間的價(jià)格隨著距離的增大而成一定的關(guān)系,因?yàn)閿?shù)據(jù)點(diǎn)較少,我們比較難判斷到底是線性關(guān)系還是log關(guān)系,但是我們大概確定了其關(guān)系的存在,并且數(shù)據(jù)分布范圍很大,也在告訴著我們很可能價(jià)格仍然受其他因素的影響,我們需要尋找其他特征來確定該模型.
然后是分類問題的散點(diǎn)圖.
通過該圖,我們可以得到兩條重要信息,
第一:兩個(gè)類別在該維度上的關(guān)系并不是線性的,我們需要其它維度或者通過構(gòu)造維度,或者選取非線性分類模型來分類這兩類數(shù)據(jù)
第二: 數(shù)據(jù)豐富度不夠,我們很難通過現(xiàn)有的數(shù)據(jù)畫出明確的邊界,我們這時(shí)候就要拿出相應(yīng)的對(duì)抗策略,比如復(fù)制數(shù)據(jù)等增加數(shù)據(jù)集的手段,而在模型選取上,我們也需要更適合小型數(shù)據(jù)集的算法來進(jìn)行數(shù)據(jù)分類.
本部分給出了一些常用的數(shù)據(jù)探索手段,但是更多的手段還在等待著你去學(xué)習(xí)
至于更多文本分析的內(nèi)容請(qǐng)參考我的專欄,我會(huì)慢慢補(bǔ)充:劍指漢語自然語言處理
關(guān)于繪圖中中文亂碼的問題,你可以參考我前面的文章,不過Ubuntu下中文顯示雖然有點(diǎn)麻煩,但是ubuntu仍然是數(shù)據(jù)科學(xué)的最愛,不信你看:
(Ubuntu娘-動(dòng)漫版)
(Ubuntu娘-真人版)
是不是很招人喜歡?
更復(fù)雜的策略,數(shù)據(jù)探索與算法
這里要分為三個(gè)部分講,第一個(gè)部分是數(shù)據(jù)探索為一些算法的使用做準(zhǔn)備,比如降維,缺失值,空白值處理,,數(shù)據(jù)探索可以讓我們更好的選擇算法,比如缺失值的處理,到底是使用插值補(bǔ)全,還是均值或者不處理等等.該部分內(nèi)容較多,只能下次再寫一篇文章,此處只一筆帶過.
第二個(gè)部分,則是進(jìn)行數(shù)據(jù)探索的算法,比如聚類算法,圖為距離聚類算法(使用sklearn),通過聚類算法,我們可以發(fā)現(xiàn)數(shù)據(jù)點(diǎn)之間的一些關(guān)聯(lián)信息,或者相近程度.在需要的時(shí)候,我們還可以使用sklearn中的加權(quán)聚類,進(jìn)行進(jìn)一步的分析.
又或是關(guān)聯(lián)度分析,通過關(guān)聯(lián)度分析也可以很好的發(fā)現(xiàn)數(shù)據(jù)之間的關(guān)系.(使用sklearn)
等等等等(這里也需要另外一篇文章來補(bǔ)全,我會(huì)盡快寫)
再或是特征重要程度的確認(rèn),我們可以通過前向逐步回歸,來進(jìn)行特征選擇,而且是這和我們之前可視化的作用是一致的,都是在尋找特征與y值之間的關(guān)系.但是相較于前向逐步回歸等方式來確認(rèn)特征的重要程度,不如借用一些算法的特性來確認(rèn)特征的重要程度
第三個(gè)部分則是利用一些模型特性來進(jìn)行特征選擇,比如利用嶺回歸中,各類別系數(shù)的大小,去除w值較小的內(nèi)容,又或是利用決策樹中對(duì)不同屬性重要程度的劃分,提出一些不重要的屬性.這是利用算法本身進(jìn)行的一些特征選擇的處理,但是他和我們之前所做的檢測(cè)各個(gè)特征之間的線性關(guān)系等可視化措施效果是類似的,因此我們?cè)谶M(jìn)行模型選擇是.不妨也將線性回歸與決策樹算法(決策樹集成算法也可以)中這一算法特性作為數(shù)據(jù)探索的一個(gè)手段,來確認(rèn)特征本身對(duì)于y值的重要程度.
該部分的算法我們都可以通過sklearn實(shí)現(xiàn)
- 首先以懲罰性線性回歸為例(篇幅原因,以下算法的具體計(jì)算均不作詳細(xì)介紹,代碼請(qǐng)見下載文件)
(lasso回歸中的各個(gè)屬性關(guān)系關(guān)系變化)
如圖中所示,在懲罰想的系數(shù),超參數(shù)-alpha的不同取值時(shí),所需要用到的屬性種類及重要程度都在不斷的變化,先加入的特征最終的系數(shù)不一定比后加入的系數(shù)大,隨著alpha的變化,屬性重要程度不一定在增加,反而可能會(huì)減小.通過lasso回歸算法本身的特性).
通過該方式,我們可以很好的確認(rèn)不同特征對(duì)于紅酒口感得分的重要程度.
- 然后以隨機(jī)森林為例
利用調(diào)用sklearn中RF算法自帶的功能,我們可以獲取,每個(gè)特征的重要程度,但是要注意的是,RF(決策樹類)得出的特征重要程度排名可能與懲罰性線性回歸得出的結(jié)果又略微的差異,這個(gè)需要我們進(jìn)一步的分析.而從剛剛的圖中可得.重要程度最高的仍然是V10屬性.當(dāng)然利用程序我們可以獲取更多的詳細(xì)信息,你可以試著運(yùn)行我的代碼,來探索這些數(shù)據(jù)與算法.
參考資料
總結(jié)
以上是生活随笔為你收集整理的数据科学-通过数据探索了解我们的特征的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习实战-数据探索(变量变换、生成)
- 下一篇: sklearn中的Pipline(流水线