利用Python進(jìn)行數(shù)據(jù)分析

《利用Python進(jìn)行數(shù)據(jù)分析》(第二版)

鏈接:https://pan.baidu.com/s/198oEqR0VetgKOD3B_X9B8g?pwd=2vak

提取碼:2vak

1.1 本書(shū)的內(nèi)容

本書(shū)講的是利用Python進(jìn)行數(shù)據(jù)控制近刘、處理凛忿、整理、分析等方面的具體細(xì)節(jié)和基本要點(diǎn)。我的目標(biāo)是介紹Python編程和用于數(shù)據(jù)處理的庫(kù)和工具環(huán)境誉碴,掌握這些奶是,可以讓你成為一個(gè)數(shù)據(jù)分析專(zhuān)家链嘀。雖然本書(shū)的標(biāo)題是“數(shù)據(jù)分析”晨另,重點(diǎn)卻是Python編程、庫(kù)穿扳,以及用于數(shù)據(jù)分析的工具衩侥。這就是數(shù)據(jù)分析要用到的Python編程。

什么樣的數(shù)據(jù)矛物?

當(dāng)書(shū)中出現(xiàn)“數(shù)據(jù)”時(shí)茫死,究竟指的是什么呢?主要指的是結(jié)構(gòu)化數(shù)據(jù)(structured data)履羞,這個(gè)故意含糊其辭的術(shù)語(yǔ)代指了所有通用格式的數(shù)據(jù)峦萎,例如:

表格型數(shù)據(jù)屡久,其中各列可能是不同的類(lèi)型(字符串、數(shù)值爱榔、日期等)被环。比如保存在關(guān)系型數(shù)據(jù)庫(kù)中或以制表符/逗號(hào)為分隔符的文本文件中的那些數(shù)據(jù)。

多維數(shù)組(矩陣)详幽。

通過(guò)關(guān)鍵列(對(duì)于SQL用戶(hù)而言筛欢,就是主鍵和外鍵)相互聯(lián)系的多個(gè)表。

間隔平均或不平均的時(shí)間序列唇聘。

這絕不是一個(gè)完整的列表版姑。大部分?jǐn)?shù)據(jù)集都能被轉(zhuǎn)化為更加適合分析和建模的結(jié)構(gòu)化形式,雖然有時(shí)這并不是很明顯迟郎。如果不行的話(huà)剥险,也可以將數(shù)據(jù)集的特征提取為某種結(jié)構(gòu)化形式。例如宪肖,一組新聞文章可以被處理為一張?jiān)~頻表表制,而這張?jiān)~頻表就可以用于情感分析。

大部分電子表格軟件(比如Microsoft Excel匈庭,它可能是世界上使用最廣泛的數(shù)據(jù)分析工具了)的用戶(hù)不會(huì)對(duì)此類(lèi)數(shù)據(jù)感到陌生夫凸。

1.2 為什么要使用Python進(jìn)行數(shù)據(jù)分析

許許多多的人(包括我自己)都很容易愛(ài)上Python這門(mén)語(yǔ)言。自從1991年誕生以來(lái)阱持,Python現(xiàn)在已經(jīng)成為最受歡迎的動(dòng)態(tài)編程語(yǔ)言之一,其他還有Perl魔熏、Ruby等衷咽。由于擁有大量的Web框架(比如Rails(Ruby)和Django(Python)),自從2005年蒜绽,使用Python和Ruby進(jìn)行網(wǎng)站建設(shè)工作非常流行镶骗。這些語(yǔ)言常被稱(chēng)作腳本(scripting)語(yǔ)言,因?yàn)樗鼈兛梢杂糜诰帉?xiě)簡(jiǎn)短而粗糙的小程序(也就是腳本)躲雅。我個(gè)人并不喜歡“腳本語(yǔ)言”這個(gè)術(shù)語(yǔ)鼎姊,因?yàn)樗孟裨谡f(shuō)這些語(yǔ)言無(wú)法用于構(gòu)建嚴(yán)謹(jǐn)?shù)能浖T诒姸嘟忉屝驼Z(yǔ)言中相赁,由于各種歷史和文化的原因相寇,Python發(fā)展出了一個(gè)巨大而活躍的科學(xué)計(jì)算(scientific computing)社區(qū)。在過(guò)去的10年钮科,Python從一個(gè)邊緣或“自擔(dān)風(fēng)險(xiǎn)”的科學(xué)計(jì)算語(yǔ)言唤衫,成為了數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)绵脯、學(xué)界和工業(yè)界軟件開(kāi)發(fā)最重要的語(yǔ)言之一佳励。

在數(shù)據(jù)分析、交互式計(jì)算以及數(shù)據(jù)可視化方面,Python將不可避免地與其他開(kāi)源和商業(yè)的領(lǐng)域特定編程語(yǔ)言/工具進(jìn)行對(duì)比淤袜,如R赘被、MATLAB、SAS瞧剖、Stata等拭嫁。近年來(lái),由于Python的庫(kù)(例如pandas和scikit-learn)不斷改良筒繁,使其成為數(shù)據(jù)分析任務(wù)的一個(gè)優(yōu)選方案噩凹。結(jié)合其在通用編程方面的強(qiáng)大實(shí)力,我們完全可以只使用Python這一種語(yǔ)言構(gòu)建以數(shù)據(jù)為中心的應(yīng)用毡咏。

Python作為膠水語(yǔ)言

Python成為成功的科學(xué)計(jì)算工具的部分原因是驮宴,它能夠輕松地集成C、C++以及Fortran代碼呕缭。大部分現(xiàn)代計(jì)算環(huán)境都利用了一些Fortran和C庫(kù)來(lái)實(shí)現(xiàn)線(xiàn)性代數(shù)堵泽、優(yōu)選、積分恢总、快速傅里葉變換以及其他諸如此類(lèi)的算法迎罗。許多企業(yè)和國(guó)家實(shí)驗(yàn)室也利用Python來(lái)“粘合”那些已經(jīng)用了多年的遺留軟件系統(tǒng)。

大多數(shù)軟件都是由兩部分代碼組成的:少量需要占用大部分執(zhí)行時(shí)間的代碼片仿,以及大量不經(jīng)常執(zhí)行的“膠水代碼”纹安。大部分情況下,膠水代碼的執(zhí)行時(shí)間是微不足道的砂豌。開(kāi)發(fā)人員的精力幾乎都是花在優(yōu)化計(jì)算瓶頸上面厢岂,有時(shí)更是直接轉(zhuǎn)用更低級(jí)的語(yǔ)言(比如C)。

解決“兩種語(yǔ)言”問(wèn)題

很多組織通常都會(huì)用一種類(lèi)似于領(lǐng)域特定的計(jì)算語(yǔ)言(如SAS和R)對(duì)新想法做研究阳距、原型構(gòu)建和測(cè)試塔粒,然后再將這些想法移植到某個(gè)更大的生產(chǎn)系統(tǒng)中去(可能是用Java、C#或C++編寫(xiě)的)筐摘。人們逐漸意識(shí)到卒茬,Python不僅適用于研究和原型構(gòu)建,同時(shí)也適用于構(gòu)建生產(chǎn)系統(tǒng)咖熟。為什么一種語(yǔ)言就夠了圃酵,卻要使用兩個(gè)語(yǔ)言的開(kāi)發(fā)環(huán)境呢?我相信越來(lái)越多的企業(yè)也會(huì)這樣看球恤,因?yàn)檠芯咳藛T和工程技術(shù)人員使用同一種編程工具將會(huì)給企業(yè)帶來(lái)非常顯著的組織效益辜昵。

為什么不選Python

雖然Python非常適合構(gòu)建分析應(yīng)用以及通用系統(tǒng),但它對(duì)不少應(yīng)用場(chǎng)景適用性較差咽斧。

由于Python是一種解釋型編程語(yǔ)言堪置,因此大部分Python代碼都要比用編譯型語(yǔ)言(比如Java和C++)編寫(xiě)的代碼運(yùn)行慢得多躬存。由于程序員的時(shí)間通常都比CPU時(shí)間值錢(qián),因此許多人也愿意對(duì)此做一些取舍舀锨。但是岭洲,在那些延遲要求非常小或高資源利用率的應(yīng)用中(例如高頻交易系統(tǒng)),耗費(fèi)時(shí)間使用諸如C++這樣更低級(jí)坎匿、更低生產(chǎn)率的語(yǔ)言進(jìn)行編程也是值得的盾剩。

對(duì)于高并發(fā)、多線(xiàn)程的應(yīng)用程序而言(尤其是擁有許多計(jì)算密集型線(xiàn)程的應(yīng)用程序)替蔬,Python并不是一種理想的編程語(yǔ)言告私。這是因?yàn)镻ython有一個(gè)叫做全局解釋器鎖(Global Interpreter Lock,GIL)的組件承桥,這是一種防止解釋器同時(shí)執(zhí)行多條Python字節(jié)碼指令的機(jī)制驻粟。有關(guān)“為什么會(huì)存在GIL”的技術(shù)性原因超出了本書(shū)的范圍。雖然很多大數(shù)據(jù)處理應(yīng)用程序?yàn)榱四茉谳^短的時(shí)間內(nèi)完成數(shù)據(jù)集的處理工作都需要運(yùn)行在計(jì)算機(jī)集群上凶异,但是仍然有一些情況需要用單進(jìn)程多線(xiàn)程系統(tǒng)來(lái)解決蜀撑。

這并不是說(shuō)Python不能執(zhí)行真正的多線(xiàn)程并行代碼。例如剩彬,Python的C插件使用原生的C或C++的多線(xiàn)程酷麦,可以并行運(yùn)行而不被GIL影響,只要它們不頻繁地與Python對(duì)象交互喉恋。

1.3 重要的Python庫(kù)

考慮到那些還不太了解Python科學(xué)計(jì)算生態(tài)系統(tǒng)和庫(kù)的讀者沃饶,下面我先對(duì)各個(gè)庫(kù)做一個(gè)簡(jiǎn)單的介紹。

NumPy

NumPy(Numerical Python的簡(jiǎn)稱(chēng))是Python科學(xué)計(jì)算的基礎(chǔ)包轻黑。本書(shū)大部分內(nèi)容都基于NumPy以及構(gòu)建于其上的庫(kù)绍坝。它提供了以下功能(不限于此):

快速高效的多維數(shù)組對(duì)象ndarray。

用于對(duì)數(shù)組執(zhí)行元素級(jí)計(jì)算以及直接對(duì)數(shù)組執(zhí)行數(shù)學(xué)運(yùn)算的函數(shù)苔悦。

用于讀寫(xiě)硬盤(pán)上基于數(shù)組的數(shù)據(jù)集的工具。

線(xiàn)性代數(shù)運(yùn)算椎咧、傅里葉變換玖详,以及隨機(jī)數(shù)生成。

-成熟的C API勤讽, 用于Python插件和原生C蟋座、C++、Fortran代碼訪(fǎng)問(wèn)NumPy的數(shù)據(jù)結(jié)構(gòu)和計(jì)算工具脚牍。

除了為Python提供快速的數(shù)組處理能力向臀,NumPy在數(shù)據(jù)分析方面還有另外一個(gè)主要作用,即作為在算法和庫(kù)之間傳遞數(shù)據(jù)的容器诸狭。對(duì)于數(shù)值型數(shù)據(jù)券膀,NumPy數(shù)組在存儲(chǔ)和處理數(shù)據(jù)時(shí)要比內(nèi)置的Python數(shù)據(jù)結(jié)構(gòu)高效得多君纫。此外,由低級(jí)語(yǔ)言(比如C和Fortran)編寫(xiě)的庫(kù)可以直接操作NumPy數(shù)組中的數(shù)據(jù)芹彬,無(wú)需進(jìn)行任何數(shù)據(jù)復(fù)制工作蓄髓。因此,許多Python的數(shù)值計(jì)算工具要么使用NumPy數(shù)組作為主要的數(shù)據(jù)結(jié)構(gòu)舒帮,要么可以與NumPy進(jìn)行無(wú)縫交互操作会喝。

pandas

pandas提供了快速便捷處理結(jié)構(gòu)化數(shù)據(jù)的大量數(shù)據(jù)結(jié)構(gòu)和函數(shù)。自從2010年出現(xiàn)以來(lái)玩郊,它助使Python成為強(qiáng)大而高效的數(shù)據(jù)分析環(huán)境肢执。本書(shū)用得最多的pandas對(duì)象是DataFrame,它是一個(gè)面向列(column-oriented)的二維表結(jié)構(gòu)译红,另一個(gè)是Series预茄,一個(gè)一維的標(biāo)簽化數(shù)組對(duì)象。

pandas兼具NumPy高性能的數(shù)組計(jì)算功能以及電子表格和關(guān)系型數(shù)據(jù)庫(kù)(如SQL)靈活的數(shù)據(jù)處理功能临庇。它提供了復(fù)雜精細(xì)的索引功能反璃,能更加便捷地完成重塑、切片和切塊假夺、聚合以及選取數(shù)據(jù)子集等操作淮蜈。因?yàn)閿?shù)據(jù)操作、準(zhǔn)備已卷、清洗是數(shù)據(jù)分析最重要的技能梧田,pandas是本書(shū)的重點(diǎn)。

作為背景侧蘸,我是在2008年初開(kāi)始開(kāi)發(fā)pandas的裁眯,那時(shí)我任職于AQR Capital Management,一家量化投資管理公司讳癌,我有許多工作需求都不能用任何單一的工具解決:

有標(biāo)簽軸的數(shù)據(jù)結(jié)構(gòu)穿稳,支持自動(dòng)或清晰的數(shù)據(jù)對(duì)齊。這可以防止由于數(shù)據(jù)不對(duì)齊晌坤,或處理來(lái)源不同的索引不同的數(shù)據(jù)逢艘,所造成的錯(cuò)誤。

集成時(shí)間序列功能骤菠。

相同的數(shù)據(jù)結(jié)構(gòu)用于處理時(shí)間序列數(shù)據(jù)和非時(shí)間序列數(shù)據(jù)它改。

保存元數(shù)據(jù)的算術(shù)運(yùn)算和壓縮。

靈活處理缺失數(shù)據(jù)商乎。

合并和其它流行數(shù)據(jù)庫(kù)(例如基于SQL的數(shù)據(jù)庫(kù))的關(guān)系操作央拖。

我想只用一種工具就實(shí)現(xiàn)所有功能,并使用通用軟件開(kāi)發(fā)語(yǔ)言。Python是一個(gè)不錯(cuò)的候選語(yǔ)言鲜戒,但是此時(shí)沒(méi)有集成的數(shù)據(jù)結(jié)構(gòu)和工具來(lái)實(shí)現(xiàn)专控。我一開(kāi)始就是想把pandas設(shè)計(jì)為一款適用于金融和商業(yè)分析的工具,pandas專(zhuān)注于深度時(shí)間序列功能和工具袍啡,適用于時(shí)間索引化的數(shù)據(jù)踩官。

對(duì)于使用R語(yǔ)言進(jìn)行統(tǒng)計(jì)計(jì)算的用戶(hù),肯定不會(huì)對(duì)DataFrame這個(gè)名字感到陌生境输,因?yàn)樗醋杂赗的data.frame對(duì)象蔗牡。但與Python不同,data frames是構(gòu)建于R和它的標(biāo)準(zhǔn)庫(kù)嗅剖。因此辩越,pandas的許多功能不屬于R或它的擴(kuò)展包。

pandas這個(gè)名字源于panel data(面板數(shù)據(jù)信粮,這是多維結(jié)構(gòu)化數(shù)據(jù)集在計(jì)量經(jīng)濟(jì)學(xué)中的術(shù)語(yǔ))以及Python data analysis(Python數(shù)據(jù)分析)黔攒。

matplotlib

matplotlib是最流行的用于繪制圖表和其它二維數(shù)據(jù)可視化的Python庫(kù)。它最初由John D.Hunter(JDH)創(chuàng)建强缘,目前由一個(gè)龐大的開(kāi)發(fā)團(tuán)隊(duì)維護(hù)督惰。它非常適合創(chuàng)建出版物上用的圖表。雖然還有其它的Python可視化庫(kù)旅掂,matplotlib卻是使用最廣泛的赏胚,并且它和其它生態(tài)工具配合也非常完美。我認(rèn)為商虐,可以使用它作為默認(rèn)的可視化工具觉阅。

IPython和Jupyter

IPython項(xiàng)目起初是Fernando Pérez在2001年的一個(gè)用以加強(qiáng)和Python交互的子項(xiàng)目。在隨后的16年中秘车,它成為了Python數(shù)據(jù)棧最重要的工具之一典勇。雖然IPython本身沒(méi)有提供計(jì)算和數(shù)據(jù)分析的工具,它卻可以大大提高交互式計(jì)算和軟件開(kāi)發(fā)的生產(chǎn)率叮趴。IPython鼓勵(lì)“執(zhí)行-探索”的工作流割笙,區(qū)別于其它編程軟件的“編輯-編譯-運(yùn)行”的工作流。它還可以方便地訪(fǎng)問(wè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è)更寬泛的多語(yǔ)言交互計(jì)算工具的計(jì)劃舌涨。IPython web notebook變成了Jupyter notebook,現(xiàn)在支持40種編程語(yǔ)言。IPython現(xiàn)在可以作為Jupyter使用Python的內(nèi)核(一種編程語(yǔ)言模式)囊嘉。

IPython變成了Jupyter龐大開(kāi)源項(xiàng)目(一個(gè)交互和探索式計(jì)算的高效環(huán)境)中的一個(gè)組件温技。它最老也是最簡(jiǎn)單的模式,現(xiàn)在是一個(gè)用于編寫(xiě)扭粱、測(cè)試舵鳞、調(diào)試Python代碼的強(qiáng)化shell。你還可以使用通過(guò)Jupyter Notebook琢蛤,一個(gè)支持多種語(yǔ)言的交互式網(wǎng)絡(luò)代碼“筆記本”蜓堕,來(lái)使用IPython。IPython shell 和Jupyter notebooks特別適合進(jìn)行數(shù)據(jù)探索和可視化博其。

Jupyter notebooks還可以編寫(xiě)Markdown和HTML內(nèi)容套才,它提供了一種創(chuàng)建代碼和文本的富文本方法。其它編程語(yǔ)言也在Jupyter中植入了內(nèi)核慕淡,好讓在Jupyter中可以使用Python以外的語(yǔ)言背伴。

對(duì)我個(gè)人而言,我的大部分Python工作都要用到IPython峰髓,包括運(yùn)行傻寂、調(diào)試和測(cè)試代碼。

在本書(shū)的GitHub頁(yè)面携兵,你可以找到包含各章節(jié)所有代碼實(shí)例的Jupyter notebooks疾掰。

SciPy

SciPy是一組專(zhuān)門(mén)解決科學(xué)計(jì)算中各種標(biāo)準(zhǔn)問(wèn)題域的包的集合,主要包括下面這些包:

scipy.integrate:數(shù)值積分例程和微分方程求解器眉孩。

scipy.linalg:擴(kuò)展了由numpy.linalg提供的線(xiàn)性代數(shù)例程和矩陣分解功能个绍。

scipy.optimize:函數(shù)優(yōu)化器(最小化器)以及根查找算法。

scipy.signal:信號(hào)處理工具浪汪。

scipy.sparse:稀疏矩陣和稀疏線(xiàn)性系統(tǒng)求解器巴柿。

scipy.special:SPECFUN(這是一個(gè)實(shí)現(xiàn)了許多常用數(shù)學(xué)函數(shù)(如伽瑪函數(shù))的Fortran庫(kù))的包裝器。

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ì)算問(wèn)題糠聪。

scikit-learn

2010年誕生以來(lái),scikit-learn成為了Python的通用機(jī)器學(xué)習(xí)工具包谐鼎。僅僅七年舰蟆,就匯聚了全世界超過(guò)1500名貢獻(xiàn)者。它的子模塊包括:

分類(lèi):SVM、近鄰身害、隨機(jī)森林味悄、邏輯回歸等等。

回歸:Lasso塌鸯、嶺回歸等等侍瑟。

聚類(lèi):k-均值、譜聚類(lèi)等等丙猬。

降維:PCA涨颜、特征選擇、矩陣分解等等淮悼。

選型:網(wǎng)格搜索咐低、交叉驗(yàn)證、度量袜腥。

預(yù)處理:特征提取见擦、標(biāo)準(zhǔn)化。

與pandas羹令、statsmodels和IPython一起鲤屡,scikit-learn對(duì)于Python成為高效數(shù)據(jù)科學(xué)編程語(yǔ)言起到了關(guān)鍵作用。雖然本書(shū)不會(huì)詳細(xì)講解scikit-learn福侈,我會(huì)簡(jiǎn)要介紹它的一些模型酒来,以及用其它工具如何使用這些模型。

statsmodels

statsmodels是一個(gè)統(tǒng)計(jì)分析包肪凛,起源于斯坦福大學(xué)統(tǒng)計(jì)學(xué)教授Jonathan Taylor堰汉,他設(shè)計(jì)了多種流行于R語(yǔ)言的回歸分析模型。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é)的算法拱烁。包括如下子模塊:

回歸模型:線(xiàn)性回歸生蚁,廣義線(xiàn)性模型,健壯線(xiàn)性模型戏自,線(xiàn)性混合效應(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ù)測(cè)惯吕。

同scikit-learn一樣,我也只是簡(jiǎn)要介紹statsmodels怕午,以及如何用NumPy和pandas使用它废登。

1.4 安裝和設(shè)置

由于人們用Python所做的事情不同,所以沒(méi)有一個(gè)普適的Python及其插件包的安裝方案郁惜。由于許多讀者的Python科學(xué)計(jì)算環(huán)境都不能完全滿(mǎn)足本書(shū)的需要堡距,所以接下來(lái)我將詳細(xì)介紹各個(gè)操作系統(tǒng)上的安裝方法。我推薦免費(fèi)的Anaconda安裝包兆蕉。寫(xiě)作本書(shū)時(shí)羽戒,Anaconda提供Python 2.7和3.6兩個(gè)版本,以后可能發(fā)生變化虎韵。本書(shū)使用的是Python 3.6易稠,因此推薦選擇Python 3.6或更高版本。

Windows

要在Windows上運(yùn)行包蓝,先下載Anaconda安裝包驶社。推薦跟隨Anaconda下載頁(yè)面的Windows安裝指導(dǎo),安裝指導(dǎo)在寫(xiě)作本書(shū)和讀者看到此文的的這段時(shí)間內(nèi)可能發(fā)生變化测萎。

現(xiàn)在亡电,來(lái)確認(rèn)設(shè)置是否正確。打開(kāi)命令行窗口(cmd.exe)绳泉,輸入python以打開(kāi)Python解釋器逊抡。可以看到類(lèi)似下面的Anaconda版本的輸出:

C:\Users\wesm>pythonPython3.5.2|Anaconda 4.1.1 (64-bit)|(default, Jul52016,11:41:13)[MSC v.190064bit (AMD64)] on win32>>>

要退出shell零酪,按Ctrl-D(Linux或macOS上)冒嫡,Ctrl-Z(Windows上),或輸入命令exit()四苇,再按Enter孝凌。

Apple (OS X, macOS)

下載OS X Anaconda安裝包,它的名字類(lèi)似Anaconda3-4.1.0-MacOSX-x86_64.pkg月腋。雙擊.pkg文件蟀架,運(yùn)行安裝包瓣赂。安裝包運(yùn)行時(shí),會(huì)自動(dòng)將Anaconda執(zhí)行路徑添加到.bash_profile文件片拍,它位于/Users/$USER/.bash_profile煌集。

為了確認(rèn)成功,在系統(tǒng)shell打開(kāi)IPython:

$ ipython

要退出shell捌省,按Ctrl-D苫纤,或輸入命令exit(),再按Enter纲缓。

GNU/Linux

Linux版本很多卷拘,這里給出Debian、Ubantu祝高、CentOS和Fedora的安裝方法栗弟。安裝包是一個(gè)腳本文件,必須在shell中運(yùn)行工闺。取決于系統(tǒng)是32位還是64位乍赫,要么選擇x86 (32位)或x86_64 (64位)安裝包。隨后你會(huì)得到一個(gè)文件斤寂,名字類(lèi)似于Anaconda3-4.1.0-Linux-x86_64.sh耿焊。用bash進(jìn)行安裝:

$ bash Anaconda3-4.1.0-Linux-x86_64.sh

筆記:某些Linux版本在包管理器中有滿(mǎn)足需求的Python包,只需用類(lèi)似apt的工具安裝就行遍搞。這里講的用Anaconda安裝罗侯,適用于不同的Linux安裝包,也很容易將包升級(jí)到最新版本溪猿。

接受許可之后钩杰,會(huì)向你詢(xún)問(wèn)在哪里放置Anaconda的文件。我推薦將文件安裝到默認(rèn)的home目錄诊县,例如/home/$USER/anaconda讲弄。

Anaconda安裝包可能會(huì)詢(xún)問(wèn)你是否將bin/目錄添加到$PATH變量。如果在安裝之后有任何問(wèn)題依痊,你可以修改文件.bashrc(或.zshrc避除,如果使用的是zsh shell)為類(lèi)似以下的內(nèi)容:

exportPATH=/home/$USER/anaconda/bin:$PATH

做完之后,你可以開(kāi)啟一個(gè)新窗口胸嘁,或再次用~/.bashrc執(zhí)行.bashrc瓶摆。

安裝或升級(jí)Python包

在你閱讀本書(shū)的時(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

本書(shū)中毫胜,你有許多機(jī)會(huì)嘗試這些命令书斜。

注意:當(dāng)你使用conda和pip二者安裝包時(shí)诬辈,千萬(wàn)不要用pip升級(jí)conda的包,這樣會(huì)導(dǎo)致環(huán)境發(fā)生問(wèn)題荐吉。當(dāng)使用Anaconda或Miniconda時(shí)焙糟,最好首先使用conda進(jìn)行升級(jí)。

Python 2 和 Python 3

第一版的Python 3.x出現(xiàn)于2008年样屠。它有一系列的變化酬荞,與之前的Python 2.x代碼有不兼容的地方。因?yàn)閺?991年P(guān)ython出現(xiàn)算起瞧哟,已經(jīng)過(guò)了17年,Python 3 的出現(xiàn)被視為吸取一些列教訓(xùn)的更優(yōu)結(jié)果枪向。

2012年勤揩,因?yàn)樵S多包還沒(méi)有完全支持Python 3,許多科學(xué)和數(shù)據(jù)分析社區(qū)還是在使用Python 2.x秘蛔。因此陨亡,本書(shū)第一版使用的是Python 2.7。現(xiàn)在深员,用戶(hù)可以在Python 2.x和Python 3.x間自由選擇负蠕,二者都有良好的支持。

但是倦畅,Python 2.x在2020年就會(huì)到期(包括重要的安全補(bǔ)墩谔恰),因此再用Python 2.7就不是好的選擇了叠赐。因此欲账,本書(shū)使用了Python 3.6,這一廣泛使用芭概、支持良好的穩(wěn)定版本赛不。我們已經(jīng)稱(chēng)Python 2.x為“遺留版本”,簡(jiǎn)稱(chēng)Python 3.x為“Python”罢洲。我建議你也是如此踢故。

本書(shū)基于Python 3.6。你的Python版本也許高于3.6惹苗,但是示例代碼應(yīng)該是向前兼容的殿较。一些示例代碼可能在Python 2.7上有所不同,或完全不兼容鸽粉。

集成開(kāi)發(fā)環(huán)境(IDEs)和文本編輯器

當(dāng)被問(wèn)到我的標(biāo)準(zhǔn)開(kāi)發(fā)環(huán)境斜脂,我?guī)缀蹩偸腔卮稹癐Python加文本編輯器”。我通常在編程時(shí)触机,反復(fù)在IPython或Jupyter notebooks中測(cè)試和調(diào)試每條代碼帚戳。也可以交互式操作數(shù)據(jù)玷或,和可視化驗(yàn)證數(shù)據(jù)操作中某一特殊集合。在shell中使用pandas和NumPy也很容易片任。

但是偏友,當(dāng)創(chuàng)建軟件時(shí),一些用戶(hù)可能更想使用特點(diǎn)更為豐富的IDE对供,而不僅僅是原始的Emacs或Vim的文本編輯器位他。以下是一些IDE:

PyDev(免費(fèi)),基于Eclipse平臺(tái)的IDE产场;

JetBrains的PyCharm(商業(yè)用戶(hù)需要訂閱鹅髓,開(kāi)源開(kāi)發(fā)者免費(fèi));

Visual Studio(Windows用戶(hù))的Python Tools京景;

Spyder(免費(fèi))窿冯,Anaconda附帶的IDE;

Komodo IDE(商業(yè))确徙。

因?yàn)镻ython的流行醒串,大多數(shù)文本編輯器,比如Atom和Sublime Text 3鄙皇,對(duì)Python的支持也非常好芜赌。

1.5 社區(qū)和會(huì)議

除了在網(wǎng)上搜索,各式各樣的科學(xué)和數(shù)據(jù)相關(guān)的Python郵件列表是非常有幫助的伴逸,很容易獲得回答缠沈。包括:

pydata:一個(gè)Google群組列表,用以回答Python數(shù)據(jù)分析和pandas的問(wèn)題违柏;

pystatsmodels: statsmodels或pandas相關(guān)的問(wèn)題博烂;

scikit-learn和Python機(jī)器學(xué)習(xí)郵件列表,scikit-learn@python.org漱竖;

numpy-discussion:和NumPy相關(guān)的問(wèn)題禽篱;

scipy-user:SciPy和科學(xué)計(jì)算的問(wèn)題;

因?yàn)檫@些郵件列表的URLs可以很容易搜索到馍惹,但因?yàn)榭赡馨l(fā)生變化躺率,所以沒(méi)有給出。

每年万矾,世界各地會(huì)舉辦許多Python開(kāi)發(fā)者大會(huì)悼吱。如果你想結(jié)識(shí)其他有相同興趣的人,如果可能的話(huà)良狈,我建議你去參加一個(gè)后添。許多會(huì)議會(huì)對(duì)無(wú)力支付入場(chǎng)費(fèi)和差旅費(fèi)的人提供財(cái)力幫助。下面是一些會(huì)議:

PyCon和EuroPython:北美和歐洲的兩大Python會(huì)議薪丁;

SciPy和EuroSciPy:北美和歐洲兩大面向科學(xué)計(jì)算的會(huì)議遇西;

PyData:世界范圍內(nèi)馅精,一些列的地區(qū)性會(huì)議,專(zhuān)注數(shù)據(jù)科學(xué)和數(shù)據(jù)分析粱檀;

國(guó)際和地區(qū)的PyCon會(huì)議(http://pycon.org有完整列表) 洲敢。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市茄蚯,隨后出現(xiàn)的幾起案子压彭,更是在濱河造成了極大的恐慌,老刑警劉巖渗常,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壮不,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡皱碘,警方通過(guò)查閱死者的電腦和手機(jī)忆畅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)尸执,“玉大人,你說(shuō)我怎么就攤上這事缓醋∪缡В” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵送粱,是天一觀的道長(zhǎng)褪贵。 經(jīng)常有香客問(wèn)我,道長(zhǎng)抗俄,這世上最難降的妖魔是什么脆丁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮动雹,結(jié)果婚禮上槽卫,老公的妹妹穿的比我還像新娘。我一直安慰自己胰蝠,他們只是感情好歼培,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著茸塞,像睡著了一般躲庄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钾虐,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天噪窘,我揣著相機(jī)與錄音,去河邊找鬼效扫。 笑死倔监,一個(gè)胖子當(dāng)著我的面吹牛直砂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丐枉,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼哆键,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了瘦锹?” 一聲冷哼從身側(cè)響起籍嘹,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弯院,沒(méi)想到半個(gè)月后辱士,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡听绳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年颂碘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片椅挣。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡头岔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鼠证,到底是詐尸還是另有隱情峡竣,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布量九,位于F島的核電站适掰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏荠列。R本人自食惡果不足惜类浪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肌似。 院中可真熱鬧费就,春花似錦、人聲如沸川队。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)呼寸。三九已至艳汽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間对雪,已是汗流浹背河狐。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人馋艺。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓栅干,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親捐祠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子碱鳞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355