C'est une histoire que j'ai écrite un peu sérieusement en Python sur la base d'une bibliothèque qui comprend un composé appelé RDKit et renvoie beaucoup de nombres. J'explore toujours ma fonction commune et la forme de classification, et bien qu'il y ait encore diverses restrictions après l'autre jour, je pense que je pourrais voir une petite direction.
Créez un fichier CSV à partir d'un fichier contenant des informations composées appelé fichier SDF. Une bibliothèque appelée RDKit crée 200 colonnes de nombres, donc en plus de cela, elle génère 210 colonnes comprenant des noms et 10 colonnes. Cependant, la généralisation étant partiellement interrompue, il n'est pas possible de la limiter à un fichier spécifique. Eh bien, je prévois de le mettre à niveau plus tard. Je vais.
-Les composés du fichier SDF doivent avoir les paramètres suivants. ['ID', 'NAME', 'SOL', 'SMILES', 'SOL_classification']
・ Les composés étranges sont NG. (Séparation, ions, etc. Si vous êtes confus, RDKit ne donnera pas d'erreur de calcul)
import pandas as pd
from rdkit import Chem
from rdkit.Chem import AllChem, Descriptors
from rdkit.ML.Descriptors import MoleculeDescriptors
def get_basevalues(sampleid, mol):
tmps = list()
tmps.append(('SampleID', sampleid))
tmps.append(('SampleName', mol.GetProp('_Name')))
tmps.append(('Structure', Chem.MolToMolBlock(mol)))
tmps.append(('Atoms', len(mol.GetAtoms())))
tmps.append(('Bonds', len(mol.GetBonds())))
names = [tmp[0] for tmp in tmps]
values = [tmp[1] for tmp in tmps]
return names, values
def get_exvalues(sampleid, mol):
names = ['ID', 'NAME', 'SOL', 'SMILES', 'SOL_classification']
values = list()
for name in names:
values.append(mol.GetProp(name))
return names, values
#Calculer le descripteur à partir du fichier SDF et générer le CSV
# I :Chemin du fichier composé
#Chemin du fichier CSV
def ExportCSVFromSDF(sdfpath, csvpath):
#Obtenez composé
mols = Chem.SDMolSupplier(sdfpath)
#Préparation du calcul du descripteur RDKit
descLists = [desc_name[0] for desc_name in Descriptors._descList]
desc_calc = MoleculeDescriptors.MolecularDescriptorCalculator(descLists)
#Donner un identifiant avec numéro de série
sampleids = list()
#Nom du composé, etc.
values_base = list()
#Paramètres externes(Statut actuel:Fixe 5 pièces)
values_ex = list()
#Obtenez la valeur de chaque composé
for i, mol in enumerate(mols, 1):
sampleids.append(i)
names_base, values = get_basevalues(i, mol)
values_base.append(values)
names_ex, values = get_exvalues(i, mol)
values_ex.append(values)
#Calculer le descripteur RDKit
values_rdkit = [desc_calc.CalcDescriptors(mol) for mol in mols]
#Convertir en DataFrame
df_base = pd.DataFrame(values_base, columns=names_base, index=sampleids)
df_ex = pd.DataFrame(values_ex, columns=names_ex, index=sampleids)
df_rdkit = pd.DataFrame(values_rdkit, columns=descLists, index=sampleids)
#Combinez tout
df = pd.concat([df_base, df_ex, df_rdkit], axis=1)
#Imprimer pour confirmation()
print(df)
#Sortie au format CSV
df.to_csv(csvpath, index=False)
def main():
sdfpath = 'solubility.test.sdf'
csvpath = 'solubility.test.csv'
ExportCSVFromSDF(sdfpath, csvpath)
if __name__ == '__main__':
main()
SampleID | SampleName | Structure | Atoms | Bonds | ID | NAME | SOL | SMILES | SOL_classification | MaxEStateIndex | MinEStateIndex |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 3-methylpentane | 6 | 5 | 5 | 3-methylpentane | -3.68 | CCC(C)CC | (A) low | 2.2777777777777777 | 0.9351851851851851 | |
2 | 2,4-dimethylpentane | 7 | 6 | 10 | 2,4-dimethylpentane | -4.26 | CC(C)CC(C)C | (A) low | 2.263888888888889 | 0.8749999999999998 | |
3 | ... | ||||||||||
4 |
Ouaip. Pandas, je me suis peut-être un peu amélioré. Je vais donc l'élargir de diverses manières à partir de maintenant. peut être. .. ..
Recommended Posts