自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

開發(fā) 后端
本篇文章主要研究 Seaborn 庫(kù)——Seaborn 是一個(gè)統(tǒng)計(jì)繪圖庫(kù),建立在 Matplotlib 基礎(chǔ)之上。它具有非常漂亮的默認(rèn)繪圖樣式,并且也與 Pandas DataFrames 配合得很好。

[[420332]]

 Python中文社區(qū) (ID:python-china)

本篇文章主要研究 Seaborn 庫(kù)——Seaborn 是一個(gè)統(tǒng)計(jì)繪圖庫(kù),建立在 Matplotlib 基礎(chǔ)之上。它具有非常漂亮的默認(rèn)繪圖樣式,并且也與 Pandas DataFrames 配合得很好。

Seaborn 可以像安裝任何其他 Python 包一樣使用“pip”進(jìn)行安裝。

  1. 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文件可以長(zhǎng)按掃碼文末二維碼后進(jìn)入寬客量化俱樂部下載:

Financial Sample.xlsx 

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

讓我們首先看看“distplot”——這讓我們可以看到一組單變量觀測(cè)值的分布——單變量只是意味著一個(gè)變量。 

  1. #繪制 DataFrame "Profit" 列的分布  
  2. sns.displot(df['Profit']) 

我們現(xiàn)在有一個(gè)感興趣的分布圖——但作為一個(gè)快速入門,風(fēng)格看起來有點(diǎn)平淡。讓我們給它一個(gè)更常見的“Seaborn”樣式,試圖讓它看起來更好一點(diǎn)…… 

  1. #設(shè)置我們希望用于繪圖的樣式  
  2. sns.set_style("darkgrid")  
  3. #繪制 DataFrame "Profit" 列的分布  
  4. sns.displot(df['Profit']) 

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

  1. 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”列。 

  1. 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)的那些更暗。 

  1. sns.jointplot(x='Profit',y='Units Sold',data=df,kind='hex'

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

  1. sns.jointplot(x='Profit',y='Units Sold',data=df,kind='reg'

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

  1. 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ù)的一部分,例如“利潤(rùn)”和“COGS”(銷售成本)。我還將刪除其他幾列以縮小我們的 DataFrame,這樣我們的輸出圖就不會(huì)過于擁擠。 

  1. #刪除不需要的列  
  2. new_df = df.drop(['Month Number','Year','Manufacturing Price','Sale Price'],axis=1 
  3. 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)”。 

  1. 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)上找到。 

  1. sns.pairplot(new_df,hue='Segment',palette='magma'

我們將看到的下一個(gè)圖是一個(gè)“rugplot”——這將幫助我們構(gòu)建和解釋我們之前創(chuàng)建的“kde”圖是什么——無論是在我們的 distplot 中還是當(dāng)我們傳遞“kind=kde”作為我們的參數(shù)時(shí)。 

  1. 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è)敢獾脑挘覀兛梢詮囊唤M數(shù)據(jù)和 rugplot 中構(gòu)建我們自己的 KDE 圖,看看它是否與使用內(nèi)置的“kdeplot”直接創(chuàng)建的 KDE 圖相匹配. 

  1. #設(shè)置一組 30 個(gè)取自正態(tài)分布的數(shù)據(jù)點(diǎn)  
  2. x = np.random.normal(0, 1, size=30 
  3. #設(shè)置 KDE 點(diǎn)的帶寬  
  4. bandwidth = 1.06* x.std() * x.size ** (-1/ 5.)  
  5. #設(shè)置 y 軸的限制  
  6. support = np.linspace(-4, 4, 200)  
  7. #遍歷數(shù)據(jù)點(diǎn)并為每個(gè)點(diǎn)創(chuàng)建內(nèi)核,然后繪制內(nèi)核  
  8. kernels = []  
  9. for x_i in x:  
  10.     kernel = stats.norm(x_i, bandwidth).pdf(support)  
  11.     kernels.append(kernel)  
  12.     plt.plot(support, kernel, color="r" 
  13. sns.rugplot(x, color=".2"linewidth=3

 

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

現(xiàn)在讓我們使用內(nèi)置的“kdeplot”繪制 KDE 圖。 

  1. sns.kdeplot(x, shade=True

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

 

責(zé)任編輯:龐桂玉 來源: Python中文社區(qū)
相關(guān)推薦

2024-12-24 07:30:00

Seaborn可視化Python

2025-02-10 00:45:00

pairplotheatmaplmplot

2023-08-01 16:01:59

可視化Seaborn

2014-05-05 10:01:51

數(shù)據(jù)可視化

2017-07-12 16:07:49

大數(shù)據(jù)數(shù)據(jù)可視化

2020-10-31 17:13:04

Python可視化Seaborn

2020-03-11 14:39:26

數(shù)據(jù)可視化地圖可視化地理信息

2021-08-04 20:35:03

可視化SeabornMatplotlib

2022-08-04 13:58:54

SeabornFacetGrid代碼

2012-04-10 15:31:06

HTML 5

2017-10-14 13:54:26

數(shù)據(jù)可視化數(shù)據(jù)信息可視化

2024-03-07 09:00:04

Rust數(shù)據(jù)可視化

2022-08-26 09:15:58

Python可視化plotly

2021-02-04 16:08:01

RoughViz可視化圖表

2017-10-31 09:38:53

大數(shù)據(jù)數(shù)據(jù)可視化Python

2020-06-29 15:40:53

PlotlyPython數(shù)據(jù)可視化

2022-02-23 09:50:52

PythonEchartspyecharts

2020-05-26 11:34:46

可視化WordCloud

2017-06-29 11:26:08

Python數(shù)據(jù)可視化

2020-09-02 13:56:03

Python可視化數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)