├── README.md
├── apt.txt
├── clustering
├── kmeans.ipynb
└── taylor_butina.ipynb
├── data
├── A2a.smi
├── BBBP.csv
├── ChEMBL_hERG.csv
├── ch05_compounds.sdf
├── dude_erk2_mk01.csv
├── mk01
│ ├── actives_final.ism
│ └── decoys_final.ism
├── plates.csv
├── seaborn_scatterplot_example.csv
├── small_molecule_drugs.csv
├── zinc_100k.smi
├── zinc_10k.smi
└── zinc_5k.smi
├── decision_tree
├── README.md
├── test_desc_with_names.csv
├── train_desc_with_names.csv
└── visualizing_decision_trees.ipynb
├── environment.yml
├── hype
└── dissecting_hype.ipynb
├── intro
├── pandas_intro.ipynb
└── rdkit_intro.ipynb
├── lipe
├── A2a.smi
└── lipE_plot.ipynb
├── positional_analogue_scanning
└── positional_analogue_scanning.ipynb
├── predictive_models
├── 1_predictive_model_prep.ipynb
├── 2_visualizing_chemical_space.ipynb
├── 3_running_a_predictive_model.ipynb
├── neutralize.py
├── simple_bbb_model.ipynb
└── simple_regression_model.ipynb
├── sec_ms
└── SEC_MS.ipynb
└── som
└── minisom_som.ipynb
/README.md:
--------------------------------------------------------------------------------
1 | A set of tutorials that I put together for a series of wokrshops at the University of Bonn in October 2019. These tutorials can be run in any order, but it probably makes the most sense to run them like this.
2 |
3 | 1. infro/panda_intro.ipynb - an inroduction to using pandas for data manipulation
4 | 2. intro/rdkit_intro.ipynb - an introduction to the RDKit as tool for Cheminformatics
5 | 3. clustering/kmeans.ipynb - k-means clustering
6 | 4. clustering/taylor_butina.ipynb - Taylor-Butina clustering
7 | 5. sec_ms/SEC_MS.ipynb - Designing a screeing library for Size Exclusion Chromatography - Mass Spectrometry (SEC-MS)
8 | 6. predictive_models/predictive_model_prep.ipynb - preparing data to generate a predictive model
9 | 7. predictive_models/running_a_predictive_model.ipynb - practical application of a predictive model
10 | 8. hype/dissecting_hype.ipynb - using similarity search to [check claims](https://practicalcheminformatics.blogspot.com/2019/09/dissecting-hype-with-cheminformatics.html) in a recent paper
11 |
12 |
13 | All of these notebooks can be run on Binder by using the url below.
14 | https://mybinder.org/v2/gh/PatWalters/workshop/master
15 |
--------------------------------------------------------------------------------
/apt.txt:
--------------------------------------------------------------------------------
1 | graphviz
2 |
--------------------------------------------------------------------------------
/data/A2a.smi:
--------------------------------------------------------------------------------
1 | CNCC1CC2c3ccccc3Cc3ccccc3N2O1 CHEMBL81485 6.36
2 | CN(C)CC1CC2c3ccccc3Cc3ccccc3N2O1 CHEMBL83658 6.43
3 | CN1CCN2c3ccccc3Cc3ccccc3C2C1 CHEMBL6437 7.525
4 | CN(C)CC1CC2c3ccccc3Cc3ccc(Cl)cc3N2O1 CHEMBL315772 6.32
5 | CC(N)Cc1c[nH]c2ccc3c(c12)CCCO3 CHEMBL133455 4.72
6 | COC1OC2(CCN(Cc3ccccc3)CC2)c2ccccc21 CHEMBL138809 5.21
7 | COC1Cc2ccccc2C2(CCN(CCCc3ccccc3)CC2)O1 CHEMBL138458 5.51
8 | COC1Cc2ccccc2C2(CCN(Cc3ccccc3)CC2)O1 CHEMBL141209 5.52
9 | O=c1c(CCN2CCc3oc4ccccc4c3C2)c(Cc2ccccc2)nc2ccccn12 CHEMBL162436 8.66
10 | Cc1nc2ccccn2c(=O)c1CCN1CCc2oc3c(Cl)cccc3c2C1 CHEMBL164612 9.05
11 | COc1cccn2c(=O)c(CCN3CCc4oc5ccccc5c4C3)c(C)nc12 CHEMBL162490 9.53
12 | Cc1nc2ccc(Cl)cn2c(=O)c1CCN1CCc2oc3ccccc3c2C1 CHEMBL351483 9.67
13 | Cc1nc2ccccn2c(=O)c1CCN1CCc2oc3ccc(Cl)cc3c2C1 CHEMBL165677 8.41
14 | Cc1nc2ccc(Br)cn2c(=O)c1CCN1CCc2oc3ccccc3c2C1 CHEMBL165350 9.45
15 | Cc1ccn2c(=O)c(CCN3CCc4oc5ccccc5c4C3)c(C)nc2c1 CHEMBL165796 9.35
16 | COc1cc2nc(C)c(CCN3CCc4oc5ccccc5c4C3)c(=O)n2cc1OC CHEMBL162058 8.45
17 | Cc1nc2ccccn2c(=O)c1CCN1CCc2oc3ccccc3c2C1 CHEMBL162501 9.26
18 | Cc1nc2ccccn2c(=O)c1CCCN1CCc2oc3ccccc3c2C1 CHEMBL165776 7.99
19 | Cc1nc2c(O)cccn2c(=O)c1CCN1CCc2oc3ccccc3c2C1 CHEMBL162826 9.16
20 | c1ccc2c(c1)OCC(C1=NCCN1)O2 CHEMBL10316 8.08
21 | Cc1nc2c(Cl)cc(Cl)cn2c(=O)c1CCN1CCc2oc3ccccc3c2C1 CHEMBL163247 9.23
22 | Cc1cc(C)n2c(=O)c(CCN3CCc4oc5ccccc5c4C3)c(C)nc2c1 CHEMBL162232 9.47
23 | Cc1nc2c(C)cccn2c(=O)c1CCN1CCc2oc3ccccc3c2C1 CHEMBL351200 9.22
24 | Cc1nc2c(Cl)cc(C(F)(F)F)cn2c(=O)c1CCN1CCc2oc3ccccc3c2C1 CHEMBL162147 8.93
25 | Cc1nc2ccc(I)cn2c(=O)c1CCN1CCc2oc3ccccc3c2C1 CHEMBL162682 9.62
26 | Cc1nc2ccccn2c(=O)c1CCN1CCc2sc3ccccc3c2C1 CHEMBL165181 8.76
27 | CN1CCN2c3ncccc3Cc3ccccc3C2C1 CHEMBL654 7.07
28 | Cc1ccc2nc(C)c(CCN3CCc4oc5ccccc5c4C3)c(=O)n2c1 CHEMBL162370 9.46
29 | Cc1nc2cccc(C)n2c(=O)c1CCN1CCc2oc3ccccc3c2C1 CHEMBL163190 9.54
30 | CN(C)CC1CC2c3ccccc3Cc3ccc(F)cc3N2O1 CHEMBL84931 6.3
31 | c1ccc2c(Cc3c[nH]cn3)cccc2c1 CHEMBL544765 5.52
32 | CC(c1c[nH]cn1)c1cccc2ccccc12 CHEMBL306751 5.28
33 | OC(c1c[nH]cn1)c1cccc2ccccc12 CHEMBL542155 4.21
34 | Cc1cccc(C(C)c2c[nH]cn2)c1C CHEMBL77921 5.47
35 | O=C1COc2cc(CN3CCN(c4ccc(Cl)cc4)CC3)ccc2N1 CHEMBL346389 5.96
36 | CN(C)c1nc(NC2CCC(NS(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL180003 7.24
37 | COc1cc(OC)cc(C(=O)NC2CCC(Nc3nc(N(C)C)c4ccccc4n3)CC2)c1 CHEMBL360081 7.15
38 | CN(C)c1nc(NC2CCC(NC(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL181184 6.41
39 | CN(C)c1nc(NC2CCC(NC(=O)c3cccc(Br)c3)CC2)nc2ccccc12 CHEMBL359510 7.2
40 | CN(C)c1nc(NCC2CCC(CNC(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL367355 8.0
41 | CN(C)c1nc(NCC2CCC(CNCc3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL360117 7.51
42 | CN(C)c1nc(NC2CCC(NCc3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL178084 6.77
43 | Cc1cccc(C(=O)NC2CCC(Nc3nc(N(C)C)c4ccccc4n3)CC2)c1 CHEMBL180962 6.96
44 | CN(C)c1nc(NC2CCC(NC(=O)c3cccc(C(F)(F)F)c3)CC2)nc2ccccc12 CHEMBL181632 7.22
45 | CN(Cc1ccc(Br)cc1OC(F)(F)F)CC1CCC(CNc2nc(N(C)C)c3ccccc3n2)CC1 CHEMBL182235 7.36
46 | CN(C)c1nc(NC2CCN(Cc3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL360876 6.28
47 | CN(C)c1nc(NC2CCC(NC(=O)c3cccc(F)c3)CC2)nc2ccccc12 CHEMBL362193 6.89
48 | CN(C)c1nc(NC2CCC(NC(=O)c3cccc(C#N)c3)CC2)nc2ccccc12 CHEMBL181099 6.82
49 | CN(C)c1nc(NC2CCC(CNC(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL181393 6.24
50 | CN(C)c1nc(NCC2CCC(CNS(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL537846 8.11
51 | CN(C)c1nc(NC2CCC(CNCc3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL181466 6.44
52 | CN(C)c1nc(NC2CCC(CNS(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL181217 6.89
53 | CN(C)c1nc(NC2CCC(NC(=O)c3ccc(F)cc3)CC2)nc2ccccc12 CHEMBL361442 6.82
54 | CN(C)c1nc(NC2CCC(NC(=O)c3cccc(Cl)c3)CC2)nc2ccccc12 CHEMBL179878 7.12
55 | CN(C)c1nc(NC2CCC(NC(=O)c3cccc([N+](=O)[O-])c3)CC2)nc2ccccc12 CHEMBL181383 7.01
56 | CN(C)c1nc(NC2CCN(S(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL360671 6.77
57 | CN(C)c1nc(NC2CCC(NC(=O)c3ccc(F)c(F)c3)CC2)nc2ccccc12 CHEMBL182150 6.785
58 | CN(C)c1nc(NC2CCC(NC(=O)c3ccc(Cl)c(Cl)c3)CC2)nc2ccccc12 CHEMBL362400 7.33
59 | CN(C)c1nc(NC2CCC(NC(=O)c3ccc(F)c(F)c3F)CC2)nc2ccccc12 CHEMBL360159 6.7
60 | CN(C)c1nc(NCC2CCC(CN(C)S(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL181727 7.47
61 | CN(C)c1nc(NCC2CCC(CNS(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL193438 8.11
62 | Nc1nc(NCC2CCC(CNS(=O)(=O)c3cccc4ccccc34)CC2)nc2ccccc12 CHEMBL17645 7.01
63 | Nc1nc(NCC2CCC(CNS(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL192266 7.0
64 | O=S(=O)(NCC1CCC(CNc2ncc3ccccc3n2)CC1)c1ccc(Br)cc1OC(F)(F)F CHEMBL425012 6.85
65 | CN(C)c1nc(NCC2CCC(CNS(C)(=O)=O)CC2)nc2ccccc12 CHEMBL195123 7.07
66 | CCCCS(=O)(=O)NCC1CCC(CNc2nc(N(C)C)c3ccccc3n2)CC1 CHEMBL193666 7.24
67 | CN(C)c1nc(NCC2CCC(NS(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL193970 7.68
68 | CN(C)c1nc(NC2CCC(CNS(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL194602 6.96
69 | CN(C)c1nc(NC2CCC(NS(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL193771 7.33
70 | O=S(=O)(NCC1CCC(Nc2ncc3ccccc3n2)CC1)c1ccc(Br)cc1OC(F)(F)F CHEMBL195810 6.89
71 | O=S(=O)(NC1CCC(Nc2ncc3ccccc3n2)CC1)c1ccc(Br)cc1OC(F)(F)F CHEMBL195346 7.24
72 | CN(C)c1nc(NCC2CCN(S(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL194173 8.25
73 | CN(C)CCCOc1ccc(CCNC(=O)c2cc(Br)c[nH]2)cc1Br CHEMBL493091 6.73
74 | Cc1c(C(=O)c2ccc(Cl)cc2)c2ccc(OC(F)(F)F)cc2n1Cc1cccc(OC(C)C(=O)O)c1 CHEMBL461571 5.78
75 | O=C(Nc1ccccc1-c1cn2c(CN3CCNCC3)csc2n1)c1cnc2ccccc2n1 CHEMBL257991 5.55
76 | CCCN1CCC(COc2nc3scc(C)c3n3cccc23)CC1 CHEMBL470432 6.05
77 | CC1=C(CCN(C)C)c2cc(S(=O)(=O)Nc3cccc4ccccc34)ccc2C1 CHEMBL475969 5.96
78 | CC1=C(CCN(C)C)c2cc(NS(=O)(=O)c3csc4ccccc34)ccc2C1 CHEMBL477650 6.16
79 | C=Cc1c(C)nn(CCCN2CCN(c3ccc(C)cc3)CC2)c(=O)c1N CHEMBL584606 6.5
80 | COC(=O)C1C(O)CCC2CN3CCc4c([nH]c5ccccc45)C3CC21 CHEMBL537669 8.44
81 | CCN(CC)C(=O)C1C=C2c3cccc4[nH]cc(c34)CC2N(C(=O)Nc2ccccc2)C1 CHEMBL584554 5.71
82 | Cc1cc(N(C)C)nc(NC2CCC(NC(=O)c3ccc(Cl)cc3)CC2)n1 CHEMBL567791 6.14
83 | Cc1cc(N(C)C)nc(NC2CCC(NC(=O)c3ccc(Cl)c(Cl)c3)CC2)n1 CHEMBL568400 6.89
84 | Cc1cc(N(C)C)nc(NC2CCC(NC(=O)c3cc(C(F)(F)F)cc(C(F)(F)F)c3)CC2)n1 CHEMBL583014 6.7
85 | Cc1cccc(C(=O)NC2CCC(Nc3ncc(C)c(N(C)C)n3)CC2)c1 CHEMBL567993 6.24
86 | Cc1ccc(C(=O)NC2CCC(Nc3ncc(C)c(N(C)C)n3)CC2)cc1 CHEMBL578170 5.75
87 | Cc1cnc(NC2CCC(NC(=O)c3ccc(F)cc3)CC2)nc1N(C)C CHEMBL565551 6.33
88 | Cc1cnc(NC2CCC(NC(=O)c3ccc(Cl)cc3)CC2)nc1N(C)C CHEMBL577912 5.8
89 | Cc1cnc(NC2CCC(CNC(=O)c3ccc(F)c(F)c3)CC2)nc1N(C)C CHEMBL577904 6.68
90 | Cc1cnc(NC2CCC(CNC(=O)c3cc(C(F)(F)F)cc(C(F)(F)F)c3)CC2)nc1N(C)C CHEMBL566075 6.51
91 | O=S(=O)(Nc1ccc2c(c1)C(C1CCNC1)=CC2)c1c(Cl)nc2sccn12 CHEMBL605938 6.05
92 | CC1=C(C2CCCN(C)C2)c2cc(NS(=O)(=O)c3c(Cl)nc4sccn34)ccc2C1 CHEMBL593889 5.92
93 | O=C(NCCCCN1CCCCC1)Nc1ccc(-c2ccc(F)cc2)nc1 CHEMBL1083787 4.46
94 | CC(C)(C)CC(C)(C)c1ccc(OCCOCC[N+](C)(C)Cc2ccccc2)cc1 CHEMBL221753 5.51
95 | CC(C)CC1C(=O)N2CCCC2C2(O)OC(NC(=O)C3C=C4c5cccc6[nH]c(Br)c(c56)CC4N(C)C3)(C(C)C)C(=O)N12 CHEMBL493 7.82
96 | CN(Cc1ccc(C(C)(C)C)cc1)Cc1cccc2ccccc12 CHEMBL990 5.44
97 | c1ccc2sc(SSc3nc4ccccc4s3)nc2c1 CHEMBL508112 6.05
98 | Oc1c(Cl)cc(Cl)cc1Sc1cc(Cl)cc(Cl)c1O CHEMBL290106 5.42
99 | CN1C2CCC1CC(OC(c1ccccc1)c1ccccc1)C2 CHEMBL1201203 6.26
100 | COc1ccc(CCN2CCC(Nc3nc4ccccc4n3Cc3ccc(F)cc3)CC2)cc1 CHEMBL296419 5.32
101 | Brc1c(NC2=NCCN2)ccc2nccnc12 CHEMBL844 6.53
102 | Clc1ccc2c(c1)C(N1CCNCC1)=Nc1ccccc1O2 CHEMBL1113 5.88
103 | S=C=Nc1cccc2ccccc12 CHEMBL1381098 5.2
104 | CCCCCCCCCc1ccc(O)cc1 CHEMBL153062 5.17
105 | CCCCCCCCc1ccc(O)cc1 CHEMBL195437 4.85
106 | CCCCc1oc2ccccc2c1C(=O)c1cc(I)c(OCCN(CC)CC)c(I)c1 CHEMBL633 6.51
107 | CC(C)CC1C(=O)N2CCCC2C2(O)OC(NC(=O)C3C=C4c5cccc6[nH]cc(c56)CC4N(C)C3)(C(C)C)C(=O)N12 CHEMBL1403281 8.1
108 | Cc1ccc(/N=C/N(C)/C=N/c2ccc(C)cc2C)c(C)c1 CHEMBL1365675 6.03
109 | CN(C)CCC=C1c2ccccc2CCc2ccccc21 CHEMBL629 6.46
110 | CC(=O)Nc1ccc2c(c1)Cc1ccccc1-2 CHEMBL311469 4.68
111 | CCOC(=O)C1=C(COCCN)NC(C)=C(C(=O)OC)C1c1ccccc1Cl CHEMBL1491 6.22
112 | Clc1cc(Cl)c(OCC#CI)cc1Cl CHEMBL1289 5.91
113 | CC(C)(C)c1ccc(C(=O)CCCN2CCC(OC(c3ccccc3)c3ccccc3)CC2)cc1 CHEMBL305660 6.08
114 | CN(C)c1ccc(C(=C2C=CC(=[N+](C)C)C=C2)c2ccc(N(C)C)cc2)cc1 CHEMBL64894 6.27
115 | Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)cc1 CHEMBL808 5.36
116 | CNCC(O)c1ccc(O)c(O)c1 CHEMBL679 6.13
117 | N=C(N)N/N=C/c1c(Cl)cccc1Cl CHEMBL420 7.39
118 | Oc1c(Cl)cc(Cl)c(Cl)c1Cc1c(O)c(Cl)cc(Cl)c1Cl CHEMBL496 5.26
119 | CCC1CN2CCc3cc(OC)c(OC)cc3C2CC1CC1NCCc2cc(OC)c(OC)cc21 CHEMBL50588 7.42
120 | N=C(N)NC(=O)Cc1c(Cl)cccc1Cl CHEMBL862 6.87
121 | CC(C)C1C(=O)N2CCCC2C2(O)OC(NC(=O)C3C=C4c5cccc6[nH]cc(c56)CC4N(C)C3)(C(C)C)C(=O)N12 CHEMBL1385840 8.2
122 | Fc1ccc(C(c2ccc(F)cc2)N2CCN(C/C=C/c3ccccc3)CC2)cc1 CHEMBL30008 6.24
123 | CC(CO)NC(=O)C1C=C2c3cccc4[nH]cc(c34)CC2N(C)C1 CHEMBL119443 5.78
124 | OCCN1CCN(CCCN2c3ccccc3Sc3ccc(C(F)(F)F)cc32)CC1 CHEMBL726 6.67
125 | CN1CC(C(=O)NC2(C)OC3(O)C4CCCN4C(=O)C(Cc4ccccc4)N3C2=O)C=C2c3cccc4[nH]cc(c34)CC21 CHEMBL442 8.67
126 | O=C(CCCN1CC=C(n2c(=O)[nH]c3ccccc32)CC1)c1ccc(F)cc1 CHEMBL1108 5.53
127 | O=C(CCCN1CCC(O)(c2ccc(Cl)cc2)CC1)c1ccc(F)cc1 CHEMBL54 5.3
128 | Clc1cccc(Cl)c1NC1=NCCN1 CHEMBL134 6.55
129 | CC1(COc2ccc(CC3SC(=O)NC3=O)cc2)CCCCC1 CHEMBL7002 4.78
130 | COc1cc(N)c(Cl)cc1C(=O)NC1CCN(CCCOc2ccc(F)cc2)CC1OC CHEMBL1729 5.75
131 | CN(C)CCC=C1c2ccccc2COc2ccccc21 CHEMBL1628227 5.88
132 | CN1CCN(C(c2ccccc2)c2ccccc2)CC1 CHEMBL648 5.81
133 | CC(C)C1(NC(=O)C2CC3c4cccc5[nH]cc(c45)CC3N(C)C2)OC2(O)C3CCCN3C(=O)C(Cc3ccccc3)N2C1=O CHEMBL1255837 8.7
134 | CN1CC(C(=O)NC2(C)OC3(O)C4CCCN4C(=O)C(Cc4ccccc4)N3C2=O)CC2c3cccc4[nH]cc(c34)CC21 CHEMBL1732 8.99
135 | CCN(CC)C(=S)SSC(=S)N(CC)CC CHEMBL964 5.31
136 | Clc1ccccc1C(c1ccccc1)(c1ccccc1)n1ccnc1 CHEMBL104 4.93
137 | CC/C(=C(/CC)c1ccc(O)cc1)c1ccc(O)cc1 CHEMBL411 4.85
138 | CCN(CC)CCOc1ccc(/C(=C(/Cl)c2ccccc2)c2ccccc2)cc1 CHEMBL954 6.03
139 | CN1CCN(C2=Nc3cc(Cl)ccc3Nc3ccccc32)CC1 CHEMBL42 7.05
140 | CN(C)CCCN1c2ccccc2Sc2ccc(Cl)cc21 CHEMBL71 6.45
141 | C(=C/c1ccccc1)\CN1CCN(C(c2ccccc2)c2ccccc2)CC1 CHEMBL43064 6.35
142 | O=c1[nH]c2ccccc2n1CCCN1CCC(n2c(=O)[nH]c3cc(Cl)ccc32)CC1 CHEMBL219916 5.56
143 | CN(C)CCCN1c2ccccc2CCc2ccc(Cl)cc21 CHEMBL415 5.85
144 | CN1CCC(=C2c3ccccc3C=Cc3ccccc32)CC1 CHEMBL516 6.55
145 | C#CC1(O)CCC2C3CCC4=Cc5oncc5CC4(C)C3CCC21C CHEMBL1479 4.74
146 | CN(C)CCC(c1ccc(Cl)cc1)c1ccccn1 CHEMBL1201353 4.69
147 | COc1ccccc1OCCNCC(O)COc1cccc2[nH]c3ccccc3c12 CHEMBL723 6.98
148 | CCCCCCCCCCCCCCCC[n+]1ccccc1 CHEMBL334255 6.62
149 | CN1CCCC1CCOC(C)(c1ccccc1)c1ccc(Cl)cc1 CHEMBL1626 6.74
150 | Cc1cc(C(C)(C)C)c(O)c(C)c1CC1=NCCN1 CHEMBL762 7.64
151 | N=C(N)c1ccc(OCCCCCOc2ccc(C(=N)N)cc2)cc1 CHEMBL55 5.86
152 | CN(C)CCCN1c2ccccc2Sc2ccccc21 CHEMBL564 6.47
153 | CC(CN1c2ccccc2Sc2ccccc21)N(C)C CHEMBL643 6.17
154 | CCCN1CC(CSC)CC2c3cccc4[nH]cc(c34)CC21 CHEMBL531 6.58
155 | COc1cc2nc(N3CCN(C(=O)c4ccco4)CC3)nc(N)c2cc1OC CHEMBL2 5.58
156 | COc1ccc(CN(CCN(C)C)c2ccccn2)cc1 CHEMBL511 5.53
157 | Cc1cc2c(s1)Nc1ccccc1N=C2N1CCN(C)CC1 CHEMBL715 6.27
158 | Cc1ccc(N(CC2=NCCN2)c2cccc(O)c2)cc1 CHEMBL597 8.22
159 | NC(=O)C1CCN(CCCN2c3ccccc3Sc3ccc(Cl)cc32)CC1 CHEMBL1909072 7.18
160 | Clc1ccc(CO/N=C(/Cn2ccnc2)c2ccc(Cl)cc2Cl)c(Cl)c1 CHEMBL1262 5.39
161 | CNCCC=C1c2ccccc2CCc2ccccc21 CHEMBL445 6.14
162 | OCCOCCN1CCN(C2=Nc3ccccc3Sc3ccccc32)CC1 CHEMBL716 5.6
163 | CN1CCN(CCCN2c3ccccc3Sc3ccc(Cl)cc32)CC1 CHEMBL728 6.77
164 | CCN(CC)CCCC(C)Nc1c2ccc(Cl)cc2nc2ccc(OC)cc12 CHEMBL7568 5.64
165 | Cc1ccccc1C(OCCN(C)C)c1ccccc1 CHEMBL900 5.67
166 | CNCCCC12CCC(c3ccccc31)c1ccccc12 CHEMBL21731 5.74
167 | CCN(CC)CCNC(=O)c1cc(Cl)c(N)cc1OC CHEMBL86 5.57
168 | Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)c(Cl)c1 CHEMBL91 5.4
169 | CCC(C)C(COC(Cc1ccccc1)C(=O)NC(CCS(C)(=O)=O)C(=O)OC(C)C)NCC(N)CS CHEMBL1221512 6.37
170 | CN1CC(CNC(=O)OCc2ccccc2)CC2c3cccc4c3c(cn4C)CC21 CHEMBL19215 7.24
171 | CCN(CC)C(=O)NC1C=C2c3cccc4[nH]cc(c34)CC2N(C)C1 CHEMBL157138 9.51
172 | CC(C)(O)c1ccccc1CCC(SCC1(CC(=O)O)CC1)c1cccc(/C=C/c2ccc3ccc(Cl)cc3n2)c1 CHEMBL787 5.41
173 | COC1CC(OC2CC(C3OC(C)(O)C(C)CC3C)OC2C2(C)CCC(C3(C)CCC4(CC(O)C(C)C(C(C)C5OC(O)(CC(=O)O)C(C)C(OC)C5OC)O4)O3)O2)OC(C)C1OC CHEMBL1909065 6.75
174 | CN(C)CCN(Cc1cccs1)c1ccccn1 CHEMBL1411979 5.93
175 | CCOc1cc(N)c(Cl)cc1C(=O)NCC1CN(Cc2ccc(F)cc2)CCO1 CHEMBL60889 5.43
176 | CCC(CO)NC(=O)C1C=C2c3cccc4[nH]cc(c34)CC2N(C)C1 CHEMBL1201356 5.8
177 | CC(=O)N1CCN(c2ccc(OCC3COC(Cn4ccnc4)(c4ccc(Cl)cc4Cl)O3)cc2)CC1 CHEMBL295698 4.7
178 | CN1CCCC(CN2c3ccccc3Sc3ccccc32)C1 CHEMBL395110 5.84
179 | Clc1ccc(C(c2ccccc2Cl)C(Cl)Cl)cc1 CHEMBL1670 5.13
180 | CCC(CO)NC(=O)C1C=C2c3cccc4c3c(cn4C)CC2N(C)C1 CHEMBL1065 5.79
181 | CN1CCC(=C2c3ccccc3CC(=O)c3sccc32)CC1 CHEMBL534 5.66
182 | O=c1ncn2nc(Sc3ccc(F)cc3F)ccc2c1-c1c(Cl)cccc1Cl CHEMBL119385 4.47
183 | O=c1n(CCCN2CCN(c3cccc(Cl)c3)CC2)nc2ccccn12 CHEMBL621 6.04
184 | COc1ccc(CCN(C)CCCC(C#N)(c2ccc(OC)c(OC)c2)C(C)C)cc1OC CHEMBL6966 6.24
185 | COC(=O)C1C(O)CCC2CN3CCc4c([nH]c5ccccc45)C3CC21 CHEMBL15245 8.145
186 | COc1cc2nc(N3CCN(C(=O)C4CCCO4)CC3)nc(N)c2cc1OC CHEMBL611 4.86
187 | CSc1ccc2c(c1)N(CCC1CCCCN1C)c1ccccc1S2 CHEMBL479 6.88
188 | C#CCN(C)C(C)Cc1ccccc1 CHEMBL972 5.75
189 | Clc1ccc(CSC(Cn2ccnc2)c2ccc(Cl)cc2Cl)cc1 CHEMBL1221 5.39
190 | CC/C(=C(/c1ccccc1)c1ccc(OCCN(C)C)cc1)c1ccccc1 CHEMBL83 5.71
191 | CCN(CC)CCNC(=O)c1cc(S(C)(=O)=O)ccc1OC CHEMBL84158 5.68
192 | CN(C/C=C/C#CC(C)(C)C)Cc1cccc2ccccc12 CHEMBL822 5.24
193 | Cc1nc2n(c(=O)c1CCN1CCC(c3noc4cc(F)ccc34)CC1)CCCC2 CHEMBL85 8.01
194 | CC1CCC(NC(=O)N(CCCl)N=O)CC1 CHEMBL12948 5.32
195 | CNC1CCC(c2ccc(Cl)c(Cl)c2)c2ccccc21 CHEMBL809 6.54
196 | CCCCCCCCNC(C)C(O)c1ccc(SC(C)C)cc1 CHEMBL588119 5.69
197 | Clc1ccccc1CN1CCc2sccc2C1 CHEMBL833 6.42
198 | CC(C)N1CCN(c2ccc(OCC3COC(Cn4cncn4)(c4ccc(Cl)cc4Cl)O3)cc2)CC1 CHEMBL1306 6.01
199 | CCN1CCCC1CNC(=O)c1cc(S(N)(=O)=O)ccc1OC CHEMBL26 5.7
200 | O=C(c1ccc(OCCN2CCCCC2)cc1)c1c(-c2ccc(O)cc2)sc2cc(O)ccc12 CHEMBL81 5.78
201 | N=C(Nc1ccc2c(c1)CCN2C1CCNCC1)c1cccs1 CHEMBL2203713 4.62
202 | Cc1ccc(OCC(O)C(C)NC(C)C)c2c1CCC2 CHEMBL513389 9.3
203 | COCCCOc1cc(C(=O)N(CC2CNCC2OC(=O)NCc2ccccc2)C(C)C)ccc1OC CHEMBL3403995 6.0
204 |
--------------------------------------------------------------------------------
/data/mk01/actives_final.ism:
--------------------------------------------------------------------------------
1 | Cn1ccnc1Sc2ccc(cc2Cl)Nc3c4cc(c(cc4ncc3C#N)OCCCN5CCOCC5)OC 168691 CHEMBL318804
2 | C[C@@]12[C@@H]([C@@H](CC(O1)n3c4ccccc4c5c3c6n2c7ccccc7c6c8c5C(=O)NC8)NC)OC 86358 CHEMBL162
3 | Cc1cnc(nc1c2cc([nH]c2)C(=O)N[C@H](CO)c3cccc(c3)Cl)Nc4cccc5c4OC(O5)(F)F 575087 CHEMBL576683
4 | Cc1cnc(nc1c2cc([nH]c2)C(=O)N[C@H](CO)c3cccc(c3)Cl)Nc4cccc5c4OCO5 575065 CHEMBL571484
5 | Cc1cnc(nc1c2cc([nH]c2)C(=O)N[C@H](CO)c3cccc(c3)Cl)Nc4cccc5c4CCC5 575047 CHEMBL568937
6 | CCc1ccccc1Nc2ncc(c(n2)c3cc([nH]c3)C(=O)N[C@H](CO)c4cccc(c4)Cl)C 575012 CHEMBL571056
7 | Cc1cnc(nc1c2cc([nH]c2)C(=O)N[C@H](CO)c3cccc(c3)Cl)Nc4ccc(cc4Cl)F 574947 CHEMBL583042
8 | Cc1cccc(c1C)Nc2ncc(c(n2)c3cc([nH]c3)C(=O)N[C@H](CO)c4cccc(c4)Cl)C 574890 CHEMBL572157
9 | Cc1ccccc1Nc2ncc(c(n2)c3cc([nH]c3)C(=O)N[C@H](CO)c4cccc(c4)Cl)C 574823 CHEMBL571031
10 | Cc1cccc(c1)[C@@H](CO)NC(=O)c2cc(c[nH]2)c3c(cnc(n3)Nc4ccccc4)C 574810 CHEMBL565460
11 | Cc1cnc(nc1c2cc([nH]c2)C(=O)N[C@H](CO)c3cccc(c3)Cl)Nc4ccccc4 574805 CHEMBL577193
12 | Cc1cnc(nc1c2cc([nH]c2)C(=O)N[C@H](CO)c3cccc(c3)F)Nc4ccccc4 574889 CHEMBL569869
13 | Cc1cnc(nc1c2cc([nH]c2)C(=O)N[C@H](CO)c3ccccc3)Nc4ccccc4F 574780 CHEMBL572162
14 | Cc1ccccc1Nc2ncc(c(n2)c3cc([nH]c3)C(=O)N[C@H](CO)c4ccccc4)C 574880 CHEMBL584754
15 | Cc1cnc(nc1c2cc([nH]c2)C(=O)N[C@H](CO)c3ccccc3)Nc4ccccc4Cl 574838 CHEMBL571038
16 | Cc1cnc(nc1c2cc([nH]c2)C(=O)N[C@H](CO)c3ccccc3)Nc4ccccc4 574809 CHEMBL565459
17 | Cc1cnc(nc1c2cc([nH]c2)C(=O)N[C@H](CO)c3cccc(c3)Cl)Nc4cccc(c4OC)OC 574964 CHEMBL569181
18 | CCc1ccccc1Nc2ncc(c(n2)c3cc([nH]c3)C(=O)N[C@H](CO)c4ccccc4)C 574881 CHEMBL572361
19 | Cc1cnc(nc1c2cc([nH]c2)C(=O)N[C@H](CO)c3ccccc3)Nc4ccccc4O 574870 CHEMBL570366
20 | Cc1cnc(nc1c2cc([nH]c2)C(=O)N[C@H](CO)c3ccccc3)Nc4ccccc4C(F)(F)F 574822 CHEMBL571030
21 | Cc1cnc(nc1c2cc([nH]c2)C(=O)N[C@H](CO)c3cccc(c3)Cl)Nc4ccc(cc4F)Cl 574963 CHEMBL576048
22 | Cc1cc(ccc1Nc2ncc(c(n2)c3cc([nH]c3)C(=O)N[C@H](CO)c4cccc(c4)Cl)C)Cl 574936 CHEMBL568483
23 | c1c\2c([nH]c1Br)C(=O)NCC/C2=C\3/C(=O)NC(=N3)N 250364 CHEMBL359106
24 | c1c\2c([nH]c1Br)C(=O)NCC/C2=C/3\C(=O)N=C(N3)N 307979 CHEMBL361708
25 | c1cc(cc(c1)Cl)c2cn[nH]c2c3cc([nH]c3)C(=O)NC(CO)c4ccc(c(c4)Cl)F 370070 CHEMBL220054
26 | c1cc(cc(c1)Cl)c2cn[nH]c2c3cc([nH]c3)C(=O)NC(CO)c4cc(cc(c4)Cl)Cl 370069 CHEMBL220897
27 | Cc1cnc(nc1c2cc([nH]c2)C(=O)N[C@H](CO)c3cccc(c3)Cl)Nc4cccc5c4CCCC5 575055 CHEMBL570111
28 | c1cc(cc(c1)Cl)c2cn[nH]c2c3cc([nH]c3)C(=O)NC(CO)c4ccc(cc4)Cl 370040 CHEMBL375544
29 | Cc1cnc(nc1c2cc([nH]c2)C(=O)N[C@H](CO)c3cccc(c3)Cl)Nc4cccc5c4OCCO5 574915 CHEMBL571722
30 | c1cc(cc(c1)Cl)c2cn[nH]c2c3cc([nH]c3)C(=O)NC(CO)c4ccc(c(c4)F)F 370065 CHEMBL219790
31 | c1cc(cc(c1)Cl)c2cn[nH]c2c3cc([nH]c3)C(=O)NC(CO)c4cccc(c4)F 370057 CHEMBL219849
32 | Cc1cnc(nc1c2cc([nH]c2)C(=O)N[C@H](CO)c3cccc(c3)Cl)Nc4cccc(c4C)F 574905 CHEMBL582829
33 | c1ccc(cc1)[C@@H](CO)NC(=O)c2cc(c[nH]2)c3c(cn[nH]3)c4cccc(c4)Cl 370099 CHEMBL220112
34 | c1cc(cc(c1)Cl)c2cn[nH]c2c3cc([nH]c3)C(=O)NCc4ccc(c(c4)F)F 370039 CHEMBL222249
35 | c1cc(cc(c1)Cl)c2cn[nH]c2c3cc([nH]c3)C(=O)NC(CO)c4ccc(cc4)C(F)(F)F 370046 CHEMBL222465
36 | Cn1cc(c2c1nccc2c3ccc(cc3)C(=O)NCCO)/C=C\4/C(=O)c5c(cccc5O4)O 620576 CHEMBL1092754
37 | c1cc(cc(c1)Cl)c2cn[nH]c2c3cc([nH]c3)C(=O)NC(CO)c4ccc(cc4)F 370035 CHEMBL374677
38 | c1ccc(cc1)CNC(=O)c2cc(c[nH]2)c3c(cn[nH]3)c4cccc(c4)Cl 370129 CHEMBL220320
39 | c1ccc2c(c1)C3=C(CCNC(=O)C3=N2)c4c([nH]c(n4)N)O 201833 CHEMBL332551
40 | Cc1c2cc(c(cc2oc(=O)c1Cc3ccccc3)OC(=O)N(C)C)Cl 126856 CHEMBL80837
41 | C[C@H](c1ccccc1)NC(=O)c2cc(c[nH]2)c3c(cn[nH]3)c4cccc(c4)Cl 370068 CHEMBL373628
42 | c1cc(cc(c1)Cl)c2cn[nH]c2c3cc([nH]c3)C(=O)NCc4ccncc4 370032 CHEMBL221109
43 | c1ccc(cc1)CONC(=O)c2cc(c[nH]2)c3c(cn[nH]3)c4cccc(c4)Cl 370062 CHEMBL220272
44 | Cc1c2ccc(cc2oc(=O)c1Cc3ccc(cc3)F)OC(=O)N(C)C 127465 CHEMBL78779
45 | c1cc(cc(c1)Cl)c2cn[nH]c2c3cc([nH]c3)C(=O)N4CCCC4 370082 CHEMBL220110
46 | CC1CNC(=O)c2c1c3cc(ccc3[nH]2)C(=O)Nc4cccnc4 412025 CHEMBL437943
47 | CC(=O)N1CCC(CC1)Nc2ncc3c(n2)-c4c(c(nn4C)C(=O)N)CC3 603516 CHEMBL599224
48 | c1ccc(cc1)[C@@H]2C[C@H]2NC3=NC(=O)/C(=C/c4ccc5c(c4)cccn5)/S3 395709 CHEMBL235345
49 | Cn1c-2c(c(n1)C(=O)N)CCc3c2nc(nc3)NC4CCN(CC4)C(=O)c5ccccc5 603518 CHEMBL599428
50 | c1cc(cc(c1)Cl)c2cn[nH]c2c3cc([nH]c3)C(=O)NCc4cccnc4 370024 CHEMBL220343
51 | c1ccc(c(c1)C(CO)NC(=O)c2cc(c[nH]2)c3c(cn[nH]3)c4cccc(c4)Cl)F 370049 CHEMBL219988
52 | Cc1c2cc(ccc2[nH]n1)c3cc(cnc3)OC[C@H](Cc4ccccc4)N 350635 CHEMBL379218
53 | CCCCNC(=O)N1Cc2c(n[nH]c2NC(=O)Cc3ccc(cc3)N4CCCC4)C1 339662 CHEMBL383104
54 | c1ccc(cc1)c2c(c3ccccn3n2)c4cc5c(n[nH]c5nn4)N 430594 CHEMBL259551
55 | c1cc(cc(c1)Cl)c2cn[nH]c2c3cc([nH]c3)C(=O)NCCc4cccnc4 370055 CHEMBL373448
56 | COc1cc2c(cc1OCCCN3CCOCC3)ncc(c2Nc4ccc(cc4)Oc5ccccc5)C#N 43524 CHEMBL414139
57 | CCCCNC(=O)N1Cc2c(n[nH]c2NC(=O)[C@@H](C)c3ccc4ccccc4c3)C1 339586 CHEMBL380946
58 | c1cc(cc(c1)Cl)c2cn[nH]c2c3cc([nH]c3)C(=O)NCC4CCCO4 370089 CHEMBL219683
59 | CN(Cc1ccccc1)C(=O)c2cc(c[nH]2)c3c(cn[nH]3)c4cccc(c4)Cl 370038 CHEMBL373797
60 | CNC(=O)Nc1ccc(cn1)CNc2c(cnn2C)C(=O)Nc3ccc4c(c3)OC(C(O4)(F)F)(F)F 414487 CHEMBL247619
61 | COc1ccc(cc1)CNC(=O)c2cc(c[nH]2)c3c(cn[nH]3)c4cccc(c4)Cl 370043 CHEMBL223471
62 | CNC(=O)Nc1ccc(cn1)CNc2c(scn2)C(=O)Nc3ccc4c(c3)OC(O4)(F)F 414493 CHEMBL247250
63 | c1ccc(cc1)[C@@H](C(=O)N)NC(=O)c2cc(c[nH]2)c3c(cn[nH]3)c4cccc(c4)Cl 370131 CHEMBL220888
64 | c1ccc2c(c1)CCN(C2)C(=O)c3cc(c[nH]3)c4c(cn[nH]4)c5cccc(c5)Cl 370044 CHEMBL375621
65 | c1c(c2c(ncnc2n1[C@H]3[C@@H]([C@@H]([C@H](O3)CO)O)O)N)I 160386 CHEMBL99203
66 | c1c2c([nH]c1Br)C(=O)NCCC2=O 250345 CHEMBL440356
67 | CC1CNC(=O)c2c1c3cc(ccc3[nH]2)C(=O)Nc4nc(cs4)C(=O)N 412078 CHEMBL397332
68 | C=CCn1c2c(cc(nn2)c3c4ccccn4nc3c5ccccc5)c(n1)N 334474 CHEMBL199395
69 | CCN(C)C(=O)c1cc(c[nH]1)c2c(cn[nH]2)c3cccc(c3)Cl 370074 CHEMBL375525
70 | c1ccc2c(c1)c(c[nH]2)c3c(cnc(n3)N)c4ccc(cc4)C(F)(F)F 562371 CHEMBL550658
71 | CNC(=O)c1c2c(n(n1)C)-c3c(cnc(n3)NC4CCN(CC4)C(=O)C5CCN(CC5)S(=O)(=O)C)CC2 603682 CHEMBL597754
72 | C[C@@H](c1ccccc1)NC(=O)c2cc(c[nH]2)c3c(cn[nH]3)c4cccc(c4)Cl 370085 CHEMBL221117
73 | Cc1cnc(nc1c2cc([nH]c2)C(=O)N[C@@H](CO)c3ccccc3)Nc4ccccc4 574871 CHEMBL570367
74 | CCNC(=O)Nc1ccc(cn1)CNc2c(scn2)C(=O)Nc3ccc4c(c3)OC(O4)(F)F 414489 CHEMBL247798
75 | c1c[nH]c2c1/C(=C\3/C(=O)N=C(N3)N)/CCNC2=O 425061 CHEMBL255465
76 | c1cnc(nc1c2cc3c([nH]2)[C@H](CNC3=O)CCF)N 494338 CHEMBL524266
77 | c1cc(cc(c1)Cl)c2cn[nH]c2c3cc([nH]c3)C(=O)N4CCOCC4 370083 CHEMBL374876
78 | CNC(=O)Nc1ccc(cn1)CNc2c(cnn2C)C(=O)Nc3ccc(cc3)SC(F)(F)F 414488 CHEMBL247797
79 | c1ccc2c(c1)c(c[nH]2)C[C@@H](COc3cc(cnc3)c4ccc5cnccc5c4)N 344363 CHEMBL383264
80 |
--------------------------------------------------------------------------------
/data/seaborn_scatterplot_example.csv:
--------------------------------------------------------------------------------
1 | SMILES,Name,Experimental IC50(uM),Predicted IC50(uM),MW,LogP,HBD,HBA,TPSA,Rot
2 | CC(C)(C)c1ccc(cc1)C(O)CCCN2CCC(CC2)C(O)(c3ccccc3)c4ccccc4,19569,0.1,0.2,471.7,6.4,2,3,43.7,8
3 | OCc1cc(Cl)ccc1NC(=O)NC2CCN(Cc3ccn(c3)c4ccc(cc4)C(F)(F)F)CC2,564591,3.3,2.8,507.0,5.4,3,4,69.5,6
4 | CC1(C)N(CCn2c(Nc3ccc(F)cc3)c(nc12)c4ccc(F)cc4)C(=O)CN,1354598,13.4,18.1,411.5,3.6,2,5,76.2,4
5 | CC1(C)CC[C@]23CC[C@@]4(C)[C@]5(C)CC[C@H]6C(C)(C)C(=O)C(=C[C@]6(C)C5=CC(=O)[C@@]4([C@@H]2C1)N(C7CCCCC7)C3=O)C#N,1948305,40.0,7.5,570.8,7.5,0,4,78.2,1
6 | COC(=O)C1(COc2ccc3ncc(F)c(CCC45CCC(CC4)(CO5)NCc6ccc7OCC(=O)Nc7n6)c3n2)CC1,1958050,1.6,10.8,591.6,3.6,2,10,133.8,10
7 | O=C(N[C@@H]1CC[C@@H](CCN2CCc3cc(ccc3C2)C#N)CC1)c4ccnc5ccccc45,137398,0.6,1.6,438.6,4.8,1,4,69.0,5
8 | COc1cc(ccc1n2cnc(C)c2)c3cn(CC(=O)N(C4CCCCC4)c5ccccc5)nn3,1335133,0.8,1.7,470.6,4.8,0,7,78.1,7
9 | N\C\1=N/C(=O)[C@@H]2CCCN2c3ccc(OC\C=C\CNCC(=O)Nc4c(Cl)cc(CN1)cc4Cl)cc3,1968074,13.0,14.6,531.4,3.1,4,7,121.1,0
10 | CCN(C1CCN(CC[C@H](C2CCN(CC2)S(=O)(=O)C(F)(F)F)c3ccccc3)CC1)C(=O)Cc4ccc(cc4)S(=O)(=O)C,1280899,1.2,10.3,657.8,4.7,0,6,95.1,11
11 | COc1ccccc1CC(N2CCNCC2)c3cccc(F)c3,632226,22.5,20.6,314.4,3.0,1,3,24.5,5
12 | COCC(=O)O[C@]1(CCN(C)CCCc2nc3ccccc3[nH]2)CCc4cc(F)ccc4[C@@H]1C(C)C,72035,1.4,1.6,495.6,5.3,1,5,67.5,11
13 | CN1CCN(CC1)C2=Nc3ccccc3Nc4sc(C)cc24,34197,0.2,0.6,312.4,3.4,1,5,30.9,0
14 | O=C1[C@H]2CCN1[C@@H]3CCOc4ccc(Oc5cc(Cn6cncc6CN2)ccc5C#N)cc34,523174,0.1,1.3,441.5,3.1,1,7,92.4,0
15 | COc1cccc2c1nc(N)n3nc(CN4CCN(C[C@H]4C)c5ccc(F)cn5)nc23,1953449,21.9,29.8,422.5,2.1,1,9,97.7,4
16 | CN(C)CCC=C1c2ccccc2CCc3ccccc13,27072,10.0,11.0,277.4,4.2,0,1,3.2,3
17 | CC(C)S(=O)(=O)N[C@@H]1COC[C@@H]1c2ccc(cc2)c3cncc(F)c3,715814,63.0,13.2,364.4,2.7,1,4,68.3,5
18 | CC1=C(CCN2CCC(CC2)c3noc4cc(F)ccc34)C(=O)N5CCCCC5=N1,7714,0.3,0.3,410.5,3.6,0,6,64.2,4
19 | Clc1ccc(CC2=NN(C[C@H]3CCCN3CCCCc4ccc(OCCCN5CCCCCC5)cc4)C(=O)c6ccccc26)cc1,1142205,0.1,0.1,641.3,7.8,0,6,50.6,14
20 | CCN(CC)CCN1CCN(C1=O)c2cccc(Cl)c2,557216,3.2,3.4,295.8,2.9,0,2,26.8,6
21 | Cc1ccc(cc1)C#Cc2cccc(C#Cc3ccc(C)cc3)[n+]2C,1519377,0.3,0.7,322.4,3.9,0,0,3.9,0
22 | COc1cccc(c1)C(=O)N2CCn3c(nnc3c4nc(C)ns4)[C@@H]2C,2176822,70.0,20.0,370.4,2.3,0,8,86.0,3
23 | COc1cccc(c1)c2cccc(c2)C3(C)SCC(=N3)N,1559853,9.2,9.0,298.4,3.6,1,4,47.6,3
24 | CCN(CC)C(c1ccccc1)C(O)(c2cccnc2)c3cccnc3,622451,60.0,27.4,347.5,3.8,1,4,49.2,7
25 | Fc1ccc2C(=O)C=C(Oc2c1)C(=O)NC3CCN(Cc4ccc(OCCCN5C(=O)CSC5=O)c(F)c4)CC3,408634,8.5,28.0,571.6,3.9,1,8,109.2,9
26 | CNC[C@H](CC1CCCCC1)NC(=O)N2CCC[C@H](C2)[C@@](O)(CCCCOC)c3cccc(Cl)c3.OC(=O)\C=C\C(=O)O,501033,30.0,14.7,624.2,5.0,5,6,148.4,14
27 | O=C(N[C@@H]1CC[C@@H](CCN2CCc3cc(ccc3C2)C#N)CC1)c4ccnc5ccccc45,137398,2.0,1.6,438.6,4.8,1,4,69.0,5
28 | Cn1cc(cn1)[C@]2(N[C@H](Cc3c2[nH]c4ccccc34)c5nc(c[nH]5)c6ccc(F)cn6)c7noc(CN)n7,1948388,3.7,9.2,510.5,2.8,4,9,152.1,5
29 | CC1(O)CN(C1)S(=O)(=O)c2ccc3C(=CNC(=O)c3c2)C(=O)NC[C@@H](O)CN4CCC(CC4)Oc5ccc(Cl)c(Cl)c5,1447302,3.2,2.9,639.6,2.2,4,8,152.3,9
30 | CN1CCC(COCc2cc(cc(n2)C3CC3)C(F)(F)F)(CC1)c4cccc(F)c4,1523256,9.0,9.5,422.5,5.3,0,3,25.4,6
31 | CCC(=O)C(CC(C)N(C)C)(c1ccccc1)c2ccccc2,27576,9.8,9.6,309.5,4.3,0,2,20.3,7
32 | CCC1Oc2ccc(Br)cc2C3(COC(=N3)N)C14COC4,2036546,10.0,10.0,353.2,2.2,1,5,66.1,1
33 | CN(C1CCN(Cc2ccc(cc2)C(F)(F)F)CC1)C(=O)Cc3ccc(cc3F)S(=O)(=O)C,1331875,2.6,2.8,486.5,3.9,0,4,57.7,6
34 | Fc1cc(OCCC2CC2C3CCN(CC3)c4ncc(Cl)cn4)ccc1C(=O)NC5CC5,1143406,30.0,2.9,459.0,4.5,1,5,67.3,8
35 | NC1=NC2(CO1)c3cc(Br)ccc3OCC24CC4,2036554,10.0,9.9,309.2,2.2,1,4,56.8,0
36 | CC(C)(C)c1ccc(cc1)C(O)CCCN2CCC(CC2)C(O)(c3ccccc3)c4ccccc4,19569,0.1,0.2,471.7,6.4,2,3,43.7,8
37 | Fc1ccccc1C(=O)Nc2ccc(c(F)c2)c3oc(NCCCCN4CCOCC4)nn3,1338111,39.8,26.9,457.5,3.8,2,7,92.5,9
38 | C[C@@H]1N(CCn2c1nnc2c3nc(C)ns3)C(=O)c4ccc(F)c(Cl)c4,2117631,45.0,56.3,392.8,3.1,0,7,76.8,2
39 | NC1=NC2(c3cc(ccc3OCC24CC4)c5cncnc5)C(F)(F)CO1,1983638,10.0,7.1,358.3,2.5,1,6,82.6,1
40 | COc1ccc2ncc(F)c(C(=O)CC34CCC(CC3)(CO4)NCc5ccc6OCC(=O)Nc6n5)c2n1,2057682,1.2,5.1,507.5,2.9,2,9,124.6,7
41 | OC(=O)Cc1ccccc1N2CCC(CN3CCC(CC3)Oc4ccc(Cl)c(Cl)c4)CC2,1425365,12.6,23.4,477.4,5.4,1,4,53.0,7
42 | C(CNCCN(c1ccccc1)c2ccccc2)Cc3ccccc3,1350308,0.6,0.2,330.5,5.0,1,2,15.3,9
43 | OC(C(N1CCCOCC1)c2ccccc2)(c3cccnc3)c4cccnc4,622452,3.5,21.1,375.5,3.2,1,5,58.5,5
44 | CO[C@@H]1COCC[C@@H]1N[C@@H]2CC[C@](C2)(C(C)C)C(=O)N3CCN(CC3)c4cc(ccn4)C(F)(F)F,1073158,1.7,2.5,498.6,3.3,1,6,66.9,6
45 | CS(=O)(=O)N[C@@H]1CC[C@@H](CC1)N2CC(C2)NC(=O)CNc3n[nH]c4ccc(cc34)C(F)(F)F,1178696,23.0,18.9,488.5,1.7,4,6,119.2,7
46 | COc1ccc(cc1)[C@H]2CN(CCC3(O)CCOCC3)C[C@@H]2CC(=O)Nc4cccc(Cl)c4,1137519,8.2,0.6,473.0,4.3,2,5,71.0,8
47 | Cc1cncc(c1)c2c(C)c(CNC3CCCC3)nn2c4ncccc4Cl,478858,9.0,12.9,381.9,4.6,1,5,55.6,5
48 | NC1=NC2(CO1)c3cc(NC(=O)c4ncc(Cl)cc4F)ccc3OCC25CC5,2036566,10.0,7.3,402.8,2.8,2,6,98.8,2
49 | Cc1ccc2c(cccc2n1)c3nnc(SCCCN4CC5CC5(C4)c6ccc(cc6)C(C)(C)C)n3C,611247,0.3,0.3,511.7,6.4,0,6,46.8,7
50 | CC(C)(C)NC(=O)c1c[nH]c2ncc(nc12)c3ncn4CCCCc34,1529830,4.1,36.3,338.4,2.7,2,5,88.5,2
51 | O=C(CNCC1CCCCC1)N2CCc3ccccc3C2C4CCCCC4,1820382,26.0,20.3,368.6,4.9,1,2,32.3,5
52 |
--------------------------------------------------------------------------------
/decision_tree/README.md:
--------------------------------------------------------------------------------
1 | Code to accompany my blog post Visualizing Decision Trees
2 |
--------------------------------------------------------------------------------
/environment.yml:
--------------------------------------------------------------------------------
1 | name: workshop
2 | channels:
3 | - rdkit
4 | - defaults
5 | dependencies:
6 | - _libgcc_mutex=0.1=main
7 | - blas=1.0=mkl
8 | - bzip2=1.0.8=h7b6447c_0
9 | - ca-certificates=2019.8.28=0
10 | - cairo=1.14.12=h8948797_3
11 | - certifi=2019.9.11=py37_0
12 | - fontconfig=2.13.0=h9420a91_0
13 | - freetype=2.9.1=h8a8886c_1
14 | - glib=2.56.2=hd408876_0
15 | - icu=58.2=h9c2bf20_1
16 | - intel-openmp=2019.4=243
17 | - jpeg=9b=h024ee3a_2
18 | - libboost=1.67.0=h46d08c1_4
19 | - libedit=3.1.20181209=hc058e9b_0
20 | - libffi=3.2.1=hd88cf55_4
21 | - libgcc-ng=9.1.0=hdf63c60_0
22 | - libgfortran-ng=7.3.0=hdf63c60_0
23 | - libpng=1.6.37=hbc83047_0
24 | - libstdcxx-ng=9.1.0=hdf63c60_0
25 | - libtiff=4.0.10=h2733197_2
26 | - libuuid=1.0.3=h1bed415_2
27 | - libxcb=1.13=h1bed415_1
28 | - libxml2=2.9.9=hea5a465_1
29 | - mkl=2019.4=243
30 | - mkl-service=2.3.0=py37he904b0f_0
31 | - mkl_fft=1.0.14=py37ha843d7b_0
32 | - mkl_random=1.1.0=py37hd6b4f25_0
33 | - ncurses=6.1=he6710b0_1
34 | - numpy=1.17.2=py37haad9e8e_0
35 | - numpy-base=1.17.2=py37hde5b4d6_0
36 | - olefile=0.46=py37_0
37 | - openssl=1.1.1d=h7b6447c_3
38 | - pandas=0.25.1=py37he6710b0_0
39 | - pcre=8.43=he6710b0_0
40 | - pillow=6.2.0=py37h34e0f95_0
41 | - pip=19.2.3=py37_0
42 | - pixman=0.38.0=h7b6447c_0
43 | - py-boost=1.67.0=py37h04863e7_4
44 | - python=3.7.4=h265db76_1
45 | - python-dateutil=2.8.0=py37_0
46 | - pytz=2019.3=py_0
47 | - rdkit=2019.03.4.0=py37hc20afe1_1
48 | - readline=7.0=h7b6447c_5
49 | - setuptools=41.4.0=py37_0
50 | - six=1.12.0=py37_0
51 | - sqlite=3.30.0=h7b6447c_0
52 | - tk=8.6.8=hbc83047_0
53 | - tqdm=4.36.1=py_0
54 | - wheel=0.33.6=py37_0
55 | - xz=5.2.4=h14c3975_4
56 | - zlib=1.2.11=h7b6447c_3
57 | - zstd=1.3.7=h0b5b093_0
58 | - pip:
59 | - astroid==2.3.1
60 | - astropy==3.2.2
61 | - atomicwrites==1.3.0
62 | - attrs==19.3.0
63 | - backcall==0.1.0
64 | - bleach==3.1.0
65 | - chardet==3.0.4
66 | - chembl-webresource-client==0.10.0
67 | - colour==0.1.5
68 | - confuse==1.0.0
69 | - cycler==0.10.0
70 | - decorator==4.4.0
71 | - defusedxml==0.6.0
72 | - dtreeviz==0.8.1
73 | - easydict==1.9
74 | - entrypoints==0.3
75 | - environment-kernels==1.1.1
76 | - htmlmin==0.1.12
77 | - idna==2.8
78 | - importlib-metadata==0.23
79 | - ipykernel==5.1.2
80 | - ipython==7.8.0
81 | - ipython-genutils==0.2.0
82 | - ipywidgets==7.5.1
83 | - isort==4.3.21
84 | - jedi==0.15.1
85 | - jinja2==2.10.3
86 | - joblib==0.14.0
87 | - jsonschema==3.1.1
88 | - jupyter==1.0.0
89 | - jupyter-client==5.3.4
90 | - jupyter-console==6.0.0
91 | - jupyter-core==4.6.0
92 | - kiwisolver==1.1.0
93 | - lazy-object-proxy==1.4.2
94 | - llvmlite==0.30.0
95 | - markupsafe==1.1.1
96 | - matplotlib==3.1.1
97 | - mccabe==0.6.1
98 | - minisom==2.2.1
99 | - missingno==0.4.2
100 | - mistune==0.8.4
101 | - more-itertools==7.2.0
102 | - nbconvert==5.6.0
103 | - nbformat==4.4.0
104 | - notebook==6.0.1
105 | - numba==0.46.0
106 | - packaging==19.2
107 | - pandas-flavor==0.1.2
108 | - pandas-profiling==2.3.0
109 | - pandocfilters==1.4.2
110 | - parso==0.5.1
111 | - pexpect==4.7.0
112 | - phik==0.9.8
113 | - pickleshare==0.7.5
114 | - pluggy==0.13.0
115 | - prometheus-client==0.7.1
116 | - prompt-toolkit==2.0.10
117 | - ptyprocess==0.6.0
118 | - py==1.8.0
119 | - pygments==2.4.2
120 | - pyjanitor==0.19.0
121 | - pylint==2.4.2
122 | - pyparsing==2.4.2
123 | - pyrsistent==0.15.4
124 | - pytest==5.2.1
125 | - pytest-pylint==0.14.1
126 | - graphviz==0.13.2
127 | - pyyaml==5.1.2
128 | - pyzmq==18.1.0
129 | - qtconsole==4.5.5
130 | - requests==2.22.0
131 | - requests-cache==0.5.2
132 | - scikit-learn==0.21.3
133 | - scipy==1.3.1
134 | - seaborn==0.9.0
135 | - send2trash==1.5.0
136 | - sklearn==0.0
137 | - terminado==0.8.2
138 | - testpath==0.4.2
139 | - tornado==6.0.3
140 | - traitlets==4.3.3
141 | - typed-ast==1.4.0
142 | - urllib3==1.25.6
143 | - wcwidth==0.1.7
144 | - webencodings==0.5.1
145 | - widgetsnbextension==3.5.1
146 | - wrapt==1.11.2
147 | - xlrd==1.2.0
148 | - zipp==0.6.0
149 | prefix: /home/ubuntu/anaconda3/envs/workshop
150 |
151 |
--------------------------------------------------------------------------------
/lipe/A2a.smi:
--------------------------------------------------------------------------------
1 | CNCC1CC2c3ccccc3Cc3ccccc3N2O1 CHEMBL81485 6.36
2 | CN(C)CC1CC2c3ccccc3Cc3ccccc3N2O1 CHEMBL83658 6.43
3 | CN1CCN2c3ccccc3Cc3ccccc3C2C1 CHEMBL6437 7.525
4 | CN(C)CC1CC2c3ccccc3Cc3ccc(Cl)cc3N2O1 CHEMBL315772 6.32
5 | CC(N)Cc1c[nH]c2ccc3c(c12)CCCO3 CHEMBL133455 4.72
6 | COC1OC2(CCN(Cc3ccccc3)CC2)c2ccccc21 CHEMBL138809 5.21
7 | COC1Cc2ccccc2C2(CCN(CCCc3ccccc3)CC2)O1 CHEMBL138458 5.51
8 | COC1Cc2ccccc2C2(CCN(Cc3ccccc3)CC2)O1 CHEMBL141209 5.52
9 | O=c1c(CCN2CCc3oc4ccccc4c3C2)c(Cc2ccccc2)nc2ccccn12 CHEMBL162436 8.66
10 | Cc1nc2ccccn2c(=O)c1CCN1CCc2oc3c(Cl)cccc3c2C1 CHEMBL164612 9.05
11 | COc1cccn2c(=O)c(CCN3CCc4oc5ccccc5c4C3)c(C)nc12 CHEMBL162490 9.53
12 | Cc1nc2ccc(Cl)cn2c(=O)c1CCN1CCc2oc3ccccc3c2C1 CHEMBL351483 9.67
13 | Cc1nc2ccccn2c(=O)c1CCN1CCc2oc3ccc(Cl)cc3c2C1 CHEMBL165677 8.41
14 | Cc1nc2ccc(Br)cn2c(=O)c1CCN1CCc2oc3ccccc3c2C1 CHEMBL165350 9.45
15 | Cc1ccn2c(=O)c(CCN3CCc4oc5ccccc5c4C3)c(C)nc2c1 CHEMBL165796 9.35
16 | COc1cc2nc(C)c(CCN3CCc4oc5ccccc5c4C3)c(=O)n2cc1OC CHEMBL162058 8.45
17 | Cc1nc2ccccn2c(=O)c1CCN1CCc2oc3ccccc3c2C1 CHEMBL162501 9.26
18 | Cc1nc2ccccn2c(=O)c1CCCN1CCc2oc3ccccc3c2C1 CHEMBL165776 7.99
19 | Cc1nc2c(O)cccn2c(=O)c1CCN1CCc2oc3ccccc3c2C1 CHEMBL162826 9.16
20 | c1ccc2c(c1)OCC(C1=NCCN1)O2 CHEMBL10316 8.08
21 | Cc1nc2c(Cl)cc(Cl)cn2c(=O)c1CCN1CCc2oc3ccccc3c2C1 CHEMBL163247 9.23
22 | Cc1cc(C)n2c(=O)c(CCN3CCc4oc5ccccc5c4C3)c(C)nc2c1 CHEMBL162232 9.47
23 | Cc1nc2c(C)cccn2c(=O)c1CCN1CCc2oc3ccccc3c2C1 CHEMBL351200 9.22
24 | Cc1nc2c(Cl)cc(C(F)(F)F)cn2c(=O)c1CCN1CCc2oc3ccccc3c2C1 CHEMBL162147 8.93
25 | Cc1nc2ccc(I)cn2c(=O)c1CCN1CCc2oc3ccccc3c2C1 CHEMBL162682 9.62
26 | Cc1nc2ccccn2c(=O)c1CCN1CCc2sc3ccccc3c2C1 CHEMBL165181 8.76
27 | CN1CCN2c3ncccc3Cc3ccccc3C2C1 CHEMBL654 7.07
28 | Cc1ccc2nc(C)c(CCN3CCc4oc5ccccc5c4C3)c(=O)n2c1 CHEMBL162370 9.46
29 | Cc1nc2cccc(C)n2c(=O)c1CCN1CCc2oc3ccccc3c2C1 CHEMBL163190 9.54
30 | CN(C)CC1CC2c3ccccc3Cc3ccc(F)cc3N2O1 CHEMBL84931 6.3
31 | c1ccc2c(Cc3c[nH]cn3)cccc2c1 CHEMBL544765 5.52
32 | CC(c1c[nH]cn1)c1cccc2ccccc12 CHEMBL306751 5.28
33 | OC(c1c[nH]cn1)c1cccc2ccccc12 CHEMBL542155 4.21
34 | Cc1cccc(C(C)c2c[nH]cn2)c1C CHEMBL77921 5.47
35 | O=C1COc2cc(CN3CCN(c4ccc(Cl)cc4)CC3)ccc2N1 CHEMBL346389 5.96
36 | CN(C)c1nc(NC2CCC(NS(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL180003 7.24
37 | COc1cc(OC)cc(C(=O)NC2CCC(Nc3nc(N(C)C)c4ccccc4n3)CC2)c1 CHEMBL360081 7.15
38 | CN(C)c1nc(NC2CCC(NC(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL181184 6.41
39 | CN(C)c1nc(NC2CCC(NC(=O)c3cccc(Br)c3)CC2)nc2ccccc12 CHEMBL359510 7.2
40 | CN(C)c1nc(NCC2CCC(CNC(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL367355 8.0
41 | CN(C)c1nc(NCC2CCC(CNCc3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL360117 7.51
42 | CN(C)c1nc(NC2CCC(NCc3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL178084 6.77
43 | Cc1cccc(C(=O)NC2CCC(Nc3nc(N(C)C)c4ccccc4n3)CC2)c1 CHEMBL180962 6.96
44 | CN(C)c1nc(NC2CCC(NC(=O)c3cccc(C(F)(F)F)c3)CC2)nc2ccccc12 CHEMBL181632 7.22
45 | CN(Cc1ccc(Br)cc1OC(F)(F)F)CC1CCC(CNc2nc(N(C)C)c3ccccc3n2)CC1 CHEMBL182235 7.36
46 | CN(C)c1nc(NC2CCN(Cc3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL360876 6.28
47 | CN(C)c1nc(NC2CCC(NC(=O)c3cccc(F)c3)CC2)nc2ccccc12 CHEMBL362193 6.89
48 | CN(C)c1nc(NC2CCC(NC(=O)c3cccc(C#N)c3)CC2)nc2ccccc12 CHEMBL181099 6.82
49 | CN(C)c1nc(NC2CCC(CNC(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL181393 6.24
50 | CN(C)c1nc(NCC2CCC(CNS(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL537846 8.11
51 | CN(C)c1nc(NC2CCC(CNCc3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL181466 6.44
52 | CN(C)c1nc(NC2CCC(CNS(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL181217 6.89
53 | CN(C)c1nc(NC2CCC(NC(=O)c3ccc(F)cc3)CC2)nc2ccccc12 CHEMBL361442 6.82
54 | CN(C)c1nc(NC2CCC(NC(=O)c3cccc(Cl)c3)CC2)nc2ccccc12 CHEMBL179878 7.12
55 | CN(C)c1nc(NC2CCC(NC(=O)c3cccc([N+](=O)[O-])c3)CC2)nc2ccccc12 CHEMBL181383 7.01
56 | CN(C)c1nc(NC2CCN(S(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL360671 6.77
57 | CN(C)c1nc(NC2CCC(NC(=O)c3ccc(F)c(F)c3)CC2)nc2ccccc12 CHEMBL182150 6.785
58 | CN(C)c1nc(NC2CCC(NC(=O)c3ccc(Cl)c(Cl)c3)CC2)nc2ccccc12 CHEMBL362400 7.33
59 | CN(C)c1nc(NC2CCC(NC(=O)c3ccc(F)c(F)c3F)CC2)nc2ccccc12 CHEMBL360159 6.7
60 | CN(C)c1nc(NCC2CCC(CN(C)S(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL181727 7.47
61 | CN(C)c1nc(NCC2CCC(CNS(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL193438 8.11
62 | Nc1nc(NCC2CCC(CNS(=O)(=O)c3cccc4ccccc34)CC2)nc2ccccc12 CHEMBL17645 7.01
63 | Nc1nc(NCC2CCC(CNS(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL192266 7.0
64 | O=S(=O)(NCC1CCC(CNc2ncc3ccccc3n2)CC1)c1ccc(Br)cc1OC(F)(F)F CHEMBL425012 6.85
65 | CN(C)c1nc(NCC2CCC(CNS(C)(=O)=O)CC2)nc2ccccc12 CHEMBL195123 7.07
66 | CCCCS(=O)(=O)NCC1CCC(CNc2nc(N(C)C)c3ccccc3n2)CC1 CHEMBL193666 7.24
67 | CN(C)c1nc(NCC2CCC(NS(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL193970 7.68
68 | CN(C)c1nc(NC2CCC(CNS(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL194602 6.96
69 | CN(C)c1nc(NC2CCC(NS(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL193771 7.33
70 | O=S(=O)(NCC1CCC(Nc2ncc3ccccc3n2)CC1)c1ccc(Br)cc1OC(F)(F)F CHEMBL195810 6.89
71 | O=S(=O)(NC1CCC(Nc2ncc3ccccc3n2)CC1)c1ccc(Br)cc1OC(F)(F)F CHEMBL195346 7.24
72 | CN(C)c1nc(NCC2CCN(S(=O)(=O)c3ccc(Br)cc3OC(F)(F)F)CC2)nc2ccccc12 CHEMBL194173 8.25
73 | CN(C)CCCOc1ccc(CCNC(=O)c2cc(Br)c[nH]2)cc1Br CHEMBL493091 6.73
74 | Cc1c(C(=O)c2ccc(Cl)cc2)c2ccc(OC(F)(F)F)cc2n1Cc1cccc(OC(C)C(=O)O)c1 CHEMBL461571 5.78
75 | O=C(Nc1ccccc1-c1cn2c(CN3CCNCC3)csc2n1)c1cnc2ccccc2n1 CHEMBL257991 5.55
76 | CCCN1CCC(COc2nc3scc(C)c3n3cccc23)CC1 CHEMBL470432 6.05
77 | CC1=C(CCN(C)C)c2cc(S(=O)(=O)Nc3cccc4ccccc34)ccc2C1 CHEMBL475969 5.96
78 | CC1=C(CCN(C)C)c2cc(NS(=O)(=O)c3csc4ccccc34)ccc2C1 CHEMBL477650 6.16
79 | C=Cc1c(C)nn(CCCN2CCN(c3ccc(C)cc3)CC2)c(=O)c1N CHEMBL584606 6.5
80 | COC(=O)C1C(O)CCC2CN3CCc4c([nH]c5ccccc45)C3CC21 CHEMBL537669 8.44
81 | CCN(CC)C(=O)C1C=C2c3cccc4[nH]cc(c34)CC2N(C(=O)Nc2ccccc2)C1 CHEMBL584554 5.71
82 | Cc1cc(N(C)C)nc(NC2CCC(NC(=O)c3ccc(Cl)cc3)CC2)n1 CHEMBL567791 6.14
83 | Cc1cc(N(C)C)nc(NC2CCC(NC(=O)c3ccc(Cl)c(Cl)c3)CC2)n1 CHEMBL568400 6.89
84 | Cc1cc(N(C)C)nc(NC2CCC(NC(=O)c3cc(C(F)(F)F)cc(C(F)(F)F)c3)CC2)n1 CHEMBL583014 6.7
85 | Cc1cccc(C(=O)NC2CCC(Nc3ncc(C)c(N(C)C)n3)CC2)c1 CHEMBL567993 6.24
86 | Cc1ccc(C(=O)NC2CCC(Nc3ncc(C)c(N(C)C)n3)CC2)cc1 CHEMBL578170 5.75
87 | Cc1cnc(NC2CCC(NC(=O)c3ccc(F)cc3)CC2)nc1N(C)C CHEMBL565551 6.33
88 | Cc1cnc(NC2CCC(NC(=O)c3ccc(Cl)cc3)CC2)nc1N(C)C CHEMBL577912 5.8
89 | Cc1cnc(NC2CCC(CNC(=O)c3ccc(F)c(F)c3)CC2)nc1N(C)C CHEMBL577904 6.68
90 | Cc1cnc(NC2CCC(CNC(=O)c3cc(C(F)(F)F)cc(C(F)(F)F)c3)CC2)nc1N(C)C CHEMBL566075 6.51
91 | O=S(=O)(Nc1ccc2c(c1)C(C1CCNC1)=CC2)c1c(Cl)nc2sccn12 CHEMBL605938 6.05
92 | CC1=C(C2CCCN(C)C2)c2cc(NS(=O)(=O)c3c(Cl)nc4sccn34)ccc2C1 CHEMBL593889 5.92
93 | O=C(NCCCCN1CCCCC1)Nc1ccc(-c2ccc(F)cc2)nc1 CHEMBL1083787 4.46
94 | CC(C)(C)CC(C)(C)c1ccc(OCCOCC[N+](C)(C)Cc2ccccc2)cc1 CHEMBL221753 5.51
95 | CC(C)CC1C(=O)N2CCCC2C2(O)OC(NC(=O)C3C=C4c5cccc6[nH]c(Br)c(c56)CC4N(C)C3)(C(C)C)C(=O)N12 CHEMBL493 7.82
96 | CN(Cc1ccc(C(C)(C)C)cc1)Cc1cccc2ccccc12 CHEMBL990 5.44
97 | c1ccc2sc(SSc3nc4ccccc4s3)nc2c1 CHEMBL508112 6.05
98 | Oc1c(Cl)cc(Cl)cc1Sc1cc(Cl)cc(Cl)c1O CHEMBL290106 5.42
99 | CN1C2CCC1CC(OC(c1ccccc1)c1ccccc1)C2 CHEMBL1201203 6.26
100 | COc1ccc(CCN2CCC(Nc3nc4ccccc4n3Cc3ccc(F)cc3)CC2)cc1 CHEMBL296419 5.32
101 | Brc1c(NC2=NCCN2)ccc2nccnc12 CHEMBL844 6.53
102 | Clc1ccc2c(c1)C(N1CCNCC1)=Nc1ccccc1O2 CHEMBL1113 5.88
103 | S=C=Nc1cccc2ccccc12 CHEMBL1381098 5.2
104 | CCCCCCCCCc1ccc(O)cc1 CHEMBL153062 5.17
105 | CCCCCCCCc1ccc(O)cc1 CHEMBL195437 4.85
106 | CCCCc1oc2ccccc2c1C(=O)c1cc(I)c(OCCN(CC)CC)c(I)c1 CHEMBL633 6.51
107 | CC(C)CC1C(=O)N2CCCC2C2(O)OC(NC(=O)C3C=C4c5cccc6[nH]cc(c56)CC4N(C)C3)(C(C)C)C(=O)N12 CHEMBL1403281 8.1
108 | Cc1ccc(/N=C/N(C)/C=N/c2ccc(C)cc2C)c(C)c1 CHEMBL1365675 6.03
109 | CN(C)CCC=C1c2ccccc2CCc2ccccc21 CHEMBL629 6.46
110 | CC(=O)Nc1ccc2c(c1)Cc1ccccc1-2 CHEMBL311469 4.68
111 | CCOC(=O)C1=C(COCCN)NC(C)=C(C(=O)OC)C1c1ccccc1Cl CHEMBL1491 6.22
112 | Clc1cc(Cl)c(OCC#CI)cc1Cl CHEMBL1289 5.91
113 | CC(C)(C)c1ccc(C(=O)CCCN2CCC(OC(c3ccccc3)c3ccccc3)CC2)cc1 CHEMBL305660 6.08
114 | CN(C)c1ccc(C(=C2C=CC(=[N+](C)C)C=C2)c2ccc(N(C)C)cc2)cc1 CHEMBL64894 6.27
115 | Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)cc1 CHEMBL808 5.36
116 | CNCC(O)c1ccc(O)c(O)c1 CHEMBL679 6.13
117 | N=C(N)N/N=C/c1c(Cl)cccc1Cl CHEMBL420 7.39
118 | Oc1c(Cl)cc(Cl)c(Cl)c1Cc1c(O)c(Cl)cc(Cl)c1Cl CHEMBL496 5.26
119 | CCC1CN2CCc3cc(OC)c(OC)cc3C2CC1CC1NCCc2cc(OC)c(OC)cc21 CHEMBL50588 7.42
120 | N=C(N)NC(=O)Cc1c(Cl)cccc1Cl CHEMBL862 6.87
121 | CC(C)C1C(=O)N2CCCC2C2(O)OC(NC(=O)C3C=C4c5cccc6[nH]cc(c56)CC4N(C)C3)(C(C)C)C(=O)N12 CHEMBL1385840 8.2
122 | Fc1ccc(C(c2ccc(F)cc2)N2CCN(C/C=C/c3ccccc3)CC2)cc1 CHEMBL30008 6.24
123 | CC(CO)NC(=O)C1C=C2c3cccc4[nH]cc(c34)CC2N(C)C1 CHEMBL119443 5.78
124 | OCCN1CCN(CCCN2c3ccccc3Sc3ccc(C(F)(F)F)cc32)CC1 CHEMBL726 6.67
125 | CN1CC(C(=O)NC2(C)OC3(O)C4CCCN4C(=O)C(Cc4ccccc4)N3C2=O)C=C2c3cccc4[nH]cc(c34)CC21 CHEMBL442 8.67
126 | O=C(CCCN1CC=C(n2c(=O)[nH]c3ccccc32)CC1)c1ccc(F)cc1 CHEMBL1108 5.53
127 | O=C(CCCN1CCC(O)(c2ccc(Cl)cc2)CC1)c1ccc(F)cc1 CHEMBL54 5.3
128 | Clc1cccc(Cl)c1NC1=NCCN1 CHEMBL134 6.55
129 | CC1(COc2ccc(CC3SC(=O)NC3=O)cc2)CCCCC1 CHEMBL7002 4.78
130 | COc1cc(N)c(Cl)cc1C(=O)NC1CCN(CCCOc2ccc(F)cc2)CC1OC CHEMBL1729 5.75
131 | CN(C)CCC=C1c2ccccc2COc2ccccc21 CHEMBL1628227 5.88
132 | CN1CCN(C(c2ccccc2)c2ccccc2)CC1 CHEMBL648 5.81
133 | CC(C)C1(NC(=O)C2CC3c4cccc5[nH]cc(c45)CC3N(C)C2)OC2(O)C3CCCN3C(=O)C(Cc3ccccc3)N2C1=O CHEMBL1255837 8.7
134 | CN1CC(C(=O)NC2(C)OC3(O)C4CCCN4C(=O)C(Cc4ccccc4)N3C2=O)CC2c3cccc4[nH]cc(c34)CC21 CHEMBL1732 8.99
135 | CCN(CC)C(=S)SSC(=S)N(CC)CC CHEMBL964 5.31
136 | Clc1ccccc1C(c1ccccc1)(c1ccccc1)n1ccnc1 CHEMBL104 4.93
137 | CC/C(=C(/CC)c1ccc(O)cc1)c1ccc(O)cc1 CHEMBL411 4.85
138 | CCN(CC)CCOc1ccc(/C(=C(/Cl)c2ccccc2)c2ccccc2)cc1 CHEMBL954 6.03
139 | CN1CCN(C2=Nc3cc(Cl)ccc3Nc3ccccc32)CC1 CHEMBL42 7.05
140 | CN(C)CCCN1c2ccccc2Sc2ccc(Cl)cc21 CHEMBL71 6.45
141 | C(=C/c1ccccc1)\CN1CCN(C(c2ccccc2)c2ccccc2)CC1 CHEMBL43064 6.35
142 | O=c1[nH]c2ccccc2n1CCCN1CCC(n2c(=O)[nH]c3cc(Cl)ccc32)CC1 CHEMBL219916 5.56
143 | CN(C)CCCN1c2ccccc2CCc2ccc(Cl)cc21 CHEMBL415 5.85
144 | CN1CCC(=C2c3ccccc3C=Cc3ccccc32)CC1 CHEMBL516 6.55
145 | C#CC1(O)CCC2C3CCC4=Cc5oncc5CC4(C)C3CCC21C CHEMBL1479 4.74
146 | CN(C)CCC(c1ccc(Cl)cc1)c1ccccn1 CHEMBL1201353 4.69
147 | COc1ccccc1OCCNCC(O)COc1cccc2[nH]c3ccccc3c12 CHEMBL723 6.98
148 | CCCCCCCCCCCCCCCC[n+]1ccccc1 CHEMBL334255 6.62
149 | CN1CCCC1CCOC(C)(c1ccccc1)c1ccc(Cl)cc1 CHEMBL1626 6.74
150 | Cc1cc(C(C)(C)C)c(O)c(C)c1CC1=NCCN1 CHEMBL762 7.64
151 | N=C(N)c1ccc(OCCCCCOc2ccc(C(=N)N)cc2)cc1 CHEMBL55 5.86
152 | CN(C)CCCN1c2ccccc2Sc2ccccc21 CHEMBL564 6.47
153 | CC(CN1c2ccccc2Sc2ccccc21)N(C)C CHEMBL643 6.17
154 | CCCN1CC(CSC)CC2c3cccc4[nH]cc(c34)CC21 CHEMBL531 6.58
155 | COc1cc2nc(N3CCN(C(=O)c4ccco4)CC3)nc(N)c2cc1OC CHEMBL2 5.58
156 | COc1ccc(CN(CCN(C)C)c2ccccn2)cc1 CHEMBL511 5.53
157 | Cc1cc2c(s1)Nc1ccccc1N=C2N1CCN(C)CC1 CHEMBL715 6.27
158 | Cc1ccc(N(CC2=NCCN2)c2cccc(O)c2)cc1 CHEMBL597 8.22
159 | NC(=O)C1CCN(CCCN2c3ccccc3Sc3ccc(Cl)cc32)CC1 CHEMBL1909072 7.18
160 | Clc1ccc(CO/N=C(/Cn2ccnc2)c2ccc(Cl)cc2Cl)c(Cl)c1 CHEMBL1262 5.39
161 | CNCCC=C1c2ccccc2CCc2ccccc21 CHEMBL445 6.14
162 | OCCOCCN1CCN(C2=Nc3ccccc3Sc3ccccc32)CC1 CHEMBL716 5.6
163 | CN1CCN(CCCN2c3ccccc3Sc3ccc(Cl)cc32)CC1 CHEMBL728 6.77
164 | CCN(CC)CCCC(C)Nc1c2ccc(Cl)cc2nc2ccc(OC)cc12 CHEMBL7568 5.64
165 | Cc1ccccc1C(OCCN(C)C)c1ccccc1 CHEMBL900 5.67
166 | CNCCCC12CCC(c3ccccc31)c1ccccc12 CHEMBL21731 5.74
167 | CCN(CC)CCNC(=O)c1cc(Cl)c(N)cc1OC CHEMBL86 5.57
168 | Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)c(Cl)c1 CHEMBL91 5.4
169 | CCC(C)C(COC(Cc1ccccc1)C(=O)NC(CCS(C)(=O)=O)C(=O)OC(C)C)NCC(N)CS CHEMBL1221512 6.37
170 | CN1CC(CNC(=O)OCc2ccccc2)CC2c3cccc4c3c(cn4C)CC21 CHEMBL19215 7.24
171 | CCN(CC)C(=O)NC1C=C2c3cccc4[nH]cc(c34)CC2N(C)C1 CHEMBL157138 9.51
172 | CC(C)(O)c1ccccc1CCC(SCC1(CC(=O)O)CC1)c1cccc(/C=C/c2ccc3ccc(Cl)cc3n2)c1 CHEMBL787 5.41
173 | COC1CC(OC2CC(C3OC(C)(O)C(C)CC3C)OC2C2(C)CCC(C3(C)CCC4(CC(O)C(C)C(C(C)C5OC(O)(CC(=O)O)C(C)C(OC)C5OC)O4)O3)O2)OC(C)C1OC CHEMBL1909065 6.75
174 | CN(C)CCN(Cc1cccs1)c1ccccn1 CHEMBL1411979 5.93
175 | CCOc1cc(N)c(Cl)cc1C(=O)NCC1CN(Cc2ccc(F)cc2)CCO1 CHEMBL60889 5.43
176 | CCC(CO)NC(=O)C1C=C2c3cccc4[nH]cc(c34)CC2N(C)C1 CHEMBL1201356 5.8
177 | CC(=O)N1CCN(c2ccc(OCC3COC(Cn4ccnc4)(c4ccc(Cl)cc4Cl)O3)cc2)CC1 CHEMBL295698 4.7
178 | CN1CCCC(CN2c3ccccc3Sc3ccccc32)C1 CHEMBL395110 5.84
179 | Clc1ccc(C(c2ccccc2Cl)C(Cl)Cl)cc1 CHEMBL1670 5.13
180 | CCC(CO)NC(=O)C1C=C2c3cccc4c3c(cn4C)CC2N(C)C1 CHEMBL1065 5.79
181 | CN1CCC(=C2c3ccccc3CC(=O)c3sccc32)CC1 CHEMBL534 5.66
182 | O=c1ncn2nc(Sc3ccc(F)cc3F)ccc2c1-c1c(Cl)cccc1Cl CHEMBL119385 4.47
183 | O=c1n(CCCN2CCN(c3cccc(Cl)c3)CC2)nc2ccccn12 CHEMBL621 6.04
184 | COc1ccc(CCN(C)CCCC(C#N)(c2ccc(OC)c(OC)c2)C(C)C)cc1OC CHEMBL6966 6.24
185 | COC(=O)C1C(O)CCC2CN3CCc4c([nH]c5ccccc45)C3CC21 CHEMBL15245 8.145
186 | COc1cc2nc(N3CCN(C(=O)C4CCCO4)CC3)nc(N)c2cc1OC CHEMBL611 4.86
187 | CSc1ccc2c(c1)N(CCC1CCCCN1C)c1ccccc1S2 CHEMBL479 6.88
188 | C#CCN(C)C(C)Cc1ccccc1 CHEMBL972 5.75
189 | Clc1ccc(CSC(Cn2ccnc2)c2ccc(Cl)cc2Cl)cc1 CHEMBL1221 5.39
190 | CC/C(=C(/c1ccccc1)c1ccc(OCCN(C)C)cc1)c1ccccc1 CHEMBL83 5.71
191 | CCN(CC)CCNC(=O)c1cc(S(C)(=O)=O)ccc1OC CHEMBL84158 5.68
192 | CN(C/C=C/C#CC(C)(C)C)Cc1cccc2ccccc12 CHEMBL822 5.24
193 | Cc1nc2n(c(=O)c1CCN1CCC(c3noc4cc(F)ccc34)CC1)CCCC2 CHEMBL85 8.01
194 | CC1CCC(NC(=O)N(CCCl)N=O)CC1 CHEMBL12948 5.32
195 | CNC1CCC(c2ccc(Cl)c(Cl)c2)c2ccccc21 CHEMBL809 6.54
196 | CCCCCCCCNC(C)C(O)c1ccc(SC(C)C)cc1 CHEMBL588119 5.69
197 | Clc1ccccc1CN1CCc2sccc2C1 CHEMBL833 6.42
198 | CC(C)N1CCN(c2ccc(OCC3COC(Cn4cncn4)(c4ccc(Cl)cc4Cl)O3)cc2)CC1 CHEMBL1306 6.01
199 | CCN1CCCC1CNC(=O)c1cc(S(N)(=O)=O)ccc1OC CHEMBL26 5.7
200 | O=C(c1ccc(OCCN2CCCCC2)cc1)c1c(-c2ccc(O)cc2)sc2cc(O)ccc12 CHEMBL81 5.78
201 | N=C(Nc1ccc2c(c1)CCN2C1CCNCC1)c1cccs1 CHEMBL2203713 4.62
202 | Cc1ccc(OCC(O)C(C)NC(C)C)c2c1CCC2 CHEMBL513389 9.3
203 | COCCCOc1cc(C(=O)N(CC2CNCC2OC(=O)NCc2ccccc2)C(C)C)ccc1OC CHEMBL3403995 6.0
204 |
--------------------------------------------------------------------------------
/predictive_models/neutralize.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | """ contribution from Hans de Winter """
4 | import sys
5 | from rdkit import Chem
6 | from rdkit.Chem import AllChem
7 |
8 | def _InitialiseNeutralisationReactions():
9 | patts= (
10 | # Imidazoles
11 | ('[n+;H]','n'),
12 | # Amines
13 | ('[N+;!H0]','N'),
14 | # Carboxylic acids and alcohols
15 | ('[$([O-]);!$([O-][#7])]','O'),
16 | # Thiols
17 | ('[S-;X1]','S'),
18 | # Sulfonamides
19 | ('[$([N-;X2]S(=O)=O)]','N'),
20 | # Enamines
21 | ('[$([N-;X2][C,N]=C)]','N'),
22 | # Tetrazoles
23 | ('[n-]','[nH]'),
24 | # Sulfoxides
25 | ('[$([S-]=O)]','S'),
26 | # Amides
27 | ('[$([N-]C=O)]','N'),
28 | )
29 | return [(Chem.MolFromSmarts(x),Chem.MolFromSmiles(y,False)) for x,y in patts]
30 |
31 | _reactions=None
32 | def NeutraliseCharges(smiles, reactions=None):
33 | global _reactions
34 | if reactions is None:
35 | if _reactions is None:
36 | _reactions=_InitialiseNeutralisationReactions()
37 | reactions=_reactions
38 | mol = Chem.MolFromSmiles(smiles)
39 | replaced = False
40 | for i,(reactant, product) in enumerate(reactions):
41 | while mol.HasSubstructMatch(reactant):
42 | replaced = True
43 | rms = AllChem.ReplaceSubstructs(mol, reactant, product)
44 | mol = rms[0]
45 | if replaced:
46 | return (Chem.MolToSmiles(mol,True), True)
47 | else:
48 | return (smiles, False)
49 |
50 | if __name__ == "__main__":
51 | for row in open(sys.argv[1]):
52 | toks = row.split()
53 | if len(toks) >= 2:
54 | smiles = toks[0]
55 | name = "_".join(toks[1:])
56 | neutral_smi, changed = NeutraliseCharges(smiles)
57 | print(neutral_smi,name)
58 |
59 |
--------------------------------------------------------------------------------
/predictive_models/simple_bbb_model.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 23,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "import pandas as pd\n",
10 | "from rdkit import Chem\n",
11 | "from janitor.chemistry import morgan_fingerprint\n",
12 | "from tqdm.notebook import tqdm\n",
13 | "from sklearn.model_selection import train_test_split\n",
14 | "from xgboost import XGBClassifier\n",
15 | "from sklearn.metrics import roc_auc_score, matthews_corrcoef, roc_curve, plot_confusion_matrix\n",
16 | "import seaborn as sns\n",
17 | "import matplotlib.pyplot as plt"
18 | ]
19 | },
20 | {
21 | "cell_type": "code",
22 | "execution_count": 2,
23 | "metadata": {},
24 | "outputs": [],
25 | "source": [
26 | "sns.set(rc={'figure.figsize': (7, 7)})\n",
27 | "sns.set(font_scale=1.5)\n",
28 | "sns.set_style('whitegrid')"
29 | ]
30 | },
31 | {
32 | "cell_type": "code",
33 | "execution_count": 3,
34 | "metadata": {},
35 | "outputs": [],
36 | "source": [
37 | "df = pd.read_csv(\"../data/BBBP.csv\")"
38 | ]
39 | },
40 | {
41 | "cell_type": "code",
42 | "execution_count": 4,
43 | "metadata": {},
44 | "outputs": [
45 | {
46 | "data": {
47 | "text/html": [
48 | "
\n",
49 | "\n",
62 | "
\n",
63 | " \n",
64 | " \n",
65 | " | \n",
66 | " num | \n",
67 | " name | \n",
68 | " p_np | \n",
69 | " smiles | \n",
70 | "
\n",
71 | " \n",
72 | " \n",
73 | " \n",
74 | " 0 | \n",
75 | " 1 | \n",
76 | " Propanolol | \n",
77 | " 1 | \n",
78 | " [Cl].CC(C)NCC(O)COc1cccc2ccccc12 | \n",
79 | "
\n",
80 | " \n",
81 | " 1 | \n",
82 | " 2 | \n",
83 | " Terbutylchlorambucil | \n",
84 | " 1 | \n",
85 | " C(=O)(OC(C)(C)C)CCCc1ccc(cc1)N(CCCl)CCCl | \n",
86 | "
\n",
87 | " \n",
88 | " 2 | \n",
89 | " 3 | \n",
90 | " 40730 | \n",
91 | " 1 | \n",
92 | " c12c3c(N4CCN(C)CC4)c(F)cc1c(c(C(O)=O)cn2C(C)CO... | \n",
93 | "
\n",
94 | " \n",
95 | " 3 | \n",
96 | " 4 | \n",
97 | " 24 | \n",
98 | " 1 | \n",
99 | " C1CCN(CC1)Cc1cccc(c1)OCCCNC(=O)C | \n",
100 | "
\n",
101 | " \n",
102 | " 4 | \n",
103 | " 5 | \n",
104 | " cloxacillin | \n",
105 | " 1 | \n",
106 | " Cc1onc(c2ccccc2Cl)c1C(=O)N[C@H]3[C@H]4SC(C)(C)... | \n",
107 | "
\n",
108 | " \n",
109 | "
\n",
110 | "
"
111 | ],
112 | "text/plain": [
113 | " num name p_np \\\n",
114 | "0 1 Propanolol 1 \n",
115 | "1 2 Terbutylchlorambucil 1 \n",
116 | "2 3 40730 1 \n",
117 | "3 4 24 1 \n",
118 | "4 5 cloxacillin 1 \n",
119 | "\n",
120 | " smiles \n",
121 | "0 [Cl].CC(C)NCC(O)COc1cccc2ccccc12 \n",
122 | "1 C(=O)(OC(C)(C)C)CCCc1ccc(cc1)N(CCCl)CCCl \n",
123 | "2 c12c3c(N4CCN(C)CC4)c(F)cc1c(c(C(O)=O)cn2C(C)CO... \n",
124 | "3 C1CCN(CC1)Cc1cccc(c1)OCCCNC(=O)C \n",
125 | "4 Cc1onc(c2ccccc2Cl)c1C(=O)N[C@H]3[C@H]4SC(C)(C)... "
126 | ]
127 | },
128 | "execution_count": 4,
129 | "metadata": {},
130 | "output_type": "execute_result"
131 | }
132 | ],
133 | "source": [
134 | "df.head()"
135 | ]
136 | },
137 | {
138 | "cell_type": "code",
139 | "execution_count": 5,
140 | "metadata": {},
141 | "outputs": [
142 | {
143 | "data": {
144 | "application/vnd.jupyter.widget-view+json": {
145 | "model_id": "b3c854a86d354abf95b3a5666db49537",
146 | "version_major": 2,
147 | "version_minor": 0
148 | },
149 | "text/plain": [
150 | "HBox(children=(FloatProgress(value=0.0, max=2050.0), HTML(value='')))"
151 | ]
152 | },
153 | "metadata": {},
154 | "output_type": "display_data"
155 | },
156 | {
157 | "name": "stderr",
158 | "output_type": "stream",
159 | "text": [
160 | "RDKit ERROR: [16:24:40] Explicit valence for atom # 1 N, 4, is greater than permitted\n",
161 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
162 | "RDKit ERROR: [16:24:40] Explicit valence for atom # 6 N, 4, is greater than permitted\n",
163 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
164 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
165 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
166 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
167 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
168 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
169 | "RDKit ERROR: [16:24:40] Explicit valence for atom # 6 N, 4, is greater than permitted\n",
170 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
171 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
172 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
173 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
174 | "RDKit ERROR: [16:24:40] Explicit valence for atom # 11 N, 4, is greater than permitted\n",
175 | "RDKit ERROR: [16:24:40] Explicit valence for atom # 12 N, 4, is greater than permitted\n",
176 | "RDKit ERROR: [16:24:40] Explicit valence for atom # 5 N, 4, is greater than permitted\n",
177 | "RDKit ERROR: [16:24:40] Explicit valence for atom # 5 N, 4, is greater than permitted\n",
178 | "RDKit ERROR: [16:24:40] Explicit valence for atom # 5 N, 4, is greater than permitted\n",
179 | "RDKit ERROR: [16:24:40] Explicit valence for atom # 5 N, 4, is greater than permitted\n",
180 | "RDKit ERROR: [16:24:40] Explicit valence for atom # 5 N, 4, is greater than permitted\n",
181 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
182 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
183 | "RDKit ERROR: [16:24:40] Explicit valence for atom # 5 N, 4, is greater than permitted\n",
184 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
185 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
186 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
187 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
188 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
189 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
190 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
191 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
192 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
193 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n"
194 | ]
195 | },
196 | {
197 | "name": "stdout",
198 | "output_type": "stream",
199 | "text": [
200 | "\n"
201 | ]
202 | },
203 | {
204 | "name": "stderr",
205 | "output_type": "stream",
206 | "text": [
207 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
208 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
209 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
210 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
211 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
212 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
213 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
214 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
215 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
216 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
217 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
218 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
219 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
220 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
221 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
222 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n",
223 | "RDKit WARNING: [16:24:40] WARNING: not removing hydrogen atom without neighbors\n"
224 | ]
225 | }
226 | ],
227 | "source": [
228 | "df['mol'] = [Chem.MolFromSmiles(x) for x in tqdm(df.smiles)]"
229 | ]
230 | },
231 | {
232 | "cell_type": "code",
233 | "execution_count": 6,
234 | "metadata": {},
235 | "outputs": [
236 | {
237 | "data": {
238 | "text/plain": [
239 | "False 2039\n",
240 | "True 11\n",
241 | "Name: mol, dtype: int64"
242 | ]
243 | },
244 | "execution_count": 6,
245 | "metadata": {},
246 | "output_type": "execute_result"
247 | }
248 | ],
249 | "source": [
250 | "pd.isna(df.mol).value_counts()"
251 | ]
252 | },
253 | {
254 | "cell_type": "code",
255 | "execution_count": 7,
256 | "metadata": {},
257 | "outputs": [
258 | {
259 | "data": {
260 | "text/plain": [
261 | "(2050, 5)"
262 | ]
263 | },
264 | "execution_count": 7,
265 | "metadata": {},
266 | "output_type": "execute_result"
267 | }
268 | ],
269 | "source": [
270 | "df.shape"
271 | ]
272 | },
273 | {
274 | "cell_type": "code",
275 | "execution_count": 8,
276 | "metadata": {},
277 | "outputs": [],
278 | "source": [
279 | "df.dropna(inplace=True)"
280 | ]
281 | },
282 | {
283 | "cell_type": "code",
284 | "execution_count": 9,
285 | "metadata": {},
286 | "outputs": [
287 | {
288 | "data": {
289 | "text/plain": [
290 | "(2039, 5)"
291 | ]
292 | },
293 | "execution_count": 9,
294 | "metadata": {},
295 | "output_type": "execute_result"
296 | }
297 | ],
298 | "source": [
299 | "df.shape"
300 | ]
301 | },
302 | {
303 | "cell_type": "code",
304 | "execution_count": 10,
305 | "metadata": {},
306 | "outputs": [],
307 | "source": [
308 | "fp_df = morgan_fingerprint(df,mols_column_name=\"mol\")"
309 | ]
310 | },
311 | {
312 | "cell_type": "code",
313 | "execution_count": 11,
314 | "metadata": {},
315 | "outputs": [],
316 | "source": [
317 | "combo_df = df[[\"p_np\"]].join(fp_df)"
318 | ]
319 | },
320 | {
321 | "cell_type": "code",
322 | "execution_count": 12,
323 | "metadata": {},
324 | "outputs": [],
325 | "source": [
326 | "train,test = train_test_split(combo_df)"
327 | ]
328 | },
329 | {
330 | "cell_type": "code",
331 | "execution_count": 13,
332 | "metadata": {},
333 | "outputs": [],
334 | "source": [
335 | "xgb = XGBClassifier()"
336 | ]
337 | },
338 | {
339 | "cell_type": "code",
340 | "execution_count": 14,
341 | "metadata": {},
342 | "outputs": [],
343 | "source": [
344 | "fp_cols = list(train.columns[1:])"
345 | ]
346 | },
347 | {
348 | "cell_type": "code",
349 | "execution_count": 15,
350 | "metadata": {},
351 | "outputs": [
352 | {
353 | "data": {
354 | "text/plain": [
355 | "XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,\n",
356 | " colsample_bynode=1, colsample_bytree=1, gamma=0,\n",
357 | " learning_rate=0.1, max_delta_step=0, max_depth=3,\n",
358 | " min_child_weight=1, missing=None, n_estimators=100, n_jobs=1,\n",
359 | " nthread=None, objective='binary:logistic', random_state=0,\n",
360 | " reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,\n",
361 | " silent=None, subsample=1, verbosity=1)"
362 | ]
363 | },
364 | "execution_count": 15,
365 | "metadata": {},
366 | "output_type": "execute_result"
367 | }
368 | ],
369 | "source": [
370 | "xgb.fit(train[fp_cols],train.p_np)"
371 | ]
372 | },
373 | {
374 | "cell_type": "code",
375 | "execution_count": 16,
376 | "metadata": {},
377 | "outputs": [],
378 | "source": [
379 | "pred = xgb.predict(test[fp_cols])\n",
380 | "prob = xgb.predict_proba(test[fp_cols])"
381 | ]
382 | },
383 | {
384 | "cell_type": "code",
385 | "execution_count": 17,
386 | "metadata": {},
387 | "outputs": [
388 | {
389 | "data": {
390 | "image/png": "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\n",
391 | "text/plain": [
392 | ""
393 | ]
394 | },
395 | "metadata": {},
396 | "output_type": "display_data"
397 | }
398 | ],
399 | "source": [
400 | "fpr, tpr, _ = roc_curve(test.p_np, prob[:,1])\n",
401 | "ax = sns.lineplot(fpr,tpr,lw=3)\n",
402 | "ax.set(xlabel=\"False Positive Rate\",ylabel=\"True Postive Rate\")\n",
403 | "_ = ax.plot([0,1],[0,1],ls=\"--\",lw=3)"
404 | ]
405 | },
406 | {
407 | "cell_type": "code",
408 | "execution_count": 18,
409 | "metadata": {},
410 | "outputs": [
411 | {
412 | "data": {
413 | "text/plain": [
414 | "0.8970102791241852"
415 | ]
416 | },
417 | "execution_count": 18,
418 | "metadata": {},
419 | "output_type": "execute_result"
420 | }
421 | ],
422 | "source": [
423 | "roc_auc_score(test.p_np,prob[:,1])"
424 | ]
425 | },
426 | {
427 | "cell_type": "code",
428 | "execution_count": 19,
429 | "metadata": {},
430 | "outputs": [
431 | {
432 | "data": {
433 | "text/plain": [
434 | "0.6726258311484374"
435 | ]
436 | },
437 | "execution_count": 19,
438 | "metadata": {},
439 | "output_type": "execute_result"
440 | }
441 | ],
442 | "source": [
443 | "matthews_corrcoef(test.p_np,pred)"
444 | ]
445 | },
446 | {
447 | "cell_type": "code",
448 | "execution_count": 27,
449 | "metadata": {},
450 | "outputs": [
451 | {
452 | "data": {
453 | "image/png": "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\n",
454 | "text/plain": [
455 | ""
456 | ]
457 | },
458 | "metadata": {},
459 | "output_type": "display_data"
460 | }
461 | ],
462 | "source": [
463 | "ax = plot_confusion_matrix(xgb, test[fp_cols], test.p_np, cmap=plt.cm.Blues, normalize='true')"
464 | ]
465 | },
466 | {
467 | "cell_type": "code",
468 | "execution_count": null,
469 | "metadata": {},
470 | "outputs": [],
471 | "source": []
472 | }
473 | ],
474 | "metadata": {
475 | "kernelspec": {
476 | "display_name": "Python 3",
477 | "language": "python",
478 | "name": "python3"
479 | },
480 | "language_info": {
481 | "codemirror_mode": {
482 | "name": "ipython",
483 | "version": 3
484 | },
485 | "file_extension": ".py",
486 | "mimetype": "text/x-python",
487 | "name": "python",
488 | "nbconvert_exporter": "python",
489 | "pygments_lexer": "ipython3",
490 | "version": "3.7.6"
491 | }
492 | },
493 | "nbformat": 4,
494 | "nbformat_minor": 4
495 | }
496 |
--------------------------------------------------------------------------------
/predictive_models/simple_regression_model.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 30,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "from rdkit import Chem, DataStructs\n",
10 | "from rdkit.Chem import AllChem\n",
11 | "import numpy as np\n",
12 | "from xgboost import XGBRegressor\n",
13 | "import pandas as pd\n",
14 | "from sklearn.model_selection import train_test_split\n",
15 | "from tqdm.notebook import tqdm\n",
16 | "from sklearn.metrics import r2_score\n",
17 | "import seaborn as sns"
18 | ]
19 | },
20 | {
21 | "cell_type": "code",
22 | "execution_count": 42,
23 | "metadata": {},
24 | "outputs": [],
25 | "source": [
26 | "def fp_list_from_smiles_list(smiles_list,n_bits=2048):\n",
27 | " fp_list = []\n",
28 | " for smiles in tqdm(smiles_list):\n",
29 | " mol = Chem.MolFromSmiles(smiles)\n",
30 | " fp_list.append(fp_as_array(mol,n_bits))\n",
31 | " return fp_list\n",
32 | "\n",
33 | "def fp_as_array(mol,n_bits=2048):\n",
34 | " fp = AllChem.GetMorganFingerprintAsBitVect(mol, 2, nBits=n_bits)\n",
35 | " arr = np.zeros((1,), int)\n",
36 | " DataStructs.ConvertToNumpyArray(fp, arr)\n",
37 | " return arr"
38 | ]
39 | },
40 | {
41 | "cell_type": "code",
42 | "execution_count": 43,
43 | "metadata": {},
44 | "outputs": [],
45 | "source": [
46 | "df = pd.read_csv(\"../data/A2a.smi\",sep=\" \",header=None)\n",
47 | "df.columns = [\"SMILES\",\"Name\",\"pIC50\"]"
48 | ]
49 | },
50 | {
51 | "cell_type": "code",
52 | "execution_count": 44,
53 | "metadata": {},
54 | "outputs": [
55 | {
56 | "data": {
57 | "application/vnd.jupyter.widget-view+json": {
58 | "model_id": "aaa49ef1f98c44218ebd0fe94a9f3e09",
59 | "version_major": 2,
60 | "version_minor": 0
61 | },
62 | "text/plain": [
63 | "HBox(children=(FloatProgress(value=0.0, max=203.0), HTML(value='')))"
64 | ]
65 | },
66 | "metadata": {},
67 | "output_type": "display_data"
68 | },
69 | {
70 | "name": "stdout",
71 | "output_type": "stream",
72 | "text": [
73 | "\n",
74 | "CPU times: user 120 ms, sys: 3.22 ms, total: 123 ms\n",
75 | "Wall time: 121 ms\n"
76 | ]
77 | }
78 | ],
79 | "source": [
80 | "%time fp_list = fp_list_from_smiles_list(df.SMILES)"
81 | ]
82 | },
83 | {
84 | "cell_type": "code",
85 | "execution_count": 45,
86 | "metadata": {},
87 | "outputs": [],
88 | "source": [
89 | "df['fp'] = fp_list"
90 | ]
91 | },
92 | {
93 | "cell_type": "code",
94 | "execution_count": 46,
95 | "metadata": {},
96 | "outputs": [],
97 | "source": [
98 | "train, test = train_test_split(df)"
99 | ]
100 | },
101 | {
102 | "cell_type": "code",
103 | "execution_count": 47,
104 | "metadata": {},
105 | "outputs": [],
106 | "source": [
107 | "xgb = XGBRegressor(objective='reg:squarederror')"
108 | ]
109 | },
110 | {
111 | "cell_type": "code",
112 | "execution_count": 53,
113 | "metadata": {},
114 | "outputs": [
115 | {
116 | "data": {
117 | "text/plain": [
118 | "XGBRegressor(base_score=0.5, booster='gbtree', colsample_bylevel=1,\n",
119 | " colsample_bynode=1, colsample_bytree=1, gamma=0, gpu_id=-1,\n",
120 | " importance_type='gain', interaction_constraints='',\n",
121 | " learning_rate=0.300000012, max_delta_step=0, max_depth=6,\n",
122 | " min_child_weight=1, missing=nan, monotone_constraints='()',\n",
123 | " n_estimators=100, n_jobs=0, num_parallel_tree=1, random_state=0,\n",
124 | " reg_alpha=0, reg_lambda=1, scale_pos_weight=1, subsample=1,\n",
125 | " tree_method='exact', validate_parameters=1, verbosity=None)"
126 | ]
127 | },
128 | "execution_count": 53,
129 | "metadata": {},
130 | "output_type": "execute_result"
131 | }
132 | ],
133 | "source": [
134 | "xgb.fit(np.array(list(train.fp.values)),train.pIC50)"
135 | ]
136 | },
137 | {
138 | "cell_type": "code",
139 | "execution_count": 54,
140 | "metadata": {},
141 | "outputs": [],
142 | "source": [
143 | "pred = xgb.predict(np.array(list(test.fp)))"
144 | ]
145 | },
146 | {
147 | "cell_type": "code",
148 | "execution_count": 55,
149 | "metadata": {},
150 | "outputs": [],
151 | "source": [
152 | "sns.set(rc={'figure.figsize': (10, 10)})\n",
153 | "sns.set(font_scale=1.5)\n",
154 | "sns.set_style('whitegrid')"
155 | ]
156 | },
157 | {
158 | "cell_type": "code",
159 | "execution_count": 56,
160 | "metadata": {},
161 | "outputs": [
162 | {
163 | "data": {
164 | "image/png": "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\n",
165 | "text/plain": [
166 | ""
167 | ]
168 | },
169 | "metadata": {},
170 | "output_type": "display_data"
171 | }
172 | ],
173 | "source": [
174 | "pred_df = pd.DataFrame()\n",
175 | "pred_df[\"Exp\"] = test.pIC50\n",
176 | "pred_df[\"Pred\"] = pred\n",
177 | "ax = sns.lmplot(\"Exp\",\"Pred\",data=pred_df,height=7,aspect=1)"
178 | ]
179 | },
180 | {
181 | "cell_type": "code",
182 | "execution_count": 57,
183 | "metadata": {},
184 | "outputs": [
185 | {
186 | "data": {
187 | "text/plain": [
188 | "0.42572586110694055"
189 | ]
190 | },
191 | "execution_count": 57,
192 | "metadata": {},
193 | "output_type": "execute_result"
194 | }
195 | ],
196 | "source": [
197 | "r2_score(test.pIC50,pred)"
198 | ]
199 | },
200 | {
201 | "cell_type": "code",
202 | "execution_count": null,
203 | "metadata": {},
204 | "outputs": [],
205 | "source": []
206 | }
207 | ],
208 | "metadata": {
209 | "kernelspec": {
210 | "display_name": "Python 3",
211 | "language": "python",
212 | "name": "python3"
213 | },
214 | "language_info": {
215 | "codemirror_mode": {
216 | "name": "ipython",
217 | "version": 3
218 | },
219 | "file_extension": ".py",
220 | "mimetype": "text/x-python",
221 | "name": "python",
222 | "nbconvert_exporter": "python",
223 | "pygments_lexer": "ipython3",
224 | "version": "3.7.6"
225 | }
226 | },
227 | "nbformat": 4,
228 | "nbformat_minor": 4
229 | }
230 |
--------------------------------------------------------------------------------