python數據可視化之Seaborn(四):相關數據可視化

寫在開頭:今天分享的是關於數據相關性的繪圖方法,參考文獻會附在文章最後的鏈接。

前文回顧
第一節分享了Seaborn繪圖的整體顏色與風格比例調控,可點擊鏈接查看。
python數據可視化之Seaborn(一)
第二節分享了連續、分類、離散數據的繪圖顏色的方法,可點擊鏈接查看。
python數據可視化之Seaborn(二)
第三節分享了對於數據分佈的繪圖方法,可點擊鏈接查看。
python數據可視化之Seaborn(三)

Seaborn可視化內容安排

在Seaborn的學習中安排如下,
一、畫風設置:會簡單介紹一下繪圖風格(一)與顏色風格(二)的設置;
二、繪圖技巧:這裏會介紹數據集(三)、相關數據(四)、分類數據(五)、線性關係(六)可視化的相關內容;
三、結構網絡:本節主要介紹數據識別結構網絡的繪圖(七)。

二、Seaborn繪圖技巧

相關數據

在統計分析中最常用的一個步驟去理解數據就是去了解數據的相關性,比如一般在建立迴歸模型之前,會建立一個二維散點圖來觀察數據之間表現的一種關係,進行初步判斷,所以上一節說了查看數據分佈的方法,這一節再來講一講查看數據相關的辦法。本節使用的函數主要是relplot(),這個函數可以通過FacetGrid方法進行調參,內置在其中的比較方便。下面首先加載這次需要使用到的包和整體參數。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
sns.set_style("whitegrid")
np.random.seed(42)

散點圖繪製
散點圖是瞭解兩變量數據最直接的方法,可以快速查看到變量之間的相關性、異常值與槓桿值等等,所以在探究變量之間關係的時候繪製個散點圖還是很有必要的,利用seaborn自帶數據集tips進行繪製。

tips = sns.load_dataset("tips")
sns.relplot(x="tip", y="total_bill", data=tips)
#tips.head() 可以先查看一下數據變量有哪些

在這裏插入圖片描述
在relplot函數中有hue(當輸入爲離散值那麼就改變類別顏色,如果是連續值那麼就用連續型的顏色變化)、size和style三個控制參數,控制圖形不同類別的形狀顏色或者大小。

sns.relplot(x="tip", y="total_bill", hue="sex", style="smoker", data=tips)

在這裏插入圖片描述
上圖的顏色分別代表男性和女性,標記形代表是否是菸民,雖然這張圖涵蓋大量的信息,但是有時一張圖信息過多往往難以閱讀。還有一個參數是size,在將size參數前,我們還可以根據hue輸入連續值來繪製連續顏色圖,這裏可以在palette裏面直接調節cubehelix色板旋轉,

sns.relplot(x="tip", y="total_bill", hue="size", palette="ch:r=0.8,l=1", data=tips)

在這裏插入圖片描述
size控制參數可以控制輸出散點圖的標記大小,隨着圓圈越大意味着其size值越大,sizes參數還可以設着圓圈半徑變化範圍。

sns.relplot(x="total_bill", y="tip", size="size", sizes=(15, 150),data=tips)

在這裏插入圖片描述
以上就是散點圖的繪製,下面進行線圖的繪製。
線圖繪製
線圖跟散點圖有不同,散點圖更適合分散一點的數據,而線圖表示的是一種連續性,同樣能夠顯示出數據的相關關係,但對於離羣值的繪圖效果不是很友好,也是基礎繪圖之一。
這裏的cumsum()函數時累計加和函數默認按列累計依次加和,

df = pd.DataFrame(dict(time=np.arange(500),
                       value=np.random.randn(500).cumsum()))
g = sns.relplot(x="time", y="value", kind="line", data=df, color=sns.color_palette("RdBu")[2])
g.fig.autofmt_xdate()

在這裏插入圖片描述
relplot線圖的繪製會自動按照x的值進行排序,如果不需要的話可以將參數sort調整爲False,這裏就不做展示。在一般的線圖中,如果一個x對應多個y,那我們希望能夠繪製出這裏個x對應的y的區間,這個區間是我們所謂的置信區間,我們載入fmri數據集進行演示,

fmri = sns.load_dataset("fmri")
sns.relplot(x="timepoint", y="signal", kind="line", data=fmri)

在這裏插入圖片描述
當然如果想去掉置信區間僅顯示均值線,那可以調節參數ci爲None,也可以設爲sd以一個標準差爲置信區間寬度

sns.relplot(x="timepoint", y="signal", ci=None, kind="line", data=fmri)
sns.relplot(x="timepoint", y="signal", ci="sd", kind="line", data=fmri)

在這裏插入圖片描述
在這裏插入圖片描述
繪製完單一線圖後,我們還可以繪製分類的線圖,同樣有hue、size、style三個參數進行控制,還可以通過markers=True添加每個點的標籤,

sns.relplot(y="total_bill", x="size", hue="time",style="day",kind="line",markers=True, data=tips)

在這裏插入圖片描述
當然還可以通過query()函數來篩選部分數據進行繪圖,

dots = sns.load_dataset("dots").query("align == 'dots'")
palette = sns.cubehelix_palette(light=.8,start=-.6, rot=-0.75)
sns.relplot(x="time", y="firing_rate",
            hue="coherence", style="choice",palette=palette,
            kind="line", data=dots);

在這裏插入圖片描述
還可以通過調節size來改變線的粗細,這裏建議僅選擇類別少的變量作爲size的調節變量不然線的粗細過於接近的話,就很難起到區分的作用,

palette = sns.cubehelix_palette(light=.3,start=-.2, rot=-0.75)
sns.relplot(x="time", y="firing_rate",
            hue="coherence", size="choice",palette=palette,
            kind="line", data=dots);

在這裏插入圖片描述
在線圖這個最後我們來繪製一下時間序列,這個圖在對傳統金融過票市場研究,或者一些計量研究有着幫助作用,

df = pd.DataFrame(dict(time=pd.date_range("2019-1-1", periods=300),
                                          value=np.random.randn(300).cumsum()))
g = sns.relplot(x="time", y="value", kind="line", data=df)
g.fig.autofmt_xdate() #調節橫軸標籤方向

在這裏插入圖片描述
網格繪圖
所謂網格繪圖就是通過其特徵繪製不同特徵下的相關圖,可以使用col或者row參數,將按照對應類別進行畫布的分隔,

sns.relplot(x="total_bill", y="tip", hue="smoker",
            col="sex", row="time", data=tips);

在這裏插入圖片描述
當出現變量過多還可以使用col_wrap參數設置一行顯示多少個圖,下圖就設置的一行顯示3個圖,

sns.relplot(x="total_bill", y="tip", hue="smoker",
            col="day",col_wrap=3, data=tips);

在這裏插入圖片描述
結語
今天分享了作圖的第二步,去查看數據間的相互關係,明天將就具體的一些數據類型進行繪圖的分享。
謝謝閱讀。
參考
Seaborn繪圖文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章