暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python脚本批量提取MP数据库材料结构信息

Linux与数据库自学之道 2021-04-26
4242
更多精彩,请点击上方蓝字关注我们!

materials project是一个非常强大的材料数据库,配合python材料基因组软件包pymatgen,还可实现数据信息的批量提取,吸附位点结构的批量生成,相图计算,可视化能带等许多功能。今天介绍一下如何根据需求,批量提取含某种元素的所有结构信息(以含锂化合物为例),包括凸包能,形成能,结构参数等等。并指定所含化合物的个数。最终生成.csv文件。





python批量提取结构信息



import pymatgen as mg
from pymatgen import Structure,Lattice,MPRester,Molecule
from pymatgen import MPRester
from pymatgen import Composition, Element
import itertools
import IPython
import random
mpr = MPRester('API-KEY')
import json
import requests
import csv
import pandas as pd

class MP(object):
    def __init__(self):
        self.url = 'https://materialsproject.org//rest//v2//query'
        self.APIKEY = "82eb6zMkxRyEa4Uc"
        self.elements = ['H', 'He', 'Be', 'B', 'C', 'N', 'O', 'F', 'Ne', 'Na', 'Mg', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar',
                  'K', 'Ca', 'Sc', 'Ti', 'V', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br',
                  'Kr', 'Rb', 'Sr', 'Y', 'Zr', 'Nb', 'Mo', 'Te', 'Ru', 'Rh', 'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb', 'Te',
                  'I', 'Xe', 'Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm',
                  'Yb', 'Lu', 'Hf', 'Ta', 'W', 'Re', 'Os', 'Ir', 'Pt', 'Au', 'Hg', 'Tl', 'Pb', 'Bi', 'Po', 'At', 'Rn',
                  'Fr', 'Ra', 'Ac', 'Th', 'Pa', 'U', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf', 'Es', 'Fm','Md', 'No', 'Lr',
                 'Rf', 'Db', 'Sg', 'Bh', 'Hs', 'Mt', 'Ds', 'Rg', 'Cn', 'Nh', 'Fl', 'Mc', 'Lv', 'Ts', 'Og', 'Uue']
        self.mp = []
        self.ele_num = int(input("请输入元素种类的个数:"))        
   
    def get_data(self):
        #ele_num = int(input("请输入元素种类的个数:"))
        data = {
                 'criteria': {
                 'elements': {'$in': self.elements, '$all': ['Li']},
                 'nelements': self.ele_num,
                 },
                'properties': [
                     "material_id",
                     'energy',
                     'energy_per_atom',
                     'nsites',
                     'is_hubbard',
                     'elements',
                     'nelements',
                     'total_magnetization',
                     'oxide_type',
                     "unit_cell_formula",
                     "crystal_system",
                     "spacegroup",
                     "pretty_formula",
                     "spacegroup",
                     "formation_energy_per_atom",
                     "e_above_hull",
                     "volume",
                     "band_gap",
                     "density"      
                     ]
             }
        r = requests.post(self.url,headers={'X-API-KEY': self.APIKEY},data={k: json.dumps(v) for k,v in data.items()})
        response_content = r.json() # a dict
        self.mp.append(response_content)
        return self.mp
       
   def write_to_file(self):
        mp_info = self.get_data()
        n = mp_info[0]['response']
        headers = [
            "material_id",
            'energy',
            'energy_per_atom',
            'nsites',
            'is_hubbard',
            'elements',
            'nelements',
            'total_magnetization',
            'oxide_type',
            "unit_cell_formula",
            "crystal_system",
            "spacegroup",
            "pretty_formula",
            "spacegroup",
            "formation_energy_per_atom",
            "e_above_hull",
            "volume",
            "band_gap",
            "density",
        ] 
       
        with open('materials_info%d.csv'%(self.ele_num), 'a', newline='',encoding='utf-8') as f:
            writer = csv.DictWriter(f,fieldnames=headers) # 提前预览列名,当下面代码写入数据时,会将其一一对应。
            writer.writeheader()  # 写入列名
            writer.writerows(n) # 写入数据
            f.close()         

s = MP()    
s.write_to_file()       



转载是一种动力 分享是一种美德


Linux Shell 编程特殊符号详解

◆ 再谈重定向

◆ 详解Linux正则

◆ Python正则知多少

◆ Linux三剑客之grep

◆ Linux三剑客之sed详解(1)

◆ linux三剑客之sed详解(2)

◆ 小白入门awk必备

◆ 你所不知道的awk内建函数






文章转载自Linux与数据库自学之道,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论