使用 Python 与 X(原 Twitter)进行比特币情绪分析

Posted by AGA链讯 on February 24, 2025

引言

比特币已成为金融与科技领域最热门的话题之一,吸引了从专业投资者到普通大众的广泛关注。由于比特币价格波动剧烈,实时追踪市场情绪对于理解其走势至关重要。X(原 Twitter)作为全球重要的社交媒体平台,汇聚了大量关于比特币的讨论。通过 Python 强大的文本分析能力,我们可以实时抓取并分析推文,准确捕捉市场情绪变化,为投资决策提供参考。

Python 拥有丰富的开源库生态系统,能够高效完成社交媒体数据抓取、清理与情感分析。例如:

  • Tweepy:用于连接 X(Twitter)API,抓取相关推文
  • TextBlob:提供简洁的自然语言处理接口,快速分析文本情感倾向
  • pandasnumpy:进行数据清洗、转换与数值计算
  • matplotlib:生成专业的数据可视化图表,直观展示情绪趋势

本文将逐步介绍如何使用这些工具,构建完整的比特币情绪分析流程,帮助开发者与研究人员掌握社会情绪分析的实用方法。

环境准备与工具选择

本项目推荐使用 Google Colab 作为开发环境。Colab 是基于云端的 Jupyter Notebook 服务,提供免费的 GPU 资源与零配置的 Python 环境,特别适合数据分析和机器学习任务。

主要优势包括:

  • 无需本地安装,通过浏览器即可编写和运行代码
  • 免费使用 GPU 加速计算过程
  • 轻松分享项目成果,支持协同编辑

👉 立即体验在线编程环境

分步实现比特币情绪分析

步骤一:导入必要的 Python 库

首先导入项目依赖的库文件:

import tweepy
from textblob import TextBlob
import pandas as pd
import numpy as np
import re
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')

各库功能说明:

  • Tweepy:用于与 X(Twitter)API 交互,获取比特币相关推文
  • TextBlob:计算推文的主观性与极性分数
  • pandas:存储和分析情感分析结果
  • numpy:支持数值运算与数组操作
  • re:通过正则表达式清理文本数据
  • matplotlib:生成散点图与柱状图,可视化情感分布

使用 fivethirtyeight 样式可使图表更具专业美感。

步骤二:加载身份验证文件

为连接 X(Twitter)API,需要上传包含认证信息的 CSV 文件:

from google.colab import files
files.upload()

该文件应包含以下字段:consumer_key、consumer_secret、access_token 和 access_token_secret。

步骤三:读取认证信息并建立 API 连接

log = pd.read_csv('login.csv')
consumer_key = log["key"][0]
consumer_secret = log["key"][1]
access_token = log["key"][2]
access_token_secret = log["key"][3]

authenticate = tweepy.OAuthHandler(consumer_key, consumer_secret)
authenticate.set_access_token(access_token, access_token_secret)
api = tweepy.API(authenticate, wait_on_rate_limit=True)

设置 wait_on_rate_limit=True 可避免因请求频率过高导致 API 限制。

步骤四:采集比特币相关推文

通过以下代码搜索最近期的比特币推文,并过滤转推内容:

search_term = '#Bitcoin -filter:retweets'
tweets = tweepy.Cursor(api.search, q=search_term, lang='en', since='2018-11-01', tweet_mode='extended').items(2000)
all_tweets = [tweet.full_text for tweet in tweets]

步骤五:数据清理与存储

原始推文常包含噪声数据(如链接、标签、表情符号),需进行清理:

def clean_tweet(tweet):
    tweet = re.sub('#bitcoin', 'bitcoin', tweet)
    tweet = re.sub('#Bitcoin', 'Bitcoin', tweet)
    tweet = re.sub('#[A-Za-z0-9]+', '', tweet)
    tweet = re.sub('\\n', '', tweet)
    tweet = re.sub('https?:\/\/\S+', '', tweet)
    return tweet

df = pd.DataFrame(all_tweets, columns=['Tweets'])
df['Cleaned_tweets'] = df['Tweets'].apply(clean_tweet)

清理后数据存入 DataFrame,便于后续分析。

步骤六:计算情绪指标

使用 TextBlob 计算每条推文的主观性(subjectivity)与极性(polarity):

def get_subjectivity(text):
    return TextBlob(text).sentiment.subjectivity

def get_polarity(text):
    return TextBlob(text).sentiment.polarity

df['Subjectivity'] = df['Cleaned_tweets'].apply(get_subjectivity)
df['Polarity'] = df['Cleaned_tweets'].apply(get_polarity)
  • 主观性:表示文本包含个人观点的程度,0 为完全客观,1 为完全主观
  • 极性:衡量情感正负倾向,范围从 -1(负面)到 1(正面)

步骤七:情绪分类

根据极性分数将推文分为正面、负面或中性:

def get_sentiment(score):
    if score < 0:
        return 'Negative'
    elif score == 0:
        return 'Neutral'
    else:
        return 'Positive'

df['Sentiment'] = df['Polarity'].apply(get_sentiment)

步骤八:可视化分析结果

生成散点图,展示主观性与极性的分布关系:

plt.figure(figsize=(8,6))
for i in range(0, df.shape[0]):
    plt.scatter(df['Polarity'][i], df['Subjectivity'][i], color='purple')
plt.title('比特币情绪分析散点图')
plt.xlabel('极性(负面 -> 正面)')
plt.ylabel('主观性(客观 -> 主观)')
plt.show()

生成柱状图,统计各类情绪推文数量:

df['Sentiment'].value_counts().plot(kind='bar')
plt.title('比特币情绪分布柱状图')
plt.xlabel('情绪类型')
plt.ylabel('推文数量')
plt.show()

常见问题

问:为什么要过滤转推(Retweet)?

答:转推仅代表转发行为,不一定反映用户真实情绪。过滤后可保留原始观点,提高分析准确性。

问:情感分析的准确性如何保障?

答:TextBlob 基于预训练模型,适用于英文文本情感分析。对于非正式社交媒体文本,需通过数据清洗和模型调优提升准确率。

问:除了比特币,这个模型能否分析其他加密货币?

答:可以。只需修改搜索关键词(如 #Ethereum 或 #XRP),即可分析其他加密货币的社会情绪。

问:如何提升分析的实时性?

答:可通过设置定时任务(如 Cron Job)定期运行脚本,或使用流式 API(Tweepy Stream)实时捕获推文。

问:主观性与极性有何实际应用价值?

答:主观性帮助区分事实与观点,极性反映市场情绪方向。结合两者可更精准判断市场预期与潜在波动。

结语

通过 Python 进行比特币情绪分析,不仅能够实时捕捉市场情绪变化,还可为投资策略提供数据支持。本项目演示了从数据采集、清理到可视化分析的全流程,适用于其他社交媒体与话题分析。

随着加密货币市场的发展,情绪分析将成为理解市场动态的重要工具。掌握这一技术,有助于在快速变化的市场中做出更明智的决策。

👉 了解更多数据分析工具与方法