導讀:對於那些對Python數據生態系統不太熟悉的人士,我將簡要地介紹一部分重要的庫。web
做者:韋斯·麥金尼(Wes McKinney)算法
譯者:徐敬一數據庫
來源:公衆號大數據DT(ID:hzdashuju)編程
01 NumPy數組
NumPy是Numerical Python的簡寫,是Python數值計算的基石。它提供多種數據結構、算法以及大部分涉及Python數值計算所需的接口。NumPy還包括其餘內容:安全
-
快速、高效的多維數組對象ndarray數據結構
-
基於元素的數組計算或數組間數學操做函數架構
-
用於讀寫硬盤中基於數組的數據集的工具框架
-
線性代數操做、傅里葉變換以及隨機數生成機器學習
成熟的C語言API,容許Python拓展和本地的C或C++代碼訪問NumPy的數據結構和計算設施。
除了NumPy賦予Python的快速數組處理能力以外,NumPy的另外一個主要用途是在算法和庫之間做爲數據傳遞的數據容器。對於數值數據,NumPy數組可以比Python內建數據結構更爲高效地存儲和操做數據。
此外,用底層語言編寫的庫,例如用C或Fortran編寫的庫,能夠在NumPy數組存儲的數據上直接操做,而無須將數據複製到其餘內存中後再操做。所以,許多Python的數值計算工具將NumPy數組做爲基礎數據結構,或與NumPy進行無縫互操做。
02 pandas
pandas提供了高級數據結構和函數,這些數據結構和函數的設計使得利用結構化、表格化數據的工做快速、簡單、有表現力。它出現於2010年,幫助Python成爲強大、高效的數據分析環境。經常使用的pandas對象是DataFrame,它是用於實現表格化、面向列、使用行列標籤的數據結構;以及Series,一種一維標籤數組對象。
pandas將表格和關係型數據庫(例如SQL)的靈活數據操做能力與NumPy的高性能數組計算的理念相結合。它提供複雜的索引函數,使得數據的重組、切塊、切片、聚合、子集選擇更爲簡單。因爲數據操做、預處理、清洗在數據分析中是重要的技能,pandas將是重要主題。
介紹一點背景知識,早在2008年,我在一家量化投資企業——AQR資本管理公司供職時,便開始了pandas的開發。那時候,我有一些獨特的需求是工具清單上任何單個工具沒法知足的:
-
帶有標籤軸,支持自動化或顯式數據對齊功能的數據結構——這能夠防止未對齊數據和不一樣數據源的不一樣索引數據所引發的常見錯誤
-
集成時間序列函數功能
-
可以同時處理時間序列數據和非時間序列數據的統一數據結構
-
能夠保存元數據的算術操做和簡化
-
靈活處理缺失數據
-
流行數據庫(例如基於SQL的數據庫)中的合併等關係型操做
我想將以上的工做在同一個地方完成,最好還能在一個擁有通用軟件開發能力的語言中實現。Python就是一個很好的備選項,可是那時候並無這類數據結構的整合集,也沒有能提供相關功能的工具。結果就是pandas最初被開發出來用於解決金融和商業分析問題,pandas尤爲擅長深度時間序列和處理商業進程中產生的時間索引數據。
使用R語言進行統計計算的用戶對DataFrame的名稱會很是熟悉,由於這個對象是根據類似的R data.frame對象進行命名的。與Python不一樣的是,數據框在R語言中是標準庫中的內容。所以,pandas中的不少特徵一般與R核心的實現或者R的附加庫提供的功能一致。
pandas的名字的來源是panel data,這是計量經濟學中針對多維結構化數據集的術語。pandas也是Python data analysis(Python數據分析)自身的簡寫短語。
03 matplotlib
matplotlib是最流行的用於製圖及其餘二維數據可視化的Python庫。它由John D. Hunter建立,目前由一個大型開發者團隊維護。matplotlib被設計爲適合出版的製圖工具。
對於Python編程者來講也有其餘可視化庫,但matplotlib依然使用最爲普遍,而且與生態系統的其餘庫良好整合。我認爲將它做爲默承認視化工具是一個安全的選擇。
關於matplotlib更詳細講解,請戳:純乾貨:手把手教你用Python作數據可視化(附代碼)
04 IPython與Jupyter
IPython項目開始於2001年,由Fernando Pérez發起,旨在開發一個更具交互性的Python解釋器。在過去的16年中,它成爲Python數據技術棧中最重要的工具之一。
儘管它自己並不提供任何計算或數據分析工具,它的設計側重於在交互計算和軟件開發兩方面將生產力最大化。它使用了一種執行-探索工做流來替代其餘語言中典型的編輯-編譯-運行工做流。它還提供針對操做系統命令行和文件系統的易用接口。因爲數據分析編碼工做包含大量的探索、試驗、試錯和遍歷,IPython可使你更快速地完成工做。
2014年,Fernando和IPython團隊發佈了Jupyter項目。Jupyter項目旨在設計一個適用於更多語言的交互式計算工具。IPython web notebook 則成爲Jupyter notebook,能夠支持超過40種編程語言。IPython系統目前能夠做爲一個內核(一種編程語言模式)用於在 Jupyter 中使用Python。
IPython自身已成爲 Jupyter開源項目中的一個組件,後者提供交互性、探索性的高效環境。IPtyhon最古老、最簡單的「模式」就是一個增強版的Python命令行,用於提升編寫、測試、調試Python代碼的速度。
你也能夠經過基於Web、支持多語言的代碼「筆記本」——Jupyter Notebook來使用IPython系統。IPython命令行和 Jupyter notebook對於數據探索和可視化很是有用。
Jupyter notebook系統容許你使用Markdown和HTML建立包含代碼和文本的富文檔。其餘編程語言也針對Jupyter實現了內核,容許你在Jupyter中使用多種語言而不只僅是Python。
對我我的來講,IPython涉及我工做的大部份內容,包括運行、調試、測試代碼。
05 SciPy
SciPy是科學計算領域針對不一樣標準問題域的包集合。如下是SciPy中包含的一些包:
-
scipy.integrate
數值積分例程和微分方程求解器
-
scipy.linalg
線性代數例程和基於numpy.linalg的矩陣分解
-
scipy.optimize
函數優化器(最小化器)和求根算法
-
scipy.signal
信號處理工具
-
scipy.sparse
稀疏矩陣與稀疏線性系統求解器
-
scipy.special
SPECFUN的包裝器。SPECFUN是Fortran語言下實現通用數據函數的包,例如gamma函數。
-
scipy.stats
標準的連續和離散機率分佈(密度函數、採樣器、連續分佈函數)、各種統計測試、各種描述性統計。
SciPy與NumPy一塊兒爲不少傳統科學計算應用提供了一個合理、完整、成熟的計算基礎。
06 scikit-learn
scikit-learn項目誕生於2010年,目前已成爲Python編程者首選的機器學習工具包。僅僅七年,scikit-learn就擁有了全世界1 500位代碼貢獻者。其中包含如下子模塊。
-
分類:SVM、最近鄰、隨機森林、邏輯迴歸等
-
迴歸:Lasso、嶺迴歸等
-
聚類:k-means、譜聚類等
-
降維:PCA、特徵選擇、矩陣分解等
-
模型選擇:網格搜索、交叉驗證、指標矩陣
-
預處理:特徵提取、正態化
scikit-learn與pandas、statsmodels、IPython一塊兒使Python成了高效的數據科學編程語言。
07 statsmodels
statsmodels是一個統計分析包。它源自斯坦福大學統計學教授Jonathan Taylor 利用R語言實現的各種分析模型。Skipper Seabold 和 Josef Perktold早在2010年便建立了新的statsmodels項目。自那以後該項目迅速成長,擁有大量活躍用戶和貢獻者者。
Nathaniel Smith 開發了Patsy項目,爲R語言公式系統所驅動的statsmodels包提供公式、模型規範框架。
與scikit-learn相比,statsmodels包含經典的(高頻詞彙)統計學、經濟學算法。它所包含的模型以下。
-
迴歸模型:線性迴歸、通用線性模型、魯棒線性模型、線性混合效應模型等
-
方差分析(ANOVA )
-
時間序列分析:AR、ARMA、ARIMA、VAR等模型
-
非參數方法:核密度估計、核迴歸
-
統計模型結果可視化
statsmodels更專一於統計推理,提供不肯定性評價和p值參數。相反,scikit-learn更專一於預測。
關於做者:韋斯·麥金尼(Wes McKinney)是流行的Python開源數據分析庫pandas的創始人。他是一名活躍的演講者,也是Python數據社區和Apache軟件基金會的Python/C++開源開發者。目前他在紐約從事軟件架構師工做。
本文摘編自《利用Python進行數據分析》(原書第2版),經出版方受權發佈。