跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

基于 Python 与 LLM 的股价数据分析与预测实践

演示了如何使用 Python 结合 akshare 获取股票数据,利用 LLM 辅助分析股价趋势。流程涵盖数据清洗、特征处理、可视化绘图及智能报告生成。重点介绍了在金融场景下集成大语言模型的方法,同时强调了技术局限性与风险提示。内容包含完整的代码示例与环境配置指南,适合希望了解 AI 在量化分析中应用的开发者阅读。

指针猎手发布于 2025/2/6更新于 2026/7/2337 浏览
基于 Python 与 LLM 的股价数据分析与预测实践

基于 Python 与 LLM 的股价数据分析与预测实践

引言

在金融量化分析领域,利用 Python 进行数据获取与处理已成为标准流程。随着大语言模型(LLM)技术的发展,将其引入股价趋势分析与辅助决策也成为新的探索方向。本文将以中远海控(601919.SH)为例,演示如何结合 akshare 获取历史数据,使用机器学习思路进行预处理,并尝试利用 LLM 生成市场分析报告。请注意,LLM 并非专业的时序预测模型,直接用于精确价格预测存在局限性,本教程旨在展示技术集成的流程而非提供投资建议。

环境准备

在开始之前,请确保已安装以下 Python 依赖库:

pip install akshare pandas matplotlib seaborn openai requests

此外,需要配置好环境变量以访问大模型 API(如 OpenAI 或国内等效服务)。

1. 获取股票数据

我们使用 akshare 库获取 A 股日线行情数据。该库支持实时获取中国股市的历史交易数据。

1.1 代码实现

import akshare as ak
import datetime

# 获取当前日期
end_date = datetime.date.today().strftime("%Y%m%d")
start_date = "20240101"

# 获取中远海控 (601919.SH) 日线数据
symbol = "601919.SH"
cosco_daily_data_2024 = ak.stock_zh_a_daily(symbol=symbol, start_date=start_date, end_date=end_date)

print(f"获取到 {len(cosco_daily_data_2024)} 条数据")
print(cosco_daily_data_2024.head())

此步骤将返回包含日期、开盘价、收盘价、最高价、最低价等字段的 DataFrame。我们将重点关注 date 和 close 字段。

2. 数据预处理

原始数据可能存在缺失值或格式问题,需进行清洗以适应后续分析。

2.1 数据处理函数

定义函数对数据进行重采样、填充及截取最近 N 天数据。

import pandas as pd

def data_processor(data):
    # 设置索引为日期
    df = data.set_index('date')
    # 转换为日期类型
    df.index = pd.to_datetime(df.index)
    # 按日频率重采样,前向填充缺失值
    df = df.asfreq('D').fillna(method='ffill')
    
     df.iloc[-:]

processed_data = data_processor(cosco_daily_data_2024[[, ]])
# 仅保留最近 30 天的数据作为上下文
return
30
'date'
'close'

2.2 特征工程说明

在实际的量化策略中,通常会计算更多技术指标(如 MA, MACD, RSI)。在本示例中,为了简化 LLM 的输入复杂度,我们主要传递收盘价序列。若需更精准的分析,建议将计算好的指标也加入 Prompt 中。

3. 集成 LLM 进行分析

由于 LLM 不具备原生时间序列预测能力,我们采用'数据 + 提示词'的方式,让模型基于提供的统计特征和历史趋势生成定性分析及简单的数值推演。

3.1 构建提示词

我们需要将关键统计数据转化为自然语言描述,发送给 LLM。

import os

# 模拟 LLM 客户端调用
# 实际使用时请替换为真实的 API 调用逻辑,例如 openai.ChatCompletion.create

def call_llm_analysis(historical_price, predicted_price, change_rate):
    prompt = f"""
    你是一名资深金融分析师。根据以下数据:
    - 最后一个历史收盘价:{historical_price:.2f}
    - 预测第 5 天收盘价:{predicted_price:.2f}
    - 预测期间变化率:{change_rate:.2f}%
    
    请给出简短的市场分析和投资建议。注意:这仅是基于数据的模拟分析,不构成真实投资依据。
    """
    # 此处应调用 llm_client.chat(prompt)
    # 为演示方便,此处返回模拟结果
    return "基于近期走势,股价呈现震荡上行趋势,建议关注成交量变化。"

# 模拟预测数据
last_historical_price = processed_data['close'].iloc[-1]
predicted_price = last_historical_price * 1.02  # 假设上涨 2%
change_rate = 2.0

analysis_text = call_llm_analysis(last_historical_price, predicted_price, change_rate)

3.2 关于预测准确性的说明

必须明确的是,直接使用 LLM 输出具体数字进行股价预测在学术界和工业界均被视为高风险行为。LLM 擅长文本理解和逻辑推理,但不擅长数学计算和时序外推。更稳健的做法是:

  1. 使用传统机器学习模型(如 LSTM, XGBoost)进行数值预测。
  2. 使用 LLM 对预测结果进行解读和报告生成。

4. 数据可视化

使用 matplotlib 和 seaborn 绘制历史股价与预测趋势对比图,直观展示数据变化。

4.1 字体配置

为确保中文正常显示,需针对不同操作系统配置字体。

import matplotlib.pyplot as plt
from matplotlib import font_manager
import platform

def configure_matplotlib_for_chinese():
    system = platform.system()
    if system == 'Windows':
        font_name = 'SimHei'
    elif system == 'Darwin':
        font_name = 'STHeiti'
    else:
        # Linux 常见字体路径
        font_path = '/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc'
        if os.path.exists(font_path):
            font_manager.fontManager.addfont(font_path)
            font_name = font_manager.FontProperties(fname=font_path).get_name()
        else:
            raise FileNotFoundError(f"Font file not found: {font_path}")
    
    plt.rcParams['font.sans-serif'] = [font_name]
    plt.rcParams['font.family'] = 'sans-serif'
    plt.rcParams['axes.unicode_minus'] = False

configure_matplotlib_for_chinese()

4.2 绘图与保存

# 合并数据
prediction_dates = pd.date_range(start=processed_data.index[-1] + pd.Timedelta(days=1), periods=5)
prediction_series = pd.Series([last_historical_price * (1 + i * 0.005) for i in range(1, 6)], index=prediction_dates)

plt.figure(figsize=(12, 6))
plt.plot(processed_data.index, processed_data['close'], label='历史收盘价', color='blue')
plt.plot(prediction_series.index, prediction_series.values, label='预测趋势', color='red', linestyle='--')

plt.title('中远海控股价历史数据与预测趋势')
plt.xlabel('日期')
plt.ylabel('收盘价')
plt.legend()
plt.grid(True, alpha=0.3)

# 保存图片
output_dir = 'output'
os.makedirs(output_dir, exist_ok=True)
file_name = os.path.join(output_dir, "stock_prediction.png")
plt.savefig(file_name)
plt.close()
print(f"图表已保存至:{file_name}")

5. 生成分析报告

整合上述数据与 LLM 分析结果,形成最终报告。

results = []
results.append(f"![股价预测图表]({file_name})")
results.append("## 主要发现")
results.append(f"1. 最后历史收盘价为:{last_historical_price:.2f}")
results.append(f"2. 预测期间变化率为:{change_rate:.2f}%")
results.append(f"3. LLM 分析观点:{analysis_text}")

final_report = "\n".join(results)
print(final_report)

6. 总结与风险提示

6.1 技术总结

本文完整展示了从数据获取、清洗、模型交互到可视化的全流程。通过 Python 生态工具链,可以快速搭建金融数据分析原型。重点在于理解 LLM 在其中的定位——它是分析助手而非预测引擎。

6.2 风险提示

  1. 数据风险:历史数据不代表未来表现,且 akshare 数据可能存在延迟。
  2. 模型风险:大语言模型存在幻觉问题,生成的数值不可完全信赖。
  3. 合规风险:任何自动化交易或投资建议需符合当地法律法规,请勿盲目跟单。

6.3 扩展建议

若需进一步提升精度,可考虑:

  • 接入更多维度的数据(如新闻情感分析、宏观经济指标)。
  • 使用专门的时序预测库(如 prophet, statsmodels)替代 LLM 进行数值计算。
  • 部署本地大模型以降低 API 成本并保护数据隐私。

本文仅供技术交流参考,不构成任何投资建议。

目录

  1. 基于 Python 与 LLM 的股价数据分析与预测实践
  2. 引言
  3. 环境准备
  4. 1. 获取股票数据
  5. 1.1 代码实现
  6. 获取当前日期
  7. 获取中远海控 (601919.SH) 日线数据
  8. 2. 数据预处理
  9. 2.1 数据处理函数
  10. 2.2 特征工程说明
  11. 3. 集成 LLM 进行分析
  12. 3.1 构建提示词
  13. 模拟 LLM 客户端调用
  14. 实际使用时请替换为真实的 API 调用逻辑,例如 openai.ChatCompletion.create
  15. 模拟预测数据
  16. 3.2 关于预测准确性的说明
  17. 4. 数据可视化
  18. 4.1 字体配置
  19. 4.2 绘图与保存
  20. 合并数据
  21. 保存图片
  22. 5. 生成分析报告
  23. 6. 总结与风险提示
  24. 6.1 技术总结
  25. 6.2 风险提示
  26. 6.3 扩展建议
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Neo4j 图数据库安装与操作指南
  • OpenClaw 接入自定义模型并通过 WebUI 实现智能操作
  • AI 大模型产品经理学习路线:从入门到精通
  • Coze 打造专属 AI 应用:从智能体到 Web 部署
  • 基于 Rokid AR 眼镜的会议纪要助手开发实录
  • C 语言代码优化与性能调优:编译器、内存与算法实战
  • 大模型时代:重构技术开发的生产与组织方式
  • AI Agent 开发入门:零基础也能学吗
  • S1: 仅 1k 样本,测试时扩展超越 OpenAI o1-preview 性能
  • Eino ADK 体系篇:ChatModelAgent 核心机制与实战解析
  • GPT、LLaMA 与 MOE:自回归模型与混合专家架构演进
  • 构建与 GitHub 深度集成的自动化工作流指南
  • 通义万相 2.1 API 调用实战:Python 实现文生图与文本生成
  • GitHub 启用双因素身份验证 2FA 配置教程
  • AI 印象派艺术工坊与 Stable Diffusion 对比:轻量部署案例评测
  • 网络通信与 TCP/IP 五层模型
  • 面向电力线场景的无人机尺度不变逼近检测器
  • Docker 部署 MySQL 8.0 完整指南:从拉取镜像到配置远程访问
  • Arthas+IDEA 实战:Java 线上问题排查与 Spring Boot 落地
  • Coze 获取对标行业新闻转视频文案写入飞书多维表实战

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online