PyQt6实例_A股日数据维护工具_权息数据增量更新线程
目录
前置:
代码:
1 工作类
2 数据库交互
3 主界面启用子线程
视频:
前置:
1 本系列将以 “PyQt6实例_A股日数据维护工具” 开头放置在“PyQt6实例”专栏
专栏地址 https://blog.csdn.net/m0_37967652/category_12929760.html
2 日数据可在“数据库”专栏,“PostgreSQL_”开头系列博文中获取
3 权息数据可以在“随想”专栏,“A股复权计算_”开头系列博文中获取
代码:
1 工作类
class Worker_ExDiv(QObject):signal_finished =pyqtSignal(str)signal_error = pyqtSignal(tuple)@pyqtSlot(object)def do_work(self,task_data:dict):try:''''splits': splits_csv_path,'allotment':allotment_csv_path,'equdiv':equdiv_csv_path'''splits_csv_path = task_data['splits']allotment_csv_path = task_data['allotment']equdiv_csv_path = task_data['equdiv']df_splits = pd.read_csv(splits_csv_path, encoding='utf-8')df_allotment = pd.read_csv(allotment_csv_path, encoding='utf-8')df_equdiv = pd.read_csv(equdiv_csv_path, encoding='utf-8')col_splits = ['ticker', 'reTradeDate', 'splitsRatio']col_equdiv = ['ticker', 'exDivDate', 'bonusShareListDate', 'perShareDivRatio', 'perShareTransRatio','perCashDiv']col_allotment = ['ticker', 'exRightsDate', 'allotmentRatio', 'allotmentPrice']target_col = ['ticker', 'exDate', 'perShareTransRadio', 'perCashDiv', 'allotmentRatio', 'allotmentPrice']df_equdiv['perShareDivRatio'] = df_equdiv['perShareDivRatio'].fillna(0)df_equdiv['perShareTransRatio'] = df_equdiv['perShareTransRatio'].fillna(0)df_equdiv['perCashDiv'] = df_equdiv['perCashDiv'].fillna(0)df_allotment['allotmentRatio'] = df_allotment['allotmentRatio'].fillna(0)df_allotment['allotmentPrice'] = df_allotment['allotmentPrice'].fillna(0)# 如果 exDivDate 和 bonusShareListDate 都为空,说明该行不需要除权除息df_equdiv.dropna(how='all', subset=['exDivDate', 'bonusShareListDate'], inplace=True)# 拆股信息,只取拆股率大于等于1的数据df_splits = df_splits.loc[df_splits['splitsRatio'] >= 1].copy()df_splits['ticker'] = df_splits['secID'].str.slice(0, 6)df_equdiv['ticker'] = df_equdiv['secID'].str.slice(0, 6)df_allotment['ticker'] = df_allotment['secID'].str.slice(0, 6)df_splits = df_splits.loc[:, col_splits].copy()df_equdiv = df_equdiv.loc[:, col_equdiv].copy()df_allotment = df_allotment.loc[:, col_allotment].copy()df_equdiv['exDivDate'] = df_equdiv['exDivDate'].fillna(df_equdiv['bonusShareListDate'])df_equdiv['perShareTransRadio'] = df_equdiv['perShareDivRatio'] + df_equdiv['perShareTransRatio']df = pd.DataFrame(columns=['ticker', 'exDate', 'perShareTransRadio', 'perCashDiv'])df['ticker'] = df_equdiv['ticker'].to_list()df['exDate'] = df_equdiv['exDivDate'].to_list()df['perShareTransRadio'] = df_equdiv['perShareTransRadio'].to_list()df['perCashDiv'] = df_equdiv['perCashDiv'].to_list()df_allotment.rename(columns={'exRightsDate': 'exDate'}, inplace=True)df_splits.rename(columns={'reTradeDate': 'exDate'}, inplace=True)df = pd.merge(df, df_allotment, on=['ticker', 'exDate'], how='outer')df = pd.merge(df, df_splits, on=['ticker', 'exDate'], how='outer')df['perShareTransRadio'] = df['perShareTransRadio'].fillna(0)df.loc[df['splitsRatio'].notnull(), 'perShareTransRadio'] = df['perShareTransRadio'] + df['splitsRatio'] - 1df['perCashDiv'] = df['perCashDiv'].fillna(0)df['allotmentRatio'] = df['allotmentRatio'].fillna(0)df['allotmentPrice'] = df['allotmentPrice'].fillna(0)df['date_o'] = pd.to_datetime(df['exDate'])df.sort_values(by='date_o', inplace=True)df = df.loc[:, target_col]postgresql_utils.incrementtal_update_exdiv(df)passexcept Exception:traceback.print_exc()exctype,value = sys.exc_info()[:2]self.signal_error.emit(('exdiv_thread',exctype,value,traceback.format_exc()))passfinally:self.signal_finished.emit('exdiv')passpass
2 数据库交互
def incrementtal_update_exdiv(df:pd.DataFrame)->None:ticker_list = df['ticker'].to_list()ticker_list_str = '\',\''.join(ticker_list)ticker_list_str = '\'' + ticker_list_str + '\''sql_str = f"select ticker,exDate,perShareTransRadio,perCashDiv,allotmentRatio,allotmentPrice from t_exdividend where ticker in ({ticker_list_str});"conn = connect_db()cur = conn.cursor()cur.execute(sql_str)res = cur.fetchall()df00 = Nonefor one_node in res:ticker = one_node[0]df_node = pd.DataFrame({'exDate':one_node[1],'perShareTransRadio':one_node[2],'perCashDiv':one_node[3],'allotmentRatio':one_node[4],'allotmentPrice':one_node[5]})df_node['ticker'] = tickerif df00 is None:df00 = df_node.copy()else:df00 = pd.concat([df00,df_node])passdf = pd.concat([df,df00])df.drop_duplicates(inplace=True)df_group = df.groupby(by='ticker')data_list = []for ticker, group in df_group:one_node = (ticker,group['exDate'].to_list(),group['perShareTransRadio'].to_list(),group['perCashDiv'].to_list(),group['allotmentRatio'].to_list(),group['allotmentPrice'].to_list())data_list.append(one_node)passsql_insert_str = '''insert into t_exdividend (ticker,exDate,perShareTransRadio,perCashDiv,allotmentRatio,allotmentPrice) values (%s,%s,%s,%s,%s,%s);'''sql_delete_str = f"delete from t_exdividend where ticker in ({ticker_list_str});"try:cur.execute(sql_delete_str)cur.executemany(sql_insert_str,data_list)conn.commit()passexcept Exception as e:print(f'error: {e}')conn.rollback()passfinally:cur.close()conn.close()passpass
3 主界面启用子线程
class MainWindow(QMainWindow):signal_daily = pyqtSignal(object)signal_exdiv = pyqtSignal(object)def __init__(self):super().__init__()self.setWindowTitle('股票日数据维护')self.setMinimumSize(QSize(800,600))self.btn_download = QPushButton('下载某个股票未复权数据',clicked=self.btn_download_clicked)self.btn_download_adj = QPushButton('下载某个股票前复权数据',clicked=self.btn_download_adj_clicked)self.btn_download_ex = QPushButton('下载某个股票的权息数据',clicked=self.btn_download_ex_clicked)groupbox1 = QGroupBox('日数据更新')groupbox2 = QGroupBox('权息数据更新')label11 = QLabel('增量日数据csv文件所在目录')label21 = QLabel('拆股数据csv文件位置:')label22 = QLabel('配股数据csv文件位置:')label23 = QLabel('分红数据csv文件位置:')self.lineedit_daily_dir = QLineEdit()self.lineedit_sqlits_file = QLineEdit()self.lineedit_allotment_file = QLineEdit()self.lineedit_equdiv_file = QLineEdit()self.btn_daily_dir = QPushButton('打开文件夹',clicked=self.btn_daily_dir_clicked)self.btn_splits_file = QPushButton('打开文件',clicked=self.btn_splits_file_clicked)self.btn_allotment_file = QPushButton('打开文件',clicked=self.btn_allotment_file_clicked)self.btn_equdiv_file = QPushButton('打开文件',clicked=self.btn_equdiv_file_clicked)self.btn_execute_daily = QPushButton('执行',clicked=self.btn_execute_daily_clicked)self.btn_execute_ex = QPushButton('执行',clicked=self.btn_execute_ex_clicked)self.btn_current_data = QPushButton('查看数据表中最新数据',clicked=self.btn_current_data_clicked)label31 = QLabel('运行日志:')label32 = QLabel('备忘信息:')self.btn_add_notes = QPushButton('添加',clicked=self.btn_add_notes_clicked)self.textedit_log = QTextEdit()self.table_widget = QTableWidget()self.table_widget.setColumnCount(3)self.table_widget.setHorizontalHeaderLabels(['时间','项','备忘内容'])layout00 = QHBoxLayout()layout00.addWidget(self.btn_download)layout00.addWidget(self.btn_download_adj)layout00.addWidget(self.btn_download_ex)layout11 = QHBoxLayout()layout11.addWidget(label11)layout11.addWidget(self.lineedit_daily_dir)layout11.addWidget(self.btn_daily_dir)layout12 = QHBoxLayout()layout12.addStretch(1)layout12.addWidget(self.btn_current_data)layout12.addWidget(self.btn_execute_daily)layout13 = QVBoxLayout()layout13.addLayout(layout11)layout13.addLayout(layout12)groupbox1.setLayout(layout13)layout21 = QHBoxLayout()layout21.addWidget(label21)layout21.addWidget(self.lineedit_sqlits_file)layout21.addWidget(self.btn_splits_file)layout22 = QHBoxLayout()layout22.addWidget(label22)layout22.addWidget(self.lineedit_allotment_file)layout22.addWidget(self.btn_allotment_file)layout23 = QHBoxLayout()layout23.addWidget(label23)layout23.addWidget(self.lineedit_equdiv_file)layout23.addWidget(self.btn_equdiv_file)layout24 = QHBoxLayout()layout24.addStretch(1)layout24.addWidget(self.btn_execute_ex)layout25 = QVBoxLayout()layout25.addLayout(layout21)layout25.addLayout(layout22)layout25.addLayout(layout23)layout25.addLayout(layout24)groupbox2.setLayout(layout25)layout31 = QVBoxLayout()layout31.addWidget(label31)layout31.addWidget(self.textedit_log)layout32 = QHBoxLayout()layout32.addWidget(label32)layout32.addWidget(self.btn_add_notes)layout33 = QVBoxLayout()layout33.addLayout(layout32)layout33.addWidget(self.table_widget)layout34 = QHBoxLayout()layout34.addLayout(layout31)layout34.addLayout(layout33)layout = QVBoxLayout()layout.addLayout(layout00)layout.addWidget(groupbox1)layout.addWidget(groupbox2)layout.addLayout(layout34)widget = QWidget()widget.setLayout(layout)self.setCentralWidget(widget)self.open_init()passdef open_init(self):self.daily_worker = Noneself.daily_worker_thread = Noneself.exdiv_worker = Noneself.exdiv_worker_thread = Nonepassdef btn_download_clicked(self):passdef btn_download_adj_clicked(self):passdef btn_download_ex_clicked(self):passdef btn_daily_dir_clicked(self):passdef btn_splits_file_clicked(self):passdef btn_allotment_file_clicked(self):passdef btn_equdiv_file_clicked(self):passdef btn_execute_daily_clicked(self):pre_dir = self.lineedit_daily_dir.text()if not pre_dir or len(pre_dir.strip())<=0:self.message_dialog('请选择日数据csv文件所在文件夹')returnfile_list = os.listdir(pre_dir)if not file_list or len(file_list)<=0:self.message_dialog('所选文件夹为空')returnself.daily_worker = Worker_Daily()self.daily_worker_thread = QThread()self.daily_worker.signal_finished.connect(self.worker_signal_finished)self.daily_worker.signal_error.connect(self.thread_signal_error)self.signal_daily.connect(self.daily_worker.do_work)self.daily_worker.moveToThread(self.daily_worker_thread)self.daily_worker_thread.start()self.btn_execute_daily.setEnabled(False)self.lineedit_daily_dir.setEnabled(False)self.btn_daily_dir.setEnabled(False)task_data = {'pre_dir':pre_dir}self.signal_daily.emit(task_data)self.insert_log_msg('日数据开始更新.')passdef worker_signal_finished(self,thread_name:str):if thread_name == 'daily':self.btn_execute_daily.setEnabled(True)self.lineedit_daily_dir.setEnabled(True)self.btn_daily_dir.setEnabled(True)self.insert_log_msg('日数据更新完毕。')self.daily_worker_thread.exit()passelif thread_name == 'exdiv':self.btn_execute_ex.setEnabled(True)self.lineedit_sqlits_file.setEnabled(True)self.lineedit_allotment_file.setEnabled(True)self.lineedit_equdiv_file.setEnabled(True)self.btn_splits_file.setEnabled(True)self.btn_allotment_file.setEnabled(True)self.btn_equdiv_file.setEnabled(True)self.insert_log_msg('权息数据更新完毕')self.exdiv_worker_thread.exit()else:passpassdef thread_signal_error(self,error:tuple):self.insert_log_msg(f"{error[0]} {error[-1]}")passdef btn_execute_ex_clicked(self):splits_csv_path = self.lineedit_sqlits_file.text()allotment_csv_path = self.lineedit_allotment_file.text()equdiv_csv_path = self.lineedit_equdiv_file.text()if not splits_csv_path or len(splits_csv_path.strip()) <= 0:self.message_dialog('请选择拆股csv文件')returnif not allotment_csv_path or len(allotment_csv_path.strip()) <= 0:self.message_dialog('请选择配股csv文件')returnif not equdiv_csv_path or len(equdiv_csv_path.strip()) <= 0:self.message_dialog('请选择分红csv文件')returnself.exdiv_worker = Worker_ExDiv()self.exdiv_worker_thread = QThread()self.exdiv_worker.signal_finished.connect(self.worker_signal_finished)self.exdiv_worker.signal_error.connect(self.thread_signal_error)self.signal_exdiv.connect(self.exdiv_worker.do_work)self.exdiv_worker.moveToThread(self.exdiv_worker_thread)self.exdiv_worker_thread.start()self.btn_execute_ex.setEnabled(False)self.lineedit_sqlits_file.setEnabled(False)self.lineedit_allotment_file.setEnabled(False)self.lineedit_equdiv_file.setEnabled(False)self.btn_splits_file.setEnabled(False)self.btn_allotment_file.setEnabled(False)self.btn_equdiv_file.setEnabled(False)task_data = {'splits': splits_csv_path,'allotment':allotment_csv_path,'equdiv':equdiv_csv_path}self.signal_exdiv.emit(task_data)self.insert_log_msg('权息数据开始更新.')passdef btn_add_notes_clicked(self):passdef btn_current_data_clicked(self):passdef message_dialog(self,msg:str):QMessageBox.information(self,'提示',msg,QMessageBox.StandardButton.Ok)def insert_log_msg(self,msg:str):pre_str = f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')} {msg}"self.textedit_log.append(pre_str)pass
视频:
https://www.bilibili.com/video/BV1X9ZUYVEZt/
https://www.bilibili.com/video/BV1X9ZUYVEL7/
相关文章:
PyQt6实例_A股日数据维护工具_权息数据增量更新线程
目录 前置: 代码: 1 工作类 2 数据库交互 3 主界面启用子线程 视频: 前置: 1 本系列将以 “PyQt6实例_A股日数据维护工具” 开头放置在“PyQt6实例”专栏 专栏地址 https://blog.csdn.net/m0_37967652/category_12929760.h…...
【蓝桥杯嵌入式——学习笔记一】2016年第七届省赛真题重难点解析记录,闭坑指南(文末附完整代码)
在读题过程中发现本次使用的是串口2,需要配置串口2。 但在查看产品手册时发现PA14同时也是SWCLK。 所以在使用串口2时需要拔下跳线帽去连接CH340。 可能是用到串口2的缘故,在烧录时发现报了一个错误。这时我们要想烧录得按着复位键去点击烧录,…...
基础常问 (概念、代码)
读源码 代码题 Void方法 ,也可以提前rerun;结束 RandomAccessFile类(随机访问文件) 在 Java 中,可以使用RandomAccessFile类来实现文件指针操作。RandomAccessFile提供了对文件内容的随机访问功能,它的文件指针可以通…...
大学生机器人比赛实战(一)综述篇
大学生机器人比赛实战 参加机器人比赛是大学生提升工程实践能力的绝佳机会。本指南将全面介绍如何从零开始准备华北五省机器人大赛、ROBOCAN、RoboMaster等主流机器人赛事,涵盖硬件设计、软件开发、算法实现和团队协作等关键知识。 一、比赛选择与准备策略 1.1 主…...
什么是宽带拨号?
宽带拨号(PPPoE拨号)是一种通过账号密码认证接入互联网的方式,常见于家庭宽带、企业专线等场景。用户需要通过路由器或电脑进行拨号连接,运营商验证身份后分配IP地址,才能正常上网。 1. 宽带拨号的工作原理 PPPoE协议&…...
J1 ResNet-50算法实战与解析
🍨 本文為🔗365天深度學習訓練營 中的學習紀錄博客🍖 原作者:K同学啊 | 接輔導、項目定制 一、理论知识储备 1. 残差网络的由来 ResNet主要解决了CNN在深度加深时的退化问题(梯度消失与梯度爆炸)。 虽然B…...
[MySQL初阶]MySQL(8)索引机制:下
标题:[MySQL初阶]MySQL(8)索引机制:下 水墨不写bug 文章目录 四、从问题到底层,从现象到本质1.为什么插入的数据默认排好序2.MySQL的Page(1)为什么选择用Page?(2&#x…...
Muduo网络库实现 [九] - EventLoopThread模块
目录 设计思路 类的设计 模块的实现 私有接口 公有接口 设计思路 我们说过一个EventLoop要绑定一个线程,未来该EventLoop所管理的所有的连接的操作都需要在这个EventLoop绑定的线程中进行,所以我们该如何实现将EventLoop和线程绑定呢?…...
Vim操作指令全解析
Vim是我们在Linux日常工作中不可或缺的文本编辑器。它强大的功能和高效的编辑方式可以极大提升工作效率。本文将全面解析Vim的各种操作指令,从基础操作到高级技巧。 一、Vim模式解析 Vim是一个模式化编辑器,理解不同模式是掌握Vim的关键: …...
《K230 从熟悉到...》识别机器码(AprilTag)
《K230 从熟悉到...》识别机器码(aprirltag) tag id 《庐山派 K230 从熟悉到...》 识别机器码(AprilTag) AprilTag是一种基于二维码的视觉标记系统,最早是由麻省理工学院(MIT)在2008年开发的。A…...
VMware ESXi:企业级虚拟化平台详解
VMware ESXi:企业级虚拟化平台详解 目录 什么是VMware ESXi? ESXi的发展历史 ESXi的核心特性 3.1 裸机架构(Type-1 Hypervisor) 3.2 轻量化与高性能 3.3 集中管理(vCenter集成) ESXi的架构与工作原理…...
使用 PyTorch 的 `optim.lr_scheduler.CosineAnnealingLR` 学习率调度器
使用 PyTorch 的 optim.lr_scheduler.CosineAnnealingLR 学习率调度器 在深度学习中,学习率(Learning Rate, LR)是影响模型训练效果的一个关键超参数。一个合适的学习率调度策略可以帮助模型更快地收敛,同时避免陷入局部最优或振荡。PyTorch 提供了多种学习率调度器,其中…...
栈和队列的概念
1.栈的概念 只允许在固定的一端进行插入和删除,进行数据的插入和数据的删除操作的一端数栈顶,另一端称为栈底。 栈中数据元素遵循后进先出LIFO (Last In First Out) 压栈:栈的插入。 出栈:栈的删除。出入数据在栈顶。 那么下面…...
常用的元素操作API
click 触发当前元素的点击事件 clear() 清空内容 sendKeys(...) 往文本框一类元素中写入内容 getTagName() 获取元素的的标签名 getAttribute(属性名) 根据属性名获取元素属性值 getText() 获取当前元素的文本值 isDisplayed() 查看元素是否显示 get(String url) 访…...
红日靶场一实操笔记
一,网络拓扑图 二,信息搜集 1.kali机地址:192.168.50.129 2.探测靶机 注:需要win7开启c盘里面的phpstudy的服务。 nmap -sV -Pn 192.168.50.128 或者扫 nmap -PO 192.168.50.0/24 可以看出来win7(ip为192.168.50.128)的靶机开…...
SpringBoot集成Redis 灵活使用 TypedTuple 和 DefaultTypedTuple 实现 Redis ZSet 的复杂操作
以下是 Spring Boot 集成 Redis 中 TypedTuple 和 DefaultTypedTuple 的详细使用说明,包含代码示例和场景说明: 1. 什么是 TypedTuple 和 DefaultTypedTuple? TypedTuple<T> 接口: 定义了 Redis 中有序集合(ZSet…...
7-4 BCD解密
BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了&#x…...
Golang改进后的任务调度系统分析
以下是整合了所有改进点的完整代码实现: package mainimport ("bytes""context""fmt""io""log""net/http""sync""time""github.com/go-redis/redis/v8""github.com/robfig/…...
【目标检测】【深度学习】【Pytorch版本】YOLOV2模型算法详解
【目标检测】【深度学习】【Pytorch版本】YOLOV2模型算法详解 文章目录 【目标检测】【深度学习】【Pytorch版本】YOLOV2模型算法详解前言YOLOV2的模型结构YOLOV2模型的基本执行流程YOLOV2模型的网络参数YOLOV2模型的训练方式 YOLOV2的核心思想前向传播阶段反向传播阶段 总结 前…...
NineData云原生智能数据管理平台新功能发布|2025年3月版
本月发布 15 项更新,其中重点发布 3 项、功能优化 11 项、性能优化 1 项。 重点发布 基础服务 - MFA 多因子认证 新增 MFA 多因子认证,提升账号安全性。系统管理员开启后,所有组织成员需绑定认证器,登录时需输入动态验证码。 数…...
破局与赋能:信息系统战略规划方法论
信息系统战略规划是将组织的战略目标和发展规划转化为信息系统的战略目标和发展规划的过程,常见的方法有以下几种: 一、企业系统规划法(BSP) 1.基本概念:通过全面调查,分析企业信息需求,确定信…...
GLSL(OpenGL 着色器语言)基础语法
GLSL(OpenGL 着色器语言)基础语法 GLSL(OpenGL Shading Language)是 OpenGL 计算着色器的语言,语法类似于 C 语言,但提供了针对 GPU 的特殊功能,如向量运算和矩阵运算。 着色器的开头总是要声明…...
Redis基础知识-3
RedisTemplate对多种数据结构的操作 1. String类型 示例代码: // 保存数据 redisTemplate.opsForValue().set("user:1001", "John Doe"); // 设置键值对,无过期时间 redisTemplate.opsForValue().set("user:1002", &qu…...
Git Rebase 操作中丢失提交的恢复方法
背景介绍 在团队协作中,使用 Git 进行版本控制是常见实践。然而,有时在执行 git rebase 或者其他操作后,我们可能会发现自己的提交记录"消失"了,这往往让开发者感到恐慌。本文将介绍几种在 rebase 后恢复丢失提交的方法。 问题描述 当我们执行以下操作时,可能…...
【diffusers 进阶(十五)】dataset 工具,Parquet和Arrow 数据文件格式,load dataset 方法
系列文章目录 【diffusers 极速入门(一)】pipeline 实际调用的是什么? call 方法!【diffusers 极速入门(二)】如何得到扩散去噪的中间结果?Pipeline callbacks 管道回调函数【diffusers极速入门࿰…...
unity各个面板说明
游戏开发,unity各个面板说明 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是Python基础语法。前后每一小节的内容是存在的有:学习and理解的关联性,希望对您有用~ unity简介-unity基础…...
游戏引擎学习第199天
回顾并发现我们可能破坏了某些东西 目前,我们的调试 UI 运行得相对顺利,可以创建可修改的调试变量,也可以插入分析器(profiler)等特殊视图组件,并进行一些交互操作。然而,在上一次结束时&#…...
Linux红帽:RHCSA认证知识讲解(十)使用 tar创建归档和压缩文件
Linux红帽:RHCSA认证知识讲解(十)使用 tar创建归档和压缩文件 前言一、归档与压缩的基本概念1.1 归档与压缩的区别 二、使用tar创建归档文件2.1 tar命令格式2.2 示例操作 三、使用tar进行压缩3.2 命令格式3.3 示例操作 前言 在红帽 Linux 系…...
端到端机器学习流水线(MLflow跟踪实验)
目录 端到端机器学习流水线(MLflow跟踪实验)1. 引言2. 项目背景与意义2.1 端到端机器学习流水线的重要性2.2 MLflow的作用2.3 工业级数据处理需求3. 数据集生成与介绍3.1 数据集构成3.2 数据生成方法4. 机器学习流水线与MLflow跟踪4.1 端到端机器学习流水线4.2 MLflow跟踪实验…...
相平面案例分析爱情故事
动态系统的分析可以分为三个步骤:第一步描述系统,通过语言来描述系统的特性,第一步描述系统,即通过语言来描述系统的特性;第二步数学分析,即使用数学工具对系统进行量化解析;第三步结果与讨论&a…...
