import streamlit as st import pandas as pd import datetime import create_object as co import duckdb df = pd.read_csv("data/online_retail.csv") # データ型整備:ID項目のSTRING化など df = df.astype({'CustomerID': 'object'}) df = df[df["UnitPrice"] * df["Quantity"] > 0] country_list = df["Country"].unique() st.set_page_config( page_title="購買データ分析App", layout="wide", ) def main(): st.title("購買データ分析App") with st.sidebar.form(key="my_form"): analysis_menu = st.selectbox("分析メニュー", co.analysis_menu_list) country = st.multiselect("国を選択してください。", country_list) if len(country) != 0: country = "','".join(country) country = f"Country in ('{country}')" else: country = "True" st.write("2010年の日付を入れてください。") start_date = st.date_input("開始日", datetime.date(2010, 1, 1)) end_date = st.date_input("終了日", datetime.date(2010, 12, 31)) submit_button = st.form_submit_button(label = "分析開始") if submit_button: # 処理を実行 sql = co.create_sql(analysis_menu, country, start_date, end_date) df_output = duckdb.query(sql).to_df() try: fig = co.create_graph(analysis_menu, df_output) st.plotly_chart(fig) except: print("グラフ無し") st.table(df_output.head(100)) st.write("上位100行まで、全体を見たい場合はCSVでダウンロードしてください。") st.download_button( "Press to Download", df_output.to_csv(index=False).encode('utf-8'), "file.csv", "text/csv", key='download-csv' ) if __name__ == '__main__': main()