データベース構築で用意したテーブルに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
| | 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);