日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Seaborn——绘制统计图形

發(fā)布時(shí)間:2023/12/13 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Seaborn——绘制统计图形 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 可視化數(shù)據(jù)的分布
    • 繪制單變量分布
    • 繪制雙變量分布
    • 繪制成對(duì)的雙變量分布
  • 用分類數(shù)據(jù)繪圖
    • 類別散點(diǎn)圖
      • 通過stripplot()函數(shù)畫散點(diǎn)圖
      • swarmplot()函數(shù)
    • 類別內(nèi)的數(shù)據(jù)分布
      • 繪制箱型圖
      • 繪制提琴圖
    • 類別內(nèi)的統(tǒng)計(jì)估計(jì)
      • 繪制條形圖
      • 繪制點(diǎn)圖


可視化數(shù)據(jù)的分布

繪制單變量分布

一般采用最簡單的直方圖描述單變量的分布情況。Seaborn中提供了displot()函數(shù)。

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)

上述函數(shù)中常用的參數(shù)含義如下:

  • a:表示要觀察的數(shù)據(jù),可以是Sries、一維數(shù)組或列表
  • bins:用于控制條形的數(shù)量
  • hist:接收布爾類型,表示是否繪制(標(biāo)注)直方圖
  • kde:接收布爾類型,表示是否繪制高斯核密度估計(jì)曲線
  • rug:接收布爾類型,表示是否在支持的軸的方向上繪制rugplot
  • 通過distplot()函數(shù)繪制直方圖:

    import seaborn as sns import numpy as npsns.set() # 顯式調(diào)用set()獲取默認(rèn)繪圖 np.random.seed(0) # 確定隨機(jī)數(shù)生成器的種子 arr = np.random.randn(100) # 生成隨機(jī)數(shù)組 ax = sns.distplot(arr, bins=10) # 繪制直方圖

    輸出結(jié)果:

    由圖可得,直方圖共有10個(gè)條柱,每個(gè)條柱的顏色為藍(lán)色,并且擁有核密度估計(jì)曲線。核密度估計(jì)是在概率論中用來估計(jì)未知的密度函數(shù),屬于非參數(shù)檢驗(yàn)方法之一,可以比較直觀地看出數(shù)據(jù)樣本本身的分布特征。


    如果想要僅擁有核密度估計(jì)曲線,設(shè)置相關(guān)參數(shù)即可:

    arr_random = np.random.randint(0, 100, 500) # 繪制包含500個(gè)位于[0, 100)之間的隨機(jī)整數(shù)數(shù)組 sns. distplot(arr_random, hist=False, rug=True) # 繪制核密度估計(jì)曲線

    輸出結(jié)果:

    繪制一條核密度估計(jì)曲線,并且在x軸的上方生成了觀測(cè)數(shù)值的小細(xì)條。

    注意:如果希望Seaborn用Matplotlib的默認(rèn)樣式,之前可以通過從Seaborn庫中導(dǎo)入apionly模塊解決這個(gè)問題,但是從2017年7月起這個(gè)方法已經(jīng)被棄用了。因此,現(xiàn)在導(dǎo)入Seaborn時(shí),需要顯式地調(diào)用set()或set_style()、set_context()和set_palette()中的一個(gè)或多個(gè)函數(shù),以獲取Seaborn或者M(jìn)atplotlib默認(rèn)的繪圖樣式。

    擬合并繪制核密度估計(jì)曲線還可以使用kedeplot()函數(shù)


    繪制雙變量分布

    兩個(gè)變量的二元分布可視化可以顯示兩個(gè)變量之間的雙變量關(guān)系以及每個(gè)變量在單獨(dú)坐標(biāo)軸上的單變量分布。

    jointplot(x, y, data=None, kind=“scatter”, stat_func=None,
    color=None, height=6, ratio=5, space=.2,
    dropna=True, xlim=None, ylim=None,
    joint_kws=None, marginal_kws=None, annot_kws=None, **kwargs)

    上述函數(shù)中常用參數(shù)的含義如下:

  • kind:表示繪制圖形的類型
  • stat_func:用于計(jì)算有關(guān)關(guān)系的統(tǒng)計(jì)量并標(biāo)注圖
  • size:用于設(shè)置圖的大小(正方形)
  • ratio:表示中心圖與側(cè)邊圖的比例。該參數(shù)的值越大,則中心圖的占比會(huì)越大。
  • space:用于設(shè)置中心圖與側(cè)邊圖的間隔大小。
  • xlim,ylim:表示x、y軸的范圍。
  • 繪制散點(diǎn)圖:

    dataframe_obj = pd.DataFrame({"x": np.random.randn(500),"y": np.random.randn(500)}) # 創(chuàng)建DataFrame對(duì)象 sns.jointplot(x="x", y='y', data=dataframe_obj) # 繪制散點(diǎn)圖

    輸出結(jié)果:

    x軸的名稱為“x”,y軸的名稱為“y”,兩軸的數(shù)據(jù)均為500個(gè)隨機(jī)數(shù)。可以看到的是散點(diǎn)圖的上方和右側(cè)增加了直方圖,便于觀察x和y軸數(shù)據(jù)的整體分布情況,并且它們的均值都是0。


    繪制二維直方圖:

    dataframe_obj = pd.DataFrame({"x": np.random.randn(500),"y": np.random.randn(500)}) # 創(chuàng)建DataFrame對(duì)象 sns.jointplot(kind='hex', data=dataframe_obj, x='x', y='y') # 繪制二維直方圖

    輸出結(jié)果:

    從六邊形顏色的深淺,可以觀察到數(shù)據(jù)密集的程度,圖形的上方和右側(cè)依然給出了直方圖。

    注意: 繪制二維直方圖時(shí)最好是用白色背景以便觀察六邊形顏色深淺。


    繪制核密度估計(jì)圖形:

    利用核密度估計(jì)同樣可以查看二元分布,Seaborn中用等高線圖來表示。

    sns.jointplot(kind='kde', x='x', y='y', data=dataframe_obj) # 繪制核密度估計(jì)圖形

    輸出結(jié)果:

    繪制了核密度的等高線圖,通過觀察等高線的顏色深淺,可以看出哪個(gè)范圍的數(shù)值分布的最多,哪個(gè)范圍的數(shù)值分布的最少。同樣的,在圖形的上方和右側(cè)給出了核密度曲線圖。


    繪制成對(duì)的雙變量分布

    要想在數(shù)據(jù)集中繪制成對(duì)的雙變量分布,則可以使用pairplot()函數(shù)實(shí)現(xiàn),該函數(shù)會(huì)創(chuàng)建一個(gè)坐標(biāo)軸矩陣,并顯示DataFrame對(duì)象中每對(duì)變量的關(guān)系。該函數(shù)亦可繪制每個(gè)變量在對(duì)角軸上的單變量分布。

    代碼如下:

    通過load_dataset()函數(shù)加載了seaborn中內(nèi)置的數(shù)據(jù)集,根據(jù)tips數(shù)據(jù)集繪制多個(gè)雙變量分布。【如無法正確運(yùn)行,則在這里下載zip文件,然后在電腦中,使用搜索功能找到seaborn-data文件夾,將zip文件解壓到文件夾中,具體步驟如下圖:】

    dataset = sns.load_dataset("tips") # 加載seaborn中的數(shù)據(jù)集 sns.pairplot(dataset) # 繪制多個(gè)成對(duì)的雙變量分布

    輸出結(jié)果:


    用分類數(shù)據(jù)繪圖

    類別散點(diǎn)圖

    stripplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,
    jitter=True, dodge=False, orient=None, color=None, palette=None,
    size=5, edgecolor=“gray”, linewidth=0, ax=None, **kwargs)

    上述函數(shù)中常用參數(shù)如下:

  • x,y,hue:用于繪制長葛市數(shù)據(jù)的輸入。
  • data:用于繪制的數(shù)據(jù)集。如果x和y不存在,則它將作為寬格式,否則將作為長格式。
  • order,hue_order:用于繪制分類的級(jí)別。
  • jitteer:表示抖動(dòng)的程度(僅沿類別軸)。當(dāng)很多數(shù)據(jù)點(diǎn)重疊時(shí),可以指定抖動(dòng)的數(shù)量,或者設(shè)為True使用默認(rèn)值。
  • 通過stripplot()函數(shù)畫散點(diǎn)圖

    代碼如下:

    tips = sns.load_dataset("tips") sns.stripplot(x='day', y='total_bill', data=tips)

    輸出結(jié)果:

    從圖中可以看出,圖標(biāo)橫坐標(biāo)時(shí)分類的數(shù)據(jù),而且一些數(shù)據(jù)點(diǎn)會(huì)互相重疊,不易于觀察。可以在調(diào)用stripplot()函數(shù)時(shí)傳入jitter參數(shù),以調(diào)整橫坐標(biāo)的位置。


    改變橫坐標(biāo)的位置:

    tips = sns.load_dataset("tips") sns.stripplot(x='day', y='total_bill', data=tips, jitter=True)

    輸出結(jié)果:


    swarmplot()函數(shù)

    亦可使用swarmplot()函數(shù)繪制散點(diǎn)圖,該函數(shù)的好處是所有的數(shù)據(jù)點(diǎn)都不會(huì)重疊,可以很清晰地觀察到數(shù)據(jù)的分布情況。

    代碼如下:

    tips = sns.load_dataset("tips") sns.swarmplot(x='day', y='total_bill', data=tips)

    輸出結(jié)果:


    類別內(nèi)的數(shù)據(jù)分布

    由于散點(diǎn)圖查看各個(gè)分類中的數(shù)據(jù)分布不夠直觀,故可利用下列兩種圖形查看:

  • 箱型圖:直觀地查看數(shù)據(jù)的四分位分布(1/4分位,中位數(shù),3/4分位以及四分位距)
  • 提琴圖:箱型圖與核密度圖地的結(jié)合,可以展示任意位置的密度,可以很直觀地看到哪些位置的密度較高
  • 繪制箱型圖

    boxplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,
    orient=None, color=None, palette=None, saturation=.75,
    width=.8, dodge=True, fliersize=5, linewidth=None,
    whis=1.5, ax=None, **kwargs)

    上述函數(shù)常用參數(shù)如下:

  • orient:表示數(shù)據(jù)垂直或水平顯示,取值為“v”|“h”
  • palette:用于設(shè)置不同級(jí)別色相的顏色變量。
  • saturation:用于設(shè)置數(shù)據(jù)顯示的顏色飽和度。
  • 代碼如下:

    tips = sns.load_dataset("tips") sns.boxplot(x='day', y='total_bill', data=tips)

    輸出結(jié)果:

    x軸的名稱為day,刻度范圍是Thur ~ Sun(周四至周日),y軸的名稱為total_bill,刻度范圍為10 ~ 50左右。

    從圖中可以看出,Thur列、Fri列中大部分?jǐn)?shù)據(jù)都小于30,但Thur列有5個(gè)異常值大于30、Fri列中有1個(gè)異常值大于40;Sat列中有3個(gè)大于40的異常值;Sun列中有兩個(gè)大于40的異常值。


    繪制提琴圖

    violinplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,
    bw=“scott”, cut=2, scale=“area”, scale_hue=True, gridsize=100,
    width=.8, inner=“box”, split=False, dodge=True, orient=None,
    linewidth=None, color=None, palette=None, saturation=.75,
    ax=None, **kwargs)

    代碼如下:

    tips = sns.load_dataset("tips") sns.violinplot(x='day', y='total_bill', data=tips)

    輸出結(jié)果:

    由圖可得,Thur列中位于5 ~ 25之間的數(shù)值較多,Fri列中位于5 ~ 30之間的數(shù)值較多,Sat列中位于5 ~ 35之間的數(shù)值較多,Sun列中位于5 ~ 40之間的數(shù)值較多。


    類別內(nèi)的統(tǒng)計(jì)估計(jì)

    想要集中查看每個(gè)分類的集中趨勢(shì)可以使用條形圖和點(diǎn)圖進(jìn)行展示。

  • barplot()函數(shù):繪制條形圖
  • pointplot()函數(shù):繪制點(diǎn)圖。
  • 繪制條形圖

    默認(rèn)情況下, barplot()函數(shù)會(huì)在整個(gè)數(shù)據(jù)集上使用均值進(jìn)行估計(jì)。若每個(gè)類別中有多個(gè)類別時(shí)(使用了hue參數(shù)),則條形圖可以使用引導(dǎo)來計(jì)算估計(jì)的置信區(qū)間(樣本統(tǒng)計(jì)量構(gòu)造的總體參數(shù)的估計(jì)區(qū)間),并使用誤差條來表示置信區(qū)間。

    代碼如下:

    tips = sns.load_dataset("tips") sns.barplot(x='day', y='total_bill', data=tips) # 繪制條形圖

    輸出結(jié)果:


    繪制點(diǎn)圖

    該函數(shù)會(huì)用高度估計(jì)值對(duì)數(shù)據(jù)進(jìn)行描述,而不是顯示完整的條形,只繪制點(diǎn)估計(jì)和置信區(qū)間。

    代碼如下:

    tips = sns.load_dataset("tips") sns.pointplot(x='day', y='total_bill', data=tips) # 繪制點(diǎn)圖

    輸出結(jié)果:

    總結(jié)

    以上是生活随笔為你收集整理的Seaborn——绘制统计图形的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。