利用实验2完成的情绪标注文本,逐日构建情绪指数;分析该指数和证券市场指数之间的统计相关性;尝试进行市场预测。
使用python, 数据库及统计软件:
(1)设定统计期为:2014年10月至2015年10月;
(2)逐日构建市场情绪指数;
(3)使用统计软件,分析情绪指数和沪深300(SH:000300)指数之间的相关性;
(4)探讨情绪指数和沪深300之间的时间相关性(指标之间是否存在提前或者滞后)。
import tushare as ts import matplotlib.pyplot as plt import pandas as pd import seaborn as sns import numpy as np from sklearn import preprocessing2. 使用ts.get_k_data载入股指数据
sh = ts.get_k_data('sh', start="2014-01-01",end="2015-10-21", autype='qfq') # 获取上证数据
sh["p_change"] = (sh["close"] / sh["close"].shift(1) - 1) * 100 # 利用今日收盘价和前日收盘价计算股价波动,新增一列
sh
把获取的数据和实验二中的score整合到一起,此处我犯了一个错误,直接把两个表使用merge()方法合并到一起,后来数据不对才发现有问题:因为股市周末不开盘,所以股票指数日期并不是连续的,但情绪指数数据却是每天都有,最后在excel表格中使用vlookup()函数手动将两表正确整合到一起。 VLOOKUP()函数可以将多个表按照通用字段合并为一个表。
data = pd.read_excel('score.xlsx')
data.head()
4. 相关系数分析
# 输出相关系数矩阵 corrmatrix = data.corr() corrmatrix
# 相关性系数分析 画出皮尔森热力图 f, ax = plt.subplots(figsize=(15,12)) sns.heatmap(corrmatrix, vmax=0.8, square=True,annot=True,cmap='PuBu') plt.show()
# 折线图
x_axis_data = data.loc[:,'Time']
y_axis_data1 = data.loc[:,'score']
y_axis_data2 = data.loc[:,'p_change']
#画图
plt.plot(x_axis_data, y_axis_data1, linewidth=1, label='score')
plt.plot(x_axis_data, y_axis_data2, alpha=0.5, linewidth=1, label='p_change')
plt.legend() #显示上面的label
plt.xlabel('time')
plt.ylabel('number')#accuracy
#plt.ylim(-1,1)#仅设置y轴坐标范围
plt.show()
# 截取部分data画图分析
data2 = pd.read_excel('score.xlsx', nrows = 50)
x_axis_data = data2.loc[:,'Time']
y_axis_data1 = data2.loc[:,'score']
y_axis_data2 = data2.loc[:,'p_change']
#画图
plt.plot(x_axis_data, y_axis_data1, linewidth=1, label='score')
plt.plot(x_axis_data, y_axis_data2, linewidth=1, label='p_change')
plt.legend() #显示上面的label
plt.xlabel('time')
plt.ylabel('number')#accuracy
#plt.ylim(-1,1)#仅设置y轴坐标范围
plt.show()
5. 结论
通过以上分析,情绪指数和沪深300(SH:000300)指数之间的相关性在数据上不显著,但从图像上看,还是有一定联系的。如上图有两处股票上涨时,情绪指数也有少许提升,并且略有滞后。但情绪指数和股票指数之间的关系也并非简单的正相关,比如股票走势达到一个低点时,情绪指数反而上涨,可能此时股票反而被看好入手;情绪指数可能也与股民对走势的预估、股票大盘状况有关系,这是由股市的复杂性所导致的。
另外,情绪指数与股票指数相关性不明显也可能是由于情绪指数模型的构建不够好。我是使用逐日计算每日所有词语的极性得分,正极性词加1,负极性词则减1,然后每日累计,并使用总新闻条数进行调整这样的算法进行计算。参考其他资料,有的算法将情感标注为找出正面词、否定词和程度副词三种,判断每个情感词之前是否有否定词及程度副词,将它之前的否定词和程度副词划分为一个组,如果有否定词将情感词的情感权值乘以-1,如果有程度副词就乘以程度副词的程度值,这样可能会更为准确。



