1. 程式人生 > >利用Python進行資料分析——視覺化

利用Python進行資料分析——視覺化

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

基本入門

簡單圖

當用戶只提供了一個單維列表或陣列時,matplotlib會將其看成是一系列的Y值,並在圖中將其連起來,而且會根據Y值得數量自動新增X的座標值。

data=np.random.randn(50)
plt.plot(data.cumsum())
plt.show()

線形圖

線形圖為最基本的圖類,沒啥好說的

X=np.arange(10)
Y=X**2
plt.plot(X,Y,color
='g',linestyle='--') #綠色線條,虛線 plt.show()

散點圖

最基本的散點圖常用來找出兩個變數之間的關係

X=np.arange(30)        #30個序列值
Y=X+3*np.random.randn(30)        #Y為X的值加上3倍的高斯噪聲
plt.scatter(X,Y)
plt.show()

柱狀圖

柱狀圖常用於繪製頻率圖,資料通常為單維資料,展示變數的頻率分佈

data=np.random.randn(100)        #服從標準正態分佈的資料集
plt.hist(data,bins=20,color='k'
,alpha=0.3) #將X分為20個區間,黑色,透明度0.3 plt.show()

子圖

有時需要同時繪製多張圖片,這時候可以使用subplots()繪製子圖。

fig,axes=plt.subplots(2,2)

axes[0,0].hist(np.random.randn(100),bins=20,color='k',alpha=0.3)
axes[0,1].scatter(np.arange(30),np.arange(30)+np.random.randn(30))
axes[1,0].plot(np.random.randn(50).cumsum(),'k--')
plt.show()

顏色、標記與線條風格

在繪製線形圖時,常用的引數有:
- 顏色:color=
- 線條風格:linestyle=
- 標記:marker=

data=np.random.randn(20)
plt.plot(data,color='r',linestyle='-',marker='o')        #紅色,實線,圓點標註
plt.show()

注意到線形圖對於相鄰點之間的連線方式是在兩點之間連直線,可以使用引數drawstyle=來改變連線的方式:

X=np.arange(10)
Y=X**2
plt.plot(X,Y,drawstyle='steps-post',color='k')
plt.show()

標號、軸標籤與圖例

data1=np.random.randn(1000)
data2=np.random.randn(1000)
data3=np.random.randn(1000)

fig=plt.figure()        #新建一個圖物件
ax=fig.add_subplot(111)        #以一行一列的方式,在第一個位置增加一個子圖
ax.plot(data1.cumsum(),color='k',label='one')        #線條標籤為'one'
ax.plot(data2.cumsum(),color='b',linestyle='--',label='two')        #線條標籤為'two'
ax.plot(data3.cumsum(),color='r',linestyle='-.',label='three')        #線條標籤為'three'

ax.legend(loc='best')        #新增圖例

ticks=ax.set_xticks([0,250,500,750,1000])        #指定X軸的顯示數字
labels=ax.set_xticklabels(['one','two','three','four','five'],rotation=30,fontsize='small')        #轉換X軸的顯示值

ax.set_xlabel('Stages')        #X軸命名
ax.set_title('title of pic')         #圖命名

plt.show()

圖內說明

X=np.arange(-1,1,0.01)
Y=X**2

fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot(X,Y,color='k')

min_loc=(0,0)
ax.annotate("min",        #說明文字
            xy=(min_loc),        #需要新增說明的點的座標
            xytext=(min_loc[0],min_loc[1]+0.2),        #說明文字的座標
            arrowprops=dict(facecolor='black'))        #箭頭屬性

plt.show()

儲存圖片

fig,axes=plt.subplots(2,2)

axes[0,0].hist(np.random.randn(100),bins=20,color='k',alpha=0.3)
axes[0,1].scatter(np.arange(30),np.arange(30)+np.random.randn(30))
axes[1,0].plot(np.random.randn(50).cumsum(),'k--')

plt.savefig('tmp.png',dpi=400,bbox_inches='tight')

使用pandas和seaborn畫圖

matplotlib是一個相當低階的畫圖工具,實際中只會用到其一些基本元件,如:資料展示、圖例、標題和標註等。

pandas中可能存在多列資料,並且伴有行列標籤,pandas中內建了簡化後的對於DataFrame與Series的視覺化方法,另一個庫是seaborn。

線形圖

對Series直接繪圖時,會將序列的資料當成一系列Y值,而將Series的index當作X值:

X=np.arange(0,100,10)
Y=X**2
obj=pd.Series(Y,index=X)
obj.plot()

plt.show()

如果不想使用Series的index當作X值,使用引數use_index=

obj.plot(use_index=False)
plt.show()

DataFrame直接繪圖類似,會將DataFrame的每一列看作是不同的Y值序列,並使用index作為統一的X值:

frame=pd.DataFrame(np.random.randn(50,4),
                 index=np.arange(0,500,10),
                 columns=['A','B','C','D'])

frame.plot(use_index=False)
plt.show()

條形圖

plot.bar()與plot.barh()分別繪製豎直狀的條形圖與水平狀的條形圖。

fig,axes=plt.subplots(2,1)
obj=pd.Series(np.random.rand(5),index=['a','b','c','d','e'])
obj.plot.bar(ax=axes[0],color='k',alpha=0.7)        #ax引數接收子圖的位置
obj.plot.barh(ax=axes[1],color='k',alpha=0.7)

plt.show()

對於DataFrame,會將每一條資料(row)當作一個條,而將不同列的值整合到一個條中:

df=pd.DataFrame(np.random.rand(4,4),
               index=['one','two','three','four'],
               columns=['A','B','C','D'])        #每條資料有4列,因此繪圖時每大條包含4個子條
df.plot.bar()

plt.show()

可以使用引數stacked=將子條壓縮成一大條:

df.plot.barh(stacked=True)
plt.show()

假設需要統計派對人數與周幾的關係,可以使用條形圖來展示:

data=pd.read_csv('examples/tips.csv')
data.sample(5)

tips=pd.crosstab(data.loc[:,'day'],data.loc[:,'size'])
tips

party_pcts=tips.div(tips.sum(axis=1),axis=0)        #每行的資料除以列和,將每天的派對尺寸轉換成百分比形式
party_pcts.plot.bar()
plt.show()

當資料在繪製之前需要求和時,使用seaborn包會更簡單:

sns.barplot(x='size',y='day',data=data,orient='h')        #直接繪製size對於day的均值
plt.show()


上圖中的黑線為置信區間。

分面圖與非數值型資料

當需要對某一個非數值型別的變數再進行分別繪圖以檢視對比時,可以使用seaborn的factorplot()方法繪製對比圖:

sns.factorplot(x='day',y='size',
               row='time',col='smoker',        #以time的種類為行,以smoker的種類為列
               kind='bar',data=data)
plt.show()

sns.factorplot(x='total_bill',y='day',
              col='smoker',
              kind='box',data=data)        #繪製箱型圖
plt.show()

直方圖與密度圖

直方圖常用於表示頻率圖,而密度圖又被稱為核密度估計(KDE)。

data.loc[:,'size'].plot.hist(bins=6)
plt.show()

data.loc[:,'size'].plot.density()
plt.show()

同樣的,seaborn的distplot()方法使得繪製直方圖與密度圖更簡單:

dis_1=np.random.normal(0,1,size=200)
dis_2=np.random.normal(10,2,size=200)
data=pd.Series(np.concatenate([dis_1,dis_2]))

sns.distplot(data,bins=100,color='k')
plt.show()

散點圖

散點圖常用來考察多個變數之間的關係。

macro=pd.read_csv('examples/macrodata.csv')
macro.sample(5)

data=macro.loc[:,['cpi','m1','tbilrate','unemp']]
trans_data=np.log(data).diff().dropna()        #diff():後一個元素減前一個元素
trans_data.sample(5)

sns.regplot('m1','unemp',data=trans_data)        #帶回歸擬合的散點圖
plt.show()

在分析資料時,同時繪製不同變數組合下的散點圖是很有用的,這被稱為散點圖矩陣:

sns.pairplot(trans_data,diag_kind='kde',plot_kws={'color':'k','alpha':0.5})        #對角線設為密度圖
plt.show()

相關推薦

利用Python進行資料分析——視覺

import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns 基本入門 簡單圖 當用戶只提供了一個單維列表或陣列時,matplotl

利用Python進行資料分析——繪圖和視覺(八)(2)

1、註釋以及在Subplot上繪圖 除標準的圖表物件之外,你可能還希望繪製一些自定義的註釋(比如文字、箭頭或其他圖形等)。 註釋可以通過text、arrow和annotate等函式進行新增。text可以將文字繪製在圖表的指定座標(x, y),還可以加上一些自定義格式: In [41]: ax.t

利用python進行資料分析】繪圖和視覺

通常的引入約定是: import matplotlib.pyplot as plt fig,axes=plt.subplots(2,3) 這種用法,可以一下子產生2x3個子視窗,並且以numpy陣列的方式儲存在axes中,而fig仍然是整個影象物件,這樣我們可以通過對a

利用python進行資料分析之繪圖和視覺

matplotlib API入門  使用matplotlib的辦法最常用的方式是pylab的ipython,pylab模式還會向ipython引入一大堆模組和函式提供一種更接近與matlab的介面,matplotlib API函式位於matplotlib.pyplot模組中,其通常的引入約定是:import

轉載]利用Python進行資料分析——繪圖和視覺 xticks-學習筆記

matplotlib是一個用於創建出版質量圖表的桌面繪圖包(主要是2D方面)。該專案是由John Hunter於2002年啟動的,其目的是為Python構建一個MATLAB式的繪圖介面。如果結合使用一種GUI工具包(如IPython),matplotlib還具有諸如縮放和平移等互動功能。它不僅支援各種作業系

利用Python進行資料分析——第8章繪圖及視覺——學習筆記Python3 5.0.0

matplotlib API 入門 matplotlib API 函式(如plot和close)都位於matplotlib.pyplot模組中,通常的引入方式如下: import matplotlib.pyplot as plt Figure和Subplot matplot

利用Python進行資料分析·第2版》第9章 繪圖和視覺

資訊視覺化(也叫繪圖)是資料分析中最重要的工作之一。它可能是探索過程的一部分,例如,幫助我們找出異常值、必要的資料轉換、得出有關模型的 idea 等。另外,做一個可互動的資料視覺化也許是工作的最終目標。Python 有許多庫進行靜態或動態的資料視覺化,但我這裡重要關注於 ma

利用python進行資料分析-繪圖和視覺1

matplotlib AIP入門 1.Figure和Subplot matplotlib的影象都位於Figure物件中。你可以用plt.figure建立一個新的Figure: fig=plt.figu

利用Python進行資料分析之第七章 記錄2 資料規整:清理、轉換、合併、重塑

索引上的合併 DataFrame中傳入引數left_index=True或者right_index=True(或者兩個都傳入),表示DataFrame的index(索引)被用作兩個DataFrame連線的連線鍵,如下: dataframe1 = DataFrame({'key':

利用Python進行資料分析之第七章記錄 資料規整:清理、轉換、合併、重塑

合併資料集: pandas物件中的資料可以通過一些內建的方式進行合併: pandas.merge可根據一個或多個鍵將不同DataFrame中的行連線起來。SQL或其它關係型資料庫的使用者對此應該會比較熟悉,因為它實現的就是資料庫的連線操作。 pandas.concat可以沿著一條軸將多個

利用Python進行資料分析——資料規整:清理、轉換、合併、重塑(七)(4) .

1、資料轉換 目前為止介紹的都是資料的重排。另一類重要操作則是過濾、清理以及其他的轉換工作。 2、移除重複資料 DataFrame中常常會出現重複行。下面就是一個例子: [python] view plaincopyprint? In

利用python進行資料分析之——資料規整1(ETL)

待我學有所成,結髮與蕊可好。@夏瑾墨 by Jooey 合併資料集 資料庫風格的DataFrame合併 索引上的合併 軸向連線 1.資料庫風格的DataFrame合併 i

利用python進行資料分析之——資料規整2(ETL)

待我學有所成,結髮與蕊可好。@夏瑾墨 by Jooey 3.資料的軸向連線 Nunpy 有一個用於合併串聯原始Numpy陣列的concatenation函式 import numpy as np import pandas as pd from p

利用python進行資料分析(第二版) pdf下載

適讀人群 :適合剛學Python的資料分析師或剛學資料科學以及科學計算的Python程式設計者。 閱讀本書可以獲得一份關於在Python下操作、處理、清洗、規整資料集的完整說明。本書第二版針對Python 3.6進行了更新,並增加實際案例向你展示如何高效地解決一系列資料分析問題。你將在閱讀

利用Python進行資料分析》學習記錄

第8章249頁 原語句:party_counts = pd.crosstab(tips.day, tips.size) 現在的pandas似乎有個size屬性,就是計算資料的大小,而不會返回那一列具體的資料,比如這裡tips這個csv資料,其裡面包含一列size資料,現在來執行這句語句的話,

資料基礎---《利用Python進行資料分析·第2版》第12章 pandas高階應用

之前自己對於numpy和pandas是要用的時候東學一點西一點,直到看到《利用Python進行資料分析·第2版》,覺得只看這一篇就夠了。非常感謝原博主的翻譯和分享。 前面的章節關注於不同型別的資料規整流程和NumPy、pandas與其它庫的特點。隨著時間的發展,pandas發展出了更多適

資料基礎---《利用Python進行資料分析·第2版》第6章 資料載入、儲存與檔案格式

之前自己對於numpy和pandas是要用的時候東學一點西一點,直到看到《利用Python進行資料分析·第2版》,覺得只看這一篇就夠了。非常感謝原博主的翻譯和分享。 訪問資料是使用本書所介紹的這些工具的第一步。我會著重介紹pandas的資料輸入與輸出,雖然別的庫中也有不少以此為目的的工具

資料基礎---《利用Python進行資料分析·第2版》第4章 NumPy基礎:陣列和向量計算

之前自己對於numpy和pandas是要用的時候東學一點西一點,直到看到《利用Python進行資料分析·第2版》,覺得只看這一篇就夠了。非常感謝原博主的翻譯和分享。 NumPy(Numerical Python的簡稱)是Python數值計算最重要的基礎包。大多數提供科學計算的包都是用Nu

資料基礎---《利用Python進行資料分析·第2版》第11章 時間序列

之前自己對於numpy和pandas是要用的時候東學一點西一點,直到看到《利用Python進行資料分析·第2版》,覺得只看這一篇就夠了。非常感謝原博主的翻譯和分享。 時間序列(time series)資料是一種重要的結構化資料形式,應用於多個領域,包括金融學、經濟學、生態學、神經科學、物

資料基礎---《利用Python進行資料分析·第2版》第10章 資料聚合與分組運算

之前自己對於numpy和pandas是要用的時候東學一點西一點,直到看到《利用Python進行資料分析·第2版》,覺得只看這一篇就夠了。非常感謝原博主的翻譯和分享。 對資料集進行分組並對各組應用一個函式(無論是聚合還是轉換),通常是資料分析工作中的重要環節。在將資料集載入、融合、準備好之