Pandas数据可视化工具:图表工具-Seaborn
內(nèi)容來源:https://www.jiqizhixin.com/articles/2019-01-30-15
簡介
在本文中,我們將研究Seaborn,它是Python中另一個非常有用的數(shù)據(jù)可視化庫。Seaborn庫構(gòu)建在Matplotlib之上,并提供許多高級數(shù)據(jù)可視化功能。
盡管Seaborn庫可以用于繪制各種圖表,如矩陣圖、網(wǎng)格圖、回歸圖等,但在本文中,我們將了解如何使用Seaborn庫繪制分布和分類圖。在本系列的第二部分中,我們將了解如何繪制回歸圖、矩陣圖和網(wǎng)格圖。
下載Seaborn庫
我們可以通過幾種方式下載seaborn庫。如果您正在為Python庫使用pip安裝程序,您可以執(zhí)行以下命令來下載這個庫:
pip install seaborn或者,如果您正在使用Python的Anaconda發(fā)行版,您可以使用以下命令來下載seaborn庫:
conda install seaborn在BigQuant平臺上,你可以跳過這一步,直接在策略編寫中import seaborn,即可使用
數(shù)據(jù)集
我們選取財報數(shù)據(jù)17年到19年的數(shù)據(jù)進(jìn)行繪制,首先在策略模板中輸入如下代碼:
import numpy as np import pandas as pd import seaborn as sns df = DataSource('financial_statement_CN_STOCK_A').read(start_date='2017-01-01',end_date='2019-01-02') #刪除Na值,否則后續(xù)繪圖會報錯,在進(jìn)行數(shù)據(jù)挖掘時,數(shù)據(jù)清洗也同樣十分重要 df = df.dropna() df.head()'df.head()'顯示了df的前五行:
分布圖
sns.distplot(df['fs_roe'])這里繪制的是各個股票的凈資產(chǎn)收益率(fs_roe),結(jié)果如下:
聯(lián)合分布圖
jointplot()用于顯示各列的相互分布。您需要向jointplot傳遞三個參數(shù)。第一個參數(shù)是要在x軸上顯示數(shù)據(jù)分布的列名。第二個參數(shù)是要在y軸上顯示數(shù)據(jù)分布的列名。最后,第三個參數(shù)是數(shù)據(jù)幀的名稱。
我們來畫一個凈資產(chǎn)收益率(fs_roe)和總資產(chǎn)報酬率 (TTM)(fs_roa_ttm)的聯(lián)合分布圖看看能不能找到兩者之間的關(guān)系,代碼如下:
# 這里kind='reg'表示在畫完連接圖后,做出兩者之間的線性關(guān)系 sns.jointplot(x='fs_roe', y='fs_roa_ttm', data=df,kind='reg')從圖中我們可以發(fā)現(xiàn)兩者有一定的線性關(guān)系。本文為了簡潔,只使用了財務(wù)報表的數(shù)據(jù)。其中’kind’一欄代表圖形類型,可使用 scatter,reg,resid,kde,hex…此處不再贅述
Pair Plot
paitplot()是一種分布圖,它基本上為數(shù)據(jù)集中所有可能的數(shù)字列和布爾列的組合繪制聯(lián)合圖。您只需要將數(shù)據(jù)集的名稱作為參數(shù)傳遞給pairplot()函數(shù),如下所示:
df_0 = DataSource('west_CN_STOCK_A').read(start_date='2017-01-01',end_date='2019-01-02') df_0 = df_0.dropna() sns.pairplot(df_0)由于財報數(shù)據(jù)列數(shù)過多,這里我們使用一致預(yù)期(west_CN_STOCK_A)
從pair plot的輸出中,您可以看到一致預(yù)期中所有數(shù)字列和布爾列的分布圖。
要將分類列的信息添加到pair plot中,可以將分類列的名稱傳遞給hue參數(shù)。
sns.pairplot(dataset, hue='你想用來分類的列')本文選取的報表分類效果均不理想,讀者可以使用自己找到的例子自行嘗試、感受。
Rug Plot
ugplot()用于為數(shù)據(jù)集中的每個點(diǎn)沿x軸繪制小條。要繪制rug圖,需要傳遞列的名稱。我們來畫個小的rug plot。
sns.rugplot(df['fs_roe'])從輸出中可以看到,與distplot()的情況一樣,fs_roe的大多數(shù)實(shí)例的值都在(-50,50)之中。
Bar Plot
barplot()用于顯示分類列中的每個值相對于數(shù)字列的平均值。第一個參數(shù)是分類列,第二個參數(shù)是數(shù)值列,第三個參數(shù)是數(shù)據(jù)集。例如,如果您想知道各個股票營業(yè)收入這段時間的平均值,您可以使用如下的條形圖。
sns.barplot(x='instrument', y='fs_operating_revenue', data=df)如圖,橫坐標(biāo)對應(yīng)股票,縱坐標(biāo)對應(yīng)營業(yè)收入,彩色部分長度代表均值,黑色部分代表不同時間點(diǎn)波動的幅度(事實(shí)上每個股票對應(yīng)的“柱”是有寬度的,文章原文是泰坦尼克號失事人員的信息表,此處統(tǒng)計的是失事男女的平均年齡。原則上x軸上元素不宜過多)
除了求平均值之外,Bar Plot還可以用于計算每個類別的其他聚合值。為此,需要將聚合函數(shù)傳遞給估計器。例如,你可以計算每個股票營業(yè)收入的標(biāo)準(zhǔn)差如下:
sns.barplot(x='instrument', y='fs_operating_revenue', data=df, estimator=np.std)注意:此代碼用到了numpy庫
統(tǒng)計圖
統(tǒng)計圖與條形圖類似,但是它顯示特定列中類別的計數(shù)。例如,如果我們想要計算每日被寫入財報數(shù)據(jù)的股票信息數(shù)量,我們可以使用count plot這樣做:
sns.countplot(x='date', data=df)箱線圖
box plot用于以四分位數(shù)的形式顯示分類數(shù)據(jù)的分布。框的中心顯示了中值。從下須到盒底的值顯示第一個四分位數(shù)。從盒子的底部到盒子的中部是第二個四分位數(shù)。從盒子的中間到頂部是第三個四分位數(shù),最后從盒子的頂部到頂部胡須是最后一個四分位數(shù)。
現(xiàn)在我們畫一個方框圖,顯示年齡和性別的分布。您需要將分類列作為第一個參數(shù)(在我們的示例中是年份),而數(shù)字列(在我們的示例中是凈資產(chǎn)收益率)作為第二個參數(shù)。最后,將數(shù)據(jù)集作為第三個參數(shù)傳遞,請看下面的腳本:
為使圖像表達(dá)出的信息更加直接有用,方便閱讀,我先對數(shù)據(jù)進(jìn)行了去極值處理。(未去極值的結(jié)果在后面附上的代碼中可以看到)
boxplot會自動對數(shù)據(jù)進(jìn)行標(biāo)記極值處理。若有數(shù)據(jù)超出某范圍,則會被標(biāo)記為異常值,在途中以點(diǎn)的形式顯示。為被標(biāo)記的數(shù)據(jù)則會以箱型的形式顯示。“箱子”的五根線分別為數(shù)據(jù)的0%,25%,50%,75%,100%。
通過添加另一層分布,您可以使您的方框繪圖更加美觀。例如,如果你想查看不同季度的數(shù)據(jù),以及他們凈資產(chǎn)收益率的信息,你可以將不同季度的數(shù)據(jù)傳遞給hue參數(shù),如下圖所示:
sns.boxplot(x='fs_quarter_year', y='fs_roe', data=df_1,hue='fs_quarter_index')Violin Plot
小提琴圖與box圖類似,但是小提琴圖允許我們顯示與數(shù)據(jù)點(diǎn)實(shí)際對應(yīng)的所有組件。函數(shù)的作用是:繪制小提琴的曲線圖。與box plot類似,第一個參數(shù)是分類列,第二個參數(shù)是數(shù)值列,第三個參數(shù)是數(shù)據(jù)集。
讓我們畫一個小提琴圖來展示年份和凈資產(chǎn)收益率的分布。
sns.violinplot(x='fs_quarter_year', y='fs_roe', data=df_1)像box plot一樣,您還可以使用hue參數(shù)向小提琴plot添加另一個類別變量,如下所示:
sns.violinplot(x='fs_quarter_year', y='fs_roe', data=df_1,hue='fs_quarter_index')現(xiàn)在你可以在Violin Ploe上看到很多信息。然而,不利的一面是,理解小提琴的情節(jié)需要一些時間和精力。
你可以把一個小提琴圖分成兩半,一半代表幸存的乘客,另一半代表沒有幸存的乘客。為此,需要將True作為violinplot()函數(shù)的分割參數(shù)的值傳遞。然而,需要注意的是:此時hue必須有且僅有兩種情況,否則代碼報錯。這里給出文章原文的代碼:
(dataset為原文作者使用的DataFrame,sex、age、survived為乘客的信息表)
Violin Plot和Box Plot都非常有用。但是,根據(jù)經(jīng)驗(yàn),如果您向非技術(shù)人員展示數(shù)據(jù),那么最好使用Box Plot,因?yàn)樗鼈兒苋菀桌斫狻A硪环矫?#xff0c;如果你把你的研究成果展示給研究團(tuán)體,那么使用Violin Plot來節(jié)省空間和在更短的時間內(nèi)傳達(dá)更多的信息,這會使一切變得更方便。
The Strip Plot
條形圖繪制一個散點(diǎn)圖,其中一個變量是分類變量。我們已經(jīng)看到了散點(diǎn)圖在聯(lián)合圖和成對圖中我們有兩個數(shù)值變量。在這種情況下,條形圖的不同之處在于其中一個變量是分類變量,對于分類變量中的每個類別,您將看到與數(shù)字列相關(guān)的散點(diǎn)圖。
函數(shù)的作用是:繪制小提琴的曲線圖。與box plot類似,第一個參數(shù)是分類列,第二個參數(shù)是數(shù)值列,第三個參數(shù)是數(shù)據(jù)集。請看下面的代碼:
sns.stripplot(x='fs_quarter_year', y='fs_roe', data=df_1)你可以看到各個股票每年的凈資產(chǎn)收益率分布。數(shù)據(jù)點(diǎn)看起來像條。理解這種形式的數(shù)據(jù)分布有點(diǎn)困難,為了更好地理解數(shù)據(jù),我們給抖動參數(shù)傳遞True,它會給數(shù)據(jù)添加一些隨機(jī)噪聲。請看下面的代碼:
sns.stripplot(x='fs_quarter_year', y='fs_roe', data=df_1,jitter=True)就像小提琴圖和盒子圖一樣,您可以使用色相參數(shù)為條形圖添加額外的分類列,如下圖所示:
sns.stripplot(x='fs_quarter_year', y='fs_roe', data=df_1,jitter=True,hue='fs_quarter_index')同理,“split=True”同樣適用,同時也要求hue的列值只有兩種情況
The Swarm Plot
Swarm Plot是Strip Plot和 Violin Plots的結(jié)合。在Swarm Plot中,這些點(diǎn)以不重疊的方式調(diào)整。讓我們畫一個Swarm Plot來表示年份和凈資產(chǎn)收益率的關(guān)系。函數(shù)的作用是:繪制小提琴的曲線圖。與box plot類似,第一個參數(shù)是分類列,第二個參數(shù)是數(shù)值列,第三個參數(shù)是數(shù)據(jù)集。請看下面的代碼:
sns.swarmplot(x='fs_quarter_year', y='fs_roe', data=df_1)可以清楚地看到,上面的圖中包含了散在的數(shù)據(jù)點(diǎn),比如條形圖,數(shù)據(jù)點(diǎn)沒有重疊。相反,他們和Violin Plot很相似。
讓我們使用hue參數(shù)向群圖中添加另一個分類列。
sns.swarmplot(x='fs_quarter_year', y='fs_roe', data=df_1,hue='fs_quarter_index')同理,“split=True”同樣適用,同時也要求hue的列值只有兩種情況
Combining Swarm and Violin Plots
如果您有一個龐大的數(shù)據(jù)集,不推薦使用群體圖,因?yàn)樗鼈儾荒芎芎玫厣炜s,因?yàn)樗鼈儽仨毨L制每個數(shù)據(jù)點(diǎn)。如果你真的喜歡群體圖,一個更好的方法是結(jié)合兩個圖。例如,要將Swarm Plot 與 Violin Plot結(jié)合起來,代碼如下:
sns.violinplot(x='fs_quarter_year', y='fs_roe', data=df_1) sns.swarmplot(x='fs_quarter_year', y='fs_roe', data=df_1, color='black')總結(jié)
Seaborn是一種基于Matplotlib庫的高級數(shù)據(jù)可視化庫。在本文中,我們研究了如何使用Seaborn庫繪制分布和分類圖。這是關(guān)于Seaborn的系列文章的第1部分。在本系列的第二篇文章中,我們將了解如何在Seaborn中處理網(wǎng)格功能,以及如何在Seaborn中繪制矩陣和回歸圖。
實(shí)現(xiàn)源碼:《Pandas數(shù)據(jù)可視化工具——Seaborn用法整理》
本文由BigQuant人工智能量化投資平臺原創(chuàng)推出,版權(quán)歸BigQuant所有,轉(zhuǎn)載請注明出處。?
?
總結(jié)
以上是生活随笔為你收集整理的Pandas数据可视化工具:图表工具-Seaborn的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 和若铁路通车!官方晒车头视角:沉浸式体验
- 下一篇: Web Service 实现分布式事务