Skip to content

Instantly share code, notes, and snippets.

@JustinChavez
Last active November 25, 2022 06:54
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save JustinChavez/c7412df40fe93abf58192da204df4019 to your computer and use it in GitHub Desktop.
Save JustinChavez/c7412df40fe93abf58192da204df4019 to your computer and use it in GitHub Desktop.
Streamlit Demo: Filter by Molecular Weight
"""
Docker Container: https://hub.docker.com/r/continuumio/anaconda3
RDKit Installation: https://www.rdkit.org/docs/Install.html
"""
import mols2grid
import pandas as pd
import streamlit as st
import streamlit.components.v1 as components
from rdkit import Chem
from rdkit.Chem.Descriptors import ExactMolWt
st.title("Filter FDA Approved Drugs by Molecular Weight with Streamlit")
@st.cache(allow_output_mutation=True)
def download_dataset():
"""Loads once then cached for subsequent runs"""
df = pd.read_csv(
"https://www.cureffi.org/wp-content/uploads/2013/10/drugs.txt", sep="\t"
).dropna()
return df
def calc_mw(smiles_string):
"""Given a smiles string (ex. C1CCCCC1), calculate and return the molecular weight"""
mol = Chem.MolFromSmiles(smiles_string)
return ExactMolWt(mol)
# Copy the dataset so any changes are not applied to the original cached version
df = download_dataset().copy()
df["mol_weight"] = df.apply(lambda x: calc_mw(x["smiles"]), axis=1)
weight_cutoff = st.slider(
label="Show compounds that weigh below:",
min_value=0,
max_value=500,
value=150,
step=10,
)
df_result = df[df["mol_weight"] < weight_cutoff]
st.write(df_result)
raw_html = mols2grid.display(df_result, mapping={"smiles": "SMILES"})._repr_html_()
components.html(raw_html, width=900, height=900, scrolling=True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment