基于 V 语言 + veb 框架 构建的 Web 应用,展示 Our World in Data 整理的全球发展数据。
- 📊 主题分类浏览:人口、健康、能源、经济、教育、食品等数据主题
- 📈 数据指标展示:每个主题下多个关键指标,含数据值与来源
- 🔍 数据概览:所有指标的汇总表格
- 📱 响应式设计:基于 Bootstrap 5,适配桌面与移动端
- 🛠️ 数据工具:独立的 CSV 下载与导入工具
| 层 | 技术 |
|---|---|
| 语言 | V 0.5.2 |
| Web 框架 | veb |
| 数据库 | MySQL 8.0 (via db.mysql) |
| 数据库驱动 | db.mysql (标准库) |
| 前端 | Bootstrap 5.3 + 自定义 CSS |
| 模板 | veb HTML 模板引擎 |
owid/
├── main.v # 入口文件
├── v.mod # V 模块定义
├── config/config.v # 应用配置
├── database/init.v # 数据库连接与建表
├── handlers/handlers.v # HTTP 处理器 / 数据查询
├── models/topic.v # 数据模型
├── views/
│ ├── index.html # 首页模板
│ ├── topic.html # 主题详情模板
│ ├── data.html # 数据概览模板
│ └── about.html # 关于页面模板
├── static/
│ └── css/owid.css # 自定义样式
├── data/ # 下载的 CSV 数据文件
├── tools/
│ ├── seed/main.v # 种子数据填充工具
│ ├── owid_download/main.v # OWID 数据下载工具
│ └── owid_import/main.v # CSV→MySQL 批量导入工具
└── tocodex-docs/ # 项目文档记录
- V 编译器 ≥ 0.5.2
- MySQL 8.0 服务
CREATE DATABASE owid CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'owid'@'localhost' IDENTIFIED BY 'Owid_Pass_2026!Strong';
GRANT ALL ON owid.* TO 'owid'@'localhost';
FLUSH PRIVILEGES;连接配置可在 config/config.v 中修改。
从 Our World in Data 下载最新 CSV 数据集:
# 项目根目录
v run tools/owid_download/下载的 CSV 文件保存到 data/ 目录下。
将下载的 CSV 数据批量导入 MySQL:
v run tools/owid_import/工具会自动创建主题和指标,并批量插入数据点(每批 500 行)。 已存在的数据会被覆盖(先删除旧数据再插入)。
v run .访问 http://localhost:8080
| 主题 | 数据集 | 文件 | 数据点 |
|---|---|---|---|
| 人口 | 人口总数(历史) | population.csv |
~55K |
| 人口 | 出生时预期寿命 | life-expectancy.csv |
~22K |
| 人口 | 生育率 | children-per-woman-un.csv |
~19K |
| 人口 | 中位年龄 | median-age.csv |
~19K |
| 健康 | 5岁以下儿童死亡率 | child-mortality.csv |
~17K |
| 健康 | 孕产妇死亡率 | maternal-mortality.csv |
~9K |
| 能源 | 年度 CO₂ 排放量 | annual-co2-emissions-per-country.csv |
~29K |
| 能源 | 可再生电力占比 | share-electricity-renewables.csv |
~8K |
| 经济 | 人均 GDP(购买力平价) | gdp-per-capita-worldbank.csv |
~7K |
| 教育 | 平均受教育年限 | mean-years-of-schooling.csv |
~4K |
总计约 165K 条数据点,覆盖 278 个国家和地区。
| 命令 | 说明 |
|---|---|
v run . |
启动 Web 服务器(端口 8080) |
v run tools/owid_download/ |
从 OWID 下载最新 CSV 数据 |
v run tools/owid_import/ |
将 CSV 数据导入 MySQL |
v run tools/seed/ |
填充或重置种子数据 |
v run . -d trace |
以调试模式启动 |
数据由 Our World in Data 整理发布,通过 OWID Chart API 获取(参数 csvType=full&useColumnShortNames=true)。每个指标标注了原始数据来源(World Bank、WHO、UN 等)。
MIT