Chapter 57

データの前処理

poclabweb
poclabweb
2022.10.23に更新

1. データの前処理: setup()

化学データとして、溶解度のデータを使用します。

前に行ったので、詳しい説明は省略します。

!wget 'http://modem.ucsd.edu/adme/data/databases/logS/data_set.dat'

from rdkit import rdBase, Chem
from rdkit.Chem import AllChem, PandasTools
import numpy as np

# データの呼び出しなど
df = pd.read_csv('data_set.dat', sep='\t', header=None, names = ["smiles", "CAS", "logS"]) 
PandasTools.AddMoleculeColumnToFrame(df, "smiles")
df = df.dropna(subset=['ROMol'], axis=0)
df = df.reset_index()

# fingerprintの作成
fingerprints = []
safe = []
for mol_idx, mol in enumerate(df["ROMol"]):
    try:
        fingerprint = [x for x in AllChem.GetMorganFingerprintAsBitVect(mol, 2, 2048)]
        fingerprints.append(fingerprint)
        safe.append(mol_idx)
        
    except:
        print("Error", mol_idx)
        continue
fingerprints = np.array(fingerprints)
df_fp = pd.DataFrame(fingerprints)

# dfをあわせて表示
df_comb = pd.merge(df, df_fp, left_index=True, right_index=True)

データを確認しておきます。

df_comb.head(1)

前回と同じになるように、テストデータとトレーニングデータに分割します。

from sklearn.model_selection import train_test_split
df_train, df_test = train_test_split(df_comb, test_size = 0.1, random_state = 10)

pycaretのデータの前処理

from pycaret.regression import *
exp1 = setup(df_train, target = 'logS', ignore_features= ['index', 'smiles', 'CAS', 'ROMol'], silent=True, fold_shuffle=True, session_id=123, test_data=df_test)

#今回は、テストとトレーニングデータを事前に用意しているのでtest_dataにdf_testにしています。
# train_sizeを設定して、ここで設定することもできます。

# 参考の解説記事
# https://qiita.com/Asagumo63/items/99357d4b472a9219040e
# もとの記事
# https://pycaret.gitbook.io/docs/get-started/quickstart?q=setup#regression

これだけで、いろいろ前処理を行ってくれます。

  • 訓練・テストデータ分割(Train-Test Split)
  • 欠損値処理(Missing Value Imputation)
  • カテゴリ変数の(One-Hot Encoding)

その他の設定に関する参考の解説記事

日本語で解説記事
https://qiita.com/Asagumo63/items/99357d4b472a9219040e

公式文書
https://pycaret.gitbook.io/docs/get-started/quickstart?q=setup#regression

分割されたデータの確認は、get_configでできる。

X_test = get_config('X_test') # 分割後のテスト用説明変数
X_train = get_config('X_train') # 分割後の学習用説明変数

必要に応じてデータの確認なども行います。

データ数が多いと非常に時間が掛かります。

import pandas_profiling
profile = df_comb.profile_report()
profile
profile.to_file("myoutputfile.html")