小言_互联网的博客

股评师分析报告文本情感分析预测股价

246人阅读  评论(0)

github有一个Apple股价预测项目,https://github.com/Twabeeric/AAPLTextMining 

股评师分析报告是否会对股价产生影响,为此本文使用文本情感分析对股评师报告对文本数据进行了度量。

项目数据包括:

  • Apple 2017-2018股价数据

  • ThomsonOne网站Sherri Scribner(德意志银行股评师)对Apple公司周度研究报告(2017-2018),有65个docx文件

导入数据

我们需要按照日期,将报告与股价数据按照日期合并到一起, 我们先导入分析师报告,一共有65个docx文件


   
  1. from io import StringIO
  2. import pandas as pd
  3. import datetime
  4. import re
  5. import docx
  6. import os
  7. def read_from_docx(file_path):
  8. "" "
  9. 读取docx文件,并返回其中的文本内容
  10. :param file_path: docx文件路径
  11. :return: docx中的文本内容
  12. " ""
  13. texts = ''
  14. doc = docx.Document(file_path)
  15. for para in doc.paragraphs:
  16. texts += para.text
  17. return texts
  18. flist = [f for f in os.listdir('data/reports ') if 'docx ' in f]
  19. Descriptions = [read_from_docx('data/reports/ '+f) for f in flist]
  20. Dates = [f[:8] for f in flist]
  21. data1 = pd.DataFrame({'Date ': Dates,
  22. 'Descriptions ': Descriptions})
  23. data1.head()

将日期Date整理为datetime类型


   
  1. data1[ 'Date'] = pd.to_datetime(data1[ 'Date'])
  2. data1.sort_values( 'Date', inplace=True)
  3. data1.head()

导入Apple公司股价数据


   
  1. data2= pd.read_csv( 'data/AAPL.csv')
  2. data2[ 'Date'] = pd.to_datetime(data2[ 'Date'])
  3. data2.head()

将股价和分析师报告按照Date合并


   
  1. df = pd.merge(data1, data2)
  2. df.head()

文本情感计算

pysentiment库对金融文本数据进行情感计算。查了下该库的官方文档,发现该库提供了两大情感分析

  • Harvard IV-4 英文通用情感分析,喜怒哀乐,主要是形容词情感词典

  • Loughran&MCdonald 英文金融情感分析,金融领域特有的情感词典

该库的教程可见于 http://bit.ly/2LECfw5

使用pandas的apply批处理方法,可以批量对对某一列施行某种算法(计算函数)


   
  1. from pysentiment import lm,hiv4
  2. lm = lm.LM()
  3. hiv4 = hiv4.HIV4()
  4. def hiv4_positive(text):
  5. words = hiv4.tokenize(text)
  6. score = hiv4.get_score(words)
  7. return score[ 'Positive']
  8. def hiv4_negative(text):
  9. words = hiv4.tokenize(text)
  10. score = hiv4.get_score(words)
  11. return score[ 'Negative']
  12. def hiv4_polarity(text):
  13. words = hiv4.tokenize(text)
  14. score = hiv4.get_score(words)
  15. return score[ 'Polarity']
  16. def hiv4_subjectivity(text):
  17. words = hiv4.tokenize(text)
  18. score = hiv4.get_score(words)
  19. return score[ 'Subjectivity']
  20. def lm_positive(text):
  21. words = lm.tokenize(text)
  22. score = lm.get_score(words)
  23. return score[ 'Positive']
  24. def lm_negative(text):
  25. words = lm.tokenize(text)
  26. score = lm.get_score(words)
  27. return score[ 'Negative']
  28. def lm_polarity(text):
  29. words = lm.tokenize(text)
  30. score = lm.get_score(words)
  31. return score[ 'Polarity']
  32. def lm_subjectivity(text):
  33. words = lm.tokenize(text)
  34. score = lm.get_score(words)
  35. return score[ 'Subjectivity']
  36. df[ 'hiv4_pos'] = df[ 'Descriptions'].apply(hiv4_positive)
  37. df[ 'hiv4_neg'] = df[ 'Descriptions'].apply(hiv4_negative)
  38. df[ 'hiv4_polarity'] = df[ 'Descriptions'].apply(hiv4_polarity)
  39. df[ 'hiv4_subjectivity'] = df[ 'Descriptions'].apply(hiv4_subjectivity)
  40. df[ 'lm_pos'] = df[ 'Descriptions'].apply(lm_positive)
  41. df[ 'lm_neg'] = df[ 'Descriptions'].apply(lm_negative)
  42. df[ 'lm_polarity'] = df[ 'Descriptions'].apply(lm_polarity)
  43. df[ 'lm_subjectivity'] = df[ 'Descriptions'].apply(lm_subjectivity)
  44. df.head()

可视化

查看股价与报告的情感得分走势关系


   
  1. import matplotlib.pyplot as plt
  2. import seaborn as sns
  3. f, axes = plt.subplots(nrows= 2, ncols= 1, figsize=( 14, 6))
  4. axes[ 0].set_title( 'Stock Price、HIV4_polarity & LM_polarity')
  5. sns.lineplot(x= "Date", y= "Adj Close", data = df, label= 'Price', ax=axes[ 0]);
  6. sns.lineplot(x= "Date", y= "hiv4_polarity", data = df, label= 'hiv4_polarity', ax=axes[ 1]);
  7. sns.lineplot(x= "Date", y= "lm_polarity", data = df, label= 'lm_polarity', ax=axes[ 1]);

本文只是找了很少的数据,从图中走势看,LM金融情感极性得分(lm_polarity)与股价price走势更相似。说明对于苹果公司而言,通过对股评师有关苹果公司的报告进行文本情感计算,能够一定程度上预测股价走势。

近期文章

精选课程 | Python数据分析实战(学术)

代码不到40行的超燃动态排序图

使用Python自动生成事件分析图谱

Loughran&McDonald金融文本情感分析库

使用分析师报告中含有的情感信息预测上市公司股价变动

日期数据操作第1期 datetime库

日期数据操作第2期 pandas库

史上最大规模1.4亿中文知识图谱开源下载

【公开视频课】Python语法快速入门

【公开视频课】ython爬虫快速入门

文本数据分析文章汇总(2016-至今)

当文本分析遇到乱码(ง'⌣')ง怎么办?

当pandas遇上数据类型问题

如何理解pandas中的transform函数

一行pandas代码生成哑变量

Python最被低估的库,用好了效率提升10倍!

课件获取方式,请在公众号后台回复关键词“20191211

觉得本文有用,请不吝点赞评论转发~谢谢支持~


转载:https://blog.csdn.net/weixin_38008864/article/details/103502235
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场