70多個方法,輕鬆入門Python視覺化程式設計
圖形視覺化是展示資料的一個非常好的手段,好的圖表自己會說話。毋庸多言,在Python的世界裡,matplotlib是最著名的繪相簿,它支援幾乎所有的2D繪圖和部分3D繪圖,被廣泛地應用在科學計算和資料視覺化領域。但是介紹matplotlib的中文書籍很少,大部分書籍只是在部分章節中提到了matplotlib的基本用法,因此在內容和深度上都力有不逮。《Python資料視覺化程式設計實戰(第2版)》則是一本專門介紹matplotlib的譯著。70多個方法,輕鬆入門Python視覺化程式設計。
進群進群:943752371可以獲取Python各類入門學習資料!
這是我的微信公眾號【Python程式設計之家】各位大佬用空可以關注下,每天更新Python學習方法,感謝!
111111111111.png
70多個方法,輕鬆入門Python視覺化程式設計
matplotlib是一個開源專案,由John Hunter發起。關於matplotlib的由來,有一個小故事。John Hunter和他研究癲癇症的同事藉助一個專有軟體做腦皮層電圖分析,但是他所在的實驗室只有一份該電圖分析軟體的許可。他和許多一起工作的同事不得不輪流使用該軟體的硬體加密狗。於是,John Hunter便有了開發一個工具來替代當前所使用的軟體的想法。當時MATLAB被廣泛應用在生物醫學界中,John Hunter最初是想開發一個基於MATLAB的版本,但是由於MATLAB的一些限制和不足,加上他本身對Python非常熟悉,於是就有了matplotlib的誕生。
所以,無論從名字上,還是從所提供的函式名稱、引數及使用方法,matplotlib都與MATLAB非常相似。對於一個MATLAB開發人員,使用matplotlib會相當得心應手。即使對不熟悉MATLAB的開發人員(譬如我),對其函式的使用也能夠一目瞭然,而且matplotlib有著非常豐富的文件和例項,再加上本書的介紹,學習起來將會非常輕鬆。
matplotlib命令提供了互動繪圖的方式,在Python的互動式shell中,我們可以執行matplotlib命令來實時地繪製圖形並對其進行修改。生成的影象可以儲存成許多格式,這取決於其所使用的後端,但絕大多數後端都支援如png、pdf、ps、eps和svg等格式。
《Python資料視覺化程式設計實戰(第2版)》講什麼?
在本書中,作者對內容進行了整理,剔除了一些與章節聯絡不是很大的延伸內容,對排版也進行了修改,使得本書在內容編排上更加簡潔緊湊。在本書中,作者還引入了pandas和Plot.ly。其中pandas是一個功能強大且高效能的資料分析工具。Plot.ly是一款非常優秀的線上圖表工具,它非常注重圖表的可操作性及分享。在內容上,第2版更加完整地涵蓋了Python資料視覺化領域用到的主流工具。限於篇幅,本書不可能對所有工具做完整詳細的介紹,但本書所講的工具能滿足讀者大部分的資料視覺化需要,讀者可以根據自己的需要有選擇地深入學習。
最好的資料是我們能看到並理解的資料。作為開發人員和資料科學家,我們希望可以創造並構建出最全面且容易理解的視覺化圖形。然而這並非易事,我們需要找到資料,對它讀取、清理、過濾,然後使用恰當的工具將其視覺化。本書通過直接和簡單(有時不那麼簡單)的方法解釋了進行資料讀取、清理以及視覺化的流程。
本書涉及如何讀取本地資料、遠端資料、CSV、JSON以及關係型資料庫中的資料。
通過matplotlib,我們能用一行簡單的Python程式碼繪製出一些簡單的圖表,但是進行更高階的繪圖還需要Python之外的其他知識。我們需要理解資訊理論和人類的審美學來生成最吸引人的視覺化效果。
本書將介紹在Python中使用matplotlib繪圖的一些實戰練習,以及不同圖表特性的使用情況及其用法示例。
定義圖表型別——柱狀圖、線形圖和堆積柱狀圖
雖然我們已經用matplotlib繪製了一些圖表,但並沒有詳細介紹它們是怎麼工作的,也沒有介紹如何對圖表設定以及matplotlib其他的許多功能。本文將介紹並練習一些最基本的資料視覺化圖表型別,如線形圖、柱狀圖、直方圖、餅圖,以及它們的變形。
Matplotlib是一個強大的工具箱,能滿足幾乎所有2D和一些3D繪圖的需求。通過示例學習matplotlib是其作者推薦的方式。當以後你需要畫一個圖表時,就可以找到一個相似的例子,然後做些改動來滿足新的需求。
本節將展示基本的圖表以及它們的用途。這裡介紹的大多數圖表都是很常用的,其中有一些是理解資料視覺化中更高階概念的基礎。
1.1.1 準備工作
我們從matplotlib.pyplot庫的一些常用圖表入手,採用一些簡單的樣本資料開始一些基本的繪圖操作,為後面幾節內容打基礎。
1.1.2 操作步驟
我們先在IPython中建立一個簡單的圖表。IPython是一個非常不錯的工具,它能讓我們互動式地改變圖表並能即刻檢視結果。
(1)在命令列鍵入以下命令來啟動IPython。
70多個方法,輕鬆入門Python視覺化程式設計
(2)匯入需要的方法。
70多個方法,輕鬆入門Python視覺化程式設計
(3)然後鍵入matplotlib plot程式碼。
70多個方法,輕鬆入門Python視覺化程式設計
圖表會顯示在一個新開啟的視窗中,其預設的外觀和輔助資訊如圖1-1所示。
Matplotlib中的基本圖表包括以下元素。
x軸和y軸:水平和垂直的軸線。
x軸和y軸刻度:刻度表示座標軸的分隔,包括最小刻度和最大刻度。
x軸和y軸刻度標籤:表示特定座標軸的值。
繪圖區域:實際繪圖的區域。
70多個方法,輕鬆入門Python視覺化程式設計
圖1-1
你會注意到我們提供給plot()的值是y軸的值。plot()為x軸提供了預設值,在這裡為0~7的線性值。
現在,試著通過plot()的第一個引數新增x軸的值,在剛才的IPython會話中鍵入以下程式碼。
70多個方法,輕鬆入門Python視覺化程式設計
注意IPython是如何對輸入和輸出行進行計數的(In[2]和Out[2])。這能幫助我們記住它在當前會話中的位置,並且IPython還提供了更高階的功能,例如把部分會話儲存到Python檔案中。在資料分析期間,用IPython做原型設計是得到滿意方案的最快捷的方式,我們還可以將特定的會話存到檔案中,以備將來重新生成相同的圖表。
圖表會變成圖1-2所示的樣子。
70多個方法,輕鬆入門Python視覺化程式設計
圖1-2
從圖1-2中可以看到,matplotlib通過擴充套件y軸來適應新的值範圍,並且為了讓我們能區分出新的圖形,自動改變了第二個線條的表示方式(本書使用繪製方式)。
如果不關閉hold屬性(通過呼叫hold(False)方法),所有接下來的圖表都將繪製在相同的座標軸下。這是IPython的pylab模式的預設行為,然而在編寫常規Python指令碼中,hold屬性預設是關閉的。
讓我們基於相同的資料集合多生成一些常見的圖表來做一下比較。可以在IPython中鍵入下面的程式碼,或者在一個單獨的Python指令碼中執行它。
70多個方法,輕鬆入門Python視覺化程式設計
繪製出來的圖表如圖1-3所示。
70多個方法,輕鬆入門Python視覺化程式設計
1.1.3 工作原理
通過呼叫figure()方法,我們創建出一個新的圖表。如果給該方法提供一個字串引數,例如"sample charts",這個字串就會成為視窗的後臺標題。如果通過相同的引數(也可以是數字)呼叫figure()
方法,將會啟用相應的圖表,並且接下來的繪圖操作都在此圖表中進行。接下來,呼叫subplot(231)
方法把圖表分割成2×3的網格。也可以用subplot(3,2,1)這種形式來呼叫,第一個引數是行數,第二個引數是列數,第三個引數表示圖形的標號。接著用幾個簡單的命令建立垂直柱狀圖(bar())和水平柱狀圖(barh())。對於堆疊柱狀圖,我們需要把兩個柱狀圖方法呼叫連在一起。通過設定引數bottom=y,把第二個柱狀圖和前一個柱狀圖連線起來形成堆疊柱狀圖。通過呼叫boxplot()方法可以建立箱線圖,圖中的箱體從下四分位數延伸到上四分位數,並帶有一條中值線。後續我們會繼續介紹箱線圖。
最後建立了一個散點圖來讓大家對基於點的資料集合有所瞭解。當一個數據集合中有成千上萬的資料點時,散點圖很有可能就更合適了。但這裡,我們只是想舉例說明相同資料集合的不同展示方式。
1.1.4 補充說明
現在讓我們回到箱線圖,來解釋一下幾個重要特徵。
預設情況下箱線圖會顯示以下幾部分。
箱體:涵蓋四分位數範圍的矩形。
中值:箱體中間的一條線。
箱須:延伸到最大值和最小值的豎直的線,不包括異常值。
異常值:箱須之外的點。
為了說明上述的資料項,在接下來的程式碼中,我們將用同一個資料集合來繪製箱線圖和直方圖。
70多個方法,輕鬆入門Python視覺化程式設計
生成的圖表如圖1-4所示。
通過上述對比,我們可以觀察到兩種圖表在資料展現上的差異。左圖(箱線圖)呈現了前面提到的5個統計資料,右圖(直方圖)展示了資料集合在給定範圍內的分組情況。
70多個方法,輕鬆入門Python視覺化程式設計
70多個方法,輕鬆入門Python視覺化程式設計
《Python資料視覺化程式設計實戰(第2版)》
[愛爾蘭] 伊戈爾·米洛瓦諾維奇 著
本書是一本使用Python實現資料視覺化程式設計的實戰指南,介紹瞭如何使用Python最流行的庫,通過70餘種方法建立美觀的資料視覺化效果。
全書共9章,分別介紹了準備工作環境、瞭解資料、繪製並定製化圖表、學習更多圖表和定製化、建立3D視覺化圖表、用影象和地圖繪製圖表、使用正確的圖表理解資料、更多的matplotlib知識以及使用Plot.ly進行雲端視覺化。