Python金融数据分析——数据可视化

一、静态2D绘图

首先是导入和绘图定制操作

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

mpl.__version__
mpl.rcParams['font.family']='serif' #图表字体设置

plt.style.use('seaborn') #绘图样式设置

np.random.seed(1000)
y=np.random.standard_normal(20)
x=np.arange(len(y))

上述代码设置了x和y随机数,接下来调用plt.plot()函数绘图。如果只提供y值,plot以索引值为x值。接下来介绍2D图表的几项基本设置。

plt.plot(x,y,'b') #蓝色线
plt.plot(y)

plt.figure(figsize=(10,3)) #设置图标大小
plt.plot(y.cumsum()) 
plt.grid(True) #图表网格线设置
plt.axis('equal') #坐标轴数据设置,以下为其他参数
#empty\off\equal\scaled\tight\iamge\
#\[xmin,xmax,ymin,ymax]
plt.xlim(1,10)
plt.ylim(2,4)

plt.title() #图表标题
plt.xlabel() #坐标轴名称
plt.ylabel()

一般而言,对于包含多个单独的子集,且每个子集的绘制有不同的标准时,可以通过直接绘图(这种情况下plot函数会自动分类数据)或者申明具体数据组来绘图,同时添加其他通用函数以及进一步的注释帮助用户理解。

plt.plot(y[:,0],lw=1.5,label-'1st')
plt.plot(y[:,1],lw=1.5,label='2nd')

plt.legend(loc=0) #将图例放在合适的位置
#1 右上 2 左上 

 特别地,如果出现两组数据的刻度差别过大时,一个统一的刻度可能导致某个数据组不可视。为此解决方法有:使用左右两种刻度的y轴;使用上下两种视图。以下为两种方法的示例。

fig.ax1=plt.subplots() #定义图和轴对象
plt.plot(y[:,0],'b',label='1st')
ax2=ax1.twinx() #创建第二个轴对象
plt.plot(y[:,1],'y',label='2nd')

plt.subplot(211)
plt.plot(y[:,0],'b',label='1st')
plt.subplot(212)
plt.plot(y[:,1],'y',label='2nd')

 子图的定位需要通过plt.subplot()函数中三个整数参数:numrows,numcols,fignum来指定子图的行数、列数和指定子图编号。接下来介绍几种其他集中绘图样式。

#柱状图
plt.bar()

#散点图
plt.scatter(y[:,0],y[:,1])
plt.scatter(y[:,0],y[:,1],y[:,2],cmap='coolwarm')
plt.colorbar()

#柱状图
plt.hist(y,label=['1st','2nd'])
#bins数组数 range数组据上下界 normed规范化整数 weights数组权重 color数组颜色
 
#箱线图
plt.boxplot(y)
plt.setp(ax,xticklabels=['1st','2nd'])

二、静态3D绘图

这一部分我们会使用一个基于Black-Scholes-Merton模型的欧式看涨期权类的例子来展示如何用代码实现欧式看涨期权价值曲面和Vega值曲面的可视化实例。我们首先看看这个类。

class bsm_call_option(object):
    def __init__(self,S0,K,T,r,sigma):
        self.S0 =float(S))#标的物当前价格
        self.K=K #行权价
        self.T=T #年为单位的到期日
        self.r=r #连续复利的无风险利率
        self.sigma=sigma #标的物价格波动率

    def value(self):
        d1=((log(self.S)/self.K)+(self.r+0.5*self.sigma **2)*self.T)/(self.sigma*sqrt(self.T)))
        d2=((log(self.S0/self.K)+(self.r-0.5*self.sigma**2)*self.T)/(self.sigma*sqrt(self.T)))
        value=(self.S0*stats.norm.cdf(d1,0.0,1.0)-self.K*exp(-self.r*self.T)*stats.norm.cdf(d2,0.0,1.0))
        return value

    def vega(self):
        d1=((log(self.S)/self.K)+(self.r+0.5*self.sigma **2)*self.T)/(self.sigma*sqrt(self.T)))
        vega=self.S0*stats.norm.pdf(d1,0.0,1.0)*sqrt(self.T)
        return vega
    
    def imp_vol(self,C0,sigma_est=0.2,it=100): #计算隐含波动率
        option=bsm_call_option(self.S0,self.K,self.T,self.r,sigma_est)
        for i in range(it):
            option.sigma-=(option.value()-C0)/option.vega()
        return option.sigma

那么第一步,就是对类进行实例化

strike=np.linspace(50,150,24)
ttm=np.linspace(0.5,2.5,24)
strike,ttm=np.meshgrid(strike,ttm)

iv=(strike-100)**2/(100*strike)/ttm
#iv为虚拟的隐含波动率

第二步,绘制图表

from mpl_toolkits.mplot3d import Axes3D
fig=plt.figure(figsize=(10,6))
ax=fig.gac(projection='3d') #创建画布
surf=ax.plot_surface(strike,ttm,iv,rstride=2,cstride=2,cmap=plt.cm.coolwarm,linewidth=0.5,antialiased=True) #创建3D图表
ax.set_xlabel('strike')
ax.set_ylabel('time-to-maturity')
ax.set_zlabel('implied volatility')
fig.colorbar(surf,shrink=0.5,aspect=5) #创建色卡条

三、交互式2D绘图

前面两个章节主要是讨论静态位图或者PDF格式的图表,在本节中我们希望创建一种可以缩放、通过鼠标悬停检查数据的图表。这种图表被称为交互式绘图,也就是面向对象绘图。与之相对的是非交互式绘图,也就是面向过程绘图。当plotly和pandas的DataFrame对象以及封装器软件包Cufflinks相结合时功能十分强大。简单介绍一下cufflinks的使用。

import pandas as pd 
import numpy as np
import cufflinks as cf 
import plotly.offline as plyo #导入plotly的离线绘图功能

cf.set_config_file(offline=True) #设置为offline模式可避免次数问题
plyo.init_notebook_mode(connected=True) #笔记本绘图模式

df.iplot(kind,barmode)
df.datagen.histogram().iplot(kind)
cf.datagen.box().iplot(kind)

以上只是对cufflinks函数的简单罗列,对这部分感兴趣的读者可以移步相关博客。接下来展示一段较为完整的交互式图表创建和表示的代码。

a=np.random.standard_normal((250,5)).cumsum(axis=0)
index=pd.date_range('2020-1-1',freq='B',periods=len(a))
df=pd.DataFrame(100+a,columns=list('abcdde'),index=index)

plyo.iplot(df.iplot(asFigure=True),filename='ply_01')
#其他参数 theme title xTitle yTitle mode symbol size colors
plyo.iplot(kind='hist',subplots=True,bins=15)

为了说明几种库组合在处理金融时间序列数据时的强大功能,我们以金融时间序列数据为例。

qf=cf.QuantFig(data,title,legend,name)
plyo.iplot(qf.iplot(asFigure=True),filename)

#添加金融图表元素
qf.add_bollinger_bands(periods,boll_std) #periods布林线周期 boll_std布林线宽度标准差
qf.add_RSI(periods,showbands) #periods RSI周期 showbands是否显示高低线

该实例化过程中,QuantFig对象将DataFrame对象作为输入后使用qf.iplot()方法按照对象中数据来绘制图表。也因此可以通过对象的不同方法,添加各种辅助判断的金融元素。

本文为笔者学习《Python金融大数据分析》所得,若有不妥谬误之处,还望温和批评指正。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 对于python数据分析项目——链家上海二手房数据分析(一),我可以提供一些帮助。首先,你可以使用Python中的Pandas库来收集和处理链家上海二手房的数据。Pandas可以帮助你从网站上获取相关信息,并针对指定的数据集执行许多不同的操作,以便更好地分析和理解这些数据。此外,还可以使用Matplotlib库来可视化数据,以便更清楚地了解链家上海二手房的特征。 ### 回答2: 链家上海二手房数据分析是一个使用Python进行数据探索和分析的项目。通过对链家网站上的二手房数据进行爬虫操作,我们可以获取到大量的关于上海二手房的信息。 在这个项目中,我们首先需要搭建一个爬虫,用于从链家网站上获取到二手房的数据。我们可以利用Python中的网络请求库和解析库,如requests和BeautifulSoup,来发送网络请求并解析返回的网页内容,从而获取到我们需要的数据。 获取到数据后,我们可以进行数据清洗和预处理。这一步骤主要是针对数据中存在的缺失值、异常值等问题进行处理,以确保数据的准确性和一致性。我们可以使用Python中的pandas库来进行数据的清洗和预处理操作。 接下来,我们可以对数据进行探索性分析。通过使用Python中的数据可视化库,如matplotlib和seaborn,我们可以对数据的特征进行可视化展示,以便更好地理解数据的分布和关系。我们可以绘制直方图、散点图、箱线图等来探索二手房价格、面积、位置等特征与其他变量之间的关系。 最后,我们可以进行一些统计分析,如计算二手房价格的平均值、中位数等统计指标,以及进行一些基本的回归分析,如线性回归等。这些分析可以帮助我们揭示出二手房市场的一些趋势和规律,为我们做出更好的决策提供依据。 总之,链家上海二手房数据分析项目是一个利用Python进行数据爬取、清洗、探索和分析的项目,通过对这些步骤的操作,我们可以更好地理解上海二手房市场的情况,并从中获取到有价值的信息。 ### 回答3: 链家是中国最大的房地产经纪公司之一,在其网站上能够找到各个城市的二手房信息。本项目选取了链家上海的二手房数据进行分析。 首先,我们需要从链家网站上爬取二手房的相关数据,包括房屋的价格、面积、区域、朝向、装修情况等等。通过分析这些数据,我们能够得到一些有趣的结论。 比如,我们可以通过计算平均价格和面积,找出上海不同区域二手房的价格及面积分布情况。通过这些分布情况,我们可以了解到哪些区域的二手房更贵,哪些区域的二手房面积更大,帮助购房者做出更明智的决策。 此外,我们还可以通过数据分析,得到不同房屋朝向和装修情况对价格的影响。通过比较不同朝向和装修情况下的价格差异,我们可以了解到市场对于这些因素的偏好,从而也为购房者提供一些参考。 另外,我们还可以通过分析不同时间段内的二手房成交量,找出上海二手房市场的活跃时段。这对于购房者来说也是非常有用的,因为他们可以根据市场活跃程度来选择合适的时间进行购买。 最后,我们还可以通过数据分析,找出上海二手房市场的热门区域和热门楼盘。这些信息对于投资者来说尤为重要,因为他们可以根据市场趋势来选择合适的投资区域和楼盘。 通过对链家上海二手房数据的分析,我们可以得到很多有用的信息,帮助购房者和投资者做出更明智的决策。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值