绘制分子相似性矩阵热图

——以DrugBank数据库Illicit及Nutraceutical两类分子相似性矩阵为例

  完整工作流程或分子相似性矩阵数据计算方法参见教程 综合使用KNIME、Python绘制分子相似性矩阵热图

In [1]:
import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
In [2]:
df = pd.DataFrame(pd.read_csv('G:/KNIME/DrugBank/DrugTanimoto.csv',header = 0, index_col=[0]))
df
Out[2]:
nutra_0 nutra_1 nutra_2 nutra_3 nutra_4 nutra_5 nutra_6 nutra_7 nutra_8 nutra_9 ... nutra_96 nutra_97 nutra_98 nutra_99 nutra_100 nutra_101 nutra_102 nutra_103 nutra_104 nutra_105
illicit_0 0.075472 0.042857 0.075949 0.073171 0.088608 0.074074 0.419355 0.018182 0.034483 0.081081 ... 0.162791 0.048780 0.023256 0.023256 0.023256 0.023256 0.117647 0.062500 0.111111 NaN
illicit_1 0.055556 0.042857 0.049383 0.100000 0.061728 0.074074 0.023256 0.056604 0.111111 0.052632 ... 0.063830 0.162162 0.073171 0.073171 0.073171 0.073171 0.075472 0.096774 0.020408 NaN
illicit_2 0.075472 0.042857 0.089744 0.073171 0.061728 0.074074 0.419355 0.018182 0.034483 0.081081 ... 0.162791 0.048780 0.023256 0.023256 0.023256 0.023256 0.117647 0.062500 0.111111 NaN
illicit_3 0.111111 0.056738 0.113924 0.236842 0.085366 0.280000 0.205128 0.180000 0.031250 0.303030 ... 0.039216 0.095238 0.044444 0.044444 0.044444 0.044444 0.052632 0.121212 0.104167 NaN
illicit_4 0.070175 0.094891 0.098765 0.116279 0.071429 0.137931 0.043478 0.176471 0.062500 0.073171 ... 0.080000 0.236842 0.090909 0.090909 0.090909 0.090909 0.070175 0.151515 0.038462 NaN
illicit_5 0.066667 0.085106 0.095238 0.108696 0.068966 0.125000 0.040816 0.188679 0.057143 0.068182 ... 0.075472 0.190476 0.085106 0.085106 0.085106 0.085106 0.066667 0.138889 0.036364 NaN
illicit_6 0.065574 0.092199 0.094118 0.106383 0.068182 0.121212 0.040000 0.185185 0.055556 0.066667 ... 0.074074 0.214286 0.083333 0.083333 0.083333 0.083333 0.065574 0.135135 0.035714 NaN
illicit_7 0.102273 0.081395 0.136364 0.050000 0.125000 0.029851 0.090909 0.090909 0.093750 0.038961 ... 0.139241 0.064103 0.090909 0.090909 0.090909 0.090909 0.141176 0.072464 0.097561 NaN
illicit_8 0.091954 0.101796 0.118182 0.051282 0.148148 0.063492 0.093333 0.105882 0.079365 0.054054 ... 0.189189 0.080000 0.078947 0.078947 0.078947 0.078947 0.117647 0.125000 0.086420 NaN
illicit_9 0.078125 0.060403 0.114943 0.056604 0.113636 0.108108 0.191489 0.062500 0.076923 0.061224 ... 0.215686 0.100000 0.098039 0.098039 0.098039 0.098039 0.112903 0.179487 0.107143 NaN
illicit_10 0.082192 0.090909 0.080808 0.047619 0.102041 0.062500 0.118644 0.068493 0.019608 0.068966 ... 0.090909 0.140351 0.064516 0.064516 0.064516 0.064516 0.082192 0.076923 0.107692 NaN
illicit_11 0.092593 0.072464 0.101266 0.121951 0.113924 0.192308 0.069767 0.183673 0.103448 0.105263 ... 0.106383 0.216216 0.150000 0.150000 0.150000 0.150000 0.113208 0.161290 0.083333 NaN
illicit_12 0.075000 0.114650 0.117647 0.073529 0.074766 0.054545 0.140625 0.075949 0.035088 0.045455 ... 0.128571 0.074627 0.057971 0.057971 0.057971 0.057971 0.116883 0.050000 0.112676 NaN
illicit_13 0.098765 0.105590 0.093458 0.070423 0.092593 0.051724 0.101449 0.060241 0.050847 0.058824 ... 0.138889 0.119403 0.070423 0.070423 0.070423 0.070423 0.112500 0.064516 0.093333 NaN
illicit_14 0.060976 0.073171 0.105769 0.057143 0.104762 0.035088 0.138462 0.036145 0.071429 0.044776 ... 0.159420 0.073529 0.057143 0.057143 0.057143 0.057143 0.101266 0.049180 0.111111 NaN
illicit_15 0.089888 0.075145 0.126126 0.050000 0.135135 0.061538 0.090909 0.103448 0.093750 0.038961 ... 0.168831 0.077922 0.090909 0.090909 0.090909 0.090909 0.141176 0.121212 0.097561 NaN
illicit_16 0.044776 0.052980 0.076923 0.036364 0.064516 0.050000 0.212766 0.014706 0.048780 0.060000 ... 0.125000 0.056604 0.017857 0.017857 0.017857 0.017857 0.093750 0.044444 0.086207 NaN
illicit_17 0.082353 0.083832 0.111111 0.039474 0.090090 0.015873 0.082192 0.058140 0.083333 0.041667 ... 0.164384 0.083333 0.053333 0.053333 0.053333 0.053333 0.095238 0.045455 0.062500 NaN
illicit_18 0.128205 0.092593 0.183673 0.136364 0.073394 0.132075 0.229508 0.101266 0.051724 0.092308 ... 0.191176 0.088235 0.071429 0.071429 0.071429 0.071429 0.113924 0.048387 0.140845 NaN
illicit_19 0.083333 0.084416 0.115789 0.048387 0.114583 0.086957 0.226415 0.069444 0.085106 0.051724 ... 0.203390 0.084746 0.101695 0.101695 0.101695 0.101695 0.130435 0.122449 0.092308 NaN
illicit_20 0.058824 0.111801 0.092593 0.069444 0.062500 0.050847 0.115942 0.034884 0.016129 0.042857 ... 0.106667 0.055556 0.054795 0.054795 0.054795 0.054795 0.111111 0.046875 0.092105 NaN
illicit_21 0.068182 0.089286 0.089286 0.051948 0.098214 0.064516 0.109589 0.044944 0.046875 0.040541 ... 0.144737 0.066667 0.065789 0.065789 0.065789 0.065789 0.105882 0.075758 0.101266 NaN
illicit_22 0.075000 0.086957 0.106796 0.057971 0.064815 0.054545 0.140625 0.062500 0.035088 0.045455 ... 0.144928 0.058824 0.057971 0.057971 0.057971 0.057971 0.116883 0.050000 0.112676 NaN
illicit_23 0.057471 0.077381 0.071429 0.039474 0.141509 0.066667 0.097222 0.070588 0.048387 0.041667 ... 0.103896 0.068493 0.112676 0.112676 0.112676 0.112676 0.095238 0.112903 0.089744 NaN
illicit_24 0.064935 0.068750 0.122449 0.045455 0.132653 0.080000 0.210526 0.080000 0.057692 0.048387 ... 0.171875 0.079365 0.095238 0.095238 0.095238 0.095238 0.123288 0.113208 0.102941 NaN
illicit_25 0.092105 0.095541 0.110000 0.076923 0.066667 0.057692 0.186441 0.064935 0.037037 0.064516 ... 0.151515 0.061538 0.060606 0.060606 0.060606 0.060606 0.121622 0.052632 0.134328 NaN
illicit_26 0.078125 0.060403 0.077778 0.056604 0.076923 0.078947 0.217391 0.062500 0.050000 0.083333 ... 0.169811 0.057692 0.056604 0.056604 0.056604 0.056604 0.131148 0.069767 0.107143 NaN
illicit_27 0.054054 0.098684 0.092784 0.065574 0.114583 0.086957 0.048387 0.100000 0.062500 0.051724 ... 0.075758 0.122807 0.101695 0.101695 0.101695 0.101695 0.098592 0.145833 0.028986 NaN
illicit_28 0.063492 0.046980 0.091954 0.018868 0.066667 0.054054 0.255814 0.031250 0.081081 0.020408 ... 0.176471 0.039216 0.038462 0.038462 0.038462 0.038462 0.080645 0.073171 0.111111 NaN
illicit_29 0.077922 0.061728 0.110000 0.044776 0.120000 0.057692 0.147541 0.078947 0.056604 0.064516 ... 0.169231 0.061538 0.111111 0.111111 0.111111 0.111111 0.136986 0.090909 0.134328 NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
illicit_172 0.075472 0.042857 0.075949 0.073171 0.088608 0.074074 0.419355 0.018182 0.034483 0.081081 ... 0.162791 0.048780 0.023256 0.023256 0.023256 0.023256 0.117647 0.062500 0.111111 NaN
illicit_173 0.052632 0.041958 0.073171 0.044444 0.085366 0.066667 0.342857 0.017241 0.031250 0.048780 ... 0.152174 0.045455 0.021739 0.021739 0.021739 0.021739 0.090909 0.057143 0.104167 NaN
illicit_174 0.076923 0.046053 0.088889 0.055556 0.112360 0.076923 0.212766 0.061538 0.102564 0.060000 ... 0.235294 0.056604 0.075472 0.075472 0.075472 0.075472 0.129032 0.093023 0.105263 NaN
illicit_175 0.074074 0.100000 0.116505 0.072464 0.084112 0.053571 0.138462 0.075000 0.034483 0.060606 ... 0.142857 0.073529 0.057143 0.057143 0.057143 0.057143 0.115385 0.066667 0.111111 NaN
illicit_176 0.073171 0.079268 0.094340 0.056338 0.063636 0.052632 0.119403 0.048193 0.016667 0.044118 ... 0.125000 0.057143 0.056338 0.056338 0.056338 0.056338 0.113924 0.048387 0.109589 NaN
illicit_177 0.054795 0.099338 0.117021 0.066667 0.092784 0.088889 0.049180 0.101449 0.063830 0.052632 ... 0.076923 0.125000 0.103448 0.103448 0.103448 0.103448 0.100000 0.148936 0.029412 NaN
illicit_178 0.046154 0.046667 0.103448 0.037736 0.077778 0.025641 0.170213 0.046875 0.078947 0.062500 ... 0.173077 0.102041 0.057692 0.057692 0.057692 0.057692 0.096774 0.071429 0.089286 NaN
illicit_179 0.090909 0.114458 0.127273 0.064103 0.116071 0.062500 0.106667 0.079545 0.078125 0.067568 ... 0.186667 0.093333 0.077922 0.077922 0.077922 0.077922 0.103448 0.106061 0.072289 NaN
illicit_180 0.088235 0.093960 0.108696 0.033898 0.107527 0.095238 0.150943 0.057971 0.021739 0.036364 ... 0.155172 0.071429 0.070175 0.070175 0.070175 0.070175 0.121212 0.108696 0.155172 NaN
illicit_181 0.097222 0.070064 0.175824 0.137931 0.048544 0.133333 0.269231 0.238095 0.019608 0.215686 ... 0.125000 0.083333 0.031250 0.031250 0.031250 0.031250 0.112676 0.056604 0.161290 NaN
illicit_182 0.074627 0.066225 0.063830 0.035088 0.052083 0.073171 0.035088 0.092308 0.022727 0.037736 ... 0.048387 0.054545 0.092593 0.092593 0.092593 0.092593 0.090909 0.088889 0.031746 NaN
illicit_183 0.052632 0.097403 0.080000 0.063492 0.079208 0.083333 0.030769 0.082192 0.060000 0.050000 ... 0.073529 0.118644 0.080645 0.080645 0.080645 0.080645 0.081081 0.117647 0.028169 NaN
illicit_184 0.169492 0.074830 0.141176 0.098039 0.076923 0.171429 0.217391 0.079365 0.024390 0.106383 ... 0.127273 0.078431 0.037037 0.037037 0.037037 0.037037 0.095238 0.069767 0.215686 NaN
illicit_185 0.057471 0.124224 0.090909 0.053333 0.080357 0.066667 0.025974 0.151899 0.015625 0.071429 ... 0.049383 0.181818 0.097222 0.097222 0.097222 0.097222 0.121951 0.112903 0.036585 NaN
illicit_186 0.075949 0.067485 0.097087 0.043478 0.140000 0.075472 0.200000 0.050000 0.074074 0.046154 ... 0.181818 0.075758 0.074627 0.074627 0.074627 0.074627 0.103896 0.107143 0.098592 NaN
illicit_187 0.057471 0.077381 0.090909 0.039474 0.120370 0.066667 0.179104 0.058140 0.048387 0.041667 ... 0.148649 0.068493 0.082192 0.082192 0.082192 0.082192 0.108434 0.095238 0.089744 NaN
illicit_188 0.061728 0.114650 0.128713 0.073529 0.173469 0.074074 0.106061 0.118421 0.113208 0.045455 ... 0.161765 0.107692 0.158730 0.158730 0.158730 0.158730 0.146667 0.105263 0.082192 NaN
illicit_189 0.065789 0.075949 0.123711 0.046154 0.134021 0.081633 0.172414 0.081081 0.080000 0.049180 ... 0.193548 0.080645 0.096774 0.096774 0.096774 0.096774 0.140845 0.115385 0.104478 NaN
illicit_190 0.053191 0.099415 0.094828 0.048780 0.142857 0.059701 0.088608 0.088889 0.043478 0.037975 ... 0.108434 0.089744 0.088608 0.088608 0.088608 0.088608 0.112360 0.085714 0.082353 NaN
illicit_191 0.063291 0.067901 0.120000 0.044118 0.130000 0.076923 0.203390 0.092105 0.055556 0.046875 ... 0.166667 0.093750 0.092308 0.092308 0.092308 0.092308 0.120000 0.109091 0.115942 NaN
illicit_192 0.070588 0.084337 0.101852 0.040000 0.121495 0.067797 0.181818 0.058824 0.049180 0.042254 ... 0.150685 0.069444 0.114286 0.114286 0.114286 0.114286 0.109756 0.096774 0.105263 NaN
illicit_193 0.060241 0.079268 0.115385 0.041667 0.135922 0.071429 0.190476 0.074074 0.051724 0.044118 ... 0.157143 0.088235 0.086957 0.086957 0.086957 0.086957 0.113924 0.101695 0.094595 NaN
illicit_194 0.060241 0.072727 0.094340 0.041667 0.147059 0.071429 0.190476 0.074074 0.051724 0.044118 ... 0.157143 0.072464 0.102941 0.102941 0.102941 0.102941 0.113924 0.101695 0.109589 NaN
illicit_195 0.050633 0.102564 0.099010 0.060606 0.142857 0.078431 0.111111 0.093333 0.056604 0.047619 ... 0.117647 0.078125 0.111111 0.111111 0.111111 0.111111 0.106667 0.111111 0.085714 NaN
illicit_196 0.080000 0.082803 0.159574 0.062500 0.145833 0.081633 0.172414 0.095890 0.080000 0.049180 ... 0.193548 0.098361 0.114754 0.114754 0.114754 0.114754 0.140845 0.115385 0.104478 NaN
illicit_197 0.090909 0.088398 0.133333 0.043956 0.141667 0.025641 0.079545 0.103093 0.080000 0.034091 ... 0.122222 0.056180 0.091954 0.091954 0.091954 0.091954 0.136842 0.062500 0.086022 NaN
illicit_198 0.078125 0.060403 0.114943 0.056604 0.139535 0.108108 0.191489 0.062500 0.105263 0.061224 ... 0.240000 0.100000 0.076923 0.076923 0.076923 0.076923 0.112903 0.179487 0.107143 NaN
illicit_199 0.086957 0.071895 0.131868 0.050847 0.142857 0.093023 0.169811 0.072464 0.090909 0.054545 ... 0.214286 0.089286 0.107143 0.107143 0.107143 0.107143 0.136364 0.130435 0.096774 NaN
illicit_200 0.095890 0.090323 0.113402 0.063492 0.123711 0.040000 0.098361 0.067568 0.104167 0.050000 ... 0.196721 0.064516 0.063492 0.063492 0.063492 0.063492 0.081081 0.075472 0.123077 NaN
illicit_201 0.043478 0.114458 0.087719 0.050633 0.077586 0.062500 0.024691 0.144578 0.014706 0.067568 ... 0.047059 0.123288 0.106667 0.106667 0.106667 0.106667 0.103448 0.089552 0.022989 NaN

202 rows × 106 columns

In [18]:
list_column = []
list_index = []
for indexs in df.index:
    for i in range(len(df.loc[indexs].values)):
        if(float(df.loc[indexs].values[i]) > 0.4):
            list_column.append(df.columns.values[i])
            list_index.append(indexs)
df_column = df.columns.values.tolist()
df_index = df._stat_axis.values.tolist()
df_lsim = df.drop(columns = list(set(df_column).difference(set(list_column))), index = list(set(df_index).difference(set(list_index))))
df_lsim
Out[18]:
nutra_6 nutra_18 nutra_24 nutra_27 nutra_34 nutra_35 nutra_36 nutra_62 nutra_67 nutra_72 nutra_74 nutra_85 nutra_87 nutra_89
illicit_0 0.419355 0.096774 0.035714 0.085714 0.125000 0.187500 0.096774 0.105263 0.033333 0.111111 0.029412 0.032258 0.127660 0.027778
illicit_2 0.419355 0.096774 0.035714 0.085714 0.125000 0.187500 0.096774 0.105263 0.033333 0.111111 0.029412 0.032258 0.127660 0.027778
illicit_3 0.205128 0.275862 0.333333 0.366667 0.444444 0.176471 0.275862 0.081967 0.101695 0.166667 0.266667 0.060606 0.120000 0.290323
illicit_52 0.171429 0.409091 0.444444 0.400000 0.269231 0.173913 0.409091 0.090909 0.134615 0.163265 0.454545 0.074074 0.086957 0.416667
illicit_53 0.093750 0.052632 0.037736 0.049180 0.068966 0.317460 0.052632 0.618182 0.086420 0.303030 0.070175 0.074074 0.338983 0.050000
illicit_55 0.032258 0.038462 0.042553 0.094340 0.098039 0.040541 0.038462 0.077922 0.438596 0.038961 0.037736 0.083333 0.028169 0.096154
illicit_57 0.068966 0.040000 0.021739 0.037037 0.038462 0.315789 0.040000 0.306452 0.038961 0.529412 0.060000 0.086957 0.613636 0.037736
illicit_58 0.234043 0.116279 0.023810 0.106383 0.136364 0.613636 0.116279 0.375000 0.055556 0.396226 0.042553 0.022222 0.425532 0.040816
illicit_66 0.032258 0.038462 0.065217 0.115385 0.098039 0.040541 0.038462 0.077922 0.640000 0.038961 0.057692 0.061224 0.042857 0.117647
illicit_69 0.148148 0.061224 0.021739 0.056604 0.080000 0.500000 0.061224 0.327869 0.052632 0.322034 0.060000 0.063830 0.339623 0.037736
illicit_96 0.153846 0.063830 0.022727 0.058824 0.061224 0.520833 0.063830 0.316667 0.040000 0.333333 0.062500 0.090909 0.352941 0.039216
illicit_100 0.046512 0.129032 0.071429 0.054054 0.057143 0.054545 0.129032 0.066667 0.086207 0.051724 0.125000 0.650000 0.038462 0.085714
illicit_124 0.032258 0.058824 0.042553 0.094340 0.076923 0.040541 0.058824 0.064103 0.640000 0.038961 0.078431 0.040000 0.057971 0.075472
illicit_135 0.032787 0.039216 0.066667 0.117647 0.100000 0.041096 0.039216 0.078947 0.500000 0.039474 0.058824 0.062500 0.043478 0.120000
illicit_145 0.224490 0.111111 0.022727 0.102041 0.130435 0.586957 0.111111 0.362069 0.068493 0.381818 0.040816 0.043478 0.408163 0.060000
illicit_172 0.419355 0.096774 0.035714 0.085714 0.125000 0.187500 0.096774 0.105263 0.033333 0.111111 0.029412 0.032258 0.127660 0.027778
illicit_200 0.098361 0.055556 0.040000 0.051724 0.053571 0.333333 0.055556 0.592593 0.062500 0.317460 0.074074 0.100000 0.357143 0.052632
In [45]:
df_lsim = df_lsim.drop("illicit_0")
df_lsim
Out[45]:
nutra_6 nutra_18 nutra_24 nutra_27 nutra_34 nutra_35 nutra_36 nutra_62 nutra_67 nutra_72 nutra_74 nutra_85 nutra_87 nutra_89
illicit_2 0.419355 0.096774 0.035714 0.085714 0.125000 0.187500 0.096774 0.105263 0.033333 0.111111 0.029412 0.032258 0.127660 0.027778
illicit_3 0.205128 0.275862 0.333333 0.366667 0.444444 0.176471 0.275862 0.081967 0.101695 0.166667 0.266667 0.060606 0.120000 0.290323
illicit_52 0.171429 0.409091 0.444444 0.400000 0.269231 0.173913 0.409091 0.090909 0.134615 0.163265 0.454545 0.074074 0.086957 0.416667
illicit_53 0.093750 0.052632 0.037736 0.049180 0.068966 0.317460 0.052632 0.618182 0.086420 0.303030 0.070175 0.074074 0.338983 0.050000
illicit_55 0.032258 0.038462 0.042553 0.094340 0.098039 0.040541 0.038462 0.077922 0.438596 0.038961 0.037736 0.083333 0.028169 0.096154
illicit_57 0.068966 0.040000 0.021739 0.037037 0.038462 0.315789 0.040000 0.306452 0.038961 0.529412 0.060000 0.086957 0.613636 0.037736
illicit_58 0.234043 0.116279 0.023810 0.106383 0.136364 0.613636 0.116279 0.375000 0.055556 0.396226 0.042553 0.022222 0.425532 0.040816
illicit_66 0.032258 0.038462 0.065217 0.115385 0.098039 0.040541 0.038462 0.077922 0.640000 0.038961 0.057692 0.061224 0.042857 0.117647
illicit_69 0.148148 0.061224 0.021739 0.056604 0.080000 0.500000 0.061224 0.327869 0.052632 0.322034 0.060000 0.063830 0.339623 0.037736
illicit_96 0.153846 0.063830 0.022727 0.058824 0.061224 0.520833 0.063830 0.316667 0.040000 0.333333 0.062500 0.090909 0.352941 0.039216
illicit_100 0.046512 0.129032 0.071429 0.054054 0.057143 0.054545 0.129032 0.066667 0.086207 0.051724 0.125000 0.650000 0.038462 0.085714
illicit_124 0.032258 0.058824 0.042553 0.094340 0.076923 0.040541 0.058824 0.064103 0.640000 0.038961 0.078431 0.040000 0.057971 0.075472
illicit_135 0.032787 0.039216 0.066667 0.117647 0.100000 0.041096 0.039216 0.078947 0.500000 0.039474 0.058824 0.062500 0.043478 0.120000
illicit_145 0.224490 0.111111 0.022727 0.102041 0.130435 0.586957 0.111111 0.362069 0.068493 0.381818 0.040816 0.043478 0.408163 0.060000
illicit_172 0.419355 0.096774 0.035714 0.085714 0.125000 0.187500 0.096774 0.105263 0.033333 0.111111 0.029412 0.032258 0.127660 0.027778
illicit_200 0.098361 0.055556 0.040000 0.051724 0.053571 0.333333 0.055556 0.592593 0.062500 0.317460 0.074074 0.100000 0.357143 0.052632
In [46]:
%matplotlib notebook
mask = np.zeros_like(df_lsim)
mask[np.triu_indices_from(mask)] = False
sns.set_context("paper", font_scale = 1)
with sns.axes_style("ticks"):
    ax = sns.heatmap(df_lsim, mask = mask, center = 0.3, cmap="RdBu_r")
In [51]:
%matplotlib notebook
sns.set_context("paper", font_scale = 0.5)
with sns.axes_style("ticks"):
    ax = sns.heatmap(df, center = 0.5, cmap="RdBu_r", vmax = 1)