質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Streamlit

Streamlitは、Pythonでフロントエンドアプリケーションを構築できるフレームワーク。HTML/CSSの知識が不要で、描画ライブラリで作成したグラフを埋め込むことが可能です。機械学習のレポート作成やデータ分析にも応用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

解決済

streamlitで、selectboxの選択時のみ、データセットのカラムに対応した日本語ラベルを表示させたい

H.K2
H.K2

総合スコア82

Streamlit

Streamlitは、Pythonでフロントエンドアプリケーションを構築できるフレームワーク。HTML/CSSの知識が不要で、描画ライブラリで作成したグラフを埋め込むことが可能です。機械学習のレポート作成やデータ分析にも応用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

1回答

0評価

0クリップ

1755閲覧

投稿2021/11/06 18:45

前提・実現したいこと

現在、特定のデータセットを読み込んで、複数の側面から可視化する
アプリをStreamlitで作成しようと考えています。(あくまで下の図はテスト的なものです)
イメージ説明

発生している問題・エラーメッセージ

表示部分はざっくり作ってみたのですが、selectboxにデータカラムを表示させる部分で、
カラム名が日本語でないので(何のデータか)よくわからない、というご指摘をいただき、selectboxに表示させる部分と
カラム名を何とか対応させようと思ってcolumnsを直接対応する日本語名に差し替えようと思ったのですが、
追加要望でデータセットの中で、複数カラムに対し、特定の条件でタグをつけたい(注)という要望があり、
データフレームの列追加が発生してしまうと、直接カラム名を置き換えたタイミングで
データフレームの列が合わないなどの問題が発生してしまいます。

(注:下記図(データは仮でgapminderを使用しています)でいうと、たとえば、1970年代のAsiaだけ、
「インフレ時」のようなラベルを付ける、ような用途で使用したい、というユースケースがあります。)

イメージ説明

お聞きしたいこととしては、下記1点です。
①streamlitのselectboxに表示させるときだけ、対応する日本語名を表示させる方法について
ご教示いただけないでしょうか。
※上記において、もとのdataframeは、列の追加が行われる場合でも、正常に動作させるつくりにしたいです。
(列追加をされた場合でも、追加列に対応する日本語を設定したら、selectboxに反映できる)

該当のソースコード

(データフレームの列追加や前処理の部分などは省いています。)

Python3

def a_function(vis_data): cat_list = list(vis_data.select_dtypes(include=[object])) val_list = list(vis_data.select_dtypes(exclude=[object])) # form sample with st.form('my_form_identifier'): f_c1, f_c2, f_c3 = st.columns(3) with f_c1: x_select = st.selectbox("x選択ください", val_list, index=1) x_select2 = st.selectbox("x選択ください", val_list, index=2) with f_c2: y_select = st.selectbox("y選択ください", val_list, index=2) y_select2 = st.selectbox("y選択ください", val_list, index=3) with f_c3: group_select = st.selectbox("層別する対象を選択ください", cat_list, index=1) group_select2 = st.selectbox("層別する対象を選択ください", cat_list, index=2) with st.expander('See details'): slider_val = st.slider("Form slider") checkbox_val = st.checkbox("Form checkbox") # Every form must have a submit button. submitted = st.form_submit_button("Submit") if submitted: st.write("slider", slider_val, "checkbox", checkbox_val) # 読み込んだデータセットと、formで設定した値を使って、何らかのグラフ描画などを行いたい fig1 = px.scatter(vis_data, x=x_select, y=y_select, color=group_select, marginal_y="violin", marginal_x="box", trendline="ols", template="simple_white") fig2 = px.scatter(vis_data, x=x_select2, y=y_select2, color=group_select2, marginal_y="violin", marginal_x="box", trendline="ols", template="simple_white") # container sample container = st.container() c_col1, c_col2 = container.columns(2) with c_col1: st.plotly_chart(fig1, use_container_width=True) with c_col2: st.plotly_chart(fig2, use_container_width=True) def b_function(vis_data): pass def main(): st.title("ほげほげデータビューワ") mode_list = ["a機能", "b機能"] func_sel = st.sidebar.selectbox("機能を選んでください", mode_list) data = pd.DataFrame() if 'input_data' not in st.session_state: st.session_state['input_data'] = 0 # データ取得処理 get_data_source = st.sidebar.button("データ取得、更新") if get_data_source: # 何らかのデータ取得処理を記載(ボタン押下時のみ取ってくるようにする) data = px.data.gapminder() st.session_state.input_data = data with st.expander('データ詳細'): st.dataframe(st.session_state.input_data) if func_sel == "a機能": a_function(st.session_state.input_data) else: b_function(st.session_state.input_data)

試したこと

streamlitのリファレンスをチェックした
stackoverflowなどで、問題解決のヒントがないか調べた

補足情報(FW/ツールのバージョンなど)

Python 3.8.7
pandas 1.3.0
streamlit 1.0.0

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Streamlit

Streamlitは、Pythonでフロントエンドアプリケーションを構築できるフレームワーク。HTML/CSSの知識が不要で、描画ライブラリで作成したグラフを埋め込むことが可能です。機械学習のレポート作成やデータ分析にも応用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。