pymatgen:组成成本与资源集中度
读取随库历史元素数据,按质量分数组成计算成本和HHI,说明输入单位、归一化及数据时效。
阅读本篇目录
想做材料初筛时,可以先整理组成和元素数据,再计算相应指标。本例在鸢算科技集群实际调用成本与HHI接口,比较NaCl、LiFePO₄、LiCoO₂、Bi₂Te₃和CuNi。
这里用的是pymatgen随库历史数据:成本表含2013年参考记录,HHI表来自历史资源研究。这些值用于演示算法,不是当前市场报价或采购建议。 换成自己的数据时,应统一币种、日期、纯度与报价口径。
unzip pymatgen-composition-order-models-wave717-*.zip
cd pymatgen-composition-order-models
module load pymatgen/2026.9.24
bash results.sh
bash plot.sh
环境为pymatgen2026.9.24、Python3.11、NumPy/SciPy和Matplotlib。results.sh读已有结果;plot.sh把参考数据画到figures。run.sh会重新做这套小规模后处理,结果写到新建的analysis,不会启动DFT或MD。已有analysis时请保留它,在另一份解压目录分析。

1. 先看输入数据格式#
head -n 8 inputs/costdb_elements.csv
head -n 8 inputs/hhi_data.csv
成本CSV每行是formula,cost_per_kg,name,BibTeX,没有表头;引用字段用竖线|包围,因此含逗号的引用也可保留。HHI文件有注释行,后续为元素、产量HHI和储量HHI。
本例把安装环境中的表复制到包内,保留其原值。HHI按组成的质量分数加权,不能误用原子分数。成本表仅含元素时,相应成本也是元素原料口径,不是化合物的实际工业制备成本。
2. 调用成本接口#
python - <<'PY'
from pathlib import Path
from pymatgen.analysis.cost import CostDBCSV, CostAnalyzer
db = CostDBCSV(str(Path('inputs/costdb_elements.csv').resolve()))
analyzer = CostAnalyzer(db)
for formula in ['NaCl', 'LiFePO4', 'LiCoO2', 'Bi2Te3', 'CuNi']:
print(formula, analyzer.get_cost_per_kg(formula),
analyzer.get_cost_per_mol(formula))
PY
get_cost_per_mol对应你传入的化学式单元;get_cost_per_kg是质量归一化。把化学式整体乘2,每kg值不变,每mol所指的化学式单元则改变。
| 组成 | 原表货币单位/kg | 原表货币单位/mol化学式 |
|---|---|---|
| NaCl | 99.253028 | 5.800622 |
| LiFePO₄ | 60.299153 | 9.512635 |
| LiCoO₂ | 22.986208 | 2.249729 |
| Bi₂Te₃ | 180.043869 | 144.172073 |
| CuNi | 15.640800 | 1.911922 |
原表值很容易与当前商品价格不同,尤其“纯元素原料组成”和“直接采购化合物”是不同问题。加入自有化合物原料报价后,get_lowest_decomposition会在已提供的条目中找组成匹配的最低成本组合;该组合仍没有描述实际反应可行性、产率、能耗或工艺费用。
3. 调用HHI接口#
python - <<'PY'
from pymatgen.analysis.hhi import HHIModel
hhi = HHIModel()
for formula in ['NaCl', 'LiFePO4', 'LiCoO2', 'Bi2Te3', 'CuNi']:
production, reserve = hhi.get_hhi(formula)
print(formula, production, reserve,
hhi.get_hhi_designation(production))
print('缺少相应元素数据:', hhi.get_hhi('LiH'))
PY
| 组成 | 质量加权产量HHI | 质量加权储量HHI |
|---|---|---|
| NaCl | 1342.6511 | 1106.6277 |
| LiFePO₄ | 1572.6887 | 1884.5408 |
| LiCoO₂ | 2235.7669 | 2087.1051 |
| Bi₂Te₃ | 4152.6911 | 5474.1501 |
| CuNi | 1311.9093 | 1500.0000 |
这是库定义的组成指标,不是重新调查各国供应量后算出的当前结果。库中的low/medium/high是历史分级规则;不能直接据此评估当前供应风险。
此版本HHI表缺少H数据,LiH返回(None,None)。不要把缺失值改成0,否则会错误表示资源非常分散。
4. 检查质量分数与单位#
cat reference-data/Pymatgen-composition-components.csv
cat reference-data/Pymatgen-composition-cost-HHI.csv
bash run.sh
若元素价格为pᵢ、质量分数为wᵢ,只有元素原料条目时,每kg成本为Σwᵢpᵢ;每mol成本再乘该化学式的kg/mol。HHI同样使用ΣwᵢHHIᵢ。本例用独立质量加权公式核对了接口输出。
换自己的数据时,把数据日期、货币和计量单位一起保存在资料中,再用同一CSV格式运行。接口说明见pymatgen分析模块。