【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实现股票数据可视化代码——数据.py
https://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模型 是一家由中国知名量化私募巨头幻方量化创立的人工智能公司,致力于开发高效、高性能…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
Python学习(8) ----- Python的类与对象
Python 中的类(Class)与对象(Object)是面向对象编程(OOP)的核心。我们可以通过“类是模板,对象是实例”来理解它们的关系。 🧱 一句话理解: 类就像“图纸”,对…...
ThreadLocal 源码
ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些类希望将…...
