在当今快速变化的金融市场中,预测股市趋势对于投资者至关重要。然而,传统的分析方法往往滞后于市场动态。人工智能(AI) 提供了一个强大的工具,可以更快、更有效地捕捉市场情绪。本文将深入探讨如何构建一个 AI 情感分析管道,该管道能够从社交媒体抓取数据,并使用 Google 的 Gemini 模型进行情感分析,最终用于 股票趋势预测。
关键点
AI 情感分析管道能够从社交媒体提取与股票相关的数据。
使用 Google 的 Gemini 模型进行情感分析,以了解市场情绪。
利用 Blue Sky 的社交媒体数据作为信息来源。
该管道可以扩展到其他领域,例如品牌情感分析和政治情感分析。
需要注册 Blue Sky 账号和获取 Google AI Studio API 密钥。
可以通过免费计划或连接 Google Cloud 账单账户来使用 Gemini API。
构建 AI 情感分析管道
什么是AI情感分析管道?
一个 ai 情感分析管道 是一个集成的系统,它利用人工智能技术来理解和量化文本数据中的情感。通常,此类管道的目的是从大量文本数据中提取有价值的见解,例如公众对特定品牌、产品、事件或个人的态度。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

尽管本教程专注于 股票市场的情感分析,但该方法可以适用于各种场景,例如 品牌声誉管理 和 政治倾向分析。该管道通常包含以下几个关键步骤:
- 数据抓取:从各种来源(例如社交媒体、新闻文章和博客)收集文本数据。
- 情感分析:使用自然语言处理 (NLP) 技术来识别和提取文本数据中的情感。
- 趋势预测:利用情感分析的结果来预测未来的趋势或结果,例如股价变动。
在本文中,我们将使用 Blue Sky 的数据,因为它是一个新兴的社交媒体平台,并且其数据对于理解特定社区的情绪非常有用。
Blue Sky和Gemini模型介绍
Blue Sky: Blue Sky 是一个快速发展的社交媒体平台,可以被看作是 Twitter (或者说 X) 的替代品。它提供了一个公开的 API,方便开发者获取平台上的数据,从而进行情感分析等应用。

Blue Sky 的用户群体和内容生态使其成为分析特定话题或行业情绪的理想选择。由于其相对较新的身份,对 Blue Sky 进行情感分析可以揭示其他平台可能无法捕捉到的新兴趋势和观点。
Gemini: Google Gemini 是一系列强大的多模态人工智能模型,能够理解和生成文本、图像、音频等。在本教程中,我们将使用 Gemini 1.5 Flash,当然,你也可以选择最新的Gemini 2.0模型。Gemini 模型能够分析文本的情感倾向,判断其是积极、消极还是中性。Gemini 提供的 API 接口使得开发者能够方便地将情感分析功能集成到自己的应用程序中。 Gemini 1.5 Flash 和 Gemini 2.0 都使用了 Google AI Studio 这个网站。
这两个工具的结合,使我们能够构建一个高效且精确的 股票市场情感分析管道。
快速入门的先决条件
要开始构建 AI 情感分析管道,需要满足以下先决条件:
-
Blue Sky 账号:访问 bsky.app 注册一个免费账号。

-
Google AI Studio 账号和 Gemini API 密钥:
-
访问 aistudio.google.com 并使用 Google 账号登录。

-
点击右上角的 "Gemini API"。
-
按照提示获取 Gemini API 密钥。
-
请务必妥善保管您的 API 密钥,不要公开分享。获取API 密钥之后,需要记录API Key,并在使用到API Key的地方填写。
准备Python环境
在开始编写代码之前,需要确保你的 Python 环境配置正确。以下是一些必要的 Python 库:
- requests: 用于发送 HTTP 请求,方便与 Blue Sky API 交互。
- pandas: 用于数据处理和分析,能够方便地操作从 Blue Sky 抓取的数据。
- google-generativeai: 用于与 Google Gemini 模型交互,进行情感分析。
- typing-extensions: 提供类型提示扩展,增加代码的可读性和可维护性。
-
plotly: 用于创建交互式图表,可视化情感分析结果。

可以使用 pip 命令安装这些库:
pip install requests pandas google-generativeai typing-extensions plotly
安装完成后,就可以开始编写 Python 代码,构建 AI 情感分析管道。
Python代码实现社交媒体情感分析
首先,需要在代码中导入所需的库

:
import requests import pandas as pd import google.generativeai as genai import enum from typing_extensions import TypedDict import json import plotly.express as px
接下来,需要配置 Blue Sky 账号信息和 Gemini API 密钥:
BLUESKY_HANDLE = 'your_bluesky_handle' BLUESKY_PASSWORD = 'your_bluesky_password' genai.configure(api_key='your_gemini_api_key')
请将 your_bluesky_handle、your_bluesky_password 和 your_gemini_api_key 替换为您的实际信息。为了安全起见,请不要将这些敏感信息直接写入代码,而是使用环境变量等方式进行管理。
然后,设置 Gemini 模型 :
model = genai.GenerativeModel('gemini-1.5-flash')
设置要分析的股票代码和抓取的帖子数量:
search_term = 'ADBE' n = 100
使用 Blue Sky API 抓取数据:
auth_response = requests.post(
'https://bsky.social/xrpc/com.atproto.server.createSession',
json={'identifier': BLUESKY_HANDLE, 'password': BLUESKY_PASSWORD}
)
auth_response.raise_for_status()
access_token = auth_response.json().get('accessJwt')
headers = {'Authorization': f'Bearer {access_token}'}
params = {
'q': search_term,
'sort': 'latest',
'limit': n
}
search_response = requests.get(
'https://bsky.social/xrpc/app.bsky.feed.searchPosts',
headers=headers,
params=params
)
search_response.raise_for_status()
posts = search_response.json().get('posts', [])
提取数据并创建字典列表:
data = []
for post in posts:
author = post.get('author').get('handle', 'Unknown')
content = post.get('record').get('text', 'No content')
created_at = post.get('record').get('createdAt', 'Unknown date')
data.append({'Date': created_at, 'Content': content, 'Author': author})
df = pd.DataFrame(data)
df['Date'] = pd.to_datetime(df['Date'], errors='coerce')
对抓取的数据进行预处理,提取作者、内容和创建时间等信息,并将其存储在一个 Pandas DataFrame 中。 定义情感分析函数 :
class Sentiment(enum.Enum):
POSITIVE = "positive"
NEGATIVE = "negative"
NEUTRAL = "neutral"
class AnalysisResult(TypedDict):
is_stock_related: bool
sentiment: Sentiment
def analyze_post(content: str) -> AnalysisResult:
prompt = f"""
Analyze the following post and determine:
1. Whether it is related to the company, {search_term}, and relates to or discusses
past, current, or future stock performance of {search_term} explicitly.
2. If related, classify the sentiment as positive, negative, or neutral.
Post: """{content}
response = model.generate_content(
prompt,
generation_config=genai.GenerationConfig(temperature=0.0),
response_mime_type='application/json',
response_schema=AnalysisResult
)
if response.candidates:
candidate_content = response.candidates[0].content
result_text = ''.join(part.text for part in candidate_content.parts)
try:
result = json.loads(result_text)
is_stock_related = result.get('is_stock_related')
sentiment = result.get('sentiment')
if is_stock_related is not None and sentiment is not None:
return is_stock_related, sentiment
else:
print("Missing expected keys in the response")
return None, None
except json.JSONDecodeError:
print("Failed to decode JSON response")
return None, None
else:
print("No candidates returned")
return None, None
通过 Prompt 指定模型返回json格式, 并且通过 response_schema=AnalysisResult 限定返回的数据结构类型,保证返回的数据一定是我们定义的格式。再通过对返回内容进行Json解析,如果解析失败,则给到一定的报错。代码容错性很强!
应用情感分析:
df[['is_stock_related', 'sentiment']] = df['Content'].apply(lambda x: pd.Series(analyze_post(x)))
删除 “Author” 列 :
df.drop(columns='Author', inplace=True)
对数据进行过滤,提取出积极的情感:
filtered_df = df[df['sentiment'] != 'neutral']
提取日期并计算每日积极情感得分:
filtered_df['Day'] = filtered_df['Date'].dt.date
daily_sentiment = filtered_df.groupby('Day')['sentiment'].apply(lambda x: (x == 'positive').sum() / len(x)).reset_index(name='positive_sentiment_score')
使用 Plotly 可视化情绪得分:
fig = px.line(
daily_sentiment,
x='Day',
y='positive_sentiment_score',
title='Daily Positive Sentiment Score',
labels={'positive_sentiment_score': 'Positive Sentiment Score', 'Day': 'Date'},
markers=True
)
fig.update_xaxes(dtick="D", tickformat='%Y-%m-%d')
fig.show()
利用时间序列数据提高预测能力
时间序列分析介绍
将每天的情感数据聚合之后,我们可以利用时间序列分析来提高我们预测的能力。接下来将会展示一种利用历史数据预测将来情感指数的方法。 我们将利用一种简单的时间序列模型,叫做 移动平均模型。
在Jupyter中编写如下代码, 创建时间序列数据 :
#时间序列数据的划分
train_data = daily_sentiment[:int(0.8*(len(daily_sentiment)))]
test_data = daily_sentiment[int(0.8*(len(daily_sentiment))):]
#设置移动平均模型
def moving_average(series, n):
return np.convolve(series, np.ones(n), 'valid') / n
# 设置移动平均窗口大小
window_size = 3
#利用历史训练数据,对测试集数据进行平滑
mov_avg = moving_average(train_data['positive_sentiment_score'], window_size)
plt.figure(figsize=(12,6))
plt.plot(train_data['positive_sentiment_score'], label='Train Data')
plt.plot(test_data['positive_sentiment_score'], label='Test Data')
plt.plot(range(window_size - 1, len(train_data)), mov_avg, label='Moving Average')
plt.legend()
plt.show()
在时间序列模型中,数据划分是至关重要的一步。训练数据用于模型的学习和参数调整,而测试数据则用于评估模型在未见过的数据上的表现。一般情况下,我们会将大部分数据用于训练,而将剩余部分用于测试。
移动平均模型通过计算过去一段时间内数据的平均值来平滑时间序列。这种方法可以有效地去除数据中的噪音,从而凸显出潜在的趋势。 结果图如下: [在这里可以放一个时间序列图]
更高级时间序列方法介绍: 时间序列分析不仅仅局限于移动平均模型。还有很多更加高级和复杂的方法可以用于提高预测的准确性和可靠性。这些方法包括:
- ARIMA 模型: ARIMA 模型(自回归积分移动平均模型)是一类广泛使用的时间序列模型,它可以捕捉数据中的自相关性和趋势。ARIMA 模型由三个参数组成:p(自回归项的阶数)、d(差分阶数)和 q(移动平均项的阶数)。通过合理选择这些参数,ARIMA 模型可以很好地拟合各种类型的时间序列数据。
- Prophet 模型: Prophet 是 Facebook 开发的一种专门用于预测具有季节性趋势的时间序列数据的模型。Prophet 模型具有良好的可解释性和易用性,可以自动处理缺失值和异常值。它特别适用于具有强烈季节性变化的数据,例如零售销售额和网站流量。
- LSTM 神经网络: 长短期记忆网络(LSTM)是一种特殊的循环神经网络(RNN),它可以有效地处理长期依赖关系。LSTM 神经网络在时间序列预测中表现出色,尤其是在处理非线性数据和复杂模式时。虽然 LSTM 神经网络的训练和调优可能比较复杂,但它们可以提供非常准确的预测结果。
如何使用
使用 Blue Sky Web Scraper
- 在 bsky.app 注册一个免费账号 。
- 登录到您的帐户。
- 转到 Google AI Studio 网站,网址为 aistudio.google.com 。
- 单击屏幕右上角的 Gemini API。
- 填写所有必填信息,直到您拥有可用的 Gemini API 密钥。
- 安装本指南中突出显示的要求和库 。
- 将提供的 Jupyter Notebook 导入您喜欢的 IDE。
- 将您的 BlueSky 处理代码和密码粘贴到脚本顶部的指定行中 。
- 同样,将您的 Gemini API 密钥粘贴到脚本顶部的指定行中。
- 选择要用于分析情绪的模型。将股票代码设置为您希望分析的公司,然后选择要抓取的最新 BlueSky 帖子数量。
- 运行脚本的单元格。这将抓取、处理数据并运行情绪分析。
定价
Gemini API免费和付费计划
Gemini API 提供免费和付费两种计划。

免费计划提供有限的 API 调用次数,而付费计划则提供更高的调用限额和更快的响应速度。
| 计划 | 价格 | 速率限制 | 输入定价 | 输出定价 |
|---|---|---|---|---|
| 免费 | 免费 | 15 RPM(每分钟请求数), 1,500 RPD(每天请求数) | 免费 | 免费 |
| Pay-as-you-go | 按需付费 | 2,000 RPM(每分钟请求数) | $0.075 / 1百万tokens | $0.30 / 1百万tokens |
对于本教程中的示例,使用免费计划应该足够。但如果需要处理大量数据,则可能需要考虑付费计划。
优点与缺点
? Pros快速捕捉市场情绪: 能够及时了解社交媒体上对特定股票的看法。
辅助决策: 为投资者提供更全面的信息,辅助其做出更明智的决策。
可扩展性: 可以扩展到其他领域,例如品牌声誉管理和政治倾向分析。
自动化: 自动化数据抓取和情感分析过程,提高效率。
? Cons数据质量: 社交媒体数据质量参差不齐,可能包含噪音和虚假信息。
模型准确性: 情感分析模型可能存在误差,无法完全准确地判断文本的情感倾向。
计算成本: 使用 Gemini API 可能需要支付一定的费用,特别是对于大型项目。
技术门槛: 构建和维护 AI 情感分析管道需要一定的技术知识和经验。
核心功能
情感分析管道的关键特性
AI情感分析管道结合了多种强大的功能,使其成为一个有价值的工具:
- 社交媒体数据抓取: 自动从 Blue Sky 抓取与特定股票相关的帖子。
- 情感分析: 使用 Gemini 模型分析帖子的情感倾向,判断其是积极、消极还是中性。
- 数据结构化: 将抓取的数据和情感分析结果整理成结构化的 Pandas DataFrame,方便后续分析和可视化。
- 可扩展性: 可以轻松扩展到其他社交媒体平台和情感分析模型。
- 可视化: 使用 Plotly 创建交互式图表,可视化情感分析结果。
用例
情感分析管道的应用场景
股票趋势预测: 利用社交媒体情绪来预测股票价格的短期波动。
品牌声誉管理: 监控社交媒体上对特定品牌的评价,及时了解消费者对其产品的态度。
政治倾向分析: 分析公众对特定政治人物或政策的看法,为政治决策提供参考。
市场调查: 收集和分析消费者对新产品的反馈,为产品开发和营销策略提供依据。
危机管理: 监测社交媒体上的负面评论和危机事件,及时采取措施,维护品牌形象。

总之,AI情感分析管道是一个功能强大的工具,可以用于各种领域,帮助企业和个人更好地理解和应对复杂的情感数据。
常见问题解答
这个 AI 情感分析管道需要哪些技术?
这个 AI 情感分析管道主要使用 Python 编程语言,并依赖于 requests, pandas, google-generativeai, typing-extensions, plotly 这些库。 其中: requests 库用于进行网络请求,从 Blue Sky API 获取数据。 pandas 库用于数据处理和分析,特别是 DataFrame 的创建和操作。 google-generativeai 库用于与 Google 的 Gemini AI 模型进行交互。 typing-extensions 库提供类型提示,增加代码的可读性和可维护性。 plotly 库用于数据可视化,可以生成各种交互式图表。
使用 Gemini API 需要付费吗?
Google Gemini API 提供免费和付费两种计划。 免费计划提供有限的 API 调用次数和功能,适合小型项目和测试。付费计划则提供更高的调用限额、更快的响应速度和更多的功能,适合大型项目和商业应用。具体定价信息可以参考 Google AI Studio 网站。
我可以使用其他社交媒体平台的数据吗?
当然可以。AI 情感分析管道的设计具有灵活性,可以适应不同的数据源。只需要修改数据抓取部分的代码,使其能够从其他社交媒体平台获取数据即可。需要注意的是,不同平台的 API 接口和数据格式可能不同,需要进行相应的调整。
相关问题
如何提高情感分析的准确性?
情感分析的准确性受到多种因素的影响,例如数据质量、模型选择和参数调整。以下是一些提高情感分析准确性的方法: 数据清洗:对抓取的数据进行清洗和预处理,去除噪音和无关信息。例如,去除 HTML 标签、特殊字符和停用词。 模型选择:选择适合特定任务和数据的情感分析模型。例如,可以使用针对金融领域数据训练的模型。 参数调整:调整 Gemini 模型的参数,例如温度 (temperature) 和最大输出长度 (maxOutputTokens),以优化其性能。 温度越低,模型输出越确定性,适合需要精确结果的任务。但通常不用修改,默认效果就很好。 数据增强:通过增加训练数据来提高模型的泛化能力。例如,可以使用数据增强技术生成更多样化的文本数据。 Prompt优化:Prompt是影响大语言模型效果的关键,直接描述你的需求,并告诉模型返回json格式。










