以下のサイトを参考に、Streamlitを使って、webアプリ?をつくってみました。
Python: Streamlit を使って手早く WebUI 付きのプロトタイプを作る - CUBE SUGAR CONTAINER
コードはpycharmで入力して、pycharm上で実行をする。(正確な表現かどうかは、わからない。)
1.’Hello World!’と表示させる
import streamlit as st
def main():
st.write('Hello, World!')
if __name__ == '__main__':
main()
2.基本的な書式を片っ端から表示してみる
import streamlit as st
def main():
# タイトル
st.title('Application title')
# ヘッダ
st.header('Header')
# 普通のテキスト
st.text('Something')
# サブレベルヘッダ
st.subheader('Sub header')
# マークダウンテキスト
st.markdown('**Markdown is a vailable **')
# LaTeXテキスト
st.latex(r'\bar{X} = \frac{1}{N} \sum_{n=1}^{N} x_i')
# コードスニベット
st.code('print(\'Hello, World!\')')
# エラーメッセージ
st.error('Error message')
# 警告メッセージ
# 情報メッセージ
# 成功メッセージ
# 例外の出力
# 辞書の出力
st.warning('Warning message')
# 情報メッセージ
st.info('Information message')
# 成功メッセージ
st.success('Success message')
# 例外の出力
st.exception(Exception('Oops!'))
d = {
'foo': 'bar',
'user': [
'alice',
'bob',
],
}
st.json(d)
if __name__ == '__main__':
main()
3.カウントダウンを表示
import time
import streamlit as st
def main():
status_area = st.empty()
count_down_sec = 5
for i in range(count_down_sec):
status_area.write(f'{count_down_sec - i} sec left')
time.sleep(1)
status_area.write('Happy Birthday!')
st.balloons()
if __name__ == '__main__':
main()
内容:5秒からカウントダウンとをして、カウントダウンが終わったら、’Happy Birthday!’が表示され、風船が沸き上がる。(沸き上がる?w)
技術:
status_area = st.empty()
count_down_sec = 5
for i in range(count_down_sec):
status_area.write(f'{count_down_sec - i} sec left')
time.sleep(1)
余白をstatus_areaという変数に入れる。
5秒から1秒ずつ数字を減らした数字をfor文で書く
用途:
誕生日のお祝い、新年の変わり目
4.Progressバーを表示する
import time
import streamlit as st
def main():
status_text = st.empty()
progress_bar = st.progress(0)
for i in range(100):
status_text.text(f'Progress: {i}%')
progress_bar.progress(i + 1)
time.sleep(0.1)
status_text.text('Done')
st.balloons()
if __name__ == '__main__':
main()
内容:ダウンロード中みたいなバーを表示する
技術:streamlitのprogress()メソッドの活用
活用:ダウンロード中の表示
5.動的なグラフを表示
import time
import streamlit as st
import numpy as np
def main():
x = np.random.random(size=(10, 2))
line_chart = st.line_chart(x)
for i in range(10):
additional_data = np.random.random(size=(5,2))
line_chart.add_rows(additional_data)
time.sleep(0.5)
if __name__ == '__main__':
main()
内容:0.5秒間隔で折れ線グラフが動的に表示される(表示されるデータの値はランダムなので、実行するたびに毎回違うグラフが表示される)
技術:
additional_data = np.random.random(size=(5,2))
nampyのランダムモジュールを使って、乱数を生成する。
6.地図の表示
import streamlit as st
import pandas as pd
import numpy as np
def main():
data = {
'lat': np.random.randn(100) / 100 + 34.41,
'lon': np.random.randn(100) / 100 + 135.31,
}
map_data = pd.DataFrame(data)
st.map(map_data)
if __name__ == '__main__':
main()
内容:大阪近郊のどこかがランダムに地図上に表示される
技術:streamlitのmap()メソッド
活用:
笑ってこらえてのダーツの旅?(ダーツ投げてないけど)
7.ボタンを設置する
import streamlit as st
def main():
if st.button('Top button'):
st.write('Clicked')
else:
st.write('Not Clicked')
if st.button('Bottom buttom'):
st.write('Clicked')
else:
st.write('Not Clicked')
if __name__ == '__main__':
main()
内容:ボタンを2つ配置して、直近で押されたボタンに「クリックされた」、もう一方に「クリックされていない」という表示がされる
技術:streamlitのbutton()メソッドを使う、if/elseを使う
活用:
入力フォーマットのsubmitボタンが押されていない時に、エラーメッセージを出すようにする
8.ラジオボタンを設置する
import streamlit as st
def main():
selected_item = st.radio('Which do you like?',
{'dog', 'cat'})
if selected_item == 'dog':
dog_img = 'dog.jpg'
st.image(dog_img)
else:
cat_img = 'cat.jpg'
st.image(cat_img)
if __name__ == '__main__':
main()
内容:「犬と猫のどちらが好きか」という二者択一の質問を表示させ、選択しを表示、選択したほうの画像が表示されるようになる
技術:streamlitのradio()メソッド
活用:
選択式のアンケートフォーム
9.Data/Timeインプット
from datetime import date
import streamlit as st
def main():
birthday = st.date_input(
'When is your birthday?',
min_value = date(1900, 1, 1),
max_value = date.today(),
value = date(2000, 1, 1),
)
st.write('Birthday:', birthday)
if __name__ == '__main__':
main()
内容:入力した日付を誕生日として表示
技術:streamlit,dateライブラリとのコラボ
活用:
(もう少し付け加えれば、)入力した日付の曜日が表示される
10.フロー制御
import streamlit as st
def main():
name = st.text_input(label='yuor name:')
if len(name) < 1:
st.warning('Please input your name')
st.stop
st.write('Hello,', name, '!')
if __name__ == '__main__':
main()
内容:なにも入力されていなかったら、エラーメッセージを表示する
技術:streamlitのwarning()メソッド
活用:
アンケートフォームで回答必須な項目が、未入力の場合エラーを表示させる