Help us understand the problem. What is going on with this article?

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

はじめに

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away