查看原文
其他

【量化】seaborn在金融数据可视化中的应用

大邓 大邓和他的Python 2019-04-26

《python与量化投资从基础到实战》学习笔记 tips:如果没时间阅读,可收藏本文或者直接滑动到文末获取本项目代码下载链接

seaborn库是以matplotlib为基础,同时支持numpy、pandas数据结构以及scipy和statsmodels的统计结果。

seaborn的主要功能有:

  • 内置主题

  • 丰富的调色板,更好的显示数据信息

  • 对变量分布进行了可视化

  • 数据矩阵可视化,并使用聚类算法发现这些矩阵中的结构

  • 对自变量和因变量之间的线性回归结果进行可视化

  • 绘制统计时间序列,并将其不确定性可视化

  • 构建高级、抽象的网格图,可轻松将复杂问题可视化

1. 主题管理

seaborn的抢眼的亮点是内置了经过美化的主题,无序调制参数即可绘制漂亮的可视化。

  1. import numpy as np

  2. import matplotlib.pyplot as plt

  3. %matplotlib inline


  4. #windows用户可使用下方的中文显示方法

  5. #plt.rcParams['font.sans-serif'] = ['SimHei']

  6. #plt.rcParams['axes.unicode_minus']=False


  7. def sinplot(flip=1):

  8. x = np.linspace(0, 14, 100)

  9. for i in range(1, 7):

  10. #随便设计的y函数

  11. plt.plot(x, np.sin(x+i*0.5)*x)


  12. sinplot()

接下来,引入seaborn模块,sns.set_style(style)可以设置主题,

style参数可以传入字典或者 "darkgrid","whitegrid","dark","white","ticks"

  1. import seaborn as sns

  2. #window有效,mac本代码无效

  3. sns.set_style(style={"font.sans-serif":['Microsoft YaHei', 'SimHei']})

  4. sinplot()

  1. plt.figure(figsize=(12, 8))

  2. sns.set_style('darkgrid')

  3. plt.subplot(221)#在两行两列的画布中位于第一个位置(左上角)

  4. sinplot()


  5. sns.set_style('whitegrid')

  6. plt.subplot(222)#在两行两列的画布中位于第2个位置(右上角)

  7. sinplot()


  8. sns.set_style('dark')

  9. plt.subplot(223)#在两行两列的画布中位于第3个位置(左下角)

  10. sinplot()


  11. sns.set_style('ticks')

  12. plt.subplot(224)#在两行两列的画布中位于第4个位置(右下角)

  13. sinplot()


seaborn的sns.setcontext(context, fontscale)函数的context一共有四种内置主题(paper、talk、poster、notebook),font_scale负责字体大小。

  1. plt.figure(figsize=(12, 8))

  2. sns.set_context('paper')

  3. plt.subplot(221)#在两行两列的画布中位于第一个位置(左上角)

  4. sinplot()


  5. sns.set_context('talk')

  6. plt.subplot(222)#在两行两列的画布中位于第2个位置(右上角)

  7. sinplot()


  8. sns.set_context('poster')

  9. plt.subplot(223)#在两行两列的画布中位于第3个位置(左下角)

  10. sinplot()


  11. sns.set_context('notebook')

  12. plt.subplot(224)#在两行两列的画布中位于第4个位置(右下角)

  13. sinplot()

2.调色板

seaborn拥有丰富的调色板,大致分为循环、渐变、混合三类,利用sns.setpalette(palette, ncolors=None, desat=None)函数来进行设置。

  • palette: seaborn颜色风格

  • ncolors: 整数型,绘制的颜色种类

  • desat: 每种颜色的去饱和度比例

  1. plt.figure(figsize=(12, 8))

  2. sns.set_palette("muted")

  3. plt.subplot(221)#在两行两列的画布中位于第一个位置(左上角)

  4. plt.title('Cycle') #循环

  5. sinplot()


  6. sns.set_palette("Blues_d")

  7. plt.subplot(222)#在两行两列的画布中位于第2个位置(右上角)

  8. plt.title('Low2Deep') #由浅到深

  9. sinplot()


  10. sns.set_palette("Reds")

  11. plt.subplot(223)#在两行两列的画布中位于第3个位置(左下角)

  12. plt.title('Reds') #红

  13. sinplot()


  14. sns.set_palette("RdBu")

  15. plt.subplot(224)#在两行两列的画布中位于第4个位置(右下角)

  16. plt.title('Red2Blue') #由红到蓝

  17. sinplot()

3.分布图

seaborn除了提供更美观的可视化,还提供辅助图形,使我们更快捷的得到可视化的结果。先看看最简单的正太分布直方图,在seaborn中,sns.distplot类似于matplotlib中的hist函数,但还提供了kde和rug参数选择是否显示核密度估计和边际毛毯图。

  1. import numpy as np


  2. size=1000

  3. rn1 = np.random.standard_normal(size)

  4. plt.figure(figsize=(12, 8))


  5. plt.subplot(221)

  6. plt.title('hist of matplotlib')

  7. plt.hist(rn1, bins=25)



  8. plt.subplot(222)

  9. plt.title('sns.distplot')

  10. sns.distplot(rn1, bins=25)



  11. plt.subplot(223)

  12. plt.title('sns.distplot & kde')

  13. sns.distplot(rn1, bins=25, kde=True)



  14. plt.subplot(224)

  15. plt.title('sns.distplot & kde & rug')

  16. sns.distplot(rn1, bins=25, kde=True, rug=True)

相比于matplotlib,使用seaborn画出的图更加美观。使用sns.joinplot()函数还可以更细致的显示两个变量之间的关系

sns.joinplot(x, y, data, kind):

  • x:横坐标轴,dataframe中的列名

  • y:纵坐标轴,dataframe中的列名

  • data: dataframe数据

  • kind: “scatter” | “reg” | “resid” | “kde” | “hex”

  1. import pandas as pd


  2. tips = pd.read_csv('data/tips.csv')

  3. tips.head()

  1. #plt.title('reg')

  2. sns.set(style="white")

  3. #你们也可以回去试试kind的其他参数

  4. sns.jointplot("total_bill", "tip", data=tips, kind="reg")


4.矩阵图

在金融领域中,我们常常需要利用heatmap将各种历史表现可视化。我们看看个股票月份的收益率汇总

  1. import pandas as pd

  2. import numpy as np


  3. stocks = pd.read_excel('data/stock_data.xlsx')

  4. date = stocks.pop('date')

  5. returns = np.log(stocks.pct_change()+1)

  6. returns['date'] = [str(t)[5:7] for t in date]

  7. returns.dropna(inplace=True)

  8. returns.set_index('date', inplace=True)

  9. groupby_returns = returns.groupby(returns.index).sum()

  10. groupby_returns

  1. plt.figure(figsize=(10, 8))

  2. plt.title('return of the stock by month')

  3. sns.heatmap(groupby_returns, annot=True, linewidths=0.5)


5. 结构网络图

结构网络图可以帮助我们更直观的获取各变量之间的关系,如果使用matplotlib,不得不需要使用for循环,实现过程比较繁琐。而seaborn让这一切只需要一行代码即可实现。这里我们用sns.pairplot()

  1. sns.pairplot(returns)

对角线是各个股票自身的对数收益率,学到这里有没有爱上python,喜欢上seaborn。

相关文章

Seaborn官方教程中文教程

中文数据可视化你需要知道的一个库

Python数据可视化:25年GDP之变

yellowbrick:机器学习的可视化分析诊断库

使用pyvis对社交网路数据可视化

少有人知的python数据科学库  

Python系列课(爬虫、文本分析、机器学习)视频教程

【工具篇】如何用Google Colab高效的学习Python

手把手教你学会LDA话题模型可视化pyLDAvis库

100G 文本分析语料资源(免费下载) 


公众号后台回复”20190328"得本项目代码

给我好看、留言、share




    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存