获取特定化学组成的数据 Pymatgen

导入所需模块

import numpy as np
from matminer.datasets import load_dataset
import matplotlib.pyplot as plt 
from pymatgen.core import Composition
import numpy as np
import pandas as pd
import pymatgen as mg
import itertools
import random
from pymatgen.core.composition import Composition
from pymatgen.core.molecular_orbitals import MolecularOrbitals
from matminer.featurizers.conversions import StrToComposition
from matminer.featurizers.composition import ElementProperty, ValenceOrbital, CohesiveEnergy
from matminer.featurizers.base import BaseFeaturizer
all_symbols = ["Y", "Lu", "Gd","Tb", "La", "Ca", "Al", "Ga", "Sc", "Si", "Sb", "In", "Mg", "Mn", "Ge", "Ba","Li",'Na','K','Rb','Cs','Ba','Sr']
complx = list(itertools.combinations(all_symbols, 3)) 
complex_picked = random.sample(complx,1771)
system = list(map(lambda x: complex_picked[x][0] + '-' + complex_picked[x][1]+ '-' + complex_picked[x][2]+'-' +'O',np.arange(len(complex_picked))))
def que(x):
    a = MPRester('KEY')
    data = a.query(criteria=x,properties=["band_gap","pretty_formula","spacegroup",'structure'])
    return data
data=[]
valid_num=[]
for i in system:
    res=que(i)
    if res !=[]:
        data.extend(res)
        valid_num.append(system.index(i))
        print(len(res),"hello,jojo!",system.index(i))
from pymatgen.ext.matproj import MPRester
data=[]
valid_num=[]
for i in system:
    res = que(i)
    if res != []:
        data.extend(res)
        valid_num.append(system.index(i))
        print("len(res):",len(res),"  system.index(i):",system.index(i),"  res:",res)
result=pd.DataFrame(data)

计算描述符

def mat_descriptor_calculation(material):
    mat=mg.Composition(material)
    fraction_list=list(map(lambda x: mat.get_atomic_fraction(x), mat))
    sort_frac=fraction_list.sort(reverse=True)
    if sort_frac is not None:
        fraction=sort_frac[0]/sort_frac[1]
    else:
        fraction=1
    atomic_number=list(map(lambda x: x.Z, mat))
    electronegativity=list(map(lambda x: x.X, mat))
    element_group=list(map(lambda x: x.group, mat))
    descriptor=atomic_number+electronegativity+element_group
    descriptor.append(fraction)
    return descriptor

mat_descriptor=list(map(lambda x:mat_descriptor_calculation(data[x['pretty_formula']),length))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值