數(shù)據(jù)分析是一個快速發(fā)展的領(lǐng)域,而Python已經(jīng)演變成數(shù)據(jù)科學(xué)的主要語言,廣泛應(yīng)用于數(shù)據(jù)分析、可視化和機器學(xué)習(xí)等領(lǐng)域。本書從數(shù)據(jù)分析的基礎(chǔ)內(nèi)容入手,比如matplotlib、NumPy和Pandas庫,介紹如何通過選擇色彩圖和調(diào)色板來創(chuàng)建可視化,之后深入統(tǒng)計數(shù)據(jù)分析,將幫助你掌握Spark和HDFS,為網(wǎng)絡(luò)挖掘創(chuàng)建可遷移腳本。本書還詳細闡述如何評價股票,檢測市場有效性,使用指標和聚類等,并且還將使用多線程實現(xiàn)并行性,并加速你的代碼。在本書結(jié)束時,讀者將能夠運用各種Python中的數(shù)據(jù)分析技術(shù),并針對問題場景設(shè)計解決方案。
前言?Preface數(shù)據(jù)分析是Python的殺手锏。
——匿名本書是《PythonDataAnalysis》的后續(xù)。那么在《PythonDataAnalysis》已經(jīng)足夠優(yōu)秀(我愿意這么認為)的情況下,這本書有哪些新的內(nèi)容嗎?本書是針對那些有一定經(jīng)驗的Python程序員寫的。一年時間過去了,因此,我們將使用在《PythonDataAnalysis》中沒有用到的一些更新版本的軟件和軟件庫。另外,經(jīng)過深入反思和調(diào)研,我做出了以下的總結(jié):
為了減輕自己的負擔,同時提高代碼的可重復(fù)使用率,我需要一個工具箱,我將這個工具箱命名為dautil并將它發(fā)布到了Pypi上(可以通過pip/easy_install安裝)。
通過反省,我深信需要簡化獲取和安裝所需要的軟件的過程,因此我通過DockerHub發(fā)布了一個包含了我們需要用到的軟件的Docker容器(pydacbk),在本書的第1章和線上章節(jié)中你將了解更多關(guān)于如何安裝的細節(jié)。這個Docker容器還是不夠理想,因為它的體積已經(jīng)相當大,所以我需要做出一些艱難的決定。因為這個容器并不是本書的一部分,所以如果你有任何問題可以直接與我聯(lián)系,但是請記住我不會對鏡像做很大的修改。
本書會使用IPythonNotebook,這個工具已經(jīng)成為數(shù)據(jù)分析時的標準工具。在線上章節(jié)以及我寫的其他書中,我已經(jīng)給出了一些和IPythonNotebook相關(guān)的建議。
除了極少數(shù)案例外,本書中我主要使用的是Python3,因為2020年后官方將不再支持Python2。
為什么需要這本書有人會說你并不需要書籍,你只需要去做一個感興趣的項目,然后在做項目的同時就會搞明白那些東西。但是盡管接觸到大量的資源,這個過程可能還是會令你感到沮喪。打個比方,如果想烹調(diào)一碗美味的湯,你可以去向朋友和家人尋求幫助,上網(wǎng)搜索或者收看烹飪節(jié)目,但是朋友和家人不會一直在你身邊,網(wǎng)絡(luò)上的內(nèi)容也是良莠不齊。以我的淺見,出版社、審稿人和作者都在這本書上花費了大量的時間和精力,如果你不能從中有所收獲我會感到很詫異。
數(shù)據(jù)分析、數(shù)據(jù)科學(xué)、大數(shù)據(jù)——有什么了不起的你應(yīng)該看過將數(shù)據(jù)科學(xué)用數(shù)學(xué)/統(tǒng)計學(xué)、計算機科學(xué)以及專業(yè)領(lǐng)域的知識進行描述的維恩圖(Venndiagram)。數(shù)據(jù)分析是永恒的,它出現(xiàn)在數(shù)據(jù)科學(xué)之前,甚至是計算機科學(xué)之前。你可以用筆和紙或者更先進的便攜計算器進行數(shù)據(jù)分析。
數(shù)據(jù)分析體現(xiàn)在很多方面,比如說以做出決策或提出新的假設(shè)和問題為目的進行數(shù)據(jù)分析。數(shù)據(jù)科學(xué)以及大數(shù)據(jù)的熱潮、高待遇以及經(jīng)濟回報讓我想起了當數(shù)據(jù)存儲和商業(yè)智能還是時髦詞的年代。商業(yè)智能和數(shù)據(jù)存儲的終極目標是構(gòu)建應(yīng)用于管理的可視化圖表。這涉及很多政治和組織方面的利益,但是從技術(shù)的角度來看,這主要還是和數(shù)據(jù)庫相關(guān)。數(shù)據(jù)科學(xué)則不是以數(shù)據(jù)庫為中心,而是很大程度上依賴于機器學(xué)習(xí)。由于數(shù)據(jù)的量在不斷地變多,機器學(xué)習(xí)變得越來越不可或缺。數(shù)據(jù)大量增長的背后是人口的快速增長以及新技術(shù)的層出不窮,比如說社交媒體和移動設(shè)備的出現(xiàn)。事實上,數(shù)據(jù)增長可能是我們唯一可以肯定的將一直持續(xù)的趨勢。構(gòu)建可視化圖表和應(yīng)用機器學(xué)習(xí)的區(qū)別就類似于搜索引擎的演進。
搜索引擎(如果可以這么稱呼)最初只是手動創(chuàng)建的組織良好的鏈接集合。而最終,純自動的方式取代了前者。當下,更多的數(shù)據(jù)將會被創(chuàng)建(而不是被銷毀),我們可以預(yù)見自動化數(shù)據(jù)分析領(lǐng)域的增長。
Python數(shù)據(jù)分析的簡要歷程各個Python軟件庫的歷史十分有趣,但我不是一個歷史學(xué)家,所以下面的記錄主要從我的視角來寫:
1989年:GuidoVanRossum在荷蘭的CWI實現(xiàn)了Python的第一個版本,當時是作為一個圣誕節(jié)的“興趣”項目。
1995年:JimHugunin創(chuàng)建了Numeric——Numpy的前身。
1999年:PearuPeterson寫了f2py作為連接Fortran和Python的橋梁。
2000年:Python2.0發(fā)布。
2001年:SciPy庫發(fā)布,同期創(chuàng)建的還有與Numeric競爭的庫Numarray。FernandoPerez發(fā)布了IPython,它最初是以“午后黑客”(afternoonhack)的名義發(fā)布的。NLTK(自然語言工具包)發(fā)布且用于研究項目。
2002年:JohnHunter創(chuàng)建了Matplotlib庫。
2005年:TravisOliphant發(fā)布了NumPy,NumPy最初是受Numarray啟發(fā)而對Numeric進行擴展的庫。
2006年:NumPy1.0發(fā)布,第1版SQLAlchemy發(fā)布。
2007年:DavidCournapeau將scikit-learn作為GoogleSummerofCode的項目,Cy-thon在Pyrex的基礎(chǔ)上開始開發(fā),Cython后來集中用在了pandas和scikit-learn上以提升性能。
2008年:WesMcKinney開始開發(fā)pandas,Python3.0發(fā)布。
2011年:IPython0.12發(fā)行版本中引入了IPythonNotebook,Packt出版社出版了《NumPy1.5BeginnersGuide》。
2012年:Packt出版社出版了《NumPyCookbook》。
2013年:Packt出版社出版了第2版的《NumPyBeginnersGuide》。
2014年:FernandoPerez宣布了Jupyter項目,致力于開發(fā)與語言無關(guān)的Notebook,Packt出版社出版了《LearningNumPyArray》和《PythonDataAnalysis》。
2015年:Packt出版社出版了第3版的《NumPyBeginnersGuide》以及第2版的《NumPyCookbook》。
Contents?目 錄
譯者序
前 言
第1章為可重復(fù)的數(shù)據(jù)分析奠定基礎(chǔ) 1
1.1 簡介 1
1.2 安裝Anaconda 2
1.3 安裝數(shù)據(jù)科學(xué)工具包 3
1.4 用virtualenv和virtualenvwrapper創(chuàng)建Python虛擬環(huán)境 5
1.5 使用Docker鏡像沙盒化Python應(yīng)用 6
1.6 在IPython Notebook中記錄軟件包的版本和歷史 8
1.7 配置IPython 11
1.8 學(xué)習(xí)為魯棒性錯誤校驗記錄日志 13
1.9 為你的代碼寫單元測試 16
1.10 配置pandas 18
1.11 配置matplotlib 20
1.12為隨機數(shù)生成器和NumPy打印選項設(shè)置種子 23
1.13使報告、代碼風(fēng)格和數(shù)據(jù)訪問標準化 24
第2章 創(chuàng)建美觀的數(shù)據(jù)可視化 28
2.1 簡介 28
2.2 圖形化安斯庫姆四重奏 28
2.3 選擇Seaborn的調(diào)色板 31
2.4 選擇matplotlib的顏色表 33
2.5 與IPython Notebook部件交互 35
2.6 查看散點圖矩陣 38
2.7通過mpld3使用d3.js進行可視化 40
2.8 創(chuàng)建熱圖 41
2.9把箱線圖、核密度圖和小提琴圖組合 44
2.10 使用蜂巢圖可視化網(wǎng)絡(luò)圖 45
2.11 顯示地圖 47
2.12 使用類ggplot2圖 49
2.13 使用影響圖高亮數(shù)據(jù) 51
第3章 統(tǒng)計數(shù)據(jù)分析和概率 53
3.1 簡介 53
3.2 將數(shù)據(jù)擬合到指數(shù)分布 53
3.3 將聚合數(shù)據(jù)擬合到伽馬分布 55
3.4 將聚合計數(shù)擬合到泊松分布 57
3.5 確定偏差 59
3.6 估計核密度 61
3.7確定均值、方差和標準偏差的置信區(qū)間 64
3.8 使用概率權(quán)重采樣 66
3.9 探索極值 68
3.10使用皮爾遜相關(guān)系數(shù)測量變量之間的相關(guān)性 71
3.11使用斯皮爾曼等級相關(guān)系數(shù)測量變量之間的相關(guān)性 74
3.12使用點二列相關(guān)系數(shù)測量二值變量和連續(xù)變量的相關(guān)性 77
3.13評估變量與方差分析之間的關(guān)系 78
第4章 處理數(shù)據(jù)和數(shù)值問題 81
4.1 簡介 81
4.2 剪輯和過濾異常值 81
4.3 對數(shù)據(jù)進行縮尾處理 84
4.4 測量噪聲數(shù)據(jù)的集中趨勢 85
4.5 使用Box-Cox變換進行歸一化 88
4.6 使用冪階梯轉(zhuǎn)換數(shù)據(jù) 90
4.7 使用對數(shù)轉(zhuǎn)換數(shù)據(jù) 91
4.8 重組數(shù)據(jù) 93
4.9 應(yīng)用logit()來變換比例 95
4.10 擬合魯棒線性模型 97
4.11 使用加權(quán)最小二乘法考慮方差 99
4.12 使用任意精度進行優(yōu)化 101
4.13 使用任意精度的線性代數(shù) 103
第5章網(wǎng)絡(luò)挖掘、數(shù)據(jù)庫和大數(shù)據(jù) 107
5.1 簡介 107
5.2 模擬網(wǎng)頁瀏覽 108
5.3 網(wǎng)絡(luò)數(shù)據(jù)挖掘 110
5.4處理非ASCII文本和HTML實體 112
5.5 實現(xiàn)關(guān)聯(lián)表 114
5.6 創(chuàng)建數(shù)據(jù)庫遷移腳本 117
5.7 在已經(jīng)存在的表中增加一列 117
5.8 在表創(chuàng)建之后添加索引 118
5.9 搭建一個測試Web服務(wù)器 120
5.10實現(xiàn)具有事實表和維度表的星形模式 121
5.11 使用Hadoop分布式文件系統(tǒng) 126
5.12 安裝配置Spark 127
5.13 使用Spark聚類數(shù)據(jù) 128
第6章 信號處理和時間序列 132
6.1 簡介 132
6.2 使用周期圖做頻譜分析 132
6.3使用Welch算法估計功率譜密度 134
6.4 分析峰值 136
6.5 測量相位同步 138
6.6 指數(shù)平滑法 140
6.7 評估平滑法 142
6.8 使用Lomb-Scargle周期圖 145
6.9 分析音頻的頻譜 146
6.10 使用離散余弦變換分析信號 149
6.11 對時序數(shù)據(jù)進行塊自舉 151
6.12 對時序數(shù)據(jù)進行動態(tài)塊自舉 153
6.13 應(yīng)用離散小波變換 155
第7章利用金融數(shù)據(jù)分析選擇股票 159
7.1 簡介 159
7.2 計算簡單收益率和對數(shù)收益率 159
7.3使用夏普比率和流動性對股票進行排名 161
7.4使用卡瑪和索提諾比率對股票進行排名 162
7.5 分析收益統(tǒng)計 164
7.6 將個股與更廣泛的市場相關(guān)聯(lián) 166
7.7 探索風(fēng)險與收益 169
7.8 使用非參數(shù)運行測試檢驗市場 170
7.9 測試隨機游走 173
7.10 使用自回歸模型確定市場效率 175
7.11 為股票價格數(shù)據(jù)庫建表 177
7.12 填充股票價格數(shù)據(jù)庫 178
7.13 優(yōu)化等權(quán)重雙資產(chǎn)組合 183
第8章 文本挖掘和社交網(wǎng)絡(luò)分析 186
8.1 簡介 186
8.2 創(chuàng)建分類的語料庫 186
8.3 以句子和單詞標記化新聞文章 189
8.4詞干提取、詞形還原、過濾和TF-IDF得分 189
8.5 識別命名實體 193
8.6 提取帶有非負矩陣分解的主題 194
8.7 實現(xiàn)一個基本的術(shù)語數(shù)據(jù)庫 196
8.8 計算社交網(wǎng)絡(luò)密度 200
8.9 計算社交網(wǎng)絡(luò)接近中心性 201
8.10 確定中介中心性 202
8.11 評估平均聚類系數(shù) 203
8.12 計算圖的分類系數(shù) 204
8.13 獲得一個圖的團數(shù) 205
8.14 使用余弦相似性創(chuàng)建文檔圖 206
第9章 集成學(xué)習(xí)和降維 209
9.1 簡介 209
9.2 遞歸特征消除 210
9.3 應(yīng)用主成分分析來降維 211
9.4 應(yīng)用線性判別分析來降維 213
9.5 多模型堆疊和多數(shù)投票 214
9.6 學(xué)習(xí)隨機森林 217
9.7使用RANSAC算法擬合噪聲數(shù)據(jù) 220
9.8 使用Bagging來改善結(jié)果 222
9.9 用于更好學(xué)習(xí)的Boosting算法 224
9.10 嵌套交叉驗證 227
9.11 使用joblib重用模型 229
9.12 層次聚類數(shù)據(jù) 231
9.13 Theano之旅 232
第10章評估分類器、回歸器和聚類 235
10.1 簡介 235
10.2 直接使用混淆矩陣分類 235
10.3 計算精度、召回率和F1分數(shù) 23