第一章節(jié) matplotlib繪圖
注意:若在plt中出現(xiàn)中文亂碼或者負(fù)號(hào)亂碼瘪贱,要寫(xiě)入語(yǔ)句 plt.rcParams['font.sans-serif'] = ['SimHei'] ——解決中文亂碼,plt.rcParams['axes.unicode_minus'] = False ——解決負(fù)號(hào)亂碼
-
使用matplotlib繪圖
-
基本思路:導(dǎo)入模塊numpy鸵熟、matplotlib.pyplot——定義X、Y軸(Y軸可能有多個(gè))——matplotlib輸入標(biāo)題——plt.plot(X軸摩窃,Y軸)....繪制圖形——plt.show()展示圖形(缺點(diǎn):每次都要寫(xiě)這行才能運(yùn)行, 可使用%matplotlib inline 簡(jiǎn)化花吟,只運(yùn)行一遍,整個(gè)jupyter有效)
import numpy as np import matplotlib.pyplot as plt X = np.linspace(0,2*np.pi,100)——np.pi 就是圓周率那個(gè)π Y = sin(X) Y1 = cos(X) plt.title ('圖表標(biāo)題') plt.plot(X,Y) —— 將X灾锯,Y值繪制圖形 plt.plot(X,Y1) plt.show() ——一定要告知計(jì)算機(jī) 已經(jīng)完成輸入,可以顯示圖形了.....
-
-
將圖形區(qū)域劃分(比如一個(gè)圖嗅榕,畫(huà)成兩部分)
-
思路:同樣的定義X/Y軸顺饮,但在繪圖時(shí),要指定區(qū)域后繪圖
X = np.linspace(0,2*np.pi,100) Y = np.sin(X) Y1 = np.cos(X) plt.title ('圖表標(biāo)題') plt.subplot(2,1,1)/plt.subplot(211)——可以理解為把原來(lái)1行凌那,1列的區(qū)域劃分為2行1列兼雄,選取上面那1行 plt.plot(X,Y) plt.subplot(212)/plt.subplot(2,1,2)——可以理解為把原來(lái)1行,1列的區(qū)域劃分為2行1列帽蝶,選取下面那1行 plt.plot(X,Y1)
-
基本圖形類(lèi)
-
柱狀圖繪制
- 基本思路: 定義X/Y軸——繪圖
- 普通柱狀圖: 定義X/Y軸之后 —— plt.bar(x,y)
-
水平柱狀圖(當(dāng)類(lèi)別太多時(shí))
- 定義x赦肋、y軸后——plt.barh(x,y)
-
不同分類(lèi)不同組之間的柱狀圖
data = [[5,25,50,20],[4,23,51,12],[6,22,52,19]] X = np.arange(4) plt.bar(X+0.00,data[0],color ='b',width = 0.25,label ='A') plt.bar(X+0.25,data[1],color ='y',width = 0.25,label ='B') plt.bar(X+0.5,data[2],color ='r',width = 0.25,label ='C') plt.legend()
* **疊加性柱狀圖**
* 同上一操作相似,只是變y軸的buttom
```
data = [[5,25,50,20],[4,23,51,12],[6,22,52,19]]
X = np.arange(4)
plt.bar(X,data[0],color ='b')
plt.bar(X,data[1],color ='y',buttom = data[0])
plt.bar(X,data[2],color ='r',buttom = np.array(data[0]) + np.array(data[1]))——因?yàn)閐ata是array不能相加励稳,轉(zhuǎn)化之后再相加
-
散點(diǎn)圖——衡量?jī)蓚€(gè)變量之間的相關(guān)性
-
普通散點(diǎn)圖
- 定義x佃乘、y軸——plt.scatter(X,Y)繪制就行了
-
普通散點(diǎn)圖
-
有屬性的散點(diǎn)圖
-
顏色區(qū)分
- 定義x,y軸
- 設(shè)置屬性 color = np.random.randn(N)# 顏色隨機(jī)顯示
area = np.pi(15np.random.rand(N)) #按照數(shù)值大小每個(gè)點(diǎn)面積不同,乘以15是因?yàn)殡S機(jī)數(shù)太小 - 繪制圖形 plt.scatter( x,y, c = color, s = area, alpha =0.5) #alpha為透明度
-
顏色區(qū)分
-
劃分屬性(只有兩個(gè)顏色)
同上述思路一致麦锯,僅僅在定義屬性時(shí)將多個(gè)顏色改為2個(gè)顏色
定義 x恕稠,y軸——定義屬性琅绅,area不變扶欣, color = np.random.randint(0,2,size=50**) #size表示數(shù)值大小,既可以用數(shù)字表示n個(gè)數(shù)千扶,也可以用[A,B]表示A行料祠,B列數(shù)據(jù)——plt.scatter( x,y, c = color, s = area, alpha =0.5)
-
直方圖
- 思路:注意,和其他圖形繪制不一致澎羞,直方圖是將一個(gè)連續(xù)范圍內(nèi)的值分為多少份髓绽,再計(jì)算每一份包含的數(shù)量,因此需要定義范圍妆绞,然后定義劃分份數(shù)
-
普通直方圖:
- 定義X 范圍 如 X = np.random.rand(100)——?jiǎng)澐址謹(jǐn)?shù) plt.hist(X,bins =20)——限定y軸范圍 plt.ylim(0,15)
-
標(biāo)準(zhǔn)正態(tài)分布
- 同樣的操作顺呕,只是范圍設(shè)大一點(diǎn)x = np.random.randn(10000) ——plt.hist(x, bins =50)
- 箱型圖繪制
-
思路:1 定義極小值和極大值的范圍,以及多少行括饶,多少列(多少個(gè)箱子)x=np.random.randint(20,120,size(10,5))#最小值20株茶,最大值120,10行5列——2 plt.boxplot(x) ——3.限定y軸范圍: plt.ylim(0,120)
- 若需要添加標(biāo)簽 plt.xticks([1,2,3],['A','B','C'])
-
繪制箱型圖中位數(shù)所在的中位線
- plt.hlines(y = np.median(x,axis =0)[0],xmin=0,xmax=3)
-
思路:1 定義極小值和極大值的范圍,以及多少行括饶,多少列(多少個(gè)箱子)x=np.random.randint(20,120,size(10,5))#最小值20株茶,最大值120,10行5列——2 plt.boxplot(x) ——3.限定y軸范圍: plt.ylim(0,120)
注釋類(lèi)
-
在圖形上添加文字
- 單個(gè)文字注釋:plt.text (X軸坐標(biāo)軸图焰,y軸坐標(biāo)軸启盛,添加的文字,.....其他信息)
-
多個(gè)文字注釋?zhuān)ǔ山M的柱狀圖數(shù)據(jù)標(biāo)簽):定義后for循環(huán)
W = [0.0,0.25,0.5] for i in range(3):**——第幾個(gè)數(shù)對(duì)應(yīng)第幾個(gè)偏移量 for a,b in zip(x+W[i],data[i]):**——x的偏移量對(duì)應(yīng) data的第幾組值 plt.text(a,b,**'%.0f'%b,ha = 'center'**,va='bottom') #分別為保留0位小數(shù)和居中對(duì)齊,bottom表示留底僵闯,文字展示形式
-
利用annotate添加文字注釋?zhuān)ǜ鼜?fù)雜一點(diǎn)卧抗,但效果更好)
- plt.annotate('Points',xy=(1,np.sin(1)),xytext=(2,0.5),fontsize=16,arrowprops =dict(arrowstyle="->")) ——參數(shù)分別為,要寫(xiě)的文本鳖粟,xy軸的位置社裆,文本xy的位置,文本大小向图,文本連接方式(箭頭等)
-
繪制子圖
思路:先把畫(huà)板劃分為幾部分浦马,再往幾部分里面加內(nèi)容
plt.subplots(劃分成幾行,劃分成幾列.......其他屬性)
-
改變畫(huà)布大姓牌: pylab.rcParams['figure.figsize'] =(20,12)——將畫(huà)布大小改為長(zhǎng)20晶默,寬12
%pylab inline
pylab.rcParams['figure.figsize'] =(20,12) #設(shè)置每個(gè)畫(huà)板20 * 12大小n_bins =10 x = np.random.randn(1000,3) fig,axes = plt.subplots(nrows=2,ncols=2) **#將畫(huà)板分為2行,2列** ax0,ax1,ax2,ax3 = axes.flatten() **#用4個(gè)變量接收4個(gè)范圍** colors =['red','yellow','blue'] ax0.hist(x,n_bins,normed = 1,histtype ='bar',color=colors,label=colors) ax0.legend(prop={'size':10}) ax0.set_title('bar with legend') ax1.hist(x,n_bins,normed = 1,histtype = 'bar',stacked=True) ax1.set_title('stacked,bar') ax2.hist(x,n_bins, histtype = 'step',stacked = True, fill = False ) ax2.set_title('stack step(unfilled)') x = [np.random.randn(n) for n in [1000,5000,2000]] ax3.hist(x,n_bins,histtype='bar')
-
pandas直接繪圖
- 思路:利用DateFrame造數(shù)據(jù)航攒,然后繪圖
- 散點(diǎn)圖
- df = pd.DataFrame(np.random.rand(50,2),columns =['a','b']) #造50行磺陡,2列0-1之間隨機(jī)數(shù)據(jù),兩列分別作為x漠畜,y軸
df.plot.scatter('a','b')
- df = pd.DataFrame(np.random.rand(50,2),columns =['a','b']) #造50行磺陡,2列0-1之間隨機(jī)數(shù)據(jù),兩列分別作為x漠畜,y軸
- 柱狀圖
- df = pd.DataFrame(np.random.rand(10,4),columns =['A','B','C','D'])
df.plot.bar() #普通柱狀圖币他,沒(méi)有其他參數(shù)/ df.plot.barh()#水平柱狀圖,橫著顯示 /df.plot.bar(stacked=True) #堆疊柱狀圖
- df = pd.DataFrame(np.random.rand(10,4),columns =['A','B','C','D'])
-
直方圖
- df=pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':np.random.randn(1000)-1},columns=['a','b','c']) #元素比較復(fù)雜時(shí)憔狞,用多元字典來(lái)造
df.plot.hist(bins =50)
- df=pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':np.random.randn(1000)-1},columns=['a','b','c']) #元素比較復(fù)雜時(shí)憔狞,用多元字典來(lái)造
- 箱型圖
- df = pd.DataFrame(np.random.rand(10,5),columns=['a','b','c','d','e'])
df.plot.box()
- df = pd.DataFrame(np.random.rand(10,5),columns=['a','b','c','d','e'])
第二章 pyecharts動(dòng)態(tài)繪圖模塊
-
虛擬環(huán)境操作
- 創(chuàng)建虛擬環(huán)境:conda create --name 虛擬環(huán)境名 Python版本
- 激活虛擬環(huán)境: conda activate 虛擬環(huán)境名
- 關(guān)閉虛擬環(huán)境: deactivate
- 刪除虛擬環(huán)境: conda remove -n 虛擬環(huán)境名 -all
-
pyecharts安裝
- 在虛擬環(huán)境里面:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts
- conda自動(dòng)關(guān)聯(lián)(不同的需求對(duì)應(yīng)不同的虛擬環(huán)境): conda install nb_conda
-
pyecharts基本使用
-
基本步驟:創(chuàng)建圖形對(duì)象 ——添加繪圖數(shù)據(jù) ——配置系列參數(shù)——配置全局參數(shù)——渲染圖片
from **pyecharts.charts** import Bar from **pyecharts** import **options** as opt bar.add_xaxis(['襯衣','毛衣','領(lǐng)帶','褲子','風(fēng)衣','高跟鞋','襪子']) #增加x軸數(shù)據(jù) bar.add_yaxis('商場(chǎng)A',[21,344,284,22,128,234]) #增加y軸數(shù)據(jù) bar.add_yaxis('商場(chǎng)B',[32,323,148,89,294,38]) #增加y軸數(shù)據(jù) bar.set_global_opts(title_opts=opt.TitleOpts(title = '某商場(chǎng)銷(xiāo)售情況')) # 設(shè)置全局參數(shù) bar.render_notebook() #渲染圖表并顯示
-
-
pyechart鏈?zhǔn)秸{(diào)用
-
鏈?zhǔn)秸{(diào)用
from pyecharts.charts import Bar from pyecharts import options as opt bar =(Bar() .add_xaxis(['襯衣','毛衣','領(lǐng)帶','褲子','風(fēng)衣','高跟鞋','襪子']) .add_yaxis**('商場(chǎng)A',[21,344,284,22,128,234]) #增加y軸數(shù)據(jù) .add_yaxis**('商場(chǎng)B',[32,323,148,89,294,38]) #增加y軸數(shù)據(jù) .set_global_opts(title_opts=opt.TitleOpts(title = '某商場(chǎng)銷(xiāo)售情況')) # 設(shè)置全局參數(shù) bar.render_notebook()
-
-
鏈?zhǔn)秸{(diào)用加入主題
from pyecharts.globals import ThemeType #引入模塊 bar = (Bar**(init_opts =opt.InitOpts(theme =ThemeType.DARK)) #說(shuō)明使用的主題/風(fēng)格** .add_xaxis(['襯衣','毛衣','高跟鞋','風(fēng)衣','襪子','領(lǐng)帶']) .add_yaxis('商場(chǎng)A',[364,38,273,94,437,138]) .add_yaxis('商場(chǎng)B',[462,328,34,282,43,98]) .set_global_opts(title_opts=opt.TitleOpts(title="商場(chǎng)銷(xiāo)售情況"))) bar.render_notebook()
- pyechats 含有不同主題可以設(shè)置多元的圖形視覺(jué)
-
pyecharts 繪制其他圖形
-
橫向條形圖
bar =(Bar() .add_xaxis(['襯衣','毛衣','領(lǐng)帶','褲子','風(fēng)衣','高跟鞋','襪子']) .add_yaxis('商場(chǎng)A',[21,344,284,22,128,234]) #增加y軸數(shù)據(jù) .add_yaxis('商場(chǎng)B',[32,323,148,89,294,38]) #增加y軸數(shù)據(jù) .set_global_opts(title_opts=opt.TitleOpts(title = '某商場(chǎng)銷(xiāo)售情況')) # 設(shè)置全局參數(shù))** bar.reversal_axis() #翻轉(zhuǎn)xy軸 bar.render_notebook()
-
-
折線圖繪制
from pyecharts.charts import Line from pyecharts import options as opt line = (Line() .add_xaxis(["201{}第{}季度".format(y,z) for y in range(4) for z in range(1,5)]) .add_yaxis('電視機(jī)銷(xiāo)量',[37,82,28,20,48,28,49,39,202,38,83,29,33,29,88,78]) .set_global_opts(title_opts =opt.TitleOpts(title ="折線圖") ,xaxis_opts = opt.AxisOpts(axislabel_opts =opt.LabelOpts(rotate =-40)) #將x軸坐標(biāo)標(biāo)簽旋轉(zhuǎn)40度 ,yaxis_opts = opt.AxisOpts(**name="銷(xiāo)量(單位/千臺(tái))")) ) line.render_notebook()
-
南丁格爾玫瑰圖
-
本質(zhì)上仍是餅圖的一種蝴悉,但不是用角度表示大小,而是用半徑長(zhǎng)短表示大小瘾敢,角度均一致
from pyecharts.charts import Pie from pyecharts import options as opt pie=(Pie() .add("",[list(z)for z in zip(["201{}年第{}季度".format(x,y)for x in range(2) for y in range(1,3)] ,[30,19,21,60])] ,radius=["10%","60%"] #設(shè)定內(nèi)外直徑 , rosetype="area", #玫瑰圖類(lèi)型拍冠,僅有area與radius兩種 ,label_opts= opt.LabelOpts(is_show=True)#選擇是否設(shè)置數(shù)據(jù)標(biāo)簽) .set_global_opts(title_opts = opt.TitleOpts(title ="玫瑰圖示例")) pie.render_notebook()
-
-
餅圖
from pyecharts import options as opt from pyecharts.charts import Page,Pie **v1 =['啤酒','可樂(lè)','雪碧','咖啡','奶茶']** **v2 =[30,19,21,18,12]** pie = ( Pie() .add("",[list(z) for z in zip(v1,v2)]) #增加數(shù)組作為數(shù)據(jù) .set_global_opts(title_opts=opt.TitleOpts(title="銷(xiāo)售收入占比")) .set_series_opts(label_opts = opt.LabelOpts(formatter = ":{c}%")) #設(shè)置數(shù)據(jù)標(biāo)簽: 名稱:占比 ) pie.render_notebook()
-
雷達(dá)圖
- 思路:難點(diǎn)在于設(shè)置參數(shù)簇抵,要設(shè)置多次庆杜,第一次是add_schema,加入維度及最大值碟摆,第二次及之后的add加入角色晃财,視覺(jué)信息等
from **pyecharts.charts** import **Page,Radar** from **pyecharts** import options as **opts** v1=[[4300,10000,28000,35000,50000,19000]] v2=[[5000,14000,28000,31000,42000,21000]] radar = (Radar() .add_schema(schema=[opts.RadarIndicatorItem(name='KDA',max_=6500), #設(shè)置維度,及最大值 opts.RadarIndicatorItem(name='輸出',max_=16000), opts.RadarIndicatorItem(name='經(jīng)濟(jì)',max_=30000), opts.RadarIndicatorItem(name='生存',max_=38000), opts.RadarIndicatorItem(name='推進(jìn)',max_=52000), opts.RadarIndicatorItem(name='打野',max_=25000)]) .add("魯班",v1, color="red",areastyle_opts=opts.AreaStyleOpts (opacity=0.5,color="red"))#設(shè)置角色1名稱典蜕,內(nèi)容断盛,顏色,透明度及透明度顏色 .add("后裔",v2,color="blue",areastyle_opts=opts.AreaStyleOpts(opacity=0.5,color="blue"))#設(shè)置角色2名稱愉舔,內(nèi)容钢猛,顏色,透明度及透明度顏色 .set_global_opts**(title_opts=opts.TitleOpts(title="英雄成長(zhǎng)對(duì)比")) #設(shè)置標(biāo)題 .set_series_opts(**label_opts=opts.LabelOpts(is_show= True))) #設(shè)置標(biāo)簽 radar.render_notebook()
-
詞云圖
* 思路:先導(dǎo)入模塊屑宠,再增加參數(shù)厢洞,然后配置全局變量,最后渲染顯示,注意在導(dǎo)入?yún)?shù)時(shí)加入詞云大小范圍躺翻,導(dǎo)入?yún)?shù)時(shí)多導(dǎo)入一個(gè)SymbolType模塊from pyecharts import options as opts from pyecharts.charts import Page,WordCloud from pyecharts.globals import SymbolType #除了導(dǎo)入兩個(gè)模塊以外還要導(dǎo)入SymbolType words =[('Sam S Club',10000),('Macys',6181),('Amy Schumer',4386),('Jurassic World',4055)] #用詞組和數(shù)字丧叽,表示每個(gè)次多大 wordcloud = (WordCloud() .add("",words,word_size_range=[20,100])#輸入?yún)?shù)時(shí)注意配置詞的尺度范圍 .set_global_opts(title_opts=opts.TitleOpts(title='詞云圖'))) wordcloud.render_notebook()
-
繪制地圖
-
思路:仍然是先導(dǎo)入模塊,再增加參數(shù)公你,然后配置全局變量踊淳,最后渲染顯示的過(guò)程,在增加參數(shù)時(shí)陕靠,除了原有的參數(shù)要加入國(guó)家的參數(shù)如China迂尝,配置全局變量時(shí)要加入視覺(jué)參數(shù)
from pyecharts import options as opts from pyecharts.charts import Map v1= [29,191,99,101,64,44] v2= ['四川','廣東',"杭州",'北京','湖南','云南'] map =(Map() .add("全國(guó)地圖展示",[list(z)for z in zip(v2,v1)],"china") #除了本身的數(shù)據(jù)輸入也要加入國(guó)家參數(shù)方便識(shí)別 .set_global_opts(title_opts=opts.TitleOpts(title="連續(xù)型地圖"),visualmap_opts=opts.VisualMapOpts(max_=200))) #視覺(jué)參數(shù)方便顯示 map.render_notebook()
-
第三章節(jié) power BI部分(入門(mén))
-
優(yōu)勢(shì)
步驟功能區(qū)域:- 免費(fèi),微軟出品剪芥,符合日常辦公習(xí)慣
- 方便快捷垄开,快速展示圖表需求
功能區(qū)(最上面),畫(huà)布(中間白色部分)税肪,篩選器(畫(huà)布右側(cè))溉躲,圖表類(lèi)型、圖表設(shè)計(jì)益兄、字段選擇(篩選器右側(cè))
-
流程
- 導(dǎo)入數(shù)據(jù)源——powerBI數(shù)據(jù)處理(數(shù)據(jù)清理锻梳、建模)——可視化報(bào)表展示
-
導(dǎo)入數(shù)據(jù)源
- 開(kāi)始\獲取數(shù)據(jù)\從數(shù)據(jù)庫(kù)或者文件等
-
清洗數(shù)據(jù)
- 建議在sql或者pandas中處理,再倒入powerBI