Python金融数据分析与挖掘(微课版) 课件 第8章 上市公司综合评价_第1页
Python金融数据分析与挖掘(微课版) 课件 第8章 上市公司综合评价_第2页
Python金融数据分析与挖掘(微课版) 课件 第8章 上市公司综合评价_第3页
Python金融数据分析与挖掘(微课版) 课件 第8章 上市公司综合评价_第4页
Python金融数据分析与挖掘(微课版) 课件 第8章 上市公司综合评价_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章

上市公司综合评价指标选择、数据处理主成分分析与综合排名投资组合收益率计算与量化投资策略设计基于总体规模与投资效率指标的综合评价(指标选择)第8章

字段名称字段中文名称字段说明Stkcd股票代码Accper会计年度2013-12-31、2014-12-31、2015-12-31、2016-12-31、2017-12-31B001101000营业收入企业经营过程中确认的营业收入B001300000营业利润与经营业务有关的利润B001000000利润总额公司实现的利润总额B002000000净利润公司实现的净利润A001000000资产总计资产各项目之总计A001212000固定资产净额固定资产原价除去累计折旧和固定资产减值准备之后的净额F050501B净资产收益率净利润/股东权益余额F091001A每股净资产所有者权益合计期末值/实收资本期末值F091301A每股资本公积资本公积期末值/实收资本期末值F090101B每股收益净利润本期值/实收资本期末值总体规模指标包括上市公司的营业收入、营业利润、利润总额、净利润、资产总计、固定资产净额,投资效率指标包括净资产收益率、每股净资产、每股资本公积、每股收益,共10个指标包括2013年—2017年的数据,综合评价按年进行,本案例以2016年为例。基于总体规模与投资效率指标的综合评价(数据处理)第8章

(1)读取2016年的数据,其中第0列为标识列(股票代码)

importpandasaspd

data=pd.read_excel('data.xlsx')

data2=data.iloc[data['Accper'].values=='2016-12-31',[0,2,3,4,5,6,7,8,9,10,11]](2)筛选指标值大于0的数据以及去掉nan值。

data2=data2[data2>0]

data2=data2.dropna()(3)数据标准化,注意标准化需要去掉第0列,这里数据标准化方法采用均值-方差法。

fromsklearn.preprocessingimportStandardScaler

X=data2.iloc[:,1:]

scaler=StandardScaler()

scaler.fit(X)

X=scaler.transform(X)基于总体规模与投资效率指标的综合评价(主成分分析)第8章

对标准化之后的指标数据X做主成分分析,提取其主成分,要求累计贡献率在95%以上。fromsklearn.decompositionimportPCApca=PCA(n_components=0.95)#累计贡献率为95%以上Y=pca.fit_transform(X)

#满足累计贡献率为95%的主成分数据gxl=pca.explained_variance_ratio_

#贡献率通过主成分分析,可以获得其主成分,接下来就可以根据获得的主成分计算每个上市公司的综合得分了。根据综合得分,可以获得上市公司的综合排名。基于总体规模与投资效率指标的综合评价(综合排名)第8章

1.计算综合得分#综合得分等于提取的各个主成分与其贡献率的加权求和。

importnumpyasnp

F=np.zeros((len(Y)))#预定义综合得分数组F

foriinrange(len(gxl)):

f=Y[:,i]*gxl[i]

#第i个主成分与第i个主成分贡献率的乘积

F=F+f

#数组累积求和2.整理排名结果#第1种方式如下:fs1=pd.Series(F,index=data2['Stkcd'].values)#构建序列,值为综合得分F,index为股票代码Fscore1=fs1.sort_values(ascending=False)#结果排名,降序第2种方式如下:co=pd.read_excel('TRD_Co.xlsx')Co=pd.Series(co['Stknme'].values,index=co['Stkcd'].values)Co1=Co[data2['Stkcd'].values]#主成分分析指标数据对应的上市公司名称fs2=pd.Series(F,index=Co1.values)Fscore2=fs2.sort_values(ascending=False)基于总体规模与投资效率指标的综合评价(综合排名)第8章

得到两种方式的排名结果基于总体规模与投资效率指标的综合评价(投资组合收益率计算)第8章

以排名前30的上市公司股票代码构建投资组合作为计算举例,持有期为2017年5月1日至2017年12月31日,计算其收益率单只股票的收益率计算方法为:以该股票持有期内首个交易日考虑现金红利再投资的收盘价可比价p1买入,持有期内最后交易日的考虑现金红利再投资的收盘价可比价p2卖出,收益率计算公式为(p2-p1)/p1。投资组合的收益率为该组合内所有股票收益率之和StkcdTrddtClsprcAdjprcwdAdjprcnd6032272017-03-2910.9822.1616621.9599916032282017-03-2948.0548.0548.056032382017-03-2943.0243.0243.026032392017-03-2998.6698.6698.666032582017-03-2953.7753.7753.776032662017-03-2944.3744.3744.37…………………………2017年交易数据,字段依次表示股票代码、交易日期、收盘价、考虑现金红利再投资的收盘价可比价、不考虑现金红利再投资的收盘价可比价基于总体规模与投资效率指标的综合评价(投资组合收益率计算)第8章

投资组合收益率计算示例代码:trd=pd.read_excel('trd_2017.xlsx')r_list=[]foriinrange(30):code=Fscore1.index[i]dt=trd.iloc[trd.iloc[:,0].values==code,:]I1=dt['Trddt'].values>='2017-05-01'I2=dt['Trddt'].values<='2017-12-31'dtt=dt.iloc[I1&I2,:].sort_values('Trddt')iflen(dtt)>1:

#首个和最后一个交易日的考虑现金红利再投资的收盘价可比价p1=dtt.iloc[0,3]p2=dtt.iloc[len(dtt)-1,3]r_list.append((p2-p1)/p1)r_total=sum(r_list)该组合只有28只股票代码,不足30只,这是因为存在2只股票在计算持有期内没有交易。总的收益率为:r_total=4.54296132786基于总体规模与投资效率指标的综合评价(量化投资策略设计)第8章

将数据处理、主成分分析与综合排名过程,定义为一个函数Fr;将收益率计算,也定义为一个函数Re。defFr(data,year):

#输入:

#data--财务指标数据

#year--排名年度

#输出:

#Fscore1--排名结果(股票代码形式)

#Fscore2--排名结果(股票名称形式)return(Fscore1,Fscore2)defRe(Fscore1,s_trd1,s_trd2,num):

#输入:

#Fscore1--排名结果(股票代码形式)

#s_trd1--持有期开始日期

#s_trd1--持有期结束日期

#num--排名数

#输出:

#r_list--股票代码收益率列表

#r_total--总收益率

return(r_list,r_total)importpandasaspdimportfunimportfun2data=pd.read_excel('data.xlsx')r1=fun.Fr(data,2016)Fscore1=r1[0]Fscore2=r1[1]r2=fun2.Re(Fscore1,'2017-05-01','2017-12-31',30)r_list=r2[0]r_total=r2[1]其结果Fscore1、Fscore2、r_list、r_total同前面所述基于总体规模与投资效率指标的综合评价(量化投资策略设计)第8章

量化投资策略:以2013年~2016年的财务指标数据为基础计算股票的综合排名,并取排名前20和前40的股票构建投资组合,以下一年的5月1日—6月30日、5月1日—9月30日、5月1日—12月31日作为持有期,分别计算其投资组合的收益率,并与同期的沪深300指数收益率进行对比。持有期内指数收益率=(期末收盘指数−期初收盘指数)/期初收盘指数。importpandasaspdimportfun#导入自定义的函数文件importfun2#导入自定义的函数文件data=pd.read_excel('data.xlsx')ind300=pd.read_excel('index300.xlsx')list1=[]#存放年度list2=[]#存放持有期list3=[]#存放投资组合收益率list4=[]#存放沪深300指数收益率foryearin[2013,2014,2015,2016]:

fortimein['06-30','09-30','12-31']:

r1=fun.Fr(data,year)

r2=fun2.Re(r1[0],str(year+1)+'-05-01',

str(year+1)+'-'+time,40)

r_total=r2[1]

list1.append(year)

list2.append(str(year+1)+'-05-01'+'--'+str(year+1)+'-'+time)

list3.append(r_total)

td1=str(year+1)+'-05-01'

td2=str(year+1)+'-'+time

I1=ind300.iloc[:,1].values>=td1

I2=ind300.iloc[:,1].values<=td2

dt=ind300.iloc[I1&I2,[1,2]].sort_values('Idxtrd01')

p=dt.iloc[:,1].values

list4.append((p[len(p)-1]-p[0])/p[0])#将结果转化为数据框,并导出到ExcelD={'year':list1,'time':list2,'r_total':list3,'index':list4}D=pd.DataFrame(D)D.to_excel('D.xlsx')基于总体规模与投资效率指标的综合评价(量化投资策略设计)第8章

ID会计年度/年持有期总收益率沪深300收益率020132014-05-01—2014-06-300.5103040.004011120132014-05-01—2014-09-304.103380.136575220132014-05-01—2014-12-3119.109720.638655320142015-05-01—2015-06-30−1.76119−0.06574420142015-05-01—2015-09-30−5.61932−0.33101520142015-05-01—2015-12-31−4.04831−0.22072620152016-05-01—2016-06-30−0.13978−0.01855720152016-05-01—2016-09-300.8015320.01237820152016-05-01—2016-12-313.2190060.030042920162017-05-01—2017-06-301.4662510.0701051020162017-05-01—2017-09-301.6283360.1196291120162017-05-01—2017-12-313.2065390.176351年度/年股票名称2013中国石油、中国石化、中国神华、上汽集团、中国建筑、贵州茅台、中国联通、深中华A、中国铁建、万科A、中国中铁、中国交建、华能国际、美的集团、皇庭国际、保利地产、格力电器、国电电力、大唐发电、招商地产2014中国石油、中国石化、中国神华、中国建筑、上汽集团、贵州茅台、中国联通、长航凤凰、中国铁建、万科A、中国中铁、中国交建、华能国际、格力电器、保利地产、海螺水泥、美的集团、大秦铁路、长江电力、视觉中国2015中国石油、中国石化、中国建筑、上汽集团、贵州茅台、中国神华、万科A、恺英网络、华能国际、中国交建、中国铁建、保利地产、中国中铁、分众传媒、中国联通、美的集团、中国中车、格力电器、华电国际、大秦铁路2016中国石化、中国石油、中国建筑、上汽集团、中国神华、贵州茅台、万科A、中国交建、长江电力、中国铁建、分众传媒、中国中铁、保利地产、美的集团、格力电器、华能国际、中油资本、恺英网络、绿地控股、吉比特排名前20的股票投资组合第8章

上市公司综合评价指标选择、数据处理主成分分析与综合排名投资组合收益率计算与量化投资策略设计基于成长与价值指标的综合评价(指标选择)第8章

选取的价值指标包括市盈率、市现率、市净率、市盈率增长率,选取的成长指标包括净利润增长率、营业收入增长率、营业利润率、净资产收益率,共8个指标包括2013年—2017年的数据,综合评价按年进行,本案例以2014年为例。字段名称字段中文名称字段说明Stkcd股票代码Accper会计年度2013-12-31、2014-12-31、2015-12-31、2016-12-31、2017-12-31F100101B市盈率今收盘价当期值/(净利润上年报值/实收资本期末值)F100301B市现率今收盘价当期值/(经营活动产生的现金流量净额上年报值/实收资本期末值)F100401A市净率今收盘价当期值/(所有者权益合计期末值/实收资本期末值)F081001B净利润增长率(净利润本年期单季度金额−净利润上一个单季度金额)/净利润上一个单季度金额F081601B营业收入增长率(营业收入本年期单季度金额−营业收入上一个单季度金额)/营业收入上一个单季度金额F051501B营业净利率净利润/营业收入F050501B净资产收益率净利润/股东权益余额PEG市盈率增长率(当前市盈率−上期市盈率)/上期市盈率基于成长与价值指标的综合评价(数据处理)第8章

1.读取2014年的财务指标数据importpandasaspddata=pd.read_excel('data1.xlsx')data2=data.iloc[data['Accper'].values=='2014-12-31',[0,2,3,4,5,6,7,8,9]]2.对最后一个指标PEG进行处理da=da[(da[:,8]<4)&(da[:,8]>-4),:]#消除异常值da[:,8]=1-(da[:,8]-min(da[:,8]))/(max(da[:,8])-min(da[:,8]))#反极差化处理3.对剩下的7个指标均要求大于0,且将8倍均值作为异常值进行剔除处理foriinnp.arange(1,8):da=da[da[:,i]>0,:]

#要求指标值大于0da=da[da[:,i]<8*np.mean(da[:,i]),:]#剔除异常值(8倍均值)基于成长与价值指标的综合评价(数据处理)第8章

4.要求净资产收益率大于0.06

da=da[da[:,6]>=0.06,:]5.数据标准化处理fromsklearn.preprocessingimportMinMaxScalerX=da[:,1:]scaler=MinMaxScaler()scaler.fit(X)X=scaler.transform(X)6.对市盈率、市现率、市净率指标也做反极差化处理#主要目的是实现指标度量的统一,即值越大越好X[:,2]=1-X[:,2]X[:,3]=1-X[:,3]X[:,4]=1-X[:,4]基于成长与价值指标的综合评价(主成分分析)第8章

对标准化之后的指标数据X做主成分分析,提取其主成分,要求累计贡献率在95%以上。fromsklearn.decompositionimportPCApca=PCA(n_components=0.95)#累计贡献率为95%Y=pca.fit_transform(X)

#满足累计贡献率为95%的主成分数据gxl=pca.explained_variance_ratio_

#贡献率基于成长与价值指标的综合评价(综合排名)第8章

1.计算综合得分

importnumpyasnp

F=np.zeros((len(Y)))

foriinrange(len(gxl)):

f=Y[:,i]*gxl[i]

F=F+f2.整理排名结果#第1种方式如下:Fs1=pd.Series(F,index=da[:,0])Fscore1=Fs1.sort_values(ascending=False)#False为降序,True为升序第2种方式如下:co=pd.read_excel('TRD_Co.xlsx')Co=pd.Series(co['Stknme'].values,index=co['Stkcd'].values)Co1=Co[da[:,0]]Fs2=pd.Series(F,index=Co1.values)Fscore2=Fs2.sort_values(ascending=False)#False为降序,True为升序基于成长与价值指标的综合评价(综合排名)第8章

得到两种方式的排名结果基于成长与价值指标的综合评价(投资组合收益率计算)第8章

以排名前20的上市公司股票代码构建投资组合作为计算举例,持有期为2015年5月1日至2015年12月31日,计算其收益率单只股票的收益率计算方法为:以该股票持有期内首个交易日考虑现金红利再投资的收盘价可比价p1买入,持有期内最后交易日的考虑现金红利再投资的收盘价可比价p2卖出,收益率计算公式为(p2-p1)/p1。投资组合的收益率为该组合内所有股票收益率之和2015年交易数据,字段依次表示股票代码、交易日期、收盘价、考虑现金红利再投资的收盘价可比价、不考虑现金红利再投资的收盘价可比价StkcdTrddtClsprcAdjprcwdAdjprcnd6005062015-01-1211.3415.0401914.968796005072015-01-125.1947.96334734.611936005082015-01-1211.4535.22748826.792836005092015-01-129.5856.02117843.483156005102015-01-127.4838.94253229.171786005112015-01-1233.9177.325211158.6509…………………………基于成长与价值指标的综合评价(投资组合收益率计算)第8章

投资组合收益率计算示例代码:trd=pd.read_excel('trd_2015.xlsx')r_list=[]foriinrange(20):code=Fscore1.index[i]dt=trd.iloc[trd.iloc[:,0].values==code,:]I1=dt['Trddt'].values>='2015-05-01'I2=dt['Trddt'].values<='2015-12-31'dtt=dt.iloc[I1&I2,:].sort_values('Trddt')iflen(dtt)>1:p1=dtt.iloc[0,3]p2=dtt.iloc[len(dtt)-1,3]r_list.append((p2-p1)/p1)r_total=sum(r_list)总的收益率为:r_total=0.0563208822523。基于成长与价值指标的综合评价(量化投资策略设计)第8章

将数据处理、主成分分析与综合排名过程,定义为一个函数Fr2;收益率计算,同基于总体规模与投资效率指标的综合评价,也为函数Re。defFr2(data,year):#输入:

#data--财务指标数据

#year--排名年度

#输出:

#Fscore1--排名结果(股票代码形式)

#Fscore2--排名结果(股票名称形式)return(Fscore1,Fscore2)其结果Fscore1、Fscore2、r_list、r_total同前面所述importpandasaspdimportffunimportfun2data=pd.read_excel('data1.xlsx')r1=ffun.Fr2(data,2014)Fscore1=r1[0]Fscore2=r1[1]r2=fun2.Re(Fscore1,'2015-05-01','2015-12-31',20)r_list=r2[0]r_total=r2[1]基于成长与价值指标的综合评价(量化投资策略设计)第8章

量化投资策略:以2013年—2016年的财务指标数据为基础计算其综合排名,并取排名前20和前40的股票构建投资组合,以下一年5月1日~6月30日、5月1日—9月30日、5月1日—12月31日作为持有期,分别计算其投资组合的总收益率,并与同期的沪深300指数收益率进行对比。持有期内指数收益率=(期末收盘指数−期初收盘指数)/期初收盘指数。importpandasaspdimportffun#导入自定义的函数文件importfun2#导入自定义的函数文件data1=pd.read_excel('data1.xlsx')ind300=pd.read_excel('index300.xlsx')list1=[]#存放年度list2=[]#存放持有期list3=[]#存放投资组合收益率list4=[]#存放沪深300指数收益率foryearin[2013,2014,2015,2016]:

fortimein['06-30','09-30','12-31']:

r1=ffun.Fr2(data,year)

r2=fun2.Re(r1[0],str(year+1)+'-05-01',

str(year+1)+'-'+time,20)

r_total=r2[1]

list1.append(year)

list2.append(str(year+1)+'-05-01'+'--'+str(year+1)+'-'+time)

list3.append(r_total)

td1=str(year+1)+'-05-01'

td2=str(year+1)+'-'+time

I1=ind300.iloc[:,1].values>=td1

I2=ind300.iloc[:,1].values<=td2

dt=ind300.iloc[I1&I2,[1,2]].sort_values('Idxtrd01')

p=dt.iloc[:,1].values

list4.app

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论