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>

        Python 數(shù)據(jù)科學(xué)中的 Seaborn 繪圖可視化

        共 3673字,需瀏覽 8分鐘

         ·

        2021-08-30 10:41

        本篇文章主要研究 Seaborn 庫——Seaborn 是一個(gè)統(tǒng)計(jì)繪圖庫,建立在 Matplotlib 基礎(chǔ)之上。它具有非常漂亮的默認(rèn)繪圖樣式,并且也與 Pandas DataFrames 配合得很好。
        Seaborn 可以像安裝任何其他 Python 包一樣使用“pip”進(jìn)行安裝。
        pip install seaborn
        Seaborn 的官方文檔地址如下:

        https://seaborn.pydata.org/

        另一個(gè)重要的地址是官方 API,它引用了各種可用的繪圖類型。

        https://seaborn.pydata.org/api.html

        我將嘗試將 Seaborn 的功能分解為不同的類別——并從使我們能夠可視化數(shù)據(jù)集分布的圖開始。
        讓我們從導(dǎo)入開始并加載數(shù)據(jù) - 我將使用“Financial Sample.xlsx”數(shù)據(jù)。excel文件可以長按掃碼文末二維碼后進(jìn)入寬客量化俱樂部下載

        Financial Sample.xlsx

        import pandas as pdimport seaborn as sns#如果使用 Jupyter Notebooks,下面的行允許我們?cè)跒g覽器中顯示圖表%matplotlib inline
        #在 Pandas DataFrame 中加載我們的數(shù)據(jù)df = pd.read_excel('Financial Sample.xlsx') #打印前 5 行數(shù)據(jù)以確保正確加載df.head()

        讓我們首先看看“distplot”——這讓我們可以看到一組單變量觀測(cè)值的分布——單變量只是意味著一個(gè)變量。
        #繪制 DataFrame "Profit" 列的分布
        sns.displot(df['Profit'])

        我們現(xiàn)在有一個(gè)感興趣的分布圖——但作為一個(gè)快速入門,風(fēng)格看起來有點(diǎn)平淡。讓我們給它一個(gè)更常見的“Seaborn”樣式,試圖讓它看起來更好一點(diǎn)……
        #設(shè)置我們希望用于繪圖的樣式sns.set_style("darkgrid")
        #繪制 DataFrame "Profit" 列的分布sns.displot(df['Profit'])

        我們已經(jīng)設(shè)法用一行代碼繪制 DataFrame 數(shù)據(jù)的直方圖以及“KDE”線——即核密度估計(jì)圖。如果我們?cè)?plot 調(diào)用中添加“kde=False”,我們可以刪除 KDE。我們還可以按如下方式更改直方圖中“bins”的數(shù)量——在本例中,它們被設(shè)置為 50:
        sns.displot(df['Profit'],kde=False,bins=50)

        現(xiàn)在讓我們看一個(gè)“聯(lián)合圖”——這允許我們組合兩個(gè) distplots 并處理雙變量數(shù)據(jù)。讓我們創(chuàng)建一個(gè)快速的聯(lián)合圖。為此,我們需要通過傳入列名來指定我們想要繪制的 DataFrame 列,以及我們從中提取列的實(shí)際 DataFrame。這可以按如下方式完成:假設(shè)我想繪制“Profit”列與“Units Sold”列。
        sns.jointplot(x='Profit',y='Units Sold',data=df)

        我們現(xiàn)在有一個(gè)圖,顯示了兩個(gè)變量列之間的散點(diǎn)圖,以及它們?cè)谌我粋?cè)的相應(yīng)分布圖(它甚至在右上角為我們提供了皮爾遜相關(guān)系數(shù)和 p 分?jǐn)?shù)。)
        Jointplot 還允許我們?cè)O(shè)置一個(gè)名為“kind”的附加參數(shù)。這允許您影響主圖表的表示方式。目前它是一個(gè)“散點(diǎn)”,因?yàn)檫@是默認(rèn)值,但是如果我們將其更改為“十六進(jìn)制”,例如,我們將得到以下圖,它將圖表上的點(diǎn)表示為密度六邊形 - 即包含更多數(shù)據(jù)點(diǎn)的六邊形 顯示為比包含較少點(diǎn)的那些更暗。
        sns.jointplot(x='Profit',y='Units Sold',data=df,kind='hex')

        我們可以為“kind”添加的另一個(gè)參數(shù)是“reg”,它代表回歸。這看起來很像散點(diǎn)圖,但這次將添加線性回歸線。
        sns.jointplot(x='Profit',y='Units Sold',data=df,kind='reg')

        我們可以規(guī)定的另一種類型是“kde”,它將繪制一個(gè)二維 KDE 圖,它基本上只顯示數(shù)據(jù)點(diǎn)最常出現(xiàn)的位置的密度。
        sns.jointplot(x='Profit',y='Units Sold',data=df,kind='kde')

        讓我們從jointplots繼續(xù)看“pairplots”。這些使我們能夠查看整個(gè)數(shù)據(jù)幀(對(duì)于數(shù)值數(shù)據(jù))的成對(duì)關(guān)系,并且還支持分類數(shù)據(jù)點(diǎn)的“色調(diào)”參數(shù)。所以 pairplot 本質(zhì)上是為 DataFrame 中數(shù)字列的每個(gè)可能組合創(chuàng)建一個(gè)聯(lián)合圖。我將快速創(chuàng)建一個(gè)新的 DataFrame,它刪除“Month Number”和“Year”列,因?yàn)檫@些并不是我們連續(xù)數(shù)字?jǐn)?shù)據(jù)的一部分,例如“利潤”和“COGS”(銷售成本)。我還將刪除其他幾列以縮小我們的 DataFrame,這樣我們的輸出圖就不會(huì)過于擁擠。
        #刪除不需要的列new_df = df.drop(['Month Number','Year','Manufacturing Price','Sale Price'],axis=1)
        sns.pairplot(new_df)

        請(qǐng)注意,我們基本上對(duì)每對(duì)列都有一個(gè)配對(duì)圖,并且在對(duì)角線上我們有一個(gè)分布的直方圖,因?yàn)閷?shù)據(jù)與自身進(jìn)行聯(lián)合圖是沒有意義的。這是快速可視化數(shù)據(jù)的好方法。我們還可以添加一個(gè)“色調(diào)”——這是我們指定一個(gè)用于分割數(shù)據(jù)的分類變量的地方。讓我們添加“Segment”列作為我們的“色調(diào)”。
        sns.pairplot(new_df,hue='Segment')

        現(xiàn)在數(shù)據(jù)點(diǎn)根據(jù)分類數(shù)據(jù)著色——顏色圖例顯示在圖的右側(cè)邊緣。我們還可以通過設(shè)置“調(diào)色板”參數(shù)來更改繪圖使用的調(diào)色板。以下是使用“巖漿”配色方案的示例。所有可用的方案都可以在 Matplotlib 站點(diǎn)上找到。
        sns.pairplot(new_df,hue='Segment',palette='magma')

        我們將看到的下一個(gè)圖是一個(gè)“rugplot”——這將幫助我們構(gòu)建和解釋我們之前創(chuàng)建的“kde”圖是什么——無論是在我們的 distplot 中還是當(dāng)我們傳遞“kind=kde”作為我們的參數(shù)時(shí)。
        sns.rugplot(df['Profit'])
        如上所示,對(duì)于 rugplot,我們將要繪制的列作為參數(shù)傳遞 - rugplot 的作用是為分布中的每個(gè)點(diǎn)繪制一個(gè)破折號(hào)。所以 rugplot 和 distplot 之間的區(qū)別在于 distplot 涉及“bins”的概念,并將把每個(gè) bin 中的所有數(shù)據(jù)點(diǎn)相加,并繪制這個(gè)數(shù)字,而 rugplot 只是在每個(gè)數(shù)據(jù)點(diǎn)繪制一個(gè)標(biāo)記。
        所以現(xiàn)在讓我們將 rugplot 轉(zhuǎn)換為 KDE 圖。KDE 代表“核密度估計(jì)”。下圖是解釋如何將 rugplots 構(gòu)建到 KDE 圖中的。

        如果我們?cè)敢獾脑?,我們可以從一組數(shù)據(jù)和 rugplot 中構(gòu)建我們自己的 KDE 圖,看看它是否與使用內(nèi)置的“kdeplot”直接創(chuàng)建的 KDE 圖相匹配.
        #設(shè)置一組 30 個(gè)取自正態(tài)分布的數(shù)據(jù)點(diǎn)x = np.random.normal(0, 1, size=30)
        #設(shè)置 KDE 點(diǎn)的帶寬bandwidth = 1.06* x.std() * x.size ** (-1/ 5.)
        #設(shè)置 y 軸的限制support = np.linspace(-4, 4, 200)
        #遍歷數(shù)據(jù)點(diǎn)并為每個(gè)點(diǎn)創(chuàng)建內(nèi)核,然后繪制內(nèi)核kernels = []for x_i in x:
        kernel = stats.norm(x_i, bandwidth).pdf(support) kernels.append(kernel) plt.plot(support, kernel, color="r")
        sns.rugplot(x, color=".2", linewidth=3)

        #使用復(fù)合梯形規(guī)則沿給定軸積分并創(chuàng)建 KDE 圖from scipy.integrate import trapzdensity = np.sum(kernels, axis=0)density /= trapz(density, support)plt.plot(support, density)

        現(xiàn)在讓我們使用內(nèi)置的“kdeplot”繪制 KDE 圖。
        sns.kdeplot(x, shade=True)

        我們可以看到兩個(gè)圖是相同的,我們已經(jīng)正確地創(chuàng)建了我們的 KDE 圖。本文已經(jīng)涵蓋了大部分分布圖功能。

        掃描本文最下方二維碼獲取全部完整源碼、數(shù)據(jù)和Jupyter Notebook 文件打包下載。

        長按掃碼獲取完整源碼


        瀏覽 24
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        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>
            白丝开裆校花裸体被羞羞爽视频 | 天天日天天射天天爽 | 在线免费看黄色片 | 男人捅女人三十分钟 | 韩剧性生活| 龙珠同人av黄漫网站 | 我被老头给添的直叫过程最新章节 | 操逼的视频免费看 | 一二三四区免费视频 | 78m国产成人精品视频主播 |