Seaborn官方教程中文教程(一)

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=(15200),
            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(5002).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'"));

往期文章

100G Python學習資料(免費下載)

100G 文本分析語料資源(免費下載)     

typing庫:讓你的代碼閱讀者不再用猜猜猜  

數據清洗 經常使用正則表達式大全

大鄧強力推薦-jupyter notebook使用小技巧  

PySimpleGUI: 開發本身第一個軟件

深度特徵合成:自動生成機器學習中的特徵

Python 3.7中dataclass的終極指南(一) 

Python 3.7中dataclass的終極指南(二) 

2017年度15個最好的數據科學領域Python庫    

使用Pandas更好的作數據科學

[計算消費者的偏好]推薦系統與協同過濾、奇異值分解

機器學習: 識別圖片中的數字

應用PCA降維加速模型訓練

如何從文本中提取特徵信息?

使用sklearn作天然語言處理-1 

使用sklearn作天然語言處理-2

機器學習|八大步驟解決90%的NLP問題    

Python圈中的符號計算庫-Sympy

Python中處理日期時間庫的使用方法 

視頻講解】Scrapy遞歸抓取簡書用戶信息

美團商家信息採集神器 

用chardect庫解決網頁亂碼問題 





本文分享自微信公衆號 - 大鄧和他的Python(DaDengAndHisPython)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索