Auparavant, j'ai étudié comment calculer le descripteur pour chaque molécule avec mordred en Calculant 1 molécule et 1 descripteur avec mordred. Cela permet de ne calculer que les descripteurs que vous souhaitez utiliser.
Cependant, si cette méthode est utilisée pour calculer uniquement un descripteur spécifique lorsqu'il y a un grand nombre de molécules, elle est incommode dans les points suivants.
Le calcul est lent sans parallélisation. La méthode pandas de la classe Calculator effectue un joli calcul parallèle lorsque vous spécifiez le nombre de cœurs de processeur.
Comme le résultat du calcul ne peut pas être obtenu au format DataFrame, cela demande un effort supplémentaire.
Cette fois-ci, lorsqu'il y a un grand nombre de molécules, j'ai étudié comment calculer le descripteur en spécifiant uniquement le descripteur que vous souhaitez utiliser et en utilisant la méthode pandas de la classe Calculator.
Tu peux aller comme ça.
from mordred import Calculator, descriptors
calc_dummy = Calculator(descriptors, ignore_3D=False)
my_desc_names = ["SpAD_A", "SRW10"]
my_descs = []
for i, desc in enumerate(calc_dummy.descriptors):
if desc.__str__() in my_desc_names:
my_descs.append(desc)
calc_real = Calculator(my_descs, ignore_3D=False)
df = calc_real.pandas(mols, nproc=3)
df.to_csv(args.output + "/mordred.csv")
Si vous lisez attentivement la source de la classe Calculator, vous pouvez spécifier une liste d'instances de la classe Descriptor au lieu de descripteurs dans l'argument du constructeur.
En utilisant cela, prenez l'instance à partir du nom du descripteur que vous souhaitez calculer (répertorié dans my_desc_names) et mettez-la dans la liste.
La raison pour laquelle calc_dummy crée un objet Calculator factice est d'obtenir une liste d'instances de descripteur. (Il doit y avoir un moyen plus élégant, alors essayez de pirater la source).
Ensuite, créez un objet Calculator en donnant une liste d'instances de descripteur comme arguments au constructeur de la classe Calculator.
Enfin, lorsque le calcul est effectué par cet objet Calculator, un DataFrame dans lequel le résultat du calcul du seul descripteur spécifié est stocké est obtenu.
Ce savoir-faire est très utile lorsque l'on ne fait des prédictions qu'après avoir créé un modèle de prédiction. En effet, si vous souhaitez uniquement effectuer des prédictions, il vous suffit de calculer les descripteurs utilisés dans le modèle de prédiction. Surtout lors du calcul d'une liste de composés tels que des dizaines de milliers ou des centaines de milliers, nous pensons qu'il y aura une grande différence dans le temps de traitement.
Recommended Posts