Day 71:【99天精通Python】项目篇开篇 - 金融数据看板需求分析
前言
欢迎来到项目篇的第一天(第71天)!
在之前的 70 天里,我们像练武一样,先练了扎马步(基础语法),又练了拳法(进阶特性),还学了刀枪剑戟(实战库)。现在,是时候下山闯荡江湖,打一场硬仗了。
我们将启动第一个大型综合项目——金融数据可视化看板 (Financial Dashboard)。
不像之前的练习代码那样只有几十行,这个项目将包含数据采集、存储、分析、Web展示全流程,代码量可能会达到上千行。它将是你简历上非常亮眼的一个作品。
本节内容:
- 项目背景与目标
- 需求分析 (User Stories)
- 技术选型 (Stack)
- 系统架构设计
- 数据库表结构设计
一、项目背景
在金融投资领域,信息就是金钱。投资者需要实时监控多只股票的行情,查看历史走势,对比不同股票的收益率。
虽然有很多炒股软件,但作为程序员,我们要开发一个属于自己的、可定制的数据看板。
核心目标:
搭建一个 Web 网站,用户可以在网页上搜索股票代码,查看该股票的 K 线图、移动平均线、成交量,并能对比多只股票的涨跌幅。
二、需求分析
我们把功能拆解为具体的模块:
数据获取模块:
- 对接金融数据接口(Tushare 或 BaoStock)。
- 支持历史数据下载(过去 1-3 年)。
- 支持每日增量更新(定时任务)。
数据存储模块:
- 将下载的数据存入数据库,避免重复请求接口。
- 使用 SQL 进行高效查询。
Web 展示模块:
- 首页:显示大盘指数(上证指数、纳斯达克)的走势。
- 搜索页:输入代码(如
600519),跳转到详情页。 - 详情页:展示该股票的 K 线图 (Candlestick) 和均线 (MA)。
- 对比页:选择两只股票,画出它们的收益率曲线对比图。
三、技术选型
为了实现上述功能,我们需要组合使用之前学过的技术:
| 模块 | 技术栈 | 理由 |
|---|---|---|
| Web 框架 | Flask | 轻量级,适合做数据展示型应用。 |
| 数据源 | BaoStock | 免费、无门槛的 A 股数据接口。 |
| 数据库 | SQLite | 简单易用,无需额外部署服务器。 |
| ORM | SQLAlchemy | Flask 的标配 ORM,操作数据库更方便。 |
| 图表库 | ECharts | 百度开源的 JS 图表库,比 Matplotlib 生成的静态图更炫酷、可交互。 |
| 定时任务 | APScheduler | Flask 的定时任务扩展,用于每天收盘后更新数据。 |
四、系统架构设计
五、数据库设计
我们需要两张核心表:一张存股票列表(公司名、代码),一张存具体的日线行情数据。
5.1 股票基础信息表 (stock_basic)
| 字段名 | 类型 | 说明 |
|---|---|---|
| code | VARCHAR | 股票代码 (PK),如sh.600519 |
| name | VARCHAR | 股票名称,如贵州茅台 |
| industry | VARCHAR | 所属行业 |
| update_time | DATETIME | 最后更新时间 |
5.2 日线行情表 (stock_daily)
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | INTEGER | 自增主键 |
| code | VARCHAR | 股票代码 (FK) |
| date | DATE | 交易日期 |
| open | FLOAT | 开盘价 |
| close | FLOAT | 收盘价 |
| high | FLOAT | 最高价 |
| low | FLOAT | 最低价 |
| volume | FLOAT | 成交量 |
六、环境搭建
创建一个新的项目文件夹finance_board,并配置虚拟环境。
mkdirfinance_boardcdfinance_board# 1. 创建虚拟环境python -m venv venv# 2. 激活环境 (Windows)venv\Scripts\activate# (Mac/Linux: source venv/bin/activate)# 3. 安装依赖pipinstallflask flask-sqlalchemy baostock pandas apscheduler七、项目结构初始化
建立以下目录结构:
finance_board/ ├── app.py # Flask 入口 ├── config.py # 配置文件 ├── models.py # 数据库模型 ├── services/ # 业务逻辑 │ ├── data_fetcher.py # 数据抓取 │ └── analysis.py # 数据分析 ├── static/ # 静态文件 (JS/CSS) └── templates/ # HTML 模板八、小结
今天是项目启动的第一天。做项目最忌讳上来就写代码,想清楚比写得快更重要。
我们完成了:
- 需求明确:要做一个股票数据看板。
- 架构设计:确定了 Flask + SQLite + ECharts 的技术路线。
- 数据建模:设计了数据库表结构。
明天 (Day 72),我们将开始编写后端核心代码:搭建数据库模型,并编写脚本从 BaoStock 拉取股票列表和历史数据。
系列导航:
- 上一篇:Day 70 - 实战篇总结
- 下一篇:Day 72 - 金融数据看板数据层实现(待更新)