第1章 準(zhǔn)備工作
1.1 本書的內(nèi)容
本書講的是利用Python進(jìn)行數(shù)據(jù)控制仪糖、處理、整理矾柜、分析等方面的具體細(xì)節(jié)和基本要點(diǎn)伏穆。我的目標(biāo)是介紹Python編程和用于數(shù)據(jù)處理的庫和工具環(huán)境,掌握這些恨统,可以讓你成為一個(gè)數(shù)據(jù)分析專家叁扫。雖然本書的標(biāo)題是“數(shù)據(jù)分析”三妈,重點(diǎn)卻是Python編程、庫莫绣,以及用于數(shù)據(jù)分析的工具畴蒲。這就是數(shù)據(jù)分析要用到的Python編程。
什么樣的數(shù)據(jù)对室?
當(dāng)書中出現(xiàn)“數(shù)據(jù)”時(shí)模燥,究竟指的是什么呢?主要指的是結(jié)構(gòu)化數(shù)據(jù)(structured data)软驰,這個(gè)故意含糊其辭的術(shù)語代指了所有通用格式的數(shù)據(jù)涧窒,例如:
- 表格型數(shù)據(jù),其中各列可能是不同的類型(字符串锭亏、數(shù)值纠吴、日期等)。比如保存在關(guān)系型數(shù)據(jù)庫中或以制表1符/逗號(hào)為分隔符的文本文件中的那些數(shù)據(jù)慧瘤。
- 多維數(shù)組(矩陣)戴已。
- 通過關(guān)鍵列(對(duì)于SQL用戶而言,就是主鍵和外鍵)相互聯(lián)系的多個(gè)表锅减。
- 間隔平均或不平均的時(shí)間序列糖儡。
這絕不是一個(gè)完整的列表。大部分?jǐn)?shù)據(jù)集都能被轉(zhuǎn)化為更加適合分析和建模的結(jié)構(gòu)化形式怔匣,雖然有時(shí)這并不是很明顯握联。如果不行的話,也可以將數(shù)據(jù)集的特征提取為某種結(jié)構(gòu)化形式每瞒。例如金闽,一組新聞文章可以被處理為一張?jiān)~頻表,而這張?jiān)~頻表就可以用于情感分析剿骨。
大部分電子表格軟件(比如Microsoft Excel代芜,它可能是世界上使用最廣泛的數(shù)據(jù)分析工具了)的用戶不會(huì)對(duì)此類數(shù)據(jù)感到陌生。
1.2 為什么要使用Python進(jìn)行數(shù)據(jù)分析
許許多多的人(包括我自己)都很容易愛上Python這門語言浓利。自從1991年誕生以來挤庇,Python現(xiàn)在已經(jīng)成為最受歡迎的動(dòng)態(tài)編程語言之一,其他還有Perl贷掖、Ruby等嫡秕。由于擁有大量的Web框架(比如Rails(Ruby)和Django(Python)),自從2005年苹威,使用Python和Ruby進(jìn)行網(wǎng)站建設(shè)工作非常流行淘菩。這些語言常被稱作腳本(scripting)語言,因?yàn)樗鼈兛梢杂糜诰帉懞喍潭植诘男〕绦颍ㄒ簿褪悄_本)。我個(gè)人并不喜歡“腳本語言”這個(gè)術(shù)語潮改,因?yàn)樗孟裨谡f這些語言無法用于構(gòu)建嚴(yán)謹(jǐn)?shù)能浖林!T诒姸嘟忉屝驼Z言中,由于各種歷史和文化的原因汇在,Python發(fā)展出了一個(gè)巨大而活躍的科學(xué)計(jì)算(scientific computing)社區(qū)翰萨。在過去的10年,Python從一個(gè)邊緣或“自擔(dān)風(fēng)險(xiǎn)”的科學(xué)計(jì)算語言糕殉,成為了數(shù)據(jù)科學(xué)亩鬼、機(jī)器學(xué)習(xí)、學(xué)界和工業(yè)界軟件開發(fā)最重要的語言之一阿蝶。
在數(shù)據(jù)分析雳锋、交互式計(jì)算以及數(shù)據(jù)可視化方面,Python將不可避免地與其他開源和商業(yè)的領(lǐng)域特定編程語言/工具進(jìn)行對(duì)比羡洁,如R玷过、MATLAB、SAS筑煮、Stata等辛蚊。近年來,由于Python的庫(例如pandas和scikit-learn)不斷改良真仲,使其成為數(shù)據(jù)分析任務(wù)的一個(gè)優(yōu)選方案袋马。結(jié)合其在通用編程方面的強(qiáng)大實(shí)力,我們完全可以只使用Python這一種語言構(gòu)建以數(shù)據(jù)為中心的應(yīng)用秸应。
Python作為膠水語言
Python成為成功的科學(xué)計(jì)算工具的部分原因是虑凛,它能夠輕松地集成C、C++以及Fortran代碼软啼。大部分現(xiàn)代計(jì)算環(huán)境都利用了一些Fortran和C庫來實(shí)現(xiàn)線性代數(shù)桑谍、優(yōu)選、積分焰宣、快速傅里葉變換以及其他諸如此類的算法霉囚。許多企業(yè)和國家實(shí)驗(yàn)室也利用Python來“粘合”那些已經(jīng)用了多年的遺留軟件系統(tǒng)捕仔。
大多數(shù)軟件都是由兩部分代碼組成的:少量需要占用大部分執(zhí)行時(shí)間的代碼匕积,以及大量不經(jīng)常執(zhí)行的“膠水代碼”。大部分情況下榜跌,膠水代碼的執(zhí)行時(shí)間是微不足道的闪唆。開發(fā)人員的精力幾乎都是花在優(yōu)化計(jì)算瓶頸上面,有時(shí)更是直接轉(zhuǎn)用更低級(jí)的語言(比如C)钓葫。
解決“兩種語言”問題
很多組織通常都會(huì)用一種類似于領(lǐng)域特定的計(jì)算語言(如SAS和R)對(duì)新想法做研究悄蕾、原型構(gòu)建和測試,然后再將這些想法移植到某個(gè)更大的生產(chǎn)系統(tǒng)中去(可能是用Java、C#或C++編寫的)帆调。人們逐漸意識(shí)到奠骄,Python不僅適用于研究和原型構(gòu)建,同時(shí)也適用于構(gòu)建生產(chǎn)系統(tǒng)番刊。為什么一種語言就夠了含鳞,卻要使用兩個(gè)語言的開發(fā)環(huán)境呢?我相信越來越多的企業(yè)也會(huì)這樣看芹务,因?yàn)檠芯咳藛T和工程技術(shù)人員使用同一種編程工具將會(huì)給企業(yè)帶來非常顯著的組織效益蝉绷。
為什么不選Python
雖然Python非常適合構(gòu)建分析應(yīng)用以及通用系統(tǒng),但它對(duì)不少應(yīng)用場景適用性較差枣抱。
由于Python是一種解釋型編程語言熔吗,因此大部分Python代碼都要比用編譯型語言(比如Java和C++)編寫的代碼運(yùn)行慢得多。由于程序員的時(shí)間通常都比CPU時(shí)間值錢佳晶,因此許多人也愿意對(duì)此做一些取舍桅狠。但是,在那些延遲要求非常小或高資源利用率的應(yīng)用中(例如高頻交易系統(tǒng))宵晚,耗費(fèi)時(shí)間使用諸如C++這樣更低級(jí)垂攘、更低生產(chǎn)率的語言進(jìn)行編程也是值得的。
對(duì)于高并發(fā)淤刃、多線程的應(yīng)用程序而言(尤其是擁有許多計(jì)算密集型線程的應(yīng)用程序)晒他,Python并不是一種理想的編程語言。這是因?yàn)镻ython有一個(gè)叫做全局解釋器鎖(Global Interpreter Lock逸贾,GIL)的組件陨仅,這是一種防止解釋器同時(shí)執(zhí)行多條Python字節(jié)碼指令的機(jī)制。有關(guān)“為什么會(huì)存在GIL”的技術(shù)性原因超出了本書的范圍铝侵。雖然很多大數(shù)據(jù)處理應(yīng)用程序?yàn)榱四茉谳^短的時(shí)間內(nèi)完成數(shù)據(jù)集的處理工作都需要運(yùn)行在計(jì)算機(jī)集群上灼伤,但是仍然有一些情況需要用單進(jìn)程多線程系統(tǒng)來解決。
這并不是說Python不能執(zhí)行真正的多線程并行代碼咪鲜。例如狐赡,Python的C插件使用原生的C或C++的多線程,可以并行運(yùn)行而不被GIL影響疟丙,只要它們不頻繁地與Python對(duì)象交互颖侄。
1.3 重要的Python庫
考慮到那些還不太了解Python科學(xué)計(jì)算生態(tài)系統(tǒng)和庫的讀者,下面我先對(duì)各個(gè)庫做一個(gè)簡單的介紹享郊。
NumPy NumPy(Numerical Python的簡稱)是Python科學(xué)計(jì)算的基礎(chǔ)包览祖。本書大部分內(nèi)容都基于NumPy以及構(gòu)建于其上的庫。它提供了以下功能(不限于此):
? 快速高效的多維數(shù)組對(duì)象ndarray炊琉。
? 用于對(duì)數(shù)組執(zhí)行元素級(jí)計(jì)算以及直接對(duì)數(shù)組執(zhí)行數(shù)學(xué)運(yùn)算的函數(shù)展蒂。
? 用于讀寫硬盤上基于數(shù)組的數(shù)據(jù)集的工具。
? 線性代數(shù)運(yùn)算、傅里葉變換锰悼,以及隨機(jī)數(shù)生成柳骄。
-成熟的C API, 用于Python插件和原生C箕般、C++夹界、Fortran代碼訪問NumPy的數(shù)據(jù)結(jié)構(gòu)和計(jì)算工具。
除了為Python提供快速的數(shù)組處理能力隘世,NumPy在數(shù)據(jù)分析方面還有另外一個(gè)主要作用可柿,即作為在算法和庫之間傳遞數(shù)據(jù)的容器。對(duì)于數(shù)值型數(shù)據(jù)丙者,NumPy數(shù)組在存儲(chǔ)和處理數(shù)據(jù)時(shí)要比內(nèi)置的Python數(shù)據(jù)結(jié)構(gòu)高效得多复斥。此外,由低級(jí)語言(比如C和Fortran)編寫的庫可以直接操作NumPy數(shù)組中的數(shù)據(jù)械媒,無需進(jìn)行任何數(shù)據(jù)復(fù)制工作目锭。因此,許多Python的數(shù)值計(jì)算工具要么使用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對(duì)象是DataFrame,它是一個(gè)面向列(column-oriented)的二維表結(jié)構(gòu)糜值,另一個(gè)是Series丰捷,一個(gè)一維的標(biāo)簽化數(shù)組對(duì)象。
pandas兼具NumPy高性能的數(shù)組計(jì)算功能以及電子表格和關(guān)系型數(shù)據(jù)庫(如SQL)靈活的數(shù)據(jù)處理功能寂汇。它提供了復(fù)雜精細(xì)的索引功能病往,能更加便捷地完成重塑、切片和切塊骄瓣、聚合以及選取數(shù)據(jù)子集等操作停巷。因?yàn)閿?shù)據(jù)操作、準(zhǔn)備榕栏、清洗是數(shù)據(jù)分析最重要的技能畔勤,pandas是本書的重點(diǎn)。
作為背景臼膏,我是在2008年初開始開發(fā)pandas的硼被,那時(shí)我任職于AQR Capital Management示损,一家量化投資管理公司渗磅,我有許多工作需求都不能用任何單一的工具解決:
- 有標(biāo)簽軸的數(shù)據(jù)結(jié)構(gòu),支持自動(dòng)或清晰的數(shù)據(jù)對(duì)齊。這可以防止由于數(shù)據(jù)不對(duì)齊始鱼,或處理來源不同的索引不同的數(shù)據(jù)仔掸,所造成的錯(cuò)誤。
- 集成時(shí)間序列功能医清。
- 相同的數(shù)據(jù)結(jié)構(gòu)用于處理時(shí)間序列數(shù)據(jù)和非時(shí)間序列數(shù)據(jù)起暮。
- 保存元數(shù)據(jù)的算術(shù)運(yùn)算和壓縮。
- 靈活處理缺失數(shù)據(jù)会烙。
- 合并和其它流行數(shù)據(jù)庫(例如基于SQL的數(shù)據(jù)庫)的關(guān)系操作负懦。
我想只用一種工具就實(shí)現(xiàn)所有功能,并使用通用軟件開發(fā)語言柏腻。Python是一個(gè)不錯(cuò)的候選語言纸厉,但是此時(shí)沒有集成的數(shù)據(jù)結(jié)構(gòu)和工具來實(shí)現(xiàn)。我一開始就是想把pandas設(shè)計(jì)為一款適用于金融和商業(yè)分析的工具五嫂,pandas專注于深度時(shí)間序列功能和工具颗品,適用于時(shí)間索引化的數(shù)據(jù)。
對(duì)于使用R語言進(jìn)行統(tǒng)計(jì)計(jì)算的用戶沃缘,肯定不會(huì)對(duì)DataFrame這個(gè)名字感到陌生躯枢,因?yàn)樗醋杂赗的data.frame對(duì)象。但與Python不同槐臀,data frames是構(gòu)建于R和它的標(biāo)準(zhǔn)庫锄蹂。因此,pandas的許多功能不屬于R或它的擴(kuò)展包水慨。
pandas這個(gè)名字源于panel data(面板數(shù)據(jù)败匹,這是多維結(jié)構(gòu)化數(shù)據(jù)集在計(jì)量經(jīng)濟(jì)學(xué)中的術(shù)語)以及Python data analysis(Python數(shù)據(jù)分析)。
matplotlib
matplotlib是最流行的用于繪制圖表和其它二維數(shù)據(jù)可視化的Python庫讥巡。它最初由John D.Hunter(JDH)創(chuàng)建掀亩,目前由一個(gè)龐大的開發(fā)團(tuán)隊(duì)維護(hù)。它非常適合創(chuàng)建出版物上用的圖表欢顷。雖然還有其它的Python可視化庫槽棍,matplotlib卻是使用最廣泛的,并且它和其它生態(tài)工具配合也非常完美抬驴。我認(rèn)為炼七,可以使用它作為默認(rèn)的可視化工具。
IPython和Jupyter
IPython成為了Python數(shù)據(jù)棧最重要的工具之一布持。雖然IPython本身沒有提供計(jì)算和數(shù)據(jù)分析的工具豌拙,它卻可以大大提高交互式計(jì)算和軟件開發(fā)的生產(chǎn)率。IPython鼓勵(lì)“執(zhí)行-探索”的工作流题暖,區(qū)別于其它編程軟件的“編輯-編譯-運(yùn)行”的工作流按傅。它還可以方便地訪問系統(tǒng)的shell和文件系統(tǒng)捉超。因?yàn)榇蟛糠值臄?shù)據(jù)分析代碼包括探索、試錯(cuò)和重復(fù)唯绍,IPython可以使工作更快拼岳。
2014年,F(xiàn)ernando和IPython團(tuán)隊(duì)宣布了Jupyter項(xiàng)目况芒,一個(gè)更寬泛的多語言交互計(jì)算工具的計(jì)劃惜纸。IPython web notebook變成了Jupyter notebook,現(xiàn)在支持40種編程語言绝骚。IPython現(xiàn)在可以作為Jupyter使用Python的內(nèi)核(一種編程語言模式)耐版。
IPython變成了Jupyter龐大開源項(xiàng)目(一個(gè)交互和探索式計(jì)算的高效環(huán)境)中的一個(gè)組件。它最老也是最簡單的模式压汪,現(xiàn)在是一個(gè)用于編寫椭更、測試、調(diào)試Python代碼的強(qiáng)化shell蛾魄。你還可以使用通過Jupyter Notebook虑瀑,一個(gè)支持多種語言的交互式網(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以外的語言。
對(duì)我個(gè)人而言魔市,我的大部分Python工作都要用到IPython主届,包括運(yùn)行、調(diào)試和測試代碼待德。
在本書的GitHub頁面君丁,你可以找到包含各章節(jié)所有代碼實(shí)例的Jupyter notebooks。
SciPy
? scipy.integrate:數(shù)值積分例程和微分方程求解器将宪。
? scipy.linalg:擴(kuò)展了由numpy.linalg提供的線性代數(shù)例程和矩陣分解功能绘闷。
? scipy.optimize:函數(shù)優(yōu)化器(最小化器)以及根查找算法。
? scipy.signal:信號(hào)處理工具较坛。
? scipy.sparse:稀疏矩陣和稀疏線性系統(tǒng)求解器印蔗。
? scipy.special:SPECFUN(這是一個(gè)實(shí)現(xiàn)了許多常用數(shù)學(xué)函數(shù)(如伽瑪函數(shù))的Fortran庫)的包裝器。
? scipy.stats:標(biāo)準(zhǔn)連續(xù)和離散概率分布(如密度函數(shù)丑勤、采樣器华嘹、連續(xù)分布函數(shù)等)、各種統(tǒng)計(jì)檢驗(yàn)方法法竞,以及更好的描述統(tǒng)計(jì)法耙厚。
NumPy和SciPy結(jié)合使用强挫,便形成了一個(gè)相當(dāng)完備和成熟的計(jì)算平臺(tái),可以處理多種傳統(tǒng)的科學(xué)計(jì)算問題颜曾。
scikit-learn
2010年誕生以來,scikit-learn成為了Python的通用機(jī)器學(xué)習(xí)工具包秉剑。僅僅七年泛豪,就匯聚了全世界超過1500名貢獻(xiàn)者。它的子模塊包括:
? 分類:SVM侦鹏、近鄰诡曙、隨機(jī)森林、邏輯回歸等等略水。
? 回歸:Lasso价卤、嶺回歸等等。
? 聚類:k-均值渊涝、譜聚類等等慎璧。
? 降維:PCA、特征選擇跨释、矩陣分解等等胸私。
? 選型:網(wǎng)格搜索、交叉驗(yàn)證鳖谈、度量岁疼。
? 預(yù)處理:特征提取、標(biāo)準(zhǔn)化缆娃。
與pandas捷绒、statsmodels和IPython一起,scikit-learn對(duì)于Python成為高效數(shù)據(jù)科學(xué)編程語言起到了關(guān)鍵作用贯要。雖然本書不會(huì)詳細(xì)講解scikit-learn暖侨,我會(huì)簡要介紹它的一些模型,以及用其它工具如何使用這些模型崇渗。
statsmodels
statsmodels是一個(gè)統(tǒng)計(jì)分析包它碎,起源于斯坦福大學(xué)統(tǒng)計(jì)學(xué)教授Jonathan Taylor,他設(shè)計(jì)了多種流行于R語言的回歸分析模型显押。Skipper Seabold和Josef Perktold在2010年正式創(chuàng)建了statsmodels項(xiàng)目扳肛,隨后匯聚了大量的使用者和貢獻(xiàn)者。受到R的公式系統(tǒng)的啟發(fā)乘碑,Nathaniel Smith發(fā)展出了Patsy項(xiàng)目挖息,它提供了statsmodels的公式或模型的規(guī)范框架。
與scikit-learn比較兽肤,statsmodels包含經(jīng)典統(tǒng)計(jì)學(xué)和經(jīng)濟(jì)計(jì)量學(xué)的算法套腹。包括如下子模塊:
? 回歸模型:線性回歸绪抛,廣義線性模型,健壯線性模型电禀,線性混合效應(yīng)模型等等幢码。
? 方差分析(ANOVA)耗跛。
? 時(shí)間序列分析:AR芒率,ARMA,ARIMA阵子,VAR和其它模型政基。
? 非參數(shù)方法: 核密度估計(jì)贞铣,核回歸。
? 統(tǒng)計(jì)模型結(jié)果可視化沮明。
statsmodels更關(guān)注與統(tǒng)計(jì)推斷辕坝,提供不確定估計(jì)和參數(shù)p-值。相反的荐健,scikit-learn注重預(yù)測酱畅。
同scikit-learn一樣,我也只是簡要介紹statsmodels江场,以及如何用NumPy和pandas使用它圣贸。
1.4 安裝和設(shè)置
由于人們用Python所做的事情不同,所以沒有一個(gè)普適的Python及其插件包的安裝方案扛稽。由于許多讀者的Python科學(xué)計(jì)算環(huán)境都不能完全滿足本書的需要吁峻,所以接下來我將詳細(xì)介紹各個(gè)操作系統(tǒng)上的安裝方法。我推薦免費(fèi)的Anaconda安裝包在张。
寫作本書時(shí)用含,Anaconda提供Python 2.7和3.6兩個(gè)版本,以后可能發(fā)生變化帮匾。本書使用的是Python 3.6啄骇,因此推薦選擇Python 3.6或更高版本。
安裝或升級(jí)Python包
在你閱讀本書的時(shí)候瘟斜,你可能想安裝另外的不在Anaconda中的Python包缸夹。通常,可以用以下命令安裝:
conda install package_name
如果這個(gè)命令不行螺句,也可以用pip包管理工具:
pip install package_name
你可以用conda update命令升級(jí)包:
conda update package_name
pip可以用--upgrade升級(jí):
pip install --upgrade package_name
本書中虽惭,你有許多機(jī)會(huì)嘗試這些命令。
注意:當(dāng)你使用conda和pip二者安裝包時(shí)蛇尚,千萬不要用pip升級(jí)conda的包芽唇,這樣會(huì)導(dǎo)致環(huán)境發(fā)生問題。當(dāng)使用Anaconda或Miniconda時(shí)取劫,最好首先使用conda進(jìn)行升級(jí)匆笤。
集成開發(fā)環(huán)境(IDEs)和文本編輯器
當(dāng)被問到我的標(biāo)準(zhǔn)開發(fā)環(huán)境研侣,我?guī)缀蹩偸腔卮稹癐Python加文本編輯器”。我通常在編程時(shí)炮捧,反復(fù)在IPython或Jupyter notebooks中測試和調(diào)試每條代碼庶诡。也可以交互式操作數(shù)據(jù),和可視化驗(yàn)證數(shù)據(jù)操作中某一特殊集合咆课。在shell中使用pandas和NumPy也很容易末誓。
但是,當(dāng)創(chuàng)建軟件時(shí)傀蚌,一些用戶可能更想使用特點(diǎn)更為豐富的IDE基显,而不僅僅是原始的Emacs或Vim的文本編輯器蘸吓。以下是一些IDE:
? PyDev(免費(fèi))善炫,基于Eclipse平臺(tái)的IDE;
? JetBrains的PyCharm(商業(yè)用戶需要訂閱库继,開源開發(fā)者免費(fèi))箩艺;
? Visual Studio(Windows用戶)的Python Tools;
? Spyder(免費(fèi))宪萄,Anaconda附帶的IDE艺谆;
? Komodo IDE(商業(yè))。
1.5 社區(qū)和會(huì)議
除了在網(wǎng)上搜索拜英,各式各樣的科學(xué)和數(shù)據(jù)相關(guān)的Python郵件列表是非常有幫助的静汤,很容易獲得回答。包括:
? pydata:一個(gè)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é)計(jì)算的問題
1.6 本書導(dǎo)航
如果之前從未使用過Python弄兜,那你可能需要先看看本書的第2章和第3章药蜻,我簡要介紹了Python的特點(diǎn),IPython和Jupyter notebooks替饿。這些知識(shí)是為本書后面的內(nèi)容做鋪墊语泽。如果你已經(jīng)掌握Python,可以選擇跳過视卢。
接下來湿弦,簡單地介紹了NumPy的關(guān)鍵特性,附錄A中是更高級(jí)的NumPy功能腾夯。然后颊埃,我介紹了pandas蔬充,本書剩余的內(nèi)容全部是使用pandas、NumPy和matplotlib處理數(shù)據(jù)分析的問題班利。我已經(jīng)盡量讓全書的結(jié)構(gòu)循序漸進(jìn)饥漫,但偶爾會(huì)有章節(jié)之間的交叉,有時(shí)用到的概念還沒有介紹過罗标。
盡管讀者各自的工作任務(wù)不同庸队,大體可以分為幾類:
與外部世界交互
閱讀編寫多種文件格式和數(shù)據(jù)存儲(chǔ);數(shù)據(jù)準(zhǔn)備
清洗闯割、修改彻消、結(jié)合、標(biāo)準(zhǔn)化宙拉、重塑宾尚、切片、切割谢澈、轉(zhuǎn)換數(shù)據(jù)煌贴,以進(jìn)行分析;轉(zhuǎn)換數(shù)據(jù)
對(duì)舊的數(shù)據(jù)集進(jìn)行數(shù)學(xué)和統(tǒng)計(jì)操作锥忿,生成新的數(shù)據(jù)集(例如牛郑,通過各組變量聚類成大的表);建模和計(jì)算
將數(shù)據(jù)綁定統(tǒng)計(jì)模型敬鬓、機(jī)器學(xué)習(xí)算法淹朋、或其他計(jì)算工具;展示
創(chuàng)建交互式和靜態(tài)的圖表可視化和文本總結(jié)钉答。
代碼示例
本書大部分代碼示例的輸入形式和輸出結(jié)果都會(huì)按照其在IPython shell或Jupyter notebooks中執(zhí)行時(shí)的樣子進(jìn)行排版:
In [5]: CODE EXAMPLE
Out[5]: OUTPUT
但你看到類似的示例代碼础芍,就是讓你在in的部分輸入代碼,按Enter鍵執(zhí)行(Jupyter中是按Shift-Enter)希痴。然后就可以在out看到輸出者甲。
示例數(shù)據(jù)
略
引入慣例
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