《利用Python進(jìn)行數(shù)據(jù)分析·第3版》新版上市,新版使用的是Pandas 1.4,更新了不少內(nèi)容尚猿。為了幫助大家學(xué)習(xí)拧抖,這次準(zhǔn)備寫寫本書的學(xué)習(xí)筆記,盡量將知識精簡一下灶似,這樣學(xué)起來更快:《利用Python進(jìn)行數(shù)據(jù)分析·第3版》學(xué)習(xí)筆記。
第1章 準(zhǔn)備工作
第2章 Python語法基礎(chǔ),IPython和Jupyter Notebooks
第3章 Python的數(shù)據(jù)結(jié)構(gòu)愚墓、函數(shù)和文件
第4章 NumPy基礎(chǔ):數(shù)組和矢量計算
第5章 pandas入門
第6章 數(shù)據(jù)加載、存儲與文件格式
第7章 數(shù)據(jù)清洗和準(zhǔn)備
第8章 數(shù)據(jù)規(guī)整:聚合昂勉、合并和重塑
第9章 繪圖和可視化
第10章 數(shù)據(jù)聚合與分組運算
第11章 時間序列
第12章 pandas高級應(yīng)用
第13章 Python建模庫介紹
第14章 數(shù)據(jù)分析案例
附錄A NumPy高級應(yīng)用
附錄B 更多關(guān)于IPython的內(nèi)容(完)
下載本書:http://www.reibang.com/p/fad9e41c1a42
GitHub(歡迎提pull request浪册,GitHub上的md文件可以用來自制電子書,pdf硼啤、mobi议经、epub格式的都行):
https://github.com/iamseancheney/python_for_data_analysis_2nd_chinese_version
GitBook(有錨點功能):
https://seancheney.gitbook.io/python-for-data-analysis-2nd/
下載本書代碼:https://github.com/wesm/pydata-book(建議把代碼下載下來之后,安裝好Anaconda 3.6谴返,在目錄文件夾中用Jupyter notebook打開)
本書是2017年10月20號正式出版的煞肾,和第1版的不同之處有:
- 包括Python教程內(nèi)的所有代碼升級為Python 3.6(第1版使用的是Python 2.7)
- 更新了Anaconda和其它包的Python安裝方法
- 更新了Pandas為2017最新版
- 新增了一章,關(guān)于更高級的Pandas工具嗓袱,外加一些tips
- 簡要介紹了使用StatsModels和scikit-learn
對有些內(nèi)容進(jìn)行了重新排版籍救。(譯者注1:最大的改變是把第1版附錄中的Python教程,單列成了現(xiàn)在的第2章和第3章渠抹,并且進(jìn)行了擴(kuò)充蝙昙∩撂眩可以說,本書第2版對新手更為友好了F娴摺)
(譯者注2:毫無疑問败去,本書是學(xué)習(xí)Python數(shù)據(jù)分析最好的參考書(另一本不錯的是《Pandas Cookbook》、《Pandas 1.x Cookbook · 第二版》 )烈拒。本來想把書名直接譯為《Python數(shù)據(jù)分析》圆裕,這樣更簡短。但是為了尊重第1版的翻譯荆几,考慮到繼承性吓妆,還是用老書名。這樣讀過第一版的老讀者可以方便的用之前的書名檢索到第二版吨铸。作者在寫第二版的時候行拢,有些文字是照搬第一版的。所以第二版的翻譯也借鑒copy了第一版翻譯:即诞吱,如果第二版中有和第一版相同的文字舟奠,則copy第一版的中文譯本,覺得不妥的地方會稍加修改狐胎,剩下的不同的內(nèi)容就自己翻譯鸭栖。這樣做也是為讀過第一版的老讀者考慮——相同的內(nèi)容可以直接跳過。)
1.1 本書的內(nèi)容
本書講的是利用Python進(jìn)行數(shù)據(jù)控制握巢、處理晕鹊、整理、分析等方面的具體細(xì)節(jié)和基本要點暴浦。我的目標(biāo)是介紹Python編程和用于數(shù)據(jù)處理的庫和工具環(huán)境溅话,掌握這些,可以讓你成為一個數(shù)據(jù)分析專家歌焦。雖然本書的標(biāo)題是“數(shù)據(jù)分析”飞几,重點卻是Python編程、庫独撇,以及用于數(shù)據(jù)分析的工具屑墨。這就是數(shù)據(jù)分析要用到的Python編程。
什么樣的數(shù)據(jù)纷铣?
當(dāng)書中出現(xiàn)“數(shù)據(jù)”時卵史,究竟指的是什么呢?主要指的是結(jié)構(gòu)化數(shù)據(jù)(structured data)搜立,這個故意含糊其辭的術(shù)語代指了所有通用格式的數(shù)據(jù)以躯,例如:
- 表格型數(shù)據(jù),其中各列可能是不同的類型(字符串、數(shù)值忧设、日期等)刁标。比如保存在關(guān)系型數(shù)據(jù)庫中或以制表符/逗號為分隔符的文本文件中的那些數(shù)據(jù)。
- 多維數(shù)組(矩陣)址晕。
- 通過關(guān)鍵列(對于SQL用戶而言膀懈,就是主鍵和外鍵)相互聯(lián)系的多個表。
- 間隔平均或不平均的時間序列斩箫。
這絕不是一個完整的列表吏砂。大部分?jǐn)?shù)據(jù)集都能被轉(zhuǎn)化為更加適合分析和建模的結(jié)構(gòu)化形式,雖然有時這并不是很明顯乘客。如果不行的話,也可以將數(shù)據(jù)集的特征提取為某種結(jié)構(gòu)化形式淀歇。例如易核,一組新聞文章可以被處理為一張詞頻表,而這張詞頻表就可以用于情感分析浪默。
大部分電子表格軟件(比如Microsoft Excel牡直,它可能是世界上使用最廣泛的數(shù)據(jù)分析工具了)的用戶不會對此類數(shù)據(jù)感到陌生。
1.2 為什么要使用Python進(jìn)行數(shù)據(jù)分析
許許多多的人(包括我自己)都很容易愛上Python這門語言纳决。自從1991年誕生以來碰逸,Python現(xiàn)在已經(jīng)成為最受歡迎的動態(tài)編程語言之一,其他還有Perl阔加、Ruby等饵史。由于擁有大量的Web框架(比如Rails(Ruby)和Django(Python)),自從2005年胜榔,使用Python和Ruby進(jìn)行網(wǎng)站建設(shè)工作非常流行胳喷。這些語言常被稱作腳本(scripting)語言,因為它們可以用于編寫簡短而粗糙的小程序(也就是腳本)夭织。我個人并不喜歡“腳本語言”這個術(shù)語吭露,因為它好像在說這些語言無法用于構(gòu)建嚴(yán)謹(jǐn)?shù)能浖T诒姸嘟忉屝驼Z言中尊惰,由于各種歷史和文化的原因讲竿,Python發(fā)展出了一個巨大而活躍的科學(xué)計算(scientific computing)社區(qū)。在過去的10年弄屡,Python從一個邊緣或“自擔(dān)風(fēng)險”的科學(xué)計算語言题禀,成為了數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)琢岩、學(xué)界和工業(yè)界軟件開發(fā)最重要的語言之一投剥。
在數(shù)據(jù)分析、交互式計算以及數(shù)據(jù)可視化方面担孔,Python將不可避免地與其他開源和商業(yè)的領(lǐng)域特定編程語言/工具進(jìn)行對比江锨,如R吃警、MATLAB、SAS啄育、Stata等酌心。近年來,由于Python的庫(例如pandas和scikit-learn)不斷改良挑豌,使其成為數(shù)據(jù)分析任務(wù)的一個優(yōu)選方案安券。結(jié)合其在通用編程方面的強(qiáng)大實力,我們完全可以只使用Python這一種語言構(gòu)建以數(shù)據(jù)為中心的應(yīng)用氓英。
Python作為膠水語言
Python成為成功的科學(xué)計算工具的部分原因是侯勉,它能夠輕松地集成C、C++以及Fortran代碼铝阐。大部分現(xiàn)代計算環(huán)境都利用了一些Fortran和C庫來實現(xiàn)線性代數(shù)址貌、優(yōu)選、積分徘键、快速傅里葉變換以及其他諸如此類的算法练对。許多企業(yè)和國家實驗室也利用Python來“粘合”那些已經(jīng)用了多年的遺留軟件系統(tǒng)。
大多數(shù)軟件都是由兩部分代碼組成的:少量需要占用大部分執(zhí)行時間的代碼吹害,以及大量不經(jīng)常執(zhí)行的“膠水代碼”螟凭。大部分情況下,膠水代碼的執(zhí)行時間是微不足道的它呀。開發(fā)人員的精力幾乎都是花在優(yōu)化計算瓶頸上面螺男,有時更是直接轉(zhuǎn)用更低級的語言(比如C)。
解決“兩種語言”問題
很多組織通常都會用一種類似于領(lǐng)域特定的計算語言(如SAS和R)對新想法做研究钟些、原型構(gòu)建和測試烟号,然后再將這些想法移植到某個更大的生產(chǎn)系統(tǒng)中去(可能是用Java、C#或C++編寫的)政恍。人們逐漸意識到汪拥,Python不僅適用于研究和原型構(gòu)建,同時也適用于構(gòu)建生產(chǎn)系統(tǒng)篙耗。為什么一種語言就夠了迫筑,卻要使用兩個語言的開發(fā)環(huán)境呢?我相信越來越多的企業(yè)也會這樣看宗弯,因為研究人員和工程技術(shù)人員使用同一種編程工具將會給企業(yè)帶來非常顯著的組織效益脯燃。
為什么不選Python
雖然Python非常適合構(gòu)建分析應(yīng)用以及通用系統(tǒng),但它對不少應(yīng)用場景適用性較差蒙保。
由于Python是一種解釋型編程語言辕棚,因此大部分Python代碼都要比用編譯型語言(比如Java和C++)編寫的代碼運行慢得多。由于程序員的時間通常都比CPU時間值錢,因此許多人也愿意對此做一些取舍逝嚎。但是扁瓢,在那些延遲要求非常小或高資源利用率的應(yīng)用中(例如高頻交易系統(tǒng)),耗費時間使用諸如C++這樣更低級补君、更低生產(chǎn)率的語言進(jìn)行編程也是值得的引几。
對于高并發(fā)、多線程的應(yīng)用程序而言(尤其是擁有許多計算密集型線程的應(yīng)用程序)挽铁,Python并不是一種理想的編程語言伟桅。這是因為Python有一個叫做全局解釋器鎖(Global Interpreter Lock,GIL)的組件叽掘,這是一種防止解釋器同時執(zhí)行多條Python字節(jié)碼指令的機(jī)制楣铁。有關(guān)“為什么會存在GIL”的技術(shù)性原因超出了本書的范圍。雖然很多大數(shù)據(jù)處理應(yīng)用程序為了能在較短的時間內(nèi)完成數(shù)據(jù)集的處理工作都需要運行在計算機(jī)集群上够掠,但是仍然有一些情況需要用單進(jìn)程多線程系統(tǒng)來解決民褂。
這并不是說Python不能執(zhí)行真正的多線程并行代碼。例如疯潭,Python的C插件使用原生的C或C++的多線程,可以并行運行而不被GIL影響面殖,只要它們不頻繁地與Python對象交互竖哩。
1.3 重要的Python庫
考慮到那些還不太了解Python科學(xué)計算生態(tài)系統(tǒng)和庫的讀者,下面我先對各個庫做一個簡單的介紹脊僚。
NumPy
NumPy(Numerical Python的簡稱)是Python科學(xué)計算的基礎(chǔ)包相叁。本書大部分內(nèi)容都基于NumPy以及構(gòu)建于其上的庫。它提供了以下功能(不限于此):
- 快速高效的多維數(shù)組對象ndarray辽幌。
- 用于對數(shù)組執(zhí)行元素級計算以及直接對數(shù)組執(zhí)行數(shù)學(xué)運算的函數(shù)增淹。
- 用于讀寫硬盤上基于數(shù)組的數(shù)據(jù)集的工具。
- 線性代數(shù)運算乌企、傅里葉變換虑润,以及隨機(jī)數(shù)生成。
-成熟的C API加酵, 用于Python插件和原生C拳喻、C++、Fortran代碼訪問NumPy的數(shù)據(jù)結(jié)構(gòu)和計算工具猪腕。
除了為Python提供快速的數(shù)組處理能力冗澈,NumPy在數(shù)據(jù)分析方面還有另外一個主要作用,即作為在算法和庫之間傳遞數(shù)據(jù)的容器陋葡。對于數(shù)值型數(shù)據(jù)亚亲,NumPy數(shù)組在存儲和處理數(shù)據(jù)時要比內(nèi)置的Python數(shù)據(jù)結(jié)構(gòu)高效得多。此外,由低級語言(比如C和Fortran)編寫的庫可以直接操作NumPy數(shù)組中的數(shù)據(jù)捌归,無需進(jìn)行任何數(shù)據(jù)復(fù)制工作肛响。因此,許多Python的數(shù)值計算工具要么使用NumPy數(shù)組作為主要的數(shù)據(jù)結(jié)構(gòu)陨溅,要么可以與NumPy進(jìn)行無縫交互操作终惑。
pandas
pandas提供了快速便捷處理結(jié)構(gòu)化數(shù)據(jù)的大量數(shù)據(jù)結(jié)構(gòu)和函數(shù)。自從2010年出現(xiàn)以來门扇,它助使Python成為強(qiáng)大而高效的數(shù)據(jù)分析環(huán)境雹有。本書用得最多的pandas對象是DataFrame,它是一個面向列(column-oriented)的二維表結(jié)構(gòu)臼寄,另一個是Series霸奕,一個一維的標(biāo)簽化數(shù)組對象。
pandas兼具NumPy高性能的數(shù)組計算功能以及電子表格和關(guān)系型數(shù)據(jù)庫(如SQL)靈活的數(shù)據(jù)處理功能吉拳。它提供了復(fù)雜精細(xì)的索引功能质帅,能更加便捷地完成重塑、切片和切塊留攒、聚合以及選取數(shù)據(jù)子集等操作煤惩。因為數(shù)據(jù)操作、準(zhǔn)備炼邀、清洗是數(shù)據(jù)分析最重要的技能魄揉,pandas是本書的重點。
作為背景拭宁,我是在2008年初開始開發(fā)pandas的洛退,那時我任職于AQR Capital Management,一家量化投資管理公司杰标,我有許多工作需求都不能用任何單一的工具解決:
- 有標(biāo)簽軸的數(shù)據(jù)結(jié)構(gòu)兵怯,支持自動或清晰的數(shù)據(jù)對齊。這可以防止由于數(shù)據(jù)不對齊腔剂,或處理來源不同的索引不同的數(shù)據(jù)媒区,所造成的錯誤。
- 集成時間序列功能桶蝎。
- 相同的數(shù)據(jù)結(jié)構(gòu)用于處理時間序列數(shù)據(jù)和非時間序列數(shù)據(jù)驻仅。
- 保存元數(shù)據(jù)的算術(shù)運算和壓縮。
- 靈活處理缺失數(shù)據(jù)登渣。
- 合并和其它流行數(shù)據(jù)庫(例如基于SQL的數(shù)據(jù)庫)的關(guān)系操作噪服。
我想只用一種工具就實現(xiàn)所有功能,并使用通用軟件開發(fā)語言胜茧。Python是一個不錯的候選語言粘优,但是此時沒有集成的數(shù)據(jù)結(jié)構(gòu)和工具來實現(xiàn)仇味。我一開始就是想把pandas設(shè)計為一款適用于金融和商業(yè)分析的工具,pandas專注于深度時間序列功能和工具雹顺,適用于時間索引化的數(shù)據(jù)丹墨。
對于使用R語言進(jìn)行統(tǒng)計計算的用戶,肯定不會對DataFrame這個名字感到陌生嬉愧,因為它源自于R的data.frame對象贩挣。但與Python不同,data frames是構(gòu)建于R和它的標(biāo)準(zhǔn)庫没酣。因此王财,pandas的許多功能不屬于R或它的擴(kuò)展包。
pandas這個名字源于panel data(面板數(shù)據(jù)裕便,這是多維結(jié)構(gòu)化數(shù)據(jù)集在計量經(jīng)濟(jì)學(xué)中的術(shù)語)以及Python data analysis(Python數(shù)據(jù)分析)绒净。
matplotlib
matplotlib是最流行的用于繪制圖表和其它二維數(shù)據(jù)可視化的Python庫。它最初由John D.Hunter(JDH)創(chuàng)建偿衰,目前由一個龐大的開發(fā)團(tuán)隊維護(hù)挂疆。它非常適合創(chuàng)建出版物上用的圖表。雖然還有其它的Python可視化庫下翎,matplotlib卻是使用最廣泛的缤言,并且它和其它生態(tài)工具配合也非常完美。我認(rèn)為视事,可以使用它作為默認(rèn)的可視化工具墨闲。
IPython和Jupyter
IPython項目起初是Fernando Pérez在2001年的一個用以加強(qiáng)和Python交互的子項目。在隨后的16年中郑口,它成為了Python數(shù)據(jù)棧最重要的工具之一。雖然IPython本身沒有提供計算和數(shù)據(jù)分析的工具盾鳞,它卻可以大大提高交互式計算和軟件開發(fā)的生產(chǎn)率犬性。IPython鼓勵“執(zhí)行-探索”的工作流,區(qū)別于其它編程軟件的“編輯-編譯-運行”的工作流腾仅。它還可以方便地訪問系統(tǒng)的shell和文件系統(tǒng)乒裆。因為大部分的數(shù)據(jù)分析代碼包括探索、試錯和重復(fù)推励,IPython可以使工作更快鹤耍。
2014年,F(xiàn)ernando和IPython團(tuán)隊宣布了Jupyter項目验辞,一個更寬泛的多語言交互計算工具的計劃稿黄。IPython web notebook變成了Jupyter notebook,現(xiàn)在支持40種編程語言跌造。IPython現(xiàn)在可以作為Jupyter使用Python的內(nèi)核(一種編程語言模式)杆怕。
IPython變成了Jupyter龐大開源項目(一個交互和探索式計算的高效環(huán)境)中的一個組件族购。它最老也是最簡單的模式,現(xiàn)在是一個用于編寫陵珍、測試寝杖、調(diào)試Python代碼的強(qiáng)化shell。你還可以使用通過Jupyter Notebook互纯,一個支持多種語言的交互式網(wǎng)絡(luò)代碼“筆記本”瑟幕,來使用IPython。IPython shell 和Jupyter notebooks特別適合進(jìn)行數(shù)據(jù)探索和可視化留潦。
Jupyter notebooks還可以編寫Markdown和HTML內(nèi)容只盹,它提供了一種創(chuàng)建代碼和文本的富文本方法。其它編程語言也在Jupyter中植入了內(nèi)核愤兵,好讓在Jupyter中可以使用Python以外的語言鹿霸。
對我個人而言,我的大部分Python工作都要用到IPython秆乳,包括運行懦鼠、調(diào)試和測試代碼。
在本書的GitHub頁面屹堰,你可以找到包含各章節(jié)所有代碼實例的Jupyter notebooks肛冶。
SciPy
SciPy是一組專門解決科學(xué)計算中各種標(biāo)準(zhǔn)問題域的包的集合,主要包括下面這些包:
- scipy.integrate:數(shù)值積分例程和微分方程求解器扯键。
- scipy.linalg:擴(kuò)展了由numpy.linalg提供的線性代數(shù)例程和矩陣分解功能睦袖。
- scipy.optimize:函數(shù)優(yōu)化器(最小化器)以及根查找算法。
- scipy.signal:信號處理工具荣刑。
- scipy.sparse:稀疏矩陣和稀疏線性系統(tǒng)求解器馅笙。
- scipy.special:SPECFUN(這是一個實現(xiàn)了許多常用數(shù)學(xué)函數(shù)(如伽瑪函數(shù))的Fortran庫)的包裝器。
- scipy.stats:標(biāo)準(zhǔn)連續(xù)和離散概率分布(如密度函數(shù)厉亏、采樣器董习、連續(xù)分布函數(shù)等)、各種統(tǒng)計檢驗方法爱只,以及更好的描述統(tǒng)計法皿淋。
NumPy和SciPy結(jié)合使用,便形成了一個相當(dāng)完備和成熟的計算平臺恬试,可以處理多種傳統(tǒng)的科學(xué)計算問題窝趣。
scikit-learn
2010年誕生以來,scikit-learn成為了Python的通用機(jī)器學(xué)習(xí)工具包训柴。僅僅七年哑舒,就匯聚了全世界超過1500名貢獻(xiàn)者。它的子模塊包括:
- 分類:SVM畦粮、近鄰散址、隨機(jī)森林乖阵、邏輯回歸等等。
- 回歸:Lasso预麸、嶺回歸等等瞪浸。
- 聚類:k-均值、譜聚類等等吏祸。
- 降維:PCA对蒲、特征選擇、矩陣分解等等贡翘。
- 選型:網(wǎng)格搜索蹈矮、交叉驗證、度量鸣驱。
- 預(yù)處理:特征提取泛鸟、標(biāo)準(zhǔn)化。
與pandas踊东、statsmodels和IPython一起北滥,scikit-learn對于Python成為高效數(shù)據(jù)科學(xué)編程語言起到了關(guān)鍵作用。雖然本書不會詳細(xì)講解scikit-learn闸翅,我會簡要介紹它的一些模型再芋,以及用其它工具如何使用這些模型。
statsmodels
statsmodels是一個統(tǒng)計分析包坚冀,起源于斯坦福大學(xué)統(tǒng)計學(xué)教授Jonathan Taylor济赎,他設(shè)計了多種流行于R語言的回歸分析模型。Skipper Seabold和Josef Perktold在2010年正式創(chuàng)建了statsmodels項目记某,隨后匯聚了大量的使用者和貢獻(xiàn)者司训。受到R的公式系統(tǒng)的啟發(fā),Nathaniel Smith發(fā)展出了Patsy項目液南,它提供了statsmodels的公式或模型的規(guī)范框架豁遭。
與scikit-learn比較,statsmodels包含經(jīng)典統(tǒng)計學(xué)和經(jīng)濟(jì)計量學(xué)的算法贺拣。包括如下子模塊:
- 回歸模型:線性回歸,廣義線性模型捂蕴,健壯線性模型譬涡,線性混合效應(yīng)模型等等。
- 方差分析(ANOVA)啥辨。
- 時間序列分析:AR涡匀,ARMA,ARIMA溉知,VAR和其它模型陨瘩。
- 非參數(shù)方法: 核密度估計腕够,核回歸。
- 統(tǒng)計模型結(jié)果可視化舌劳。
statsmodels更關(guān)注與統(tǒng)計推斷帚湘,提供不確定估計和參數(shù)p-值。相反的甚淡,scikit-learn注重預(yù)測大诸。
同scikit-learn一樣,我也只是簡要介紹statsmodels贯卦,以及如何用NumPy和pandas使用它资柔。
1.4 安裝和設(shè)置
由于人們用Python所做的事情不同,所以沒有一個普適的Python及其插件包的安裝方案撵割。由于許多讀者的Python科學(xué)計算環(huán)境都不能完全滿足本書的需要贿堰,所以接下來我將詳細(xì)介紹各個操作系統(tǒng)上的安裝方法。我推薦免費的Anaconda安裝包啡彬。寫作本書時羹与,Anaconda提供Python 2.7和3.6兩個版本,以后可能發(fā)生變化外遇。本書使用的是Python 3.6注簿,因此推薦選擇Python 3.6或更高版本。
Windows
要在Windows上運行跳仿,先下載Anaconda安裝包诡渴。推薦跟隨Anaconda下載頁面的Windows安裝指導(dǎo),安裝指導(dǎo)在寫作本書和讀者看到此文的的這段時間內(nèi)可能發(fā)生變化菲语。
現(xiàn)在妄辩,來確認(rèn)設(shè)置是否正確。打開命令行窗口(cmd.exe
)山上,輸入python
以打開Python解釋器眼耀。可以看到類似下面的Anaconda版本的輸出:
C:\Users\wesm>python
Python 3.5.2 |Anaconda 4.1.1 (64-bit)| (default, Jul 5 2016, 11:41:13)
[MSC v.1900 64 bit (AMD64)] on win32
>>>
要退出shell佩憾,按Ctrl-D(Linux或macOS上)哮伟,Ctrl-Z(Windows上),或輸入命令exit()
妄帘,再按Enter楞黄。
Apple (OS X, macOS)
下載OS X Anaconda安裝包,它的名字類似Anaconda3-4.1.0-MacOSX-x86_64.pkg抡驼。雙擊.pkg文件鬼廓,運行安裝包。安裝包運行時致盟,會自動將Anaconda執(zhí)行路徑添加到.bash_profile
文件碎税,它位于/Users/$USER/.bash_profile
尤慰。
為了確認(rèn)成功,在系統(tǒng)shell打開IPython:
$ ipython
要退出shell雷蹂,按Ctrl-D伟端,或輸入命令exit()
,再按Enter萎河。
GNU/Linux
Linux版本很多荔泳,這里給出Debian、Ubantu虐杯、CentOS和Fedora的安裝方法玛歌。安裝包是一個腳本文件,必須在shell中運行擎椰。取決于系統(tǒng)是32位還是64位支子,要么選擇x86 (32位)或x86_64 (64位)安裝包。隨后你會得到一個文件达舒,名字類似于Anaconda3-4.1.0-Linux-x86_64.sh
值朋。用bash進(jìn)行安裝:
$ bash Anaconda3-4.1.0-Linux-x86_64.sh
筆記:某些Linux版本在包管理器中有滿足需求的Python包,只需用類似apt的工具安裝就行巩搏。這里講的用Anaconda安裝昨登,適用于不同的Linux安裝包,也很容易將包升級到最新版本贯底。
接受許可之后丰辣,會向你詢問在哪里放置Anaconda的文件。我推薦將文件安裝到默認(rèn)的home目錄禽捆,例如/home/$USER/anaconda
笙什。
Anaconda安裝包可能會詢問你是否將bin/
目錄添加到$PATH
變量。如果在安裝之后有任何問題胚想,你可以修改文件.bashrc
(或.zshrc
琐凭,如果使用的是zsh shell)為類似以下的內(nèi)容:
export PATH=/home/$USER/anaconda/bin:$PATH
做完之后,你可以開啟一個新窗口浊服,或再次用~/.bashrc
執(zhí)行.bashrc
统屈。
安裝或升級Python包
在你閱讀本書的時候,你可能想安裝另外的不在Anaconda中的Python包牙躺。通常鸿吆,可以用以下命令安裝:
conda install package_name
如果這個命令不行,也可以用pip包管理工具:
pip install package_name
你可以用conda update
命令升級包:
conda update package_name
pip可以用--upgrade
升級:
pip install --upgrade package_name
本書中述呐,你有許多機(jī)會嘗試這些命令。
注意:當(dāng)你使用conda和pip二者安裝包時蕉毯,千萬不要用pip升級conda的包乓搬,這樣會導(dǎo)致環(huán)境發(fā)生問題思犁。當(dāng)使用Anaconda或Miniconda時,最好首先使用conda進(jìn)行升級进肯。
Python 2 和 Python 3
第一版的Python 3.x出現(xiàn)于2008年激蹲。它有一系列的變化,與之前的Python 2.x代碼有不兼容的地方江掩。因為從1991年P(guān)ython出現(xiàn)算起学辱,已經(jīng)過了17年,Python 3 的出現(xiàn)被視為吸取一些列教訓(xùn)的更優(yōu)結(jié)果环形。
2012年策泣,因為許多包還沒有完全支持Python 3,許多科學(xué)和數(shù)據(jù)分析社區(qū)還是在使用Python 2.x抬吟。因此萨咕,本書第一版使用的是Python 2.7。現(xiàn)在火本,用戶可以在Python 2.x和Python 3.x間自由選擇危队,二者都有良好的支持。
但是钙畔,Python 2.x在2020年就會到期(包括重要的安全補(bǔ)睹B健),因此再用Python 2.7就不是好的選擇了擎析。因此簿盅,本書使用了Python 3.6,這一廣泛使用叔锐、支持良好的穩(wěn)定版本挪鹏。我們已經(jīng)稱Python 2.x為“遺留版本”,簡稱Python 3.x為“Python”愉烙。我建議你也是如此讨盒。
本書基于Python 3.6。你的Python版本也許高于3.6步责,但是示例代碼應(yīng)該是向前兼容的返顺。一些示例代碼可能在Python 2.7上有所不同,或完全不兼容蔓肯。
集成開發(fā)環(huán)境(IDEs)和文本編輯器
當(dāng)被問到我的標(biāo)準(zhǔn)開發(fā)環(huán)境遂鹊,我?guī)缀蹩偸腔卮稹癐Python加文本編輯器”。我通常在編程時蔗包,反復(fù)在IPython或Jupyter notebooks中測試和調(diào)試每條代碼秉扑。也可以交互式操作數(shù)據(jù),和可視化驗證數(shù)據(jù)操作中某一特殊集合。在shell中使用pandas和NumPy也很容易舟陆。
但是误澳,當(dāng)創(chuàng)建軟件時,一些用戶可能更想使用特點更為豐富的IDE秦躯,而不僅僅是原始的Emacs或Vim的文本編輯器鲫忍。以下是一些IDE:
- PyDev(免費)猪勇,基于Eclipse平臺的IDE明棍;
- JetBrains的PyCharm(商業(yè)用戶需要訂閱攒菠,開源開發(fā)者免費);
- Visual Studio(Windows用戶)的Python Tools茎活;
- Spyder(免費)昙沦,Anaconda附帶的IDE;
- Komodo IDE(商業(yè))妙色。
因為Python的流行桅滋,大多數(shù)文本編輯器,比如Atom和Sublime Text 3身辨,對Python的支持也非常好丐谋。
1.5 社區(qū)和會議
除了在網(wǎng)上搜索,各式各樣的科學(xué)和數(shù)據(jù)相關(guān)的Python郵件列表是非常有幫助的煌珊,很容易獲得回答号俐。包括:
- pydata:一個Google群組列表,用以回答Python數(shù)據(jù)分析和pandas的問題定庵;
- pystatsmodels: statsmodels或pandas相關(guān)的問題吏饿;
- scikit-learn和Python機(jī)器學(xué)習(xí)郵件列表,scikit-learn@python.org蔬浙;
- numpy-discussion:和NumPy相關(guān)的問題猪落;
- scipy-user:SciPy和科學(xué)計算的問題;
因為這些郵件列表的URLs可以很容易搜索到畴博,但因為可能發(fā)生變化笨忌,所以沒有給出。
每年俱病,世界各地會舉辦許多Python開發(fā)者大會官疲。如果你想結(jié)識其他有相同興趣的人,如果可能的話亮隙,我建議你去參加一個途凫。許多會議會對無力支付入場費和差旅費的人提供財力幫助。下面是一些會議:
- PyCon和EuroPython:北美和歐洲的兩大Python會議溢吻;
- SciPy和EuroSciPy:北美和歐洲兩大面向科學(xué)計算的會議维费;
- PyData:世界范圍內(nèi),一些列的地區(qū)性會議,專注數(shù)據(jù)科學(xué)和數(shù)據(jù)分析犀盟;
- 國際和地區(qū)的PyCon會議(http://pycon.org有完整列表) 噪漾。
1.6 本書導(dǎo)航
如果之前從未使用過Python,那你可能需要先看看本書的第2章和第3章且蓬,我簡要介紹了Python的特點,IPython和Jupyter notebooks题翰。這些知識是為本書后面的內(nèi)容做鋪墊恶阴。如果你已經(jīng)掌握Python,可以選擇跳過豹障。
接下來冯事,簡單地介紹了NumPy的關(guān)鍵特性,附錄A中是更高級的NumPy功能血公。然后昵仅,我介紹了pandas,本書剩余的內(nèi)容全部是使用pandas累魔、NumPy和matplotlib處理數(shù)據(jù)分析的問題摔笤。我已經(jīng)盡量讓全書的結(jié)構(gòu)循序漸進(jìn),但偶爾會有章節(jié)之間的交叉垦写,有時用到的概念還沒有介紹過吕世。
盡管讀者各自的工作任務(wù)不同,大體可以分為幾類:
- 與外部世界交互
閱讀編寫多種文件格式和數(shù)據(jù)存儲梯投; - 數(shù)據(jù)準(zhǔn)備
清洗命辖、修改、結(jié)合分蓖、標(biāo)準(zhǔn)化尔艇、重塑、切片么鹤、切割终娃、轉(zhuǎn)換數(shù)據(jù),以進(jìn)行分析午磁; - 轉(zhuǎn)換數(shù)據(jù)
對舊的數(shù)據(jù)集進(jìn)行數(shù)學(xué)和統(tǒng)計操作尝抖,生成新的數(shù)據(jù)集(例如,通過各組變量聚類成大的表)迅皇; - 建模和計算
將數(shù)據(jù)綁定統(tǒng)計模型昧辽、機(jī)器學(xué)習(xí)算法、或其他計算工具登颓; - 展示
創(chuàng)建交互式和靜態(tài)的圖表可視化和文本總結(jié)搅荞。
代碼示例
本書大部分代碼示例的輸入形式和輸出結(jié)果都會按照其在IPython shell或Jupyter notebooks中執(zhí)行時的樣子進(jìn)行排版:
In [5]: CODE EXAMPLE
Out[5]: OUTPUT
但你看到類似的示例代碼,就是讓你在in
的部分輸入代碼,按Enter鍵執(zhí)行(Jupyter中是按Shift-Enter)咕痛。然后就可以在out
看到輸出痢甘。
示例數(shù)據(jù)
各章的示例數(shù)據(jù)都存放在GitHub上:http://github.com/pydata/pydata-book。下載這些數(shù)據(jù)的方法有二:使用git版本控制命令行程序茉贡;直接從網(wǎng)站上下載該GitHub庫的zip文件塞栅。如果遇到了問題,可以到我的個人主頁腔丧,http://wesmckinney.com/放椰,獲取最新的指導(dǎo)。
為了讓所有示例都能重現(xiàn)愉粤,我已經(jīng)盡我所能使其包含所有必需的東西砾医,但仍然可能會有一些錯誤或遺漏。如果出現(xiàn)這種情況的話衣厘,請給我發(fā)郵件:wesmckinn@gmail.com如蚜。報告本書錯誤的最好方法是O’Reilly的errata頁面,http://www.bit.ly/pyDataAnalysis_errata影暴。
引入慣例
Python社區(qū)已經(jīng)廣泛采取了一些常用模塊的命名慣例:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import statsmodels as sm
也就是說错邦,當(dāng)你看到np.arange時,就應(yīng)該想到它引用的是NumPy中的arange函數(shù)坤检。這樣做的原因是:在Python軟件開發(fā)過程中兴猩,不建議直接引入類似NumPy這種大型庫的全部內(nèi)容(from numpy import *)。
行話
由于你可能不太熟悉書中使用的一些有關(guān)編程和數(shù)據(jù)科學(xué)方面的常用術(shù)語早歇,所以我在這里先給出其簡單定義:
數(shù)據(jù)規(guī)整(Munge/Munging/Wrangling)
指的是將非結(jié)構(gòu)化和(或)散亂數(shù)據(jù)處理為結(jié)構(gòu)化或整潔形式的整個過程倾芝。這幾個詞已經(jīng)悄悄成為當(dāng)今數(shù)據(jù)黑客們的行話了。Munge這個詞跟Lunge押韻箭跳。
偽代碼(Pseudocode)
算法或過程的“代碼式”描述晨另,而這些代碼本身并不是實際有效的源代碼。
語法糖(Syntactic sugar)
這是一種編程語法谱姓,它并不會帶來新的特性借尿,但卻能使代碼更易讀、更易寫屉来。
第1章 準(zhǔn)備工作
第2章 Python語法基礎(chǔ)路翻,IPython和Jupyter Notebooks
第3章 Python的數(shù)據(jù)結(jié)構(gòu)、函數(shù)和文件
第4章 NumPy基礎(chǔ):數(shù)組和矢量計算
第5章 pandas入門
第6章 數(shù)據(jù)加載茄靠、存儲與文件格式
第7章 數(shù)據(jù)清洗和準(zhǔn)備
第8章 數(shù)據(jù)規(guī)整:聚合茂契、合并和重塑
第9章 繪圖和可視化
第10章 數(shù)據(jù)聚合與分組運算
第11章 時間序列
第12章 pandas高級應(yīng)用
第13章 Python建模庫介紹
第14章 數(shù)據(jù)分析案例
附錄A NumPy高級應(yīng)用
附錄B 更多關(guān)于IPython的內(nèi)容(完)