我們平時(shí)做股票投資,經(jīng)常會(huì)提到市盈率(PE)炎功、市凈率(PB)枚冗、凈資產(chǎn)收益率(ROE)等數(shù)據(jù),并有各種分析技術(shù)說明如何根據(jù) PE蛇损、PB赁温、ROE 等數(shù)據(jù)對(duì)股票價(jià)值進(jìn)行評(píng)估坛怪。那 PE、PB股囊、ROE 數(shù)據(jù)對(duì) A股市場到底有多少參考價(jià)值呢袜匿?這里我們用 Python 簡單的對(duì)其做一分析,供大家參考稚疹,詳細(xì)過程如下居灯。
分析 PE、PB 對(duì)股價(jià)的影響
我們先提取個(gè)股 PE内狗、PB數(shù)據(jù)怪嫌,并用三維點(diǎn)陣圖顯示,評(píng)估其規(guī)律柳沙,直接上代碼如下:
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
# 獲取股票當(dāng)天數(shù)據(jù)偎行,包括當(dāng)前股價(jià)
df_todays = ts.get_today_all()
df_todays['code'] = df_todays.index
# 整合股價(jià)與 PE川背、PB 數(shù)據(jù)
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 數(shù)據(jù)
Y = df['pb_x'].tolist() # Y 軸為 PB 數(shù)據(jù)
Z = df['trade'].tolist() # Z 軸為 股價(jià)數(shù)據(jù)
#給三個(gè)坐標(biāo)軸注明
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()
其統(tǒng)計(jì)結(jié)果如下圖所示:
觀察以上散點(diǎn)圖蛤袒,除了個(gè)別異常數(shù)據(jù),主要數(shù)據(jù)集中在一起膨更,不方便直觀觀察妙真,下面我們根據(jù)數(shù)據(jù)情況進(jìn)行異常值剔除。
剔除 PE荚守、PB 異常值后的分析
根據(jù)上圖分析珍德,PE 數(shù)據(jù)分布范圍比較大,但主要集中在 -500 至 1000之間矗漾,PB數(shù)據(jù)比較集中锈候,但有個(gè)別異常值,股價(jià)(trade)數(shù)據(jù)主要集中在 0 至 100 之間敞贡,有一個(gè)異常值500多泵琳,應(yīng)該是 貴州茅臺(tái)(sh600519)吧。下面我們剔除異常值誊役,只選擇 PE 在 -100 到 200之間获列、股價(jià)在 0 至 100之間,PB 在0至 10 之間的數(shù)據(jù)蛔垢,
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
# 獲取股票當(dāng)天數(shù)據(jù)鹏漆,包括當(dāng)前股價(jià)
df_todays = ts.get_today_all()
df_todays['code'] = df_todays.index
# 整合股價(jià)與 PE巩梢、PB 數(shù)據(jù)
df = pd.merge(df_todays, df_base, how='left', on=['code'])
df.dropna()
# 剔除異常值
result = df[(-100<df['per'])&(df['per']<200)
&(0<df['pb_x'])&(df['pb_x']<10)
# &(roe_describe['25%']<df['roe'])&(df['roe']<roe_describe['75%'])
&(0<df['trade'])&(df['trade']<100)]
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
X = result['per'].tolist() # X 軸為 PE 數(shù)據(jù)
Y = result['pb_x'].tolist() # Y 軸為 PB 數(shù)據(jù)
Z = result['trade'].tolist() # Z 軸為 股價(jià)數(shù)據(jù)
ax.set_xlabel('PE', color='r')
# ax.set_ylabel('roe', color='g')
ax.set_ylabel('PB', color='g')
ax.set_zlabel('trade', color='b')#給三個(gè)坐標(biāo)軸注明
ax.scatter(X, Y, Z)
plt.show()
統(tǒng)計(jì)結(jié)果的 3D 散點(diǎn)圖如下圖所示创泄,縱坐標(biāo)為股價(jià):
3D 散點(diǎn)圖還是不能非常清楚的看到 PE验烧、PB 與股價(jià)的關(guān)系,我們稍稍調(diào)整一下角度又跛,先查看 PE 與股價(jià)的關(guān)系碍拆,如下圖所示:
再調(diào)整角度,查看 PB 值與 股價(jià)的關(guān)系慨蓝,我們加了兩條輔助線感混,以說明其相關(guān)性,如下圖所示:
直觀的已經(jīng)可以看到礼烈,PE弧满、PB 與股價(jià)有一定的相關(guān)性,至于具體有什么樣的關(guān)系此熬,以后我們會(huì)做進(jìn)一步的擬合分析庭呜。
分析 PB、ROE 對(duì)股價(jià)的影響
通過以上的分析犀忱,我們看到 PB值 與股價(jià)的線性關(guān)系相對(duì)明顯募谎,下面我們對(duì) PB、ROE 對(duì)股價(jià)的影響做進(jìn)一步的分析阴汇,至于 PE 與 ROE 的分析数冬,各位可以參考代碼自行修改。
PB 搀庶、ROE 與股價(jià)的分析 拐纱,同樣剔除異常值,數(shù)據(jù)選擇范圍 0<PB<8哥倔, -20<ROE<30秸架,0<股價(jià)<70 ,代碼如下:
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
# 獲取股票當(dāng)天數(shù)據(jù)东抹,包括當(dāng)前股價(jià)
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
# 整合股價(jià)與 PE、PB 數(shù)據(jù)
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<df['pb_x'])&(df['pb_x']<8)
&(-20<df['roe'])&(df['roe']<30)
&(0<df['trade'])&(df['trade']<70)]
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
X = result['pb_x'].tolist() # X 軸為 PB 數(shù)據(jù)
Y = result['roe'].tolist()
Z = result['trade'].tolist() # Z 軸為 股價(jià)數(shù)據(jù)
ax.set_xlabel('PB', color='g')
ax.set_ylabel('roe', color='g')
ax.set_zlabel('trade', color='b')#給三個(gè)坐標(biāo)軸注明
ax.scatter(X, Y, Z)
plt.show()
PB蜡秽、ROE與股價(jià)關(guān)系 3D散點(diǎn)圖如下所示:
同樣,變換角度來觀察 ROE 與股價(jià)的關(guān)系芽突,如下圖所示:
后續(xù)工作
以上试浙,我們 對(duì) PE、PB寞蚌、ROE 與股價(jià)的關(guān)系田巴,做了直觀 的圖形分析钠糊,發(fā)現(xiàn)效果并不是非常明顯。今后壹哺,我們會(huì)進(jìn)一步深入分析抄伍,如進(jìn)一步細(xì)分?jǐn)?shù)據(jù)范圍、引入更多參數(shù)管宵、進(jìn)行主成分分析等截珍,并做相應(yīng)函數(shù)擬合,以期挖掘出更多有價(jià)值的結(jié)論箩朴。