覆蓋使用Python進(jìn)行數(shù)據(jù)挖掘查找和描述數(shù)據(jù)結(jié)構(gòu)模式的實(shí)踐工具。 第一節(jié) 介紹 數(shù)據(jù)挖掘是一個(gè)隱式提取以前未知的潛在有用的數(shù)據(jù)信息提取方式,。它使用廣泛,,并且是眾多應(yīng)用的技術(shù)基礎(chǔ)。 本文介紹那些使用Python數(shù)據(jù)挖掘?qū)嵺`用于發(fā)現(xiàn)和描述結(jié)構(gòu)模式數(shù)據(jù)的工具,。近些年來(lái),,Python在開發(fā)以數(shù)據(jù)為中心的應(yīng)用中被用的越來(lái)越多。感謝大型科學(xué)計(jì)算社區(qū)的支持以及大大豐富的數(shù)據(jù)分析函數(shù)庫(kù),。尤其是,,我們可以看到如何: · 導(dǎo)入和可視化數(shù)據(jù) · 數(shù)據(jù)分類 · 使用回歸分析和相關(guān)測(cè)量法發(fā)現(xiàn)數(shù)據(jù)之間的關(guān)系 · 數(shù)據(jù)降維以壓縮和可視化數(shù)據(jù)帶來(lái)的信息 · 分析結(jié)構(gòu)化數(shù)據(jù) 每個(gè)主題都會(huì)提供代碼實(shí)例,它們基于四個(gè)主要的Python數(shù)據(jù)分析和處理的類庫(kù):numpy,,matplotlib,,sklearn和networkx。 第二節(jié) 數(shù)據(jù)導(dǎo)入和可視化 通常,,數(shù)據(jù)分析的第一步由獲取數(shù)據(jù)和導(dǎo)入數(shù)據(jù)到我們的工作環(huán)境組成,。我們可以使用以下的Python代碼簡(jiǎn)單的下載數(shù)據(jù):
在以上的代碼片段中,我們使用了urllib2類庫(kù)以獲取伯克利大學(xué)網(wǎng)站的一個(gè)文件,,并使用標(biāo)準(zhǔn)類庫(kù)提供的File對(duì)象把它保存到本地磁盤,。數(shù)據(jù)包含鳶尾花(iris)數(shù)據(jù)集,這是一個(gè)包含了三種鳶尾花(山鳶尾、維吉尼亞鳶尾和變色鳶尾)的各50個(gè)數(shù)據(jù)樣本的多元數(shù)據(jù)集,,每個(gè)樣本都有四個(gè)特征(或者說(shuō)變量),,即花萼(sepal)和花瓣(petal)的長(zhǎng)度和寬度。以厘米為單位,。 數(shù)據(jù)集以CSV(逗號(hào)分割值)的格式存儲(chǔ),。CSV文件可以很方便的轉(zhuǎn)化并把其中的信息存儲(chǔ)為適合的數(shù)據(jù)結(jié)構(gòu)。此數(shù)據(jù)集有5列(譯者注:原文是行,,但這里應(yīng)該是列的意思),,前4列包含著特征值,最后一列代表著樣本類型,。CSV文件很容易被numpy類庫(kù)的genfromtxt方法解析:
在上面的例子中我們創(chuàng)建了一個(gè)包含特征值的矩陣以及一個(gè)包含樣本類型的向量,。我們可以通過(guò)查看我們加載的數(shù)據(jù)結(jié)構(gòu)的shape值來(lái)確認(rèn)數(shù)據(jù)集的大小:
我們也可以查看我們有多少種樣本類型以及它們的名字:
當(dāng)我們處理新數(shù)據(jù)的時(shí)候,,一項(xiàng)很重要的任務(wù)是嘗試去理解數(shù)據(jù)包含的信息以及它的組織結(jié)構(gòu),。可視化可以靈活生動(dòng)的展示數(shù)據(jù),,幫助我們深入理解數(shù)據(jù),。 使用pylab類庫(kù)(matplotlib的接口)的plotting方法可以建一個(gè)二維散點(diǎn)圖讓我們?cè)趦蓚€(gè)維度上分析數(shù)據(jù)集的兩個(gè)特征值:
上面那段代碼使用第一和第三維度(花萼的長(zhǎng)和寬),結(jié)果如下圖所示: 在上圖中有150個(gè)點(diǎn),,不同的顏色代表不同的類型,;藍(lán)色點(diǎn)代表山鳶尾,紅色點(diǎn)代表變色鳶尾,,綠色點(diǎn)代表維吉尼亞鳶尾,。 另一種常用的查看數(shù)據(jù)的方法是分特性繪制直方圖。在本例中,,既然數(shù)據(jù)被分為三類,,我們就可以比較每一類的分布特征。下面這個(gè)代碼可以繪制數(shù)據(jù)中每一類型的第一個(gè)特性(花萼的長(zhǎng)度):
結(jié)果如下圖: 根據(jù)上圖的直方圖,,我們可以根據(jù)數(shù)據(jù)類型區(qū)分理解數(shù)據(jù)的特征,。例如,我們可以觀察到,,山鳶尾的平均花萼長(zhǎng)度小于維吉尼亞鳶尾,。 第三節(jié) 分類 分類是一個(gè)數(shù)據(jù)挖掘方法,用于把一個(gè)數(shù)據(jù)集中的樣本數(shù)據(jù)分配給各個(gè)目標(biāo)類,。實(shí)現(xiàn)這個(gè)方法的模塊叫做分類器,。使用分類器需要以下兩步:訓(xùn)練和分類。訓(xùn)練是指采集已知其特定類歸屬的數(shù)據(jù)并基于這些數(shù)據(jù)創(chuàng)建分類器,。 分類是指使用通過(guò)這些已知數(shù)據(jù)建立的分類器來(lái)處理未知的數(shù)據(jù),,以判斷未知數(shù)據(jù)的分類情況,。 Sklearn類庫(kù)包含很多分類器的實(shí)現(xiàn),,本章我們將會(huì)使用高斯樸素貝葉斯來(lái)分析我們?cè)诘谝徽螺d入的鳶尾花數(shù)據(jù),,包含山鳶尾、變色鳶尾和維吉尼亞鳶尾,。最后我們把字符串?dāng)?shù)組轉(zhuǎn)型成整型數(shù)據(jù):
現(xiàn)在我們已經(jīng)做好實(shí)例化和訓(xùn)練分類器的準(zhǔn)備了:
分類器可以由predict方法完成,,并且只要輸出一個(gè)樣例就可以很簡(jiǎn)單的檢測(cè):
上例中predicted類包含了一個(gè)正確的樣本(山鳶尾),但是在廣泛的樣本上評(píng)估分類器并且使用非訓(xùn)練環(huán)節(jié)的數(shù)據(jù)測(cè)試是很重要的,。最終我們通過(guò)從源數(shù)據(jù)集中隨機(jī)抽取樣本把數(shù)據(jù)分為訓(xùn)練集和測(cè)試集,。我們將會(huì)使用訓(xùn)練集的數(shù)據(jù)來(lái)訓(xùn)練分類器,并使用測(cè)試集的數(shù)據(jù)來(lái)測(cè)試分類器,。train_test_split方法正是實(shí)現(xiàn)此功能的:
數(shù)據(jù)集被分一分為二,,測(cè)試集被指定為源數(shù)據(jù)的40%(命名為test_size),我們用它反復(fù)訓(xùn)練我們的分類器并輸出精確度:
在此例中,,我們的精確度為93%,。一個(gè)分類器的精確度是通過(guò)正確分類樣本的數(shù)量除以總樣本的數(shù)量得出的。也就是說(shuō),,它意味著我們正確預(yù)測(cè)的比例,。 另一個(gè)估計(jì)分類器表現(xiàn)的工具叫做混淆矩陣。在此矩陣中每列代表一個(gè)預(yù)測(cè)類的實(shí)例,,每行代表一個(gè)實(shí)際類的實(shí)例,。使用它可以很容易的計(jì)算和打印矩陣:
在這個(gè)混淆矩陣中我們可以看到所有山鳶尾和維吉尼亞鳶尾都被正確的分類了,但是實(shí)際上應(yīng)該是26個(gè)的變色鳶尾,,系統(tǒng)卻預(yù)測(cè)其中三個(gè)是維吉尼亞鳶尾,。如果我們牢記所有正確的猜測(cè)都在表格的對(duì)角線上,那么觀測(cè)表格的錯(cuò)誤就很容易了,,即對(duì)角線以外的非零值,。 可以展示分類器性能的完整報(bào)告的方法也是很好用的:
以下是該報(bào)告使用到的方法總結(jié): Precision:正確預(yù)測(cè)的比例 Recall(或者叫真陽(yáng)性率):正確識(shí)別的比例 F1-Score:precision和recall的調(diào)和平均數(shù) 以上僅僅只是給出用于支撐測(cè)試分類的數(shù)據(jù)量。當(dāng)然,,分割數(shù)據(jù),、減少用于訓(xùn)練的樣本數(shù)以及評(píng)估結(jié)果等操作都依賴于配對(duì)的訓(xùn)練集和測(cè)試集的隨機(jī)選擇。如果要切實(shí)評(píng)估一個(gè)分類器并與其它的分類器作比較的話,,我們需要使用一個(gè)更加精確的評(píng)估模型,,例如Cross Validation。該模型背后的思想很簡(jiǎn)單:多次將數(shù)據(jù)分為不同的訓(xùn)練集和測(cè)試集,,最終分類器評(píng)估選取多次預(yù)測(cè)的平均值,。這次,sklearn為我們提供了運(yùn)行模型的方法:
如上所見,,輸出是每次模型迭代產(chǎn)生的精確度的數(shù)組,。我們可以很容易計(jì)算出平均精確度:
第四章 聚類 通常我們的數(shù)據(jù)上不會(huì)有標(biāo)簽告訴我們它的樣本類型,;我們需要分析數(shù)據(jù),把數(shù)據(jù)按照它們的相似度標(biāo)準(zhǔn)分成不同的群組,,群組(或者群集)指的是相似樣本的集合,。這種分析被稱為無(wú)監(jiān)督數(shù)據(jù)分析。最著名的聚類工具之一叫做k-means算法,,如下所示:
上述片段運(yùn)行k-measn算法并把數(shù)據(jù)分為三個(gè)群集(參數(shù)k所指定的)?,F(xiàn)在我們可以使用模型把每一個(gè)樣本分配到三個(gè)群集中:
我們可以估計(jì)群集的結(jié)果,與使用完整性得分和同質(zhì)性得分計(jì)算而得的標(biāo)簽作比較:
當(dāng)大部分?jǐn)?shù)據(jù)點(diǎn)屬于一個(gè)給定的類并且屬于同一個(gè)群集,,那么完整性得分就趨向于1,。當(dāng)所有群集都幾乎只包含某個(gè)單一類的數(shù)據(jù)點(diǎn)時(shí)同質(zhì)性得分就趨向于1. 我們可以把集群可視化并和帶有真實(shí)標(biāo)簽的做可視化比較:
結(jié)果如下圖所示: 觀察此圖我們可以看到,底部左側(cè)的群集可以被k-means完全識(shí)別,,然而頂部的兩個(gè)群集有部分識(shí)別錯(cuò)誤,。 第五章 回歸 回歸是一個(gè)用于預(yù)測(cè)變量之間函數(shù)關(guān)系調(diào)查的方法。例如,,我們有兩個(gè)變量,,一個(gè)被認(rèn)為是解釋,一個(gè)被認(rèn)為是依賴,。我們希望使用模型描述兩者的關(guān)系,。當(dāng)這種關(guān)系是一條線的時(shí)候就稱為線性回歸。 為了應(yīng)用線性回歸我們建立一個(gè)由上所述的綜合數(shù)據(jù)集:
我們可以使用在sklear.linear_model模塊中發(fā)現(xiàn)的LinearRegression模型,。該模型可以通過(guò)計(jì)算每個(gè)數(shù)據(jù)點(diǎn)到擬合線的垂直差的平方和,,找到平方和最小的最佳擬合線。使用方法和我們之前遇到的實(shí)現(xiàn)sklearn的模型類似:
我們可以通過(guò)把擬合線和實(shí)際數(shù)據(jù)點(diǎn)畫在同一幅圖上來(lái)評(píng)估結(jié)果:
圖見下: 觀察該圖我們可以得出結(jié)論:擬合線從數(shù)據(jù)點(diǎn)中心穿過(guò),,并可以確定是增長(zhǎng)的趨勢(shì),。 我們還可以使用均方誤差來(lái)量化模型和原始數(shù)據(jù)的擬合度:
該指標(biāo)度量了預(yù)期的擬合線和真實(shí)數(shù)據(jù)之間的距離平方。當(dāng)擬合線很完美時(shí)該值為0,。 第六章 相關(guān) 我們通過(guò)研究相關(guān)性來(lái)理解成對(duì)的變量之間是否相關(guān),,相關(guān)性的強(qiáng)弱。此類分析幫助我們精確定位被依賴的重要變量,。最好的相關(guān)方法是皮爾遜積矩相關(guān)系數(shù),。它是由兩個(gè)變量的協(xié)方差除以它們的標(biāo)準(zhǔn)差的乘積計(jì)算而來(lái)。我們將鳶尾花數(shù)據(jù)集的變量?jī)蓛山M合計(jì)算出其系數(shù)如下所示:
corrcoef方法通過(guò)輸入行為變量列為觀察值的矩陣,,計(jì)算返回相關(guān)系數(shù)的對(duì)稱矩陣,。該矩陣的每個(gè)元素代表著兩個(gè)變量的相關(guān)性。 當(dāng)值一起增長(zhǎng)時(shí)相關(guān)性為正,。當(dāng)一個(gè)值減少而另一個(gè)只增加時(shí)相關(guān)性為負(fù),。特別說(shuō)明,1代表完美的正相關(guān),,0代表不相關(guān),,-1代表完美的負(fù)相關(guān),。 當(dāng)變量數(shù)增長(zhǎng)時(shí)我們可以使用偽彩色點(diǎn)很方便的可視化相關(guān)矩陣:
結(jié)果如下: 看圖右側(cè)的彩條,我們可以把顏色點(diǎn)關(guān)聯(lián)到數(shù)值上,。在本例中,,紅色被關(guān)聯(lián)為最高的正相關(guān),我們可以看出我們數(shù)據(jù)集的最強(qiáng)相關(guān)是“花瓣寬度”和“花瓣長(zhǎng)度”這兩個(gè)變量,。 第七章 降維 在第一章中我們了解了如何將鳶尾花數(shù)據(jù)集的兩個(gè)維度可視化,。單獨(dú)使用該方法,,我們只能看到數(shù)據(jù)集的部分?jǐn)?shù)據(jù)視圖,。既然我們可以同時(shí)繪制的最高維度數(shù)為3,將整個(gè)數(shù)據(jù)集嵌入一系列維度并建立一個(gè)整體可視化視圖是很有必要的,。這個(gè)嵌入過(guò)程就被稱作降維,。最著名的降維技術(shù)之一就是主成分分析(PCA)。該技術(shù)把數(shù)據(jù)變量轉(zhuǎn)換為等量或更少的不相關(guān)變量,,稱為主成分(PCs),。 這次,sklearn滿足我們本次分析的所有需求:
上述片段中我們實(shí)例化了一個(gè)PCA對(duì)象,,用于計(jì)算前兩個(gè)主成分,。轉(zhuǎn)換計(jì)算如下:
然后如往常一樣繪制結(jié)果:
結(jié)果如下: 可以注意到上圖和第一章提到的有些相似,不過(guò)這次變色鳶尾(紅色的)和維吉尼亞鳶尾(綠色的)的間隔更清晰了,。 PCA將空間數(shù)據(jù)方差最大化,,我們可以通過(guò)方差比判斷PCs包含的信息量:
現(xiàn)在我們知道第一個(gè)PC占原始數(shù)據(jù)的92%的信息量而第二個(gè)占剩下的5%。我們還可以輸出在轉(zhuǎn)化過(guò)程中丟失的信息量:
在本例中我們損失了2%的信息量,。 此時(shí),,我們可以是應(yīng)用逆變換還原原始數(shù)據(jù):
可以證明的是,由于信息丟失逆變換不能給出準(zhǔn)確的原始數(shù)據(jù),。我們可以估算逆變換的結(jié)果和原始數(shù)據(jù)的相似度:
可以看出原始數(shù)據(jù)和逆變換計(jì)算出的近似值之間的差異接近于零,。通過(guò)改變主成分的數(shù)值來(lái)計(jì)算我們能夠覆蓋多少信息量是很有趣的:
上述片段輸出如下:
PCs用得越多,信息覆蓋就越全,,不過(guò)這段分析有助于我們理解保存一段特定的信息需要哪些組件,。例如,從上述片段可以看出,,只要使用三個(gè)PCs就可以覆蓋鳶尾花數(shù)據(jù)集的幾乎100%的信息,。 第八章 網(wǎng)絡(luò)挖掘 通常我們分析的數(shù)據(jù)是以網(wǎng)絡(luò)結(jié)構(gòu)存儲(chǔ)的,例如我,,我們的數(shù)據(jù)可以描述一群facebook用戶的朋友關(guān)系或者科學(xué)家的論文的合作者關(guān)系,。這些研究對(duì)象可以使用點(diǎn)和邊描述之間的關(guān)系。 本章中我們將會(huì)介紹分析此類數(shù)據(jù)的基本步驟,,稱為圖論,,一個(gè)幫助我們創(chuàng)造,、處理和研究網(wǎng)絡(luò)的類庫(kù)。尤其我們將會(huì)介紹如何使用特定方法建立有意義的數(shù)據(jù)可視化,,以及如何建立一組關(guān)聯(lián)稠密的點(diǎn),。 使用圖論可以讓我們很容易的導(dǎo)入用于描述數(shù)據(jù)結(jié)構(gòu)的最常用結(jié)構(gòu):
在上述代碼我們導(dǎo)入了《悲慘世界》同時(shí)出現(xiàn)的單詞組成的網(wǎng)絡(luò),可以通過(guò)https:///datasets/lesmiserables.gml.zip免費(fèi)下載,,數(shù)據(jù)以GML格式存儲(chǔ),。我們還可以使用下面的命令導(dǎo)入并可視化網(wǎng)絡(luò):
結(jié)果如下: 上圖網(wǎng)絡(luò)中每個(gè)點(diǎn)代表小說(shuō)中的一個(gè)單詞,兩單詞間的聯(lián)系代表同一章里兩單詞同時(shí)出現(xiàn)了,。很容易就發(fā)現(xiàn)這圖不是很有幫助,。該網(wǎng)絡(luò)的大部分細(xì)節(jié)依然一藏著,并且發(fā)現(xiàn)很難發(fā)現(xiàn)那些重要點(diǎn),。我們可以研究節(jié)點(diǎn)度來(lái)獲取一些內(nèi)部細(xì)節(jié),。節(jié)點(diǎn)度是指一個(gè)最簡(jiǎn)中心測(cè)量并由一個(gè)點(diǎn)的多個(gè)關(guān)聯(lián)組成。我們可以通過(guò)最大值,、最小值,、中位數(shù)、第一四分位數(shù)和第三四分位數(shù)來(lái)總結(jié)一個(gè)網(wǎng)絡(luò)的度分布:
經(jīng)過(guò)分析我們決定只考慮節(jié)點(diǎn)度大于10的點(diǎn),。我們可以建立一副只包含我們需要的點(diǎn)的新圖來(lái)展現(xiàn)這些點(diǎn):
結(jié)果見下圖: 現(xiàn)在這幅圖可讀性大大提高了,。這樣我們就能觀察到相關(guān)度最高的單詞以及它們的關(guān)系。 通過(guò)識(shí)別團(tuán)來(lái)研究網(wǎng)絡(luò)也是很有趣的,。團(tuán)是指一個(gè)點(diǎn)和其他所有點(diǎn)相連的群組,,極大團(tuán)是指網(wǎng)絡(luò)中不屬于其它任何一個(gè)團(tuán)的子集的團(tuán)。我們可以通過(guò)如下方法發(fā)現(xiàn)我們網(wǎng)絡(luò)中所有的極大團(tuán):
用下面這行命令輸出極大團(tuán):
我們可以看見列表中的絕大部分名字都和上圖中可以看見的數(shù)據(jù)群中的相同,。 第九章 其他資源
看完本文有收獲?請(qǐng)轉(zhuǎn)發(fā)分享給更多人 關(guān)注「大數(shù)據(jù)與機(jī)器學(xué)習(xí)文摘」,,成為Top 1%
|
|
來(lái)自: CHOK2620 > 《python數(shù)據(jù)分析》