利用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版》,覺得只看這一篇就夠了。非常感謝原博主的翻譯和分享。 對資料集進行分組並對各組應用一個函式(無論是聚合還是轉換),通常是資料分析工作中的重要環節。在將資料集載入、融合、準備好之