1. 程式人生 > >Python開發工程師告訴你正確如何上手數據可視化,趕緊圍觀!

Python開發工程師告訴你正確如何上手數據可視化,趕緊圍觀!

大學 幫助 刪除 ima eight 主題 封裝 將在 輸出

技術分享圖片


數據可視化

1. 安裝 Matplotlib

在Linux系統中安裝matplotlib

Ubuntu17.10內置Python2版本和Python3版本,可以采用下面的方式安裝Matplotlib。

$ sudo apt-get install python3-matplotlib

如果你使用的是Python 2.7,執行如下命令:

$ sudo apt-get install python-matplotlib

如果你安裝了pip 就可以使用下面的方式安裝:

$ pip install matplotlib

如果你的安裝比較慢,可以嘗試這種方式來安裝:

$ pip3 install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

常用的國內源地址有:

  • 阿裏雲 http://mirrors.aliyun.com/pypi/simple/

  • 豆瓣(douban) http://pypi.douban.com/simple/

  • 清華大學 https://pypi.tuna.tsinghua.edu.cn/simple/

  • 中國科學技術大學 http://pypi.mirrors.ustc.edu.cn/simple/

在Windows系統中安裝matplotlib

在Windows下下載Python後記得在安裝的時候選擇加入pip到環境變量。然後用下面的命令:

pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

測試matplotlib

>>>import matplotlib

>>>

如果沒有出現任何錯誤信息,就代表安裝成功!

2. 繪制簡單的折線圖

下面來使用 matplotlib 繪制一個簡單的折線圖,再對其進行定制,以實現信息更豐富的數據可視化。我們將使用平方數序列 1 、 4 、 9 、 16 和 25 來繪制折線圖。

技術分享圖片


技術分享圖片


修改標簽文字和線條粗細

圖形表明數字是越來越大的,但標簽文字太小,線條太細。所幸 matplotlib 讓你能夠調整可視化的各個方面。

技術分享圖片


技術分享圖片


校正圖形

圖形更容易閱讀後,我們發現沒有正確地繪制數據:折線圖的終點指出 4.0 的平方為 25 !下 面來修復這個問題。

技術分享圖片


技術分享圖片


使用scatter()繪制散點圖並設置其樣式

有時候,需要繪制散點圖並設置各個數據點的樣式。要繪制單個點,可使用函數 scatter() ,並向它傳遞一對 x 和 y 坐標,它將在指定位置繪制一 個點:

import matplotlib.pyplot as plt

plt.scatter(2, 4)

plt.show()

技術分享圖片


下面來設置輸出的樣式,使其更有趣:添加標題,給軸加上標簽,並確保所有文本都大到能夠看清:

技術分享圖片


技術分享圖片


使用scatter()繪制一系列點

要繪制一系列的點,可向 scatter() 傳遞兩個分別包含 x 值和 y 值的列表,如下所示:

技術分享圖片


技術分享圖片


自動計算數據

手工計算列表要包含的值可能效率低下,需要繪制的點很多時尤其如此。

技術分享圖片


技術分享圖片


matplotlib允許你給散點圖中的各個點指定顏色。默認為藍色點和黑色輪廓,在散點圖包含的數據點不多時效果很好。但繪制很多點時,黑色輪廓可能會粘連在一起。要刪除數據點的輪廓,可在調用scatter()時傳遞實參edgecolor='none':

自定義顏色

要修改數據點的顏色,可向scatter()傳遞參數c,並將其設置為要使用的顏色的名稱,如下所示:

plt.scatter(x_values, y_values, c='red', edgecolor='none', s=40)

技術分享圖片


你還可以使用RGB顏色模式自定義顏色。

plt.scatter(x_values, y_values, c=(0, 0, 0.8), edgecolor='none', s=40)

技術分享圖片


(0, 0, 0.8) 它們分別表示紅色、綠色和藍色分量。值越接近0,指定的顏色越深,值越接近1,指定的顏色越淺。

使用顏色映射

顏色映射(colormap)是一系列顏色,它們從起始顏色漸變到結束顏色。在可視化中,顏色映射用於突出數據的規律,例如,你可能用較淺的顏色來顯示較小的值,並使用較深的顏色來顯示較大的值。

技術分享圖片


技術分享圖片


這些代碼將y值較小的點顯示為淺藍色,並將y值較大的點顯示為深藍色。

自動保存圖表

plt.savefig('squares_plot.png', bbox_inches='tight')

第二個實參指定將圖表多余的空白區域裁剪掉。如果要保留圖表周圍多余的空白區域,可省略這個實參。

3. 隨機漫步

在自然界、物理學、生物學、化學和經濟領域,隨機漫步都有其實際用途。例如,漂浮在水滴上的花粉因不斷受到水分子的擠壓而在水面上移動。水滴中的分子運動是隨機的,因此花粉在水面上的運動路徑猶如隨機漫步。我們稍後將編寫的代碼模擬了現實世界的很多情形。

創建RandomWalk()類

為模擬隨機漫步,我們將創建一個名為RandomWalk的類,它隨機地選擇前進方向。這個類需要三個屬性,其中一個是存儲隨機漫步次數的變量,其他兩個是列表,分別存儲隨機漫步經過的每個點的x和y坐標。

RandomWalk類只包含兩個方法:__init__ ()和fill_walk(),其中後者計算隨機漫步經過的所有點。下面先來看看__init__(),如下所示:

技術分享圖片


選擇方向

我們將使用fill_walk()來生成漫步包含的點,並決定每次漫步的方向。

技術分享圖片


繪制隨機漫步圖

下面的代碼將隨機漫步的所有點都繪制出來:

技術分享圖片


技術分享圖片


給點著色

我們將使用顏色映射來指出漫步中各點的先後順序,並刪除每個點的黑色輪廓,讓它們的顏色更明顯。為根據漫步中各點的先後順序進行著色,我們傳遞參數c,並將其設置為一個列表,其中包含各點的先後順序。由於這些點是按順序繪制的,因此給參數c指定的列表只需包含數字1~5000,如下所示:

技術分享圖片


技術分享圖片


重新繪制起點和終點

除了給隨機漫步的各個點著色,以指出它們的先後順序外,如果還能呈現隨機漫步的起點和終點就更好了。為此,可在繪制隨機漫步圖後重新繪制起點和終點。我們讓起點和終點變得更大,並顯示為不同的顏色,以突出它們,如下所示:

技術分享圖片


技術分享圖片


隱藏坐標軸

如果不想顯示坐標的尺寸,可以隱藏:

技術分享圖片


技術分享圖片


調整尺寸以適合屏幕

在不同的電腦上面,由於屏幕的不同,圖像的大小也是不同的,為了達到這種效果,我們可以這樣做:

技術分享圖片


技術分享圖片


4. Matplotlib進階-Seaborn

Seaborn其實是在matplotlib的基礎上進行了更高級的API封裝,從而使得作圖更加容易,在大多數情況下使用seaborn就能做出很具有吸引力的圖。

安裝方式

安裝方式類似於matplotlib , 在Windows下和Linux下面都可以采用pip安裝方式。

set_style( )

set_style( )是用來設置主題的,Seaborn有五個預設好的主題: darkgrid , whitegrid , dark , white ,和 ticks 默認: darkgrid

技術分享圖片


技術分享圖片


直方圖

直方圖的繪制:

技術分享圖片


技術分享圖片


箱型圖

箱形圖(Box-plot)又稱為盒須圖、盒式圖或箱線圖,是一種用作顯示一組數據分散情況資料的統計圖。因形狀如箱子而得名。

技術分享圖片


技術分享圖片


聯合分布

兩個變量的畫圖

技術分享圖片


技術分享圖片


不用圓點表示的話也是可以的,可以用其他方式來表示,比如六角形來表示:

技術分享圖片


技術分享圖片


熱力圖

相關系數是最早由統計學家卡爾·皮爾遜設計的統計指標,是研究變量之間線性相關程度的量,一般用字母 r 表示。由於研究對象的不同,相關系數有多種定義方式,較為常用的是皮爾遜相關系數。

相關系數是用以反映變量之間相關關系密切程度的統計指標。相關系數是按積差方法計算,同樣以兩變量與各自平均值的離差為基礎,通過兩個離差相乘來反映兩變量之間相關程度;著重研究線性的單相關系數。公式:

技術分享圖片


技術分享圖片


多變量圖

關註數據框中各個特征之間的相關關系,呈現圖形的展示,給人以直觀的感受。而不是"冰冷"的數字。可以非常方便的找到各個特征之間呈現什麽樣的關系。比如線性,離散等關系。

技術分享圖片


技術分享圖片


參考文獻:《Python編程:從入門到實戰》

如果你對於學習Python整個流程有任何的問題,可以隨時來咨詢我,學習方法,學習路線,系統學習規劃,希望可以幫助大家少走彎路。這是我的2000人Python交流學習群:639584010,有問題隨時交流。

Python開發工程師告訴你正確如何上手數據可視化,趕緊圍觀!