課題別チュートリアル
SMILES CSVで重複候補を記録する
元の行をすべて残し、chematicの正規化SMILESを横に書き、ファイルをサーバーへ送らずに重複候補を記録します。
作るもの
元のSMILES、ローカル正規化形式、unique・duplicate・invalidを明示した行を残すCSVレポート。
手順
- smilesヘッダーを持つmolecules.csvを作り、いくつかの入力行を用意します。
- chematicを導入してから、下の標準ライブラリだけを使うPythonスクリプトを実行します。
- 行の削除や統合の前に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は重複確認の候補であり、塩形、立体情報、由来、意図した同一性まで証明するものではありません。元の行とパッケージ版を残し、データを削除する前に標準化の方針を検証してください。