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

作者:  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
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
情感分析项目,目的是手动爬取天天基金网基民评论与东方财富网股市行情的资讯,从基民评论、重仓股票、市场行情三个方面出发,使用情感词典与LDA模型进行分析,从而做出是否值的购买基金的决策。带有标签clean的是清洗后的爬虫数据,没有带标签的是原始数据….zip探索Python爬虫工具:为数据挖掘数据分析提供强大支持 在数据驱动的今天,获取并处理数据是每个研究人员、数据分析师和企业的重要任务。为此,我们汇集了一系列Python爬虫工具,旨在帮助您更高效地获取、处理和分析网络数据。 内容概览 这个压缩包集合包括了从单一用途到多功能的各种Python爬虫工具。无论您是需要快速抓取特定网站的数据,还是希望构建复杂的网络爬虫来处理大量数据,这里都有适合您的工具。 为何选择我们的Python爬虫工具 实用性: 这些工具都是根据实际需求开发的,具有高度的实用性和针对性,能帮助您解决实际问题。 易用性: 无需复杂的设置,即插即用,让您专注于数据获取和分析,而不是工具的配置。 高效性: 这些工具利用了Python的强大功能,能够快速、准确地抓取数据。 可扩展性: 每个工具都具有良好的扩展性,可以根据您的具体需求进行定制。 如何使用这些工具 每个工具都带了详细的文档和示例,帮助您快速上手。对于更深入的使用,我们提供了在线支持和社区论坛,方便您与其他用户交流和学习。 下一步行动 现在就下载这些Python爬虫工具,开始您的数据获取之旅!为数据科学、网络挖掘和分析提供强大的支持,满足您的所有需求。
### 回答1: Python数据分析是利用Python编程语言进行数据分析的过程。在数据分析中,经常需要将分析的结果进行可视化展示,提供更直观的信息呈现。而基于plotly的动态可视化绘图则是一种利用plotly库进行数据绘图,并且实现动态效果的方法。plotly是一个强大的绘图库,它可以绘制各种类型的图表,并且支持交互式操作,使得数据分析结果更加直观。 绘制动态可视化图表的过程如下:首先,需要安装plotly库,并导入相应的模块。然后,根据需要,选择合适的图表类型,比如折线图、散点图等,利用plotly的绘图函数进行绘制。可以设置图表的布局、颜色、标题等属性,使得图表更具美观性和可读性。接下来,根据数据的变化,通过更新数据源或设置动画效果,实现图表的动态效果。最后,将生成的图表保存为PDF格式的文件,方便保存和分享。 使用基于plotly的动态可视化绘图有以下几个优点:首先,plotly的绘图功能十分强大,可以绘制各种类型的图表,并且支持交互式操作,方便用户进行数据探索和分析。其次,动态可视化图表可以更加生动地展示数据的变化趋势和关系,增加了数据分析的直观性和可理解性。此外,生成的图表可以保存为PDF格式的文件,方便与他人分享和使用。 总之,基于plotly的动态可视化绘图可以帮助数据分析人员更好地展示分析结果,提供直观的信息呈现。它是数据分析中非常有用的工具之一,能够提升数据分析的效果和表现力。 ### 回答2: Python数据分析是利用Python编程语言进行数据分析的一种方法。其中,基于plotly的动态可视化绘图是指使用plotly库来创建具有交互性和动态效果的图表。而动态可视化绘图的优势在于能够更直观地展示数据的变化趋势和关联性。 在使用Python进行数据分析时,绘制可视化图表是非常重要的步骤之一。而plotly作为一种强大的可视化库,提供了丰富的图表类型和交互特性,能够满足各种数据分析的需求。通过使用plotly,用户可以绘制条形图、折线图、散点图、饼图等各种常见图表,并且可以根据需要添加交互功能,如缩放、悬停等。 与传统的静态图表不同,动态可视化图表能够更好地展示数据的变化。例如,在时间序列数据分析中,绘制动态折线图可以使用户更直观地看到数据随时间的变化趋势。此外,通过添加滑块或按钮等控件,用户可以通过切换控件的状态来查看不同时间点的数据情况,进一步加深对数据的理解。 绘制动态可视化图表并将其保存为PDF格式可以方便用户在不同设备上查看和分享。Python的绘图库可以轻松实现将图表保存为PDF文件的功能。只需使用相应的函数将绘制的图表对象保存为PDF文件即可。这样,数据分析人员可以将生成的动态可视化图表以PDF的形式分享给其他人,实现对数据分析过程和结果的可视化共享。 总结来说,基于plotly的动态可视化绘图是一种强大的数据分析工具,能够通过交互性和动态效果更好地展示数据分析的结果。将绘制的图表保存为PDF文件可以方便用户在不同设备上查看和分享。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值