Samsung AI Challenge for Scientific Discovery

알고리즘 | NLP | 회귀 | 물성 | MAE

  • moneyIcon Prize : 총 1,400만원
  • 960명 마감

 

SDF 파일 불러오고 간단하게 회귀해보기

2021.08.09 17:57 4,966 Views language

.

Code
로그인이 필요합니다
0 / 1000
sjfghy
2021.08.10 13:05

삭제된 댓글입니다

sjfghy
2021.08.10 13:05

삭제된 댓글입니다

insub
2021.08.20 16:45

openbabel 코랩에서 설치 너무 까다롭네요ㅠㅠ 
혹시 설치방법 공유해주실 수 있으실까요?

insub
2021.08.20 17:36

으윽 바로 아래 게시글에 미니콘다로 설치하는 방법이 있었네요. 등잔밑이 어두워서 세시간 날렸습니다...

insub
2021.08.20 18:22

#코랩에서 sdf_load 하는데 5시간걸린데서 페러럴하게 짜봤습니다.
import pandas as pd
import numpy as np
from multiprocessing import Pool

num_cores = 4
#num_cores = multiprocessing.cpu_count()

def func(train_df):
    mols = dict()
    for n in tqdm(train_df.index):
        mol = [i for i in pybel.readfile('sdf',sdf_load(n))]
        if len(mol) > 0:
            mols[n] = mol[0]
    mols_df = pds.DataFrame().from_dict({n:v.calcdesc()for n,v in mols.items()}).transpose()
    mols_df = mols_df.dropna(axis = 1)
    mols_df.loc[:,'uid'] = [f'train_{n}' for n in mols.keys()]
    df = pd.merge(train_df,mols_df,'outer',on='uid').dropna()
    df['y'] = df['S1_energy(eV)'] - df['T1_energy(eV)']
    return df

def parallelize_dataframe(df, func):
    df_split = np.array_split(df, num_cores)
    pool = Pool(num_cores)
    df = pd.concat(pool.map(func, df_split))
    pool.close()
    pool.join()
    return df

train = parallelize_dataframe(train_df, func)

ATOW
2021.08.20 21:11

현재 위 코드를 돌릴 때에는 'rotors' 칼럼이 제외되어 20 칼럼이 나오네요. 혹시 이것이 잘못된 것은 아닌지요?
좋은 코드 공유 감사합니다:) !~!

10duck
2021.08.20 21:16

만약 rotors의 결과 중 Nan이 포함되어있다면 아래 코드로 인해 제거됩니다. 

mols_df = mols_df.dropna(axis = 1)

babel의 version 차이로 rotors가 계산에서 제외 될 수 있구요.
확인해보시면 좋을것같아요 :)

ATOW
2021.08.21 19:40

삭제된 댓글입니다