1. 程式人生 > >從零開始用Python3做資料分析

從零開始用Python3做資料分析

​點選關注 非同步圖書,置頂公眾號

每天與你分享 IT好書 技術乾貨 職場知識

參與文末話題討論,每日贈送非同步圖書

——非同步小編

​歡迎來到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,這裡提供了尋找解決問題所需輔助資訊的指南。

​圖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平臺

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

​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。 

安裝上述軟體後,為了安裝其餘的基礎程式庫,可以執行以下命令。

​小技巧

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

1.2 將IPython用作shell

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

下面是IPython shell的一些特性。

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

●歷史記錄機制

●行內編輯

●利用%run呼叫外部Python指令碼

●訪問系統命令

●訪問Python的除錯工具和分析工具

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

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

小技巧

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

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

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

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

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

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

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

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

1.3 學習手冊頁

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

這裡給出兩種翻閱相關資訊的方法。

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

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

​圖1-2​

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

​利用問號,我們可以從文件字串(docstrings)中獲取所需資訊。

1.4 Jupyter Notebook

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

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

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

​這時將啟動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來解決向量加法問題。

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

​注意,numpysum()無需使用for語句。此外,我們使用了來自NumPy的arange()函式,它替我們建立了一個含有整數0~n的NumPy陣列。這裡的arange()函式也是從NumPy匯入的,所以它加上了字首numpy。

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

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

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

1.7 從何處尋求幫助和參考資料

表1-1列出了在本文中討論過的Python資料分析庫的文件網站。

​表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版)》

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

點選封面購買紙書

暢銷書升級版,基於Python3。

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

今日互動

你對本書的看法?為什麼?截止時間5月31日17時,留言+轉發本活動到朋友圈,小編將抽獎選出3名讀者贈送紙書1本和2張e讀版80元非同步社群代金券,(留言點贊最多的自動獲得一張)。非同步圖書後臺回覆“5月新書”進入新書交流群,獲得第一手新書資訊,點選此處直接參加活動。

推薦閱讀

​長按二維碼,可以關注我們喲

每天與你分享IT好文。

在“非同步圖書”後臺回覆“關注”,即可免費獲得2000門線上視訊課程;推薦朋友關注根據提示獲取贈書連結,免費得非同步e讀版圖書一本。趕緊來參加哦!

點選閱讀原文,購買《Python應用開發實戰》

閱讀原文

相關推薦

no