1. 程式人生 > >重要的Python資料分析庫

重要的Python資料分析庫

NumPy

NumPy(Numerical Python的簡稱)是Python科學計算的基礎包。它提供了以下功能(不限於此):
(1)快速有效的多維陣列物件ndarray。
(2)用於對陣列執行元素級計算以及直接對陣列執行數學運算的函式。
(3)用於讀寫硬碟上基於陣列的資料集的工具。
(4)線性代數運算、傅立葉變換,以及隨機數生成。
(5)成熟的C API, 用於Python外掛和原生C、C++、Fortran程式碼訪問NumPy的資料結構和計算工具。

除了為Python提供快速的陣列處理能力,NumPy在資料分析方面還有另外一個主要作用,即作為在演算法和庫之間傳遞資料的容器。對於數值型資料,NumPy陣列在儲存和處理資料時要比內建的Python資料結構高效得多。此外,由低階語言(比如C和Fortran)編寫的庫可以直接操作NumPy陣列中的資料,無需進行任何資料複製工作。因此,許多Python的數值計算工具要麼使用NumPy陣列作為主要的資料結構,要麼可以與NumPy進行無縫互動操作。

Pandas

pandas提供了快速便捷處理結構化資料的大量資料結構和函式。自從2010年出現以來,它助使Python成為強大而高效的資料分析環境。pandas用的最多物件是DataFrame,它是一個面向列(column-oriented)的二維表結構,另一個是Series,一個一維的標籤化陣列物件。
pandas兼具NumPy高效能的陣列計算功能以及電子表格和關係型資料庫(如SQL)靈活的資料處理功能。它提供了複雜精細的索引功能,以便更為便捷地完成重塑、切片和切塊、聚合以及選取資料子集等操作。因為資料操作、準備、清洗是資料分析最重要的技能,pandas是資料分析很重要的一個庫。

Matplotlib

matplotlib是最流行的用於繪製圖表和其它二維資料視覺化的Python庫。它最初由John D.Hunter(JDH)建立,目前由一個龐大的開發人員團隊維護。它非常適合創建出版物上用的圖表。雖然還有其它的Python視覺化庫,matplotlib卻是使用最廣泛的,並且它和其它生態工具配合也非常完美。我認為,可以使用它作為預設的視覺化工具。

IPythonJupyter

IPython專案起初是Fernando Pérez在2001年的一個用以加強和Python互動的子專案。在隨後的16年中,它成為了Python資料棧最重要的工具之一。雖然IPython本身沒有提供計算和資料分析的工具,它卻可以大大提高互動式計算和軟體開發的生產率。IPython鼓勵“執行-探索”的工作流,區別於其它程式設計軟體的“編輯-編譯-執行”的工作流。它還可以方便地訪問系統的shell和檔案系統。因為大部分的資料分析程式碼包括探索、試錯和重複,
IPython可以使工作更快。
2014年,Fernando和IPython團隊宣佈了Jupyter專案,一個更寬泛的多語言互動計算工具的計劃。IPython web notebook變成了Jupyter notebook,現在支援40種程式語言。IPython現在可以作為Jupyter使用Python的核心(一種程式語言模式)。
IPython變成了Jupyter龐大開源專案(一個互動和探索式計算的有效環境)中的一個元件。它最老也是最簡單的模式,現在是一個用於編寫、測試、除錯Python程式碼的強化shell。你還可以使用通過Jupyter Notebook,一個支援多種語言的互動式網路程式碼“筆記本”,來使用IPython。IPython shell 和Jupyter notebooks特別適合進行資料探索和視覺化。Jupyter notebooks還可以編寫Markdown和HTML內容,提供了一種建立程式碼和文字的富文字方法。其它程式語言也在Jupyter中植入了核心,好讓在Jupyter中可以使用Python另外的語言。
對我個人而言,我的大部分Python都要用到IPython,包括執行、除錯和測試程式碼。

SciPy

SciPy是一組專門解決科學計算中各種標準問題域的包的集合,主要包括下面這些包:
(1)scipy.integrate:數值積分例程和微分方程求解器。
(2)scipy.linalg:擴充套件了由numpy.linalg提供的線性代數例程和矩陣分解功能。
(3)scipy.optimize:函式優化器(最小化器)以及根查詢演算法。
(4)scipy.signal:訊號處理工具。
(5)scipy.sparse:稀疏矩陣和稀疏線性系統求解器。
(6)scipy.special:SPECFUN(這是一個實現了許多常用數學函式(如伽瑪函式)的Fortran庫)的包裝器。
(7)scipy.stats:標準連續和離散概率分佈(如密度函式、取樣器、連續分佈函式等)、各種統計檢驗方法,以及更好的描述統計法。
NumPy和SciPy結合使用,便形成了一個相當完備和成熟的計算平臺,可以處理多種傳統的科學計算問題。

scikit-learn

2010年誕生以來,scikit-learn成為了Python的通用機器學習工具包。僅僅七年,就匯聚了全世界超過1500名貢獻者。它的子模組包括:
(1)分類:SVM、近鄰、隨機森林、邏輯迴歸等等。
(2)迴歸:Lasso、嶺迴歸等等。
(3)聚類:k-均值、譜聚類等等。
(4)降維:PCA、特徵選擇、矩陣分解等等。
(5)選型:網格搜尋、交叉驗證、度量。
(6)預處理:特徵提取、標準化。
與pandas、statsmodels和IPython一起,scikit-learn對於Python成為高效資料科學程式語言起到了關鍵作用。

statsmodels

statsmodels是一個統計分析包,起源於斯坦福大學統計學教授Jonathan Taylor,他設計了多種流行於R語言的迴歸分析模型。Skipper Seabold和Josef Perktold在2010年正式建立了statsmodels專案,隨後匯聚了大量的使用者和貢獻者。受到R的公式系統的啟發,Nathaniel Smith發展出了Patsy專案,它提供了statsmodels的公式或模型的規範框架。
與scikit-learn比較,statsmodels包含經典統計學和經濟計量學的演算法。包括如下子模組:
(1)迴歸模型:線性迴歸,廣義線性模型,健壯線性模型,線性混合效應模型等等。
(2)方差分析(ANOVA)。
(3)時間序列分析:AR,ARMA,ARIMA,VAR和其它模型。
(4)非引數方法: 核密度估計,核迴歸。
(5)統計模型結果視覺化。
statsmodels更關注與統計推斷,提供不確定估計和引數p-值。相反的,scikit-learn注重預測。