[[データベース構築>OpenBabel/Cartridge/DB]]で用意したテーブルにChEMBLのデータを登録してみる。

ChEMBLのSDFファイルは、ここから取得可能で
ftp://ftp.ebi.ac.uk/pub/databases/chembl/ChEMBLdb/releases/
ここでは[[RDKit/Cartridge/ChEMBL]]で使用した&color(green){chembl_18};を使う。

chembl_18.sdfをテーブルに流し込むpythonスクリプトを用意した。
中身は、SDFの区切り文字 &color(green){''$$$$''}; で個々のsdfに分解して投入する簡単な物。
使う前にpythonからMySQLを繋ぐパッケージをインストールします
#code(nonumber){{
[root@s ~]# yum install MySQL-python
[root@s ~]#
}}
使用するスクリプト reg.py
#code(python,number,nooutline,noblock,noliteral,nocomment,nomenu,noicon,nolink){{
#!/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。
#code(nonumber){{
[root@s ~]# time python reg.py
real    4m22.641s
user    1m46.707s
sys     0m12.123s
[root@s ~]#
}}

次にSDFからSMILESを作成してchemにデータをupdateさせます。
#code(nonumber){{
[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, 440055 rows affected (12 min 20.39 sec)
Rows matched: 440055  Changed: 440055  Warnings: 0
Query OK, 1352681 rows affected (28 min 16.24 sec)
Rows matched: 1352681  Changed: 1352681  Warnings: 0

--sdfからmolへ

mysql> alter table mols add mol text;
mysql> update mols SET mol = MOLFILE_TO_MOLECULE(sdf);
Query OK, 440055 rows affected (5 min 40.77 sec)
Rows matched: 440055  Changed: 440055  Warnings: 0

mysql> update chem set fp2 = FINGERPRINT2(mol);
Query OK, 440055 rows affected (9 min 28.08 sec)
Rows matched: 440055  Changed: 440055  Warnings: 0

mysql> update chem set obserialized = MOLECULE_TO_SERIALIZEDOBMOL(mol);
Query OK, 440055 rows affected (5 min 22.70 sec)
Rows matched: 440055  Changed: 440055  Warnings: 0
}}
alter table chem add mol text;
update chem set mol = MOLFILE_TO_MOLECULE(sdf);
alter table chem add fp2 blob;
update chem set fp2 = FINGERPRINT2(mol);
alter table chem add obserialized blob;
update chem set obserialized = MOLECULE_TO_SERIALIZEDOBMOL(mol);

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);

}}


1

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS