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