Seaborn:數據可視化、數據分析(高級matplotlib)


1. Seaborn簡介

在這里插入圖片描述

Seaborn是一個基於matplotlib且數據結構與Pandas統一的統計圖制作庫。

Seaborn庫旨在以數據可視化為中心來挖掘並理解數據。

Seaborn提供的面向數據集制圖函數主要是對行列索引和數組的操作,包含對整個數據集進行內部的語義映射與統計整合。

可以毫不誇張的說,你想象力能及的圖表,Seaborn都能繪制!

2. 樣例數據

本文所有的可視乎圖表都是基於Seaborn自帶的餐廳顧客消費數據集tips而繪制的。
tips數據集前兩條數據如下:

No total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 2

(total_bill:消費總金額,tip:小費金額,sex:性別,smoker:是否吸煙,day:消費日期,time:消費時段,size:聚餐人數)

3. Seaborn總覽

在這里插入圖片描述

  • 關系圖

關系圖一般是用來表達雙變量關系的圖表。

函數 作用
relplot(kind='line')/lineplot( ) 繪制線形圖,參數:data,x,y,hue
relplot(kind='scatter')/scatterplot( ) 繪制散點圖,參數:data,x,y,hue
參數 含義
data pandas.DataFrame對象
x 繪圖的x軸變量
y 繪圖的y軸變量
hue 區分維度,一般為分類型變量
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

sns.set(style='darkgrid')

tips = sns.load_dataset('tips')
sns.relplot(x='total_bill',y='tip',data=tips)
sns.relplot(x="total_bill", y="tip", hue="smoker", data=tips);

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

在這里插入圖片描述
在這里插入圖片描述

  • 分類圖

對可分類的數據進行可視化;可以通過散點圖、分布圖、估計圖等形式呈現分類圖。

函數 作用
catplot(kind='strop')/stripplot( ) 分類散點圖
catplot(kind='swarm')/swarmplot( ) 分類散點圖
catplot(kind='box')/boxplot( ) 分類分布圖
catplot(kind='violin')/violinplot( ) 分類分布圖
catplot(kind='boxen')/boxenplot( ) 分類分布圖
catplot(kind='point')/pointplot( ) 分類估計圖
catplot(kind='bar')/barplot( ) 分類估計圖
catplot(kind='count')/countplot( ) 分類估計圖
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style='ticks',color_codes=True)

tips = sns.load_dataset('tips')
sns.catplot(x='day',y='total_bill',data=tips)
sns.catplot(x='day',y='total_bill',kind='swarm',data=tips)
sns.catplot(x='day',y='total_bill',kind='box',data=tips)

diamonds = sns.load_dataset('diamonds')
sns.catplot(x='color',y='price',kind='boxen',data=diamonds.sort_values('color'))
sns.catplot(x="total_bill", y="day", hue="time",kind="violin", data=tips)

titanic = sns.load_dataset("titanic")
sns.catplot(x="sex", y="survived", hue="class", kind="point", data=titanic)
sns.catplot(x="sex", y="survived", hue="class", kind="bar", data=titanic)
sns.catplot(x="deck", kind="count", palette="ch:.25", data=titanic)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

  • 回歸圖

對數據進行回歸,並繪制回歸出函數。

函數 作用
lmplot( ) 繪制回歸圖
regplot( ) 繪制回歸圖
residplot( ) 繪制回歸圖
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

sns.set(color_codes=True)
tips = sns.load_dataset("tips")
sns.lmplot(x="total_bill", y="tip", data=tips)
sns.residplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),scatter_kws={"s": 80})

f, ax = plt.subplots(figsize=(5, 6))
sns.regplot(x="total_bill", y="tip", data=tips, ax=ax)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

  • 分布圖
    用於檢查單變量或雙變量分布的圖表。
函數 作用
distplot( ) 單變量分布
kdeplot( ) 核密度估計
pairplot( ) 成對二元分布
joinplot( )/joinplot(kind='hex')/joinplot(kind='reg') 二元分布
import seaborn as sns
import matplotlib.pyplot as plt
from scipy import stats

sns.set(color_codes=True)
x = np.random.normal(size=100)
sns.distplot(x)
sns.kdeplot(x, shade=True)

mean, cov = [0, 1], [(1, .5), (.5, 1)]
data = np.random.multivariate_normal(mean, cov, 200)
df = pd.DataFrame(data, columns=["x", "y"])
sns.jointplot(x="x", y="y", data=df)

iris = sns.load_dataset("iris")
sns.pairplot(iris)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

  • 矩陣圖
    以矩陣的形式呈現可視化的數據集。
函數 作用
heatmap( ) 熱力圖
clustermap( ) 聚類矩陣圖
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

sns.set_theme()

# Load the example flights dataset and convert to long-form
flights_long = sns.load_dataset("flights")
flights = flights_long.pivot("month", "year", "passengers")

# Draw a heatmap with the numeric values in each cell
f, ax = plt.subplots(figsize=(9, 6))
sns.heatmap(flights, annot=True, fmt="d", linewidths=.5, ax=ax)


sns.set_theme()

# Load the brain networks example dataset
df = sns.load_dataset("brain_networks", header=[0, 1, 2], index_col=0)

# Select a subset of the networks
used_networks = [1, 5, 6, 7, 8, 12, 13, 17]
used_columns = (df.columns.get_level_values("network")
                          .astype(int)
                          .isin(used_networks))
df = df.loc[:, used_columns]

# Create a categorical palette to identify the networks
network_pal = sns.husl_palette(8, s=.45)
network_lut = dict(zip(map(str, used_networks), network_pal))

# Convert the palette to vectors that will be drawn on the side of the matrix
networks = df.columns.get_level_values("network")
network_colors = pd.Series(networks, index=df.columns).map(network_lut)

# Draw the full plot
g = sns.clustermap(df.corr(), center=0, cmap="vlag",
                   row_colors=network_colors, col_colors=network_colors,
                   dendrogram_ratio=(.1, .2),
                   cbar_pos=(.02, .32, .03, .2),
                   linewidths=.75, figsize=(12, 13))

g.ax_row_dendrogram.remove()

在這里插入圖片描述
在這里插入圖片描述

  • 結構化多繪圖

以子圖的形式繪制成對變量之間的關系。

函數 作用
FacetGrid 結構化多繪圖
PairGrid 結構化多繪圖

Ending

鏈接:Seaborn


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM