みなさんこんにちは。お元気でしょうか。私はなんとか風邪にもならず過ごしております。寒くて朝起きれなくなってきたIwatobipenです。 今年はネタもない+なぜかいろいろ忙しくて参加しないつもりでしたが、少しでもコミュニティーに貢献しようと思いまして、小ネタを提供することにしました。創薬感はゼロですがご容赦ください。 皆さんStremlitはご存知でしょうか。Qiitaなどにも記事がありますが、PythonだけでイケてるUIもコミコミのデータ解析Appを作れてしまうパッケージです。 機械学習と組み合わせるのであればモデルを作っておいて予測アプリをこれで提供するなどが簡単にできます。ちょっと前にこのStreamlitとRDKITを組み合わせたアプリに関する記事をポストしました。https://iwatobipen.wordpress.com/2020/12/11/make-interactive-web-app-with-streamlit-and-rdkit-rdkit-streamlit/ その後いろいろドキュメントを見ているとStreamlit はWeb上にデプロイできるようです。share する場合はしたのページからGithubと連携させる必要があります。https://www.streamlit.io/sharing 手順はこちらに書いてあります。https://docs.streamlit.io/en/stable/deploy_streamlit_app.html サンプルのコードはこちらに置いてあります。コードの話は前の記事に書いてあるのですが変更点が二点あります。Shareするようにした場合、Streamlitから提供されるVMに環境がデプロイされます。requirements.txtに通常のパッケージ以外にPipで入れる必要があるパッケージを記載します。 そのあとしばらく悩んだんですけどRequrementsにCondaのPackage書いても入りません。私の大好きなRDKitはここに書いても入らないんです。その後解決策がわかりました!下のようにconda.txtにパッケージ名を書きます。チャンネルを指定したい場合はconda_channels.txtに指定しておきます。 ↓ rdkit だけですと、VM上でインストールできなかったためconda.txtはGCCも入れています。 ここまでお膳立てしておくとWeb上でStreamlitAppが配布できるようになりユーザー側に環境整備の必要がなくなります。 実際の成果物がこちら https://share.streamlit.io/iwatobipen/chem_streamlit/main/chemstreamlit/app.py アクセスすると、プルダウンで化合物インデックスを選ぶようになっていて選ぶと該当する分子の溶解度予測の結果と構造が描画されるようになっています。 App.pyはGithubを見ていただければだいたいわかると思いますがこんな感じ。ファイルのPathなどがVMの中で見えるようにするために変えてあります。 分子のイメージは中間ファイルを出さないようにByteioオブジェクトを使って渡す仕様にしました。今回は例示していませんが同じテクニックを使ってMatplotlibの図とかも埋め込めたりします。StreamlitはwriteでMatplotlibのFigを受け取れるのでこみいったことはしないでもいけるはずですが。他の場合に使えるかもですw。 Google colabなどRDKIT入れるのちょっと面倒だったりするので、アプリを作ってShareする場合、Streamlit使うとユーザー側は環境を構築しないでテストできるので良いですね。と思いました。 公式ドキュメントにはCondaパッケージ使えるとは書いてあるけどどうやって指定するかは書いていなくて困っていたんですが、Stremlitのコミュニティーに聞いたら一瞬で解決しました。感謝感謝です。 オープンソースのパッケージ+アクティブなコミュニティーはデータサイエンスにとって貴重ですね。 ライトな話題ではありましたが何かしらの参考になれば幸いです。 おしまい。