成武建设局网站,产品设计平台,荣茂网站建设,政协网站建设代码#xff1a; Github#xff1a;Python实现股票数据可视化代码https://github.com/magolan2000/Data-visualization/tree/master 软件环境#xff1a;PyCharm 2022.3.1 数据来源#xff1a;akshare 最近DeepSeek可谓是热度不断#xff0c;因此想评判一下DeepSeek的编程… 代码 GithubPython实现股票数据可视化代码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_okTrue)
os.makedirs(plot_dir, exist_okTrue)# 配置日志
logging.basicConfig(levellogging.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, retries3):通过AKShare获取单只A股数据后复权for attempt in range(retries):try:# 去掉股票代码的后缀如 .SH 或 .SZsymbol_clean symbol.split(.)[0]# 获取数据df ak.stock_zh_a_hist(symbolsymbol_clean, perioddaily, adjusthfq)if df.empty:logging.warning(f[A股] 数据为空{symbol_clean})return None# 重命名列df.rename(columns{日期: Date,开盘: Open,收盘: Close,最高: High,最低: Low,成交量: Volume}, inplaceTrue)# 转换日期格式并设置为索引df[Date] pd.to_datetime(df[Date])df.set_index(Date, inplaceTrue)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(howall)# 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, encodingutf-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, retries3):通过AKShare获取单只A股数据后复权for attempt in range(retries):try:# 去掉股票代码的后缀如 .SH 或 .SZsymbol_clean symbol.split(.)[0]# 获取数据df ak.stock_zh_a_hist(symbolsymbol_clean, perioddaily, adjusthfq)if df.empty:logging.warning(f[A股] 数据为空{symbol_clean})return None# 重命名列df.rename(columns{日期: Date,开盘: Open,收盘: Close,最高: High,最低: Low,成交量: Volume}, inplaceTrue)# 转换日期格式并设置为索引df[Date] pd.to_datetime(df[Date])df.set_index(Date, inplaceTrue)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(howall)# 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, encodingutf-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(idstock-input,typetext,value600519,placeholder输入股票代码,style{width: 150px, margin-right: 10px}),dcc.DatePickerRange(iddate-picker,min_date_alloweddatetime(2010, 1, 1),max_date_alloweddatetime.today(),start_datedatetime.today() - timedelta(days365),end_datedatetime.today(),display_formatYYYY-MM-DD),dcc.Dropdown(idindicator-selector,options[{label: MACD, value: MACD},{label: RSI, value: RSI},{label: 布林线, value: BOLL},],value[MACD],multiTrue,style{width: 300px, margin-left: 10px})], style{padding: 20px, backgroundColor: #1a1a1a})]),dcc.Loading(idloading,typecircle,children[dcc.Graph(idmain-chart, style{height: 600px}),dcc.Interval(idinterval-component, interval60 * 1000, n_intervals0)])
], style{backgroundColor: #1a1a1a, height: 100vh})
3.2数据可视化 可交互界面设计的不错颜色搭配效果很好不仅添加了时间区间设置功能还可以任意选择股票代码查看股票行情的历史数据鼠标移动至折线图上会有详细的数据展示。