作者:  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微信公众平台和各位老师、同学以及同行前辈们交流学习。

END

版权声明:本号内容部分来自互联网,转载请注明原文链接和作者,如有侵权或出处有误请和我们联系。


合作请加QQ:365242293  

数据分析(ID : ecshujufenxi )互联网科技与数据圈自己的微信,也是WeMedia自媒体联盟成员之一,WeMedia联盟覆盖5000万人群。

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

  1. 独家 | 基于新闻标题的股价走势分析(附链接)

    作者:  Ronil Patil 翻译:王闯 (Chuck) 校对:詹好 本文约1900字,建议阅读5分钟 作者基于Kaggle上的新闻头条和股票指数数据集,用Python演示了如何利用NLP技术对新 ...

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

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

  3. 资源推荐 | 知识图谱顶会文献集锦(附链接)

    来源:专知 作者:WDS Research Group 本文附资源,建议阅读5分钟. 本知识库包含了关于知识图谱的会议论文的链接. [ 导读 ]知识图谱是通过将应用数学.图形学.信息可视化技术.信息科 ...

  4. 基于NRC词典的离散情感分析(含有程度词和否定词)

    NRC词典的加载方法和分词方法之前的文章有写,直接套用即可. 具体函数参考了这篇文章:基于情感词典的文本情感分析(附代码)_Petrichoryi的博客-CSDN博客_bosonnlp情感词典 我相当 ...

  5. 一些基于新闻表示和用户表示的新闻推荐模型总结:NPA/ NAML/ LSTUR/ NRMS

    前言 上上上次组会研一学长汇报了一篇数据集文章:MIND: A Large-scale Dataset for News Recommendation,是微软为新闻推荐而发布的一个数据集.在听汇报时我 ...

  6. 这是我看过最详细的股价走势图应用分析!

    下述规则是为我对股价走势图的一些分析注解. 1)不同板块或个股到达顶部的时间,与大盘指数达到顶部的时间是不一致的,而处于底部的时间却是统一的. 也就是说,不同板块或个股往往会在同一时间段内筑底.比如说 ...

  7. python推荐系统-python 新闻推荐系统(基于新闻内容推荐)

    # -*- coding:utf-8 -*- __version__ = '1.0.0.0' """ @brief : 基于新闻的内容推荐系统 @details: 详细信 ...

  8. word2vec利用词向量进行中文新闻标题相似度分析

    需求是在48万条中文新闻标题里,给测试集中50条标题的每一条找出最相近的20条新闻.拿到这个需求第一反应当然是计算词向量,生成每句话的语义向量然后计算相似度啦,也想过TFIDF来提取每条新闻的关键字, ...

  9. ACL 2021 | PENS: 个性化新闻标题生成数据集

    (本文阅读时间:8 分钟) 编者按:数字信息时代人们获取新闻的方式越来越高效,但是获取新闻中关键信息的效率却很低.而 NLP 领域的新闻标题生成任务 (News Headline Generation ...

  10. 深度学习前沿 | 利用GAN预测股价走势

    本文是对于medium上Boris博主的一篇文章的学习笔记,这篇文章中利用了生成对抗性网络(GAN)预测股票价格的变动,其中长短期记忆网络LSTM是生成器,卷积神经网络CNN是鉴别器,使用贝叶斯优化( ...

最新文章

  1. WinAPI: CopyFileEx
  2. 【GDOI2016模拟3.11】历史
  3. buffer和cache怎么让你们解释的那么难理解?
  4. 用闭包实现重载的过程学习闭包
  5. php如何生成唯一随机数,PHP实现生成唯一会员卡号(不重复的随机数)
  6. OJ1080: a+b(多实例测试3)(C语言)
  7. 平均要取多少个(0,1)中的随机数才能让和超过1
  8. IOS 7 Xcode 5 免IDP证书 真机调试
  9. SharePoint2010 空白站点集无法找到术语管理库
  10. lfw人脸识别数据集
  11. linux安装之后缺少命令,linux下rarlinux安装后找不到rar命令处理方法
  12. 使用javah 生成.h头文件
  13. Office快捷键大全之二(Excel快捷键)
  14. 【计算机视觉】光照及阴影(持续更新中)
  15. html构建复选框标签,什么标签用于在表单中构建复选框_HTML表单复选框INPUT标签...
  16. 计算机共享文件打不开怎么办,能共享到文件夹但打不开共享文件怎么办
  17. 我们应当怎样做需求确认:快速原型法
  18. HTML简单个人简历前端页面
  19. 如何让家里的电脑,外网也能访问
  20. Java程序与以太坊智能合约交互

热门文章

  1. 腾讯云轻量应用服务器如何搭建跨境电商独立站?(WooCommerce)
  2. VAPS XT开发入门教程04:GUI界面说明
  3. STM32CUBEIDE 防止代码被优化
  4. 趣图:我长大后想做一个程序员
  5. SICP学习笔记----课程规划
  6. HarmonyOS应用开发02-程序框架UIAbility、启动模式与路由跳转
  7. python极简主义pdf_学了Python想练手却没项目没资源么?整理了15个开源项目,理论与实践结合才是王道!...
  8. 在自己身上找寻阿Q的元素-《读书修身》课程报告
  9. 计算机考研838难吗,苏州大学808 管理学_福州大学838_ 福州大学431考研难不难考研到底难不难...
  10. Android 6.0 全网最简单粗暴解决动态权限申请