第4章:材料数据库——Materials Project、OQMD、AFLOW等公开数据库介绍与API使用

做材料设计,最头疼的是什么?我个人觉得,不是算法不够好,而是数据太难找。

十年前我刚入行那会儿,查个材料数据得翻文献、查手册,有时候为了一个晶格常数得折腾半天。现在好了,公开数据库越来越多,数据量也越来越大。但问题又来了——数据库太多,到底该用哪个?API怎么调?今天我就把几个主流数据库掰开揉碎了讲讲。

4.1 三大主流材料数据库概览

目前学术界和工业界用得最多的,就是Materials Project、OQMD和AFLOW这三家。它们各有侧重,我一个个说。

数据库 机构 数据量 特点
Materials Project MIT & LBNL ~15万种材料 计算数据最全,社区活跃
OQMD 西北大学 & NIST ~100万种材料 数据量大,侧重相图
AFLOW 杜克大学 ~350万种材料 自动化流程,数据标准化

你想想看,光一个Materials Project就有15万种材料,每个材料还带着几十个属性——带隙、形成能、弹性常数、压电系数……这要是靠人工查,得查到猴年马月去。

4.2 Materials Project:最常用的材料数据库

我个人习惯先从Materials Project入手。为什么?因为它的API最成熟,文档最清晰,社区也最大。

4.2.1 注册与API密钥获取

要用API,得先注册。去materialsproject.org注册个账号,然后在个人设置里生成API密钥。嗯,这里要注意:密钥别泄露,别往GitHub上乱传。我曾经见过有人把密钥硬编码在代码里,结果被爬虫扫到,账号直接被封了。

4.2.2 使用Python调用MP API

官方推荐用pymatgen库,这玩意儿是材料计算的瑞士军刀。先安装:

pip install pymatgen

然后写个简单的查询脚本:

from pymatgen.ext.matproj import MPRester

# 用你的API密钥替换下面的字符串
API_KEY = "你的API密钥"

with MPRester(API_KEY) as mpr:
    # 查询带隙大于1.5eV的氧化物
    criteria = {"elements": ["O"], "band_gap": {"$gt": 1.5}}
    properties = ["material_id", "formula_pretty", "band_gap", "formation_energy_per_atom"]
    
    results = mpr.query(criteria, properties)
    
    for r in results[:5]:
        print(f"{r['material_id']}: {r['formula_pretty']}, "
              f"带隙={r['band_gap']:.2f}eV, "
              f"形成能={r['formation_energy_per_atom']:.3f}eV/atom")

跑一下,就能拿到符合条件的材料列表。说白了,这就是在数据库里做SQL查询,只不过换成了MongoDB的语法。

小技巧: 查询条件里的"$gt"表示大于,"$lt"表示小于,"$gte"是大于等于。这些操作符跟MongoDB完全一样,熟悉NoSQL的同学上手很快。

4.3 OQMD:相图分析的好帮手

OQMD的全称是Open Quantum Materials Database。它最大的特点是数据量大——超过100万种材料。但说实话,数据质量参差不齐,有些计算参数不太一致。

我一般在做相图分析时才会用OQMD。比如研究某个体系的稳定相,OQMD的覆盖度比Materials Project广得多。

4.3.1 OQMD的API使用

OQMD的API相对简单,用requests库就能调:

import requests

BASE_URL = "https://oqmd.org/api"

# 查询含Fe和O的稳定相
response = requests.get(
    f"{BASE_URL}/materials",
    params={
        "elements": "Fe,O",
        "stability": "stable",
        "limit": 10
    }
)

data = response.json()
for mat in data['data']:
    print(f"{mat['formula']}: 形成能={mat['formation_energy']:.3f}eV/atom")

你看,代码比MP的还简洁。但有个坑——OQMD的API文档更新不及时,有些参数名跟文档对不上。我曾经踩过这个坑,查了半天才发现是参数名写错了。

避坑指南: 用OQMD API时,建议先看看他们GitHub上的最新示例代码,别光看官网文档。官网文档可能还是两年前的版本。

4.4 AFLOW:自动化高通量计算的标杆

AFLOW是杜克大学搞的,全称是Automatic FLOW for Materials Discovery。它的特点是所有计算流程都标准化了,数据一致性最好。

但说实话,AFLOW的API用起来稍微麻烦点。它用的是RESTful API,返回的是XML格式,得自己解析。

4.4.1 AFLOW的API调用示例

import requests
import xml.etree.ElementTree as ET

AFLOW_URL = "http://aflowlib.org/API/aflow"

# 查询带隙在1.0-2.0eV之间的材料
params = {
    "api": "aflow",
    "cmd": "search",
    "species": "O",
    "band_gap": "1.0,2.0",
    "format": "xml"
}

response = requests.get(AFLOW_URL, params=params)
root = ET.fromstring(response.content)

for entry in root.findall(".//entry"):
    formula = entry.find("formula").text
    band_gap = entry.find("band_gap").text
    print(f"{formula}: 带隙={band_gap}eV")

嗯,这里要注意:AFLOW的API有调用频率限制,别一次性发太多请求。我刚开始用的时候没注意,结果IP被临时封了半小时。

4.5 数据库对比与选型建议

说了这么多,到底该用哪个?我根据自己的经验,给个简单的选型建议:

  • 做新材料筛选: 首选Materials Project,数据质量高,社区活跃,遇到问题容易找到解决方案
  • 做相图分析: 用OQMD,数据量大,覆盖的体系多
  • 做机器学习训练: 用AFLOW,数据标准化程度高,特征一致性最好
  • 做交叉验证: 三个数据库都查一遍,取交集或并集
核心观点: 没有完美的数据库,只有最适合你任务的数据库。我个人的工作流是:先用MP快速筛选,再用OQMD扩大搜索范围,最后用AFLOW做数据验证。

4.6 本章知识体系

为了让你更直观地理解这几个数据库的关系和使用场景,我画了张图:

材料数据库知识体系 公开材料数据库 Materials Project OQMD AFLOW 数据质量高 社区活跃 API最成熟 数据量大 侧重相图 覆盖广 标准化程度高 数据一致性好 适合ML训练 新材料筛选 相图分析 机器学习训练

这张图把三个数据库的特点和应用场景串起来了。你想想看,做材料设计时,数据获取是第一步,也是最关键的一步。数据不对,后面再好的算法也是白搭。

4.7 实战建议

最后,给几个实战中的小建议:

  • 别只依赖一个数据库: 不同数据库的计算参数可能不同,同一个材料在不同数据库里的数据可能有差异。我一般会交叉验证。
  • 注意数据版本: 数据库会不断更新,同一个材料ID在不同版本里的数据可能不一样。做研究时记得记录数据版本。
  • 缓存查询结果: API调用有次数限制,而且网络请求也慢。我习惯把查询结果存成JSON文件,下次直接读本地。
  • 批量查询要节制: 别一次性查几万条数据,服务器会受不了。分批次查,每批几百条,中间加个sleep。
我的经验: 刚开始用API时,先查几条数据试试水,确认返回格式没问题了,再大规模查询。别一上来就全量拉取,万一代码有bug,白费功夫。

好了,数据库这块就聊到这儿。记住一句话:数据是材料AI的燃料,选对数据库,你的工作就成功了一半。


公众号:蓝海资料掘金营,微信deep3321