Menu

這篇記錄我在使用 seaborn 做資料分析還有 visualization 時常用的 code. 一般慣例會把 seaborn 更名成 sns for reference.

%matplotlib inline
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

基本設定

這邊值得注意的是要調整的參數要一次全部設定, 用好幾次 set() 的話只有最後一次的 set() 的結果會被保留

sns.set(font='IPAPMincho', font_scale=1.8)

Histogram

data = np.random.randn(1000)
data[:10]
array([-0.53267554,  0.03851161, -0.16072742, -0.70889663,  0.23085979,
       -1.61295347, -0.46508874,  0.60112507,  0.42017249, -0.73656917])

seaborn 是建立在 matplotlib 之上, 因此 matplotlib 也可以直接拿來跟 seaborn 產生的圖互動

plt.figure(figsize=(10, 5))

plt.subplot(1, 2, 1)
plt.title('Defualt style with kde')
sns.distplot(data, kde=True);

plt.subplot(1, 2, 2)
sns.set_style('dark')
plt.title('Dark style without kde');
sns.distplot(data, kde=False);

Scatter plot

df = pd.DataFrame({
    'x': np.random.randn(100), 
    'y': np.random.randn(100)})
df.head(5)
x y
0 -2.863752 -1.066424
1 -0.779238 0.862169
2 0.016786 -0.016519
3 0.948504 0.298314
4 2.029428 1.211997

要使用 seaborn 初始設定就再呼叫一次 set()

sns.set()

注意點:

  • 一般用lmplot畫, 然後設定 fit_reg=False 就可以讓 regression line 消失. 有時候有沒有那條線影響圖很大
  • 一樣先 x, 再 y
for fit_reg in [True, False]:
    sns.lmplot('x', 'y',
               data=df,
               fit_reg=fit_reg,
               scatter_kws={"marker": "D", "s": 100})
    title = 'Show regression line' if fit_reg else 'Without regression line'
    plt.title(title)

想要將兩個 lmplot 並排 render 可以參考這個 stackoverflow 答案.

Correlation matrix / Heatmap

df = pd.DataFrame({
    'x1': np.random.randn(100),
    'x2': np.random.randn(100),
    'x3': np.random.randn(100)
})
df.head()
x1 x2 x3
0 1.269566 0.349083 -0.000743
1 -1.634587 0.072568 0.042596
2 -0.581238 -0.337935 -0.412084
3 -0.080881 -1.376481 1.361046
4 -0.609886 -1.061285 0.265788

這邊利用 pandas 本身的 corr() 計算 correlation matrix 然後使用 seaborn 做 vis.

corr = df.astype(float).corr()
corr
x1 x2 x3
x1 1.000000 -0.034731 0.032407
x2 -0.034731 1.000000 -0.192169
x3 0.032407 -0.192169 1.000000
sns.set(font_scale=1.5)
sns.heatmap(corr, cmap='Blues', annot=True, annot_kws={"size": 15},
            xticklabels=corr.columns.values,
            yticklabels=corr.columns.values);

References

跟資料科學相關的最新文章直接送到家。
只要加入訂閱名單,當新文章出爐時,
你將能馬上收到通知