歡迎大家來到“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ǔ)文章,希望對您有所幫助。
下載地址:
前文賞析:
第一部分 基礎(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ù)或算法的好壞,給讀者最直觀的視覺信息。
基礎(chǔ)用法參考前文:
首先簡單地繪制三條直線,其斜率分別為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()
輸出如圖所示,其中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]。
下面將上圖繪制成不同類型的線條。核心修改代碼如下:
# -*- 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()
其中,'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()
代碼 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ù)含義如下:
輸出如圖所示。
最后,感興趣的同學(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()
輸出如圖所示:
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()
numpy中有一些用來產(chǎn)生隨機數(shù)的常用函數(shù),randn()和rand()就屬于其中。
代碼中產(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]
產(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()
輸出如圖所示。
在進行聚類、分類分析中,通常會將不同類型的數(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()
輸出如圖所示。
代碼中調(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ù)繪制散點圖,即:
代碼表示繪制類標(biāo)(label)為1的散點,其他參數(shù)包括x值和y值,設(shè)置點樣式(marker= 'x’)為叉形,設(shè)置顏色(color = 'r’)為紅色,粗細(xì)為40。
這部分主要講述了scatter()函數(shù)繪制散點圖,后面的聚類和分類分析中也會講解另一種方法plot()繪制散點圖。
柱狀圖主要用于直觀的對比統(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()
核心代碼詳解如下:
其他設(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()
輸出如圖所示。
繪制餅圖主要調(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()
首先計算a、b、c所占mm的比例,輸出值為[45.0, 30.0, 25.0]。接下來:
從此處開始按逆時針方向依次展開顯示A、B、C三個板塊,顏色依次為青色、紅色、黃色。
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() #顯示模塊中所有繪圖對象
繪制的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()
輸出如圖所示。
本小節(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
繪制折線對比圖代碼見源文件。
# -*- 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()
輸出如圖所示,最上面藍線為“北京”的房價,接著綠線為“上?!钡姆績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
>>>
重點知識是:
如果讀者想僅僅獲取某一個城市的房價,比如“貴陽”,再繪制成折線圖,如何實現(xiàn)呢?核心代碼如下:
# -*- 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()
下圖為貴陽市商品房價的折線增長圖。
下面針對貴陽的商品房房價數(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()
輸出如下圖所示,需要注意采用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()
輸出如圖所示。從圖中可以對比五個城市2002年到2014年的商品房價信息,并采用不同顏色進行區(qū)分。
如果想對比不同子圖,可以利用參數(shù)subplots繪制DataFrame中每個序列對應(yīng)的子圖。核心代碼如下:
data.plot(color='y', kind='barh', subplots=True)
plt.show()
輸出如圖所示,對比五個城市的房價信息。
下面簡單講解繪制直方圖。你或許會疑惑直方圖和柱狀圖有什么區(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()
這里調(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)化處理。生成圖形如圖所示。
箱圖是一種用于表示分布的圖形,展示數(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()
下圖為繪制的貴陽房價箱圖,同樣可以調(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()
輸出如圖所示。
數(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ù)。
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)站及可視化項目中。
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>
3.繪制圖形
下面blog17_01.html代碼是繪制貴州省六個城市的柱狀圖,在代碼中引入ECharts后,可以直接調(diào)用。
<script src='echarts.min.js'></script>
核心代碼 :
初始化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>
輸出如圖所示,其中X軸分別對應(yīng)貴州省的幾個城市,包括貴陽市、遵義市、凱里市、六盤水市、都勻市和畢節(jié)市,對應(yīng)代碼為:
Y軸對應(yīng)這六個城市的某種數(shù)據(jù)統(tǒng)計值,當(dāng)鼠標(biāo)選中某個柱狀圖,則會提示該城市的統(tǒng)計數(shù)值,比如凱里市的為36,統(tǒng)計數(shù)值對應(yīng)的代碼為:
最后將繪制的圖形顯示在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ǔ)知識。
數(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 )
參考文獻:
聯(lián)系客服