用途
该技能用于构建一个完整的、可运行的数据工程与分析应用,数据源为哈佛艺术博物馆 API。它把从数据采集、转换、入库到分析可视化的整条链路串起来,适合作为学习或参考 ETL 模式、关系数据库设计和轻量级数据分析仪表板的示例项目。
主要能力
- API 集成:从哈佛艺术博物馆 API 抓取藏品数据,支持分页(size/page 参数)与限速(请求间隔 sleep)。默认只抓取带图片的藏品(hasimage=1)。
- ETL 流程:把嵌套 JSON 转换为规范化的关系表。转换逻辑拆分为三部分:藏品元数据(artifactmetadata)、媒体/图片信息(artifactmedia)、颜色信息(artifactcolors)。
- 数据库设计:创建结构化的 MySQL/TiDB 表,media 与 colors 表通过外键 objectid 关联到 metadata 表,并支持批量插入(INSERT IGNORE + executemany)。
- SQL 分析:内置一组分析查询,包括按世纪统计藏品、Top 文化、部门分布、色彩谱系分析、媒体格式分布、多图藏品等。
- 可视化:使用 Streamlit 构建交互式仪表板,侧边栏可选择分析查询并运行,结果以表格展示,并用 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
pip install streamlit pandas requests mysql-connector-python plotly python-dotenv
配置:在项目根目录创建 .env 文件,填入哈佛 API Key 与数据库连接信息(HARVARD_API_KEY、DB_HOST、DB_PORT、DB_USER、DB_PASSWORD、DB_NAME)。API Key 需前往 https://www.harvardartmuseums.org/collections/api 免费申请。
数据库初始化:使用 mysql.connector 连接数据库后,调用 create_database_schema 创建 artifactmetadata、artifactmedia、artifactcolors 三张表。
项目结构包含:app.py(Streamlit 主程序)、etl_pipeline.py(抽取/转换逻辑)、database.py(数据库连接与操作)、queries.py(SQL 分析查询)、requirements.txt、.env。
运行:
streamlit run app.py
# 访问 http://localhost:8501
也可通过命令运行完整 ETL 或执行单条查询:
python -c "from etl_pipeline import run_full_etl; run_full_etl()"
python -c "from queries import execute_query; execute_query('SELECT * FROM artifactmetadata LIMIT 10')"
在仪表板中,可通过侧边栏选择分析查询并点击 Run Query 执行,或点击 Run ETL 触发抓取、转换与入库流程。
常见模式与排错
资料给出了若干实践模式:增量采集(查询数据库中最大 objectid,仅抓取更新的记录)、API 调用重试与指数退避(max_retries + 2 的幂次等待)、数据质量校验(去重、填充缺失值、类型转换、过滤无效记录)、连接池(MySQLConnectionPool)、分块 ETL 以降低内存占用、以及外键空值处理(先取有效 objectid 集合,仅加载匹配的媒体记录)。排错方面包括:API 限速时增加请求间隔、数据库连接超时时改用连接池、大数据集内存错误时按块处理、外键 NULL 值时先加载父表。
适用场景
适合数据工程学习者、希望参考 API + ETL + SQL + Streamlit 端到端示例的开发者,以及需要快速搭建藏品类数据分析原型的场景。
限制
资料未提供该技能的收费、价格、平台兼容性等商业信息;数据库类型明确提到 MySQL/TiDB,其他数据库支持暂未提供;实际抓取数量、性能指标与生产环境部署方式暂未提供。