量化投资——利用Python 分析市盈率(PE)、市净率(PB)、净资产收益率(ROE)对股价的影响

我们平时做股票投资,经常会提到市盈率(PE)、市净率(PB)、净资产收益率(ROE)等数据,并有各种分析技术说明如何根据 PE、PB、ROE 等数据对股票价值进行评估。那 PE、PB、ROE 数据对 A股市场到底有多少参考价值呢?这里我们用 Python 简单的对其做一分析,供大家参考,详细过程如下。

分析 PE、PB 对股价的影响

我们先提取个股 PE、PB数据,并用三维点阵图显示,评估其规律,直接上代码如下:

import matplotlib.pyplot as plt

import numpy as np
import tushare as ts
import pandas as pd

from mpl_toolkits.mplot3d import Axes3D  #绘制三D图形

# 获取股票基本信息,包括 PE、PB 值
df_base = ts.get_stock_basics()
df_base['code'] = df_base.index

# 获取股票当天数据,包括当前股价
df_todays = ts.get_today_all()
df_todays['code'] = df_todays.index

# 整合股价与 PE、PB 数据
df = pd.merge(df_todays, df_base, how='left', on=['code'])

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

X = df['per'].tolist()  # X 轴为 PE 数据 
Y = df['pb_x'].tolist()  # Y 轴为 PB 数据 
Z = df['trade'].tolist()  # Z 轴为 股价数据 

#给三个坐标轴注明
ax.set_xlabel('PE', color='r')
ax.set_ylabel('PB', color='g')
ax.set_zlabel('trade', color='b')

ax.scatter(X, Y, Z)

plt.show()

其统计结果如下图所示:


量化投资——利用Python 分析市盈率(PE)、市净率(PB)、净资产收益率(ROE)对股价的影响_第1张图片
PE、PB 与股价散点图

观察以上散点图,除了个别异常数据,主要数据集中在一起,不方便直观观察,下面我们根据数据情况进行异常值剔除。

剔除 PE、PB 异常值后的分析

根据上图分析,PE 数据分布范围比较大,但主要集中在 -500 至 1000之间,PB数据比较集中,但有个别异常值,股价(trade)数据主要集中在 0 至 100 之间,有一个异常值500多,应该是 贵州茅台(sh600519)吧。下面我们剔除异常值,只选择 PE 在 -100 到 200之间、股价在 0 至 100之间,PB 在0至 10 之间的数据,

import matplotlib.pyplot as plt

import numpy as np
import tushare as ts
import pandas as pd

from mpl_toolkits.mplot3d import Axes3D  #绘制三D图形

# 获取股票基本信息,包括 PE、PB 值
df_base = ts.get_stock_basics()
df_base['code'] = df_base.index

# 获取股票当天数据,包括当前股价
df_todays = ts.get_today_all()
df_todays['code'] = df_todays.index

# 整合股价与 PE、PB 数据
df = pd.merge(df_todays, df_base, how='left', on=['code'])

df.dropna()

# 剔除异常值
result = df[(-100

统计结果的 3D 散点图如下图所示,纵坐标为股价:


量化投资——利用Python 分析市盈率(PE)、市净率(PB)、净资产收益率(ROE)对股价的影响_第2张图片
剔除异常值后,PE、PB 与股价的关系

3D 散点图还是不能非常清楚的看到 PE、PB 与股价的关系,我们稍稍调整一下角度,先查看 PE 与股价的关系,如下图所示:


量化投资——利用Python 分析市盈率(PE)、市净率(PB)、净资产收益率(ROE)对股价的影响_第3张图片
PE值与股价关系

再调整角度,查看 PB 值与 股价的关系,我们加了两条辅助线,以说明其相关性,如下图所示:


量化投资——利用Python 分析市盈率(PE)、市净率(PB)、净资产收益率(ROE)对股价的影响_第4张图片
PB值 与股价的关系

直观的已经可以看到,PE、PB 与股价有一定的相关性,至于具体有什么样的关系,以后我们会做进一步的拟合分析。

分析 PB、ROE 对股价的影响

通过以上的分析,我们看到 PB值 与股价的线性关系相对明显,下面我们对 PB、ROE 对股价的影响做进一步的分析,至于 PE 与 ROE 的分析,各位可以参考代码自行修改。
PB 、ROE 与股价的分析 ,同样剔除异常值,数据选择范围 0

import matplotlib.pyplot as plt

import numpy as np
import tushare as ts
import pandas as pd

from mpl_toolkits.mplot3d import Axes3D  #绘制三D图形

# 获取股票基本信息,包括 PE、PB 值
df_base = ts.get_stock_basics()
df_base['code'] = df_base.index

# 获取股票当天数据,包括当前股价
df_todays = ts.get_today_all()
df_todays['code'] = df_todays.index

df_roe = ts.get_report_data(2018,3)
df_roe['code'] = df_roe.index

# 整合股价与 PE、PB 数据
df = pd.merge(df_todays, df_base, how='left', on=['code'])
df = pd.merge(df, df_roe, how='left', on=['code'])

df.dropna()

result = df[(0

PB、ROE与股价关系 3D散点图如下所示:


量化投资——利用Python 分析市盈率(PE)、市净率(PB)、净资产收益率(ROE)对股价的影响_第5张图片
PB、ROE与股价关系

同样,变换角度来观察 ROE 与股价的关系,如下图所示:


量化投资——利用Python 分析市盈率(PE)、市净率(PB)、净资产收益率(ROE)对股价的影响_第6张图片
ROE 与股价关系

后续工作

以上,我们 对 PE、PB、ROE 与股价的关系,做了直观 的图形分析,发现效果并不是非常明显。今后,我们会进一步深入分析,如进一步细分数据范围、引入更多参数、进行主成分分析等,并做相应函数拟合,以期挖掘出更多有价值的结论。

你可能感兴趣的:(量化投资——利用Python 分析市盈率(PE)、市净率(PB)、净资产收益率(ROE)对股价的影响)