用OQMD的API下载晶体结构数据

前言:

最近在做深度学习在材料的应用的事情,第一步就是下载数据集,由于OQMD的数据量更大, 并且结构多样性高等优点,因此我想从该数据库中下载数据作为训练集。但是检索了一些资料发现没有能够直接用来运行就能下载数据的代码。总结了搜集到的资料, 自己写了一个用来从OQMD中下载数据的python脚本。

代码实现:

总体部分

def get_poscar_data_from_oqmd():
    #定义起始url地址
    #initial_url_template = "起始url地址"
    all_links = []
    next_links = ""
    csv_name = "materials_ids.csv"
    max_attempts = 5
    attempts = 0

    #添加列标题
    if (os.path.getsize(csv_name) == 0):
        with open(csv_name,"w",newline="") as f:
            csv_writer = csv.writer(f)
            csv_writer.writerow(["Material_ID"])
            f.close()

    #从中断的url缓存中继续读取文件
    while(attempts<=max_attempts):
        with open("links", "r") as f:
            all_links = f.readlines()
            rows = len(all_links)
            if(rows == 0):
                link = initial_url_template
            else:
                link = all_links[-1]
                response = requests.get(link)
                data = response.json()
                link = data["links"]["next"]

        get_all_links_and_data(link,rows+1,csv_name)
    print("数据已经全部下载")

这里是总体调用的部分。

读取地址部分:

def get_all_links_and_data(url,rows,csv_file_name):
    next_link = url
    i = rows
    while(next_link):
        print(f"第{i}个link")
        response = requests.get(next_link)
        data_json = response.json()
        with open("links", "a") as file_links:
            file_links.write(next_link + "\n")
            file_links.close()

        data = data_json["data"]
        sum = 0
        with open(csv_file_name,"a",newline="") as csv_file:
            csv_writer = csv.writer(csv_file)
            for j in range(len(data)):
                if data[j]["attributes"]["_oqmd_spacegroup"] in cubic_sp:
                    sum += 1
                    structure = data[j]

                    poscar, filename = get_poscar_from_optimade_structure(structure)

                    id = structure["id"]
                    csv_writer.writerow([id])

                    with open(os.path.join("dataset","POSCAR_"+str(id)), "w") as f:
                        f.write(poscar)
                        f.close()
        csv_file.close()
        print(f"第{i}页符合条件的晶体数量为{sum}个")

这部分是用来从json网页中下载数据,但是这里下载的下来的结构是POSCAR结构的,如果需要用cif文件,则需要用pymatgen转换成CIF结构文件,后续需要的话再添加上去。

获得POSCAR文件:

def get_poscar_from_optimade_structure(structure):
    if '_oqmd_entry_id' in structure['attributes'].keys():
        poscar = ["REST API StructureID {}, OQMD Entry ID {}".format(
            structure['id'], structure['attributes']['_oqmd_entry_id']
        )]
        filename = "ID-{}_OQMD-EnID-{}.poscar".format(structure['id'], structure['attributes']['_oqmd_entry_id'])
    else:
        poscar = ["REST API StructureID {}".format(structure['id'])]
        filename = "ID-{}.poscar".format(structure['id'])

    poscar.append("1.0")

    poscar += [" ".join([str(jtem) for jtem in item])
               for item in structure['attributes']['lattice_vectors']
               ]

    elems = []
    counts = []
    for item in structure['attributes']['species_at_sites']:
        if item in elems:
            assert elems.index(item) == len(elems) - 1
            counts[-1] += 1
        else:
            elems.append(deepcopy(item))
            counts.append(1)
    poscar.append(" ".join(elems))
    poscar.append(" ".join([str(item) for item in counts]))

    poscar.append("Cartesian")

    poscar += [" ".join([str(jtem) for jtem in item])
               for item in structure['attributes']['cartesian_site_positions']
               ]
    poscar = "\n".join(poscar)
    return (poscar, filename)

这部分代码主要是根据之前网址中读取的晶体信息保存成POSCAR文件。

总结:

从OQMD中下载数据集的代码大致流程是这样,有一些细节上的东西没有修改。另外,使用之前需要先根据筛选条件检索得到一个json地址,然后用来初始化inital_url_template。 在运行过程中,由于考虑到了网址访问出错的问题,因此在中断后继续运行代码即可,如果遇到不能访问的网址,则需要在网址的offset部分往后翻一页即可。后续的转换成cif文件是一个比较容易的问题。

<think>好的,我需要帮用户寻找与铋合金相关的开源数据集。首先,用户提到了“铋合金数据下载”以及“开源”,所以我要确保推荐的数据集是开放获取的。接下来,我需要回忆一下常见的材料科学数据库,尤其是那些涉及合金数据的。 首先,想到的是Materials Project,这是一个知名的材料数据库,由伯克利实验室维护,包含大量材料的结构和属性数据,应该支持搜索铋合金。用户可能需要注册,但数据是免费的,所以符合开源要求。需要确认他们是否有铋合金的具体数据,比如Bi-Sn或Bi-Pb等常见合金。 然后是Open Quantum Materials Database (OQMD),这也是一个开源数据库,提供合金的相图、热力学数据等。铋合金的相关信息可能在这里能找到,特别是相图数据,这对材料研究很重要。 Citrination平台整合了多个来源的数据,可能包含铋合金的实验或计算数据。用户可以通过他们的搜索功能查找,但要注意部分数据集可能有访问限制,所以需要强调开源的部分。 NOMAD数据库主要面向欧洲的研究者,存储了第一性原理计算的结果,如果用户需要理论数据,比如电子结构,这可能是个好选择。不过要确认是否包含铋合金。 ATAT工具包虽然本身是软件,但它常与CALPHAD数据库结合使用,用于合金设计。用户可能需要相图信息,所以建议他们结合CALPHAD方法,并参考ATAT的文档。 此外,GitHub、GitLab等开源平台有时会有研究者分享特定数据集,可以建议用户去那里搜索,比如用关键词“bismuth alloy dataset”查找。 还要考虑引用用户提供的站内引用,比如引用[4]提到ATAT与CALPHAD、VASP等的集成,可以指出这一点,增强相关性。引用[1]提到的材料科学数据库项目可能也相关,需要确认是否包含铋合金数据,但可能作为一般性推荐。 需要确保推荐的每个资源都注明是否开源、如何访问,可能的使用场景,比如研究或教育。同时,提醒用户注意数据许可协议,确保合规使用。 最后,生成相关问题,帮助用户进一步探索,比如如何访问Materials Project的数据,或如何使用CALPHAD方法分析铋合金。这些问题需要与推荐的资源相关,引导用户深入查询。</think>### 铋合金数据集的开源资源推荐 以下是可用于获取铋合金相关数据集的**开源平台和数据库**,结合材料科学领域常用资源整理: --- #### 1. **Materials Project** - **简介**: 由伯克利实验室维护的大型材料数据库,包含晶体结构、热力学性质、电子特性等数据,涵盖多种合金体系。 - **铋合金示例**: - 可搜索铋基合金如$Bi-Sn$(铋锡合金)、$Bi-Pb$(铋铅合金)的相图、形成能等数据。 - 提供API接口和网页界面,支持批量下载。 - **访问方式**: - 官网: [materialsproject.org](https://materialsproject.org) - **开源协议**: 免费注册,数据遵循CC-BY 4.0许可[^4]。 --- #### 2. **Open Quantum Materials Database (OQMD)** - **简介**: 包含超过百万种材料的计算数据,重点关注合金和化合物。 - **铋合金支持**: - 提供铋合金的相稳定性、晶格常数等计算结果,适合理论分析。 - **访问方式**: - 官网: [oqmd.org](https://oqmd.org) - **数据格式**: 可直接下载CSV或JSON文件。 --- #### 3. **Citrination** - **简介**: 由Citrine Informatics构建的数据平台,整合实验与计算数据。 - **铋合金数据**: - 包含铋合金的机械性能、热导率等实测数据集,部分数据开源。 - **访问方式**: - 官网: [citrination.com](https://citrination.com) - 使用关键词`bismuth alloy`过滤公开数据集[^1]。 --- #### 4. **NOMAD Repository** - **简介**: 欧洲材料大数据基础设施,存储第一性原理计算数据。 - **铋合金应用**: - 提供铋合金的电子结构、声子谱等高级计算数据。 - **访问方式**: - 官网: [nomad-lab.eu](https://nomad-lab.eu) - 支持按元素(Bi)和化合物类型筛选[^4]。 --- #### 5. **GitHub/GitLab 开源项目** - **检索建议**: - 搜索关键词如`bismuth alloy dataset`或`Bi-based alloys`,可能找到研究者共享的数据。 - 示例仓库: [CALPHAD铋合金热力学模型](https://github.com/用户名/仓库名)(需具体查找)。 --- #### 6. **ATAT工具包与CALPHAD数据库** - **简介**: ATAT是开源合金设计工具,可与CALPHAD数据库联动生成铋合金相图[^4]。 - **使用流程**: 1. 下载ATAT: [atat.org](http://atat.org) 2. 调用内置的铋合金热力学参数(或从文献补充)。 3. 生成相图及热力学性质。 --- ### 数据获取建议 1. **明确需求**: 区分需要实验数据(如力学性能)还是计算数据(如电子结构)。 2. **引用规范**: 使用开源数据时注明来源及协议。 3. **交叉验证**: 对比多个数据库数据以提高可靠性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成贤往事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值