Material Project와 Ciitrination API를 사용한 대역 갭 비교

9317 단어 Python반도체
지난번 기고한 글기계 학습을 이용한 반도체 물리적 예측에서는 머티리얼 프로젝트의 데이터가 PBE라는 기능을 사용해 틈이 있는 계산 정밀도가 좋지 않아 예측할 수 없다는 지적이 나왔다.이번에 사용된 것은 논문의 틈새 실험 데이터를 문자 발굴을 통해 수집한 데이터베이스다.

의 목적


Material Project의 일차원 원리를 통해 계산된 대극 데이터와Citrination의 실험값을 비교한다.

작업 환경

  • Python 3.6.5::Anaconda
  • pandas 0.23.1
  • pymatgen 2018.6.11
  • matminer 0.3.7
  • $ pip install matminer
    $ pip install pymatgen
    

    Ciitrination(실험값)

    import numpy as np
    import pandas as pd
    
    # pandasの設定
    pd.set_option('display.width', 1000)
    pd.set_option('display.max_columns', None)
    pd.set_option('display.max_rows', None)
    
    import warnings
    warnings.filterwarnings('ignore')
    
    from matminer.data_retrieval.retrieve_Citrine import CitrineDataRetrieval
    
    api_key = xxxxxxxxxxxxx # CitrinationのAPI key
    c = CitrineDataRetrieval(api_key) 
    
    df = c.get_dataframe(criteria={'data_type': 'EXPERIMENTAL', 'max_results': 100},
                         properties=['Band gap', 'Temperature'],
                        common_fields=['chemicalFormula'])
    df.rename(columns={'Band gap': 'Experimental band gap'}, inplace=True) 
    

    Material Project(계산 값)

    from pymatgen import MPRester, Composition
    api_key = yyyyyyyyyyy # Material ProjectのAPI key
    mpr = MPRester(api_key) 
    
    def get_MP_bandgap(formula):
        """Given a composition, get the band gap energy of the ground-state structure
        at that composition
    
        Args:
            composition (string) - Chemical formula
        Returns:
            (float) Band gap energy of the ground state structure"""
        reduced_formula = Composition(formula).get_integer_formula_and_factor()[0]
        struct_lst = mpr.get_data(reduced_formula)
    
        if struct_lst:
            return sorted(struct_lst, key=lambda e: e['energy_per_atom'])[0]['band_gap']
    
    df['Computed band gap'] = df['chemicalFormula'].apply(get_MP_bandgap)
    

    결실

    from matminer.figrecipes.plot import PlotlyFig
    
    pf = PlotlyFig(df, x_title='Experimental band gap (eV)', 
                   y_title='Computed band gap (ev)',mode='notebook', 
                   fontsize=20, ticksize=15)
    pf.xy([('Experimental band gap', 'Computed band gap'), ([0, 10], [0, 10])], 
          modes=['markers', 'lines'], lines=[{}, {'color': 'black', 'dash': 'dash'}],
          labels='chemicalFormula', showlegends=False)
    

    참고 자료

  • Matminer: example
  • Matminer: An open source toolkit for materials data mining
  • 좋은 웹페이지 즐겨찾기