課題別チュートリアル

SMILES CSVで重複候補を記録する

元の行をすべて残し、chematicの正規化SMILESを横に書き、ファイルをサーバーへ送らずに重複候補を記録します。

作るもの

元のSMILES、ローカル正規化形式、unique・duplicate・invalidを明示した行を残すCSVレポート。

手順

  1. smilesヘッダーを持つmolecules.csvを作り、いくつかの入力行を用意します。
  2. chematicを導入してから、下の標準ライブラリだけを使うPythonスクリプトを実行します。
  3. 行の削除や統合の前にmolecule-report.csvを確認します。
import csv
import chematic

seen = {}
with open("molecules.csv", newline="") as src, open("molecule-report.csv", "w", newline="") as out:
    reader = csv.DictReader(src)
    fields = ["source_row", "smiles", "canonical_smiles", "status"]
    writer = csv.DictWriter(out, fieldnames=fields)
    writer.writeheader()
    for source_row, row in enumerate(reader, start=2):
        smiles = row["smiles"].strip()
        try:
            canonical = chematic.from_smiles(smiles).smiles
            status = f"duplicate_of_row_{seen[canonical]}" if canonical in seen else "unique"
            seen.setdefault(canonical, source_row)
        except ValueError:
            canonical, status = "", "invalid_smiles"
        writer.writerow({"source_row": source_row, "smiles": smiles,
                         "canonical_smiles": canonical, "status": status})

期待する結果

CCOとOCCを別の行に置くと、どちらにもcanonical_smilesとしてC(C)Oが入り、後の行はduplicate_of_row_2になります。無効なSMILESもinvalid_smilesとしてレポートに残ります。

うまくいかないとき

同じ正規化SMILESは重複確認の候補であり、塩形、立体情報、由来、意図した同一性まで証明するものではありません。元の行とパッケージ版を残し、データを削除する前に標準化の方針を検証してください。

次の行動

Pythonワークフローを見る