【DeepSeek开发】Python实现股票数据可视化
代码:
Github:Python实现股票数据可视化代码https://github.com/magolan2000/Data-visualization/tree/master
软件环境:PyCharm 2022.3.1
数据来源:akshare
最近DeepSeek可谓是热度不断,因此想评判一下DeepSeek的编程能力到底如何。虽然最近DeepSeek的服务器并不是很稳定,大概每问2至3次就会显示服务器繁忙,不过显示内容的数量和质量还是非常不错的。
与GPT4进行比较的话,同样的问题GPT4可能会出现偷懒的情况,例如生成的代码大概率只生成一个代码的大致框架,如果不详细提问就不会生成完整的代码。即使最近几天ChatGPT也同样加入了类似于DeepSeek的深度思考(R1)与联网搜索功能,但是其效果还是欠佳,而且ChatGPT的推理过程即使你用中文提问但推理过程还是显示用英文在思考。
ChatGPT暂时的优势就是有大量的插件和优秀简约的界面,例如生成长代码时会自动进入画布模式,可以在画布模式中修改运行代码,是一个小型简约的编辑器,方便将完全优化好后的代码导入至其他编辑器运行,避免利用AI修改优化代码时需要反复在浏览器和编辑器之间跳转。
DeepSeek就不过多介绍了,它的蓝紫色小鲸鱼图标与Docker图标还蛮像的,下面展示一下生成的股票数据可视化后的代码与结果。
一、股票数据可视化
1.1代码
Python实现股票数据可视化代码——数据.pyhttps://download.csdn.net/download/m0_53095310/90339747 下面给出股票数据可视化的部分代码:
# -*- coding: utf-8 -*-
import os
import pandas as pd
import akshare as ak
from datetime import datetime
import logging
from concurrent.futures import ThreadPoolExecutor, as_completed
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm# ==================== 用户配置部分 ====================
# A股股票代码列表(示例:贵州茅台、宁德时代)
a_stock_symbols = ["600519", "300750","601899"] # 支持数字或带后缀的代码(如600519.SH)# 时间范围
start_date = "2020-01-01"
end_date = datetime.now().strftime("%Y-%m-%d")# 数据保存路径
save_dir = "./stock_data" # 数据存储主目录
a_stock_dir = os.path.join(save_dir, "A股数据") # A股数据子目录
plot_dir = os.path.join(save_dir, "可视化图表") # 可视化图表目录# 创建目录(如果不存在)
os.makedirs(a_stock_dir, exist_ok=True)
os.makedirs(plot_dir, exist_ok=True)# 配置日志
logging.basicConfig(level=logging.INFO,format="%(asctime)s - %(levelname)s - %(message)s",handlers=[logging.FileHandler(os.path.join(save_dir, "stock_data.log")), # 日志文件logging.StreamHandler() # 控制台输出]
)# 设置中文字体
try:# Windows 系统使用黑体plt.rcParams["font.sans-serif"] = ["SimHei"]# macOS 或 Linux 系统使用 Arial Unicode MS 或文泉驿字体# plt.rcParams["font.sans-serif"] = ["Arial Unicode MS"] # macOS# plt.rcParams["font.sans-serif"] = ["WenQuanYi Zen Hei"] # Linuxplt.rcParams["axes.unicode_minus"] = False # 解决负号显示问题
except Exception as e:logging.error(f"字体设置失败: {e}")# ======================================================def fetch_a_stock_data(symbol, retries=3):"""通过AKShare获取单只A股数据(后复权)"""for attempt in range(retries):try:# 去掉股票代码的后缀(如 .SH 或 .SZ)symbol_clean = symbol.split(".")[0]# 获取数据df = ak.stock_zh_a_hist(symbol=symbol_clean, period="daily", adjust="hfq")if df.empty:logging.warning(f"[A股] 数据为空({symbol_clean})")return None# 重命名列df.rename(columns={"日期": "Date","开盘": "Open","收盘": "Close","最高": "High","最低": "Low","成交量": "Volume"}, inplace=True)# 转换日期格式并设置为索引df["Date"] = pd.to_datetime(df["Date"])df.set_index("Date", inplace=True)logging.info(f"[A股] 数据获取成功({symbol_clean})")return dfexcept Exception as e:if attempt < retries - 1:logging.warning(f"[A股] 数据获取失败({symbol_clean}),第 {attempt + 1} 次重试...")else:logging.error(f"[A股] 数据获取失败({symbol_clean}): {e}")return Nonedef clean_data(df):"""数据清洗:处理缺失值和异常值"""if df is None or df.empty:return None# 1. 删除完全缺失的行df_clean = df.dropna(how="all")# 2. 处理零成交量(视为停牌/无效数据)df_clean = df_clean[df_clean["Volume"] > 0]# 3. 处理价格异常值(如价格<=0或单日涨跌幅超过50%)price_columns = ["Open", "High", "Low", "Close"]for col in price_columns:df_clean = df_clean[df_clean[col] > 0] # 删除价格为负或零的异常记录# 检查清洗后的数据是否为空if df_clean.empty:logging.warning("数据清洗后为空,可能全部为异常值")return Nonereturn df_cleandef save_to_csv(df, symbol):"""保存清洗后的数据到CSV文件"""if df is None or df.empty:logging.warning(f"无有效数据可保存({symbol})")return# 保存路径save_path = os.path.join(a_stock_dir, f"{symbol}.csv")df.to_csv(save_path, encoding="utf-8-sig") # 兼容中文路径logging.info(f"数据已保存至:{save_path}")
1.2数据可视化
1.3分析
该代码的主要功能是通过akshare库获取A股股票的历史数据,进行数据清洗、保存和可视化。
函数 | 解释 |
fetch_a_stock_data | 获取单只股票的历史数据 |
clean_data | 清洗数据,处理缺失值和异常值 |
save_to_csv | 将清洗后的数据保存为CSV文件 |
plot_stock_data | 绘制股票价格走势图并保存为PNG文件 |
process_single_stock | 处理单只股票的完整流程(获取、清洗、保存、可视化) |
batch_process_a_stocks | 批量处理所有股票代码(使用多线程) |
二、功能丰富的静态行情图
2.1代码
除了收盘价以外,行情图添加了5日均线、10日均线和20日均线,包括不同时间段的成交量数据,下面给出股票行情数据可视化的部分代码:
# ======================================================
def fetch_a_stock_data(symbol, retries=3):"""通过AKShare获取单只A股数据(后复权)"""for attempt in range(retries):try:# 去掉股票代码的后缀(如 .SH 或 .SZ)symbol_clean = symbol.split(".")[0]# 获取数据df = ak.stock_zh_a_hist(symbol=symbol_clean, period="daily", adjust="hfq")if df.empty:logging.warning(f"[A股] 数据为空({symbol_clean})")return None# 重命名列df.rename(columns={"日期": "Date","开盘": "Open","收盘": "Close","最高": "High","最低": "Low","成交量": "Volume"}, inplace=True)# 转换日期格式并设置为索引df["Date"] = pd.to_datetime(df["Date"])df.set_index("Date", inplace=True)logging.info(f"[A股] 数据获取成功({symbol_clean})")return dfexcept Exception as e:if attempt < retries - 1:logging.warning(f"[A股] 数据获取失败({symbol_clean}),第 {attempt + 1} 次重试...")else:logging.error(f"[A股] 数据获取失败({symbol_clean}): {e}")return Nonedef clean_data(df):"""数据清洗:处理缺失值和异常值"""if df is None or df.empty:return None# 1. 删除完全缺失的行df_clean = df.dropna(how="all")# 2. 处理零成交量(视为停牌/无效数据)df_clean = df_clean[df_clean["Volume"] > 0]# 3. 处理价格异常值(如价格<=0或单日涨跌幅超过50%)price_columns = ["Open", "High", "Low", "Close"]for col in price_columns:df_clean = df_clean[df_clean[col] > 0] # 删除价格为负或零的异常记录# 检查清洗后的数据是否为空if df_clean.empty:logging.warning("数据清洗后为空,可能全部为异常值")return Nonereturn df_cleandef save_to_csv(df, symbol):"""保存清洗后的数据到CSV文件"""if df is None or df.empty:logging.warning(f"无有效数据可保存({symbol})")return# 保存路径save_path = os.path.join(a_stock_dir, f"{symbol}.csv")df.to_csv(save_path, encoding="utf-8-sig") # 兼容中文路径logging.info(f"数据已保存至:{save_path}")def plot_stock_data(df, symbol):"""专业级股票行情走势图"""if df is None or df.empty:logging.warning(f"无有效数据可绘制({symbol})")return
2.2数据可视化
2.3分析
调用batch_process_a_stocks()
函数,批量处理用户配置的A股股票数据。处理完成后,记录日志信息。
三、具有可交互界面的行情图
3.1代码
# ==================== 布局设计 ====================
app.layout = html.Div([html.Div([html.H1("专业级股票分析系统", style={'color': 'white'}),html.Div([dcc.Input(id='stock-input',type='text',value='600519',placeholder='输入股票代码',style={'width': '150px', 'margin-right': '10px'}),dcc.DatePickerRange(id='date-picker',min_date_allowed=datetime(2010, 1, 1),max_date_allowed=datetime.today(),start_date=datetime.today() - timedelta(days=365),end_date=datetime.today(),display_format='YYYY-MM-DD'),dcc.Dropdown(id='indicator-selector',options=[{'label': 'MACD', 'value': 'MACD'},{'label': 'RSI', 'value': 'RSI'},{'label': '布林线', 'value': 'BOLL'},],value=['MACD'],multi=True,style={'width': '300px', 'margin-left': '10px'})], style={'padding': '20px', 'backgroundColor': '#1a1a1a'})]),dcc.Loading(id="loading",type="circle",children=[dcc.Graph(id='main-chart', style={'height': '600px'}),dcc.Interval(id='interval-component', interval=60 * 1000, n_intervals=0)])
], style={'backgroundColor': '#1a1a1a', 'height': '100vh'})
3.2数据可视化
可交互界面设计的不错,颜色搭配效果很好,不仅添加了时间区间设置功能,还可以任意选择股票代码查看股票行情的历史数据,鼠标移动至折线图上会有详细的数据展示。
相关文章:

【DeepSeek开发】Python实现股票数据可视化
代码: Github:Python实现股票数据可视化代码https://github.com/magolan2000/Data-visualization/tree/master 软件环境:PyCharm 2022.3.1 数据来源:akshare 最近DeepSeek可谓是热度不断,因此想评判一下DeepSeek的编程…...

华为小米vivo向上,苹果荣耀OPPO向下
日前,Counterpoint发布的手机销量月度报告显示,中国智能手机销量在2024年第四季度同比下降3.2%,成为2024年唯一出现同比下滑的季度。而对于各大智能手机品牌来说,他们的市场份额和格局也在悄然发生变化。 华为逆势向上 在2024年第…...

毕业设计:基于深度学习的高压线周边障碍物自动识别与监测系统
目录 前言 课题背景和意义 实现技术思路 一、算法理论基础 1.1 卷积神经网络 1.2 目标检测算法 1.3 注意力机制 二、 数据集 2.1 数据采集 2.2 数据标注 三、实验及结果分析 3.1 实验环境搭建 3.2 模型训练 3.2 结果分析 最后 前言 📅大四是整个大学…...

el-table表格点击单元格实现编辑
使用 el-table 和 el-table-column 创建表格。在单元格的默认插槽中,使用 div 显示文本内容,单击时触发编辑功能。使用 el-input 组件在单元格中显示编辑框。data() 方法中定义了 tableData,tabClickIndex: null,tabClickLabel: ,用于判断是否…...

数据结构:时间复杂度
文章目录 为什么需要时间复杂度分析?一、大O表示法:复杂度的语言1.1 什么是大O?1.2 常见复杂度速查表 二、实战分析:解剖C语言代码2.1 循环结构的三重境界单层循环:线性时间双重循环:平方时间动态边界循环&…...

SPI(Serial Peripheral Interface)串行外围设备接口
SPI概述: SPI协议最初由Motorola公司(现为NXP Semiconductors的一部分)在20世纪80年代中期开发。最初是为了在其68000系列微控制器中实现高速、高效的串行通信。该协议旨在简化微控制器与外围设备之间的数据传输。 1980年代:SPI协…...

Java 8 Stream API
通过 Stream.of 方法直接传入多个元素构成一个流 String[] arr {“a”, “b”, “c”}; Stream.of(arr).forEach(System.out::println); Stream.of(“a”, “b”, “c”).forEach(System.out::println); Stream.of(1, 2, “a”).map(item -> item.getClass().getName()…...

亚博microros小车-原生ubuntu支持系列:21 颜色追踪
背景知识 这个测试例子用到了很多opencv的函数,举个例子。 #cv2.findContours函数来找到二值图像中的轮廓。#参数:#参数1:输 入的二值图像。通常是经过阈值处理后的图像,例如在颜色过滤之后生成的掩码。#参数2(cv2.RETR_EXTERNA…...

GESP6级语法知识(六):(动态规划算法(六)多重背包)
多重背包(二维数组) #include <iostream> using namespace std; #define N 1005 int Asd[N][N]; //Asd[i][j]表示前 i 个物品,背包容量是 j 的情况下的最大价值。 int Value[N], Vol[N], S[N];int main() {int n, Volume;cin &g…...

MySQL 事务实现原理( 详解 )
MySQL 主要是通过: 锁、Redo Log、Undo Log、MVCC来实现事务 事务的隔离性利用锁机制实现 原子性、一致性和持久性由事务的 redo 日志和undo 日志来保证。 Redo Log(重做日志):记录事务对数据库的所有修改,在崩溃时恢复未提交的更改,保证事务…...
AI协助探索AI新构型自动化创新的技术实现
一、AI自进化架构的核心范式 1. 元代码生成与模块化重构 - 代码级自编程:基于神经架构搜索的强化学习框架,AI可通过生成元代码模板(框架的抽象层定义)自动组合功能模块。例如,使用注意力机制作为原子单元ÿ…...

九. Redis 持久化-RDB(详细讲解说明,一个配置一个说明分析,步步讲解到位)
九. Redis 持久化-RDB(详细讲解说明,一个配置一个说明分析,步步讲解到位) 文章目录 九. Redis 持久化-RDB(详细讲解说明,一个配置一个说明分析,步步讲解到位)1. RDB 概述2. RDB 持久化执行流程3. RDB 的详细配置4. RDB 备份&恢…...
mac连接linux服务器
1、mac连接linux服务器 # ssh -p 22 root192.168.1.152、mac指定密码连接linux服务器 (1) 先安装sshpass,下载后解压执行 ./configure && make && makeinstall https://sourceforge.net/projects/sshpass/ (2) 连接linux # sshpass -p \/\\\[\!\\wen12\$ s…...

oracle: 表分区>>范围分区,列表分区,散列分区/哈希分区,间隔分区,参考分区,组合分区,子分区/复合分区/组合分区
分区表 是将一个逻辑上的大表按照特定的规则划分为多个物理上的子表,这些子表称为分区。 分区可以基于不同的维度,如时间、数值范围、字符串值等,将数据分散存储在不同的分区 中,以提高数据管理的效率和查询性能,同时…...

使用Pygame制作“走迷宫”游戏
1. 前言 迷宫游戏是最经典的 2D 游戏类型之一:在一个由墙壁和通道构成的地图里,玩家需要绕过障碍、寻找通路,最终抵达出口。它不但简单易实现,又兼具可玩性,还能在此基础上添加怪物、道具、机关等元素。本篇文章将展示…...

AJAX案例——图片上传个人信息操作
黑马程序员视频地址: AJAX-Day02-11.图片上传https://www.bilibili.com/video/BV1MN411y7pw?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p26 图片上传 <!-- 文件选择元素 --><input type"file"…...

Day35-【13003】短文,什么是双端队列?栈和队列的互相模拟,以及解决队列模拟栈时出栈时间开销大的方法
文章目录 第三节进一步讨论栈和队列双端队列栈和队列的相互模拟使用栈来模拟队列类型定义入队出队判空,判满 使用队列来模拟栈类型定义初始化清空操作判空,判满栈长度输出入栈出栈避免出栈时间开销大的方法 第三节进一步讨论栈和队列 双端队列 假设你芷…...
力扣 55. 跳跃游戏
🔗 https://leetcode.cn/problems/jump-game 题目 给一个数组 nums,最开始在 index 0,每次可以跳跃的区间是 0-nums[i]判断是否可以跳到数组末尾 思路 题解是用贪心,实际上模拟也可以过遍历可以到达的下标,判断其可…...
深入剖析 HTML5 新特性:语义化标签和表单控件完全指南
系列文章目录 01-从零开始学 HTML:构建网页的基本框架与技巧 02-HTML常见文本标签解析:从基础到进阶的全面指南 03-HTML从入门到精通:链接与图像标签全解析 04-HTML 列表标签全解析:无序与有序列表的深度应用 05-HTML表格标签全面…...

本地快速部署DeepSeek-R1模型——2025新年贺岁
一晃年初六了,春节长假余额马上归零了。今天下午在我的电脑上成功部署了DeepSeek-R1模型,抽个时间和大家简单分享一下过程: 概述 DeepSeek模型 是一家由中国知名量化私募巨头幻方量化创立的人工智能公司,致力于开发高效、高性能…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...

goreplay
1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具,可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长,测试它所需的工作量也会呈指数级增长。GoRepl…...