导入所需模块
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))