Skip to content

Streamlitで動的なタブを作成:簡単に始める方法

Streamlitは、開発者が簡単かつ迅速にインタラクティブなWebアプリケーションを作成できる人気のあるオープンソースのPythonライブラリです。データサイエンティストにとっては、データ駆動型アプリケーションの構築において、そのシンプルさと効率性から特に好まれています。Streamlitが提供する主要な機能の1つは、アプリケーションのレイアウトを構築し、ユーザーのナビゲーションを向上させるためのタブを作成する機能です。

StreamlitアプリをTableauのようなものに変える、素晴らしいデータ分析&データ可視化ツールをご存知ですか?

PyGWalker (opens in a new tab)は、自分自身のStreamlitアプリに簡単にTableauのようなUIを埋め込むのを手助けするPythonライブラリです。 PythonでPyGWalkerを使用してデータを探索する方法 (opens in a new tab)がこの強力なデータ可視化PythonライブラリをStreamlitアプリに適用するための詳細な手順を紹介した素晴らしいビデオをぜひご覧ください!


Svenと彼の素晴らしい貢献 (opens in a new tab)に感謝します!PyGWalkerコミュニティにおいてもPyGWalkerのGitHubページをチェックすることもできます。

第1部 ストリームリットのタブとは何ですか?

ストリームリットのタブは、アプリケーションで作成したいコンテンツを保持できるコンテナです。関連するコンテンツのグループ間を簡単に移動できるようにして、アプリケーションをより整理された使いやすいものにするための手段を提供します。たとえば、データ可視化、モデルトレーニング、結果分析など、機械学習の実験の異なるセクションをタブで分けることができます。

第2部 ストリームリットでタブを使用する理由

ストリームリットでタブを使用する主な目的は、関連するコンテンツを独立したビューにグループ化することです。これにより、クリーンで整理されたインターフェースを提供するだけでなく、効率の良いワークフローを実現することもできます。たとえば、機械学習プロジェクトでは、データの前処理、モデルのトレーニング、評価指標、予測結果など、異なるタブをそれぞれ作成することができます。

第3部 ストリームリットでタブを作成する方法

ストリームリットでタブを作成するには、まずタブのタイトルのリストを作成する必要があります。このリストの各オプションは、タブの名前に対応します。それから、各タブのために表示したいコンテンツを書きます。以下は簡単な例です:

import streamlit as st
 
st.title('My Application')
 
# タブを作成
tab_titles = ['Topic A', 'Topic B', 'Topic C']
tab1, tab2, tab3 = st.tabs(tab_titles)
 
# 各タブにコンテンツを追加
with tab1:
    st.header('Topic A')
    st.write('Topic Aのコンテンツ')
 
with tab2:
    st.header('Topic B')
    st.write('Topic Bのコンテンツ')
 
with tab3:
    st.header('Topic C')
    st.write('Topic Cのコンテンツ')

この例では、'Topic A'、'Topic B'、'Topic C'の3つのタブを作成しました。各タブにはヘッダーとテキストが表示されます。

第4部 ストリームリットで複数のタブを作成する

複数のタブをストリームリットで作成する方法は、単一のタブを作成するプロセスと同じです。ただし、タブのタイトルのリストにさらにオプションを追加し、各タブにコンテンツを追加するだけです。これは、関連するコンテンツを個別のセクションにグループ化したい場合に特に便利です。

たとえば、機械学習プロジェクト用のStreamlitアプリケーションを構築しているとします。データの前処理、モデルのトレーニング、モデルの評価、結果の可視化など、個々のセクションを別々のタブにグループ化することができます。これにより、アプリケーションがより整理され、ナビゲーションが容易になります。

以下は、ストリームリットで複数のタブを作成する方法の例です:

import streamlit as st
 
st.title('My Machine Learning Project')
 
# タブを作成
tab_titles = ['Data Preprocessing', 'Model Training', 'Model Evaluation', 'Results Visualization']
tabs = st.tabs(tab_titles)
 
# データ前処理タブにコンテンツを追加
with tabs[0]:
    st.header('Data Preprocessing')
    st.write('ここでデータを前処理できます。')
 
# モデルトレーニングタブにコンテンツを追加
with tabs[1]:
    st.header('Model Training')
    st.write('ここでモデルをトレーニングできます。')
 
# モデル評価タブにコンテンツを追加
with tabs[2]:
    st.header('Model Evaluation')
    st.write('ここでモデルを評価できます。')
 
# 結果可視化タブにコンテンツを追加
with tabs[3]:
    st.header('Results Visualization')
    st.write('ここで結果を可視化できます。')

この例では、機械学習プロジェクトのために4つのタブを作成しました。各タブはプロジェクトの異なるセクションに対応しており、それぞれのタブには独自のコンテンツが含まれています。

必要に応じてタブを追加でき、各タブにはテキスト、画像、プロット、ウィジェットなど、任意の種類のコンテンツを含めることができます。これにより、ストリームリットのタブは、インタラクティブで動的なアプリケーションを作成するための多目的なツールとなります。

ストリームリットで複数のタブを作成することは、アプリケーションの機能性とユーザーエクスペリエンスを向上させるための簡単で効果的な方法です。この機能を探索して、プロジェクトにどのように役立つかを確認してみてください。

第5部 ストリームリットで動的なタブを作成する方法

Streamlitの動的タブは、サーバーまたはAPIからのコンテンツに基づいて動的に作成およびレンダリングされるタブです。タブの数やそのコンテンツが事前にわかっていない場合や、時間とともに変更される可能性がある場合に有利です。Streamlitで動的なタブを作成する方法の例です。

import streamlit as st
 
st.title('My Application')
 
# サーバーからタブのコンテンツを取得する関数
def get_tab_content():
    return [
        {'title': 'トピックA', 'content': 'トピックAのコンテンツ'},
        {'title': 'トピックB', 'content': 'トピックBのコンテンツ'},
        {'title': 'トピックC', 'content': 'トピックCのコンテンツ'},
    ]
 
# サーバーからタブのコンテンツを取得する
tab_contents = get_tab_content()
 
# タブを作成する
tab_names = [content['title'] for content in tab_contents]
tabs = st.tabs(tab_names)
 
# 各タブをイテレートしてコンテンツを構築する
for tab, tab_content in zip(tabs, tab_contents):
    with tab:
        st.header(tab_content['title'])
        st.write(tab_content['content'])

この例では、まずサーバーまたはAPIが返す内容と似た機能を持つget_tab_content関数を定義します。この関数は、各タブのタイトルとコンテンツが含まれた辞書のリストを返します。次に、タブを作成し、各タブをイテレートしてコンテンツを表示します。

Streamlitタブの実用例

Streamlitタブは、特にデータサイエンスや機械学習の領域で、さまざまなアプリケーションで活用できる多目的な機能です。以下では、Streamlitタブの実用的な使用例について詳しく説明します。

機械学習実験用のStreamlitタブ

機械学習実験に没頭していると想像してください。データの前処理、モデルのトレーニング、モデルの評価、結果の可視化など、すべてが同時に行われています。それは段階やプロセスの渦巻きであり、簡単に圧倒されてしまう可能性があります。しかし、ここでStreamlitタブが助けになります。各ステージを別々のタブにグループ化することで、ユーザーが実験をナビゲートしやすくなるだけでなく、全体の過程を理解しやすくすることもできます。

例えば、次のようなタブがあるStreamlitアプリがあるかもしれません:

import streamlit as st
 
st.title('My Machine Learning Experiment')
 
# タブを作成する
tab_titles = ['データの前処理', 'モデルのトレーニング', 'モデルの評価', '結果の可視化']
tabs = st.tabs(tab_titles)
 
# 各タブにコンテンツを追加する
with tabs[0]:
    st.header('データの前処理')
    st.write('ここでデータの前処理を行います...')
 
with tabs[1]:
    st.header('モデルのトレーニング')
    st.write('ここでモデルのトレーニングを行います...')
 
with tabs[2]:
    st.header('モデルの評価')
    st.write('ここでモデルの評価を行います...')
 
with tabs[3]:
    st.header('結果の可視化')
    st.write('ここで結果の可視化を行います...')

この例では、機械学習実験の各ステージに専用のタブがあり、アプリがより整理されてユーザーフレンドリーになっています。

データ可視化用のStreamlitタブ

データ可視化は、データ分析や機械学習の心と魂です。データを使って絵を描く芸術であり、Streamlitタブはその傑作のための完璧なキャンバスです。Streamlitタブを使用すると、棒グラフ、散布図、ヒートマップなど、異なるタイプの可視化に対して別々のタブを作成することができます。これにより、ユーザーは簡単に異なる可視化間を切り替えたり、データから洞察を得たりすることができます。

データ可視化のためにStreamlitタブを使用する例をご紹介します:

import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
 
# いくつかのデータを読み込む
data = pd.read_csv('data.csv')
 
st.title('My Data Visualization Application')
 
# タブを作成する
tab_titles = ['棒グラフ', '散布図', 'ヒートマップ']
tabs = st.tabs(tab_titles)
 
# 各タブにコンテンツを追加する
with tabs[0]:
    st.header('棒グラフ')
    st.bar_chart(data)
 
with tabs[1]:
    st.header('散布図')
    fig, ax = plt.subplots()
    ax.scatter(data['x'], data['y'])
    st.pyplot(fig)
 
with tabs[2]:
    st.header('ヒートマップ')
    st.heatmap(data.corr())

この例では、各タブには異なるタイプのデータ可視化が表示され、ユーザーはデータを異なる視点から探索することができます。

ダッシュボード作成用のStreamlitタブ

Streamlitタブを使用してインタラクティブなダッシュボードを作成することもできます。たとえば、ユーザー入力のためのタブ、データの表示のためのタブ、データ分析の結果の表示のためのタブなど、別々のタブを作成することができます。これにより、ダッシュボードがより整理されたユーザーフレンドリーなものになります。

Streamlitタブを使用したダッシュボードの例をご紹介します:

import streamlit as st
 
st.title('My Dashboard')
 
# タブを作成する
tab_titles = ['ユーザー入力', 'データ表示', 'データ分析']
tabs = st.tabs(tab_titles)
 
# 各タブにコンテンツを追加する
with tabs[0]:
    st.header('ユーザー入力')
    st.text_input('テキストを入力')
    st.number_input('数値を入力')
 
with tabs[1]:
    st.header('データ表示')
    st.table({'column1': [1, 2, 3], 'column2': [4, 5, 6]})
 
with tabs[2]:
    st.header('データ分析')
    st.line_chart([1, 2, 3, 4, 5])

この例では、「ユーザー入力」タブには入力ウィジェットが含まれ、「データ表示」タブにはデータの表が表示され、「データ分析」タブには折れ線グラフが表示されます。

プロジェクトの整理用のStreamlitタブ

複数のコンポーネントを持つ大規模なプロジェクトでは、Streamlitタブを使用してコンポーネントを別々のセクションに整理することができます。これにより、プロジェクトが管理しやすくなるだけでなく、クリーンで整理されたインターフェースを提供することでユーザーエクスペリエンスを向上させることができます。

たとえば、データの読み込み、データのクリーニング、データの分析、データの可視化などの複数のコンポーネントを持つ大規模なアプリケーションを構築する場合、次のようにこれらのコンポーネントを別々のタブに整理することができます:

import streamlit as st
 
st.title('My Large Project')
 
# タブを作成する
tab_titles = ['データの読み込み', 'データのクリーニング', 'データの分析', 'データの可視化']
tabs = st.tabs(tab_titles)
 
# 各タブにコンテンツを追加する
with tabs[0]:
st.header('データの読み込み')
st.write('ここではデータを読み込みます...')
 
with tabs[1]:
    st.header('データのクリーニング')
    st.write('ここではデータをクリーニングします...')
 
with tabs[2]:
    st.header('データの分析')
    st.write('ここではデータを分析します...')
 
with tabs[3]:
    st.header('データの可視化')
    st.write('ここではデータを可視化します...')

この例では、プロジェクトの各コンポーネントには専用のタブがあり、アプリケーションがより整理され、ナビゲーションが容易になっています。

第7部 ストリームリットタブの高度なコンセプト

ストリームリットタブは、アプリケーションの機能性とユーザーエクスペリエンスを向上させるためのさまざまな高度な機能を提供します。ストリームリットタブのいくつかの高度なコンセプトを以下に示します。

ストリームリットタブのコンテナとその使用方法

ストリームリットタブのコンテナは、タブのコンテンツを保持するコンテナです。テキスト、画像、プロット、ウィジェットなど、タブコンテナに任意のコンテンツを追加することができます。タブコンテナは関連するコンテンツを簡単にグループ化し、ユーザーナビゲーションを向上させる便利な方法を提供します。

たとえば、次のようなタブコンテナを持つストリームリットアプリケーションがあるかもしれません:

import streamlit as st
 
st.title('My Application')
 
# タブコンテナの作成
tabs = st.tabs(['タブ1', 'タブ2', 'タブ3'])
 
# 最初のタブにコンテンツを追加
with tabs[0]:
    st.header('タブ1')
    st.write('これはタブ1のコンテンツです。')
 
# 2番目のタブにコンテンツを追加
with tabs[1]:
    st.header('タブ2')
    st.write('これはタブ2のコンテンツです。')
 
# 3番目のタブにコンテンツを追加
with tabs[2]:
    st.header('タブ3')
    st.write('これはタブ3のコンテンツです。')

この例では、各タブは独自のコンテンツを保持するコンテナであり、ユーザーはタブを切り替えて異なるコンテンツを表示することができます。

ストリームリットのタブ付きレイアウトとデザイン

ストリームリットは、Pythonでインタラクティブなアプリケーションを簡単に作成およびデザインするためのAPIを提供しています。タブ付きレイアウトは、Streamlitが提供するデザイン機能の1つです。タブ付きレイアウトを使用すると、コンテンツを個別のタブに整理して、アプリケーションを整理し、ユーザーフレンドリーにすることができます。

次に、タブ付きレイアウトを使用したストリームリットアプリケーションの例を示します:

import streamlit as st
 
st.title('My Application')
 
# タブ付きレイアウトの作成
tabs = st.tabs(['タブ1', 'タブ2', 'タブ3'])
 
# 最初のタブにコンテンツを追加
with tabs[0]:
    st.header('タブ1')
    st.write('これはタブ1のコンテンツです。')
 
# 2番目のタブにコンテンツを追加
with tabs[1]:
    st.header('タブ2')
    st.write('これはタブ2のコンテンツです。')
 
# 3番目のタブにコンテンツを追加
with tabs[2]:
    st.header('タブ3')
    st.write('これはタブ3のコンテンツです。')

この例では、アプリケーションは3つのタブを持つタブ付きレイアウトであり、各タブには独自のコンテンツが含まれています。

ストリームリットのタブ付きナビゲーションおよびユーザーインターフェース

ストリームリットのタブは関連するコンテンツのグループ間で簡単にナビゲーションを提供します。タブ間の移動は高速でスムーズであり、優れたユーザーエクスペリエンスを提供します。さらに、タブを動的に作成してコンテンツを挿入することができるため、事前にタブの数やコンテンツがわからない場合に特に便利です。

たとえば、ユーザーの入力に応じてタブの数とコンテンツが決まるストリームリットアプリケーションがあるかもしれません:

import streamlit as st
 
st.title('My Dynamic Application')
 
# ユーザーからタブの数を取得
num_tabs = st.number_input('タブの数を入力してください', min_value=1, max_value=10, value=3)
 
# タブの作成
tab_titles = [f'タブ{i+1}' for i in range(num_tabs)]
tabs = st.tabs(tab_titles)
 
# 各タブにコンテンツを追加
for i in range(num_tabs):
    with tabs[i]:
        st.header(f'タブ{i+1}')
        st.write(f'これはタブ{i+1}のコンテンツです。')

この例では、ユーザーはタブの数を指定でき、アプリケーションがタブを動的に作成し、コンテンツを追加します。

ストリームリットのタブコンテンツと表示

ストリームリットのタブは、アプリケーション内で作成するための基本的なコンテナです。メトリック、プロット、チャート、入力ウィジェットなど、さまざまなコンテンツを表示する方法を提供します。これにより、ストリームリットタブは、インタラクティブでダイナミックなアプリケーションを作成するための多目的なツールとなります。

次に、タブを使用してさまざまなタイプのコンテンツを表示するストリームリットアプリケーションの例を示します:

import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
 
# データの読み込み
data = pd.read_csv('data.csv')
 
st.title('My Data Visualization Application')
 
# タブの作成
tab_titles = ['メトリック', 'プロット', 'チャート', '入力']
tabs = st.tabs(tab_titles)
 
# 各タブにコンテンツを追加
with tabs[0]:
    st.header('メトリック')
    st.metric('メトリック1', 123)
    st.metric('メトリック2', 456)
 
with tabs[1]:
    st.header('プロット')
    fig, ax = plt.subplots()
    ax.plot(data['x'], data['y'])
    st.pyplot(fig)
 
with tabs[2]:
    st.header('チャート')
    st.line_chart(data)
 
with tabs[3]:
    st.header('入力')
    st.text_input('テキストを入力してください')
    st.number_input('数値を入力してください')

この例では、「メトリック」タブではメトリックが表示され、「プロット」タブではプロットが表示され、「チャート」タブでは折れ線グラフが表示され、「入力」タブには入力ウィジェットが含まれています。

結論

ストリームリットタブは、アプリケーションの機能性とユーザーエクスペリエンスを大幅に向上させる強力な機能です。データサイエンスプロジェクト、ダッシュボードの作成、複雑なアプリケーションの構築など、ストリームリットタブを使用することでコンテンツを整理し、アプリケーションをよりユーザーフレンドリーにすることができます。ストリームリットタブの使用を今すぐ試して、プロジェクトにどのような利点があるかを確認してください。

StreamlitアプリをTableauのように変換する、素晴らしいデータ分析およびデータ可視化ツールをご存知ですか?

PyGWalker (opens in a new tab)は、ストリームリットアプリにTableauのようなUIを簡単に埋め込むのに役立つPythonライブラリです。

PyGWalker for Data visualization in Streamlit (opens in a new tab)

よくある質問

Streamlitはタブをサポートしていますか?

はい、Streamlitはタブをサポートしています。Streamlitアプリケーション内で複数のタブを作成し、コンテンツを整理し、ユーザーのナビゲーションを改善することができます。

Streamlitで要素を配置する方法は?

Streamlitでは、要素を表示したい順に書くことで要素を配置します。Streamlitは上から下に実行されるため、要素を書く順序がアプリケーション内で表示される順序になります。

Streamlitはどのように動作するのですか?

StreamlitはPythonスクリプトをインタラクティブなWebアプリケーションに変換することで動作します。スライダーやチェックボックス、タブなどのインタラクティブな要素を作成するための高レベルなAPIを提供します。Streamlitスクリプトを実行すると、Webサーバーが起動し、サーバーを指すブラウザウィンドウが開きます。

PythonでのStreamlitの役割は何ですか?

Streamlitは、インタラクティブなWebアプリケーションを作成するためのPythonライブラリです。HTML、CSS、JavaScriptを知らなくても、Pythonの開発者やデータサイエンティストはデータ分析、機械学習、データ可視化のためのアプリケーションを作成することができます。