Streamlitは、データ可視化のウェブアプリを簡単に作成・共有するためのオープンソースのPythonライブラリです。
Snowflake上にも作成することができるため、Snowflakeのデータを可視化するために今後利用が増えていくことが考えられます。※詳しくは、Streamlit in Snowflakeドキュメントを参照して下さい。
そこで今回、Streamlitの利便性を示すために、薬学専攻の筆者が自分で使用してみたいと考える化合物データやタンパク質構造の可視化ツールを作成しました。
注:Snowflakeは使用していません。以下紹介する内容Snowflakeでそのまま実装できるわけではありません。
以下の必要なPythonパッケージをインストールしましょう。
以下、作成したコードです。適当なファイル名(○○.py)で保存しましょう。
import streamlit as st
from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem import Draw
import pubchempy as pcp
import pandas as pd
from stmol import showmol
import py3Dmol
st.subheader("**Input compound's name or PDB ID.**")# ラジオボタン
select = st.radio("Compound's name or PDB ID ?", ["Compound's name", "PDB ID"])
# 入力フォーム
with st.form('my_form'):
input = st.text_input('Input ' + select + '.')
submitted = st.form_submit_button('Submit')
# 化合物(3次元)を取得するための関数
def get_optimized_3Dmol(cmp_name: str):
raw_sdf = pcp.get_sdf(cmp_name, 'name')
mol = Chem.MolFromMolBlock(raw_sdf)
Chem.AddHs(mol, addCoords=True)
AllChem.EmbedMolecule(mol, AllChem.ETKDG())
AllChem.MMFFOptimizeMoleculeConfs(mol)
Draw.MolsToGridImage([mol])
target_sdf = Chem.MolToMolBlock(mol)
view = py3Dmol.view(data=target_sdf)
view.setStyle({'stick': {}})
return view
# submitボタンによる処理
if submitted:
try:
if select == "Compound's name":
properties = ['iupacname', 'molecularformula', 'molecularweight', 'XLogP', 'exactmass', 'TPSA', 'IsomericSMILES']
# 化合物データの取得
df = pcp.get_properties(properties, input, 'name', as_dataframe=True)
# 化合物(2次元)の描出
cmp_smiles = Chem.MolFromSmiles(df['IsomericSMILES'].values[0])
img = Draw.MolsToGridImage([cmp_smiles])
st.image(img)
# 化合物データ表の表示
st.write(df[['IUPACName', 'MolecularFormula', 'MolecularWeight','ExactMass' , 'XLogP', 'TPSA']])
# 化合物(3次元)の描出
view = get_optimized_3Dmol(input)
showmol(view, height=500, width=800)
# タンパク質構造の描出
elif select == "PDB ID":
view = py3Dmol.view(query='pdb:' + input)
view.setStyle({'cartoon':{'color':'spectrum'}})
showmol(view, height=500,width=800)
except:
st.write("Invalid input.")
finally:
submitted = False
else:
st.write("Input and submit.")
streamlit run ○○.pyをCLIで実行すると以下の画面がブラウザに表示されます。
このように、可視化したいデータを選んでアプリにできます!
特筆すべき制約として以下があります。
その他の制約も含めて詳細が制限とサポートされていない機能に記載されています。