ChEMBL의 모든 화합물의 원자 수를 살펴보십시오.

개요



bioinformatics - ChEMBL에서 모든 화합물 데이터를 다운로드하여 분할 된 sdf 파일 만들기 - Qiita
h tp : // 굉장했다. 작은 m / twin ts / MS / 272 그림 d39b1 c663C47 fac

계속됩니다.

EMBL-EBI가 운영하는 화합물/약물의 데이터베이스 ChEMBL에는 어떤 화합물이 있는 것일까 하는 것을 보고 싶습니다.
시작하기 전에 모든 화합물의 원자 수가 어떤 분포를 가지고 있는지 살펴 보겠습니다.

ChEMBL에서 sdf를 다운로드하고 장미



이 내용을 해 둡니다.

bioinformatics - ChEMBL에서 모든 화합물 데이터를 다운로드하여 분할 된 sdf 파일 만들기 - Qiita
h tp : // 굉장했다. 작은 m / twin ts / MS / 272 그림 d39b1 c663C47 fac

sdf 파일의 원자 수 계산



sdf 파일을 열어 보면 다음과 같이 되어 있습니다.

sdf 파일 예: CHEMBL601.sdf
CHEMBL601
  SciTegic12111210002D

  9  8  0  0  0  0            999 V2000
    1.9000   -3.8875    0.0000 C   0  0
    1.9000   -3.1792    0.0000 O   0  0
    3.7167   -5.0000    0.0000 O   0  0
    3.7375   -4.2875    0.0000 C   0  0
    2.5042   -4.2542    0.0000 C   0  0
    1.2750   -4.2375    0.0000 O   0  0
    3.1375   -3.9250    0.0000 C   0  0
    4.9750   -4.3292    0.0000 N   0  0
    4.3625   -3.9542    0.0000 C   0  0
  2  1  2  0
  3  4  2  0
  4  7  1  0
  5  1  1  0
  6  1  1  0
  7  5  1  0
  8  9  1  0
  9  4  1  0
M  END
> <chembl_id>
CHEMBL601

$$$$

이번 포인트는 4행째의 처음 3문자가 원자의 수가 되어 있다는 것입니다. 4문자째~6문자째는 결합수가 되어 있으므로 요주의입니다. 무슨 말을 하고 싶은가 하면 , 아래와 같은 파일도 존재합니다.

sdf 파일 예: CHEMBL440060.sdf
CHEMBL440060
          11280716012D 1   1.00000     0.00000     0

206208  0     1  0            999 V2000
    2.0792   -0.9500    0.0000 N   0  0  0  0  0  0           0  0  0
    1.4671   -0.5958    0.0000 C   0  0  2  0  0  0           0  0  0
    0.8510   -0.9500    0.0000 C   0  0  0  0  0  0           0  0  0
以下略

원자수 206과 결합수 208이 붙어 버리고 있습니다. 그래서 정중하게 잘라 봅시다. 이번에는 다음 파이썬 스크립트를 사용했습니다. 보통 원라이너로 할 수 있습니다만.

count.py
#!/usr/bin/python
import re
import sys
import linecache

if (len(sys.argv) != 2):
    print 'Usage: # python %s sdf' % sys.argv[0]
    quit()

sdffile = sys.argv[1]
fi = open(sdffile, 'r')
line = fi.readlines()
Natom = int(line[3][0:3])
print sdffile, ", ", Natom
fi.close()

실행
$ python count.py CHEMBL440060.sdf
> CHEMBL440060.sdf ,  206

ChEMBL의 모든 화합물의 원자 수를 계산



이것을 1,404,752개 모두에 적용합니다.
우선 32 코어 서버에서 다음 쉘 스크립트를 사용했습니다.

많이 실행
#!/bin/sh
PROCMAX=32
np=$PROCMAX

FP=chembldata.txt
DIR=chembl_sdfs

if [ -e $FP ]; then
    rm -f $FP
    echo "rm -f $FP"
fi

touch $FP

for i in $DIR/*; do
    python count.py $i >> $FP &
    let np=np-1
    if [ $np -eq 0 ]; then
        wait
        np=$PROCMAX
    fi
done

이제 chembldata.txt라는 파일에 모든 원자 수가 기록됩니다. 6 시간 정도 * 걸렸습니다. 장미 하지 말고 chembl_19.sdf 로부터 직접 하는 것이 절대 빠르네요(테헤페로).
*추기: 다시 시도하면 2시간 13분으로 끝났습니다.

히스토그램 그리기(R)



R을 사용하여 히스토그램을 그립니다.

히스토그램 그리기(png로 저장)
data <- read.csv("chembldata.txt", header=FALSE)
Natom <- t(t(data[2]))
png("plot.png", width = 600, height = 600)
hist(Natom, col = "orange", main = "N_atom", breaks = "Scott", xlim=c(0,100), ylim=c(0,80000))
dev.off()

이렇게 되었습니다.


덧붙여서 $N_{atom}>100$ 의 화합물은 대체로 1만개 정도 있습니다.
> sum(Natom > 100)
[1] 11443

피크는 $N_{atom}=26$ 이고 원자수 26의 화합물은 74,693개였다.

좋은 웹페이지 즐겨찾기