前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法集锦(17)|自然语言处理| 比特币市场情绪分析算法

算法集锦(17)|自然语言处理| 比特币市场情绪分析算法

作者头像
用户7623498
发布2020-08-04 16:39:00
1.3K0
发布2020-08-04 16:39:00
举报

本次算法分享,我们提供了一种可以通过Twitter(或微博)信息进行加密货币市场预测的方法。该方法利用Twitter上的数据来预测人们对加密货币市场的情绪:贪婪?恐惧还是观望?

市场情绪很重要

密码货币市场很大程度上是由投机推动的。你是否同意这一说法取决于你,然而许多业内顶尖的交易员都明白监控市场情绪的重要性。你是在每个人都高兴和贪婪的时候买的,还是在含盐量高的时候买的?我建议你自己回答这个问题,或者看看沃伦·巴菲特的名言来理解答案。

具体的,我们可以使用像TextBlob这样的Python NLP(自然语言处理库)来评估语句是正面的还是负面的。

代码语言:javascript
复制
>>>from textblob import TextBlob
>>>TextBlob("I HATE BITCOIN").sentiment
>>>Sentiment(polarity=-0.8, subjectivity=0.9)

我们将Twitter上的一条评论输入,利用TextBlob库去评估,它的主观性(subjectivity)分数是0.9,但更重要的是要指出极性(polarity)。两个指标的范围都在-1到+1之间。通过即兴判断这个表述是非常负面的,得分是-0.8。

总的来说,本算法主要有两个流程:

  1. 获取微博信息
  2. 将微博信息作为字符串输入TextBlob,并估算其极性

算法基本内容

在此,我们并不重点分析市场的情绪如何,而是讨论的是如何收集和分析我们的数据。

如果您是Python新手或想要练习一些好的编程技巧,建议在终端设置一个新的conda环境:

代码语言:javascript
复制
conda create -n sentiment python=3.6 pip

在crypto-sent文件夹中运行以下命令:

代码语言:javascript
复制
source activate sentiment
pip install -r requirements.txt

然后创建一个名为coins.py的新文件,并包含以下代码:

代码语言:javascript
复制
#importing libraries
import codecs
from bs4 import BeautifulSoup
import requests
import tweepy
from textblob import TextBlob
import sys
import csv
from fake_useragent import UserAgent

接下来你需要创建一个twitter账户。然后,转到apps.twitter.com来生成API键,我们的脚本将使用这些键与Tweepy进行交互,以收集微博信息。这样做之后:

代码语言:javascript
复制
#insert your own generated keys:
consumer_key= '' 
consumer_secret= ''
access_token=''
access_token_secret=''
#tweepy library to authenticate our API keys
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

网络爬虫

有趣的是,我们可以从Cryptrader.com上获得一小部分关于信息 /时间(tweets/hour)的信息和altcoins列表。使用BeautifulSoup库可以很容易地对这些信息进行处理。

代码语言:javascript
复制
url = 'http://cryptrader.com/W/tweets' 
#Picking random useragent / telling user and setting below to use
print("Grabing a random useragent from random useragent API....")
# get a random user agent
randuserAgent = UserAgent(verify_ssl=False).random
headers = {'User-Agent': randuserAgent} # spoof user agent to stop the block 
page = requests.get(url, headers=headers) # grab the page / html
print(page.content)
print(page.status_code)
soup = BeautifulSoup(page.content, 'html.parser') 
tabulka = soup.find("table", {"class" : "data-table"}) #grabbing the table from our 'api'
records = [] # store all of the records in this list

上面的代码收集了我们的数据,现在我们对它进行循环以分析市场情绪。

Cryptrader包括一个小部件,用于监控上一小时发布的tweet数量,以及过去24小时内发布的tweet数量的百分比变化:

代码语言:javascript
复制
#iterating through our list of altcoins:
for row in tabulka.findAll('tr'): 
    col = row.findAll('td')
    name = col[0].string.strip()
    symbol = col[1].string.strip()
    tweetsLastHour = col[2].string.strip()
    try:
        change = col[3].string.strip()
    except:
        change = "NULL"
#Search for tweets that include the symbol+name using tweepy
    public_tweets = api.search("#" + name)

注意我们设置的变量public_tweets,它将是一个列表,由Cryptrader上列出的每个altcoin的名称组成,该列表的长度就是它在过去一小时中被提及的次数。

我们遍历列表,计算每个微博信息的极性,并将它们打印到终端:

代码语言:javascript
复制
#Sentiment
    #for every tweet mentioned
    for tweet in public_tweets: 
        text = tweet.text
        cleanedtext = text 
        analysis = TextBlob(cleanedtext) 
        sentiment = analysis.sentiment.polarity # work out sentiment
        if sentiment >= 0: # give it english
            polarity = 'Positive'
        else:
            polarity = 'Negative'
        #print(cleanedtext, polarity)

    record = '%s|%s|%s|%s|%s' % (name, symbol, tweetsLastHour,change,polarity) # get string ready for output file
    records.append(record)
    #printing our output
    print(name + "|" + symbol + "|" + tweetsLastHour + "|" + change + "|" + polarity) 
fl = codecs.open('output.txt', 'wb', 'utf8') #store to output file
line = ';'.join(records)
fl.write(line + u'\r\n')
fl.close() #end store to output file

在终端机中运行,我们可以得到如下内容:

代码语言:javascript
复制
Litecoin|LTC|34|+0.77%|Positive
ReddCoin|RDD|20|+0.77%|Positive
PotCoin|POT|20|+0.46%|Positive
NetCoin|NET|2|+0.44%|Negative
....

这给我们提供了大量的信息。我们现在可以看到过去一小时内的推文是正面的还是负面的。变化百分比让我们知道一个特定的加密货币是否有趋势,或者在一个小时内被提到的次数是否比其他货币多。

以上是本算法的基本内容,你可以参考本算法去评估更多的市场行为。

对于本算法的优化,可行的方向有:使用机器学习模型来细化极性输出或者使用极性作为其他机器学习模型的输入,等等。

参考文章:

https://towardsdatascience.com/building-an-altcoin-market-sentiment-monitor-99226a6f03f6

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 决策智能与机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档