Manipulação de moléculas com RDKit em Python para modelos de IA
Na era da inteligência artificial (IA) aplicada à química, uma das principais dificuldades está na manipulação e padronização de dados moleculares. A biblioteca RDKit é uma poderosa ferramenta para lidar com essas tarefas. Neste artigo, vamos explorar como utilizar o RDKit para realizar as etapas iniciais de manipulação de dados químicos, preparando-os para o treinamento de modelos de IA. Abordaremos desde a visualização de moléculas até a remoção de moléculas quimicamente inválidas, passando pela padronização de representações SMILES.
Visualização de Moléculas
A visualização de estruturas químicas é uma etapa fundamental no entendimento dos dados. O RDKit oferece funções para converter strings SMILES em representações moleculares que podem ser facilmente visualizadas. Vamos começar criando um DataFrame com algumas moléculas simples e seus respectivos pesos moleculares.
import pandas as pd
from rdkit import Chem
from rdkit.Chem import Draw
df = pd.DataFrame(
data={
'smiles':[
'CC(=O)OC(CC(=O)[O-])C[N+](C)(C)C',
'CC(=O)OC(CC(=O)O)C[N+](C)(C)C',
'CC(CN)O',
'C1=CC(=C(C=C1[N+](=O)[O-])[N+](=O)[O-])Cl',
'CCN1C=NC2=C(N=CN=C21)N',
'CCC(C)(C(C(=O)O)O)O',
'C(CCl)Cl',
'C1=CC(=C(C=C1Cl)Cl)Cl',
'C1CCC(=O)NCCCCCC(=O)NCC1',
'C1C=CC(=NC1C(=O)O)C(=O)O',
'C(C)(C)(C)(C)C' # Molécula inválida
],
'mw':[
203.24, 204.24, 75.11, 202.55, 163.18, 148.16, 98.96, 181.4,
226.32, 169.13, 100.00
]
}
)
df
Para visualizar essas moléculas, utilizamos o método MolsToGridImage da biblioteca Draw do RDKit. Cada molécula é convertida a partir de sua string SMILES e disposta em uma grade.
Draw.MolsToGridImage(
[Chem.MolFromSmiles(mol) for mol in df['smiles']],
molsPerRow=5,
legends=[smiles for smiles in df['smiles']],
subImgSize=(200,200)
)
Observe que a molécula de índice 10
não foi exibida, pois sua estrutura apresenta uma inconsistência. Na representação SMILES fornecida, o átomo de carbono tenta formar cinco ligações, o que viola a regra de valência do carbono, que permite apenas quatro pares de elétrons.
Tratamento de Moléculas Quimicamente Inválidas
Um problema comum ao trabalhar com dados moleculares é a presença de estruturas quimicamente impossíveis. O RDKit permite verificar a validade de uma molécula convertendo-a a partir de seu SMILES. Se a conversão falhar, a molécula é considerada inválida. Para filtrar essas moléculas, podemos aplicar a função Chem.MolFromSmiles e descartar os valores None.
def rdkit_mol(smile: str):
return Chem.MolFromSmiles(smile)
df['mol'] = df['smiles'].apply(rdkit_mol)
df.dropna(ignore_index=True, inplace=True)
Aqui, utilizamos a função dropna para remover moléculas inválidas. Dessa forma, garantimos que o conjunto de dados utilizado para o treinamento de modelos de IA contenha apenas moléculas válidas.
Manipulação de Hidrogênios
Adicionar e remover hidrogênios explicitamente é uma funcionalidade útil em diversas etapas da manipulação molecular. O RDKit fornece as funções AddHs e RemoveHs para esse propósito, o que pode ser útil para simulações e cálculos de propriedades moleculares.
mol_h = Chem.AddHs(df['mol'].iloc[0])
mol_nh = Chem.RemoveHs(mol_h)
Padronização de SMILES
Em grandes conjuntos de dados, é comum encontrar a mesma molécula representada de diferentes formas. A padronização de SMILES canônicos é essencial para evitar duplicações que podem enviesar a modelagem. O RDKit permite converter uma string SMILES em sua representação canônica:
smiles = pd.DataFrame(
{'smiles': ['c1ccccc1', 'C1=CC=CC=C1', 'c1ccc(cc1)']}
)
def canonical_smiles(smiles: str):
mol = Chem.MolFromSmiles(smiles)
return Chem.MolToSmiles(mol, canonical=True)
smiles['canonical'] = smiles['smiles'].apply(canonical_smiles)
smiles = smiles.drop_duplicates(subset=['canonical'])
Esse processo elimina duplicatas e garante que apenas uma única forma canônica de cada molécula seja utilizada. Isso é particularmente útil em etapas de pré-processamento para modelos de machine learning, onde consistência nos dados é crucial.
Conclusão
O RDKit é uma ferramenta indispensável para manipulação e padronização de dados químicos, especialmente para a preparação de conjuntos de dados para treinamento de modelos de inteligência artificial. Desde a visualização até a eliminação de moléculas inválidas e a padronização de SMILES, essa biblioteca facilita significativamente o trabalho dos cientistas de dados e químicos computacionais. Ao padronizar e garantir a qualidade dos dados, aumentamos a confiabilidade dos modelos preditivos, tornando-os mais robustos e eficientes.
O Notebook completo pode ser acessado em meu repositório GitHub.