python數據分析之:繪圖和可視化


在數據分析領域,最出名的繪圖工具就是matlib。在Python同樣有類似的功能。就是matplotlib。前面幾章我們都在介紹數據的生成,整理,存儲。那么這一章將介紹如果圖形化的呈現這些數據。來看下面的代碼

這個代碼通過numpy生成50個隨機數,然后進行求和,最后將50個數繪制成圖像,k--代表以虛線的方式

import matplotlib.pyplot as plt

from numpy.random import randn

if __name__=="__main__":

    plt.plot(randn(50).cumsum(),'k--')

plt.show()

得到的圖片如下

我們還可以在一副圖中顯示多個圖片。

fig=plt.figure()

ax1=fig.add_subplot(2,2,1)

ax2=fig.add_subplot(2,2,2)

ax3=fig.add_subplot(2,2,3)

ax4=fig.add_subplot(2,2,4)

plt.show()

matplotlib的圖像都位於Figure對象中,通過fig.add_subplot可以創建多個圖片。比如fig.add_subplot(2,2,1)代表總共4個圖像,1代表為第1個圖像。那么這樣我們就可以繪制多個圖像,每個圖像用不同的方式來呈現

    fig=plt.figure()

    ax1=fig.add_subplot(2,2,1)

    ax2=fig.add_subplot(2,2,2)

    ax3=fig.add_subplot(2,2,3)

    ax4=fig.add_subplot(2,2,4)

    ax1.plot(randn(50).cumsum(), 'k--')

    ax2.hist(randn(50).cumsum())

    ax3.scatter(np.arange(30),np.arange(30)+3*randn(30))

    ax4.plot(randn(50).cumsum())

plt.show()

下面張圖分別繪制了4種圖形。

subplots的參數如下

我們還可以針對subplot調整各個圖的間距,通過subplots_adjust就可以達到

下面的代碼通過創造4個圖像,且共享x,y坐標軸。通過wspacehsapce設置為0,將各個圖像的左右,上下邊界都連接在了一起。

    fig,axis=plt.subplots(2,2,sharex=True,sharey=True)

    [axis[i,j].hist(randn(50),bins=50,color='k',alpha=0.5) for i in range(2) for j in range(2)]

    plt.subplots_adjust(wspace=0, hspace=0)

    plt.show()

結果如下:

前面介紹了如何作圖,下面將對圖片進行更細化的操作,設置x,y軸的刻度以及設置圖片標題。在下面的代碼中,設置x的刻度為0,10,25,40,50幾個區間並設置圖片的標題為test

    fig=plt.figure()

    ax=fig.add_subplot(1,1,1)

    ax.plot(randn(50).cumsum(),'k',label='one')

    ax.set_xticks([0,10,25,40,50])

    ax.set_title("test")

plt.show()

結果如下:

還可以通過ax.text(x,y,"2010")的方式對圖標上的某一點坐標進行文本標注

比如ax.text(0,0,"2010")就在0,0的坐標上標注2010的樣式

既然生成了圖片,那么該如何保存呢通過savefig的方式就可以進行保存,通過指定不同的圖片后綴名就可以進行文件的保存。

plt.savefig("figure.svg")

plt.savefig("figure.jpg")

plt.savefig("figure.png")

 

pandas中的繪圖函數:

前面介紹了matplotlib中的繪圖方法,這一章將介紹pandas中繪圖方法。代碼如下

首先通過Series產生數據,然后Series對象的索引會被傳遞給matplotlib用於繪制X

s=Series(np.random.randn(10).cumsum(),index=np.arange(0,100,10))

s.plot(color='k',alpha=0.7)

plt.title('pandas test')

plt.show()

結果如下所示:

接下來看下DataFrame的結果圖:

d=DataFrame(np.random.randn(10,4).cumsum(0),columns=['A','B','C','D'],index=np.arange(0,100,10))

d.plot()

plt.show()

結果如下:

通過上圖可以看到DataFrameplot方法會在一個subplot中為各列繪制一條線,並自動創建圖例。

Series.plot方法的參數:

DataFrameplot參數

plot中通過指定kind可以生成不同的圖形,比如kind=’bar’就是生成柱狀圖

我們在來看下下面的這組數據,通過設置stacked=True即可為DataFrame生成堆積柱狀圖,這樣可以使得每行的值就會被堆積在一起。

frame=DataFrame([[1,16,1,1,0,0],[2,53,18,13,1,0],[0,39,15,18,3,1],[1,48,4,5,1,3]],columns=[1,2,3,4,5,6],index=['Fri','Sat','Sun','Thur'])

frame.index.name=['day']

frame.columns.names=['size']

print frame

frame.plot(kind='barh',stacked=True)

plt.show()

數據如下:該數據的列表示人的索引。行代表是天數。這個數據的意義在與指示每個人在從周四到周日的消費情況

size   1   2   3   4  5  6

[day]                     

Fri    1  16   1   1  0  0

Sat    2  53  18  13  1  0

Sun    0  39  15  18  3  1

Thur   1  48   4   5  1  3

通過下面得到的結果來看,我們可以看到在周末的時候消費明顯增加。

密度圖:

密度圖也成為kde圖,這個圖是生成標准正態分布圖

s=Series(np.random.randn(20))

s.plot(kind='kde')

plt.show()

得到的正態分布圖如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM