課題別チュートリアル
無効なSMILES行も残して記述子CSVを作る
SMILES列を読み込み、行ごとに記述子を計算し、無効な入力も元の値と一緒に記録します。
作るもの
元の行番号、SMILES、計算値、解析エラーを対応づけたCSVレポート。
手順
- pip install chematic pandasで必要なパッケージを導入します。
- smilesという列名のCSVを用意します。
- 空でない各行をfrom_smilesで読み込み、記述子の一部を記録します。
- 成功行と無効SMILES行を1つのレポートへ書き出し、絞り込み前にstatusを確認します。
# pip install chematic pandas
import chematic
import pandas as pd
source = pd.read_csv("compounds.csv")
rows = []
for source_row, smiles in source["smiles"].dropna().astype(str).items():
try:
mol = chematic.from_smiles(smiles)
rows.append({"source_row": source_row + 2, "smiles": smiles, "status": "ok",
"mw": mol.mw, "logp": mol.logp, "tpsa": mol.tpsa})
except ValueError as error:
rows.append({"source_row": source_row + 2, "smiles": smiles,
"status": "invalid_smiles", "error": str(error)})
pd.DataFrame(rows).to_csv("descriptor-report.csv", index=False)期待する結果
descriptor-report.csvでは、空でない入力行ごとにstatusを確認できます。成功行にはMW・LogP・TPSAが入り、無効な文字列には入力とパーサーエラーが残ります。
うまくいかないとき
高速なbulk.descriptors APIは無効なSMILESを意図的にスキップします。元表との対応が必要なときは、まずこの行を残す方法で確認してから、有効な行だけを一括処理します。