LoginSignup
0
0

More than 3 years have passed since last update.

DeepChemでScaffoldSplitterを使った場合にValueError: No molecule providedが発生した話

Last updated at Posted at 2019-10-28

はじめに

DeepChemでScaffoldSplitterを普通に使ったところ、掲題のエラーが発生したので調べたときのメモ

環境

  • python 3.6
  • deepchem 2.2.1.dev54
  • rdkit 2019.03.3.0

現象

splitterにScaffoldSplitterを指定して意気揚々とCross-Validationをやろうとしたら、deepchem.data.CSVLoaderでcsvファイルを読み込もうとした時に、以下エラーが発生。

  File "C:\Users\XXX\AppData\Local\conda\conda\envs\yyy\lib\site-packages\rdkit\Chem\Scaffolds\MurckoScaffold.py", line
108, in MurckoScaffoldSmiles
    raise ValueError('No molecule provided')
ValueError: No molecule provided

原因と解決策

エラーログを元に色々見たところ、deepchem.splits.splitters.pyの870行目に以下を発見。


 for ind, smiles in enumerate(dataset.ids):
      if ind % log_every_n == 0:
        log("Generating scaffold %d/%d" % (ind, data_len), self.verbose)
      scaffold = generate_scaffold(smiles)
      if scaffold not in scaffolds:
        scaffolds[scaffold] = [ind]
      else:
        scaffolds[scaffold].append(ind)

dataset.idsからsmilesとってんじゃん。CSVLoaderでid_fieldを明示的に指定した場合は、そこにはsmilesは格納されないわけだから、そのフィールドをsmilesと勝手に判断し、molに変換したらそりゃー、'No molecule provided'が発生するよ。
といっても、こんなファイル修正しようがないのでScaffoldSplitterを使う場合は、CSVLoaderのid_fieldsは指定しないようにしましょう。
そうすると、id_fieldにsmiles_fieldsの値が設定されるっぽいので、結果オーライです。
id_fieldが何に使われてるか知らんけど、まあ今のところ大丈夫っぽい。

loader = dc.data.CSVLoader(tasks=[args.target_col],
#                              id_field=args.id_col, # ここはコメントオフにしよう。
                               smiles_field=args.smiles_col,
                               featurizer=featurizer)

おわりに

OSSを使う場合は、適度にソースも見ながら、うまく付き合うことが大事ということで。。。 
以上、取り急ぎご報告まで失礼します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0