当前位置: 首页 > news >正文

【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实现股票数据可视化

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

华为小米vivo向上,苹果荣耀OPPO向下

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

毕业设计:基于深度学习的高压线周边障碍物自动识别与监测系统

目录 前言 课题背景和意义 实现技术思路 一、算法理论基础 1.1 卷积神经网络 1.2 目标检测算法 1.3 注意力机制 二、 数据集 2.1 数据采集 2.2 数据标注 三、实验及结果分析 3.1 实验环境搭建 3.2 模型训练 3.2 结果分析 最后 前言 &#x1f4c5;大四是整个大学…...

el-table表格点击单元格实现编辑

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

数据结构:时间复杂度

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

SPI(Serial Peripheral Interface)串行外围设备接口

SPI概述&#xff1a; SPI协议最初由Motorola公司&#xff08;现为NXP Semiconductors的一部分&#xff09;在20世纪80年代中期开发。最初是为了在其68000系列微控制器中实现高速、高效的串行通信。该协议旨在简化微控制器与外围设备之间的数据传输。 1980年代&#xff1a;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的函数&#xff0c;举个例子。 #cv2.findContours函数来找到二值图像中的轮廓。#参数&#xff1a;#参数1&#xff1a;输 入的二值图像。通常是经过阈值处理后的图像&#xff0c;例如在颜色过滤之后生成的掩码。#参数2(cv2.RETR_EXTERNA…...

GESP6级语法知识(六):(动态规划算法(六)多重背包)

多重背包&#xff08;二维数组&#xff09; #include <iostream> using namespace std; #define N 1005 int Asd[N][N]; //Asd[i][j]表示前 i 个物品&#xff0c;背包容量是 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(重做日志)&#xff1a;记录事务对数据库的所有修改&#xff0c;在崩溃时恢复未提交的更改&#xff0c;保证事务…...

AI协助探索AI新构型自动化创新的技术实现

一、AI自进化架构的核心范式 1. 元代码生成与模块化重构 - 代码级自编程&#xff1a;基于神经架构搜索的强化学习框架&#xff0c;AI可通过生成元代码模板&#xff08;框架的抽象层定义&#xff09;自动组合功能模块。例如&#xff0c;使用注意力机制作为原子单元&#xff…...

九. Redis 持久化-RDB(详细讲解说明,一个配置一个说明分析,步步讲解到位)

九. Redis 持久化-RDB(详细讲解说明&#xff0c;一个配置一个说明分析&#xff0c;步步讲解到位) 文章目录 九. Redis 持久化-RDB(详细讲解说明&#xff0c;一个配置一个说明分析&#xff0c;步步讲解到位)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: 表分区>>范围分区,列表分区,散列分区/哈希分区,间隔分区,参考分区,组合分区,子分区/复合分区/组合分区

分区表 是将一个逻辑上的大表按照特定的规则划分为多个物理上的子表&#xff0c;这些子表称为分区。 分区可以基于不同的维度&#xff0c;如时间、数值范围、字符串值等&#xff0c;将数据分散存储在不同的分区 中&#xff0c;以提高数据管理的效率和查询性能&#xff0c;同时…...

使用Pygame制作“走迷宫”游戏

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

AJAX案例——图片上传个人信息操作

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

Day35-【13003】短文,什么是双端队列?栈和队列的互相模拟,以及解决队列模拟栈时出栈时间开销大的方法

文章目录 第三节进一步讨论栈和队列双端队列栈和队列的相互模拟使用栈来模拟队列类型定义入队出队判空&#xff0c;判满 使用队列来模拟栈类型定义初始化清空操作判空&#xff0c;判满栈长度输出入栈出栈避免出栈时间开销大的方法 第三节进一步讨论栈和队列 双端队列 假设你芷…...

力扣 55. 跳跃游戏

&#x1f517; https://leetcode.cn/problems/jump-game 题目 给一个数组 nums&#xff0c;最开始在 index 0&#xff0c;每次可以跳跃的区间是 0-nums[i]判断是否可以跳到数组末尾 思路 题解是用贪心&#xff0c;实际上模拟也可以过遍历可以到达的下标&#xff0c;判断其可…...

深入剖析 HTML5 新特性:语义化标签和表单控件完全指南

系列文章目录 01-从零开始学 HTML&#xff1a;构建网页的基本框架与技巧 02-HTML常见文本标签解析&#xff1a;从基础到进阶的全面指南 03-HTML从入门到精通&#xff1a;链接与图像标签全解析 04-HTML 列表标签全解析&#xff1a;无序与有序列表的深度应用 05-HTML表格标签全面…...

本地快速部署DeepSeek-R1模型——2025新年贺岁

一晃年初六了&#xff0c;春节长假余额马上归零了。今天下午在我的电脑上成功部署了DeepSeek-R1模型&#xff0c;抽个时间和大家简单分享一下过程&#xff1a; 概述 DeepSeek模型 是一家由中国知名量化私募巨头幻方量化创立的人工智能公司&#xff0c;致力于开发高效、高性能…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...