出典:

↓公式:APIリファレンス

 

 

 

 

参考書籍:

https://www.amazon.co.jp/PythonとStreamlit-でデータ分析をWebアプリ化-データサイエンティストのためのWebアプリ入門-あかば-ebook/dp/B093QGDDXJ/ref=tmm_other_meta_binding_title_sr?_encoding=UTF8&qid=&sr=

 

出典動画:

HTML、CSSを用いないので、細かい画面設計はできないが、ふつうにVSCodeでの開発画面と同様の動作をWEBで見かけ実行できる。

画面に凝る必要がなければFlaskよりも簡単である。

↓ということで、stremalitとSQLiteの使用例のある出典:

 

 

■以下、コード解説のコピペ

 

手順1:Streamlitのインストールとセットアップ
 pip install streamlit

手順2: 使用ライブラリ宣言


import streamlit as st 
import pandas as pd 
import sqlite3 
from datetime import datetime, timedelta

手順3:データベースセットアップ
SQLiteを使用、データベースとテーブル作成、データベース接続確立

# SQLiteに接続する
conn = sqlite3.connect('sleep_data.db')

# テーブルを作成する conn.execute('''
 CREATE TABLE IF NOT EXISTS sleep_data ( 
   id INTEGER PRIMARY KEY, 
   date TEXT NOT NULL, 
   sleep_time TEXT NOT NULL, 
   wake_time TEXT NOT NULL5。 

''')

手順4:Streamlitアプリの作成
Streamlitで睡眠時間記録とデータの可視化を行うアプリを作成


# ユーザーからの入力を受け付ける 
st.header('睡眠時間の記録') 
date = st.date_input('日付を選択してください') 
sleep_time = st.time_input('就寝時間を選択してください') 
wake_time = st.time_input('起床時間を選択してください')

# 入力されたデータをSQLiteに保存する・・・押されたバタンで分岐する
if st.button('保存'): 
   date_str = date.strftime('%Y-%m-%d')
   sleep_time_str = sleep_time.strftime('%H:%M:%S')
   wake_time_str = wake_time.strftime('%H:%M:%S') 
   conn.execute(f''' 
     INSERT INTO sleep_data (date, sleep_time, wake_time)  
     VALUES ('{date_str}', '{sleep_time_str}', '{wake_time_str}')
 ''') 
conn.commit()

# データのリセットボタンを表示
if st.button('データのリセット'): 
   # 確認メッセージを表示する 
   if st.warning('本当にデータをリセットしますか?この操作は取り消せません。'): 
      # テーブルを削除して再作成する 
      conn.execute('DROP TABLE IF EXISTS sleep_data') 
      conn.execute(''' 
          CREATE TABLE sleep_data ( 
              id INTEGER PRIMARY KEY,
              date TEXT NOT NULL, 
              sleep_time TEXT NOT NULL, 
              wake_time TEXT NOT NULL 
           )
       ''') 
       conn.commit() 
       st.success('データをリセットしました。ページをリロードしてください。')

# 一か月ごとの睡眠時間の統計情報を取得する 
end_date = datetime.today().date()
start_date = end_date - timedelta(days=30)
df = pd.read_sql_query(f''' 
    SELECT date, sleep_time, wake_time,
           strftime('%s', wake_time) - strftime('%s', sleep_time) AS sleep_duration 
    FROM sleep_data 
    WHERE date BETWEEN '{start_date}' AND '{end_date}'
''', conn)

# 統計情報表示
if not df.empty: 
    st.header('過去1か月間の睡眠時間の統計情報') 
    st.write(df) 
    avg_duration = df['sleep_duration'].mean() / 3600 
    st.write(f'平均睡眠時間: {avg_duration:.1f} 時間') 
    if avg_duration < 7: st.warning('平均睡眠時間が短いです。改善のためには睡眠時間を延ばすように心がけましょう。') elif avg_duration > 9: 
        st.warning('平均睡眠時間が長いです。改善のためには早寝早起きを心がけましょう。')

手順5:グラフの描画
Streamlitで提供の可視化ツール**st.line_chart**関数を使用すると、可視化ライブラリを使用せずにグラフ描画可能

# 睡眠時間推移折れ線グラフ表示
df['date'] = pd.to_datetime(df['date']) # 日付をdatetime型に変換
df = df.set_index('date') # 日付をインデックスに設定
st.line_chart(df['sleep_duration'] / 3600) 


手順6:以上コーディングされたタアプリをターミナルから実行
streamlit run sleep_app.py