基本信息
Seaborn是一個用Python製作統計圖形的庫。它建立在matplotlib之上,並與panda數據結構緊密集成
以下是seaborn提供的一些功能:
- 一個面向數據集的API,用於檢查多個變量之間的關係
- 專門支持使用分類變量來顯示觀察結果或匯總統計數據
- 用於可視化單變量或雙變量分布以及在數據子集之間進行比較的選項
- 各類因變量線性回歸模型的自動估計與作圖
- 方便查看複雜數據集的整體結構
- 用於構建多圖塊網格的高級抽象,使您可以輕鬆地構建複雜的可視化
- 對matplotlib圖形樣式與幾個內置主題的簡潔控制
選擇調色板的工具,忠實地揭示您的數據模式
Seaborn的目標是使可視化成為探索和理解數據的核心部分。它的面向數據集的繪圖功能對包含整個數據集的數據流和數組進行操作,並在內部執行必要的語義映射和統計聚合以生成信息圖。
下面是一個例子:
import seaborn as snssns.set()tips = sns.load_dataset("tips")sns.relplot(x="total_bill", y="tip", col="time", hue="smoker", style="smoker", size="size", data=tips);
這裡發生了一些事情。讓我們一個一個來看:
1. 我們導入seaborn,這是這個簡單示例所需的唯一庫。
import seaborn as sns
在幕後,seaborn使用matplotlib繪製圖片。許多任務只能通過seaborn函數來完成,但是進一步的定製可能需要直接使用matplotlib。下面將更詳細地解釋這一點。對於交互式工作,建議在matplotlib模式下使用Jupyter/IPython接口,否則必須調用matplotlib.pyplot.show來查看圖片。
2. 我們應用默認的默認seaborn主題、縮放和調色板。
sns.set()
這將使用matplotlib rcParam系統,並將影響所有matplotlib圖的外觀,即使您沒有使用seaborn創建它們。除了默認主題之外,還有其他幾個選項,您可以獨立控制繪圖的樣式和比例,以便在表示上下文中快速轉換您的工作(例如,在演講期間生成具有可讀字體的繪圖)。如果您喜歡matplotlib的默認設置,或者喜歡不同的主題,可以跳過這一步,仍然使用seaborn繪圖函數。
3. 我們加載一個示例數據集
tips = sns.load_dataset("tips")
文檔中的大多數代碼將使用load_dataset()函數來快速訪問示例數據集。這些數據集沒有什麼特別的;它們只是pandas的數據倉庫,我們可以把pandas裝進去用read_csv或手工構建它們。許多示例使用「tips」數據集,它非常乏味,但對於演示非常有用。tips數據集說明了組織數據集的「整潔」方法。如果您的數據集以這種方式組織,您將從seaborn中獲得最大的好處,下面將對此進行更詳細的說明
4. 我們繪製了具有多個語義變量的分面散點圖。
sns.relplot(x="total_bill", y="tip", col="time", hue="smoker", style="smoker", size="size", data=tips)
這個特殊的圖顯示了tips數據集中五個變量之間的關係。其中三個是數值型的,兩個是分類型的。兩個數值變量(total_bill和tip)確定軸上每個點的位置,第三個變量(size)確定每個點的大小。一個分類變量將數據集分割成兩個不同的軸(facet),另一個分類變量確定每個點的顏色和形狀。
所有這些都是通過對seaborn函數relplot()的單個調用完成的。請注意,我們只提供了數據集中變量的名稱以及希望它們在圖中扮演的角色。與直接使用matplotlib不同,不需要將變量轉換為可視化的參數(例如,為每個類別使用的特定顏色或標記)。翻譯是由seaborn自動完成的。這讓用戶能夠專注於他們想要圖片回答的問題。
replot函數和kind參數
沒有通用的最佳數據可視化方法。不同的問題最好通過不同的可視化來回答。Seaborn試圖簡化在不同的可視表示之間的切換,這些表示可以使用相同的面向數據集的API進行參數化。
之所以使用relplot()函數來命名,是因為它被設計成可視化許多不同的統計關係。雖然散點圖是一種非常有效的方法,但是一個變量表示時間度量的關係最好用一條線表示。relplot()函數有一個方便參數 kind,可以方便地切換到這個替代表示:
dots = sns.load_dataset("dots")sns.relplot(x="time", y="firing_rate", col="align", hue="choice", size="coherence", style="choice", facet_kws=dict(sharex=False), kind="line", legend="full", data=dots);
請注意大小和樣式參數是如何在散點和線圖中共享的,但是它們對這兩種可視化的影響是不同的(改變標記區域和符號與線寬和虛線)。我們不需要記住這些細節,讓我們專注於情節的整體結構和我們想要傳達的信息。
統計估計和誤差條
通常我們感興趣的是一個變量作為其他變量的函數的平均值。許多seaborn函數可以自動執行統計估計,這是必要的,以回答這些問題:
fmri = sns.load_dataset("fmri")sns.relplot(x="timepoint", y="signal", col="region", hue="event", style="event", kind="line", data=fmri);
當統計值被估計時,seaborn將使用bootstrapping來計算置信區間並繪製代表估計不確定性的誤差條。
seaborn的統計估計超越了描述性統計。例如,還可以使用lmplot()增強散點圖,使其包含線性回歸模型(及其不確定性):
sns.lmplot(x="total_bill", y="tip", col="time", hue="smoker", data=tips)
專業分類圖
標準散點圖和線狀圖顯示數值變量之間的關係,但許多數據分析涉及分類變量。在seaborn中有幾種專門的繪圖類型,它們經過了優化,用於可視化這類數據。可以通過catplot()訪問它們。與relplot()類似,catplot()的思想是公開一個通用的面向數據集的API,該API在一個數值變量和一個(或多個)分類變量之間關係的不同表示上進行泛化。
這些表示在表示底層數據時提供了不同的粒度級別。在最精細的層次上,你可能希望通過繪製散點圖來調整點在分類軸上的位置,這樣它們就不會重疊:
sns.catplot(x="day", y="total_bill", hue="smoker", kind="swarm", data=tips);
或者,你可以使用核密度估計來表示採樣點的底層分布:
sns.catplot(x="day", y="total_bill", hue="smoker", kind="violin", split=True, data=tips);
或者你可以在每個嵌套的類別中顯示唯一的平均值和它的置信區間:
sns.catplot(x="day", y="total_bill", hue="smoker", kind="bar", data=tips);
可視化數據集結構
在seaborn中還有另外兩種圖形級別的函數,可用於對多個圖塊進行可視化。它們都是面向數據集結構的。一個是jointplot(),專注於單一的關係:
iris = sns.load_dataset("iris")sns.jointplot(x="sepal_length", y="petal_length", data=iris);
另一個是pairplot(),它具有更廣闊的視圖,顯示了所有成對關係和邊緣分布,可選地以某個分類變量為條件:
sns.pairplot(data=iris, hue="species");
在可視化表示方面,jointplot()和pairplot()都有一些不同的選項,它們都是建立在類的基礎上的,這些類允許更徹底地定製多個plot圖形(分別是JointGrid和PairGrid)。