seaborn官方文檔翻譯
統計分析
是理解數據集中各個變量彼此關係的重要過程,經過統計分析
,咱們就能夠洞見數據中隱藏的趨勢和規律,更好的揭示數據之間的關係。node
在本教程中咱們主要討論三種seaborn函數
:python
relplot(kind) 畫圖函數kind參數能夠爲"scatter"或者"line"web
scatterplot() 散點圖函數正則表達式
lineplot() 折線圖函數shell
不論數據結構多麼複雜,seaborn的這些函數能夠很簡明的將數據展現出來。好比在二維空間中,seaborn能夠在圖中經過色調(hue)、尺寸(size)、風格(style)等方式來展現三維數據結構。具體怎麼使用請看繼續往下學習bootstrap
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
#讓jupyter notebook的Cell能夠將多個變量顯示出來。
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = 'all'
sns.set(style="darkgrid")
使用散點圖展示相關變量
散點圖是統計可視化方法中的中流砥柱。可使用relplot(kind='scatter')或者scatter()做圖微信
tips = pd.read_csv('tips.csv')
#tips數據集中包含total_bill、tip、sex、smoker、day、time、size這些字段
tips.head()
sns.relplot(x="total_bill",
y="tip",
data=tips)
#sns.scatterplot(x="total_bill", y="tip", data=tips) #效果等同於relplot函數
style樣式
當有第三個變量參與繪圖,在seaborn中可使用style(類別樣式參數),由於類別自己也是帶有信息的。數據結構
sns.relplot(x="total_bill",
y="tip",
style="smoker",
data=tips)
hue色標
可是上圖看着smoker類目,No和yes很難在圖中區分。若是能有色調的區別,更容易肉眼區分開來。這裏使用色調參數 hueapp
sns.relplot(x="total_bill",
y="tip",
hue="smoker",
style="smoker",
data=tips)
固然咱們也能夠在圖中對四種變量進行統計性分析。四個變量分別是total_bill、tip、smoker、time
dom
sns.relplot(x="total_bill",
y="tip",
hue="smoker",
style="time",
data=tips)
palette調色板
在兩個例子中,咱們能夠自定義調色板(color palette),這樣作有不少options。在這裏,咱們使用字字符串接口自定義 順序調色板。
sns.relplot(x="total_bill",
y="tip",
hue="size",
#ch變化範圍(2.5,-0.2),從淺色(大於0)到深色(小於0)
#色調的明暗程度dark取值範圍(0,1),dark值越大散點的顏色越淺
palette="ch:2.5,-0.2,dark=0.1",
data=tips)
size尺寸
對於三個變量的可視化,其實還可使用尺寸size參數來可視化。
sns.relplot(x='total_bill',
y='tip',
size='size',
data=tips)
size還能夠設置範圍
sns.relplot(x='total_bill',
y='tip',
size='size',
sizes=(15, 200),
data=tips)
散點圖使用很方便,但這並非萬能通用的可視化方法。例如,咱們想探索某些數據集中的某個變量隨着時間的變化趨勢,或者該變量是連續型變量,此時使用lineplot()
更好。或者relplot(kind='line')
。
咱們僞造一份隨着時間變化的數據
data = dict(time=np.arange(500),
value=np.random.randn(500).cumsum())
df = pd.DataFrame(data)
g = sns.relplot(x="time",
y="value",
kind="line",
data=df)
g.fig.autofmt_xdate()
sort參數
由於lineplot()
假定咱們繪製的圖因變量是y,自變量是x。繪圖前默認從x軸方向對數據進行排序。可是,這種狀況是能夠被禁用的:
df = pd.DataFrame(np.random.randn(500, 2).cumsum(axis=0),
columns=["x", "y"])
sns.relplot(x="x",
y="y",
sort=True,
kind="line",
data=df)
sns.relplot(x="x",
y="y",
sort=False,
kind="line",
data=df)
03-聚合並表示不肯定性
更復雜的數據集將對x變量的相同值有多個觀測值。seaborn中默認經過繪製x的平均值和x的95%置信區間來聚合每一個x的多個測量值:
fmri = pd.read_csv('fmri.csv')
fmri.head()
sns.relplot(x='timepoint',
y='signal',
kind='line',
data=fmri)
置信區間ci
使用bootstrapping來計算置信區間(confidence intervals),這對於較大的數據集來講會是時間密集型的。所以咱們能夠對該方法採用禁用。參數ci=None表示禁用
sns.relplot(x='timepoint',
y='signal',
kind='line',
ci=None,
data=fmri)
另外一個好的選擇,特別是對於更大的數據,是經過繪製標準誤差sd
而不是置信區間來表示每一個時間點的分佈範圍。ci參數設置爲'sd'
sns.relplot(x='timepoint',
y='signal',
kind='line',
ci='sd',
data=fmri)
estimator
要徹底剔除聚合效應,請將estimator
參數設置爲None
。當數據在每一個點上有多個觀察值時,這可能會產生奇怪的效果。
sns.relplot(x='timepoint',
y='signal',
kind='line',
estimator=None,
data=fmri)
使用語義映射繪製數據子集
Plotting subsets of data with semantic mappings
lineplot()
擁有與relplot()、scatterplot()
相似的靈活性:一樣能夠藉助色調hue、尺寸size和樣式style將三種變量展現在二維圖表中。所以咱們不用停下來思考如何使用matplotlib對點線具體的參數進行設置。
使用lineplot()
也會診斷數據如何藉助語義進行聚合。例如在製圖時,加入色調hue
會將圖表分爲兩條曲線以及錯誤帶(error band),每種顏色對應的指示出數據的子集:
色調hue
下面咱們看看hue具體例子
fmri = pd.read_csv('fmri.csv')
fmri.sample(5)
sns.relplot(x='timepoint',
y = 'signal',
hue='event',
kind='line',
data=fmri)
樣式style
改變製圖中的樣式
sns.relplot(x='timepoint',
y = 'signal',
hue='event',
style='event',
kind='line',
data=fmri)
注意上面代碼中hue和style參數都是一個變量,因此繪製的圖與以前生成的圖變更不大。只是cue類曲線從實線變成虛線。
如今hue和style參數不一樣後,咱們在運行試試
sns.relplot(x='timepoint',
y = 'signal',
hue='region',
style='event',
kind='line',
data=fmri)
與散點圖同樣,要謹慎使用多個語義製做線圖。 雖然這樣操做有時候提供了信息,但圖表更難解讀。 但即便您只檢查一個附加變量的變化,更改線條的顏色和樣式也頗有用。 當打印成黑白或有色盲的人觀看時,這可使情節更容易理解:
sns.relplot(x='timepoint',
y = 'signal',
hue='event',
style='event',
kind='line',
data=fmri)
units
當您使用重複測量數據(即,您有屢次採樣的單位)時,您還能夠單獨繪製每一個採樣單位,而無需經過語義區分它們。這能夠避免使圖例混亂:
sns.relplot(x="timepoint",
y="signal",
hue="region",
units="subject",
estimator=None,
kind="line",
data=fmri.query("event == 'stim'"))
lineplot()中默認的色彩映射和圖例處理還取決於色調hue
是分類型數據
仍是數字型數據
:
dots = pd.read_csv('dots.csv').query("align == 'dots'")
dots.head()
sns.relplot(x="time",
y="firing_rate",
hue="coherence",
style="choice",
kind="line",
data=dots)
調色板palette
可能會發生這樣的狀況:即便色調變量palette是數字,它也很難用線性色標表示。 這就是這種狀況,其中色調變量hue以對數方式縮放。 您能夠經過傳遞列表或字典爲每一行提供特定的顏色值:
#n_colors值與coherence種類數相等
palette = sns.cubehelix_palette(light=.8, n_colors=6)
sns.relplot(x="time",
y="firing_rate",
hue="coherence",
style="choice",
palette=palette,
kind="line", data=dots);
hue_norm
或者您能夠更改色彩映射的規範化方式
from matplotlib.colors import LogNorm
sns.relplot(x="time",
y="firing_rate",
hue="coherence",
hue_norm=LogNorm(),
style="choice",
kind="line",
data=dots);
size
改變線條的粗細
sns.relplot(x='time',
y='firing_rate',
size='coherence',
style='choice',
kind='line',
data=dots)
繪製date數據
df = pd.DataFrame(dict(time=pd.date_range("2017-1-1", periods=500),
value=np.random.randn(500).cumsum()))
df.head()
g = sns.relplot(x="time", y="value", kind="line", data=df)
g.fig.autofmt_xdate()
多圖展示更多信息
當你想要理解兩個變量之間的關係如何依賴於多個其餘變量時呢?
最好的方法多是製做一個以上的圖。 由於relplot()
基於FacetGrid
,因此這很容易作到。 要顯示新增變量的影響,而不是將其分配給繪圖中的一個語義角色,請使用它來「構思」(facet)可視化。 這意味着您能夠建立多個軸並在每一個軸上繪製數據的子集:
tips = pd.read_csv('tips.csv')
sns.relplot(x="total_bill",
y="tip",
hue="smoker",
col="time", #time有幾種值,就有幾列圖
data=tips);
sns.relplot(x="timepoint",
y="signal",
hue="subject",
col="region", #region有幾種值,就有幾列圖
row="event", #event有幾種值,就有幾行圖
height=3,
kind="line",
estimator=None,
data=fmri);
sns.relplot(x="timepoint",
y="signal",
hue="event",
style="event",
col="subject",
col_wrap=3, #顯示的圖片的行數
height=3,
aspect=1, #長寬比,該值越大圖片越方。
linewidth=2.5,
kind="line",
data=fmri.query("region == 'frontal'"));
往期文章
本文分享自微信公衆號 - 大鄧和他的Python(DaDengAndHisPython)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。