中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
[Python從零到壹] 十七.可視化分析之Matplotlib、Pandas、Echarts入門萬...

歡迎大家來到“Python從零到壹”,在這里我將分享約200篇Python系列文章,帶大家一起去學(xué)習(xí)和玩耍,看看Python這個有趣的世界。所有文章都將結(jié)合案例、代碼和作者的經(jīng)驗講解,真心想把自己近十年的編程經(jīng)驗分享給大家,希望對您有所幫助,文章中不足之處也請海涵。Python系列整體框架包括基礎(chǔ)語法10篇、網(wǎng)絡(luò)爬蟲30篇、可視化分析10篇、機器學(xué)習(xí)20篇、大數(shù)據(jù)分析20篇、圖像識別30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的關(guān)注、點贊和轉(zhuǎn)發(fā)就是對秀璋最大的支持,知識無價人有情,希望我們都能在人生路上開心快樂、共同成長。

前一篇文章講述了數(shù)據(jù)預(yù)處理、Jieba分詞和文本聚類知識,這篇文章主要介紹Matplotlib和Pandas擴展包繪圖的基礎(chǔ)用法,同時引入Echarts技術(shù),該技術(shù)主要應(yīng)用于網(wǎng)站可視化展示中。本文內(nèi)容以實例為主,給讀者最直觀的圖形感受。兩萬字基礎(chǔ)文章,希望對您有所幫助。

文章目錄

  • 一.Matplotlib可視化分析
    • 1.繪制曲線圖
    • 2.繪制散點圖
    • 3.繪制柱狀圖
    • 4.繪制餅圖
    • 5.繪制3D圖形
  • 二.Pandas讀取文件可視化分析
    • 1.繪制折線對比圖
    • 2.繪制柱狀圖和直方圖
    • 3.繪制箱圖
  • 三.ECharts可視化技術(shù)初識
    • 1.ECharts
    • 2.簡單示例
  • 四.總結(jié)

下載地址:

前文賞析:

第一部分 基礎(chǔ)語法

第二部分 網(wǎng)絡(luò)爬蟲

第三部分 數(shù)據(jù)分析和機器學(xué)習(xí)

第四部分 Python圖像處理

第五部分 NLP與文本挖掘

第六部分 人工智能入門知識

第七部分 圖像識別與目標(biāo)檢測

第八部分 網(wǎng)絡(luò)攻防與AI安全

第九部分 知識圖譜構(gòu)建實戰(zhàn)

第十部分 人工智能高級案例

作者新開的“娜璋AI安全之家”將專注于Python和安全技術(shù),主要分享Web滲透、系統(tǒng)安全、人工智能、大數(shù)據(jù)分析、圖像識別、惡意代碼檢測、CVE復(fù)現(xiàn)、威脅情報分析等文章。雖然作者是一名技術(shù)小白,但會保證每一篇文章都會很用心地撰寫,希望這些基礎(chǔ)性文章對你有所幫助,在Python和安全路上與大家一起進步。


可視化技術(shù)是將數(shù)據(jù)轉(zhuǎn)換成圖形或圖像呈現(xiàn)在屏幕上,再進行視覺交互。在數(shù)據(jù)分析中,可視化是非常重要的環(huán)節(jié),它通過呈現(xiàn)圖形圖像直觀的體現(xiàn)數(shù)據(jù)或算法的好壞,給讀者最直觀的視覺信息。

一.Matplotlib可視化分析

基礎(chǔ)用法參考前文:

1.繪制曲線圖

首先簡單地繪制三條直線,其斜率分別為0.5、1.5和3.0,完整代碼如下:

# -*- coding: utf-8 -*- #By:Eastmount CSDN import numpy as np import matplotlib.pyplot as plt X = np.arange(0,4) print(X) plt.plot(X, X*0.5, label='y=x*0.5') plt.plot(X, X*1.5, label='y=x*1.5') plt.plot(X, X*3.0, label='y=x*3.0') plt.legend() plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

輸出如圖所示,其中X為數(shù)組[0,1,2,3],X×0.5表示數(shù)組元素都乘以0.5,其結(jié)果為:[0,0.5,1.0,1.5],同理X×1.5結(jié)果為:[0.0,1.5,3.0,4.5]。

  • import matplotlib.pyplot as plt
    表示調(diào)用Matplotlib子類pyplot繪圖,并as重命名為plt,方便代碼調(diào)用。
  • plt.plot(X, X0.5, label='y=x0.5')
    表示調(diào)用plot()繪圖,參數(shù)分別為X坐標(biāo)、Y坐標(biāo)和標(biāo)簽label。
  • plt.legend()
    顯示右上角的圖標(biāo),每條線對應(yīng)label的含義。
  • plt.show()
    最后調(diào)用該函數(shù)顯示繪制好的圖形。

下面將上圖繪制成不同類型的線條。核心修改代碼如下:

# -*- coding: utf-8 -*- 
#By:Eastmount CSDN
import numpy as np  
import matplotlib.pyplot as plt

X = np.arange(0,4)
print(X)
plt.plot(X, X*0.5, 'r-', label='y=x*0.5')
plt.plot(X, X*1.5, 'y--', label='y=x*1.5')
plt.plot(X, X*3.0, 'g:', label='y=x*3.0')
plt.legend()
plt.show() 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

其中,'r-'表示紅色直線,'y–'表示黃色虛線,'g:'表示綠色點線,輸出如圖所示。

但是上圖繪制的圖形有點細(xì),怎么解決呢?設(shè)置參數(shù)linewidth=2.0即可,參考下面的代碼,Matplotlib繪制sin函數(shù)和cos函數(shù)曲線。

# -*- coding: utf-8 -*- #By:Eastmount CSDN import numpy as np import matplotlib.pyplot as plt X = np.linspace(-np.pi,np.pi,256,endpoint=True) C = np.cos(X) S = np.sin(X) plt.plot(X, C, color='blue', linewidth=2.0, linestyle='-', label='$sin(x)$') plt.plot(X, S, color='red', linewidth=2.0, linestyle='--', label='$cos(x)$') plt.legend() plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

代碼 np.linspace(-np.pi,np.pi,256,endpoint=True) 表示輸出負(fù)π(-np.pi)到正π(np.pi)范圍,然后調(diào)用numpy庫的cos()函數(shù)和sin()函數(shù)計算C值和S值,最后調(diào)用plt.plot()繪制直線圖,plot()函數(shù)中的參數(shù)含義如下:

  • X:橫坐標(biāo)或X坐標(biāo)值
  • C\S:縱坐標(biāo)或Y坐標(biāo)值,設(shè)置為C值和S值
  • color:直線的顏色,blue表示藍色、red報表時紅色,可以簡寫如'r'
  • linewidth:繪制線條的粗細(xì)程度
  • linestyle:設(shè)置線條的款式,-表示直線、–表示虛線、:表示點線、-.表示點劃線
  • label:設(shè)置繪制曲線的標(biāo)簽

輸出如圖所示。

最后,感興趣的同學(xué)可以繪制自己喜歡的曲線,下面代碼是繪制浪漫的心形函數(shù)(笛卡爾曲線)。Python可視化分析可以應(yīng)用于更多的曲線繪制,比如在數(shù)據(jù)擬合、回歸分析、數(shù)學(xué)分析等領(lǐng)域繪制曲線。

# -*- coding: utf-8 -*- 
#By:Eastmount CSDN
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-8 , 8, 1024)
y1 = 0.618*np.abs(x) - 0.8* np.sqrt(64-x**2)
y2 = 0.618*np.abs(x) + 0.8* np.sqrt(64-x**2) 
plt.plot(x, y1, color = 'r')
plt.plot(x, y2, color = 'r')
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

輸出如圖所示:


2.繪制散點圖

Python調(diào)用Matplotlib繪制散點圖有兩種方法,一種是調(diào)用scatter()函數(shù)實現(xiàn),另一種方法是調(diào)用plot()函數(shù)實現(xiàn),這里主要講述scatter()函數(shù)繪制散點圖的方法。從給出的一堆隨機點(包含x、y坐標(biāo))中調(diào)用scatter()繪制散點圖,代碼如下。

# -*- coding: utf-8 -*- #By:Eastmount CSDN import numpy as np import matplotlib.pyplot as plt #構(gòu)造數(shù)據(jù) x = np.random.randn(200) y = np.random.randn(200) print(x[:10]) print(y[:10]) #繪制散點圖 plt.scatter(x, y) plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

numpy中有一些用來產(chǎn)生隨機數(shù)的常用函數(shù),randn()和rand()就屬于其中。

  • numpy.random.randn(d0, d1, …, dn):從標(biāo)準(zhǔn)正態(tài)分布中返回一個或多個樣本值。
  • numpy.random.rand(d0, d1, …, dn):產(chǎn)生隨機樣本,并且數(shù)字位于[0, 1]中。

代碼中產(chǎn)生了200個服從標(biāo)準(zhǔn)正態(tài)分布的隨機樣本點,對應(yīng)x數(shù)組和y數(shù)組,前10行輸出如下:

[-0.94086693 -0.92910167 -0.83885859 -0.50927277  2.12230463  0.45695791
 -0.59766636 -0.62862962  0.28245908  1.46415206]
[ 0.43828148  0.76547797  1.18670217  0.31996158  0.00350372  1.02620566
  3.04573837 -0.59712547  0.45061506 -1.63996253]
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

產(chǎn)生的200個隨機散點圖如圖所示。

為了區(qū)分點,scatter()提供了參數(shù)設(shè)置不同點的顏色及大小,其中s參數(shù)指定大小,c參數(shù)指定顏色,隨機為這200個點分配不同的大小及顏色,代碼如下。

# -*- coding: utf-8 -*- #By:Eastmount CSDN import numpy as np import matplotlib.pyplot as plt #構(gòu)造數(shù)據(jù) x = np.random.randn(200) y = np.random.randn(200) print(x[:10]) print(y[:10]) size = 50*np.random.randn(200) colors = np.random.rand(200) #繪制散點圖 plt.scatter(x, y, s=size, c=colors) plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

輸出如圖所示。

在進行聚類、分類分析中,通常會將不同類型的數(shù)據(jù)標(biāo)識成一組(類標(biāo)),而對應(yīng)的可視化操作也是將散點圖繪制成不同的顏色或形狀。下面代碼即是分成三種不同類型的點集。

# -*- coding: utf-8 -*- 
#By:Eastmount CSDN
import numpy as np
import matplotlib.pyplot as plt

#隨機產(chǎn)生90個二維數(shù)組
x = np.random.rand(90,2)
print(x)

#numpy中ones()用來構(gòu)造全一矩陣
label = list(np.ones(40))+list(2*np.ones(30))+list(3*np.ones(20)) #類標(biāo)label為1、2、3
label = np.array(label)
print(label)
print(type(label))

idx1 = np.where(label == 1)
idx2 = np.where(label == 2)
idx3 = np.where(label == 3)

#繪圖 參數(shù):x值、y值、點樣式、顏色、類標(biāo)、粗細(xì)
p1 = plt.scatter(x[idx1,0], x[idx1,1], marker = 'x', color = 'r', label='1', s = 40)
p2 = plt.scatter(x[idx2,0], x[idx2,1], marker = '+', color = 'b', label='2', s = 30)
p3 = plt.scatter(x[idx3,0], x[idx3,1], marker = 'o', color = 'c', label='3', s = 20)
plt.legend(loc = 'upper right')
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

輸出如圖所示。

代碼中調(diào)用np.random.rand(90,2)函數(shù)隨機成才90個二維數(shù)組,分別對應(yīng)90個點,其中x[indx1,0]表示獲取第一維坐標(biāo)作x軸,x[indx1,1]表示獲取第二維坐標(biāo)作y軸。然后調(diào)用np.ones()函數(shù)構(gòu)造全是1的矩陣,生成的變量label對應(yīng)90個點的類標(biāo),前40個點類標(biāo)為1、中間30個點類標(biāo)為2、最后20個點類標(biāo)為3。最后調(diào)用plt.scatter()函數(shù)繪制散點圖,即:

  • plt.scatter(x[idx1,0], x[idx1,1], marker = 'x’, color = 'r’, label='1’, s = 40)

代碼表示繪制類標(biāo)(label)為1的散點,其他參數(shù)包括x值和y值,設(shè)置點樣式(marker= 'x’)為叉形,設(shè)置顏色(color = 'r’)為紅色,粗細(xì)為40。

這部分主要講述了scatter()函數(shù)繪制散點圖,后面的聚類和分類分析中也會講解另一種方法plot()繪制散點圖。


3.繪制柱狀圖

柱狀圖主要用于直觀的對比統(tǒng)計數(shù)據(jù),是常用的一種數(shù)學(xué)統(tǒng)計圖形。下列代碼是產(chǎn)生四個用戶的隨機月消費數(shù)據(jù),然后調(diào)用bar()函數(shù)繪制圖形。代碼如下:

# -*- coding: utf-8 -*- #By:Eastmount CSDN import numpy as np import matplotlib.pyplot as plt #隨機產(chǎn)生4個整數(shù)(0到100之間) data = np.random.randint(0,100,4) print(data) ind = np.arange(4) #四個用戶 print(ind) width = 0.35 #設(shè)置寬度 x = ['UserA', 'UserB', 'UserC', 'UserD'] plt.bar(ind, data, width, color='green', label='Data') plt.xlabel('Username') plt.ylabel('Consumption') plt.title('Compare four user monthly consumption data') plt.legend() plt.xticks(ind+width/2, x, rotation=40) #旋轉(zhuǎn)40度 plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

核心代碼詳解如下:

  • np.random.randint(0,100,4)
    隨機生成0到100之間的4個隨機數(shù),輸出為[3 66 98 42]。
  • plt.bar(ind, data, width, color='green’, label='Data’)
    調(diào)用bar()函數(shù)繪制柱狀圖,其中ind表示用戶的序號,0到3共四個用戶;data表示柱狀圖對應(yīng)的高度或值;width設(shè)置柱狀圖之間的間隔寬度,即0.35;最后設(shè)置顏色類標(biāo)。
  • plt.xticks(ind+width/2, x, rotation=40)
    設(shè)置X軸坐標(biāo)值的位置和旋轉(zhuǎn)度數(shù),ind+width/2表示間隔中間的位置顯示標(biāo)簽,顯示的值為四個用戶名[UserA, UserB, UserC, UserD],并且旋轉(zhuǎn)40度。

其他設(shè)置標(biāo)題、X軸、Y軸前面已經(jīng)敘述,這里不再解釋。最后輸出如圖所示。

下圖是柱狀圖的擴展版,它是對學(xué)習(xí)、旅游、看劇、聊天四個選項男女比例的對比。采用np.array()定義數(shù)組,然后根據(jù)男女比例進行繪圖。完整代碼如下:

# -*- coding: utf-8 -*- 
#By:Eastmount CSDN
import matplotlib.pyplot as plt
import numpy as np

num = np.array([1342, 6092, 4237, 8219])   #數(shù)量
ratio = np.array([0.75, 0.76, 0.72, 0.75]) #男性占比
men = num * ratio
women = num * (1-ratio)
x = ['學(xué)習(xí)',u'旅游',u'看劇',u'聊天']

plt.rc('font', family='SimHei', size=13)   #中文字體顯示

width = 0.5
idx = np.arange(4)
plt.bar(idx, men, width, color='red', label='男性用戶')
plt.bar(idx, women, width, bottom=men, color='yellow', label='女性用戶')
plt.xticks(idx+width/2, x, rotation=40)
plt.legend()
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

輸出如圖所示。


4.繪制餅圖

繪制餅圖主要調(diào)用plt.pie()函數(shù)實現(xiàn),這里僅舉個簡單示例供大家學(xué)習(xí),輸出下圖所示。

# -*- coding: utf-8 -*- #By:Eastmount CSDN import matplotlib.pyplot as plt #每一塊占得比例,總和為100 mm = [45, 30, 25] n = mm[0]+mm[1]+mm[2] a = (mm[0]*1.0*100/n) b = (mm[1]*1.0*100/n) c = (mm[2]*1.0*100/n) fracs = [a, b, c] print(a, b, c, n) #離開整體的距離 explode=(0, 0, 0.08) labels = 'A', 'B', 'C' #繪制圖形 plt.pie(fracs, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True, startangle=90, colors = ('c', 'r', 'y')) plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

首先計算a、b、c所占mm的比例,輸出值為[45.0, 30.0, 25.0]。接下來:

  • 調(diào)用plt.pie()繪制餅狀圖,參數(shù)fracs表示占比;
  • explode表示離開整體圓形的距離,比如C離開了0.08的距離;
  • labels表示類標(biāo);autopct=’%1.1f%%'表示顯示的數(shù)據(jù)保留一位小數(shù);
  • shadow=True表示圖形存在陰影;
  • startangle表示開始的角度,默認(rèn)值為0。

從此處開始按逆時針方向依次展開顯示A、B、C三個板塊,顏色依次為青色、紅色、黃色。


5.繪制3D圖形

Python調(diào)用Axes3D子類實現(xiàn)繪制3D圖形,繪制3D坐標(biāo)代碼如下:

import matplotlib.pyplot as plt            #繪圖用的模塊
from mpl_toolkits.mplot3d import Axes3D    #繪制3D坐標(biāo)的函數(shù)
fig1=plt.figure()                          #創(chuàng)建一個繪圖對象
ax=Axes3D(fig1)                           #用這個繪圖對象創(chuàng)建一個Axes對象
plt.show()                                #顯示模塊中所有繪圖對象
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

繪制的3D坐標(biāo)如圖所示。

更多的3D繪圖方法請讀者下來研究,因為本書主要以數(shù)據(jù)2D圖形可視化為主,下面的代碼是一個簡單繪制3D圖形的實例,包含詳細(xì)注釋。

# -*- coding: utf-8 -*- #By:Eastmount CSDN from matplotlib import pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D # 繪制3D坐標(biāo)的函數(shù) fig = plt.figure() #創(chuàng)建一個繪圖對象 ax = Axes3D(fig) #用這個繪圖對象創(chuàng)建一個Axes對象 X = np.arange(-2, 2, 0.25) #X軸-2到2之間 Y = np.arange(-2, 2, 0.25) #Y軸-2到2之間 print(Y) X, Y = np.meshgrid(X, Y) #用兩個坐標(biāo)軸上的點在平面上畫格 R = np.sqrt(X**2 + Y**2) #X和Y的平方和開根號 Z = np.sin(R) #計算sin函數(shù)賦值為Z坐標(biāo) #具體函數(shù)方法可用 help(function) 查看,如:help(ax.plot_surface) ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow') #給三個坐標(biāo)軸注明 ax.set_xlabel('x label', color='r') ax.set_ylabel('y label', color='g') ax.set_zlabel('z label', color='b') plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

輸出如圖所示。


二.Pandas讀取文件可視化分析

本小節(jié)主要講述Pandas讀取文件進行可視化分析的常用操作。假設(shè)存在2002年到2014年北京、上海、貴陽、武漢、長沙五個城市的商品房房價信息(虛構(gòu)數(shù)據(jù)),如表所示,并存儲在test16.csv文件中。作者將結(jié)合Pandas擴展包對其數(shù)據(jù)集進行可視化講解。

yearBeijingShanghaiGuiyangWuhanChangsha
200247644134164319281802
200347375118194920722040
20045020.9358551801.682516.322039.09
20056788.0968422168.93061.772313.73
20068279.5171962372.663689.642644.15
200711553.2683612901.634664.033304.74
2008124188195314947813288
20091379912840376253293648
20101778214464441057464418
201116851.9514603.245069.527192.95862.39
201217021.6314061.374846.147344.056100.87
20131855316420502577176292
20141883316787560879516116
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

1.繪制折線對比圖

繪制折線對比圖代碼見源文件。

# -*- coding: utf-8 -*- #By:Eastmount CSDN import pandas as pd import matplotlib.pyplot as plt #讀取文件并顯示前6行數(shù)據(jù) index_col用作行索引的列名 data = pd.read_csv('data.csv',index_col='year') print(data.shape) print(data.head(6)) plt.rcParams['font.sans-serif'] = ['simHei'] #用來正常顯示中文標(biāo)簽 plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負(fù)號 data.plot() plt.savefig(u'test.png', dpi=500) plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

輸出如圖所示,最上面藍線為“北京”的房價,接著綠線為“上?!钡姆績r,接下來的三條線從上往下依次為青色線“武漢”房價、紫色線“長沙”房價、“紅色”線長沙房價。

同時,輸出的前六行數(shù)據(jù)如下:

>>> 
(13, 5)
       Beijing  Shanghai  Guiyang    Wuhan  Changsha
year                                                
2002   4764.00    4134.0  1643.00  1928.00   1802.00
2003   4737.00    5118.0  1949.00  2072.00   2040.00
2004   5020.93    5855.0  1801.68  2516.32   2039.09
2005   6788.09    6842.0  2168.90  3061.77   2313.73
2006   8279.51    7196.0  2372.66  3689.64   2644.15
2007  11553.26    8361.0  2901.63  4664.03   3304.74
>>> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

重點知識是:

  1. 調(diào)用pandas擴展包的read_csv()函數(shù)讀取數(shù)據(jù)并繪制圖形,其中讀取數(shù)據(jù)時的index_col參數(shù)表示獲取了年份(year)索引,按照年份繪圖。
  2. plt.rcParams代碼用于設(shè)置中文字符和顯示負(fù)號。
  3. savefig('test16.png’, dpi=500)函數(shù)將在本地存儲一張“test.png”的圖片,像素為500。

如果讀者想僅僅獲取某一個城市的房價,比如“貴陽”,再繪制成折線圖,如何實現(xiàn)呢?核心代碼如下:

  • data = pd.read_csv(“test16.csv”,index_col='year’)
    讀取data.csv文件數(shù)據(jù),并且獲取其索引為年份(year),即第一列數(shù)據(jù),并將讀取的結(jié)果賦值給data變量。
  • gy = data['Guiyang’]
    獲取data數(shù)組中“Guiyang”的一列數(shù)據(jù),即貴陽的房價數(shù)據(jù),并賦值給gy變量。獲取數(shù)據(jù)的兩種表示方法:data['Guiyang’]或data.Guiyang。
# -*- coding: utf-8 -*- #By:Eastmount CSDN import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('data.csv',index_col='year') plt.rcParams['font.sans-serif'] = ['simHei'] plt.rcParams['axes.unicode_minus'] = False #獲取貴陽數(shù)據(jù)集并繪圖 gy = data['Guiyang'] print(gy, type(gy)) gy.plot() data['Beijing'].plot(color='r') plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

下圖為貴陽市商品房價的折線增長圖。


2.繪制柱狀圖和直方圖

下面針對貴陽的商品房房價數(shù)據(jù)集進行柱狀圖繪制,調(diào)用Pandas提供的plot()函數(shù)。plot()默認(rèn)是生成曲線圖,可以通過kind參數(shù)生成其他類型的圖形,可選值為:line(折線圖)、bar(條圖)、barh(橫向柱狀圖)、kde(密度圖)、density(密度圖)、scatter(散點圖)。完整代碼如下:

# -*- coding: utf-8 -*-
#By:Eastmount CSDN
import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv('data.csv', index_col='year')    
plt.rcParams['font.sans-serif'] = ['simHei']
plt.rcParams['axes.unicode_minus'] = False 

#在圖表中創(chuàng)建子圖 4個子圖
p1 = plt.subplot(221)   
data['Beijing'].plot(color='r', kind='bar')
plt.sca(p1)

p2 = plt.subplot(222)   
data['Guiyang'].plot(color='y', kind='barh')
plt.sca(p2)

p3 = plt.subplot(223)
data.Shanghai.plot(kind='line')
plt.sca(p3)

p4 = plt.subplot(224)   
data['Changsha'].plot(kind='kde')
plt.sca(p4)
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

輸出如下圖所示,需要注意采用plt.subplot(221)函數(shù)增加子圖,22表示共4(2*2)個子圖,1表示第一張圖;plt.subplot(223)函數(shù)表示繪制第三個子圖。代碼plt.sca(p3)用于增加子圖,最后調(diào)用plt.show()函數(shù)顯示。

Pandas的DataFrame提供的plot()函數(shù)設(shè)置參數(shù)繪制不同類型圖形,第一張為北京市房價數(shù)據(jù)對應(yīng)的柱狀圖(bar),第二張為貴陽市的橫向柱狀圖(barh),第三張顯示上海市房價數(shù)據(jù)對應(yīng)的折線圖,第四張為長沙市的概率密度圖。

如果想生成累積柱狀圖,則只需指定stacked=True即可,核心代碼:

# -*- coding: utf-8 -*- #By:Eastmount CSDN import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('data.csv', index_col='year') data.plot(kind='bar', stacked=True) plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

輸出如圖所示。從圖中可以對比五個城市2002年到2014年的商品房價信息,并采用不同顏色進行區(qū)分。

如果想對比不同子圖,可以利用參數(shù)subplots繪制DataFrame中每個序列對應(yīng)的子圖。核心代碼如下:

data.plot(color='y', kind='barh', subplots=True)
plt.show()
  • 1
  • 2
  • 1
  • 2

輸出如圖所示,對比五個城市的房價信息。

下面簡單講解繪制直方圖。你或許會疑惑直方圖和柱狀圖有什么區(qū)別呢?

直方圖是用來描述等距數(shù)據(jù)或等比數(shù)據(jù),直觀上,直方圖矩形之間是銜接在一起的,表示數(shù)據(jù)間的數(shù)學(xué)關(guān)系;柱形圖則留有空隙,表示僅作為兩個或多個不同的類,而不具有數(shù)學(xué)相關(guān)性質(zhì)。直方圖的Y軸是頻率,柱形圖的Y軸可以是數(shù)值。

直方圖是一種展示數(shù)據(jù)頻數(shù)或頻率的特殊柱狀圖,y 軸是頻數(shù)或頻率的度量,既可以是頻數(shù)(計數(shù))也可以是頻率(占比)。下面這段代碼是繪制隨機產(chǎn)生的1000個點的直方圖。

# -*- coding: utf-8 -*- #By:Eastmount CSDN import numpy as np import pandas as pd import matplotlib.pyplot as plt data = np.random.normal(5.0, 3.0, 1000) # mean=5.0 rms=3.0 pData = pd.DataFrame(data) print(pData) print(type(pData)) p1 = pData.hist(histtype='stepfilled',bins=30,normed=True) plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

這里調(diào)用pd.DataFrame(data)函數(shù)將numpy隨機產(chǎn)生的1000個點數(shù)組轉(zhuǎn)換為DataFrame類型,然后再調(diào)用hist()函數(shù)繪制直方圖。其中,參數(shù)histtype='stepfilled’表示連續(xù)顯示,柱狀圖之間沒有間隔線;bins=30表示將區(qū)間設(shè)置為30,即為直方圖的寬度,默認(rèn)是10個區(qū)間;normed=True表示將直方圖標(biāo)準(zhǔn)化處理。生成圖形如圖所示。


3.繪制箱圖

箱圖是一種用于表示分布的圖形,展示數(shù)據(jù)的分布情況,由五個分位數(shù)組成,具體包括上四分位數(shù)、下四分位數(shù)、中位數(shù)以及上下5%的極值。下面是Python調(diào)用Pandas擴展包繪制箱圖的源碼。

# -*- coding: utf-8 -*-
#By:Eastmount CSDN
import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv('data.csv',index_col='year')    
gy = data['Guiyang']  
gy.plot(kind='box')
plt.show()  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

下圖為繪制的貴陽房價箱圖,同樣可以調(diào)用DataFrame的boxplot()函數(shù)繪制箱圖。

講到這里,Python調(diào)用Matplotlib和Pandas進行可視化分析的兩種最常用方法已經(jīng)介紹完畢。Matplotlib作為眾多Python可視化包的鼻祖,其功能是非常強大和復(fù)雜的,其他很多工具都是基于Matplotlib的輕量級封裝,比如Pandas、Seaborn等。

其中,Seaborn是一個基于Matplotlib的可視化庫,旨在使默認(rèn)的數(shù)據(jù)可視化更加悅目,簡化復(fù)雜圖表的創(chuàng)建,可以與Pandas很好地集成。這里就不再敘述,僅舉一個調(diào)用Seaborn擴展包繪制熱點圖的簡單示例,代碼如下。

# -*- coding: utf-8 -*- #By:Eastmount CSDN import pandas as pd import matplotlib.pyplot as plt import seaborn as sns data = pd.read_csv('data.csv',index_col='year') data = data.corr() sns.heatmap(data) plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

輸出如圖所示。


三.ECharts可視化技術(shù)初識

數(shù)據(jù)可視化是指將結(jié)構(gòu)或非結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)換為可視化的圖表,可視化技術(shù)能將數(shù)據(jù)以更加直觀的形式呈現(xiàn)出來,從而增加數(shù)據(jù)的說服力及客觀性。本書主要結(jié)合Python講解數(shù)據(jù)分析的可視化技術(shù),包括前面的Matplotlib和Pandas擴展包,而更多的開源圖表庫也能給大家提供美觀、簡潔的圖形,ECharts是經(jīng)典的一款網(wǎng)站可視化圖標(biāo)庫。

本書的另一個宗旨是讓讀者了解一些相關(guān)或比較前沿的信息技術(shù)知識,這些擴展知識可能給您提供一些想法或解決一些難題,這里作者簡單普及下ECharts技術(shù)。

1.ECharts

ECharts是一個純 JavaScript 的圖表庫,能流暢的運行在電腦端和移動設(shè)備上,兼容當(dāng)前絕大部分主流瀏覽器(包括IE8/9/10/11、Chrome、Firefox、Safari等),底層依賴輕量級的 Canvas 類庫 ZRender,提供直觀、生動、可交互和個性化定制的數(shù)據(jù)可視化圖表。

ECharts 提供了常規(guī)的折線圖、柱狀圖、散點圖、餅圖、K線圖,用于統(tǒng)計的盒形圖,用于地理數(shù)據(jù)可視化的地圖、熱力圖、線圖,用于關(guān)系數(shù)據(jù)可視化的關(guān)系圖、Treemap、多維數(shù)據(jù)可視化的平行坐標(biāo),還有用于 BI 的漏斗圖、儀表盤等,并且支持圖與圖之間的混搭。

下圖顯示ECharts官網(wǎng)示例,推薦大家從官網(wǎng)進行學(xué)習(xí),它提供了詳細(xì)的實例及使用文檔。ECarts官網(wǎng)為:

下面通過簡單示例介紹ECharts入門知識,它廣泛應(yīng)用于網(wǎng)站及可視化項目中。


2.簡單示例

1.下載相關(guān)文件
首先,下載最新的echarts.min.js文件,它提供了ECharts多種圖形的支撐庫。下載地址為:http://echarts.baidu.com/download.html,打開網(wǎng)址顯示的下載頁面如圖所示。

2.Script配置文件
然后需要在中引入已經(jīng)下載的echarts.min.js文件,它提供了ECharts多種圖形繪制的支撐庫文件,并調(diào)用ECharts圖標(biāo)庫。核心代碼如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <!-- 引入 ECharts 文件 -->
    <script src='echarts.min.js'></script>
</head>
</html> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3.繪制圖形
下面blog17_01.html代碼是繪制貴州省六個城市的柱狀圖,在代碼中引入ECharts后,可以直接調(diào)用。

<script src='echarts.min.js'></script>
  • 1
  • 1

核心代碼 :

  • var myChart = echarts.init(document.getElementById('main’))

初始化ECharts實例,獲取id為main的div布局,并賦值給myChart變量,后面直接調(diào)用myChart變量中的函數(shù),var在JavaScript中用于聲明變量。然后在option中可以定義圖形的標(biāo)題(title)、坐標(biāo)(tooltip)、標(biāo)注圖(legend)、X下標(biāo)(xAxis)等。最后調(diào)用myChart.setOption(option)函數(shù)顯示剛指定的配置項和數(shù)據(jù)圖表。

<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <title>ECharts</title>
    <!-- 引入 echarts.js -->
    <script src='echarts.min.js'></script>
</head>
<body>
    <!-- 為echarts設(shè)置一個寬度為600、高度為400的區(qū)域,用于繪圖 -->
    <div id='main' style='width: 600px;height:400px;'></div>
    <script type='text/javascript'>
        // 基于準(zhǔn)備好的區(qū)域,初始化echarts實例
        var myChart = echarts.init(document.getElementById('main'));

        // 指定圖表的配置項和數(shù)據(jù)
        var option = {
            title: {
                text: 'ECharts 入門示例'
            },
            tooltip: {},
            legend: {
              data:['數(shù)量']
            },
            xAxis: {
              data: ['貴陽市','遵義市','凱里市','六盤水市','都勻市','畢節(jié)市']
            },
            yAxis: {},
            series: [{
                name: '數(shù)量',
                type: 'bar',
                data: [5, 20, 36, 10, 10, 20]
            }]
        };

        // 使用剛指定的配置項和數(shù)據(jù)顯示圖表。
        myChart.setOption(option);
    </script>
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

輸出如圖所示,其中X軸分別對應(yīng)貴州省的幾個城市,包括貴陽市、遵義市、凱里市、六盤水市、都勻市和畢節(jié)市,對應(yīng)代碼為:

  • xAxis: {data: [“貴陽市”,“遵義市”,“凱里市”,“六盤水市”,“都勻市”,“畢節(jié)市”]}

Y軸對應(yīng)這六個城市的某種數(shù)據(jù)統(tǒng)計值,當(dāng)鼠標(biāo)選中某個柱狀圖,則會提示該城市的統(tǒng)計數(shù)值,比如凱里市的為36,統(tǒng)計數(shù)值對應(yīng)的代碼為:

  • series: [{name: '數(shù)量’, type: 'bar’, data: [5, 20, 36, 10, 10, 20] }]

最后將繪制的圖形顯示在id為“main”的div布局中,如下所示。

更多圖形繪制推薦大家從官網(wǎng)選擇學(xué)習(xí),ECharts技術(shù)真的很實用又博大精深,被廣泛應(yīng)用于網(wǎng)站開發(fā),尤其是對全世界、全國、各省進行地圖數(shù)據(jù)統(tǒng)計分析時,比如統(tǒng)計全國各省份的GDP值、全省各市州的人口規(guī)模等。

下一篇文章我將詳細(xì)介紹PyEcharts基礎(chǔ)知識。


四.總結(jié)

數(shù)據(jù)可視化旨在借助于圖形化手段,清晰有效地傳達與溝通信息,它與信息圖形、信息可視化、統(tǒng)計圖形密切相關(guān)。Python通過調(diào)用可視化分析庫實現(xiàn)圖形繪制,以直觀的形式反映數(shù)據(jù)的特點或結(jié)果的好壞,常用的擴展包包括Matplotlib、Pandas、Seaborn等,同時如果您使用Python開發(fā)網(wǎng)站,建議讀者可以結(jié)合ECharts技術(shù)進行可視化處理,這些可視化分析技術(shù)對您的科研結(jié)果呈現(xiàn)或項目數(shù)據(jù)展示都很有幫助。

該系列所有代碼下載地址:

感謝在求學(xué)路上的同行者,不負(fù)遇見,勿忘初心。這周的留言感慨~

(By:娜璋之家 Eastmount 2021-08-24 夜于武漢 https://blog.csdn.net/Eastmount )


參考文獻:

  • [1] 楊秀璋. 專欄:知識圖譜、web數(shù)據(jù)挖掘及NLP - CSDN博客[EB/OL]. (2016-09-19)[2017-11-07]. http://blog.csdn.net/column/details/eastmount-kgdmnlp.html.
  • [2] matplotlib. Matplotlib官網(wǎng)[EB/OL]. (2002-2017)[2017-11-10]. http://matplotlib.org.
  • [3] scikit-learn. Scikit-Learn官網(wǎng)[EB/OL]. (2017)[2017-11-10].http://scikit-learn.org/
    stable/.
  • [4] pandas. Pandas官網(wǎng)[EB/OL]. (2017)[2017-11-10]. http://pandas.pydata.org/.
  • [5] 張良均,王路,譚立云,蘇劍林. Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn)[M]. 北京:機械工業(yè)出版社,2016.
  • [6] (美)Wes McKinney著. 唐學(xué)韜等譯. 利用Python進行數(shù)據(jù)分析[M]. 北京:機械工業(yè)出版社,2013.
  • [7] 楊秀璋.[Python數(shù)據(jù)挖掘課程] 六.Numpy、Pandas和Matplotlib包基礎(chǔ)知識[EB/OL] . (2016-11-17)[2017-11-15]. http://blog.csdn.net/eastmount/article/details/53144633.
  • [8] 楊秀璋. [Python數(shù)據(jù)挖掘課程] 七.PCA降維操作及subplot子圖繪制[EB/OL]. (2016-11-26)[2017-11-18]. http://blog.csdn.net/eastmount/article/details/53285192.
  • [9] 楊秀璋. [python數(shù)據(jù)挖掘課程] 十.Pandas、Matplotlib、PCA繪圖實用代碼補充[EB/OL]. (2017-03-07)[2017-11-18]. http://blog.csdn.net/eastmount/article/details/60675865
  • [10] powerbaby. 用Pandas作圖[EB/OL]. (2016-02-23)[2017-11-18]. http://www.360doc.com/
    content/16/0223/21/7249274_536782559.shtml.
  • [11] Seaborn. Seaborn:statistical data visualization[EB/OL]. (2017)[2017-11-18]. http://seaborn.pydata.org/.
  • [12] echarts.Echarts中文官網(wǎng)[EB/OL].(2017)[2017-11-18].http://echarts.baidu.com/index.html.
  • [13] 楊秀璋. [Echarts可視化] 二.php和ajax連接數(shù)據(jù)庫實現(xiàn)動態(tài)數(shù)據(jù)可視化[EB/OL]. (2017-06-02)[2017-11-18]. http://blog.csdn.net/eastmount/article/details/72847067.
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
[數(shù)據(jù)可視化]Seaborn簡單介紹
Python:打造可視化數(shù)據(jù)分析應(yīng)用的實戰(zhàn)指南!
《利用python進行數(shù)據(jù)分析》讀書筆記
3 個用于數(shù)據(jù)科學(xué)的頂級 Python 庫
用 Python 生成直方圖:你會怎么做?
Python的數(shù)據(jù)可視化:對比7種工具包
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服