化合物の記述子：RDKitを計算してみた

#この記事、何?
というわけでRDKitを。
ちゃちゃっと計算さしてくれるページないかと思ってたんだけど、どれも微妙にそのままでは動かなかったのでつぎはぎして作ってみた。
まあ、動けばいいというレベルなのであとで書き直すと思う。

#どういう人向け?
いつも通り自分向け。
まあ、似たようなこと考えている方、pythonスクリプト一つで、SDFファイルを
csvにしてくれると助かるという方向け。

#試した環境は?
Windows 8 Pro (x64)
rdkit 2017.09.2.0

#やりたいこと
RDKitの計算。
最終的にはRDBに突っ込んでからだけど、まずはcsv化ということで。

#やったこと

まずはここを参考に動かしてみた。
ただ、そのままじゃ動かなかった。
(変数の記述が足りてない?)

■Rdkitを使って、SDFファイルを分解
https://qiita.com/beginnerhuman/items/cb1ce16ce7f9cdd667a1

なので、大先生のサイトから記載をちょっと流用。(すみません、お世話になります!)

■Support Vector Machine
https://funatsu-lab.github.io/open-course-ware/machine-learning/support-vector-machine/

で、何とか動いた。

```py

#16-02.py
import rdkit
import pandas as pd
from rdkit import Chem
from rdkit.Chem import Descriptors
from rdkit.ML.Descriptors import MoleculeDescriptors

suppl = Chem.SDMolSupplier('00000001_00025000_mini.sdf')
mols = [x for x in suppl if x is not None]
descs = [desc_name[0] for desc_name in Descriptors._descList]

#化合物の数
print(len(mols))
#記述子の数
print(len(descs))

desc_calc = MoleculeDescriptors.MolecularDescriptorCalculator(descs)
descriptors = pd.DataFrame([desc_calc.CalcDescriptors(mol) for mol in mols])
descriptors.columns = descs

smiles = [Chem.MolToSmiles(mol) for mol in mols]
descriptors.index = smiles
#descriptors.to_csv('00000001_00025000_mini.csv')

y_name = '_Name'
y = pd.DataFrame([mol.GetProp(y_name) for mol in mols])
y.index = smiles
y.columns = [y_name]

dataset = pd.concat([y, descriptors], axis=1)
dataset.to_csv('00000001_00025000_mini.csv')

```

#いろいろと課題が。。。

##Pandas
全然わからない・・・
とてもじゃないけど転用して上にのせたようなコード、自力で作れる気がしない。。。
勉強しましょうね、はい。

##記述子の数
RDKitって、200個くらい記述子あるんじゃなかったっけ?
なんか、途中で115個って出るんですが・・・
他に作ったWin10やCentOSだと同じコードで200個演算されるし、それぞれの環境で、conda list > list.txtでとったテキストを比較しても主だった差がないようにしか見えないんだけど・・・
とりあえず、rdkitインストールし直してみようかな?
・・・やってみた。
悪化した。from rdkit import Chemすら通らなくなった・・・orz
まあ、こんな時の仮想環境ということで。
conda remve -n py36 --all
さよなら~
あっ、しまった。残しておいて、あとから環境問題のトラブルシュート用に取っておいてもよかったたかも。。。


##化合物ファイル
別記事のこれで集めたファイル2Dと3Dがあるうちの、2D版だったみたい。

■化合物を300万個目指していっぱい集めてみた
https://qiita.com/siinai/items/7b4196f4271448093a1f

「記述子が足らない?あっ、3Dじゃないからか～」と勝手に納得したおかげで気づいた。
おかげで情報量が多いほうを再入手。
PowerShellでwgetするんでこんな感じで。

```powershell

Invoke-WebRequest -Uri ftp://ftp.ncbi.nlm.nih.gov/pubchem/Compound_3D/01_conf_per_cmpd/SDF/00000001_00025000.sdf.gz -OutFile C:\shared\20190127\00000001_00025000.sdf.gz
Invoke-WebRequest -Uri ftp://ftp.ncbi.nlm.nih.gov/pubchem/Compound_3D/01_conf_per_cmpd/SDF/00025001_00050000.sdf.gz -OutFile C:\shared\20190127\00025001_00050000.sdf.gz
Invoke-WebRequest -Uri ftp://ftp.ncbi.nlm.nih.gov/pubchem/Compound_3D/01_conf_per_cmpd/SDF/00050001_00075000.sdf.gz -OutFile C:\shared\20190127\00050001_00075000.sdf.gz
Invoke-WebRequest -Uri ftp://ftp.ncbi.nlm.nih.gov/pubchem/Compound_3D/01_conf_per_cmpd/SDF/00075001_00100000.sdf.gz -OutFile C:\shared\20190127\00075001_00100000.sdf.gz
Invoke-WebRequest -Uri ftp://ftp.ncbi.nlm.nih.gov/pubchem/Compound_3D/01_conf_per_cmpd/SDF/00100001_00125000.sdf.gz -OutFile C:\shared\20190127\00100001_00125000.sdf.gz
Invoke-WebRequest -Uri ftp://ftp.ncbi.nlm.nih.gov/pubchem/Compound_3D/01_conf_per_cmpd/SDF/00125001_00150000.sdf.gz -OutFile C:\shared\20190127\00125001_00150000.sdf.gz
Invoke-WebRequest -Uri ftp://ftp.ncbi.nlm.nih.gov/pubchem/Compound_3D/01_conf_per_cmpd/SDF/00150001_00175000.sdf.gz -OutFile C:\shared\20190127\00150001_00175000.sdf.gz
Invoke-WebRequest -Uri ftp://ftp.ncbi.nlm.nih.gov/pubchem/Compound_3D/01_conf_per_cmpd/SDF/00175001_00200000.sdf.gz -OutFile C:\shared\20190127\00175001_00200000.sdf.gz
...
```

あっ、for文書けよって話ですよね、分かっちゃいるんですが、つい。。。
ま、気が向いたらそのうち。



#感想
まあまあ面白かった。
こうやって小さなレンガを積み上げていくといいかも。