Harvard Art Museums Data Engineering & Analytics 是一个归属于数据技能集合的项目,展示了围绕 Harvard Art Museums API 的完整数据工程工作流:从 API 提取数据、转换为关系表、加载到 SQL 数据库,并使用 Streamlit 构建交互式分析仪表板。
一、用途 该项目的目标是演示端到端的数据工程流程,具体包括:从 Harvard Art Museums API 获取文物(artifact)数据,将嵌套的 JSON 转换为结构化关系表,加载到 SQL 数据库,并构建可视化分析仪表板。
二、主要能力
- API 集成:从 Harvard Art Museums API 分页抓取文物数据,并处理速率限制。
- ETL 管道:将嵌套 JSON 转换为结构化关系表,涵盖元数据(metadata)、媒体(media)、颜色(colors)三类表。
- SQL 存储:将数据加载到 MySQL/TiDB Cloud,并包含相应的表结构设计。
- 分析能力:执行 20 多个预定义的 SQL 分析查询。
- 可视化:使用 Plotly 构建交互式仪表板进行数据探索。
三、安装方式 资料提供了以下安装步骤: 克隆仓库: git clone https://github.com/Manali0711/Harvard-Artifacts-Collection-Data-Engineering-Analytics-App.git cd Harvard-Artifacts-Collection-Data-Engineering-Analytics-App 安装依赖: pip install -r requirements.txt 设置环境变量: export HARVARD_API_KEY="your_api_key" export DB_HOST="your_db_host" export DB_USER="your_db_user" export DB_PASSWORD="your_db_password" export DB_NAME="harvard_artifacts" 依赖通常包括:streamlit、pandas、requests、mysql-connector-python、plotly、python-dotenv。
四、使用方式
- API 集成:需在 Harvard Art Museums API 注册并获取 API Key,将其存入环境变量或 .env 文件。通过 fetch_artifacts 函数按 size、page 和 hasimage 参数获取分页数据;通过 fetch_all_artifacts 函数分页抓取多页数据,并设置 max_records 上限,同时用 time.sleep(0.5) 尊重速率限制。
- ETL 提取:extract_metadata 提取 object_id、title、culture、period、century、classification、department、dated、division 等字段;extract_media 提取 image_id、base_url、width、height、format;extract_colors 提取 color、spectrum、hue、percent。
- ETL 转换:transform_metadata 去除重复、处理空值、截断过长文本;transform_media 去除无 image_id 的行并将尺寸转为整数。
- 加载到数据库:通过 get_db_connection 建立连接,create_tables 创建 artifactmetadata、artifactmedia、artifactcolors 三张表(含外键关联),load_to_database 使用批量插入(INSERT IGNORE)将 DataFrame 写入数据库。
- Streamlit 仪表板:主应用包含侧边栏导航,分为 Data Collection、SQL Analytics、Visualizations 三个功能页;数据采集页可输入抓取记录数并触发抓取、ETL 与入库;SQL 分析页可选择预定义查询并执行,结果以表格展示,当结果含两列时自动生成柱状图。
- 预定义分析查询包括:按世纪统计文物、Top Cultures、部门分布、颜色调色板分析、图像尺寸分析等。
- 常见模式:通过 python-dotenv 加载环境变量配置;使用 safe_api_call 实现带指数退避的重试逻辑;API 速率限制时增加请求间隔;数据库连接问题用 conn.ping(reconnect=True) 检查;API 响应缺失字段使用 .get() 并设默认值;大数据集使用分块(chunk)加载以避免内存问题。
五、适用场景 适合希望学习或演示数据工程完整流程的场景,包括 API 数据采集、JSON 转关系模型、MySQL/TiDB 入库、SQL 分析与 Streamlit 可视化仪表板的端到端实践。
六、限制与暂未提供的信息 资料未说明该项目的许可协议、收费标准、服务等级或性能指标;未提供 API 的调用配额、速率限制的具体数值,也未说明数据库版本要求、部署平台细节以及 20 多个分析查询的完整清单。以上内容暂未提供。