數據分析基本工具-Seaborn

Yasmine Cheng
數據領航員
Published in
13 min readMay 22, 2022

目錄

前言
語法說明
前置作業
圖表設計
常用圖表
實際操作
總結

前言

在上一篇文章中,我們和大家介紹了Matplotlib,今天則是要帶大家看另一個可以說是Matplotlib進階版的繪圖套件 — Seaborn!

補充:在數據分析的流程的文章中,我們有提到過5大常用的視覺化套件,若您有興趣想要了解的話可以回頭參考~

Seaborn是在Matplotlib的基礎上所建構出的,並與資料分析的套件 — Pandas緊密結合著。Seaborn的語法被認為是比Matplotlib還要更精美細緻的,可以很輕鬆的設定出好看的圖型,程式碼更是精簡,因此,若Seaborn支持的話,建議讀者以Seaborn作為第一優先的繪圖套件。若想深入了解的話可以閱讀官方文件,本文章則是將官方文件統整,並透過直接操作資料集的方式簡單的帶大家操作常用的語法,程式碼也歡迎各位可以自行取用☺️

語法說明

1. 前置作業

安裝套件

###指令介面語法
conda install seaborn #使用conda環境安裝
pip install seaborn #使用pip原生方式安裝

匯入套件

import seaborn as sns              #引入套件(seaborn通常會簡寫為sns)

2. 圖表設計

重置成預設樣式

sns.set()                          

設定圖表風格

sns.set_style()#預設五種樣式:darkgrid(灰色網格)、whitegrid(白色網格)、dark(灰色背景)、white(白色背景)、ticks(黑線外框)
取自[圖解]Python Visulization-Seaborn style setting

設定調色盤顏色

sns.set_palette()#六種不同的顏色樣式:deep、muted、pastel、bright、dark、colorblind
Seaborn set_palette( )顏色樣式

設定元素縮放比例

sns.set_context()#四種由細至粗的尺寸:paper、notebook、talk、poster
取自[圖解]Python Visulization-Seaborn style setting

3. 常用圖表

因文章長度的關係,本篇文章並不會將所有的圖表都進行展示,但大致整理出了以下各種種類中常出現的圖表類型,讀者可以根據資料的種類選用適合的~

取自Seaborn官網

4. 實際操作

4.1 介紹資料集

本次所選用的資料集是於Kaggle上一份關於Ted Talks演講的資訊,欄位包含了演講名稱(title)、演講者(author)、日期(date)、觀看數(views)、喜歡數(likes)及網址連結(link)。

而資料總共為5440筆,跨越的時間橫渡為2009年的4月至2021年的9月。

4.2 資料前處理簡介

因繪圖所需,因此產生出了一些特徵欄位,分別為年份(year)、月份(month)即日期(date)。

而資料中並無空值,因此不需做刪除列或是補值的動作。

#產生月份欄位
df['month'] = df['date'].apply(lambda x:datetime.strptime(x, "%B %Y").month)
#產生年份欄位
df['year'] = df['date'].apply(lambda x:datetime.strptime(x, "%B %Y").year)
#將日期欄位轉換為想要的格式
df['date'] = df['date'].apply(lambda x:datetime.strptime(x, "%B %Y"))
#將日期欄位由字串資料型態轉為日期資料型態
df['date'] = pd.to_datetime(df['date'])
#將資料按照日期欄位排序
df = df.sort_values('date')

4.3 圖表繪製

  • 計數圖(countplot)

類似柱狀圖,可以直接計算出每個類別的總數,並比較出個類別間的計數差,適用於類別型的資料。

sns.countplot(
x=欄位名稱, #str
y=欄位名稱, #str
data=資料來源, #dataframe
hue=資料類別分類, #str
hue_order=資料類別排序, #list
orient=水平或垂直顯示 #vertical/horizontal
)
#####
#年份-演講次數 計數圖
sns.countplot(x="year", data=df)
#月份-演講次數 計數圖
sns.countplot(x="month", data=df)
年份-演講次數 計數圖
月份-演講次數 計數圖
  • 折線圖(lineplot)

是由多個數據點連接而成,可用折線的方式看到趨勢,適合用於變化、連續型的資料。

sns.lineplot(
x=欄位名稱, #str
y=欄位名稱, #str
hue=資料類別分類, #str
hue_order=資料類別分類順序, #list
style=資料類別分類, #str
data=資料來源, #dataframe
dashes=線是否為虛線, #bool or list or dict
markers=資料點的呈現圖案 #bool or list or dict / EX:>,x,o,*...
)
#####
#日期-喜歡數 折線圖
sns.lineplot(x="date", y="likes", data=df, marker='x')
#日期-觀看數 折線圖
sns.lineplot(x="date", y="views", data=df, marker='o')
日期-喜歡數 折線圖
日期-觀看數 折線圖
  • 圓餅圖(piechart)

通常使用於類別型的資料,可以表示各項目占整體資料的比例,每個扇區的弧長大小數量的比例。

此圖為matplotlib所繪,非seaborn,但因資料類別的表現狀況,因此認為圓餅圖還是較為適當。

前八名作者發表演講佔比 圓餅圖
  • 熱力圖(heatmap)

因此段有用到其他中途產生的dataframe,稍微帶一下如何產出的~~

#將月份及年份合併欄位後計算數量產出新的df並命名為year_month
year_month = df.groupby(["year","month"]).size().reset_index(name='counts')

為二維空間的表示圖,可表示出x與y軸個類別的相關係數,亦或是利用深淺顏色表現出發生次數或頻率的高低。

sns.heatmap(
data(資料來源), #dataframe
linewidths=矩陣之間的間隔大小,#float
linecolor=矩陣之間的間隔顏色, #str
cmap=顏色表名稱(造型), #str / EX:coolwarm,twilight,summer..
fmt=數據的類型, #str / EX:.1f->取到小數點後第一位
annot=是否將值標示於圖表中. #bool
)
#####
#年份、月份及演講次數熱力圖
sns.heatmap(year_month.pivot("year", "month", "counts"), annot=True, cmap="Blues", fmt='g')

cmap的造型樣式有非常多種,可幫助圖表示得更清楚及符合主題,大家可參考以下連結,該文章幾乎整理出了所有可調用的樣式供大家選用~

年份、月份及演講次數 熱力圖(cmap=Blues)
年份、月份及演講次數 熱力圖(cmap=twilight)
  • 回歸線圖(regplot)

先將所有資料點利於點圖方式呈現,再找出回歸線,可藉此看出資料分布的趨勢。

sns.regplot(
x=欄位名稱, #str
y=欄位名稱, #str
data=資料來源, #dataframe
ci=信賴區間, #int(0-100)
color=資料點的顏色, #str
marker=資料點的圖案, #str
scatter_kws=可單獨改變資料點的顏色, #dict
line_kws=可單獨改變折線的顏色, #dict
ax=子圖, #bool
truncate=截斷/延伸回歸線 #bool
)
#####
#年份及演講次數回歸線圖
sns.regplot(x="year", y="counts", data=year_month, truncate=False, color='red', marker='+')
#月份及演講次數回歸線圖
sns.regplot(x="month", y="counts", data=year_month)
年份-演講次數 回歸線圖(truncate=False)
月份-演講次數 回歸線圖(truncate=True)
  • 盒鬚圖(boxplot)

是一種可以顯示出資料分布的統計圖,可看出離群值、平均數、全距或四分位距等。

✏︎sns.despine()用於設定邊界、匡線等

sns.boxplot(
x=欄位名稱, #str
y=欄位名稱, #str
hue=資料分類類別, #str
data=資料來源, #dataframe
order=資料分類類別順序, #list
hue_order=資料分類類別順序, #list
orient=垂直或水平顯示圖表, #vertical/horizontal
color=顏色, #str
palette=圖像的色調, #str EX:gist_gray,YlOrRd_r..
linewidth=劃分每個單元格的線的寬度, #float
ax=子圖 #bool
)

#####
#年份及演講次數盒鬚圖
sns.boxplot(x="year", y="views", data=df, palette='icefire')
sns.despine(offset=10, trim=True) #offset->類別數量
#月份及演講次數盒鬚圖
sns.boxplot(x="month", y="views", data=df, palette='flag')
sns.despine(offset=10, trim=True) #trim->是否設定邊界
月份-觀看次數 盒鬚圖(palette=icefire)
月份-觀看次數 盒鬚圖(palette=flag)
  • 小提琴圖(violinplot)

可以展示出多種資料類別的分布狀況及概率密度,提琴中間有條黑色粗線,可看出資料的四分位距,是集合盒鬚圖及密度圖優點於一身的圖形類別。

sns.violinplot(
x=欄位名稱, #str
y=欄位名稱, #str
hue=資料分類類別, #str
data=資料來源, #dataframe
order=資料分類類別, #list
hue_order=資料分類類別順序, #list
orient=垂直或水平顯示圖表, #vertical/horizontal
color=顏色, #str
palette=圖像的色調, #str EX:hsv,Pastel2,magma..
saturation=顏色飽和度. #float
)
#####
#月份及喜歡次數小提琴圖
sns.violinplot(data=df, x='month', y='likes', palette='magma', float=0.6)
月份-喜歡次數 小提琴圖(palette=magma, float=0.6)

總結

讀者閱讀完本文章以後,應該會發現其實各圖表的語法差異並不大,參數也都是差不多的,只是可能有些會因為需求多出了一兩個其他的參數做調整,與Matplotlib相比更簡易好操作,圖表也更精緻了一些,顏色設計上都美觀了許多,因此才會推薦讀者若有視覺化上的需可以Seaborn作為首選!

教育部補助大專院校STEM領域及女性研發人才培育計畫目標為建構一個「以智慧物聯技術與實務應用為基礎的教育環境和實作場域」,並規劃出符合此STEM教育領域的創新特色課程,以畢業前進入企業實習的方式,讓學生了解相關產業界所面對的問題,再輔以業界實作場域的教育訓練活動,共同帶領學生發展出動手做、判斷與解決問題的相關技能;本計畫也規劃讓學生以專題實作的組隊方式,跟業界協力領導學生對外參與智慧物聯技術的應用競賽,不僅可以累積學生實務開發的能力,更能激發其潛能來幫助企業解決所面臨的難題。

Data Science Meetup 台灣資料科學社群的使命是「為資料科學人士與企業創建經濟機會」。我們相信大數據蘊藏著巨量的信息和價值,如何處理好大數據並發掘其潛藏的商業價值,就要靠資料科學有效的應用。21世紀是資料科學決勝時代,我們社群將為大家提供與資料科學相關的最新技術和資訊實戰攻略,並透過全球業界人士和學者幫助相關職業規劃與挑戰,社群活動包含

  • 台北實體版聚
  • 線上版聚
  • Mentorship Program

歡迎加入我們社團瞭解更多資訊: https://www.facebook.com/groups/datasciencemeetup/

--

--

Yasmine Cheng
數據領航員

NLP Lab @ SCU | Data Science | to be a nlper 💻 Linkedin:Ya Mian(Yasmine) Cheng Github:Yasmine-Cheng