【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"]  # Linux
    plt.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 df
        except Exception as e:
            if attempt < retries - 1:
                logging.warning(f"[A股] 数据获取失败({symbol_clean}),第 {attempt + 1} 次重试...")
            else:
                logging.error(f"[A股] 数据获取失败({symbol_clean}): {e}")
                return None

def 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 None

    return df_clean

def 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 df
        except Exception as e:
            if attempt < retries - 1:
                logging.warning(f"[A股] 数据获取失败({symbol_clean}),第 {attempt + 1} 次重试...")
            else:
                logging.error(f"[A股] 数据获取失败({symbol_clean}): {e}")
                return None

def 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 None

    return df_clean

def 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 版本,然后通过 Git 克隆项目,并安装必要的第三方库。接着介绍如何设置深度学习模型文件的位置,使得能够成功加载预训练的模型。之后解释了启动服务后所呈现的交互式Web界面的功能——用户借此平台不仅可以直观地探索模型结构还能监测各个隐藏层的工作状态如激活值分布、权重梯度变化等。最后给出了关于GPU加速的支持指南及其性能上的潜在优势提示。 适合人群:有一定基础的技术开发者或者研究人员,他们希望通过便捷的方法在自己搭建的小型实验室环境下快速评估或改进各种神经网络结构特性。 使用场景及目标:适用于个人研究机构中进行AI实验测试阶段,尤其是在需要详细了解某一特定类型的深层神经网络运作机制并且寻求优化途径的情况下。利用文中提供的方法论可达成对模型内部机理更深层次的认知同时促进技术创新与发展进程。 其他说明:文档不仅包含了每一步骤的具体操作指导还附带了一些实际案例作为补充材料辅助理解整个部署流程。另外也提到了针对可能出现的问题提出了排查思路和解决办法以保障项目的顺利完成。
### 使用 DeepSeek 进行 Python 开发的方法 #### 准备工作 为了使用 DeepSeek 的 API 进行 Python 开发,首先需要安装必要的库并配置开发环境。确保已经安装了 `openai` 库来处理与 DeepSeek API 的交互。 ```bash pip install openai ``` #### 初始化客户端 创建一个 Python 文件,在文件顶部导入所需的模块,并初始化 DeepSeek 客户端实例: ```python from openai import OpenAI client = OpenAI( api_key="填写自己的key", base_url="https://api.deepseek.com" ) ``` 这里的 `api_key` 需要替换为实际获取到的 API 密钥[^2]。 #### 构建消息结构 构建发送给 DeepSeek API 的请求体时,通常采用 JSON 格式的列表形式指定对话中的不同角色及其对应的文本内容。例如: ```python messages = [ {"role": "system", "content": "你是一个GUI工具研发工程师"}, {"role": "user", "content": "帮我用Python写一个GUI界面的小助手..."} ] ``` 这段代码定义了一个系统指令以及用户的查询信息。 #### 发送请求并接收响应 利用之前设置好的客户端对象调用相应的接口完成数据传输操作,最后打印出服务器返回的结果: ```python response = client.chat.completions.create( model="deepseek-reasoner", messages=messages, stream=False ) print(response.choices[0].message.content) ``` 上述过程展示了如何向 DeepSeek 请求帮助生成一段基于特定需求的程序逻辑描述。 #### 关于性能优化 值得注意的是,得益于 DeepSeek 推理模型 R1 的高效能表现,即使是在普通的个人计算机上也能够快速运行此类应用而无需担心资源消耗过高的问题[^3]。 #### 工具推荐 对于希望提高编码效率的人来说,建议尝试 CodeGPT 插件配合 PyCharm 社区版一起使用,这不仅有助于简化日常编程任务还能让整个项目看起来更加整洁美观。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天启和风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值