データベース構築で用意したテーブルにChEMBLのデータを登録してみる。

ChEMBLのSDFファイルは、ここから取得可能で
ftp://ftp.ebi.ac.uk/pub/databases/chembl/ChEMBLdb/releases/
ここではRDKit/Cartridge/ChEMBLで使用したchembl_18を使う。

chembl_18.sdfをテーブルに流し込むpythonスクリプトを用意した。
中身は、SDFの区切り文字 $$$$ で個々のsdfに分解して投入する簡単な物。
使う前にpythonからMySQLを繋ぐパッケージをインストールします

[root@s ~]# yum install MySQL-python
[root@s ~]#

使用するスクリプト reg.py

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
#!/bin/python
import sys
import MySQLdb
 
db= MySQLdb.connect(host = 'localhost',user="root", passwd="", db = 'chemdb',charset='utf8')
c = db.cursor()
 
i=0
sdf=""
f=open("chembl_18.sdf",'r')
while 1:
  line = f.readline()
  if not line:
     break
  if line[0:4] == "$$$$":
     i += 1
     sdf += line
     sql = "INSERT INTO mols(id,sdf) values (%s, " % i + "'%s')" % sdf
     c.execute(sql)
     sdf = ""
  else:
     sdf += line
f.close()
 
db.commit()
c.close()
db.close()

っで、実行
使用しているマシンはi7-4771(3.5GHz)で32GB men、ssd。

[root@s ~]# time python reg.py
real    4m22.641s
user    1m46.707s
sys     0m12.123s
[root@s ~]#

次にSDFからSMILESを作成してchemにデータをupdateさせます。

[root@s ~]# mysql -Dchemdb
mysql>
mysql> desc mols;
+--------+------------------+------+-----+---------+-------+
| Field  | Type             | Null | Key | Default | Extra |
+--------+------------------+------+-----+---------+-------+
| id     | int(11) unsigned | NO   | PRI | NULL    |       |
| sdf    | text             | NO   |     | NULL    |       |
| smiles | text             | YES  |     | NULL    |       |
+--------+------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
 
mysql>
mysql> select count(*) from mols;
+----------+
| count(*) |
+----------+
|  1352681 |
+----------+
1 row in set (6.72 sec)
 
mysql>
mysql> UPDATE mols SET smiles = MOLECULE_TO_SMILES(sdf);
Query OK, 1352681 rows affected (28 min 16.24 sec)
Rows matched: 1352681  Changed: 1352681  Warnings: 0
 
 
mysql> alter table mols add mol text;
mysql> update mols SET mol = MOLFILE_TO_MOLECULE(sdf);
 
 
 
mysql> alter table mols add fp2 blob;
mysql> update mols set fp2 = FINGERPRINT2(mol);
 
 
 
mysql> alter table mols add obserialized blob;
mysql> update mols set obserialized = MOLECULE_TO_SERIALIZEDOBMOL(mol);

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2014-05-02 (金) 17:47:05 (1148d)