導讀
前期,分別對python數據分析三劍客進行了逐一詳細入門介紹,今天推出系列第4篇教程:seaborn。這是一個基於matplotlib進行高級封裝的可視化庫,相比之下,繪製圖表更爲集成化、繪圖風格具有更高的定製性。
教程目錄
01 初始seaborn
seaborn是python中的一個可視化庫,是對matplotlib進行二次封裝而成,既然是基於matplotlib,所以seaborn的很多圖表接口和參數設置與其很是接近。相比matplotlib而言,個人認爲seaborn的幾個鮮明特點如下:
繪圖接口更爲集成,可通過少量參數設置實現大量封裝繪圖
多數圖表具有統計學含義,例如分佈、關係、統計、迴歸等
對Pandas和Numpy數據類型支持非常友好
風格設置更爲多樣,例如風格、繪圖環境和顏色配置等
正是由於seaborn的這些特點,在進行EDA(Exploratory Data Analysis, 探索性數據分析)過程中,seaborn往往更爲高效。然而也需指出,seaborn與matplotlib的關係是互爲補充而非替代:多數場合中seaborn是繪圖首選,而在某些特定場景下則仍需用matplotlib進行更爲細緻的個性化定製。
按照慣例,後文將seaborn簡寫爲sns。
至於seaborn簡寫爲sns而非sbn的原因,感興趣者可自行查閱(關鍵詞:why import seaborn as sns?)。
02 風格設置
seaborn的風格設置主要分爲兩類,其一是風格(style)設置,其二是環境(context)設置。
1. 風格設置
seaborn設置風格的方法主要有三種:
set,通用設置接口
set_style,風格專用設置接口,設置後全局風格隨之改變
axes_style,設置當前圖(axes級)的風格,同時返回設置後的風格系列參數,支持with關鍵字用法
當前支持的風格主要有5種:
darkgrid,默認風格
whitegrid
dark
white
ticks
seaborn 5種內置風格與matplotlib繪圖風格對比
相比matplotlib繪圖風格,seaborn繪製的直方圖會自動增加空白間隔,圖像更爲清爽。而不同seaborn風格間,則主要是繪圖背景色的差異。
2. 環境設置
設置環境的方法也有3種:
set,通用設置接口
set_context,環境設置專用接口,設置後全局繪圖環境隨之改變
plotting_context,設置當前圖(axes級)的繪圖環境,同時返回設置後的環境系列參數,支持with關鍵字用法
當前支持的繪圖環境主要有4種:
notebook,默認環境
paper
talk
poster
seaborn 4種繪圖環境對比
可以看出,4種默認繪圖環境最直觀的區別在於字體大小的不同,而其他方面也均略有差異。詳細對比下4種繪圖環境下的系列參數設置:
點擊查看大圖
03 顏色設置
seaborn風格多變的另一大特色就是支持個性化的顏色配置。顏色配置的方法有多種,常用方法包括以下兩個:
color_palette,基於RGB原理設置顏色的接口,可接收一個調色板對象作爲參數,同時可以設置顏色數量
hls_palette,基於Hue(色相)、Luminance(亮度)、Saturation(飽和度)原理設置顏色的接口,除了顏色數量參數外,另外3個重要參數即是hls
同時,爲了便於查看調色板樣式,seaborn還提供了一個專門繪製顏色結果的方法palplot。
hls_palette提供了均勻過渡的8種顏色樣例
而color_palette則只是提供了8種不同顏色
04 數據集
seaborn自帶了一些經典的數據集,用於基本的繪製圖表示例數據。在聯網狀態下,可通過load_dataset()接口進行獲取,首次下載後後續即可通過緩存加載。返回數據集格式爲Pandas.DataFrame對象。
當前內置了10幾個數據集,常用的經典數據集如下:
iris:鳶尾花,與sklearn中數據集一致,僅有數值型數據
tips:小費,主要是中餐和晚餐的數據集,既有分類數據也有數值數據,可用於探索數據間的迴歸關係
titanic:泰坦尼克,經典數據集
本文後續所有繪圖主要基於前2個數據集完成。
05 常用繪製圖表
seaborn內置了大量集成繪圖接口,往往僅需一行代碼即可實現美觀的圖表結果。按照數據類型,大體可分爲連續性(數值變量)和離散型(分類數據)兩類接口。
數值變量
1. 單變量分佈
變量分佈可用於表達一組數值的分佈趨勢,包括集中程度、離散程度等。seaborn中提供了3種表達單變量分佈的繪圖接口
distplot
distribution+plot,接口內置了直方圖(histogram)、核密度估計圖(kde,kernel density estimation)以及rug圖(直譯爲地毯,繪圖方式就是將數值出現的位置原原本本的以小柱狀的方式添加在圖表底部),3種圖表均可通過相應參數設置開關狀態,默認情況下是繪製hist+kde。
distplot支持3種格式數據:pandas.series、numpy中的1darray以及普通的list類型。以鳶尾花數據爲例,並添加rug圖可得如下圖表:
kdeplot
kdeplot是一個專門繪製核密度估計圖的接口,雖然distplot中內置了kdeplot圖表,並且可通過僅開啓kde開關實現kdeplot的功能,但kdeplot實際上支持更爲豐富的功能,比如當傳入2個變量時繪製的即爲熱力圖效果。
仍以鳶尾花爲例,繪製雙變量核密度估計圖,並添加陰影得到如下圖表:
rugplot
這是一個不太常用的圖表類型,其繪圖方式比較樸素:即原原本本的將變量出現的位置繪製在相應座標軸上,同時忽略出現次數的影響。
2. 多變量分佈
單變量分佈僅可用於觀察單一維度的變化關係,爲了探究多變量間分佈關係時,如下繪圖接口更爲有效:
jointplot
joint意爲聯合,顧名思義jointplot是一個雙變量分佈圖表接口。繪圖結果主要有三部分:繪圖主體用於表達兩個變量對應的散點圖分佈,在其上側和右側分別體現2個變量的直方圖分佈:
pairplot
當變量數不止2個時,pairplot是查看各變量間分佈關係的首選。它將變量的任意兩兩組合分佈繪製成一個子圖,對角線用直方圖、而其餘子圖用相應變量分別作爲x、y軸繪製散點圖。顯然,繪製結果中的上三角和下三角部分的子圖是鏡像的。
實際上,查看seaborn源碼可以發現,其繪圖接口大多依賴於一個類實現。例如:jointplot在seaborn中實際上先實現了一個名爲JointGrid的類,然後在調用jointplot時即是調用該類實現。相比之下,JointGrid可以實現更爲豐富的可定製繪圖接口,而jointplot則是其一個簡單的樣例實現。類似地,pairplot則是依賴於PairGrid類實現。
例如,如下案例調用了PairGrid類實現,與標準pairplot不同的是上三角子圖選用了kde圖表,效果更爲豐富。
與此同時,seaborn中的繪圖接口雖然大多依賴於相應的類實現,但卻並未開放所有的類接口。實際上,可供用戶調用的類只有3個,除了前面提到的JointGrid和PairGrid外,還有一個是FacetGrid,它是一個seaborn中很多其他繪圖接口的基類。
3. 關係型圖表
seaborn還提供了幾個用於表達雙變量關係的圖表,主要包括點圖和線圖兩類。主要提供了3個接口,relplot(relation+plot)、scatterplot和lineplot,其中relplot爲figure-level(可簡單理解爲操作對象是matplotlib中figure),而後兩者是axes-level(對應操作對象是matplotlib中的axes),但實際上接口調用方式和傳參模式都是一致的,其核心參數主要包括以下4個:
data,pandas.dataframe對象,後面的x、y和hue均爲源於data中的某一列值
x,繪圖的x軸變量
y,繪圖的y軸變量
hue,區分維度,一般爲分類型變量
同時,relplot可通過kind參數選擇繪製圖表是scatter還是line類型。默認爲scatter類型。
relplot
仍以鳶尾花數據集爲例,繪製不同種類花的兩變量散點圖如下:
scatterplot
也可實現同樣的散點圖效果:
lineplot
lineplot不同於matplotlib中的折線圖,會將同一x軸下的多個y軸的統計量(默認爲均值)作爲折線圖中的點的位置,並輔以陰影表達其置信區間。可用於快速觀察點的分佈趨勢。
4. 迴歸分析
在查看雙變量分佈關係的基礎上,seaborn還提供了簡單的迴歸接口。另外,還可設置迴歸模型的階數,例如設置order=2時可以擬合出拋物線型迴歸線。
regplot
基礎迴歸模型接口,即regression+plot。繪圖結果爲散點圖+迴歸直線即置信區間。另外,還可通過logistic參數設置是否啓用邏輯迴歸。
residplot
residplot提供了擬合後的殘差分佈圖,相當於先執行lmplot中的迴歸擬合,而後將回歸值與真實值相減結果作爲繪圖數據。直觀來看,當殘差結果隨機分佈於y=0上下較小的區間時,說明具有較好的迴歸效果。
lmplot
lmplot=regplot+FacetGrid,也是用於繪製迴歸圖表,但功能相比更爲強大,除了增加hue參數支持分類迴歸外,還可添加row和col參數(二者均爲FacetGrid中的常規參數,用於添加多子圖的行和列)實現更多的分類迴歸關係。這裏以seaborn中的小費數據集進行繪製,得到如下回歸圖表:
5. 矩陣圖
矩陣圖主要用於表達一組數值型數據的大小關係,在探索數據相關性時也較爲實用。
heatmap
原原本本的將一組數據以熱力圖矩陣的形式展現出來,同時可通過設置數值上下限和顏色板實現更爲美觀的效果。如下圖表展示了鳶尾花數據集中各變量間的相關係數,從中可以很容易看出sepal_length、petal_length、petal_width三者之間彼此呈現較強的相關性,而sepal_width則與它們相關性不大。
clustermap
在heatmap的基礎上,clustermap進一步挖掘各行數據間的相關性,並逐一按最小合併的原則進行聚類,給出了聚類後的熱力圖:
分類數據
1. 散點圖
分類數據散點圖接口主要用於當一列數據是分類變量時。相比於兩列數據均爲數值型數據,可以想象分類數據的散點圖將會是多條豎直的散點線。繪圖接口有stripplot和swarmplot兩種,常用參數是一致的,主要包括:
x,散點圖的x軸數據,一般爲分類型數據
y,散點圖的y軸數據,一般爲數值型數據
hue,區分維度,相當於增加了第三個參數
data,pandas.dataframe對象,以上幾個參數一般爲data中的某一列
stripplot
常規的散點圖接口,可通過jitter參數開啓散點左右"抖動"效果(實際即爲在水平方向上加了一個隨機數控制x座標,默認jitter=True;當設置jitter爲False時,散點圖均嚴格位於一條直線上)
swarmplot
在stripplot的基礎上,不僅將散點圖通過抖動來實現相對分離,而且會嚴格講各散點一字排開,從而便於直觀觀察散點的分佈聚集情況:
2. 分佈圖
與數值型變量分佈類似,seaborn也提供了幾個分類型數據常用的分佈繪圖接口。且主要參數與前述的散點圖接口參數是十分相近的。
boxplot
箱線圖,也叫盒須圖,表達了各分類下數據4分位數和離羣點信息,常用於查看數據異常值等。
從各日期的小費箱線圖中可以看出,週六這一天小費數值更爲離散,且男性的小費數值隨機性更強;而其他三天的小費數據相對更爲穩定。
boxenplot
是一個增強版的箱線圖,即box+enhenced+plot,在標準箱線圖的基礎上增加了更多的分位數信息,繪圖效果更爲美觀,信息量更大。
lvplot
lvplot=letter value+plot,是boxenplot的前身,繪圖效果與後者一致。現已被boxenplot所替代,不再提倡使用。
violinplot
小提琴圖,相當於boxplot+kdeplot,即在標準箱線圖的基礎上增加了kde圖的信息,從而可更爲直觀的查看數據分佈情況。因其繪圖結果常常酷似小提琴形狀,因而得名violinplot。在hue分類僅有2個取值時,還可通過設置split參數實現左右數據合併顯示。
3. 統計(估計)圖
pointplot
pointplot給出了數據的統計量(默認統計量爲均值)和相應置信區間(confidence intervals,默認值爲95%,即參數ci=95),並以相應的點和線進行繪圖顯示:
barplot
與pointplot用折線表達統計量變化不同,barplot以柱狀圖表達統計量,而置信區間則與前者一致,僅僅是適用場景不同而已。
注:當x軸分類變量爲連續日期數據時,選用pointplot得到的繪圖意義更爲明確;而對於其他分類型變量,則選用barplot更爲合適。
countplot
這是一個功能比較簡單的統計圖表,僅用於表達各分類值計數,並以柱狀圖的形式展現:
4. figure-level分類繪圖總接口
最後,seaborn還提供了一個用於分類數據繪圖的figure-level接口catplot,catplot與其他分類數據繪圖接口的關係相當於lmplot與regplot的關係;同時catplot中還可通過kind參數實現前面除countplot外的所有繪圖接口,功能更爲強大。kind默認爲strip,此時等效於stripplot接口。
catplot
catplot=category+plot,用其實現分類條件下小提琴圖。
factorplot
factorplot是catplot的前身,二者實現功能完全一致,現已被後者更名替代,官方不再推薦使用。
另外,seaborn中還提供了一個時序數據繪圖接口tsplot,個人用的較少。
06 小結
最後簡要總結seaborn製作可視化圖表的幾個要點:
絕大多數繪圖接口名字均爲XXXXplot形式
繪圖數據對象主要區分連續型的數值變量和離散型的分類數據
繪圖接口中的傳參類型以pandas.dataframe爲主,當提供了dataframe對象作爲data參數後,x、y以及hue即可用相應的列名作爲參數,但也支持numpy的數組類型和list類型
繪圖接口底層大多依賴一個相應的類來實現,但對外開放的只有3個類:PairGrid、JointGrid和FacetGrid
接口包括了常用的分佈、關係、統計、迴歸類圖表
可靈活設置繪圖風格、環境和顏色
python爬蟲人工智能大數據公衆號