課題別チュートリアル

無効なSMILES行も残して記述子CSVを作る

SMILES列を読み込み、行ごとに記述子を計算し、無効な入力も元の値と一緒に記録します。

作るもの

元の行番号、SMILES、計算値、解析エラーを対応づけたCSVレポート。

手順

  1. pip install chematic pandasで必要なパッケージを導入します。
  2. smilesという列名のCSVを用意します。
  3. 空でない各行をfrom_smilesで読み込み、記述子の一部を記録します。
  4. 成功行と無効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を意図的にスキップします。元表との対応が必要なときは、まずこの行を残す方法で確認してから、有効な行だけを一括処理します。

次の行動

Pythonワークフローを見る