版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第7章可視化分析目錄contents從數(shù)據(jù)到圖形面向?qū)ο蟮睦L圖模式實例:人口金字塔可視化分析實例:電商數(shù)據(jù)可視化分析實例:氣象數(shù)據(jù)可視化分析Matplotlib大數(shù)據(jù)和人工智能時代,數(shù)據(jù)科學一項重要的任務(wù)是對海量的數(shù)據(jù)進行直觀地描述、總結(jié)和表示。相比文本數(shù)據(jù),圖表數(shù)據(jù)可以更加清晰、高效地展示數(shù)據(jù)的信息。在很多情況下,執(zhí)行數(shù)據(jù)分析的第一步便是對數(shù)據(jù)進行可視化分析,并從中獲得數(shù)據(jù)的異常值、必要的數(shù)據(jù)轉(zhuǎn)換、模型設(shè)計的洞察等信息。Matplotlib是Python社區(qū)中應(yīng)用最廣泛的可視化庫,其基于NumPy的數(shù)組繪制出版級別的可視化圖形(包括二維圖像和三維圖形),并可與Scipy,Pandas等第三方庫聯(lián)合使用。隨著Python的流行,Matplotlib衍射出了諸如Seaborn,ggplot等高級封裝的數(shù)據(jù)可視化庫,這些庫都使用Matplotlib作為底層進行繪圖。本章將講解Matplotlib的基本功能,并介紹基于Matplotlib的數(shù)據(jù)可視化分析任務(wù)處理。Matplotlib庫包含有pylab和pyplot兩類接口。在最初時,Matplotlib的設(shè)計與MATLAB高度類似,并因此產(chǎn)生了pylab模塊,其旨在模仿MATLAB的全局風格。然而,pylab的使用會影響Python的內(nèi)置函數(shù)并可能導致難以跟蹤的錯誤污染命名空間,如今Matplotlib官方已放棄pylab并明確建議不使用該模塊。為此,在任何情況下都應(yīng)該使用pyplot模塊。Matplotlib可以通過conda或者pip命令進行安裝,在安裝完成后,通常以如下方式進行引用>>>importmatplotlib.pyplotasplt從數(shù)據(jù)到圖形01基礎(chǔ)圖形下面通過一個圖形案例來熟悉Matplotlib中pyolot的基礎(chǔ)功能。在以下的例子中,將繪制正弦曲線的圖形,其思路為首先使用NumPy生成包含[0,4π]之間的等距分割的200個點的一維數(shù)組,計算出其對應(yīng)的正弦值,再基于這兩個數(shù)組使用pyplot生成如圖所示的圖形。>>>x=np.linspace(0,4*np.pi,200)#生成正弦曲線上的點的橫軸坐標>>>y=np.sin(x)#計算正弦曲線上的點的縱軸坐標>>>plt.plot(x,y)#繪制正弦曲線圖形>>>plt.show()#將生成的圖形展示plot()函數(shù)matplotlib.pyplot.plot(x,y,fmt,data,**kwargs)其中x,y是標量或“array-like”的對象,作為數(shù)據(jù)點的橫軸、縱軸坐標,當“x”沒有明確給定時,其默認為等于range(len(y));“fmt”為格式字符串,不是必須項,用于對繪制圖形的樣式屬性進行快速設(shè)置。其格式為“[標記(marker)][線條(line)][顏色(color)]”,這三項的每一項都是可選的且不需明確按上述的順序。如“bo”中沒有給定線條參數(shù),代表藍色圓圈的標記但不繪制線條。表7-1至表7-3給出了每項格式字符串參數(shù)常用的取值,這些屬性也可以通過關(guān)鍵字參數(shù)進行設(shè)定;“data”是可索引對象,不是必須項,其為有標簽數(shù)據(jù)的對象(如字典對象),用于提供參數(shù)中的數(shù)據(jù)。格式字符串fmt中標記樣式的常用符號符號描述符號描述'.'點標記'*'星號標記','像素標記'h'垂直六邊形標記'o'圓標記'H'水平六邊形標記'v'下三角標記'+'加號標記'^'上三角標記'P'實心加號標記'<'左三角標記'x'叉號標記'>'右三角標記'X'實心加號標記'8'八角形標記'D'菱形標記's'正方形標記'|'垂直線標記'p'五邊形標記'_'水平線標記格式字符串fmt中線條樣式的常用取值符號描述'-'實線樣式'--'破折線樣式'-.'點劃線樣式':'點虛線樣式格式字符串fmt中顏色的常用取值符號描述符號描述'b'藍色(Blue)'m'品紅色(magenta)'g'綠色(Green)'y'黃色(Yellow)'r'紅色(Red)'k'黑色(Black)'c'青色(Cyan)'w'白色(White)Matplotlib展現(xiàn)圖像繪制正弦曲線圖形代碼的最后一行是將結(jié)果進行展現(xiàn)供可視化分析。Matplotlib展現(xiàn)圖像的方式可以分為三種情況:1.在腳本文件(.py)中:需要調(diào)用plt.show()函數(shù),該函數(shù)會啟動事件循環(huán),查找所有當前活動的圖形對象,并打開顯示圖形交互的窗口。2.在IPython筆記本(如JupyterNotebook)中:在內(nèi)核中運行%matplotlibinline后,創(chuàng)建繪圖的單元格都將嵌入所得圖形的PNG圖像,而無需調(diào)用plt.show()函數(shù)。3.在IPythonshell中:在啟動后輸入%matplotlib魔術(shù)命令后,任何pyplot的繪圖命令都會打開一個圖形窗口,可以運行更多命令來更新繪制窗口,而無需調(diào)用plt.show()函數(shù)。多組數(shù)據(jù)繪制1.多次調(diào)用plt.plot()函數(shù):此方法最為直接且最為常用。如下列代碼所示,正弦曲線使用綠色實現(xiàn)繪制,余弦曲線使用紅色虛線繪制。值得注意的是當有多項數(shù)據(jù)時,可以使用關(guān)鍵字參數(shù)“l(fā)abel=”明確每個數(shù)據(jù)對應(yīng)的圖像名稱,并利用plt.legend()函數(shù)將圖例進行顯示,以便在分析時更好地認識數(shù)據(jù)結(jié)構(gòu)。>>>x=np.linspace(0,4*np.pi,200)#生成橫軸坐標>>>y_sin=np.sin(x)#生成正弦曲線的縱軸坐標>>>y_cos=np.cos(x)#生成余弦曲線的縱軸坐標>>>plt.plot(x,y_sin,'g-',label='sin(x)')#繪制正弦曲線圖形為綠色實線>>>plt.plot(x,y_cos,'r-.',label='cos(x)')#繪制余弦曲線圖形為紅色虛線>>>plt.legend()#顯示圖例>>>plt.show()多組數(shù)據(jù)繪制在同一個plt.plot()指定多組x,y和fmt參數(shù):此類方法只需要調(diào)用一次plt.plot()函數(shù),但需在函數(shù)內(nèi)部輸入每組(x,y,fmt)的數(shù)據(jù)。使用此種方法需要注意無法在plt.plot()函數(shù)中制定多個標簽,故需要將標簽信息移動到圖例展示的函數(shù)plt.legend()中,具體代碼如下所示>>>x=np.linspace(0,4*np.pi,200)#生成橫軸坐標>>>y_sin=np.sin(x)#生成正弦曲線的縱軸坐標>>>y_cos=np.cos(x)#生成余弦曲線的縱軸坐標>>>plt.plot(x,y_sin,'g-',x,y_cos,'r-.')#同時繪制正弦曲線和余弦曲線圖形>>>plt.legend(['sinx','cosx'])#顯示圖例,并在圖例中明確正弦和余弦曲線的標簽圖像設(shè)置通常完整的繪圖圖形還包括標題,軸標簽等信息,分別可以通過pyplot中的title()、xlabel()、ylabel()等函數(shù)進行設(shè)置。同時在數(shù)據(jù)分析時常運用到網(wǎng)格線進行輔助觀察,這可以通過pyplot中的gird()函數(shù)設(shè)置。下列代碼將正弦與曲線圖形的橫縱軸分別標記為x軸和y軸,設(shè)置圖形標題為“正弦與余弦曲線”,并設(shè)置橫縱軸的網(wǎng)格線>>>x=np.linspace(0,4*np.pi,200)#生成橫軸坐標>>>y_sin=np.sin(x)#生成正弦曲線的縱軸坐標>>>y_cos=np.cos(x)#生成余弦曲線的縱軸坐標>>>plt.plot(x,y_sin,'g-',label='sin(x)')#繪制正弦曲線圖形為綠色實線>>>plt.plot(x,y_cos,'r-.',label='cos(x)')#繪制余弦曲線圖形為紅色虛線>>>plt.legend()#顯示圖例>>>plt.xlabel('x')#設(shè)置x軸標簽為“x”>>>plt.ylabel('y')#設(shè)置y軸標簽為“y”>>>plt.title('GraphsofSineandCosineCruves')#設(shè)置標題>>>plt.grid()#設(shè)置網(wǎng)格線>>>plt.show()中文支持在Matplotlib中,默認的字體是不支持中文格式的,因此如果在上述代碼直接將標題和軸坐標設(shè)置為中文將會出現(xiàn)中文亂碼。若需要在圖像中顯示中文字符,有兩種方式:1.修改配置文件:Matplotlib從配置文件matplotlibrc中讀取相關(guān)配置信息,比如字體、樣式等,因此可修改此配置文件中的字體為支持中文字體的樣式。此方法雖然可以在當前本地終端正確顯示中文,但在新的終端上運行代碼依然存在亂碼問題,且不同操作系統(tǒng)的配置文件修改方法亦不盡相同。2.在代碼中動態(tài)設(shè)置:直接在Python代碼中動態(tài)設(shè)置字體信息,此方法方便靈活,亦避免了修改配置文件。如下列代碼所示,需要注意的是更改字體后會導致負號符號的顯示異常,故還需對符號進行配置。同時這種方式僅針對當前的腳本或內(nèi)核,重新啟動內(nèi)核或運行腳本需重新運行這段代碼。>>>plt.rcParams['font.family']='SimHei'#指定默認字體為黑體>>>plt.rcParams['axes.unicode_minus']=False#解決負號負號異常問題>>>plt.rcParams['font.family']='SimHei'#指定默認字體為黑體>>>plt.rcParams['axes.unicode_minus']=False#解決負號負號異常問題中文支持>>>plt.rcParams['font.family']='SimHei'#指定默認字體為黑體>>>plt.rcParams['axes.unicode_minus']=False#解決負號負號異常問題>>>x=np.linspace(0,4*np.pi,200)>>>y_sin=np.sin(x)>>>y_cos=np.cos(x)>>>plt.plot(x,y_sin,'g-',label='正弦曲線')#設(shè)置中文圖例標簽>>>plt.plot(x,y_cos,'r-.',label='余弦曲線')#設(shè)置中文圖例標簽>>>plt.xlabel('x軸')#設(shè)置中文x軸標簽>>>plt.ylabel('y軸')#設(shè)置中文y軸標簽>>>plt.title('正弦與余弦曲線圖形')#設(shè)置中文標題>>>plt.grid()>>>plt.legend()>>>plt.show()圖像保存在完成圖形的繪制后,有時需要將其保存供后續(xù)查看分析,為此可以將plt.show()更改為plt.savefig()函數(shù)。該函數(shù)將當前圖形畫布按指定方式保存,其接收的第一個參數(shù)為需保存為的文件名,同時可以利用“dpi=”關(guān)鍵字參數(shù)設(shè)置保存圖像的分辨率,“transparent=”關(guān)鍵字參數(shù)設(shè)置背景是否設(shè)置為透明等。如下行代碼表示將當前圖形命名為“graph.jpeg”文件存儲在工作目錄下,并將存儲圖形的分辨率設(shè)置為300dpi,背景設(shè)置為透明。需要注意的是當使用plt.show()后,當前工作畫布會被清除,因此需要保存的圖形不建議調(diào)用plt.show()函數(shù)。#存儲當前畫布的圖形>>>plt.savefig('graph.jpeg',dpi=300,transparent=True)統(tǒng)計圖函數(shù)描述函數(shù)描述scatter(x,y)散點圖hist(x)直方圖bar(x,height)垂直柱狀圖boxplot(X)箱形圖barh(y,width)水平柱狀圖errorbar(x,y,yerr,xerr)誤差線圖stem(x,y)火柴桿圖pie(x)餅圖step(x,y)階梯圖polar(theta,r)極坐標圖散點圖在統(tǒng)計分析,尤其是回歸分析領(lǐng)域,常用到散點圖來直觀地顯示數(shù)據(jù)變量的分布情況,從而判斷數(shù)據(jù)之間是否存在某種關(guān)聯(lián)或總結(jié)分布模式。在pyplot中可以使用scatter()函數(shù)繪制散點圖 matplotlib.pyplot.scatter(x,y,s=None,c=None,data,**kwargs)>>>np.random.seed(42)#隨機數(shù)生成器種子>>>N=30#散點數(shù)量>>>data={'a':np.arange(N),#隨機生成散點橫坐標
'c':np.random.randint(0,N,N),#隨機生成散點顏色
'd':np.random.randn(N)}#隨機生成散點大小序列>>>data['b']=data['a']+70*np.random.randn(N)#散點縱坐標>>>data['d']=np.abs(data['d'])*500#散點大小幅度>>>plt.scatter('a','b',c='c',s='d',data=data)#繪制散點圖>>>plt.xlabel('XAxis')>>>plt.ylabel('YAxis')>>>plt.grid()>>>plt.show()垂直柱狀圖在pyplot中可以使用bar()函數(shù)繪制垂直柱狀圖 matplotlib.pyplot.bar(x,height,width=0.8,**kwargs)>>>plt.rcParams['font.family']='SimHei'#設(shè)置中文字體>>>x=['黃燜雞','魚香肉絲','水煮肉片','梅菜扣肉','糖醋里脊']#套餐類別>>>height=[25,41,25,36,19]#套餐銷量>>>plt.bar((x,height,width=0.6))#繪制垂直柱狀圖>>>plt.xlabel('套餐名稱')>>>plt.ylabel('銷量(份)')>>>plt.title('午餐套餐銷量垂直柱狀圖')>>>plt.show()水平柱狀圖在pyplot中可以使用bar()函數(shù)繪制垂直柱狀圖 matplotlib.pyplot.bar(y,width,height=0.8,**kwargs)>>>plt.rcParams['font.family']='SimHei'>>>y=['黃燜雞','魚香肉絲','水煮肉片','梅菜扣肉','糖醋里脊']>>>width=[25,41,25,36,19]>>>plt.barh(y,width,height=0.6)#繪制水平柱狀圖>>>plt.xlabel('套餐名稱')>>>plt.ylabel('銷量(份)')>>>plt.title('午餐套餐銷量水平柱狀圖')>>>plt.show()直方圖不同于柱狀圖,直方圖是一種可視化在連續(xù)間隔,或者是特定時間段內(nèi)數(shù)據(jù)分布情況的圖形。其描述數(shù)據(jù)的頻次分布,并能夠直觀顯示數(shù)據(jù)的眾數(shù)、中位數(shù)、缺失值與異常值等統(tǒng)計信息。在pyplot中可以使用hist()函數(shù)繪制垂直柱狀圖,其語法格式如下 matplotlib.pyplot.hist(x,**kwargs)>>>x1=np.random.normal(0,2,1100)#生成正態(tài)分布數(shù)據(jù)>>>x2=np.random.normal(-5,1,900)#生成正態(tài)分布數(shù)據(jù)>>>x3=np.random.normal(4,1,700)#生成正態(tài)分布數(shù)據(jù)>>>kwargs={'bins':30,'alpha':0.5}#將關(guān)鍵字參數(shù)保存至字典中>>>plt.hist(x1,**kwargs)#繪制直方圖>>>plt.hist(x2,**kwargs)#繪制直方圖>>>plt.hist(x3,**kwargs)#繪制直方圖>>>plt.xlabel('Data')>>>plt.ylabel('Amount')>>>plt.show()餅圖餅圖是一種劃分為幾個扇形的圓形圖標,常用來可視化描述數(shù)量、頻率或百分比之間的相對關(guān)系。在pyplot中可以使用pie()函數(shù)繪制餅圖,其語法格式如下 matplotlib.pyplot.hist(x,**kwargs)>>>plt.rcParams['font.family']='SimHei'>>>x=[25,41,25,36,19]>>>labels=['黃燜雞','魚香肉絲','水煮肉片','梅菜扣肉','糖醋里脊']>>>explode=(0,0,0,0,0.15)#設(shè)置分離顯示的扇形>>>plt.pie(x,explode,labels,autopct='%1.1f%%')#繪制餅圖>>>plt.title('午餐套餐銷量水平柱狀圖')>>>plt.show()極坐標圖極坐標圖是使用值和角度來將信息顯示為極坐標的圓形圖,當數(shù)據(jù)點之間的關(guān)系可以根據(jù)半徑和角度可視化時,它非常實用。其常用用于科學計算的分析,同時也可以繪制雷達圖等可視化圖形。在pyplot中,既可以在plot()函數(shù)中設(shè)置極坐標,也可以直接使用polar()函數(shù)繪制垂直柱狀圖,其語法格式如下
matplotlib.pyplot.polar(theta,r,**kwargs)>>>rad=np.arange(0,2*np.pi,0.01)#生成數(shù)據(jù)>>>foriinrad:...r=i...plt.polar(i,r,'g.')#繪制極坐標圖>>>plt.show()數(shù)組繪制在Matplotlib中,若要顯示二維數(shù)組或特定的三維數(shù)組,可以使用pyplot中的imshow()函數(shù),其通常用于圖像的繪制與顯示。語法格式如下:matplotlib.pyplot.imshow(x,cmap=None,norm=None,**kwargs)其中,x為“array-like”的對象或者PIL圖像,其支持的形狀有:1.(M,N):標量數(shù)據(jù)的圖像,M和N分別定義了圖像的行和列,圖像的值通過‘norm’和‘cmap’的參數(shù)設(shè)置轉(zhuǎn)化為顏色;2.(M,N,3):RGB值的圖像,M和N分別定義了圖像的行和列,支持0-1的浮點數(shù)或0-255的整數(shù),超出范圍的值將被裁剪;3.(M,N,4):RGBA值的圖像,M和N分別定義了圖像的行和列,其中第4維度(即A維度)為透明度,超出范圍的值將被裁剪。cmap為字符串或“Colormap”對象,用于將標量數(shù)據(jù)映射到色彩空間,對于RGB(A)格式的數(shù)據(jù),此參數(shù)將被忽略;norm用來將數(shù)據(jù)標量映射至色彩空間前將數(shù)據(jù)縮放至[0,1]之間的范圍,默認采取線性縮放,對于RGB(A)格式的數(shù)據(jù),此參數(shù)將被忽略;imshow()還有豐富的關(guān)鍵字參數(shù)用來控制圖像顯示的效果,讀者可自行查閱Matplotlib官方文檔。以下通過幾個案例闡述imshow()函數(shù)的用法:條形碼圖繪制條形碼是典型的二維單色圖像,下列代碼首先將定義一維的NumPy數(shù)組,其中“0”代表白色,“1”代表黑色,接著設(shè)置圖像畫布大小,隨后利用imshow()函數(shù)繪制條形碼圖,這里“aspect=”關(guān)鍵字需要設(shè)置成“auto”,該參數(shù)代表軸的橫縱比,當設(shè)置為“auto”時,軸域的長度保持固定并調(diào)整橫縱比以適應(yīng)圖形>>>code=np.array([1,0,1,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,0,1,1,1])>>>pixel_per_bar=4#單個條碼的像素>>>dpi=100>>>plt.figure(figsize=(len(code)*pixel_per_bar/dpi,2))#設(shè)置畫布>>>plt.imshow(code.reshape(1,-1),cmap='binary',aspect='auto')#繪制條形碼>>>plt.axis('off')>>>plt.show()分類熱力圖繪制分類熱力圖通常用來直觀顯示兩組分類變量之間的強度分布關(guān)系。下列代碼用于繪制某村各家戶作物收成的熱力圖。>>>plt.rcParams['font.family']='SimHei'>>>vegetables=["黃瓜","番茄","生菜","蘆筍","馬鈴薯","小麥","大麥"]>>>farmers=["老王家","老李家.","老孫家","老謝家","老劉家","小亮家","大慶家"]>>>harvest=np.array([[0.8,2.4,2.5,3.9,0.0,4.0,0.0],[2.4,0.0,4.0,1.0,2.7,0.0,0.0],[1.1,2.4,0.8,4.3,1.9,4.4,0.0],[0.6,0.0,0.3,0.0,3.1,0.0,0.0],[0.7,1.7,0.6,2.6,2.2,6.2,0.0],[1.3,1.2,0.0,0.0,0.0,3.2,5.1],[0.1,2.0,0.0,1.4,0.0,1.9,6.3]])>>>plt.imshow(harvest)#繪制熱力圖>>>plt.xticks(np.arange(len(farmers)),labels=farmers,rotation=45)>>>plt.yticks(np.arange(len(vegetables)),labels=vegetables)#給每個單元增加文字注釋>>>foriinrange(len(vegetables)):forjinrange(len(farmers)):text=plt.text(j,i,harvest[i,j],ha="center",va="center",color="w")>>>plt.title("各家戶作物收成(噸/年)")>>>plt.colorbar()#顯示色階的顏色欄>>>plt.show()圖像顯示imshow()另一個常用的功能是用來顯示圖片,下列代碼首先利用pyplot中的imread()函數(shù)讀取目錄下的“Panda.jpg”圖片為NumPy數(shù)組,使用imshow()函數(shù)將數(shù)組顯示為圖片>>>img=plt.imread('Panda.jpg')#將圖像讀取為NumPy數(shù)組#type(img):numpy.ndarray#img.shape:(480,720,3)>>>plt.imshow(img)#將數(shù)組顯示為圖像>>>plt.show()面向?qū)ο蟮睦L圖模式02圖形對象在Matplotlib中,每個繪圖中都有一個樹狀結(jié)構(gòu)的Matplotlib對象。具體來說,最外層容器為畫布(Figure)對象,其可以包含一個或多個軸域(Axes)對象;每個軸域(Axes)代表一個實際的繪圖單元,其層次結(jié)構(gòu)的下方是如刻度線、坐標軸、圖例、線條、文字等繪圖中的基礎(chǔ)類對象。整體的層次結(jié)構(gòu)如圖7-14所示,而這其中每一個元素都是可以獨立控制的Python對象。創(chuàng)建步驟1.創(chuàng)建畫布(Figure)實例2.在畫布(Figure)上創(chuàng)建軸域(Axes)實例3.在每個軸域(Axes)中添加基礎(chǔ)類對象面向?qū)ο蟮哪J嚼L圖下列代碼以面向?qū)ο蟮哪J嚼L制正弦曲線圖形。首先創(chuàng)建畫布實例為fig,隨后在fig上使用add_axes()方法構(gòu)建軸域?qū)嵗齛x,并設(shè)置軸域起點在畫布的左下角,寬度和高度與畫布的相等,最后在ax上進行圖形繪制和樣式設(shè)置>>>plt.rcParams['font.family']='SimHei'>>>plt.rcParams['axes.unicode_minus']=False>>>x=np.linspace(0,4*np.pi,200)>>>y=np.sin(x)>>>fig=plt.figure(dpi=300)#創(chuàng)建畫布實例fig>>>fig.tight_layout()>>>ax=fig.add_axes([0,0,1,1])#在畫布上添加軸域?qū)嵗齛x>>>ax.plot(x,y)#在軸域中繪圖>>>ax.set(xlabel='x軸',ylabel='y軸',title='正弦曲線圖形')#設(shè)置軸域>>>plt.show()子圖繪制在進行可視化分析時,并排比較不同的數(shù)據(jù)視圖有時會對分析起到較大的幫助,為此,可以利用Matplotlib中的子圖,即在單個畫布中劃分不同的軸域,并在每個單獨的軸域上繪制不同的圖形。常用的子圖繪制有subplot()和subplots()兩種常用的方法?;趕ubplot()的子圖繪制>>>plt.rcParams['font.family']='SimHei'>>>plt.rcParams['axes.unicode_minus']=False>>>x=np.linspace(0,4*np.pi,200)>>>y_sin=np.sin(x)>>>y_cos=np.cos(x)>>>plt.subplot(2,1,1)#設(shè)置索引為1的子圖>>>plt.plot(x,y_sin)#繪制正弦曲線>>>plt.grid()>>>plt.title('正弦曲線圖形')>>>plt.subplot(2,1,2)#設(shè)置索引為2的子圖>>>plt.plot(x,y_cos)#繪制余弦曲線>>>plt.title('余弦曲線圖形')>>>plt.grid()>>>plt.tight_layout()>>>plt.show()基于subplots()的子圖繪制>>>plt.rcParams['font.family']='SimHei'>>>plt.rcParams['axes.unicode_minus']=False>>>x=np.linspace(0,4*np.pi,200)>>>y_sin=np.sin(x)>>>y_cos=np.cos(x)>>>y_tan=np.tan(x)#2行2列4個子圖,同列共用橫軸>>>fig,ax=plt.subplots(2,2,sharex='col')>>>fig.tight_layout()#第一個子圖繪制>>>ax[0,0].plot(x,x)>>>ax[0,0].set_title('自變量值')>>>ax[0,0].grid()#第二個子圖繪制>>>ax[0,1].plot(x,y_sin)>>>ax[0,1].set_title('正弦曲線圖形')>>>ax[0,1].grid()#第三個子圖繪制>>>ax[1,0].plot(x,y_cos)>>>ax[1,0].set_title('余弦曲線圖形')>>>ax[1,0].grid()#第四個子圖繪制>>>ax[1,1].plot(x,y_tan)>>>ax[1,1].set_title('正切曲線圖形')>>>ax[1,1].grid()>>>plt.show()文字注釋在可視化分析的過程中,很多情況需要對圖表中的信息進行文字標識和注解,以求更完整地描述圖形。在之前的章節(jié)中已運用了標題、軸標簽、圖例等形式注釋圖形,當需要更細致的文字注釋時,可以運用到text()和annotate()等函數(shù)text()函數(shù)>>>fig,ax=plt.subplots(2,2)>>>foriinrange(2):...forjinrange(2):...ax[i,j].text(0.5,0.5,str((i,j)),fontsize=25,ha='center')...ax[i,j].set_xticks([])#隱藏x軸刻度標簽...ax[i,j].set_yticks([])#隱藏y軸刻度標簽>>>plt.show()annotate()函數(shù)>>>plt.rcParams['font.family']='SimHei'>>>plt.rcParams['axes.unicode_minus']=False>>>x=np.linspace(0,4*np.pi,200)>>>y_sin=np.sin(x)>>>fig,ax=plt.subplots()>>>fig.tight_layout()>>>ax.plot(x,y_sin)>>>ax.annotate('最高點',(0.5*np.pi,1),(4,0.5),fontsize=15,bbox=dict(boxstyle="round",fc="none",arrowprops=dict(arrowstyle="->"))>>>ax.annotate('最低點',(1.5*np.pi,-1),(8,-1),fontsize=15,arrowprops=dict(arrowstyle='fancy'))>>>plt.show()實例:人口金字塔可視化分析03問題分析在對某地人口進行分析時,人口金字塔是一項十分重要的可視化分析工具。其按男女人口年齡自然順序自下而上在縱軸左右畫成并列的橫條柱,各條柱代表各個年齡組,用于表現(xiàn)某時間點上的年齡直方圖,能夠直觀地反映當?shù)厝丝跀?shù)據(jù)、老齡化程度、生育年齡人口、人口撫養(yǎng)比、未來的出生率和死亡率等關(guān)鍵數(shù)據(jù),是各類涉及人口發(fā)展或規(guī)劃的基礎(chǔ)。在本節(jié)中,將讀取某地的人口數(shù)據(jù),采用可視化手段對其分析,并構(gòu)建人口金字塔圖形。數(shù)據(jù)導入和風格設(shè)置>>>importnumpyasnp>>>importmatplotlib.pyplotasplt>>>plt.style.use('seaborn-whitegrid')#風格設(shè)置>>>plt.rcParams['font.family']='SimHei'>>>plt.rcParams['axes.unicode_minus']=False人口數(shù)據(jù)提取使用np.loadtext()函數(shù)將數(shù)據(jù)導入為NumPy數(shù)組以便后續(xù)分析。在導入時需跳過第一行表頭的數(shù)據(jù)。導入后使用索引將代表男性和女性的年齡人口數(shù)據(jù)分別賦值給兩個新變量。實際上,使用Pandas(PythonDataAnalysisLibrary)庫可以對csv格式的數(shù)據(jù)進行更便捷的讀取,后續(xù)的章節(jié)將對Pandas的使用方法進行介紹。>>>np.set_printoptions(suppress=True)#設(shè)置不使用科學計數(shù)法#導入數(shù)據(jù)>>>data_2020=np.loadtxt("Population2020.csv",delimiter=",",skiprows=1,usecols=(1,2))>>>male_2020=data_2020[:,0]>>>female_2020=data_2020[:,1]人口數(shù)據(jù)提取由于年齡段以5歲為間隔,可以使用列表生成式快速地生成包含年齡段字符串的列表,賦值給age變量,對于末尾的“大于100歲”,使用列表的append()方法進行添加>>>age=['{}至{}歲'.format(5*i,5*(i+1)-1)foriinrange(20)]>>>age.append('大于100歲')>>>print(age)['0至4歲','5至9歲','10至14歲','15至19歲','20至24歲','25至29歲','30至34歲','35至39歲','40至44歲','45至49歲','50至54歲','55至59歲','60至64歲','65至69歲','70至74歲','75至79歲','80至84歲','85至89歲','90至94歲','95至99歲','大于100歲']人口數(shù)據(jù)提取下一步,計算每個年齡段、每個性別的人口數(shù)量占總?cè)丝诘陌俜直?。首先計算人口總?shù),使用NumPy數(shù)組的廣播功能可以快速地計算百分比,如下列代碼所示#計算人口總數(shù)>>>sum_pop_2020=np.sum(data_2020)#計算男性占比>>>male_2020_pct=male_2020/sum_pop_2020#計算女性占比>>>female_2020_pct=female_2020/sum_pop_2020>>>str_male_2020_pct=','.join(str('{:.2}%').format(i*100)foriinmale_2020_pct).split(',')>>>str_female_2020_pct=','.join(str('{:.2}%').format(i*100)foriinfemale_2020_pct).split(',')人口數(shù)據(jù)提取接下來可以使用print()函數(shù)對現(xiàn)有數(shù)據(jù)進行解讀,以女性數(shù)據(jù)為例>>>print('2020年女性數(shù)據(jù):')...fori,vinenumerate(age):...print('{}占總?cè)丝诘膡}'.format(v,str_female_2020_pct[i]))2020年女性數(shù)據(jù):0至4歲占總?cè)丝诘?.7%5至9歲占總?cè)丝诘?.8%10至14歲占總?cè)丝诘?.7%15至19歲占總?cè)丝诘?.7%20至24歲占總?cè)丝诘?.8%25至29歲占總?cè)丝诘?.2%30至34歲占總?cè)丝诘?.3%35至39歲占總?cè)丝诘?.4%40至44歲占總?cè)丝诘?.3%45至49歲占總?cè)丝诘?.1%50至54歲占總?cè)丝诘?.2%55至59歲占總?cè)丝诘?.4%60至64歲占總?cè)丝诘?.7%65至69歲占總?cè)丝诘?.6%70至74歲占總?cè)丝诘?.6%75至79歲占總?cè)丝诘?.0%80至84歲占總?cè)丝诘?.65%85至89歲占總?cè)丝诘?.33%90至94歲占總?cè)丝诘?.11%95至99歲占總?cè)丝诘?.025%大于100歲占總?cè)丝诘?.0043%可視化人口數(shù)據(jù)以女性數(shù)據(jù)為例,進行餅圖的繪制,下列代碼繪首先將畫布尺寸設(shè)置為寬和高分別為7英寸,使用plt.pie()函數(shù)將2020年女性年齡人口數(shù)據(jù)繪制為餅圖,其中注釋采用之前定義的f_pct函數(shù)來隱藏百分比占比在1%以下的數(shù)據(jù),并確定注釋顏色為白色,在餅圖右側(cè)繪制圖例>>>f_pct=lambdapct:('{:.2f}%'.format(pct))ifpct>1else''>>>plt.figure(figsize=(7,7))>>>plt.pie(female_2020,autopct=f_pct,textprops=dict(color="w"))>>>plt.legend(age,title="年齡段",loc="centerleft",bbox_to_anchor=(1,0,0.5,1))>>>plt.title('2020年女性年齡分布餅圖')>>>plt.show()可視化人口數(shù)據(jù)餅圖雖然能展示出數(shù)據(jù)的結(jié)構(gòu)信息,但在數(shù)據(jù)比較時卻不夠直觀。另一種常用于針對數(shù)據(jù)分布情況的可視化分析工具是柱狀圖。下列代碼首先制定一行二列包含二幅子圖的畫布,尺寸為寬20英尺、高7英尺。第一幅子圖繪制男性數(shù)據(jù)的柱狀圖,第二幅子圖繪制女性數(shù)據(jù)的柱狀圖,并使用ax.set()函數(shù)對每幅子圖的軸標簽、刻度標簽進行調(diào)整。每幅子圖的橫軸代表年齡段、縱軸代表人口數(shù),由于圖形的限制,還需要調(diào)整橫軸的軸標簽旋轉(zhuǎn)90度以避免混疊>>>fig,ax=plt.subplots(1,2,figsize=(20,7))>>>ax[0].bar(age,male_2020)>>>ax[0].set(xlabel='年齡段',ylabel='人口數(shù)',title='2020年男性年齡分布柱狀圖',yticks=[0,10000000,20000000,30000000,40000000,50000000,60000000,70000000],yticklabels=['0',r'$1\times10^7$',r'$2\times10^7$',r'$3\times10^7$',r'$4\times10^7$',r'$5\times10^7$',r'$6\times10^7$',r'$7\times10^7$'])>>>ax[0].tick_params(axis='x',labelrotation=90)#旋轉(zhuǎn)橫軸標簽90度>>>ax[1].bar(age,female_2020,color='#CC6699')>>>ax[1].set(xlabel='年齡段',ylabel='人口數(shù)',title='2020年女性年齡分布柱狀圖',yticks=[0,10000000,20000000,30000000,40000000,50000000,60000000,70000000],yticklabels=['0',r'$1\times10^7$',r'$2\times10^7$',r'$3\times10^7$',r'$4\times10^7$',r'$5\times10^7$',r'$6\times10^7$',r'$7\times10^7$'])>>>ax[1].tick_params(axis='x',labelrotation=90)#旋轉(zhuǎn)橫軸標簽90度>>>plt.show()人口金字塔前一節(jié)提到,使用柱狀圖可以較直觀的闡述數(shù)據(jù)中各個類別之間的關(guān)系,但無法較好地結(jié)合年齡與性別的數(shù)據(jù)。為此,可采取人口金字塔的方式進行可視化分析。人口金字塔又被稱為“性別—年齡金字塔”,其按照年齡和性別劃分某階段某一地區(qū)的人口,其由連續(xù)堆疊的水平直方圖構(gòu)成,每個條的大小可以顯示為總?cè)丝诘陌俜直然蛉丝跀?shù)字,在大部分情況下男性數(shù)據(jù)分布在左側(cè)而女性數(shù)據(jù)分布在右側(cè)。人口金字塔經(jīng)可以清晰地可視化人口性別和年齡分布,從而推導出地區(qū)人口依賴性、生育水平、人口撫養(yǎng)比等關(guān)鍵指標,能為人口發(fā)展政策的制定提供有效的支撐。通常來說,人口金字塔可分為擴張型、穩(wěn)定型和縮減型三種類型:1.擴張型:年輕人口比重較大,從最低年齡段到最高年齡段依次逐漸縮小,人口金字塔的塔形下寬上尖,這類地區(qū)有較好的人口增長快速。2.穩(wěn)定型。除最老年齡組外,其余各年齡段大致相差不多,擴大或縮小均不明顯,人口金字塔的塔形較直,這類地區(qū)出生人數(shù)和死亡人數(shù)大致平衡,人口保持穩(wěn)定。3.縮減型。年輕人口有規(guī)則的逐漸縮小,中年以上各年齡段比重較大,人口金字塔的塔形下窄上寬,這類地區(qū)死亡率較低,但出生率也較低,可能出現(xiàn)高撫養(yǎng)比。人口金字塔繪制>>>fig,ax=plt.subplots(figsize=(17,12))>>>fig.tight_layout()>>>bar_male=ax.barh(age,-male_2020,label='男',color='#6699FF')>>>bar_female=ax.barh(age,female_2020,label='女',color='#CC6699')>>>ax.bar_label(bar_male,labels=str_male_2020_pct,size=16,label_type='edge',padding=5)>>>ax.bar_label(bar_female,labels=str_female_2020_pct,size=16,label_type='edge',padding=5)>>>ax.legend(prop={'size':20})>>>ax.set_xticks([-60000000,-40000000,-20000000,0,20000000,40000000,60000000])>>>ax.set_xticklabels([r'$6\times10^7$',r'$4\times10^7$',r'$2\times10^7$','0',r'$6\times10^7$',r'$4\times10^7$',r'$2\times10^7$'],fontsize=16)>>>ax.set_yticklabels(age,fontsize=16)>>>ax.set_ylabel('年齡段',fontsize=16)>>>ax.set_xlabel('人數(shù)',fontsize=16)>>>ax.set_title('2020年人口金字塔',fontsize=25)>>>plt.show()實例:電商數(shù)據(jù)可視化分析04問題分析隨著互聯(lián)網(wǎng)的蓬勃發(fā)展,在線購物平臺使全國乃至全世界各地的人在同一平臺上瀏覽、購買和銷售數(shù)據(jù)成為可能。為用戶提供良好的用戶體驗并提升用戶滿意度是在線購物平臺最首要的任務(wù),這需要對用戶進行合理且確切的分析,了解用戶群及其偏好,為用戶提供個性化的服務(wù)。在本節(jié)中,將讀取某電商公司的銷售與用戶信息數(shù)據(jù),采用可視化手段對其進行多維度的分析,以挖掘有價值的信息。數(shù)據(jù)導入和風格設(shè)置>>>importnumpyasnp>>>importmatplotlib.pyplotasplt>>>plt.rcParams['font.family']='SimHei'>>>plt.rcParams['axes.unicode_minus']=False電商數(shù)據(jù)提取該數(shù)據(jù)集一共由8項特征組成,本案例中需要用“商品編號”、“性別”、“年齡”、“職業(yè)類型”、“購買金額”共5項特征用于可視化分析。使用np.loadtext()將每項特征導入為NumPy數(shù)組供后續(xù)分析使用,導入時需跳過第一行表頭內(nèi)容,并注意特征數(shù)據(jù)的格式:前3項特征的數(shù)據(jù)格式為字符串,后2項特征的數(shù)據(jù)格式為浮點數(shù)。#商品編號數(shù)據(jù)>>>product_id=np.loadtxt("CustomerData.csv",delimiter=",",skiprows=1,usecols=(2),dtype=np.str_,encoding='utf_8_sig')#性別數(shù)據(jù)>>>gender=np.loadtxt("CustomerData.csv",delimiter=",",skiprows=1,usecols=(3),dtype=np.str_,encoding='utf_8_sig')#年齡數(shù)據(jù)>>>age=np.loadtxt("CustomerData.csv",delimiter=",",skiprows=1,usecols=(4),dtype=np.str_,encoding='utf_8_sig')#職業(yè)類型數(shù)據(jù)>>>occupation=np.loadtxt("CustomerData.csv",delimiter=",",skiprows=1,usecols=(5),encoding='utf_8_sig')#購買金額數(shù)據(jù)>>>purchase=np.loadtxt("CustomerData.csv",delimiter=",",skiprows=1,usecols=(8),encoding='utf_8_sig')銷售量與銷售額前十位的商品>>>defgroupby(x):...x_uniques=np.unique(x)...return{xi:np.where(x==xi)forxiinx_uniques}#根據(jù)商品編號分組>>>id_index=groupby(product_id)#計算每種商品編號的銷售總額并按降序排序>>>purchase_group={key:purchase[id_index[key]].sum()forkeyinid_index.keys()}>>>sorted_purchase=sorted(purchase_group.items(),key=lambdakv:(kv[1],kv[0]),reverse=True)>>>purchase_top_label=[i[0]foriinsorted_purchase[:10]]>>>purchase_top_data=[i[1]foriinsorted_purchase[:10]]#計算每種商品編號的數(shù)量并按降序排序>>>product_group={key:id_index[key][0].shape[0]forkeyinid_index.keys()}>>>sorted_product=sorted(product_group.items(),key=lambdakv:(kv[1],kv[0]),reverse=True)>>>purchase_count_top_label=[i[0]foriinsorted_product[:10]]>>>purchase_count_top_data=[i[1]foriinsorted_product[:10]]#對銷售額和銷售量前十位的商品進行可視化分析>>>fig,ax=plt.subplots(2,1,figsize=(16,12),dpi=300)>>>ax[0].plot(purchase_top_label,purchase_top_data,'co-')>>>ax[0].grid()>>>ax[0].set_xlabel('商品編號')>>>ax[0].set_ylabel('商品銷售額')>>>ax[0].set_title('銷售額前十位的商品',fontsize='20')>>>ax[1].plot(purchase_count_top_label,purchase_count_top_data,'yo-')>>>ax[1].grid()>>>ax[1].set_xlabel('商品編號')>>>ax[1].set_ylabel('商品銷售量')>>>ax[1].set_title('銷售量前十位的商品',fontsize='20')>>>plt.show()銷售量與銷售額后十位的商品#銷售額后十位的商品>>>purchase_last_label=[i[0]foriinsorted_purchase[-10:]]>>>purchase_last_data=[i[1]foriinsorted_purchase[-10:]]#銷售量后十位的商品>>>purchase_count_last_label=[i[0]foriinsorted_product[-10:]]>>>purchase_count_last_data=[i[1]foriinsorted_product[-10:]]#對銷售額和銷售量后十位的商品進行可視化分析>>>fig,ax=plt.subplots(2,1,figsize=(16,12),dpi=300)>>>ax[0].plot(purchase_last_label,purchase_last_data,'co-')>>>ax[0].grid()>>>ax[0].set_xlabel('商品編號')>>>ax[0].set_ylabel('商品銷售額')>>>ax[0].set_title('銷售額后十位的商品',fontsize='20')>>>ax[1].plot(purchase_count_last_label,purchase_count_last_data,'yo-')>>>ax[1].grid()>>>ax[1].set_xlabel('商品編號')>>>ax[1].set_ylabel('商品銷售量')>>>ax[1].set_title('銷售量后十位的商品',fontsize='20')>>>plt.show()各年齡段消費水平統(tǒng)計圖#根據(jù)年齡分組>>>age_index=groupby(age)#計算消費者中每個年齡段消費額的平均值>>>ages_purchase_mean={key:purchase[age_index[key]].mean()forkeyinage_index.keys()}>>>ages_purchase_mean_label=[iforiinages_purchase_mean.keys()]>>>ages_purchase_mean_data=[iforiinages_purchase_mean.values()]#計算消費者中每個年齡的總消費額>>>ages_purchase_sum={key:purchase[age_index[key]].sum()forkeyinage_index.keys()}>>>ages_purchase_sum_label=[iforiinages_purchase_sum.keys()]>>>ages_purchase_sum_data=[iforiinages_purchase_sum.values()]#對年齡段與消費水平的關(guān)系進行可視化分析>>>fig,ax=plt.subplots(2,1,figsize=(16,12),dpi=300)>>>ax[0].plot(ages_purchase_mean_label,ages_purchase_mean_data,'gs-')>>>ax[0].grid();>>>ax[0].set_xlabel('年齡段')>>>ax[0].set_ylabel('平均消費額(元)')>>>ax[0].set_title('各年齡段平均消費額',fontsize='20')>>>ax[1].plot(ages_purchase_sum_label,ages_purchase_sum_data,'rs-')>>>ax[1].grid()>>>ax[1].set_xlabel('年齡段')>>>ax[1].set_ylabel('總消費額(元)')>>>ax[1].set_title('各年齡段總消費額',fontsize='20')>>>plt.show()消費者年齡與性別分布圖#計算消費者中每個年齡段的人數(shù)>>>age_group={key:age_index[key][0].shape[0]forkeyinage_index.keys()}>>>ages_group_label=[iforiinage_group.keys()]>>>ages_group_data=[iforiinage_group.values()]#計算消費者中男性與女性的占比>>>gender_label,gender_data=np.unique(gender,return_counts=True)>>>gender_label=np.array(['女性','男性'])#對消費者的年齡與性別分布進行可視化分析>>>fig,ax=plt.subplots(1,2,figsize=(16,8),dpi=300)>>>ax[0].pie(ages_group_data,labels=ages_group_label,autopct='%d%%',colors=['orange','salmon','lightgreen','gold','yellowgreen','turquoise','darkorange','y'])>>>ax[0].axis('equal')>>>ax[0].set_title("消費者年齡分布圖",fontsize='20')>>>ax[1].pie(gender_data,labels=gender_label,autopct='%d%%',colors=['yellowgreen','darkorange'])>>>ax[1].axis('equal')>>>ax[1].set_title("消費者性別分布圖",fontsize='20')>>>plt.show()消費者職業(yè)類型分布與消費水平關(guān)系圖#計算消費者中每種職業(yè)類別的人數(shù)>>>occupation_label,occupation_data=np.unique(occupation,return_counts=True)#按照職業(yè)類型進行分組>>>occupation_index=groupby(occupation)#計算每種職業(yè)類型的平均消費額>>>occupation_purchase_group={key:purchase[occupation_index[key]].mean()forkeyinoccupation_index.keys()}>>>occupation_purchase_label=[iforiinoccupation_purchase_group.keys()]>>>occupation_purchase_data=[iforiinoccupation_purchase_group.values()]#對職業(yè)類型和消費水平的關(guān)系進行可視化分析>>>fig,ax=plt.subplots(2,1,figsize=(16,12),dpi=300)>>>ax[0].bar(occupation_label,occupation_data,color='purple')>>>ax[0].set_xticks(occupation_label)>>>ax[0].set_xlabel('職業(yè)類型')>>>ax[0].set_ylabel('人數(shù)')>>>ax[0].set_title('消費者中的職業(yè)類型分布',fontsize='20')>>>ax[1].plot(occupation_purchase_label,occupation_purchase_data,'ro-')>>>ax[1].grid();>>>ax[1].set_xlabel('職業(yè)類型');>>>ax[1].set_ylabel('平均消費額(元)');>>>ax[1].set_title('各職業(yè)的平均消費額',fontsize='20');>>>ax[1].set_xticks(occupation_purchase_label)>>>plt.show()實例:氣象數(shù)據(jù)可視化分析05問題分析氣象信息數(shù)據(jù)與民生息息相關(guān),尤其是在指導生產(chǎn)與生活中起著舉足輕重的作用。如人們每天都習慣查看氣象軟件或氣象新聞,了解當?shù)氐臏囟?、降雨情況,安排出行計劃。隨著獲取氣象數(shù)據(jù)的手段逐漸增加,合理地對氣象數(shù)據(jù)進行探索與可視化分析能夠為氣象監(jiān)測、氣象預報與災害預警提供有效的科學支撐。在本節(jié)中,將讀取上海2021年全年的氣象數(shù)據(jù),使用可視化手段對溫度、降雨、氣候、風向等信息開展全面的分析。數(shù)據(jù)導入和風格設(shè)置>>>importnumpyasnp>>>importmatplotlib.pyplotasplt>>>fromscipy.statsimportnorm>>>plt.style.use('s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 托管民房裝修合同范例
- 青海交通職業(yè)技術(shù)學院《代數(shù)與幾何(上)》2023-2024學年第一學期期末試卷
- 2024至2030年中國裹腿棖八仙桌行業(yè)投資前景及策略咨詢研究報告
- 2024至2030年中國自動復位注膠槍行業(yè)投資前景及策略咨詢研究報告
- 繡花燈罩行業(yè)深度研究報告
- 玻璃門中間鎖行業(yè)深度研究報告
- 2024年廣場磚項目可行性研究報告
- 2024年刷握壓簧項目可行性研究報告
- 2024年不銹鋼穿刺飾品項目可行性研究報告
- 2024至2030年中國射流式耐磨通風機行業(yè)投資前景及策略咨詢研究報告
- 關(guān)于糖尿病的綜述論文
- 政府采購驗收報告表
- 《靜脈輸液和輸血法》PPT課件.ppt
- 《質(zhì)量管理小組活動準則》2020版_20211228_111842
- 星巴克案例分析
- 工業(yè)區(qū)位和區(qū)位因素的變化(以首鋼為例)
- 物業(yè)管理搞笑小品劇本 搞笑小品劇本:物業(yè)管理難啊
- 《木偶兵進行曲》教案
- 五四制青島版一年級科學上冊第四單元《水》全部教案
- 組織架構(gòu)圖PPT模板
- 外研版七年級上ModuleUnit教學反思
評論
0/150
提交評論