一个面向组合管理月度复盘的 Streamlit 数据看板。项目把组合宽表、账户维度、投资品种、委内/委外盘子、久期和资产明细证据串在同一个工作流里,用来回答三个核心问题:
- 组合规模和收益本月/年初以来发生了什么变化?
- 哪些账户、品种、经理和委受托关系贡献或拖累了结果?
- 汇总结果能否追溯到单项资产,并暴露数据质量问题?
这个仓库也可以作为个人页面或作品集案例使用:它展示了从原始 Excel 宽表到交互式分析产品的完整实现,包括数据口径沉淀、指标解释、图表交互、异常提示和资产级别 drill-down。
- 总体复盘:汇总当前数据时点市值、年初以来收益、平均资金占用、快照行数和数据质量提示。
- 趋势图表:展示全价市值、正回购融资余额、当月收益与年初以来累计收益走势。
- 投资品种分析:按投资品种比较收益贡献和扣收益后的规模变化,并强制纳入股权/不动产主题品种,避免低频资产被 Top/Bottom 截断。
- 委内/委外比较:并列展示委内配置盘、交易盘、非标,以及人保、泰康、中信建投、中邮证券、富国、华泰、华夏、国泰海通、大成、广发、太平资产香港、太保投资香港、国寿富兰克林等委外账户。
- 账户与经理拆解:支持账户、投资品种和投资经理局部筛选,帮助从组合结果定位到具体责任维度。
- 资产证据:把收益贡献、收益拖累、规模增减和年初持仓变化追溯到单项资产。
- 数据质量检查:集中提示未分配经理、异常收益率、负收益资产、缺失字段等需要人工核对的问题。
- 月末正式版和临时中间版 Excel 均只放在本地
data/monthly_snapshots/;文件名必须含YYYYMMDD,该目录下的 Excel 不提交到 Git。 - 页面以完整日期作为唯一分析键,并明确显示“月末正式版”或“临时中间版”;
snapshot_month只保留为所属月份标签。 - Git 和 Streamlit Cloud 以
data/snapshot_parquet/中的 Parquet 与manifest.json作为发布数据;manifest 会校验文件哈希、快照身份、行数和控制数。 - Excel 仍是本地更新时的权威输入;本地存在 Excel 时,加载器会继续核对源文件哈希,避免忘记重新生成 Parquet。
- 数据读取与字段标准化在
portfolio_data.py。 - 账户、品种、经理和资产证据汇总在
account_review.py。 - 委内/委外、配置盘/交易盘分类规则在
strategy_books.py;对应的分类回归和月度快照控制数在tests/test_strategy_books.py。 - 必需字段、可选字段和标准列名集中维护在
config.py。
- 将新的月末或临时 Excel 宽表放入本地
data/monthly_snapshots/,并在文件名中保留完整日期;该文件会被 Git 忽略。 - 运行
python scripts/build_snapshot_parquet.py,增量更新data/snapshot_parquet/*.parquet和manifest.json;同日期会替换,其余历史快照会保留。 - 运行
python -m unittest,确认控制数和读取回归通过。 - 只提交 parquet、manifest 以及相关代码或测试变更,不提交 Excel 和本地分析材料。
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
PORTFOLIO_APP_PASSWORD=your-password streamlit run app.py然后打开 http://localhost:8501,输入 PORTFOLIO_APP_PASSWORD 配置的访问密码。
Streamlit Cloud 部署时,在应用 Secrets 中配置 app_password;仓库本身不保存密码。
应用默认显示密码登录页;只有显式配置 maintenance_mode = true 时才进入维护页。
python -m compileall app.py portfolio_data.py account_review.py strategy_books.py config.py
python -m unittest discover.
├── app.py # Streamlit 页面、主题和图表编排
├── portfolio_data.py # 月度快照发现、读取和标准化
├── account_review.py # 账户/品种/经理汇总与资产证据
├── strategy_books.py # 委内/委外与配置盘/交易盘分类
├── config.py # 字段映射和全局配置
├── data/monthly_snapshots/ # 本地 Excel 构建输入(Git 忽略)
├── data/snapshot_parquet/ # Git/部署使用的 Parquet 快照与 manifest
└── tests/ # 分类规则与控制数测试