1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        詳解 seaborn,快速實現(xiàn)統(tǒng)計數(shù)據(jù)可視化

        共 7288字,需瀏覽 15分鐘

         ·

        2022-01-24 08:43

        哈嘍,大家好。

        今天詳解 Seaborn,它基于 Matplotlib,用來制作統(tǒng)計圖形的 Python 庫。

        Seaborn 的優(yōu)勢:

        • 圖表豐富,比 matplotlib 易用
        • 與 pandas 結(jié)合
        • 支持?jǐn)?shù)值類型多變量關(guān)系圖
        • 支持?jǐn)?shù)值類型數(shù)據(jù)分布圖
        • 支持類別類型數(shù)據(jù)可視化
        • 支持回歸模型以及可視化
        • 輕松構(gòu)建結(jié)構(gòu)化多圖網(wǎng)格

        我整理了一份 seaborn 核心知識點的思維導(dǎo)圖

        seaborn核心知識

        需要的朋友文末回復(fù)關(guān)鍵詞獲取。

        下面我們就來學(xué)習(xí)一下這個強(qiáng)大的 Searborn 。


        1. 多變量關(guān)系圖

        多變量關(guān)系圖其實就是二維散點圖線圖,可以通過這些函數(shù)來繪制:relplot()、scatterplot()lineplot()

        scatterplot()只能繪制散點圖,lineplot()只能繪制線圖。

        relplot()都可以繪制,通過kind參數(shù)來區(qū)分:

        • kind="scatter"(默認(rèn))等價于scatterplot()
        • kind="line"等價于lineplot()

        在 seaborn 中,定義一個通用函數(shù)并用kind參數(shù)指定需要繪制的圖形,這種形式很常見。這樣做法的好處在于,調(diào)用一個函數(shù)便可以繪制多種圖形。

        1.1 繪圖

        繪制散點圖

        import?seaborn?as?sns
        import?pandas?as?pd
        import?numpy?as?np
        sns.set_theme(style="darkgrid")

        tips?=?sns.load_dataset("tips",?data_home='seaborn-data',?cache=True)
        sns.relplot(x="total_bill",?y="tip",?data=tips);
        散點圖

        繪制線圖

        df?=?pd.DataFrame({'a':?range(10),?'b':?np.random.randn(10)})
        sns.relplot(x="a",?y="b",?kind="line",?data=df)
        線圖

        seaborn 可以直接讀取 pandas DataFrame中的列作為x軸和y軸,一行代碼即可完成繪圖,使用比 matplotlib 更容易。

        1.2 常用參數(shù)

        relplot()函數(shù)中有一些常用的參數(shù),可以幫助我們繪制更復(fù)雜的圖形。

        以上面散點圖為例,設(shè)置hue參數(shù),可以為不同類別的點繪制不同的顏色。

        sns.relplot(x="total_bill",?y="tip",?hue="smoker",?data=tips);
        hue參數(shù)

        smokertips中的一列,取值為YesNo,上面散點圖中smoker=Yes時點是藍(lán)色,smoker=No時,點是橙色。

        設(shè)置col參數(shù),可以將數(shù)據(jù)繪制不同的散點圖中

        sns.relplot(x="total_bill",?y="tip",?col="smoker",?data=tips);
        col參數(shù)

        smoker=Yes的數(shù)據(jù)都繪制在第1行第1列的散點圖中;smoker=No的數(shù)據(jù)都繪制在第1行第2列的散點圖中。

        設(shè)置style參數(shù),可以為不同類別的點繪制不同的形狀。

        sns.relplot(x="total_bill",?y="tip",?style="smoker",?data=tips);
        style參數(shù)

        smoker=Yes的是圓點smoker=No星號。

        下圖列舉了replot的其他的參數(shù),使用方式與上面類似,這里就不再贅述了。

        參數(shù)

        這些參數(shù)對線圖也同樣適用,并且參數(shù)之間可以任意組合。

        1.3 特殊的線圖

        上面繪制的線圖,橫坐標(biāo)x取值是唯一的,但實際中有些數(shù)據(jù)橫坐標(biāo)取值不唯一,用relplot()繪制出來是下面的效果。

        fmri?=?sns.load_dataset("fmri",?data_home='seaborn-data',?cache=True)
        sns.relplot(x="timepoint",?y="signal",?kind="line",?data=fmri);
        橫坐標(biāo)聚合的線圖

        藍(lán)色實線是x的平均值,周圍的陰影是平均值的 95% 置信區(qū)間。

        周圍陰影可以通過ci參數(shù)設(shè)置,如:ci='sd'表示繪制標(biāo)準(zhǔn)差,而不是置信區(qū)間。

        sns.relplot(x="timepoint",?y="signal",?kind="line",?ci='sd',?data=fmri);
        ci參數(shù)

        ci=None可以不顯示陰影。

        設(shè)置estimator=None參數(shù)可以關(guān)閉聚合

        sns.relplot(x="timepoint",?y="signal",?estimator=None,?kind="line",?data=fmri);
        estimator

        2. 數(shù)據(jù)分布圖

        seaborn 提供 histplot(),kdeplot(),ecdfplot()rugplot()函數(shù),分別繪制直方圖核密度估計圖、經(jīng)驗累積分布圖垂直刻度。

        分布圖的通用函數(shù)是displot(),通過指定kind來繪制不同的圖:

        • kind="hist"(默認(rèn))等價于histplot()
        • kind="kde"等價于kdeplot()
        • kind="ecdf"等價于ecdfplot()

        由于rugplot()只是用來標(biāo)識刻度,它不需要kind指定,而是通過rug=Truerug=False(默認(rèn))來指定是否需要顯示在圖形中。

        2.1 直方圖

        直方圖是比較常見的數(shù)據(jù)分布圖,它的繪制也很簡單。

        sns.displot(penguins,?x="flipper_length_mm")
        直方圖

        seaborn 提供了binwidthbins等參數(shù)設(shè)置直方圖 bin 的寬度和數(shù)量,從而繪制不同形狀的直方圖

        這里也可以設(shè)置hue參數(shù),用不同顏色在一張圖里繪制不同類別的直方圖。當(dāng)在一張圖里繪制多個直方圖時,需要設(shè)置elementmultiple參數(shù)來指定多個直方圖的組合方式。

        如:multiple="stack"代表堆疊顯示。

        sns.displot(penguins,?x="flipper_length_mm",?hue="species",?multiple="stack")
        multiple="stack"

        設(shè)置stat參數(shù)可以歸一化直方圖。如:設(shè)置stat="probability"可以使條形高度的和為1。

        sns.displot(penguins,?x="flipper_length_mm",?hue="species",?stat="probability")
        stat="probability"

        以下是直方圖常見的參數(shù)及取值

        參數(shù)
        2.2 核密度估計圖

        直方圖的目的是通過分箱和計數(shù)觀察來近似生成數(shù)據(jù)的潛在概率密度函數(shù)。核密度估計 (KDE) 是為這一問題提供了不同的解決方案。

        sns.displot(penguins,?x="flipper_length_mm",?kind="kde")
        核密度估計圖

        seaborn 從0.11.0版本開始只支持高斯核函數(shù)。

        設(shè)置bw_adjust參數(shù)可以讓 KDE 圖更平滑。

        sns.displot(penguins,?x="flipper_length_mm",?kind="kde",?bw_adjust=2)
        bw_adjust=2

        設(shè)置kde=True而不是kind="kde",可以同時繪制直方圖KDE 圖。

        sns.displot(penguins,?x="flipper_length_mm",?kde=True)
        kde=True
        2.3 經(jīng)驗累積分布圖

        經(jīng)驗累積分布函數(shù)(ECDF) 通過每個數(shù)據(jù)點繪制了一條單調(diào)遞增的曲線,使得曲線的高度反映了具有較小值的觀測值的比例。

        sns.displot(penguins,?x="flipper_length_mm",?hue="species",?kind="ecdf")
        ECDF圖
        2.4 二元分布圖

        之前繪制的都是單變量分布圖,seaborn 也可以繪制兩個變量的分布圖。

        sns.displot(penguins,?x="bill_length_mm",?y="bill_depth_mm")
        二元分布圖

        用平面圖來展示二元直方圖只能通過每個方塊的顏色深淺定性觀察數(shù)據(jù)的多少。

        同樣的,也可以繪制二元核密度估計圖,畫出來的圖形是等高線。

        sns.displot(penguins,?x="bill_length_mm",?y="bill_depth_mm",?kind="kde")
        二元核密度估計圖

        設(shè)置fill=True,可以通過顏色定性觀察面的高度。

        seaborn 還提供了 jointplot() 函數(shù)為二元變量同時繪制不同圖形。

        sns.jointplot(data=penguins,?x="bill_length_mm",?y="bill_depth_mm")
        jointplot 直方圖

        jointplot()默認(rèn)繪制兩變量散點圖和單變量直方圖。

        設(shè)置kind=kde來繪制 KDE 圖。


        sns.jointplot(
        ????data=penguins,
        ????x="bill_length_mm",?y="bill_depth_mm",?hue="species",
        ????kind="kde"
        )
        jointplot KDE圖

        seanborn 還提供了pairplot()函數(shù),為更多變量繪圖。

        sns.pairplot(penguins)
        pairplot

        默認(rèn)繪圖仍然是直方圖和散點圖。同樣可以設(shè)置kind=kde繪制多變量 KDE 圖。


        3. 分類圖

        之前我們繪制的關(guān)系圖都是數(shù)值變量,當(dāng)數(shù)據(jù)中有類別數(shù)據(jù)(離散值)時,就需要用分類圖來繪制。

        seaborn 提供 catplot() 函數(shù)來繪制分類圖,有以下3種類別

        • 分類散點圖

          • kind="strip"(默認(rèn)) 等價于 stripplot()
          • kind="swarm" 等價于 swarmplot()
        • 分類分布圖

          • kind="box" 等價于 boxplot()
          • kind="violin" 等價于 violinplot()
          • kind="boxen" 等價于 boxenplot()
        • 分類估計圖

          • kind="point" 等價于 pointplot()
          • kind="bar" 等價于 barplot()
          • kind="count" 等價于 countplot()
        3.1 分類散點圖

        catplot()默認(rèn)使用stripplot()繪圖,它會用少量隨機(jī)"抖動"調(diào)整分類軸上的點位置,避免所有的點都重疊在一起。

        tips?=?sns.load_dataset("tips",?data_home='seaborn-data',?cache=True)
        sns.catplot(x="day",?y="total_bill",?data=tips)
        stripplot

        設(shè)置jitter參數(shù)可以控制抖動的幅度,當(dāng)jitter=False時,代表不抖動,繪制出的圖形跟使用關(guān)系散點圖是一樣的。

        sns.catplot(x="day",?y="total_bill",?jitter=False,?data=tips)

        等價于

        sns.relplot(x="day",?y="total_bill",?data=tips)
        jitter=False

        可以看到,圖上的xy坐標(biāo)相同的數(shù)據(jù)重合在一起,非常不方便觀察。

        雖然jitter可以設(shè)置“抖動”,但也有可能造成數(shù)據(jù)重疊。而kind="swarm"可以繪制非重疊的分類散點圖。

        sns.catplot(x="day",?y="total_bill",?kind="swarm",?data=tips)
        kind="swarm"
        3.2 分類分布圖

        kind="box" 可以繪制箱線圖。

        sns.catplot(x="day",?y="total_bill",?kind="box",?data=tips)
        kind="box"

        kind="boxen" 可以繪制增強(qiáng)箱線圖。

        diamonds?=?sns.load_dataset("diamonds",?data_home='seaborn-data',?cache=True)
        sns.catplot(x="color",?y="price",?kind="boxen",?data=diamonds.sort_values("color"))
        kind="boxen"

        kind="violin" 可以繪制小提琴圖。

        sns.catplot(x="day",?y="total_bill",?hue="sex",?kind="violin",?split=True,?data=tips)
        kind="violin"

        3.3 分類估計圖

        kind="bar" 以矩形條的方式展示數(shù)據(jù)點估值(默認(rèn)取平均值)和置信區(qū)間,該置信區(qū)間使用誤差線繪制。

        titanic?=?sns.load_dataset("titanic",?data_home='seaborn-data',?cache=True)
        sns.catplot(x="sex",?y="survived",?hue="class",?kind="bar",?data=titanic)
        kind="bar"

        矩形條的高度是survived列均值,上面的那根天線就是誤差線。

        kind="count" 是常見的柱狀圖,統(tǒng)計x坐標(biāo)對應(yīng)的數(shù)據(jù)量。

        sns.catplot(x="deck",?kind="count",?data=titanic)
        kind="count"

        kind="point" 繪制點圖,展示數(shù)據(jù)點的估計值(默認(rèn)平均值)和置信區(qū)間,并連接來自同一hue類別的點。

        sns.catplot(x="sex",?y="survived",?hue="class",?kind="point",?data=titanic)
        kind="point"

        4. 回歸圖

        seaborn 提供線性回歸函數(shù)對數(shù)據(jù)擬合,包括regplot()lmplot(),它倆大部分功能是一樣的,只是輸入的數(shù)據(jù)和輸出圖形稍有不同。

        lmplot()函數(shù)可以繪制兩個變量x、y的散點圖,擬合回歸模型并繪制回歸線和該回歸的 95% 置信區(qū)間。

        tips?=?sns.load_dataset("tips")
        sns.lmplot(x="total_bill",?y="tip",?data=tips);
        lmplot

        設(shè)置order參數(shù)可以擬合多項式回歸模型

        anscombe?=?sns.load_dataset("anscombe",?data_home='seaborn-data',?cache=True)
        sns.lmplot(x="x",?y="y",?data=anscombe.query("dataset?==?'II'"),?order=2);
        order=2

        設(shè)置logistic=True參數(shù)可以擬合邏輯回歸模型

        sns.lmplot(x="total_bill",?y="big_tip",?data=tips,?logistic=True,?y_jitter=.03);
        logistic=True

        5. 多圖網(wǎng)格

        seaborn 提供了FacetGrid類可以同時繪制多圖。

        g?=?sns.FacetGrid(tips,?row="sex",?col="smoker")
        g.map(sns.scatterplot,?"total_bill",?"tip")
        FacetGrid

        實際上它等價于下面這段代碼

        sns.relplot(x='total_bill',?y='tip',?row="sex",?col="smoker",?data=tips)

        當(dāng)然用FaceGrid的好處是可以像 matplotlib 那樣設(shè)置很多圖形屬性。

        g?=?sns.FacetGrid(tips,?row="sex",?col="smoker")
        g.map(sns.scatterplot,?"total_bill",?"tip")
        g.set_axis_labels("Total?bill",?"Tip")
        g.set(xticks=[10,?30,?50],?yticks=[2,?6,?10])
        g.figure.subplots_adjust(wspace=.02,?hspace=.02)

        另外,seaborn 還提供了PairGrid,可以為多變量同時繪圖,且圖形種類可以不同。

        iris?=?sns.load_dataset("iris",?data_home='seaborn-data',?cache=True)
        g?=?sns.PairGrid(iris)
        g.map_upper(sns.scatterplot)
        g.map_lower(sns.kdeplot)
        g.map_diag(sns.kdeplot,?lw=3,?legend=False)
        PairGrid

        上圖中,對角線以及對角線下方是 KDE 圖,對角線上方是散點圖。


        6. 樣式和調(diào)色板

        這部分主要是對圖表外觀的設(shè)置,感興趣的朋友可以自行嘗試。

        到這里,seaborn 的核心知識點就已經(jīng)介紹完了,完整的思維導(dǎo)圖在公眾號回復(fù)seaborn全解獲取。

        如果本文對你有用就點個 在看 鼓勵一下吧。


        相關(guān)閱讀:


        瀏覽 60
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            欧美人与禽乱婬A片 | 五月丁香欧美综合 | 久久成人精品一区二区 | 亚洲性生活免费视频 | 操屄爽毛片 | 翔田千里免费一区二区三区 | 欧美午夜剧场 | 日韩理论片久久 | 成人无码在线免费观看 | 3A成人免费视频网站 |