龙空技术网

黑科技!用Python读懂国际大势预测股票行情

python小白社区 314

前言:

今天看官们对“python股票预测”大致比较关注,你们都想要了解一些“python股票预测”的相关资讯。那么小编也在网上网罗了一些有关“python股票预测””的相关资讯,希望咱们能喜欢,朋友们一起来了解一下吧!

近来,国际局势纷繁变化,"突发!10万吨超级油轮遭鱼雷袭击,爆炸沉没,战争阴云笼罩海峡,中东发生突发事件.......",

国际局势纷繁变化

这些发生在万里之外的事,对大家也有着切身影响,不信吗?比如,你持有的美股,或A股也会受到波及。这是为什么?

许多经济学家认为股票市场是随机的,因为它受随机事件的支配,这在有效市场假说和随机游走理论中得到了体现。但它真的吗?研究人员已经对此进行了测试,并试图预测股票市场,以表明确实可以了解市场将走向何方并且似乎已经准确地证明了他们的观点。Bollen利用公众舆论(使用Twitter推文)证明了在Twitter上表达的公众情绪与股市表现方式之间存在相关性。

接下来先会介绍如何获取Twitter舆情,和如何量化舆情的感情,并指出如何结合舆情感情和股票行情进行预测下一波股票行情的探索方向。

如何获取Twitter舆情

下面先简单介绍Python如何调用Twitter接口得到数据,再讲述使用python计算两个分数:情感极性和主观性。极性范围从-1到1(负到正),并告诉我们文本是否包含正反馈或负反馈。

Twitter编程第一步:创建开发人员帐户

通过开发人员门户创建开发人员帐户后,您可以导航到开发人员应用程序门户。

在此区域中,您需要单击" 创建新应用程序",然后按照该过程创建新应用程序。在名为apps和keys的选项卡下,您将找到客户端密钥和客户端密钥。见下图:

获得此信息后,您就可以开始使用Twitter API和您喜欢的python编辑器了!

调用PythonTwitter库

下载给定用户的所有推文。使用twitter.Api.GetUserTimeline来检索用户的最后3,200条推文。Twitter不允许通过API检索更多的推文,所以我们只能估摸着获取最大的推文。

代码如下:

获取了Twiter的内容后,存为csv文件,下一步,就是做情感分析了。

Python中存在一些NLP库,如Spacy,NLTK,gensim,TextBlob等。本文我们将使用NLTK进行预处理,使用TextBlob来计算情感极性和主观性。

将使用pandas read_csv函数导入数据。

amz_reviews = pd.read_csv("1429_1.csv")

导入数据集后,建议首先了解它并研究数据集的结构。此时我们有兴趣知道有多少列以及这些列是什么,因此我将检查数据框的形状并查看每个列名称以查看是否需要它们。

amz_reviews.shape

(34660,21)

有很多列对我们的情绪分析没用,最好删除这些列。有很多方法可以做到这一点:或者只选择要保留的列,或者选择要删除的列,然后使用drop函数将其从数据框中删除。我更喜欢第二种选择,因为它允许我再次查看每一列,所以我不会错过任何重要的分析变量。接下来对要进行情感分析的文本变量做处理。

文本变量的数据预处理

Lowercasing

在我们继续计算每个评论的情绪分数之前,重要的是预处理文本数据。Lowercasing有助于标准化过程,这是保持文字统一的重要步骤

df ['twitter.text'] = df [twitter.text']。apply(lambda x:"。"。join(x.lower()for x in x.split()))

特殊字符

特殊字符是非字母和非数字值,例如{!,@#$%^ *()〜;:/ <> | + _- []?}。处理数字很简单,但特殊字符有时可能很棘手。在标记化期间,特殊字符会创建自己的标记,并且对于任何算法(同样地,数字)也没有帮助。

##删除标点符号

df ['twitter.text'] = df [twitter.text']。str.replace('[^ ws]','')

DF ['twitter.text'] [2]

停用词

停用词最常用于英语; 然而,这些词在现实中没有预测能力。像我,我,我,他,她,他们,我们,我,你,你的等等。

stop = stopwords.words('english')

df['twitter.text'] = df[twitter.text'].apply(lambda x: " ".join(x for x in x.split() if x not in stop))

df['twitter.text'][2]

词干

词干算法在文本挖掘领域非常有用,并且有助于获取相关信息,因为它通过删除诸如-action,ing,-es和-ses之类的后缀将具有相同根的所有单词减少为通用形式。但是,如果存在拼写错误,则可能会出现问题。

st = PorterStemmer()

df[' twitter.text'] = df[' twitter.text'].apply(lambda x: " ".join([st.stem(word) for word in x.split()]))

df[' twitter.text'][2]

情绪得分

现在是时候计算每个评论的情绪分数并检查这些分数的样子。

## Define a function which can be applied to calculate the score for the whole dataset

def senti(x):

return TextBlob(x).sentiment

df['senti_score'] = df[' twitter.text'].apply(senti)

df.senti_score.head()

0 (0.3, 0.8)

1 (0.65, 0.675)

2 (0.0, 0.0)

3 (0.29545454545454547, 0.6492424242424243)

4 (0.5, 0.5827777777777777)

Name: senti_score, dtype: object

正如可以观察到的那样,有两个得分:第一个得分是情绪极性,它表明情绪是正面还是负面,第二个得分是主观性得分,以说明文本是多么主观。

预测股市

根据以上的量化情绪,能否根据可用的推文预测以前看不到的股市趋势,可以预测未来吗?!!

为了预测股票市场,Bollen使用了一种称为自组织模糊神经网络(SOFNN)的东西,他们使用五层混合SOFNN模型来预测股票市场并获得了令人印象深刻的结果。他们使用不同的数据排列,例如,平静,平静和快乐等,最佳准确率是87.6%(很棒!!!)。

SOFNN模型来预测股票市场并获得了令人印象深刻的结果

将股票行情和舆情文本情绪化量化后作为参数送入神经网络进行预测,然后预测下一波的行情证明是可行的。接下来会继续深入神经网络模型来介绍,请大家继续支持和关注。

标签: #python股票预测