作者:  Ronil Patil

翻译:王闯 (Chuck)

校对:詹好

本文约1900字,建议阅读5分钟

作者基于Kaggle上的新闻头条和股票指数数据集,用Python演示了如何利用NLP技术对新闻标题进行情感分析,从而预测股价走势。

标签:自然语言处理、情感分析、股价预测

本文曾作为数据科学博客松(https://datahack.analyticsvidhya.com/contest/data-science-blogathon-7/)的部分内容发表。

“不要在草堆里找一根藏针,而是要买下整个草堆!”

本次的主题与上述的引文有关,是一项对于股票市场的数据研究工作(译者注:引文是美国指数基金先驱John Bogle的名言,简述了指数型基金的概念,即与其花昂贵的费用请经理人从股市里大海捞针,不如用最简单的方法、最少的手续费,投资整个市场。)

本文介绍了基于自然语言处理(NLP)技术,如何创建一个利用新闻标题来分析股价的模型。具体而言,利用NLP来对新闻标题进行情感分析,从而预测股价涨跌。因此,本文的所有内容都是围绕如何用情感分析来预测股价展开的。

数据集介绍

这里我们使用了Kaggle数据集。你可以从这里(https://github.com/ronil068/Stock-Sentiment-Analysis)直接下载。该数据集是Kaggle上可用的世界新闻和股票价格的组合数据。数据框中包括其中25列分别对应每一天的25条TOP新闻,日期列(Date)和标签列(Label, 因变量特征)。数据范围是2008年至2016年,数据框2000年至2008年是从雅虎财经抓取的。标签基于道琼斯工业平均指数。

  • 标签为1–股价上涨。

  • 标签为0–股价持平或下跌。

开始

首先引入相关库

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report,confusion_matrix,accuracy_score

读取数据集

df = pd.read_csv('F:Stock-Sentiment-Analysis-master/Stock News Dataset.csv', encoding = "ISO-8859-1")

我们可以观察一下该数据集的一些特征:Label(标签)是我们的因变量特征(目标值),其余26个特征是自变量。当Label特征的值为1时,代表股价上涨,值为0时,代表股价持平或下跌;Top1到Top25,则是当日的25个Top新闻的标题;Date是时间信息。以上我们用来进行分析的数据集了。我们将利用NLP来对文章标题进行情感分析,从而预测股价将上涨还是下跌。

将数据集划分为训练集和测试集

train = df[df['Date'] < '20150101']
test = df[df['Date'] > '20141231']

我们将根据日期划分数据集。日期小于20150101的数据集为训练数据集,日期大于20141231的数据集为测试数据集。

特征工程

首先,我们需要从Top1到Top25的这些文本数据集中删除句号、感叹号等符号,只保留文字信息。因为进行情感分析不需要符号之类的信息。这里使用了正则表达式来进行处理。如前文所述,除了小写字母a-z和大写字母A-Z之外,所有内容都被替换为空白。如果有任何特殊字符出现,它将被自动删除并被替换为空格。

 # Removing special characters
data=train.iloc[:,2:27]
data.replace("[^a-zA-Z]"," ",regex=True, inplace=True)
# Renaming column names for better understanding and ease of access
list1= [i for i in range(25)]
new_Index=[str(i) for i in list1]
data.columns= new_Index
data.head(5)

更新后的数据集如下所示:

同时,我们还需要统一字符的大小写。这是非常关键的一步,因为每当我们尝试创建词袋模型或TF-IDF模型时,如果一个单词以大写字母开头,同时当它在另一个句子中以小写出现,模型将认为这是两个不同的单词。也就是说本来是同一个单词,但仅仅由于大小写的不同,却被视为不同的单词。这是我们需要避免的。

 # Convertng headlines to lower case
for index in new_Index:data[index] = data[index].str.lower()
data.head(1)

因此,请始终确保已将所有字母都转换为小写。当然也可以将它们转换为大写字母,但是如果决定将所有字母都转换为大写,则应当确保每个字母都应大写。

根据索引来合并所有新闻标题:

现在我们将某一天的25个Top新闻标题合并在一起,成为一个段落。这是为了方面我们后续应用CountVectorizer方法,即词袋模型或TF-IDF模型。因此,我将遍历每个日期,并将每一个日期下的25个标题合并为一个段落。

 headlines = []
for row in range(0,len(data.index)):headlines.append(' '.join(str(x) for x in data.iloc[row,0:25]))

现在,某一天的Top新闻标题就变成了这样:

应用CountVectorizer和RandomForestClassifier方法

此处,文本词频统计向量会将这些句子向量化。这便是词袋的含义。

 ## implement BAG OF WORDS
countvector=CountVectorizer(ngram_range=(2,2))
traindataset=countvector.fit_transform(headlines)## implement RandomForest Classifier
randomclassifier=RandomForestClassifier(n_estimators=200,criterion='entropy')
randomclassifier.fit(traindataset,train['Label'])

在测试集上进行预测

现在我们将对测试集进行与训练集相同的特征转换。

 ## Predict for the Test Dataset
test_transform= []
for row in range(0,len(test.index)):test_transform.append(' '.join(str(x) for x in test.iloc[row,2:27]))
test_dataset = countvector.transform(test_transform)
predictions = randomclassifier.predict(test_dataset)

最后,检查准确性 

在这里,我们将利用分类报告,混淆矩阵和准确率分数来检查模型的准确性。

 matrix = confusion_matrix(test['Label'],predictions)
print(matrix)
score = accuracy_score(test['Label'],predictions)
print(score)
report = classification_report(test['Label'],predictions)
print(report)

我们终于完成了所有步骤。

现在,假设你想预测明天股价涨跌,只需对排名前25的头条新闻应用本文中介绍的转换方法,然后将其输入到模型中,模型就会输出0或1,来表示明天的股票会不会上涨。

这就是如何利用新闻标题来进行股票情感分析的方法。

关于作者

Ronil Patil是一个终身学习者,对深度学习,NLP,机器学习和物联网充满热情。

Ronil Patil

https://www.linkedin.com/in/ronil08/

原文标题:

Stock Price Movement Based On News Headline

原文链接:

https://www.analyticsvidhya.com/blog/2021/05/stock-price-movement-based-on-news-headline

编辑:王菁

校对:林亦霖

译者简介

王闯(Chuck),台湾清华大学资讯工程硕士。曾任奥浦诺管理咨询公司数据分析主管,现任尼尔森市场研究公司数据科学经理。很荣幸有机会通过数据派THU微信公众平台和各位老师、同学以及同行前辈们交流学习。

翻译组招募信息

工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。

点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。

点击“阅读原文”拥抱组织

独家 | 基于新闻标题的股价走势分析(附链接)相关推荐

  1. 独家 | 基于癌症生存数据建立神经网络(附链接)

    作者:Jason Brownlee 翻译:wwl校对:车前子本文约4000字,建议阅读3分钟本文介绍了haberman乳腺癌生存二分类数据集,进行神经网络模型拟合.包含数据准备.MLP模型学习机制.模 ...

  2. 独家 | 菜鸟必备的循环神经网络指南(附链接)

    作者:Victor  Zhou 翻译:王雨桐 校对:吴金迪 本文约3800字,建议阅读15分钟. 本文将介绍最基础的循环神经网络(Vanilla RNNs)的概况,工作原理,以及如何在Python中实 ...

  3. 独家 | 基于TextRank算法的文本摘要(附Python代码)

    作者:Prateek Joshi 翻译:王威力 校对:丁楠雅 本文约3300字,建议阅读10分钟. 本文介绍TextRank算法及其在多篇单领域文本数据中抽取句子组成摘要中的应用. TextRank ...

  4. 独家 | 利用AI进行高精度图像编辑︰EditGAN(附链接)

    作者︰Nathan Horrocks 翻译︰Gabriel Ng 校对:张睿毅本文约3300字,建议阅读5分钟 本文为大家介绍了如何利用AI进行高精度图像编辑. 处理猫咪.汽车.甚至是古董画的照片,对 ...

  5. 独家 | 聊天机器人开发中的机器学习(附链接)

    作者:Omkar Prabhune 翻译:方星轩校对:王雨桐本文约2800字,建议阅读5分钟 本文作者从聊天机器人的种类.用途以及架构等角度介绍目前的聊天机器人技术,并在文末分享了一些聊天机器人行业的 ...

  6. 独家 | 如何通过TensorFlow 开发者资格考试(附链接)

    作者:Daniel Bourke 发表时间:06/06/2020 翻译:方星轩 本文长度为5600字,建议阅读10分钟 本文通过作者参加TensorFlow的资格考试的经历总结考前准备以及回答考试会出 ...

  7. 独家 | 使用Spark进行大规模图形挖掘(附链接)

    翻译:陈丹 校对:王雨桐 本文约4700字,建议阅读15分钟 本文为大家介绍了多种图挖掘工具,并运用Spark为大家展示了一个标签传播算法LPA构建图的实例. 本教程分为两部分: 第1部分:无监督学习 ...

  8. 独家 | 机器学习数据准备技术之旅(附链接)

    作者:Jason Brownlee 翻译:李嘉骐 校对:王晓颖 本文约4300字,建议阅读9分钟 本文介绍了机器学习中常用的数据准备技术. 标签:初学者 机器学习 数据准备 特征工程 机器学习项目中的 ...

  9. 独家 | 脑洞大开!机器学习与AI突破(附链接)

    作者:Jerry Chi(SmartNews数据科学主管) 翻译:和中华 校对:丁楠雅 本文约3000字,建议阅读10分钟. 本文介绍了近期在机器学习/人工智能领域一些非常有创意的突破,每一个都脑洞大 ...

最新文章

  1. 【疑难杂症】vue npm run build的时候遇到Module build failed: Error: No ESLint configuration found.报错提示咋办呀?
  2. python内置模块re_常用内置模块(11):正则表达式、re模块
  3. MapReduce编程实战之“工作原理”
  4. python语句中对象未被定义_python 形参没有被定义???感觉遇到鬼了。。。
  5. Niginx工作笔记-通过error.log定位错误(记录一个寻找问题的方法)
  6. 惠普ns1005w使用说明_惠普 NS1005w 多功能一体机解析:15秒智能闪充 + 全功能手机操控...
  7. 搭建深度学习推荐系统实战
  8. 511遇见易语言大漠模块制作教程找图FindPic
  9. camera 驱动 raw bayer isp
  10. ORA-1652: unable to extend temp segment by 128 in tablespace TEMP解决
  11. 博客文章详情页更新公告
  12. SCIgen - An Automatic CS Paper Generator
  13. 统计学三大相关系数之Pearson相关系数、Spearman相关系数
  14. 京东商城在掩盖什么?(1)
  15. MATLAB R2019a绘制时序数据小波方差图[新手向/保姆级]
  16. python逗号分隔符_在Python中用逗号将数字打印为数千个分隔符
  17. Live2D Web端实现
  18. jQuery实现小游戏飞机大战
  19. python image库保存图片_python PIL 打开\显示\保存图像
  20. 图示数学之: 克莱因瓶之谜

热门文章

  1. 【c语言】符号常量的使用
  2. python课时费_python(课时1)
  3. Socket IO与NIO(二)
  4. 漫画算法:如何判断链表有环?
  5. 微服务实战(一):微服务架构的优势与不足
  6. Swift学习——Swift解释特定的基础(七)
  7. Android官方技术文档翻译——Ant 任务
  8. nagios 监控NFS
  9. netstat常用命令
  10. 医院选址问题--数据结构课程设计