第01章 準備工作

資料來源:https://github.com/BrambleXu/pydata-notebook

第1章 準備工作

1.1 本書的內容

本書講的是利用Python進行數(shù)據(jù)控制唠粥、處理、整理、分析等方面的具體細節(jié)和基本要點聪黎。我的目標是介紹Python編程和用于數(shù)據(jù)處理的庫和工具環(huán)境忍饰,掌握這些线梗,可以讓你成為一個數(shù)據(jù)分析專家痊班。雖然本書的標題是“數(shù)據(jù)分析”角撞,重點卻是Python編程答毫、庫褥民,以及用于數(shù)據(jù)分析的工具。這就是數(shù)據(jù)分析要用到的Python編程洗搂。

什么樣的數(shù)據(jù)轴捎?

當書中出現(xiàn)“數(shù)據(jù)”時,究竟指的是什么呢蚕脏?主要指的是結構化數(shù)據(jù)(structured data)侦副,這個故意含糊其辭的術語代指了所有通用格式的數(shù)據(jù),例如:

  • 表格型數(shù)據(jù)驼鞭,其中各列可能是不同的類型(字符串秦驯、數(shù)值、日期等)挣棕。比如保存在關系型數(shù)據(jù)庫中或以制表符/逗號為分隔符的文本文件中的那些數(shù)據(jù)译隘。
  • 多維數(shù)組(矩陣)。
  • 通過關鍵列(對于SQL用戶而言洛心,就是主鍵和外鍵)相互聯(lián)系的多個表固耘。
  • 間隔平均或不平均的時間序列。

這絕不是一個完整的列表词身。大部分數(shù)據(jù)集都能被轉化為更加適合分析和建模的結構化形式厅目,雖然有時這并不是很明顯。如果不行的話法严,也可以將數(shù)據(jù)集的特征提取為某種結構化形式损敷。例如,一組新聞文章可以被處理為一張詞頻表深啤,而這張詞頻表就可以用于情感分析拗馒。

大部分電子表格軟件(比如Microsoft Excel,它可能是世界上使用最廣泛的數(shù)據(jù)分析工具了)的用戶不會對此類數(shù)據(jù)感到陌生溯街。

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

許許多多的人(包括我自己)都很容易愛上Python這門語言诱桂。自從1991年誕生以來洋丐,Python現(xiàn)在已經成為最受歡迎的動態(tài)編程語言之一,其他還有Perl挥等、Ruby等垫挨。由于擁有大量的Web框架(比如Rails(Ruby)和Django(Python)),自從2005年触菜,使用Python和Ruby進行網站建設工作非常流行九榔。這些語言常被稱作腳本(scripting)語言,因為它們可以用于編寫簡短而粗糙的小程序(也就是腳本)涡相。我個人并不喜歡“腳本語言”這個術語哲泊,因為它好像在說這些語言無法用于構建嚴謹?shù)能浖T诒姸嘟忉屝驼Z言中催蝗,由于各種歷史和文化的原因切威,Python發(fā)展出了一個巨大而活躍的科學計算(scientific computing)社區(qū)。在過去的10年丙号,Python從一個邊緣或“自擔風險”的科學計算語言先朦,成為了數(shù)據(jù)科學、機器學習犬缨、學界和工業(yè)界軟件開發(fā)最重要的語言之一喳魏。

在數(shù)據(jù)分析、交互式計算以及數(shù)據(jù)可視化方面怀薛,Python將不可避免地與其他開源和商業(yè)的領域特定編程語言/工具進行對比刺彩,如R、MATLAB枝恋、SAS创倔、Stata等。近年來焚碌,由于Python的庫(例如pandas和scikit-learn)不斷改良畦攘,使其成為數(shù)據(jù)分析任務的一個優(yōu)選方案。結合其在通用編程方面的強大實力十电,我們完全可以只使用Python這一種語言構建以數(shù)據(jù)為中心的應用知押。

Python作為膠水語言

Python成為成功的科學計算工具的部分原因是,它能夠輕松地集成C摆出、C++以及Fortran代碼朗徊。大部分現(xiàn)代計算環(huán)境都利用了一些Fortran和C庫來實現(xiàn)線性代數(shù)首妖、優(yōu)選偎漫、積分、快速傅里葉變換以及其他諸如此類的算法有缆。許多企業(yè)和國家實驗室也利用Python來“粘合”那些已經用了多年的遺留軟件系統(tǒng)象踊。

大多數(shù)軟件都是由兩部分代碼組成的:少量需要占用大部分執(zhí)行時間的代碼温亲,以及大量不經常執(zhí)行的“膠水代碼”。大部分情況下杯矩,膠水代碼的執(zhí)行時間是微不足道的栈虚。開發(fā)人員的精力幾乎都是花在優(yōu)化計算瓶頸上面,有時更是直接轉用更低級的語言(比如C)史隆。

解決“兩種語言”問題

很多組織通常都會用一種類似于領域特定的計算語言(如SAS和R)對新想法做研究魂务、原型構建和測試,然后再將這些想法移植到某個更大的生產系統(tǒng)中去(可能是用Java泌射、C#或C++編寫的)粘姜。人們逐漸意識到,Python不僅適用于研究和原型構建熔酷,同時也適用于構建生產系統(tǒng)孤紧。為什么一種語言就夠了,卻要使用兩個語言的開發(fā)環(huán)境呢拒秘?我相信越來越多的企業(yè)也會這樣看号显,因為研究人員和工程技術人員使用同一種編程工具將會給企業(yè)帶來非常顯著的組織效益。

為什么不選Python

雖然Python非常適合構建分析應用以及通用系統(tǒng)躺酒,但它對不少應用場景適用性較差押蚤。

由于Python是一種解釋型編程語言,因此大部分Python代碼都要比用編譯型語言(比如Java和C++)編寫的代碼運行慢得多羹应。由于程序員的時間通常都比CPU時間值錢活喊,因此許多人也愿意對此做一些取舍。但是量愧,在那些延遲要求非常小或高資源利用率的應用中(例如高頻交易系統(tǒng))钾菊,耗費時間使用諸如C++這樣更低級、更低生產率的語言進行編程也是值得的偎肃。

對于高并發(fā)煞烫、多線程的應用程序而言(尤其是擁有許多計算密集型線程的應用程序),Python并不是一種理想的編程語言累颂。這是因為Python有一個叫做全局解釋器鎖(Global Interpreter Lock滞详,GIL)的組件,這是一種防止解釋器同時執(zhí)行多條Python字節(jié)碼指令的機制紊馏。有關“為什么會存在GIL”的技術性原因超出了本書的范圍料饥。雖然很多大數(shù)據(jù)處理應用程序為了能在較短的時間內完成數(shù)據(jù)集的處理工作都需要運行在計算機集群上,但是仍然有一些情況需要用單進程多線程系統(tǒng)來解決朱监。

這并不是說Python不能執(zhí)行真正的多線程并行代碼岸啡。例如,Python的C插件使用原生的C或C++的多線程赫编,可以并行運行而不被GIL影響巡蘸,只要它們不頻繁地與Python對象交互奋隶。

1.3 重要的Python庫

考慮到那些還不太了解Python科學計算生態(tài)系統(tǒng)和庫的讀者,下面我先對各個庫做一個簡單的介紹悦荒。

NumPy NumPy(Numerical Python的簡稱)是Python科學計算的基礎包唯欣。本書大部分內容都基于NumPy以及構建于其上的庫。它提供了以下功能(不限于此):

  • 快速高效的多維數(shù)組對象ndarray搬味。

  • 用于對數(shù)組執(zhí)行元素級計算以及直接對數(shù)組執(zhí)行數(shù)學運算的函數(shù)境氢。

  • 用于讀寫硬盤上基于數(shù)組的數(shù)據(jù)集的工具。

  • 線性代數(shù)運算碰纬、傅里葉變換产还,以及隨機數(shù)生成。

    -成熟的C API嘀趟, 用于Python插件和原生C脐区、C++、Fortran代碼訪問NumPy的數(shù)據(jù)結構和計算工具她按。

除了為Python提供快速的數(shù)組處理能力牛隅,NumPy在數(shù)據(jù)分析方面還有另外一個主要作用,即作為在算法和庫之間傳遞數(shù)據(jù)的容器酌泰。對于數(shù)值型數(shù)據(jù)媒佣,NumPy數(shù)組在存儲和處理數(shù)據(jù)時要比內置的Python數(shù)據(jù)結構高效得多。此外陵刹,由低級語言(比如C和Fortran)編寫的庫可以直接操作NumPy數(shù)組中的數(shù)據(jù)默伍,無需進行任何數(shù)據(jù)復制工作。因此衰琐,許多Python的數(shù)值計算工具要么使用NumPy數(shù)組作為主要的數(shù)據(jù)結構也糊,要么可以與NumPy進行無縫交互操作。

pandas

pandas提供了快速便捷處理結構化數(shù)據(jù)的大量數(shù)據(jù)結構和函數(shù)羡宙。自從2010年出現(xiàn)以來狸剃,它助使Python成為強大而高效的數(shù)據(jù)分析環(huán)境。本書用得最多的pandas對象是DataFrame狗热,它是一個面向列(column-oriented)的二維表結構钞馁,另一個是Series,一個一維的標簽化數(shù)組對象匿刮。

pandas兼具NumPy高性能的數(shù)組計算功能以及電子表格和關系型數(shù)據(jù)庫(如SQL)靈活的數(shù)據(jù)處理功能僧凰。它提供了復雜精細的索引功能,能更加便捷地完成重塑熟丸、切片和切塊训措、聚合以及選取數(shù)據(jù)子集等操作。因為數(shù)據(jù)操作、準備隙弛、清洗是數(shù)據(jù)分析最重要的技能架馋,pandas是本書的重點狞山。

作為背景全闷,我是在2008年初開始開發(fā)pandas的,那時我任職于AQR Capital Management萍启,一家量化投資管理公司总珠,我有許多工作需求都不能用任何單一的工具解決:

  • 有標簽軸的數(shù)據(jù)結構,支持自動或清晰的數(shù)據(jù)對齊勘纯。這可以防止由于數(shù)據(jù)不對齊局服,或處理來源不同的索引不同的數(shù)據(jù),所造成的錯誤驳遵。
  • 集成時間序列功能淫奔。
  • 相同的數(shù)據(jù)結構用于處理時間序列數(shù)據(jù)和非時間序列數(shù)據(jù)。
  • 保存元數(shù)據(jù)的算術運算和壓縮堤结。
  • 靈活處理缺失數(shù)據(jù)唆迁。
  • 合并和其它流行數(shù)據(jù)庫(例如基于SQL的數(shù)據(jù)庫)的關系操作。

我想只用一種工具就實現(xiàn)所有功能竞穷,并使用通用軟件開發(fā)語言唐责。Python是一個不錯的候選語言,但是此時沒有集成的數(shù)據(jù)結構和工具來實現(xiàn)瘾带。我一開始就是想把pandas設計為一款適用于金融和商業(yè)分析的工具鼠哥,pandas專注于深度時間序列功能和工具,適用于時間索引化的數(shù)據(jù)看政。

對于使用R語言進行統(tǒng)計計算的用戶朴恳,肯定不會對DataFrame這個名字感到陌生,因為它源自于R的data.frame對象允蚣。但與Python不同菜皂,data frames是構建于R和它的標準庫。因此厉萝,pandas的許多功能不屬于R或它的擴展包恍飘。

pandas這個名字源于panel data(面板數(shù)據(jù),這是多維結構化數(shù)據(jù)集在計量經濟學中的術語)以及Python data analysis(Python數(shù)據(jù)分析)谴垫。

matplotlib

matplotlib是最流行的用于繪制圖表和其它二維數(shù)據(jù)可視化的Python庫章母。它最初由John D.Hunter(JDH)創(chuàng)建,目前由一個龐大的開發(fā)團隊維護翩剪。它非常適合創(chuàng)建出版物上用的圖表乳怎。雖然還有其它的Python可視化庫,matplotlib卻是使用最廣泛的前弯,并且它和其它生態(tài)工具配合也非常完美蚪缀。我認為秫逝,可以使用它作為默認的可視化工具。

IPython和Jupyter

IPython項目起初是Fernando Pérez在2001年的一個用以加強和Python交互的子項目询枚。在隨后的16年中违帆,它成為了Python數(shù)據(jù)棧最重要的工具之一。雖然IPython本身沒有提供計算和數(shù)據(jù)分析的工具金蜀,它卻可以大大提高交互式計算和軟件開發(fā)的生產率刷后。IPython鼓勵“執(zhí)行-探索”的工作流,區(qū)別于其它編程軟件的“編輯-編譯-運行”的工作流渊抄。它還可以方便地訪問系統(tǒng)的shell和文件系統(tǒng)尝胆。因為大部分的數(shù)據(jù)分析代碼包括探索、試錯和重復护桦,IPython可以使工作更快含衔。

2014年,F(xiàn)ernando和IPython團隊宣布了Jupyter項目二庵,一個更寬泛的多語言交互計算工具的計劃贪染。IPython web notebook變成了Jupyter notebook,現(xiàn)在支持40種編程語言眨猎。IPython現(xiàn)在可以作為Jupyter使用Python的內核(一種編程語言模式)抑进。

IPython變成了Jupyter龐大開源項目(一個交互和探索式計算的高效環(huán)境)中的一個組件。它最老也是最簡單的模式睡陪,現(xiàn)在是一個用于編寫寺渗、測試、調試Python代碼的強化shell兰迫。你還可以使用通過Jupyter Notebook信殊,一個支持多種語言的交互式網絡代碼“筆記本”,來使用IPython汁果。IPython shell 和Jupyter notebooks特別適合進行數(shù)據(jù)探索和可視化涡拘。

Jupyter notebooks還可以編寫Markdown和HTML內容,它提供了一種創(chuàng)建代碼和文本的富文本方法据德。其它編程語言也在Jupyter中植入了內核鳄乏,好讓在Jupyter中可以使用Python以外的語言。

對我個人而言棘利,我的大部分Python工作都要用到IPython橱野,包括運行、調試和測試代碼善玫。

在本書的GitHub頁面水援,你可以找到包含各章節(jié)所有代碼實例的Jupyter notebooks。

SciPy

SciPy是一組專門解決科學計算中各種標準問題域的包的集合,主要包括下面這些包:

  • scipy.integrate:數(shù)值積分例程和微分方程求解器蜗元。
  • scipy.linalg:擴展了由numpy.linalg提供的線性代數(shù)例程和矩陣分解功能或渤。
  • scipy.optimize:函數(shù)優(yōu)化器(最小化器)以及根查找算法。
  • scipy.signal:信號處理工具奕扣。
  • scipy.sparse:稀疏矩陣和稀疏線性系統(tǒng)求解器薪鹦。
  • scipy.special:SPECFUN(這是一個實現(xiàn)了許多常用數(shù)學函數(shù)(如伽瑪函數(shù))的Fortran庫)的包裝器。
  • scipy.stats:標準連續(xù)和離散概率分布(如密度函數(shù)成畦、采樣器距芬、連續(xù)分布函數(shù)等)涝开、各種統(tǒng)計檢驗方法循帐,以及更好的描述統(tǒng)計法。

NumPy和SciPy結合使用舀武,便形成了一個相當完備和成熟的計算平臺拄养,可以處理多種傳統(tǒng)的科學計算問題。

scikit-learn

2010年誕生以來银舱,scikit-learn成為了Python的通用機器學習工具包瘪匿。僅僅七年,就匯聚了全世界超過1500名貢獻者寻馏。它的子模塊包括:

  • 分類:SVM棋弥、近鄰、隨機森林诚欠、邏輯回歸等等顽染。
  • 回歸:Lasso、嶺回歸等等轰绵。
  • 聚類:k-均值粉寞、譜聚類等等。
  • 降維:PCA左腔、特征選擇唧垦、矩陣分解等等。
  • 選型:網格搜索液样、交叉驗證振亮、度量。
  • 預處理:特征提取鞭莽、標準化坊秸。

與pandas、statsmodels和IPython一起撮抓,scikit-learn對于Python成為高效數(shù)據(jù)科學編程語言起到了關鍵作用妇斤。雖然本書不會詳細講解scikit-learn,我會簡要介紹它的一些模型,以及用其它工具如何使用這些模型站超。

statsmodels

statsmodels是一個統(tǒng)計分析包荸恕,起源于斯坦福大學統(tǒng)計學教授Jonathan Taylor,他設計了多種流行于R語言的回歸分析模型死相。Skipper Seabold和Josef Perktold在2010年正式創(chuàng)建了statsmodels項目融求,隨后匯聚了大量的使用者和貢獻者。受到R的公式系統(tǒng)的啟發(fā)算撮,Nathaniel Smith發(fā)展出了Patsy項目生宛,它提供了statsmodels的公式或模型的規(guī)范框架。

與scikit-learn比較肮柜,statsmodels包含經典統(tǒng)計學和經濟計量學的算法陷舅。包括如下子模塊:

  • 回歸模型:線性回歸,廣義線性模型审洞,健壯線性模型莱睁,線性混合效應模型等等。
  • 方差分析(ANOVA)芒澜。
  • 時間序列分析:AR仰剿,ARMA,ARIMA痴晦,VAR和其它模型南吮。
  • 非參數(shù)方法: 核密度估計,核回歸誊酌。
  • 統(tǒng)計模型結果可視化部凑。

statsmodels更關注與統(tǒng)計推斷,提供不確定估計和參數(shù)p-值术辐。相反的砚尽,scikit-learn注重預測。

同scikit-learn一樣辉词,我也只是簡要介紹statsmodels必孤,以及如何用NumPy和pandas使用它。

1.4 安裝和設置

由于人們用Python所做的事情不同瑞躺,所以沒有一個普適的Python及其插件包的安裝方案敷搪。由于許多讀者的Python科學計算環(huán)境都不能完全滿足本書的需要,所以接下來我將詳細介紹各個操作系統(tǒng)上的安裝方法幢哨。我推薦免費的Anaconda安裝包赡勘。寫作本書時,Anaconda提供Python 2.7和3.6兩個版本捞镰,以后可能發(fā)生變化闸与。本書使用的是Python 3.6毙替,因此推薦選擇Python 3.6或更高版本。

Windows

要在Windows上運行践樱,先下載Anaconda安裝包厂画。推薦跟隨Anaconda下載頁面的Windows安裝指導,安裝指導在寫作本書和讀者看到此文的的這段時間內可能發(fā)生變化拷邢。

現(xiàn)在袱院,來確認設置是否正確。打開命令行窗口(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酷鸦。

為了確認成功饰躲,在系統(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進行安裝:

$ bash Anaconda3-4.1.0-Linux-x86_64.sh

筆記:某些Linux版本在包管理器中有滿足需求的Python包纪隙,只需用類似apt的工具安裝就行油宜。這里講的用Anaconda安裝脂凶,適用于不同的Linux安裝包,也很容易將包升級到最新版本徊哑。

接受許可之后,會向你詢問在哪里放置Anaconda的文件聪富。我推薦將文件安裝到默認的home目錄莺丑,例如/home/$USER/anaconda

Anaconda安裝包可能會詢問你是否將bin/目錄添加到$PATH變量墩蔓。如果在安裝之后有任何問題梢莽,你可以修改文件.bashrc(或.zshrc,如果使用的是zsh shell)為類似以下的內容:

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

本書中仑扑,你有許多機會嘗試這些命令。

注意:當你使用conda和pip二者安裝包時置鼻,千萬不要用pip升級conda的包镇饮,這樣會導致環(huán)境發(fā)生問題。當使用Anaconda或Miniconda時箕母,最好首先使用conda進行升級储藐。

Python 2 和 Python 3

第一版的Python 3.x出現(xiàn)于2008年。它有一系列的變化嘶是,與之前的Python 2.x代碼有不兼容的地方钙勃。因為從1991年Python出現(xiàn)算起,已經過了17年聂喇,Python 3 的出現(xiàn)被視為吸取一些列教訓的更優(yōu)結果辖源。

2012年,因為許多包還沒有完全支持Python 3授帕,許多科學和數(shù)據(jù)分析社區(qū)還是在使用Python 2.x同木。因此,本書第一版使用的是Python 2.7□耸現(xiàn)在彤路,用戶可以在Python 2.x和Python 3.x間自由選擇,二者都有良好的支持芥映。

但是洲尊,Python 2.x在2020年就會到期(包括重要的安全補对恫颉),因此再用Python 2.7就不是好的選擇了坞嘀。因此躯护,本書使用了Python 3.6,這一廣泛使用丽涩、支持良好的穩(wěn)定版本棺滞。我們已經稱Python 2.x為“遺留版本”,簡稱Python 3.x為“Python”矢渊。我建議你也是如此继准。

本書基于Python 3.6。你的Python版本也許高于3.6矮男,但是示例代碼應該是向前兼容的移必。一些示例代碼可能在Python 2.7上有所不同,或完全不兼容毡鉴。

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

當被問到我的標準開發(fā)環(huán)境崔泵,我?guī)缀蹩偸腔卮稹癐Python加文本編輯器”。我通常在編程時猪瞬,反復在IPython或Jupyter notebooks中測試和調試每條代碼憎瘸。也可以交互式操作數(shù)據(jù),和可視化驗證數(shù)據(jù)操作中某一特殊集合撑螺。在shell中使用pandas和NumPy也很容易含思。

但是,當創(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ū)和會議

除了在網上搜索眯勾,各式各樣的科學和數(shù)據(jù)相關的Python郵件列表是非常有幫助的枣宫,很容易獲得回答。包括:

  • pydata:一個Google群組列表吃环,用以回答Python數(shù)據(jù)分析和pandas的問題也颤;
  • pystatsmodels: statsmodels或pandas相關的問題;
  • scikit-learn和Python機器學習郵件列表郁轻,scikit-learn@python.org翅娶;
  • numpy-discussion:和NumPy相關的問題;
  • scipy-user:SciPy和科學計算的問題好唯;

因為這些郵件列表的URLs可以很容易搜索到故觅,但因為可能發(fā)生變化,所以沒有給出渠啊。

每年输吏,世界各地會舉辦許多Python開發(fā)者大會。如果你想結識其他有相同興趣的人替蛉,如果可能的話贯溅,我建議你去參加一個。許多會議會對無力支付入場費和差旅費的人提供財力幫助躲查。下面是一些會議:

  • PyCon和EuroPython:北美和歐洲的兩大Python會議它浅;
  • SciPy和EuroSciPy:北美和歐洲兩大面向科學計算的會議;
  • PyData:世界范圍內镣煮,一些列的地區(qū)性會議姐霍,專注數(shù)據(jù)科學和數(shù)據(jù)分析;
  • 國際和地區(qū)的PyCon會議(http://pycon.org有完整列表) 典唇。

1.6 本書導航

如果之前從未使用過Python镊折,那你可能需要先看看本書的第2章和第3章,我簡要介紹了Python的特點介衔,IPython和Jupyter notebooks恨胚。這些知識是為本書后面的內容做鋪墊。如果你已經掌握Python炎咖,可以選擇跳過赃泡。

接下來,簡單地介紹了NumPy的關鍵特性乘盼,附錄A中是更高級的NumPy功能升熊。然后,我介紹了pandas绸栅,本書剩余的內容全部是使用pandas级野、NumPy和matplotlib處理數(shù)據(jù)分析的問題。我已經盡量讓全書的結構循序漸進阴幌,但偶爾會有章節(jié)之間的交叉勺阐,有時用到的概念還沒有介紹過卷中。

盡管讀者各自的工作任務不同,大體可以分為幾類:

  • 與外部世界交互

    閱讀編寫多種文件格式和數(shù)據(jù)存儲渊抽;

  • 數(shù)據(jù)準備

    清洗蟆豫、修改、結合懒闷、標準化十减、重塑、切片愤估、切割帮辟、轉換數(shù)據(jù),以進行分析玩焰;

  • 轉換數(shù)據(jù)

    對舊的數(shù)據(jù)集進行數(shù)學和統(tǒng)計操作由驹,生成新的數(shù)據(jù)集(例如,通過各組變量聚類成大的表)昔园;

  • 建模和計算

    將數(shù)據(jù)綁定統(tǒng)計模型蔓榄、機器學習算法、或其他計算工具默刚;

  • 展示

    創(chuàng)建交互式和靜態(tài)的圖表可視化和文本總結甥郑。

代碼示例

本書大部分代碼示例的輸入形式和輸出結果都會按照其在IPython shell或Jupyter notebooks中執(zhí)行時的樣子進行排版:

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版本控制命令行程序勉躺;直接從網站上下載該GitHub庫的zip文件。如果遇到了問題秃流,可以到我的個人主頁赂蕴,http://wesmckinney.com/, 獲取最新的指導舶胀。

為了讓所有示例都能重現(xiàn),我已經盡我所能使其包含所有必需的東西碧注,但仍然可能會有一些錯誤或遺漏嚣伐。如果出現(xiàn)這種情況的話,請給我發(fā)郵件:wesmckinn@gmail.com萍丐。報告本書錯誤的最好方法是O’Reilly的errata頁面轩端,http://www.bit.ly/pyDataAnalysis_errata。

引入慣例

Python社區(qū)已經廣泛采取了一些常用模塊的命名慣例:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import statsmodels as sm

也就是說逝变,當你看到np.arange時基茵,就應該想到它引用的是NumPy中的arange函數(shù)奋构。這樣做的原因是:在Python軟件開發(fā)過程中,不建議直接引入類似NumPy這種大型庫的全部內容(from numpy import *)拱层。

行話

由于你可能不太熟悉書中使用的一些有關編程和數(shù)據(jù)科學方面的常用術語弥臼,所以我在這里先給出其簡單定義:

數(shù)據(jù)規(guī)整(Munge/Munging/Wrangling) 指的是將非結構化和(或)散亂數(shù)據(jù)處理為結構化或整潔形式的整個過程。這幾個詞已經悄悄成為當今數(shù)據(jù)黑客們的行話了根灯。Munge這個詞跟Lunge押韻径缅。

偽碼(Pseudocode) 算法或過程的“代碼式”描述,而這些代碼本身并不是實際有效的源代碼烙肺。

語法糖(Syntactic sugar) 這是一種編程語法纳猪,它并不會帶來新的特性,但卻能使代碼更易讀桃笙、更易寫氏堤。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市搏明,隨后出現(xiàn)的幾起案子鼠锈,更是在濱河造成了極大的恐慌,老刑警劉巖熏瞄,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脚祟,死亡現(xiàn)場離奇詭異,居然都是意外死亡强饮,警方通過查閱死者的電腦和手機由桌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邮丰,“玉大人行您,你說我怎么就攤上這事〖袅” “怎么了娃循?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長斗蒋。 經常有香客問我捌斧,道長,這世上最難降的妖魔是什么泉沾? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任捞蚂,我火速辦了婚禮,結果婚禮上跷究,老公的妹妹穿的比我還像新娘姓迅。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布丁存。 她就那樣靜靜地躺著肩杈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪解寝。 梳的紋絲不亂的頭發(fā)上扩然,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音编丘,去河邊找鬼与学。 笑死,一個胖子當著我的面吹牛嘉抓,可吹牛的內容都是我干的索守。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼抑片,長吁一口氣:“原來是場噩夢啊……” “哼卵佛!你這毒婦竟也來了?” 一聲冷哼從身側響起敞斋,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤截汪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后植捎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衙解,經...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年焰枢,在試婚紗的時候發(fā)現(xiàn)自己被綠了蚓峦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡济锄,死狀恐怖暑椰,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情荐绝,我是刑警寧澤一汽,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站低滩,受9級特大地震影響召夹,放射性物質發(fā)生泄漏。R本人自食惡果不足惜恕沫,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一戳鹅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧昏兆,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至跑筝,卻和暖如春死讹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背曲梗。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工赞警, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人虏两。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓愧旦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親定罢。 傳聞我的和親對象是個殘疾皇子笤虫,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容