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

Posted 决策智能与机器学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法集锦(17)|自然语言处理| 比特币市场情绪分析算法相关的知识,希望对你有一定的参考价值。




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



市场情绪很重要


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


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


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


>>>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,并估算其极性


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


算法基本内容


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


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


conda create -n sentiment python=3.6 pip


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


source activate sentiment
pip install -r requirements.txt


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


1#importing libraries
2import codecs
3from bs4 import BeautifulSoup
4import requests
5import tweepy
6from textblob import TextBlob
7import sys
8import csv
9from fake_useragent import UserAgent


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


1#insert your own generated keys:
2consumer_key= '' 
3consumer_secret= ''
4access_token=''
5access_token_secret=''
6#tweepy library to authenticate our API keys
7auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
8auth.set_access_token(access_token, access_token_secret)
9api = tweepy.API(auth)


网络爬虫



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


 1url = 'http://cryptrader.com/W/tweets' 
2#Picking random useragent / telling user and setting below to use
3print("Grabing a random useragent from random useragent API....")
4# get a random user agent
5randuserAgent = UserAgent(verify_ssl=False).random
6headers = {'User-Agent': randuserAgent} # spoof user agent to stop the block 
7page = requests.get(url, headers=headers) # grab the page / html
8print(page.content)
9print(page.status_code)
10soup = BeautifulSoup(page.content, 'html.parser') 
11tabulka = soup.find("table", {"class" : "data-table"}) #grabbing the table from our 'api'
12records = [] # store all of the records in this list


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


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


 1#iterating through our list of altcoins:
2for row in tabulka.findAll('tr'): 
3    col = row.findAll('td')
4    name = col[0].string.strip()
5    symbol = col[1].string.strip()
6    tweetsLastHour = col[2].string.strip()
7    try:
8        change = col[3].string.strip()
9    except:
10        change = "NULL"
11#Search for tweets that include the symbol+name using tweepy
12    public_tweets = api.search("#" + name)


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


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


 1#Sentiment
2    #for every tweet mentioned
3    for tweet in public_tweets: 
4        text = tweet.text
5        cleanedtext = text 
6        analysis = TextBlob(cleanedtext) 
7        sentiment = analysis.sentiment.polarity # work out sentiment
8        if sentiment >= 0# give it english
9            polarity = 'Positive'
10        else:
11            polarity = 'Negative'
12        #print(cleanedtext, polarity)
13
14    record = '%s|%s|%s|%s|%s' % (name, symbol, tweetsLastHour,change,polarity) # get string ready for output file
15    records.append(record)
16    #printing our output
17    print(name + "|" + symbol + "|" + tweetsLastHour + "|" + change + "|" + polarity) 
18fl = codecs.open('output.txt''wb''utf8'#store to output file
19line = ';'.join(records)
20fl.write(line + u' ')
21fl.close() #end store to output file


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


1Litecoin|LTC|34|+0.77%|Positive
2ReddCoin|RDD|20|+0.77%|Positive
3PotCoin|POT|20|+0.46%|Positive
4NetCoin|NET|2|+0.44%|Negative
5....


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


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


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


参考文章:

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


微信群&交流合作

  • 投稿、交流合作请留言联系。

以上是关于算法集锦(17)|自然语言处理| 比特币市场情绪分析算法的主要内容,如果未能解决你的问题,请参考以下文章

比特币期现价差今日为4.49%,情绪指数为“谨慎乐观”

比特币价格再超黄金,“比特币ETF”或助燃行情

比特币网络完成Taproot升级 市场风平浪静

突然!比特币暴跌近20%!一度跌破52000美元​!多人损失惨重!背后发生了什么?

比特币迎来“二次探底”,50900或是能否转强的关键位

区块链比特币之周期概念