網站格式圖片全國唯一一個沒有疫情的城市
Seaborn 簡介
Seaborn 是一個基于 Matplotlib 的圖形可視化 Python 庫,提供了高度交互式的接口,使用戶能夠輕松繪制各種吸引人的統(tǒng)計圖表。Seaborn 可以直接使用 Pandas 的 DataFrame 和 Series 數(shù)據進行繪圖。
1. Seaborn 繪制單變量圖
(1) 直方圖 histplot
-
hue
: 根據另一個分類變量對數(shù)據進行分組并顯示不同顏色的直方圖。 -
kde
: 是否繪制核密度估計曲線。 -
其他常用參數(shù):
bins
: 控制直方圖的條數(shù)。stat
: 選擇統(tǒng)計方式(如 density 或 count)。
示例代碼:
import seaborn as sns
import matplotlib.pyplot as plt# fig 畫布對象, ax坐標軸對象
fig, ax = plt.subplots(figsize=(10, 5))
# todo data: 要操作的 df或Series對象
# todo x, y: x軸 和 y軸 數(shù)據
# todo bins: 直方圖, 劃分區(qū)間的個數(shù)
# todo hue: 分組字段, 默認為None, 會按照該字段分組, 把相同分組數(shù)據畫到一張圖上
# todo kde: 繪制 核密度預估曲線
sns.histplot(data=tips, x='total_bill', bins=10, hue='sex', kde=True)
ax.set_title('直方圖-總消費金額分布情況')
plt.show()
(2) 密度圖 kdeplot
- X 軸: 樣本數(shù)據。
- Y 軸: 密度值。
fill
: 是否填充曲線下方區(qū)域。- 其他常用參數(shù):
bw_adjust
: 調整帶寬以控制平滑度。
示例代碼:
# todo 密度圖是連續(xù)的 -> 概率分布 直方圖是離散的 -> 樣本數(shù)據
# todo 應用場景: 基于少量的樣本數(shù)據, 去推理 總體數(shù)據的概率分布情況fig, ax = plt.subplots(figsize=(10, 5))
sns.kdeplot(data=tips, x='total_bill')
ax.set_title('密度圖-總消費金額分布情況')
plt.show()
(3) 計數(shù)圖 countplot
color
: 僅支持單一顏色。hue
: 可用來在每個條形中分組顯示不同的類別。- 其他常用參數(shù):
order
: 控制條形圖中類別的順序。
示例代碼:
# todo 計數(shù)圖 = 按照某個字段分組, 統(tǒng)計每個分組的數(shù)量, 然后繪制成 條形圖(柱狀圖)
# 按照 星期分組, 統(tǒng)計每個星期的 消費次數(shù)
# 方式一
fig, ax = plt.subplots(figsize=(10, 5))
sns.countplot(data=tips, x='day', color='b')
ax.set_title('消費次數(shù)分布情況')
plt.show()# 方式二: 手動分組 + 聚合計算
tips.day.value_counts().plot.bar(figsize=(10, 5), color=['red', 'blue', 'yellow'])
ax.set_title('消費次數(shù)分布情況')
plt.show()
2. Seaborn 雙變量數(shù)據可視化
(1) 散點圖 scatterplot
-
hue
: 根據另一變量劃分顏色。(分組字段) -
size
: 根據另一變量劃分點的大小。 -
其他常用參數(shù):
-
style
: 根據另一變量改變點的形狀。
示例代碼:
# hue: 分組字段
fig, ax = plt.subplots(figsize=(10, 5))
# 2. 繪制散點圖, 分析: 總消費金額, 小費 之間的關系.
# sns.scatterplot(data=tips, x='total_bill', y='tip')
sns.scatterplot(data=tips, x='total_bill', y='tip', hue='sex')
ax.set_title('散點圖-總消費金額和消費之間的關系')
plt.show()
(2) 回歸圖 regplot
-
fit_reg
: 默認繪制線性擬合回歸線,設為False
可禁用。 -
其他常用參數(shù):
-
ci
: 置信區(qū)間的大小。
示例代碼:
fig, ax = plt.subplots(figsize=(10, 5))
# todo fit_reg: 是否繪制回歸線, 默認為 True
# todo 擬合回歸線: 基于數(shù)據點(散點), 擬合出一條直線, 底層運行: 線性回歸
sns.regplot(data=tips, x='total_bill', y='tip', fit_reg=True)
# sns.regplot(data=tips, x='total_bill', y='tip', fit_reg=False)
ax.set_title('散點圖-總消費金額和消費之間的關系')
plt.show()
(3) 聯(lián)合圖 jointplot
一些函數(shù)在繪圖的時候, 是直接繪制的, 無需指定畫板, 也沒有 figsize屬性設置(圖形寬高), 但一般有 height屬性, 設置圖形寬高: 如 jointplot, 可以把 jointplot()理解為: 散點圖 + 直方圖(每行每列都會繪制直方圖)
-
kind
: 繪制的圖的類型(如 scatter, kde(密度圖), hex(蜂巢圖))。 -
height
: 圖的高度。 -
其他常用參數(shù):
-
hue
: 分組顯示不同的類別。
示例代碼:
sns.jointplot(data=tips, x='total_bill', y='tip', kind='scatter', height=8)
plt.title('Jointplot of Total Bill and Tip')
plt.show()
(4) 2D 密度圖 kdeplot
-
fill
: 填充密度圖。 -
cbar
: 顯示顏色區(qū)間圖例。 -
其他常用參數(shù):
-
levels
: 指定繪制的等高線的數(shù)量。
示例代碼:
# 1. 獲取 畫布, 坐標軸對象
fig, ax = plt.subplots(figsize=(10, 5))
# 2. 設置2D密度圖
# todo cbar: 是否繪制顏色條 fill: 是否填充顏色
sns.kdeplot(data=tips, x='total_bill', y='tip', fill=True, cbar=True)
ax.set_title('2D Ked TotalBill & Tip')
plt.show()
(5) 箱線圖 boxplot
-
定義: 顯示數(shù)據的分位數(shù)及異常值。
-
組成部分: 包括上邊緣、上四分位數(shù)、中位數(shù)、下四分位數(shù)、下邊緣、異常值。
-
其他常用參數(shù):
-
hue
: 根據分類變量分組顯示箱線。 -
箱子的中間有一條線,代表了數(shù)據的中位數(shù)
-
箱子的上下底,分別是數(shù)據的上四分位數(shù)(Q3)和下四分位數(shù)(Q1)
-
箱體包含了50%的數(shù)據。因此,箱子的高度在一定程度上反映了數(shù)據的波動程度
-
上下邊緣則代表了該組數(shù)據的最大值和最小值
-
IQR = 上四分位數(shù)(Q3) - 下四分位數(shù)(Q1)
四分位距(interquartile range, IQR),又稱四分差
-
判斷異常值時最大值 = 上四分位數(shù)(Q3) + 1.5 IQR 大于這個值的就是異常值
-
判斷異常值時最小值 = 下四分位數(shù)(Q1)- 1.5 IQR 小于這個值的就是異常值
-
-
有時候箱子外部會有一些點,可以理解為數(shù)據中的“異常值”
示例代碼:
# 需求: 通過 箱線圖(盒須圖, 箱子圖), 分析: 總消費金額, 時間 之間的關系.
# todo IQR = Q3 - Q1 : InterquantileRange四分位距表示法
fig, ax = plt.subplots(figsize=(10, 5))
sns.boxplot(data=tips, x='time', y='total_bill')
ax.set_title('箱線圖-分析就餐時間和消費總金額之間的關系0')
plt.show()
(6) 小提琴圖 violinplot
小提琴圖, 它是經典的可視化方法,但可能會掩蓋數(shù)據的分布
小提琴圖能顯示與箱線圖相同的值, 小提琴圖把"箱線"繪成核密度估計,
有助于保留數(shù)據的更多可視化信息
- 優(yōu)勢
- 小提琴圖同時展示了數(shù)據的統(tǒng)計分布和概率密度,能夠更好地揭示數(shù)據的形態(tài)和特征。
- 小提琴圖可以通過分組變量進行比較分析,方便觀察不同類別間的差異。
- 小提琴圖能夠顯示數(shù)據的離散程度,通過觀察圖形的寬度可以了解數(shù)據的散布情況。
-
定義: 在箱線圖基礎上添加了核密度估計,有助于顯示數(shù)據分布。
-
hue
: 支持分組顯示。 -
split
: 分割不同類別的小提琴圖。 -
其他常用參數(shù):
-
inner
: 指定內部顯示的內容(如 box, quartile)。
示例代碼:
fig, ax = plt.subplots(figsize=(12, 6))
# split = True 默認是False 當使用hue的時候會生效, 會在一個violin中切開 一半顯示一個類別
sns.violinplot(data=tips, x='day', y='total_bill', hue='sex', split=True)
plt.title('Violinplot of Total Bill by Day and Sex')
plt.show()
3. 多變量數(shù)據
繪制多變量數(shù)據沒有固定的套路,可以使用顏色、大小和形狀來區(qū)分數(shù)據:
- 通過顏色區(qū)分: 使用
hue
參數(shù)來區(qū)分不同類別。 - 通過大小區(qū)分: 使用
size
參數(shù)調整點的大小以表示數(shù)量。
4. Seaborn 主題和樣式
使用 sns.set_style()
來設置主題風格,Seaborn 中有五種樣式:
- white: 白色背景無網格。
- whitegrid: 白色網格。
- dark: 黑色背景無網格。
- darkgrid: 黑色網格(默認)。
- ticks: 帶刻度線的樣式。
5. 數(shù)據可視化選擇
- Seaborn 和 Pandas: 適合快速繪制和探索性分析,但不適合精細化調整。
- Matplotlib: 更適合需要精細化控制的繪圖需求。
6. 其他知識
1. 數(shù)據準備和清洗
在繪圖之前,確保數(shù)據的質量是非常重要的。以下是一些常用的數(shù)據準備和清洗步驟:
- 處理缺失值:
import pandas as pd# 讀取數(shù)據
df = pd.read_csv('data.csv')# 檢查缺失值
print(df.isnull().sum())# 刪除缺失值
df.dropna(inplace=True)# 或用填充方式處理缺失值
df.fillna(df.mean(), inplace=True)
- 處理異常值:
# 使用 Z-score 方法識別異常值
from scipy import statsdf = df[(np.abs(stats.zscore(df['column_name'])) < 3)]
Z-score(標準分數(shù))是衡量一個數(shù)據點與數(shù)據集均值的偏離程度的一種統(tǒng)計量。它表示該數(shù)據點與均值的距離,以標準差為單位。具體定義如下:
Z = ( X ? μ ) / σ Z=(X?μ)/σ Z=(X?μ)/σ
- Z : Z ? s c o r e Z:Z-score Z:Z?score
- X :數(shù)據點的值 X:數(shù)據點的值 X:數(shù)據點的值
- μ :數(shù)據集的均值 μ:數(shù)據集的均值 μ:數(shù)據集的均值
- σ :數(shù)據集的標準差 σ:數(shù)據集的標準差 σ:數(shù)據集的標準差
解釋:
- 如果 Z-score 為 0,表示數(shù)據點等于均值。
- 如果 Z-score 為正,表示數(shù)據點高于均值;如果為負,表示數(shù)據點低于均值。
- 一般情況下,Z-score 大于 3 或小于 -3 的數(shù)據點通常被認為是異常值(outliers)。
2. 圖形美化
Seaborn 提供了多種美化圖形的方式。可以使用調色板和樣式參數(shù)。
- 調色板:
import seaborn as sns# 設置調色板
sns.set_palette("pastel") # 可選 "deep", "muted", "bright", "pastel", "dark", "colorblind"
- 美化圖形:
sns.scatterplot(x='x_column', y='y_column', data=df)
plt.title('Title', fontsize=16)
plt.xlabel('X Axis Label', fontsize=14)
plt.ylabel('Y Axis Label', fontsize=14)
3. 保存圖形
使用 plt.savefig()
可以將繪制的圖形保存到文件中。
import matplotlib.pyplot as plt# 繪圖
sns.histplot(df['column_name'])
plt.title('Histogram')# 保存圖形
plt.savefig('histogram.png', dpi=300, bbox_inches='tight')
4. 調試和錯誤處理
在使用 Seaborn 時,可能會遇到一些常見的錯誤。以下是一些解決方案:
- KeyError: 當嘗試使用不存在的列名時,會拋出 KeyError。確保你使用的列名在 DataFrame 中確實存在。
- ValueError: 如果數(shù)據類型不正確(例如,嘗試在數(shù)值列上使用分類圖),可能會拋出 ValueError。檢查數(shù)據類型并進行轉換:
df['column_name'] = df['column_name'].astype(float)
- AttributeError: 使用不支持的方法或屬性時,可能會拋出此錯誤。確保你在正確的對象上調用方法。
7. 繪制 線性回歸模型
在 seaborn
中,lmplot
是用于繪制線性回歸模型的繪圖函數(shù)。它結合了回歸線和散點圖,幫助用戶直觀地分析兩個變量之間的關系,并通過回歸線展示趨勢。以下是 lmplot
的一些常用參數(shù)和基本用法:
語法:
seaborn.lmplot(x, y, data, **kwargs)
參數(shù):
- x: 字符串,指定數(shù)據集中作為 x 軸的變量名稱。
- y: 字符串,指定數(shù)據集中作為 y 軸的變量名稱。
- data: 數(shù)據集(通常是 Pandas 的 DataFrame),指定要繪制的原始數(shù)據。
- hue: (可選)字符串,指定分類變量,用于在不同類別間繪制不同的回歸線和散點。
- col: (可選)字符串,指定列變量,根據該變量將數(shù)據分為多個小圖。
- row: (可選)字符串,指定行變量,與
col
類似,但是按行排列。 - fit_reg: 布爾值,控制是否繪制回歸線(默認為 True)。
- markers: 用于指定散點的標記類型。
- palette: 調色板,用于控制不同類別的顏色。
示例用法:
-
簡單線性回歸圖:
import seaborn as sns import matplotlib.pyplot as plt# 加載示例數(shù)據集 tips = sns.load_dataset('tips')# 繪制總賬單與小費之間的線性回歸圖 sns.lmplot(x="total_bill", y="tip", data=tips) plt.show()
-
使用分類變量的線性回歸:
sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips) plt.show()
上面的例子中,
hue="smoker"
會基于是否吸煙繪制不同的回歸線。 -
多圖繪制(基于行和列分類):
sns.lmplot(x="total_bill", y="tip", col="sex", row="smoker", data=tips) plt.show()
這樣可以根據
sex
和smoker
分類,生成多個子圖。