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應用開發實戰》

閱讀原文

相關推薦

開始Python3資料分析

​點選關注 非同步圖書,置頂公眾號每天與你分享 IT好書 技術乾貨 職場知識​​參與文末話題討論,每日贈送非同步圖書——非同步小編​歡迎來到Python資料分析的世界!如今,Python已成為資料分析和資料科學事實上的標準語言和標準平臺之一。我們將為讀者展示一張思維導圖,圖1

開始Python3(六)--叠代

pri 循環 true python 元素 常見 nbsp rabl rom   只要是可叠代對象,無論有無下標,都可以叠代, 默認情況下,dict叠代的是key。如果要叠代value,可以用for value in d.values(),如果要同時叠代key和value,

[閑的蛋疼系列]開始TypeScript寫React的UI組件(0)-先寫一個Button??

component extension lap exp closed struct app target 參數 0.鹹魚要說的 一入前端深似海,鹹魚入海更加鹹。 最近閑的蛋疼,手上年前的事也完成了7788了,借助[PG1]的話來說,我們要keep real. 鹹魚肯定不

開始剛買的阿裏雲實例搭建lnmp環境(非集成包)

window firewall GZip壓縮 正則表達式語法 表達式 http 開啟 lib .org 一、安裝前 1. 更新系統軟件: yum update 2. 查看是否已安裝wget: rpm -qa wget 否則安裝: yum install wget 3.

開始 proxy 實現 Mobx

dynamic-object 只對外暴露了三個 api:observable observe Action,分別是 動態化物件、 變化監聽 與 懶追蹤輔助函式。 下面以開發角度描述實現思路,同時作為反思,如果有更優的思路,我會隨時更新。 1. 術語解釋 本庫包含許多抽象概念,為了簡化描述

如何開始Keras開發一個機器翻譯系統

參考: https://yq.aliyun.com/articles/475854?utm_content=m_42632 #load doc into memory def load_doc(filename):     #open the file a

開始Python打造自己的神經網路 !

這是一份用於理解深度學習內部運作方式的初學者指南。作者根據自己從零開始學習用 Python 構建神經網路的經驗,編寫了一份攻略。內容涵蓋神經網路定義、損失函式、前向傳播、反向傳播、梯度下降演算法,對於想要了解深度學習運作原理的各位來說,內容精彩不可錯過。   動機:為了深

開始學視覺化資料分析師就業課程(Excel、 MySQL、Power BI、Tableau、python、R)

課程目錄: 第1章: 資料分析師先導篇 任務1: 資料分析的概念 任務2: 資料分析的作用 任務3: 資料分析六部曲 任務4: 資料分析六部曲2 任務5: 資料分析的三大誤區 任務6: 資料分析師的發展和職業要求 任務7: 資料分析師的基本素質 第2章: Ex

開始學習PYTHON3講義(一)認識Python

課程名稱 從零開始PYTHON3 課程長度 15講 適用年齡 15-20歲(初三-大一) 本講名稱 認識Python 時長 90分鐘

開始學習PYTHON3講義(二)把Python當做計算器

《從零開始PYTHON3》第二講 上一講我們說過了如何啟動Python IDLE整合開發學習環境,macOS/Linux都可以在命令列執行idle3。Windows則從開始選單中去尋找IDLE程式的圖示。 上一講我們還見到了Python的兩種工作模式,互動模式和程式模式。 通常在一個大型的系統中,程

開始學習PYTHON3講義(三)寫第一個程序

最有 當前 記憶 參考資料 函數調用 情況 分鐘 頁面 容易 《從零開始PYTHON3》第三講 本頁面使用了公式插件,因博客主機過濾無法顯示的表示抱歉,並建議至個人主頁查看原文。 ? 我見過很多初學者,提到編程都有一種恐懼感,起源是感覺編程太難了。其實,難的也不過是

開始學習PYTHON3講義(五)while迴圈和棋盤麥粒問題

《從零開始PYTHON3》第五講 ​上一節課重點學習了字串,並且傳遞了一個重要的理念,就是程式要對開發人員自己和使用者都足夠友好。在這個過程中,利用字串給出充分、完整、準確的提示是非常重要的一部分。 ​在Python可以處理的不同資料型別中,每種資料型別都有自己特色的運算方式,比如我們上一節課對比過

開始的Hadoop大資料叢集(偽)搭建,全免費VirtualBox虛擬機器Ubuntu版,學習向,超詳細---(一)

     在公司工作了一段時間了,大資料平臺都是公司的運維人員搭建維護的,自己也想親自搭建一套,純粹為了學習和提高自己,也為了以後自己研究用。公司的環境不太適合亂來,自己的就可以隨意玩了。     寫這個也是為了記錄自己學習的過程,同時給大家提供一個參考,想要學習大資料的也

開始學習PYTHON3講義(七)條件分支和哥德巴赫猜想

《從零開始PYTHON3》第七講 人生是由無數個選擇組成,每個選擇都有不同的限定條件。現在來說人生有點早是吧:)不過事實的確是這樣的。 程式也充滿著選擇,滿足不同的條件,則執行不同的運算。這些對不同運算的選擇,則被稱為分支,或者叫“條件分支”。 在Python中,最簡單的條件分支是這個樣子(虛擬碼

開始_學_資料結構(二)——樹的基本概念

相比之前的帖子,對其進行了增添和完善。 ps:本顏色的字型是後續新增內容 —————————————————— 參考連結: 大話資料結構.pdf http://www.cnblogs.com/yc_sunniwell/archive/2010/06/27/176623

開始學習PYTHON3講義(九)字典型別和插入排序

《從零開始PYTHON3》第九講 第六講、上一講我們都介紹了列表型別。列表型別是程式設計中最常用的一種型別,但也有挺明顯的缺陷,比如: data = [5,22,34,12,87,67,3,43,56,23] 還記得讓程式更友好的概念嗎?上一條語句所定義的列表,我們沒辦法很容易的知道這些值代表什麼

開始學習PYTHON3講義(十一)計算器升級啦

(內容需要,本講中再次使用了大量線上公式,如果因為轉帖網站不支援公式無法顯示的情況,歡迎訪問原始部落格。) 《從零開始PYTHON3》第十一講 第二講的時候,我們通過Python的互動模式來入門Python基本知識。當時把Python當成了一個計算器使用。隨後從第三講開始,一直到第十講,我們進入了程式

開始學習PYTHON3講義(十二)畫一顆心送給你

(內容需要,本講使用了大量線上公式,如果因為轉帖網站不支援公式無法顯示的情況,歡迎訪問原始部落格。) 《從零開始PYTHON3》第十二講 上一節課我們主要講解了數值計算和符號計算。數值計算的結果,很常用的目的之一就是用於繪製圖像,從影象中尋找公式的更多內在規律。 Python科學繪圖 科學繪圖是計

開始學習PYTHON3講義(十四)寫一個mp3播放器

《從零開始PYTHON3》第十四講 通常來說,Python解釋執行,執行速度慢,並不適合完整的開發遊戲。隨著電腦速度的快速提高,這種情況有所好轉,但開發遊戲仍然不是Python的重點工作。 大多應用是利用Python開發效率高的特點,進行遊戲原型驗證,或者在大的遊戲系統中,使用Python進行地圖、場

開始學習Python用於資料科學,Python比你想象的要強大!

為什麼是Python? Python是一種多用途的程式語言,廣泛應用於資料科學,被稱為本世紀最性感的工作。資料科學家通過大資料集挖掘,以獲得洞察力並做出有意義的資料驅動決策。Python是一種通用的程式語言,用於Web開發、網路建設、科學計算等領域。我們將進一步討論python中的一系列令人敬畏