RDKit を使用して、SMILE 構造を持つ分子の 2 つのリスト間の谷本係数に基づいて分子の類似性を計算しています。これで、2 つの個別の csv ファイルから SMILE 構造を抽出できるようになりました。これらの構造を RDKit の指紋モジュールに入れる方法と、分子の 2 つのリスト間でペアごとに類似性を計算する方法を知りたいですか?
from rdkit import DataStructs
from rdkit.Chem.Fingerprints import FingerprintMols
ms = [Chem.MolFromSmiles('CCOC'), Chem.MolFromSmiles('CCO'), ... Chem.MolFromSmiles('COC')]
fps = [FingerprintMols.FingerprintMol(x) for x in ms]
DataStructs.FingerprintSimilarity(fps[0],fps[1])
私が持っているすべての SMILE 構造 (10,000 以上) を「ms」リストに入れ、それらのフィンガープリントを取得したいと考えています。次に、2 つのリストの分子の各ペアの類似性を比較します。おそらくここで for ループが必要でしょうか?
前もって感謝します!
pandas データフレームを使用して、構造を含むリストを選択して出力し、リストを list_1 と list_2 に保存しました。ms1 行まで実行すると、次のようなエラーが発生します。
TypeError: No registered converter was able to produce a C++ rvalue of type std::__cxx11::basic_string<wchar_t,
std::char_traits<wchar_t>, std::allocator<wchar_t> > from this Python object of type float
次に、ファイルを確認したところ、smiles 列に SMILES しかありません。しかし、テストのためにいくつかの分子構造を手動でリストに入れると、まだエラーがあります
fpArgs['minSize'].
たとえば、ガドジアミドの SMILES は「O=C1[O-][Gd+3]234567[O]=C(C[N]2(CC[N]3(CC([O-]4)=O] )CC[N]5(CC(=[O]6)NC)CC(=O)[O-]7)C1)NC"、およびエラー コードは次のとおりです (fps ラインの実行時)。
ArgumentError: Python argument types in
rdkit.Chem.rdmolops.RDKFingerprint(NoneType, int, int, int, int, int, float, int)
did not match C++ signature:
RDKFingerprint(RDKit::ROMol mol, unsigned int minPath=1,
unsigned int maxPath=7, unsigned int fpSize=2048, unsigned int nBitsPerHash=2,
bool useHs=True, double tgtDensity=0.0, unsigned int minSize=128, bool branchedPaths=True,
bool useBondOrder=True, boost::python::api::object atomInvariants=0, boost::python::api::object fromAtoms=0,
boost::python::api::object atomBits=None, boost::python::api::object bitInfo=None).
元の csv ファイルが次のような場合に、分子名を類似値とともに出力ファイルに含める方法:
名前、笑顔、値、値 2
分子1,CCOCN(C)(C),0.25,A
分子2、CCO、1.12、B
分子3、COC、2.25、C
出力ファイルに分子名を含めるためにこれらのコードを追加しましたが、これらは名前に関する配列値エラーです (特に d2 の場合):
name_1 = df_1['id1']
name_2 = df_2['id2']
name_3 = pd.concat([name_1, name_2])
# create a list for the dataframe
d1, qu, d2, ta, sim = [], [], [], [], []
for n in range(len(fps)-1):
s = DataStructs.BulkTanimotoSimilarity(fps[n], fps[n+1:])
#print(c_smiles[n], c_smiles[n+1:])
for m in range(len(s)):
qu.append(c_smiles[n])
ta.append(c_smiles[n+1:][m])
sim.append(s[m])
d1.append(name_3[n])
d2.append(name_3[n+1:][m])
#print()
d = {'ID_1':d1, 'query':qu, 'ID_2':d2, 'target':ta, 'Similarity':sim}
df_final = pd.DataFrame(data=d)
df_final = df_final.sort_values('Similarity', ascending=False)
for index, row in df.iterrows():
print (row["ID_1"], row["query"], row["ID_2"], row["target"], row["Similarity"])
print(df_final)
# save as csv
df_final.to_csv('RESULT_3.csv', index=False, sep=',')