seaborn 数据可视化(一)连续型变量可视化
一.綜述
Seaborn其實是在matplotlib的基礎上進行了更高級的API封裝,從而使得作圖更加容易,圖像也更加美觀,本文基于seaborn官方API還有自己的一些理解。
1.1.樣式控制:axes_style() and set_style()
seaborn提供了5個主題:
darkgrid 黑色網格(默認)
whitegrid 白色網格
dark 黑色背景
white 白色背景
ticks 帶刻度線
一個簡單的小例子:
import numpy as np
sns.set_style("darkgrid")
def cosplot(flip=1): #余弦偏移 x = np.linspace(0,14,100) for i in range(1,7): plt.plot(x,np.cos(x+i*.5)*(7-i)*flip) cosplot() # 默認無參數狀態,就是刪除上方和右方的邊框 sns.despine()
1.2 .color_palette()創建調色板
1.2.1 .分類調色板——分類色板(定性)是在區分沒有固定順序的數據時最好的選擇
current_palette = sns.color_palette() sns.palplot(current_palette)
默認顏色主題共有六種不同的變化分別是:deep, muted, pastel, bright, dark, 和 colorblind。
current=sns.color_palette('dark')
sns.palplot(current)
二.連續型單變量的數據可視化
在單變量為分類變量的時候,數據的分析會相對簡單,可以通過非常簡單的sum,mean等統計變量直接查看自己需要的統計信息基本就能滿足我們的需求,非常簡單,并不會給我們帶來非常大的困難,但是如果單變量為連續變量的時候,數據的可視化就較為重要.
一般最常見的對連續單變量特征進行分析的情況會出現在回歸等問題中,這個時候通過可視化的方式可以很快地讓我們了解到數據的分布情況以及是否有奇異值的情況.這對我們數據的處理能帶來極大的方便.
常用的函數:hist、kdeplot、distplot
首先導入所需要的包
import numpy as np
import pandas as pd
import warnings
from scipy import stats,integrate
import matplotlib.pyplot as plt
warnings.filterwarnings('ignore')   #忽略了警告錯誤的輸出
import seaborn as sns
sns.set_style("darkgrid")
sns.set(color_codes=True)  #set( )設置主題,調色板更常用  
np.random.seed(sum(map(ord, "distributions")))
   ord()函數它以一個字符(長度為1的字符串)作為參數,返回對應的ASCII數值,或者Unicode數值.
  如果所給的Unicode字符超出了你的Python定義范圍,則會引發一個TypeError的異常.
  利用np.random.seed()函數設置相同的seed,每次生成的隨機數相同。如果不設置seed,則每次會生成不同的隨機數.
2.1.hist
繪制直方圖的方法在matplotlib中,這個方法可以直觀地讓我們了解到散落在各個區間的數據的情況(數據分布),hist默認為10個bins.
x=np.random.normal(size=100) plt.hist(x)
2.2.kdeplot
對于連續的變量,光看直方圖肯定是不夠的,數據的分布的觀察也是必不可少的,這時我們需要借用KDE(Kernel Density Estimate)函數
seaborn.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None, hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None, color=None, vertical=False, norm_hist=False, axlabel=None, label=None, ax=None)
Parameters:
a : Series, 1d-array, or list. #一維數組
bins : argument for matplotlib hist(), or None, optional #設置分桶數
hist : bool, optional #控制是否顯示分桶柱子
kde : bool, optional #控制是否顯示核密度估計圖
rug : bool, optional #控制是否顯示觀測實例豎線
fit : random variable object, optional #控制擬合的參數分布圖形
{hist, kde, rug, fit}_kws : dictionaries, optional
Keyword arguments for underlying plotting functions.
vertical : bool, optional #顯示正交控制
If True, oberved values are on y-axis.
sns.kdeplot(x,shade=True)
KDE的帶寬bandwidth(bw)參數控制估計對數據的擬合程度,與直方圖中的bin(數據切分數量參數)大小非常相似。 它對應于我們上面繪制的內核的寬度。
sns.kdeplot(x)
sns.kdeplot(x, bw=.2, label="bw: 0.2")
sns.kdeplot(x, bw=2, label="bw: 2")
plt.legend();
2.3.displot
上面的兩個函數非常實用,但是還有一個非常好的函數,distplot 函數,該函數包含了絕大多數單變量可視化的能力,可以直接使用distplot實現上面兩個函數的功能,此外它還可以繪制出其他的近似分布.
默認的distplot能直接繪制出我們需要的直方圖以及對應的核密度估計(KDE).
sns.distplot(x)
當然如果不想看到kde曲線,我們可以直接將kde去掉,如果只想看kde曲線,我們也可以把直方圖去掉.
繪制kde曲線一般會比較耗時,所以可以直接將kde設置為False
sns.distplot(x,kde=False,rug=True)
當然也可以將直方圖省去.僅看kde曲線
sns.distplot(x,hist=False,rug=True)
此外,distplot可以繪制很多分布,函數內部涵蓋了大量的分布函數,可以用來近似擬合數據.這對于熟悉統計的人來說十分有用.例如gamma函數等等.
y=np.random.gamma(6,size=200) sns.distplot(y,bins=20,rug=True) sns.distplot(y,bins=20,kde=False,rug=True,fit=stats.gamma)
二.連續(continious)的二元變量特征的數據可視化
上面的數據可視化是基于單變量的,常常用于對連續形式的label(回歸問題中較為常見)進行觀察處理.實際問題中我們不會僅僅只對數據進行觀察,還需要進行預測等,自然而然的,數據之間關系的分析就顯得非常重要.此處我們開始對數據之間的關系進行分析,主要是兩個連續變量之間的相關性分析.關于涉及分類變量的部分我們會在第后續分進行介紹.
這一節主要介紹如下幾個函數matplotlib.pyplot中的scatterplot函數以及seaborn中的jointplot函數.
用多元高斯分布函數生成兩個變量x,y.
mean,cov=[0,1],([0.5,1],(1,0.5)) data=np.random.multivariate_normal(mean,cov,size=200) df=pd.DataFrame(data,columns=['x','y']) df.head()
2.1.Scatterplot函數
  這個函數是通用的,尤其是兩個變量都是連續型變量的時候,我們希望看看在二維平面上二者之間的關系時必然會先想到散點圖函數,當然當數據比較多的時候,建議采樣觀察[,不然真的很耗時.
  通過Scatterplot我們可以很容易的發現一些數據的分布規律,是否有簇的存在等等,在涉及類似于經緯度的問題時,我們經常會通過scatterplot看數據,然后考慮聚類等操作.
plt.scatter(df['x'].values,df['y'].values)
2.2.Jointplot函數
Scatterplot函數是非常實用的,但是用過seaborn的伙伴肯定都還會知道joinplot這個函數,不僅能方便的繪制散點圖,同時還融入了很多其他功能,還可以幫我們直接進行一些簡單的模型的擬合(linear regression,etc)
joinplot這個函數顯示兩個變量之間的雙變量(或聯合)關系以及每個變量的單變量(或邊際)分布和軸。
還可以在圖像加回歸擬合直線
sns.jointplot(x='x',y='y',data=df,kind='reg')
Hexbin繪圖和KDE繪圖,這兩個繪圖大致可以更加直觀的炫酷的看出數據的一個分布情況(例如hex圖,越白的地方數據就越少,基本都沒有數據在那里).
因為它顯示了落在六邊形倉內的觀測數。該圖適用于較大的數據集。通過matplotlib plt.hexbin函數和jointplot()中的樣式可以實現。
sns.jointplot(x="x", y="y", data=df,kind ='hex' );
使用白色背景效果:
with sns.axes_style("white"):
    sns.jointplot(x=x, y=y, kind="hex", color="k");
在seaborn中,這種圖用等高線圖顯示,可以在jointplot()中作為樣式傳入參數使用:
sns.jointplot(x="x", y="y", data=df, kind="kde");
還可以使用kdeplot()函數繪制二維核密度圖:
f, ax = plt.subplots(figsize=(6, 6)) sns.kdeplot(df.x, df.y, ax=ax) sns.rugplot(df.x, color="g", ax=ax) sns.rugplot(df.y, vertical=True, ax=ax);
連續地顯示雙變量密度,可以簡單地增加n_levels參數增加輪廓級數:
f, ax = plt.subplots(figsize=(6, 6)) cmap = sns.cubehelix_palette(as_cmap=True, dark=0, light=1, reverse=True) sns.kdeplot(df.x, df.y, cmap=cmap, n_levels=60, shade=True);
plot_joint函數,該繪圖函數可以將很多繪圖形式放在同一張圖表中,更加豐富我們的視圖.
g = sns.jointplot(x="x", y="y", data=df, kind="kde", color="m")
g.plot_joint(plt.scatter, c="w", s=30, linewidth=1, marker="+")
g.ax_joint.collections[0].set_alpha(0)
g.set_axis_labels("$X$", "$Y$");
2.3.pairplot函數
該函數會同時繪制數據中所有特征兩兩之間的關系圖.因為pairplot是建立在pairgrid之上,所以可以將中間的很多函數進行變換,例如下面的kde的例子.
默認對角線histgram,非對角線kdeplot
iris=sns.load_dataset('iris')  #導入經典的鳶尾花數據
sns.pairplot(iris);
對于jointplot()和JointGrid之間的關系,pairplot()函數是建立在一個PairGrid對象上的,可以直接使用它來獲得更大的靈活性:
g = sns.PairGrid(iris) g.map_diag(sns.kdeplot) g.map_offdiag(sns.kdeplot, cmap="Blues_d", n_levels=6);
g = sns.PairGrid(iris) g.map_diag(sns.kdeplot) g.map_offdiag(sns.kdeplot);
參考:
https://zhuanlan.zhihu.com/p/27471537
https://blog.csdn.net/qq_34264472/article/details/53814653
https://blog.csdn.net/cymy001/article/details/78418432
https://www.kesci.com/apps/home/project/59f687e1c5f3f511952baca0
總結
以上是生活随笔為你收集整理的seaborn 数据可视化(一)连续型变量可视化的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: C++实现双人枪战游戏
- 下一篇: WIN10 拨号连接下 如何开启移动热点
