Pythonでのデータサイエンス分野で人気のStreamlit
htmlやJavaScriptの知識がなくても、簡単にWEBページが作れるので、チーム内で共有するようなWEBシステムを簡単に作れて非常に便利です。
今回は正直あまり使いどころが分からなかった、st.codeについて解説したいと思います。
st.codeは構文を強調(シンタックスハイライト)表示する構文でソースコードをWeb上に表示させるときに便利です。私の場合は以下の場面でst.codeを書いていて非常に便利だと感じました。
- Pythonのちょっとしたソースコードを掲載する。
- 出力先などのパス情報を出力する。
- 実行したSQL文を可視化する。
st.codeの基本形
st.codeの基本構文は以下の通りです。
(構文) st.code(body、language = "python")
パラメータ | 説明 |
---|---|
body(str) | コードとして表示させたい文字列 |
language(str) | 表示させたい文字列の言語 |
Pythonのちょっとしたソースコードを掲載する
Streamlitの公式ページにも紹介されている本来の使い方です。
Streamlitの実行方法やimport方法などが分からない場合は、以下の記事を参考にしていただければと思います。
import streamlit as st
code = '''def hello():
print("Hello, Streamlit!")'''
st.code(code, language='python')
上記ソースコードを記述してターミナルでstreamlit run main.pyを実行します。
streamlit run main.py
Python言語用にシンタックスハイライト表示されたコードが表示されます。
また右には1クリックでソースコードをコピーするボタンも設置されます。
自分が作成したソースコードを共有したい時などに便利ですね!
出力先などのパス情報を出力する
私は、streamlitの実行環境をローカルではなく、分析元のデータベースやシステムが動いているサーバ上で動かしています。
※この方がpythonでデータ分析などの処理を実行したときに、同じサーバ内のデータベースをもとに処理が流れるので、処理自体が早い。
その際に、サーバで実行した分析処理の結果をサーバーの所定の共有フォルダにExcel出力などすることがよくあります。こんなときにサーバーの出力先をst.codeで表示させると簡単にパスをコピーして出力先までたどり着けるのですごく便利です。
import streamlit as st
import os
#出力先のフルパス
outputpath = r'\\localhost\output\output.xlsx'
st.write('出力先フォルダ')
st.code(os.path.dirname(outputpath))
st.write('ファイル名')
st.code(os.path.basename(outputpath))
フォルダ情報はosライブラリでos.path.dirname(outputpath)で取得できます。
ファイル名だけ取得したい場合はos.path.basename(outputpath)で取得できます。
実行したSQL文を可視化
Pythonのプログラム内で実行したSQL文を出力したり表示させたいときもst.codeを使うと、簡単に可視化することができます。
import streamlit as st
import pandas as pd
import pyodbc as pdb
#DBへ接続
con = "DRIVER={SQL Server};SERVER=" + instance + ";uid=" + user + ";pwd=" + pasword + ";DATABASE=" + db
pdb.connect(con)
#SQL文
sql = '''
SELECT * FROM USERS WHERE NO = 1
'''
#pandasでSQLを実行
df = pd.read_sql(sql,con)
#sqlを可視化
st.code(sql,'sql')
このときにst.codeの第2引数の言語を‘sql’にする必要があります。
Pythonの処理内で実行したSQLをst.codeで簡単に可視化することができます。
まとめ
意外と使えるst.codeをまとめると
- st.codeで、シンタックスハイライト表示ができる
- 出力先パスを表示したい時などにst.codeを使うと便利
- st.codeの第2引数の言語を’sql’にするとSQLのシンタックスハイライト表示ができる。
コメント