- 实验目的
1. 股票评价
- 实验要求
对中证500股票进行评价。
- 实验过程
- 获取中证500的历史数据,把中证500的股票代码放在一个dataFrame()中。
import tushare as ts
import pandas as pd
data_code=pd.DataFrame()
code=ts.get_zz500s().code
data_code['code']=code
data_code.head()
- 获取2018年2月的盈利数据。
- 获取中证500的数据,并且按照股票代码把数据合并在同一个表格中。
profit=profit[['code','name','net_profit_ratio']]
data_profit=pd.merge(data_code,profit,on='code')
data_profit
- 获取股票代码为600000的第三季度月k线数据。
test=ts.get_hist_data('600000',start='2018-07-01',end='2018-09-30',ktype='M')
test.head()
- 计算股票的波动幅度。
test['p_change']=(test['high']-test['low'])/test['low']
test.head()
- 获取中证500各个股票的第三季度的股价波动幅度数据。
转置:
- 股票市场性=流动股本/总股本,获取股票流动性的数据。
- 计算股票的周转率并且与股票代码合并成一个表。
- 获取2018年2月的流动资产周转率数据,用来表示营运能力。
- 获取中证500的流动资产周转率的数据。
- 短期偿债能力。
- 财务结构
- 线性计算每支股票的得分,首先将先前获取得到的多个数据集合并为一个。
- 把非数值的数据替换为0.
- 计算得分。
- 描绘得分的折线图:
由折线图看出有一个股票的分数明显异常,为找出这个异常的股票,筛选出分数小于-80000的数据。
找到了代码为002670的股票,其net_profit_ratio的数值为-24622.57明显远远小于其他的任何一个股票。
- 分别筛选各个分数段的股票。
评分大于100:一共3个。
分数在[75,100]之间的:一共14个。
分数在[25,50]之间的:一共有273个。
分数小于25的:一共有13个。
从分数的分布来看比较满足分位数的分布。
把异常数据删除掉并且把剩余的数据放在一个新的dataframe中观察其他score的分布情况。
折线图:
- 准确分析:获取2018年10月中证500的月k线数据。
将分级后的数据与10月份result合并。
计算各个等级的准确率:
p= data1_r[data1_r['p_change']>0].count()/data1_r['p_change'].count()
大于100:
P=0/3=0,准确率为0
[75,100]:
P=3/14=21.42%,准确率为21.42。
[25,50]:
P=28/265=10.57%,准确率为10.57%。
[<25]:
P=3/7=42.86%,准确率为42.86%。
由此可以看出,分数为[<25]的股票准确率最高,大于100的准确率最低,为0,但准 确率都不高。
- 将股票得分与涨跌情况进行聚类分析,获取中证500的涨跌数据。
- 转置数据,并且把股票得分与涨跌情况进行合并。
- 对数据进行归一化处理,并且去掉重复的行。
- 聚类:
- 聚类后的结果:
- 聚类后的准确率:
p= Rr[(Rr.type==0) & (Rr.p_change>0)].count()/ Rr[(Rr.type==0)].count()
Type=0,p=0/19=0,准确率为0.
Type=1:p=69/287=24.04%
Type=2:p=0/1=0,准确率为0。
Type=3,p=0/120=0,准确率为0;
Type4:p=65/65=100%,准确率为100%。
聚类后type4准确率是最高的,达到100%,其他的准确率都很低,低达0%。
- 总结
本次实验学会了如何处理NaN值数据,并且从可视化的散点图或折线图中发现异常的数据点,从而排查出异常的数据点。还学习了如何把两个数据聚合在一起,完成聚类的操作,以及如何通过历史的数据对最近的数据进行预测,算出准确率。