财务数据ETL与可视化平台 — Vizro + Shiny 双引擎
Project description
集团财务数据标准化处理与可视化平台
基于 Kedro 数据管道框架的财务数据 ETL 与可视化平台,支持动态 Excel 文件扫描、指标标准化处理、组织树构建、资金账户解析、地理编码与可视化展示。Vizro + Shiny 双引擎架构 — Vizro 面向领导汇报大屏,Shiny 面向个人电脑办公大屏。
版本: 1.6.1
项目结构
skdata-etl/
├── conf/ # 配置文件
│ ├── base/ # 基础配置
│ │ ├── catalog.yml # Kedro 数据目录
│ │ ├── parameters.yml # 全局参数 (数据库路径等)
│ │ ├── hooks.yml # 钩子配置
│ │ ├── finance_loader.yml # Excel 解析规则
│ │ ├── treasury_loader.yml # 资金账户解析规则
│ │ ├── indicator_mapping.yml # 指标标准化配置
│ │ ├── standard_accounts.json # 标准科目库 (v2.0, 2018年版企业财务报表格式)
│ │ ├── standard_accountsv1.0.json
│ │ └── finance_mapping_standard.yaml # 财务指标映射标准配置
│ └── local/
│ └── credentials.yml # 数据库凭证
├── src/my_finance_etl/ # 源码
│ ├── hooks/
│ │ └── hooks.py # Kedro 钩子 (动态 Excel 加载)
│ ├── pipelines/
│ │ ├── data_ingestion.py # 财务数据摄入 (Pandas)
│ │ ├── data_ingestion_polars.py # 财务数据摄入 (Polars 优化)
│ │ ├── data_processing.py # 指标标准化处理
│ │ ├── data_warehouse.py # 财务数据仓库构建
│ │ ├── treasury_ingestion.py # 资金数据摄入
│ │ ├── treasury_processing.py # 资金数据处理
│ │ ├── treasury_warehouse.py # 资金数据仓库构建
│ │ ├── dim_bank_branch.py # 银行网点维度构建 (CNAPS XML 丰富)
│ │ └── enrich_geo_coordinates.py # 地理编码节点 (高德 API + 双缓存)
│ ├── nodes/ # Kedro 节点
│ ├── io/ # 自定义 I/O
│ ├── utils/ # 工具函数
│ ├── parser.py # Excel 财务快报解析器
│ ├── treasury_parser.py # 资金账户 Excel 解析器
│ ├── matcher.py # 标准科目匹配器
│ ├── tree_builder.py # 组织树构建器
│ ├── duckdb_data_warehouse.py # DuckDB 星型模型构建
│ ├── polars_optimizer.py # Polars 并行优化
│ ├── file_cache.py # 文件 MD5 缓存 (跳过未变更 Excel)
│ ├── geocoder.py # 高德地图地理编码 (已迁移至 scripts/)
│ ├── pipeline_registry.py # 管道注册
│ └── settings.py # 项目设置
├── scripts/ # 独立工具脚本 (geocoder.py 等)
├── doc/
│ ├── 操作手册.md # 完整操作手册 (部署/配置/运维)
│ ├── ilm/ # Typst 模板 PDF 生成
│ ├── finance_warehouse_schema.md # 数据仓库 Schema 文档
│ └── 指标对比键匹配规则.md # 指标匹配算法说明
├── data/
│ ├── 01_raw/ # 原始 Excel 文件
│ ├── 02_intermediate/ # 中间数据
│ └── warehouse/ # DuckDB 数据仓库
├── templates/
│ └── index.html # Flask 前端界面
├── generated_reports/ # 生成的报告文件
├── src/my_finance_shared/ # 共享模块 (v1.6)
│ ├── __init__.py
│ ├── config.py # 共享配置 (_proj_dir, DB_PATH, get_db_path)
│ └── database.py # DuckDB 连接 (带重试) + geo parquet 同步
├── src/my_finance_shiny/ # Shiny 仪表板 (v1.6 新增)
│ ├── app.py # Shiny 入口 (14页 + main() CLI)
│ ├── config.py # → 导入共享模块
│ ├── data.py # DuckDB SQL → Polars DataFrame 预加载
│ ├── database.py # → 导入共享模块
│ ├── components/ # 可复用组件 (kpi_card, fallback)
│ ├── figures/ # Plotly 图表工厂
│ └── pages/ # 14 个页面模块 (home/smart_query/balance/...)
├── src/my_finance_web/ # Vizro/Flask Web 模块包 (v1.5)
│ ├── __init__.py # Flask 工厂函数 + CLI 入口
│ ├── config.py # 集中配置 → 导入共享模块
│ ├── database.py # DuckDB 连接与查询工具
│ ├── callbacks.py # Dash 级联筛选回调
│ ├── routes/ # 路由蓝图 (tree/treasury/report/geo/panreg)
│ └── dashboard/ # Vizro 仪表板模块 (home/map/balance/panreg/…)
├── flask_app.py # Flask 入口 (6行薄壳 → src/my_finance_web)
├── start.sh # whiptail 双引擎启动器 (v1.6)
├── stop.sh # 统一停止脚本 (v1.6)
├── pyproject.toml # 项目配置
└── README.md # 本文档
功能特性
ETL 管道
- 动态 Excel 加载: 自动扫描月度文件夹,根据正则表达式提取元数据
- 智能解析: 自动识别基本信息工作表和报表工作表,支持章节命名空间隔离
- 指标标准化: 基于标准科目库(v2.0,2018年版企业财务报表格式)的层级路径匹配,支持上下文消歧
- 组织树构建: 自动构建集团多层级组织架构树 (2830 个节点),支持本部口径 (suffix=0) 优先
- 资金账户解析: 解析银行账户信息,构建资金账户维度表 (27085 个账户),优先匹配本部口径单位
- 星型数据模型: 生成维度表和事实表,存储在 DuckDB (
finance_warehouse.duckdb) - Polars 加速: 针对 1500+ Excel 文件的并行处理优化,parent_code 选填化处理
- 文件缓存加速: 基于 MD5 的文件级缓存 (FileCache),跳过未变更的 Excel 文件,财报和司库数据均适用,大幅减少重复解析时间
- 银行网点维度: 从司库账户信息提取银行网点,通过 CNAPS XML (中国人民银行现代化支付系统行名行号) 丰富银行元数据,关联地理坐标缓存
- 地理编码管道化:
enrich_geo_coordinates节点通过高德 API 为银行网点和企业进行地理编码,使用双层缓存策略(实体缓存 + 地址缓存),支持 TTL 过期和失败重试冷却,独立geocoder.py脚本迁移至scripts/目录 - Web 模块化架构 🏗️:
flask_app.py从 ~1436 行单体文件重构为src/my_finance_web/模块包 — 配置集中化 (config.py)、数据库层抽象 (database.py)、路由蓝图分离 (routes/)、Dash 回调独立 (callbacks.py)、Vizro 仪表板子模块化 (dashboard/),支持my-finance-webCLI 入口 - 穿透监管报告 🔍: 新增 PanReg 穿透监管模块 — 集团成员单位账户数量异常检测报告,Vizro 页面嵌入 Card 链接,Flask 路由
/panreg-report直接返回 HTML 报告文件
可视化服务
- 双引擎架构 🚀 (v1.6 新增): Vizro(领导汇报大屏)+ Shiny(个人电脑办公大屏)双引擎并存,
whiptail图形化启动器start.sh一键启动两个服务 - AI 智能查询 🤖 (v1.6 新增): QueryChat 自然语言数据探索 — 基于 LLM (Claude) 的自然语言转 SQL 过滤,联动 KPI 卡片、地理分布图、
great_tables细分维度表(含财务快报数据)、交互式明细表,支持 CSV 导出 - Shiny 多页面仪表板 📊 (v1.6 新增): 14 页 Shiny for Python 仪表板 — 首页、智能查询、地理分布、穿透监控、账户分析、余额统计分析,与 Vizro 共享
my_finance_shared数据层 - 组织树浏览: Flask + jsTree 交互式组织树,点击节点查看财务指标详情
- 财务数据查询: 支持资产负债表/利润表/现金流量表的月度/累计/同比数据
- 资金账户查询: 按单位查看银行账户余额、类型、合作银行等
- 指标对比: 标准科目 vs 原始报表指标的自动匹配验证
- Vizro 仪表板: 穿透监控大屏(资产负债气泡散点 + 杠杆率分析)、单位地理分布(中国地图)
- 账户地图: 全国银行账户地理分布,四维筛选(子集团/银行/省份/城市),省份→城市级联
- 账户余额统计分析: 5 个分析页面(整体/子集团/银行/地理/交叉维度),柱状图+饼图+Treemap+箱线图+散点图
- 日报生成: 基于 Quarto 模板的自动报告生成
- 日报邮件发送: 一键生成 PDF 并通过 filepulse SMTP 脚本发送日报邮件,发送脚本路径从
config_treasury.toml动态解析,支持自动生成 PDF 后发送,日期参数联动
快速开始
1. 安装依赖
pip install -r requirements.txt
2. 配置数据源
将集团月度财务 Excel 文件按以下结构放置:
data/01_raw/
├── 2024年1月/
│ ├── 集团A-202401-财务.xlsx
│ ├── 集团B-202401-财务.xlsx
│ └── ...
├── 2024年2月/
└── ...
文件命名格式:{集团名称}-{年月}-财务.xlsx
3. 配置项目
编辑配置文件:
conf/base/parameters.yml: 设置集团根代码等参数conf/base/finance_loader.yml: 调整 Excel 解析规则conf/base/indicator_mapping.yml: 配置标准科目映射规则conf/base/standard_accounts.json: 维护标准科目库 (v2.0, 2018年版企业财务报表格式层级结构)conf/base/finance_mapping_standard.yaml: 财务指标映射标准配置conf/base/hooks.yml: Kedro 钩子配置 (自动触发地理编码等)
4. 运行 ETL 管道
# 运行完整管道 (财务报表 + 资金账户)
python -m src.my_finance_etl
# 仅财务报表
kedro run --pipeline finance_report
# 仅资金账户数据
kedro run --pipeline treasury_data
# Polars 优化模式
kedro run --pipeline ingest_polars
5. 地理编码 (可选)
python scripts/geocode_units.py
6. 启动可视化服务
方式一: whiptail 图形启动器 (推荐)
bash start.sh
# 选择 领导汇报大屏 (Vizro) 或 个人电脑办公大屏 (Shiny)
# 两个服务同时启动,浏览器自动打开选中页面
bash stop.sh # 停止所有服务
方式二: 手动启动
# Vizro (Flask, port 5001)
micromamba run -n shiny_vizro python -c "
from src.my_finance_web import create_app
create_app().run(debug=False, host='0.0.0.0', port=5001)
"
# Shiny (port 8000)
micromamba run -n shiny_vizro shiny run --host 0.0.0.0 --port 8000 src.my_finance_shiny.app
方式三: CLI 入口
my-finance-web # Vizro → http://localhost:5001
my-finance-shiny # Shiny → http://localhost:8000
访问:
- Vizro 领导汇报大屏: http://localhost:5001
- Shiny 个人电脑办公大屏: http://localhost:8000
数据模型
详见 doc/finance_warehouse_schema.md。
维度表
| 表名 | 说明 | 行数 |
|---|---|---|
dim_period |
会计期间 | 2 |
dim_caliber |
口径 | 1 |
dim_report_category |
报表类别 (资产负债表/利润表/现金流量表/所有者权益变动表) | 4 |
dim_standard_account |
标准科目树 (含层级路径, v2.0) | 151 |
dim_unit_report |
报送单位 | 2830 |
dim_organization_tree |
组织架构树 | 2830 |
dim_treasury_account |
资金账户 | 27085 |
dim_treasury_account_type |
账户类型 | 34 |
dim_bank_branch |
银行网点 (含 CNAPS 元数据) | 2,590 |
dim_unit_geo |
单位地理坐标 | 1,419 |
事实表
| 表名 | 说明 | 行数 |
|---|---|---|
fact_finance_data |
财务快报数据 (本月/累计/同比) | 1,234,917 |
fact_treasury_account_balance |
资金账户余额 | 10,533 |
视图
| 视图 | 说明 |
|---|---|
v_monthly_summary |
按月-单位-报表类别的汇总 |
v_organization_hierarchy |
组织架构递归展开 (含层级深度) |
技术栈
| 组件 | 技术 |
|---|---|
| ETL 框架 | Kedro ≥ 0.19.0 |
| 数据处理 | Polars(Pandas 仅遗留 parser 兼容层) |
| 数据仓库 | DuckDB |
| 可视化 | Flask, jsTree, Vizro, Shiny for Python, Plotly |
| AI 查询 | QueryChat + Anthropic Claude (自然语言 → SQL) |
| 精美表格 | great_tables (GT) |
| 报告生成 | Quarto |
| 邮件发送 | filepulse |
| 地理编码 | 高德地图 API |
| 包管理 | setuptools + pyproject.toml |
开发指南
管道列表
kedro registry list # 查看所有已注册管道
| 管道名 | 说明 |
|---|---|
__default__ |
完整管道 (财务 + 资金) |
ingest |
财务数据摄入 (Pandas) |
ingest_polars |
财务数据摄入 (Polars 优化) |
process |
指标标准化处理 |
warehouse |
财务数据仓库构建 |
finance_report |
财务快报完整链路 (Polars 摄入 → 处理 → 入库) |
treasury_data |
资金数据完整链路 (含银行网点维度 + 地理编码) |
dim_bank_branch |
银行网点维度构建 (独立运行) |
配置说明
Excel 解析配置 (finance_loader.yml):
file_pattern: 文件命名正则表达式sheet_type_rules: 工作表识别规则numbering_rules: 指标编号解析规则default_parsing_rules: 默认解析规则
指标标准化配置 (indicator_mapping.yml):
standard_account_library: 标准科目库引用路径context_disambiguation: 上下文消歧规则hierarchical_matching: 层级匹配规则
数据目录配置 (catalog.yml):
- 中间数据:
parsed_excel.*,normalized_indicators.* - 维度表:
dim_period,dim_unit_report,dim_standard_account,dim_organization_tree - 事实表:
fact_finance_data
扩展功能
- 添加新的数据源: 在
parser.py中扩展FinanceExcelParser类 - 添加新的指标类型: 在
matcher.py中扩展StandardAccountMatcher类 - 修改可视化界面: 编辑
templates/index.html和flask_app.py - 添加新的 Vizro 页面: 在
flask_app.py中添加vm.Page
故障排除
常见问题
- Kedro 运行时缺少
kedro_init_version错误: 已在pyproject.toml中配置kedro_init_version = "1.1.1" - Excel 文件无法解析: 检查文件格式和命名规则,参考
finance_loader.yml配置 - 标准科目匹配失败: 验证
standard_accounts.json格式和indicator_mapping.yml配置 - 可视化服务无法连接数据库: 检查 DuckDB 文件路径和权限
- Polars 优化不可用: 系统自动回退到 Pandas 实现,检查
data_ingestion_polars.py日志
日志查看
tail -f logs/my_finance_etl.log
版本历史
v1.6.1 (2026-06-03)
- 操作手册 📖: 新增完整操作手册
doc/操作手册.md— 涵盖部署环境、配置说明、ETL 管道操作、双引擎启动/停止、日报生成与发送、故障排除、备份恢复等完整运维指南 - 操作手册 PDF 📄: 新增 Typst 模板
doc/ilm/— 基于 ilm 模板生成 PDF 版本操作手册,含参考文献支持 - 子模块清理: 移除
standards子模块
v1.6.0 (2026-05-25)
- Shiny 双引擎架构 🚀: 新增
src/my_finance_shiny/14 页 Shiny for Python 仪表板 — Vizro(领导汇报大屏,port 5001)+ Shiny(个人电脑办公大屏,port 8000)双引擎并存,覆盖首页、地理分布、穿透监控、账户分析、余额统计分析五大模块 - AI 智能查询 🤖: 新增
smart_query页面 — 基于 QueryChat + Anthropic Claude 的自然语言数据探索,联动 KPI 卡片(账户总数/余额合计/银行类型分布)、Plotly 地理分布图(国内城市 + 海外国家)、great_tables细分维度表(含财务快报财务公司存款/商业银行存款数据)、交互式明细表,支持 CSV 导出 - 共享模块重构 🏗️: 抽取
src/my_finance_shared/— 消除 Vizro 与 Shiny 间的config.py和database.py重复代码,统一 DuckDB 连接(带重试锁)和 geo parquet 同步逻辑 - whiptail 图形启动器 🎛️:
start.sh/stop.sh— whiptail 伪图形界面,一键启动双服务并自动打开浏览器,日志写入logs/目录 - micromamba 环境: 新建
shiny_vizro环境 (Python 3.13),预装 shiny、vizro、dash、querychat、anthropic、great-tables 等全套依赖 - CLI 入口:
pyproject.toml新增my-finance-shiny脚本入口,版本号升至 1.6.0 - 财务快报数据集成: 子集团维度表关联资产负债表(货币资金 → 财务公司存款 + 商业银行存款),双日期标注(司库数据截至日期 + 财务快报截至日期)
- KPI 美化: 银行类型分布三列彩色展示(合作银行蓝/非合作银行橙/财务公司绿)
v1.5.1 (2026-05-14)
- 穿透监管报告 🔍: 新增 PanReg 穿透监管功能模块 — 集团成员单位账户数量异常检测报告
routes/panreg.py: 路由蓝印panreg_bp,端点/panreg-report返回account_PanReg_report.html静态报告文件dashboard/panreg.py: Vizro 页面 "穿透监管"(Card 组件嵌入 Markdown 链接)navigation.py: 导航菜单"分析"板块新增 "panreg" 页面入口(NavBar 二级菜单同步)__init__.py+routes/__init__.py: 注册panreg_bp蓝印
v1.5.2 (2026-05-14)
- 穿透监管报告扩展 🔍: PanReg 模块新增第二个报告端点
dashboard/panreg.py: 原有 Card 重构为"逃逸账户检测报告"(/panreg-report),新增"账户数量异常检测报告" Card(/panreg-report1)routes/panreg.py: 新增/panreg-report1端点,指向accountpro_PanReg_report.html静态报告文件
v1.5 (2026-05-14)
- Web 模块化架构重构 🏗️:
flask_app.py从约 1,436 行单体文件完全拆解为src/my_finance_web/模块包,遵循 Flask 工厂模式 + Blueprint 路由分离 + Vizro 仪表板子模块化,大幅提升可维护性与代码组织——配置集中至config.py(DB 路径/YAML 查表/邮件配置/Quarto 路径),数据库层抽象至database.py(DuckDB 连接 + 表存在检测 + 实体 ID 解析),4 个路由蓝印拆分为routes/子包(tree/treasury/report/geo),Dash 级联筛选回调独立为callbacks.py,7 个 Vizro 页面模块移至dashboard/子包(home/data/navigation/map/balance/account_map/account_detail) - CLI 入口新增 🚀:
pyproject.toml注册my-finance-web脚本入口,映射至src.my_finance_web:main,支持pip install -e .后直接使用 - 入口精简:
flask_app.py缩减为 6 行薄壳——仅导入create_app()并启动,原 ~1,430 行业务逻辑全部迁移至my_finance_web包 - 辅助工具: 新增
kill.sh端口/进程快捷终止脚本 - 依赖声明补全:
pyproject.toml补充vizro/dash/numpy/plotly/polars显式依赖声明
v1.4.4 (2026-05-14)
- 日报一键发送 📧: 新增
/api/send_reportAPI — 自动生成 Quarto PDF(如不存在)并调用 SMTP shell 脚本发送日报邮件;前端新增「发送日报」按钮(绿色),点击后自动取当前日期、展示发送状态,失败时显示具体错误信息 - 邮件配置独立化 ⚙️:
parameters.yml新增email配置节(from/to/subject_prefix),Flask 运行时动态读取,支持环境变量传递,解耦凭证与代码
v1.4.3 (2026-05-13)
- 日报生成日期参数恢复 🔧:
flask_app.py/api/generate_report恢复 year/month/day 查询参数,移除临时时间戳占位逻辑,日期参数正确传递至 Quarto 渲染命令(-P year/month/day),报告文件命名从时间戳改为日期格式 - 清理过期生成文件: 移除
generated_reports/中的临时报告文件
v1.4.2 (2026-05-13)
- AgGrid 筛选修复 🔧: 修复 v1.4.1 中 5 维筛选对 AgGrid 不生效的 bug —
_account_detail_df保留英文列名匹配 Vizro Filter,改用columnDefs.headerName设置中文显示名;删除无效rowData手动回调(目标组件 ID 错误 + 与 Vizro 内部竞态) - 新增账户户名列 📋: SQL 查询增加
ta.account_name,AgGrid 第二列显示具体开户企业名称 - 代码清理: 移除冗余的
_account_detail_df列 rename 和重复的开户网点列
v1.4.1 (2026-05-13)
- 账户明细表页面 📋: 新增独立 Vizro 页面
account-detail,使用 AgGrid 交互式表格展示全量账户明细(子集团/账户户名/所属银行/城市/省份/余额/开户网点),支持分页和排序 - 账户地图内嵌表格 🗺️:
bank-account-map地图页面新增加 AgGrid 明细表,通过 Vizro 自动筛选联动地图气泡;5 维筛选(子集团/所属银行/省份/城市/开户网点)统一作用于图表和表格,Dash 回调实现省份→城市级联选项更新 - AgGrid 列名对齐修复 🔧:
_account_detail_df保留英文列名匹配 Vizro Filter 列名要求(不再 rename 为中文),改用columnDefs.headerName设置中文显示名;删除无效的rowData手动回调(目标组件 ID 错误 + 与 Vizro 内部_on_page_load竞态),筛选由 Vizro 自动托管 - 导航菜单更新: "分析"菜单新增"账户明细表"入口
v1.4 (2026-05-13)
- 文件缓存加速 ⚡: 新增
file_cache.py— 基于 MD5 的文件级缓存模块,跳过未变更的 Excel 文件解析;polars_optimizer.py和treasury_ingestion.py均已集成,支持财报(base_info + report_data)和司库(treasury)双模式缓存;参数通过parameters.yml的processing.enable_file_cache开关控制 - 银行网点维度管道 🏦: 新增
dim_bank_branch.pypipeline 节点 — 从司库账户信息的institution_code提取唯一银行网点 (2,590 个),关联 CNAPS XML (中国人民银行现代化支付系统行名行号) 丰富银行名称、类型、地区代码等 15 个元数据字段,通过geo_bank.parquet缓存关联经纬度坐标 - 地理编码管道化 🌍: 新增
enrich_geo_coordinates.pypipeline 节点 — 将地理编码从after_nodes钩子重构为正式 pipeline 节点,银行网点通过高德 POI 搜索编码,企业通过高德 geocode 编码;采用双层缓存策略(实体缓存 geo_enterprise/geo_bank + 地址缓存 geo_address),支持地址 TTL 过期 (12 个月) 和失败重试冷却 (3 个月);geocoder.py从src/迁移至scripts/,保留为独立修复脚本 - DuckDB 数仓扩展 📦:
duckdb_data_warehouse.py新增dim_bank_branch表加载 (含institution_code索引);treasury_warehouse.py新增dim_bank_branch_enriched和dim_unit_geo同步写入 - Pipeline 注册重构 🔗:
pipeline_registry.py注册dim_bank_branch和enrich_geo_coordinatespipeline;treasury_full重构为 5 阶段链式管道 (摄入 → 处理 → 银行网点 → 地理编码 → 数仓);新增dim_bank_branch独立管道入口 - 配置扩展 📝:
catalog.yml新增dim_bank_branch、dim_bank_branch_enriched、dim_unit_geo三个数据集;parameters.yml新增processing.enable_file_cache/processing.file_cache_dir、bank_branch.cnaps_xml_path/bank_branch.geo_cache_path、geo.*配置节;hooks.yml地理编码钩子注释更新为enrich_geo_coordinates管道引用 - 可视化优化 🎨:
flask_app.py账户地图散点图颜色方案从 Viridis_r 改为 Viridis;银行网点关联customdata字段支持点击查看网点名称;dim_unit_geo同步逻辑从CREATE TABLE IF NOT EXISTS改为CREATE OR REPLACE TABLE IF NOT EXISTS确保数据刷新;移除已删除geocoder的直接 import 依赖 - 安全修复 🔧:
hooks.pyafter_nodes钩子读取增加中间 None 安全访问(.get(hook_type, {}).get(...)→.get(hook_type) or {}),避免 YAML 注释导致NoneType报错
v1.3 (2026-05-12)
- Vizro 多页面仪表板重构 🔥: 新增 HOME 欢迎页,导航从单层改为 NavBar 二级菜单(HOME/账户),账户下设监控、分析、账户余额统计分析三大模块
- 银行账户地图 🗺️: 新增全国账户地理分布图,按网点聚合余额,悬浮框展示子集团明细;支持子集团/所属银行/省份/城市四维筛选(Dash 回调级联联动),省份→城市自然级联;气泡大小 log10(余额)² 缩放,颜色 Viridis_r 渐变
- 账户余额统计分析模块 📊: 5 个分析页面 — 整体情况(KPI 卡片+直方图+饼图+柱状图)、子集团维度(水平柱状图+Treemap)、所属银行维度(柱状图+饼图+堆叠柱状图)、地理维度(城市排名柱状图)、交叉维度(散点图+箱线图);一条基础查询支持全模块聚合
- 城市→省份映射 📍: 内置 188 个城市→34 个省级行政区映射字典,解决
dim_bank_branch无省份字段问题 - 数据维度增强:
dim_bank_branch表纳入数据仓库(2,590 个银行网点,94.4% 已地理编码),通过institution_code关联资金账户表 - 筛选交互优化: 移除故障 Dash 全联动回调,保留省份→城市单向级联;城市变化不反驱省份(已注释说明)
- 数据展示优化: 余额单位统一为万元(hover + colorbar),气泡公式迭代至
log10**2 * 2
v1.2 (2026-05-09)
- 匹配引擎重构为 YAML 查表式匹配 🔥:
matcher.py完全重写 — 从 JSON 标准科目库多级匹配(名称→别名→路径→上下文消歧)切换为基于finance_mapping_standard.yaml的预计算三级索引查表,彻底消除跨报表类别污染问题 - 指标映射标准全面修正:
finance_mapping_standard.yaml165+ 处修正 — 汇总项代码精确化(01→01.01、02→02.01、02→02.10等)、资产/负债类别混淆修复 8 处(应收票据→应付票据、应收账款→预付款项/合同资产等)、子项数据类型TOTAL→SUB_DETAIL修正 40+ 处、层级路径补齐 - 离线科目映射脚本: 新增
scripts/run_mapping_standards.py— 从 Excel 模板 +standard_accounts.json自动生成完整 YAML 映射表,支持编号层级检测、父级约束匹配、乱序行定位 - Vizro 穿透监控大屏重设计: 货币资金散点 → 资产负债气泡散点(资产 vs 负债,气泡=账户数,颜色=资产负债率)+ 杠杆率 vs 账户规模散点(30-80% 正常区间高亮);排除差额口径 (suffix=1) 和合并口径 (suffix=9) 单位;单位维度只保留最新期间数据;中国地图 UI 优化
- Flask API 匹配验证增强:
/api/node_data改用 YAML 查表 + 标准科目代码交叉验证,替代不可靠的文本清洗比较;/api/units_geo新增DISTINCT ON最新期间过滤 - 数据仓库 schema 扩展:
duckdb_data_warehouse.py维度表注册表新增dim_unit_geo,支持地理编码表关联 - Parser 重构文档化:
parser.py标注为遗留代码,新增load_yaml_mapping()辅助函数,活跃解析器指向polars_optimizer.py - 配置简化:
indicator_mapping.yml标准科目源从 JSON 切换到 YAML,移除context_rules上下文消歧规则块 - 数据质量增强:
data_warehouse.py事实表raw_path增加空格规范化(\s+→单空格)
v1.1 (2026-05-09)
- 标准科目库升级:
standard_accounts.json升级至 v2.0,基于 2018 年版一般企业财务报表格式重构三层级科目树 (151 个科目,新增所有者权益变动表),增强standard_path层级路径和结构化match_rules - 新增配置:
finance_mapping_standard.yaml财务指标映射标准配置 - 自动地理编码: 启用
hooks.yml中的after_nodes钩子,维度表构建后自动执行高德地理编码 - 本部口径优先:
treasury_processing.py资金账户实体匹配改为 suffix=0(本部口径)优先,排除合并口径 (suffix=9) 和差额口径 (suffix=1) - parent_code 选填:
polars_optimizer.py放宽必填字段校验,parent_code 为空不再拒绝文件 - 组织树后处理文档化:
tree_builder.py将自引用/父节点失踪/根节点口径统一处理逻辑暂时禁用,添加详细边界情况注释,待基础数据质量提升后重新启用 - Flask 写入修复:
flask_app.py中 geo parquet 同步 DuckDB 改用独立可写连接,避免只读连接写入报错 - 代码清理:
treasury_parser.py移除未使用的loggingimport
v1.0 (2026-04)
- 首个完整版本:财务 ETL、DuckDB 星型模型、Flask 可视化、Vizro 仪表板
许可证
MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file my_finance_etl-1.6.2.tar.gz.
File metadata
- Download URL: my_finance_etl-1.6.2.tar.gz
- Upload date:
- Size: 99.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
13b8a2f99f34e59d65b8e5fc48558633598f1f4d215bcf1462c2a731a2e484d6
|
|
| MD5 |
7d93040475263cdfb5885c7f4e324a72
|
|
| BLAKE2b-256 |
07e2d26bd668b4e37b842222444e1f507bdfee695368fd7ef81fc7b1f58f4cac
|
File details
Details for the file my_finance_etl-1.6.2-py3-none-any.whl.
File metadata
- Download URL: my_finance_etl-1.6.2-py3-none-any.whl
- Upload date:
- Size: 112.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a89b46faac68fb4b9cc6c352463ae86c11d688d08d71038c5ba423edfcad8cdc
|
|
| MD5 |
e3469cec84aca6295c31d98c6941255f
|
|
| BLAKE2b-256 |
b09f86d166207603ad931df6afa1860d1e4772fc3ae140fe9bd9ea02fde197de
|