Pythonで作ったPGをStreamlitでWEB化

スポンサーリンク

保守対応などで同じような作業や問い合わせを受けていることがありませんか?
私は結構あります。最初は、粛々と作業していたのですがシステムに携わるものとしてこれではだめだと思いました。

そこで考えたのが、同じような作業や問い合わせをある程度自動化できないかと。
よくやっている作業として、月次のレスポンス資料などを分析してExcelに出力する作業。
問い合わせも忘れたころに来て、いつも同じようなSQLを実行して同じような回答をしていることが多い。

分析、Excel出力という作業の自動化を考えた時に、真っ先に挙がってくるのは・・・

そう Pythonですよね!

そして、少人数のチーム内で共有したくて、さくっと作れる方法を検索したところStreamlitというフレームワークを見つけました。

今回は、私が、pythonとStreamlitで共有ツールを作った時について書こうと思います。

自動化したい作業内容

  • 日別で取得しているバッチのレスポンスデータを分析してExcel出力する。
  • よくある問い合わせで実行するSQLを条件指定して実行できる検索画面が欲しい。
  • よく実行するSQLをボタン一つでExcelに出力したい。

どうやって自動化するか?

分析、Excel出力、自動化を条件にGoogleなどで調べて真っ先にヒットしたのはpythonでした。まあ、調べるもなくpythonだろうなとは思っていましたが案の定Pythonでした。

自動化

最初は、共有まで考えていなかったのでJupyterLabでPGを作りました。
JupyterLabは、データサイエンス分野では有名で、つくりながら表やグラフが簡単に奉持できるので非常に便利です。

また、pythonには、pandas/openpyxlなどデータ分析をExcel出力に強いライブラリが公開されています。

Jupyterでpandasやopenpyxlを簡単に利用できてそのまま実行できるので、そんなに難しくなくある程度の自動化ができました。

自動化後

自動化することによって、データ分析などがすごく楽になったのですが、自己満足感が半端ない!理由として

  • 自分が使用している端末にしかpythonが入っていない。
  • 自分しかJupyterを使用していない。
  • 他の人がデータを出力することができない。

そこで考えたのが他の担当者も作業ができるようにGUIを作るということです。

方法1:TkinterでGUI化する。

Jupyterで作ったPGをTkinterに実装しなおしました。基本的には,TkinterでGuiでボタンを作って作ったPGを割り当てるだけなので簡単でした。

GUI化には成功し、動作も問題なかったのですが肝心なことを考えていませんでした。
それは、私の環境以外Pythonが入っていないという事実

ググったところpythonをExe化すれば共有できることが判明。

どうやらpyinstallerでexe化ができるらしい。

exe化はちょっとはまりましたが何とかexe化できて実行してみたところ

起動が遅い・・・・

どうやらexeにすべてのライブラリなどを入れ込んでおり、
exeをクリックすると最初に同梱されているライブラリなどをすべて読み込んでいるみたいです。
exeファイルも50MBぐらいありました。
使えなくはないが不便。しかも、PGを修正するたびにpyinstallerで作り直して配布する必要があるのでちょっと厳しい。別の方法を考えます。個人で使うには早いし、いいのですが・・・・。

方法2:WEBシステムを構築する。

方法1がだめなら、WEBシステムを構築するしかない。幸い24時間稼働している検証サーバがあるのでそこに突っ込めばよいかと思い、WEBシステムについて調べてみました。

pythonのWEB開発で調べると、フレームワークががあるみたいですがどれも難しそうです。

  • Django(機能が豊富なフレームワーク)
  • Flask(軽量だが結構高機能)
  • Bottle(最軽量)

上記フレームワークはあくまで、バックエンドフレームワークフロントエンドhtmlやjsで書く必要があります。今までやってこなかった私が悪いのですが、htmlの勉強もしなければいけないと思い、すぐにはできないかと思っていました。

そこで見つけたのが、Streamlitです。
Streamlitの特徴として、

  • htmlを記述する必要がない。
  • pythonのライブラリとしてインストールすればすぐ使えて、pythonだけでフロントエンドも完結する。
  • pythonだけでかけるのでさくっと作れる。

streamlitのコンセプトは、さくっと作れて、プレゼンなどで分析したデータを共有させることに特化した機械学習向けのWEBフレームワークです。簡単な使い方は、以下の記事にも紹介しています。

Pythonの人気フレームワークStreamlitを使ってみた
PythonでStreamlitというフレームワークが結構人気で使い方などの動画が公開されていました。気になったので少し触ってみたところ、すごく使いやすくてまさにPythonの勉強には、最適だと思いました。pythonで作ったプログラムを簡単に見栄えよく、WEB上に表示ができるのですごくお勧めです。
Streamlitでdataframeを表示させる
StreamlitでpandasのDataframeの結果を表形式で表示する方法は簡単なのですが色々な表示方法があったので備忘録として残しておきます。表を表示させる方法はst.dataframeで表示する方法とst.tabelで表示する方法があります。
【Streamlit】ExcelデータをPandasで読み込んで表示させる
別の記事でも、Streamlitの良さについて記事にしましたが、今回はExcelの表データを Streamlitの画面に表示させる方法について書こうと思います。pandasのread_excelを使うと簡単に表示させることができます。また、ウィジットも色々な機能があるのでよく使うものから使いようによっては便利なものを一部紹介したいと思います。

使ってみた感想として

  • 数人規模の社内共有としては、最適
  • スライダーやアップローダーなどのウィジットも使える。
  • ボタンやテキストインプットなどは、結構おしゃれ
  • データフレームの内容を簡単にテーブルやグラフ形式で表示できる。
  • htmlを別ファイルとして書く必要がないので本当に簡単
  • 大規模なシステムには向いていない。
  • Web表示のデザインのカスタマイズはできず、デザインの拡張性はない。

まとめ感想

  • 数人規模や社内共有用に爆速でWebアプリを作るのならStreamlitはかなり良い。
  • やっぱり、中~大規模なシステムではDjangoやFlaskで構築する必要あり
  • WEB開発を本格的にするなら逃げずに、html,javascriptをやるべき

個人的にはstreamlitでpythonを勉強しつつ、streamlit(フロントエンド) + FastAPI(バックエンド)の構成で何か小さなシステムが作りたいと思う今日この頃です。

コメント

タイトルとURLをコピーしました