用途
该技能用于构建基于哈佛艺术博物馆 API 的端到端数据工程与分析应用,演示真实场景中的 ETL 管道、SQL 数据库设计、分析查询以及交互式 Streamlit 仪表板。整体架构为:API → ETL → SQL → 分析 → 可视化。
主要能力
- 提取(Extract):从哈佛艺术博物馆 API 分页抓取文物数据,支持速率限制。
- 转换(Transform):将嵌套 JSON 转换为规范化的关系表,包括元数据、媒体、颜色三类数据。
- 加载(Load):将数据批量插入 MySQL/TiDB Cloud,并建立正确的外键关系。
- 分析(Analyze):执行 20 多条预定义 SQL 查询以获取洞察。
- 可视化(Visualize):通过 Streamlit 以交互式 Plotly 图表展示结果。
使用方式
安装
# Clone the repository
git clone https://github.com/Manali0711/Harvard-Artifacts-Collection-Data-Engineering-Analytics-App.git
cd Harvard-Artifacts-Collection-Data-Engineering-Analytics-App
# Install dependencies
pip install -r requirements.txt
# Set up environment variables
export HARVARD_API_KEY="your_api_key_here"
export DB_HOST="your_database_host"
export DB_USER="your_database_user"
export DB_PASSWORD="your_database_password"
export DB_NAME="harvard_artifacts"
配置
API 密钥需从 https://www.harvardartmuseums.org/collections/api 获取,并通过环境变量安全存储:
import os
API_KEY = os.getenv('HARVARD_API_KEY')
BASE_URL = "https://api.harvardartmuseums.org/object"
数据库连接配置:
import mysql.connector
import os
db_config = {
'host': os.getenv('DB_HOST'),
'user': os.getenv('DB_USER'),
'password': os.getenv('DB_PASSWORD'),
'database': os.getenv('DB_NAME')
}
conn = mysql.connector.connect(**db_config)
数据库结构
项目使用三张规范化表:artifactmetadata(文物元数据)、artifactmedia(文物媒体)、artifactcolors(文物颜色),后两者通过外键关联到 artifactmetadata 的 id。
运行应用
# Start the Streamlit app
streamlit run app.py
# The app will be available at http://localhost:8501
ETL 管道实现
提取阶段使用 requests 调用 API,支持分页与 hasimage 过滤;转换阶段使用 pandas 将原始数据拆分为元数据、媒体、颜色三个 DataFrame;加载阶段使用 mysql.connector 的 executemany 批量插入,元数据表使用 ON DUPLICATE KEY UPDATE 处理重复。
分析查询
内置 ANALYTICS_QUERIES 字典,包含按部门统计文物、按世纪统计文物、最常见颜色、媒体可用性、按文化与世纪统计文物等示例查询,通过 execute_query 返回 DataFrame。
Streamlit 仪表板
侧边栏选择分析项,点击按钮执行查询,展示结果表格,并在列数不少于 2 时自动生成 Plotly 柱状图。
常见模式
- 完整 ETL 工作流:run_etl_pipeline 依次执行提取、转换、加载并返回统计信息。
- API 速率限制:fetch_with_rate_limit 在请求间加入延迟。
- 增量加载:通过查询数据库中最大 id,仅抓取 id 大于该值的新文物。
故障排查
- API 连接问题:捕获超时与请求异常并提示。
- 数据库连接失败:test_db_connection 测试连接状态。
- 缺失数据处理:safe_get 安全提取字段并支持截断长度。
适用场景
适合需要演示或学习数据工程全流程的场景,包括 API 数据抓取、JSON 规范化、关系型数据库建模、SQL 分析与 Streamlit 可视化。
限制
需要自行申请哈佛艺术博物馆 API 密钥,并准备可用的 MySQL/TiDB 数据库。具体收费、价格、平台支持范围及运行效果等资料暂未提供。