05.19 從零開始用Python3做數據分析

歡迎來到Python數據分析的世界!如今,Python已成為數據分析和數據科學事實上的標準語言和標準平臺之一。我們將為讀者展示一張思維導圖,圖1-1中將給出Python生態系統為數據分析師和數據科學家提供的各種程序庫。NumPy、SciPy、Pandas和Matplotlib庫共同構成了Python數據分析的基礎,當前它們已經成為SciPy Stack 1.0的組成部分。在本文中,我們不僅會學習如何安裝SciPy Stack 1.0和Jupyter Notebook,還將編寫一些簡單的數據分析代碼,為後面的學習做好熱身。

下面是Python生態系統為數據分析師和數據科學家提供的常用程序庫。

●NumPy:這是一個通用程序庫,不僅支持常用的數值數組,同時提供了用於高效處理這些數組的函數。

●SciPy:這是Python的科學計算庫,對NumPy的功能進行了大量擴充,同時也有部分功能是重合的。Numpy和SciPy曾經共享基礎代碼,後來分道揚鑣了。

●Pandas:這是一個用於數據處理的程序庫,不僅提供了豐富的數據結構,同時為處理數據表和時間序列提供了相應的函數。

●Matplotlib:這是一個2D繪圖庫,在繪製圖形和圖像方面提供了良好的支持。當前,Matplotlib已經併入SciPy中並支持NumPy。

●IPython:這個庫為Python提供了強大的交互式Shell,也為Jupyter提供了內核,同時還支持交互式數據可視化功能。我們將在本文稍後介紹IPython shell。

●Jupyter Notebook:它提供了一個基於Web的交互式shell,可以創建和共享支持可實時代碼和可視化的文檔。Jupyter Notebook通過IPython提供的內核支持多個版本的Python。本文稍後將會為讀者進一步介紹Jupyter Notebook。

對於本文而言,當需要安裝軟件時,我們會在恰當的時機給出相應的安裝說明。在安裝軟件的過程中遇到困難或者不能斷定最佳方案時,讀者可以參考圖1-1,這裡提供了尋找解決問題所需輔助信息的指南。

從零開始用Python3做數據分析

圖1-1

本文將涉及以下主題。

●安裝Python 3

●將IPython用作shell

●閱讀手冊頁

●Jupyter Notebook

●NumPy數組

●一個簡單的應用

●列出Python庫中的模塊

●利用matplotlib可視化數據

1.1 安裝Python 3

本文所用軟件都是基於Python 3的,所以必須首先安裝Python 3。不過,對於某些操作系統而言,Python 3是默認安裝的。Python具有多種實現,其中包括具有商業版權的實現和發行版。在本文中,我們只關注標準Python實現,因為它與NumPy完全兼容。

提示:

讀者可以從https://www.python.org/download/頁面下載Python 3.5.x。在這個網站上,我們可以找到為Windows和Mac OS X系統開發的安裝程序,以及為Linux、UNIX和Mac OS X系統提供的源碼包。我們可以從https://docs.python.org/3/using/index.html上找到在各種操作系統上安裝和使用Python的相關說明。

本文需要安裝的軟件,在Windows、各種Linux發行版本和Mac OS X系統上都有相應的二進制安裝程序。當然,如果讀者願意,也可以使用相應的源代碼發行包。對於Python,要求其版本為3.5.x或更高。Python 2.7版本的支持與維護工作已經從2015年延續至2020年,之後,我們不得不遷移到Python 3。

1.1.1 安裝數據分析程序庫

下面開始介紹如何在Windows、Linux和Mac OS X上安裝和設置NumPy、SciPy、Pandas、Matplotlib、IPython和Jupyter Notebook。下面來詳細瞭解一下這個過程。在本文中,我們將使用pip3來安裝這些庫。因為從3.4版本起,pip3已經默認包含在Python的安裝程序中了。

1.1.2 Linux平臺或Mac OS X平臺

為了安裝這些基礎的程序庫,可以運行以下命令。

從零開始用Python3做數據分析

1.1.3 Windows平臺

在撰寫本文時,我們在Windows 10虛擬機上安裝了以下軟件,作為安裝這些程序庫的先決條件。

●Python 3.6。

●Microsoft Visual C++ Build Tools 2015。

下載並安裝適用於Windows平臺的、預編譯好的NumPy和SciPy二進制文件。

●我們下載了numpy-1.12.0 + mkl-cp36-cp36m-win_amd64.whl和scipy-0.18.1-cp36- cp36m-win_amd64.whl。

●下載完成後,執行命令pip3 install Downloads umpy-1.12.0 + mkl-cp36-cp36m-win_amd64.whl和pip3 install Downloads\\scipy-0.18.1-cp36-cp36m-win_amd64.whl。

安裝上述軟件後,為了安裝其餘的基礎程序庫,可以運行以下命令。

從零開始用Python3做數據分析

小技巧

使用這些命令安裝Jupyter時,要先安裝所有必需的軟件包,如Notebook和IPython。

1.2 將IPython用作shell

我們知道,科學家、數據分析師和工程師經常需要進行實驗,而IPython正是為實驗而生的。對於IPython提供的交互式環境,明眼人一看就知道它與MATLAB、Mathematica和Maple非常接近。

下面是IPython shell的一些特性。

●Tab補全功能(Tab completion),可以幫助查找命令

●歷史記錄機制

●利用%run調用外部Python腳本

●訪問系統命令

●訪問Python的調試工具和分析工具

下面給出IPython shell的使用方法。

●啟動會話:要想使用IPython啟動會話,需要在命令行中輸入以下指令。

從零開始用Python3做數據分析

小技巧

退出IPython shell時,可以使用quit()函數或者Ctrl+D組合鍵。

●保存會話:有時我們可能想要恢復之前做過的實驗。對於IPython來說,這很容易,只要保存了會話,就可以供將來繼續使用,具體命令如下。

從零開始用Python3做數據分析

使用下列命令可以關閉記錄功能。

從零開始用Python3做數據分析

●執行系統的shell命令:在默認情況下,IPython允許通過在命令前面追加“!”號來執行系統的shell命令。舉例來說,我們輸入下面的命令將會得到當前日期。

從零開始用Python3做數據分析

事實上,任何前置了“!”號的命令行都將發送給系統的shell來處理。此外,可以通過如下方法來存儲命令的輸出結果。

從零開始用Python3做數據分析

●顯示歷史上用過的命令:可以利用%hist命令來顯示之前用過的命令,例子如下。

從零開始用Python3做數據分析

這在命令行接口(Command Line Interface,CLI)環境中是一種非常普遍的功能。此外,我們還可以用-g開關在歷史命令中進行搜索,例子如下。

從零開始用Python3做數據分析

在上面的過程中,我們使用了一些所謂的魔力函數(magic functions),這些函數均以“%”開頭。當魔力函數單獨用於一行時,就可以省略前綴“%”。

1.3 學習手冊頁

當使用IPython導入相應的程序庫後,可以通過help命令打開NumPy函數的手冊頁——即使不知道該函數的確切名稱。我們可以先輸入幾個字符,然後利用Tab鍵就可以自動補全剩下的字符。下面以arange()函數為例,說明如何查閱與其有關的資料。

這裡給出兩種翻閱相關信息的方法。

調用help函數:輸入help命令(並輸入函數名中的前幾個字符,再按Tab鍵。這時將出現一個函數列表(見圖1-2),我們可以通過方向鍵從函數名列表中進行選擇,然後按Enter鍵進行確認),最後按Enter鍵盤,結束help函數的調用。

通過問號進行查詢:另一種方法是在函數名後面加上問號,當然,前提條件是我們已經知道函數名,好處是不必輸入help命令,例子如下。

從零開始用Python3做數據分析

圖1-2

從零開始用Python3做數據分析

Tab補全功能依賴於readline,所以務必確保先前已經安裝了該軟件。如果沒有安裝,可以使用pip完成安裝,具體命令如下。

從零開始用Python3做數據分析

利用問號,我們可以從文檔字符串(docstrings)中獲取所需信息。

1.4 Jupyter Notebook

upyter Notebook以前被稱為IPython Notebooks,它提供了一種以特殊格式創建和共享具有文本、圖表和Python代碼的網頁的工具。

很多時候,notebook都是用於演示Python軟件,或者用作一款教學工具。我們可以單純使用Python代碼或者通過特殊的notebook格式來導入和導出notebook。另外,notebook既可以在本機上跑,也可以放到專用的notebook服務器上在線使用。某些雲計算解決方案(如Wakari和PiCloud)還支持在雲中運行notebook。雲計算的主題將在第11章中加以介紹。

為了使用Jupyter Notebook啟動一個會話,讀者可以使用如下命令。

從零開始用Python3做數據分析

這時將啟動notebook服務器並打開一個網頁,顯示該命令所在文件夾的內容。然後,你可以在Python 3中選擇New | Python 3菜單項來啟動一個新的notebook。

你也可以打開本文的代碼包中提供的ch-01.ipynb。ch-01是一個notebook文件,其中存放了本文中簡單應用程序的代碼。

1.5 NumPy數組

安裝好NumPy後,就可以來看NumPy數組了。與Python中的列表相比,進行數值運算時NumPy數組的效率要高得多。事實上,NumPy數組是針對某些對象進行了大量的優化工作。

完成相同的運算時,與Python代碼相比,NumPy代碼用到的顯式循環語句明顯要少,因為NumPy是基於向量化的運算。還記得高等數學中標量和向量的概念嗎?例如,數字2是一個標量,計算2+2時,進行的是標量加法運算。通過一組標量,我們可以構建出一個向量。用Python編程的術語來說,我們得到了一個一維數組。當然,這個概念可以擴展至更高的維度。實際上,針對兩個數組的諸如加法之類的運算,可以將其轉化為一組標量運算。使用純Python時,為了完成該操作,可以使用循環語句遍歷第一個數組中的每個元素,並與第二個數組中對應的元素相加。然而,在數學家眼裡,這種方法過於繁瑣。數學上,可以將這兩個向量的加法視為單一操作。實際上,NumPy數組也可以這麼做,而且它用低級C例程針對某些操作進行了優化處理,使得這些基本運算效率大為提高。關於NumPy數組將在第2章中詳細介紹。

1.6 一個簡單的應用

假設要對向量a和b進行求和。注意,這裡“向量”的含義是數學意義上的,即一個一維數組。在第4章中,將遇到一種表示矩陣的特殊NumPy數組。向量a存放的是整數0~n−1的2次冪。如果n等於3,那麼a保存的是0、1或4。向量b存放的是整數0~n的3次冪,所以如果n等於3,那麼向量b等於0、1或者8。如果使用普通的Python代碼,該怎麼做呢?

在我們想出了一個解決方案後,可以拿來與等價的NumPy方案進行比較。

下面的函數沒有藉助NumPy,而是使用純Python來解決向量加法問題。

從零開始用Python3做數據分析

下面是利用NumPy解決向量加法問題的函數。

從零開始用Python3做數據分析

注意,numpysum()無需使用for語句。此外,我們使用了來自NumPy的arange()函數,它替我們創建了一個含有整數0~n的NumPy數組。這裡的arange()函數也是從NumPy導入的,所以它加上了前綴numpy。

現在到了真正有趣的地方。我們在前面講過,NumPy在進行數組運算時,速度是相當快的。可是到底有多快呢?下面的程序代碼將為我們展示numpysum()和pythonsum()這兩個函數的實耗時間,這裡以μs(微秒)為單位。同時,它還會顯示向量sum最後面的兩個元素值。下面來看使用Python和NumPy能否得到相同的答案。

從零開始用Python3做數據分析

對於1000個、2000個和4000個向量元素,程序的結果如下。

從零開始用Python3做數據分析

顯而易見,NumPy的運行速度比等價的常規Python代碼要快很多。有一件事情是肯定的:無論是否使用NumPy,計算結果都是相同的。但是結果的顯示形式還是有所差別的,numpysum()函數給出的結果不包含逗號。為什麼會這樣?別忘了,我們處理的不是Python的列表,而是一個NumPy數組。有關NumPy數組的更多內容,將在第2章中詳細介紹。

表1-1列出了在本文中討論過的Python數據分析庫的文檔網站。

從零開始用Python3做數據分析

表1-1

流行的軟件開發論壇Stack Overflow上也有數以百計的NumPy、SciPy、Pandas、Matplotlib、IPython和Jupyter Notebook方面的討論。如果讀者對這些內容感興趣,建議進一步學習。

如果你遇到了比較棘手的問題,或者想要持續關注這些程序庫的開發進展,可以訂閱相應的討論郵寄列表。訂閱後,每天收到的數量不一的郵件,開發者會積極報告這些庫的開發進展並熱心回答其中的問題。

對於IRC用戶,可以在irc://irc.freenode.net找到一個相關的頻道,雖然該頻道的名字是#scipy,但是這並不妨礙我們提問NumPy方面的問題,因為SciPy用戶一般比較熟悉NumPy,畢竟SciPy是以NumPy為基礎的。在這個SciPy頻道中,通常有50多位成員保持在線。

1.8 查看Python庫中包含的模塊

ch-01.ipynb文件包含用於查看NumPy、SciPy、Pandas和Matplotlib庫中的模塊的代碼。現在,讀者不用擔心這些代碼的含義,只要嘗試運行一下它們就行了。您可以修改其中的代碼以查看其他庫中的模塊。

本文摘自《Python數據分析(第2版)》

從零開始用Python3做數據分析

《Python數據分析(第2版)》

[美]阿曼多·凡丹戈(Armando Fandango) 著

點擊封面購買紙書

暢銷書升級版,基於Python3。

本書教新手用Python語言分析數據,發揮Python在數據可視化方面的優勢,引導讀者成為數據分析高手。全書從數據檢索、清洗、操作、可視化、存儲複雜的分析和建模等方面介紹,重點關注開源模塊,如NumPy、SciPy、matplotlib、pandas、IPython、Cython、scikit-learn及NLTK。本書還包括數據可視化、信號處理、時間序列分析、數據庫、預測分析和機器學習等主題。


分享到:


相關文章: