Skip to content

Streamlitのカラムを解説:グリッドレイアウト、データ表示、対話

Updated on

Streamlitは、データアプリケーションの構築とデプロイの方法を革新しました。これは、開発者が簡単にインタラクティブなWebベースのアプリケーションを作成できる強力なオープンソースのPythonライブラリです。Streamlitの最も特徴的な機能の1つは、レイアウトとUIのカスタマイズを処理できる能力です。この記事では、その中でも最も重要な要素であるStreamlitのカラムについて詳しく説明します。

Streamlitのカラムは、Streamlit APIのst.columnsとして示され、アプリケーションの効果的なレイアウトの基本的な要素です。これにより、アプリを複数のセクションに分割し、それぞれに異なるStreamlitウィジェットや要素を保持することができます。これにより、ユーザーエクスペリエンスが大幅に向上し、アプリケーションがより整理され、ナビゲーションが容易になります。

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

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


Svenと彼の素晴らしい貢献 (opens in a new tab)に感謝します!PyGWalkerコミュニティによって提供されています。

さらに、PyGWalker GitHubページ (opens in a new tab)でも、PyGWalkerの例をもっとチェックすることができます。

第1部 Streamlitカラムの理解(st.columns)

Streamlitのst.columnsとは何ですか?

Streamlitでは、st.columnsはアプリケーション内に複数のカラムを作成するための関数です。引数として整数を受け取り、作成する等幅のカラムの数を指定します。例えば、st.columns(3)は等幅の3つのカラムを作成します。

Streamlitのカラムは非常に柔軟です。シンプルなテキストや画像から複雑なチャートやデータテーブルまで、ほぼすべてのStreamlit要素をカラム内に配置することができます。これにより、アプリケーションのレイアウトを効果的に整理するための重要なツールとなります。

st.columnsを使ったレイアウトの整理

Streamlitのカラムの力は、レイアウトを変換できることにあります。アプリをカラムに分割することで、関連する要素をグループ化し、ユーザーがデータを理解しやすくし、操作しやすくすることができます。

例えば、データの可視化アプリを構築しているとしましょう。Streamlitのカラムを使用してデータの異なる側面を並べて表示することができます。1つのカラムにはデータテーブルが含まれ、別のカラムには棒グラフ、さらに別のカラムには折れ線グラフが含まれることができます。これにより、ユーザーは一目で異なる可視化を比較することができ、データの理解が深まります。

データ可視化のためのStreamlitのカラムの例

Streamlitのカラムの力を示すために、簡単な例を見てみましょう。車の販売データセットがあり、モデルごとの販売台数の棒グラフとデータテーブルを表示したいとします。次のようにStreamlitのカラムを使ってそれを行うことができます:

import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
 
## データの読み込み
data = pd.read_csv('car_sales.csv')
 
## 2つのカラムを作成
col1, col2 = st.columns(2)
 
## 1つ目のカラムにデータテーブルを表示
col1.dataframe(data)
 
## 2つ目のカラムに棒グラフを作成して表示
fig, ax = plt.subplots()
data.groupby('model')['sales'].sum().plot(kind='bar', ax=ax)
col2.pyplot(fig)

この例では、st.columns(2)で2つのカラムを作成します。その後、dataframeメソッドを使用して1つ目のカラムにデータテーブルを表示し、pyplotメソッドを使用して2つ目のカラムに棒グラフを表示します。結果として、整理されたレイアウトが得られ、ユーザーがデータを探索し理解するのが容易になります。

お時間をいただきありがとうございました。提供されたリンクの情報に基づいて、「高度なStreamlitカラムの設定」および「Streamlitレイアウトプリミティブの探索」のセクションを詳細な内容、例、箇条書き、表を含むように改訂しました。

もちろん、それらのセクションについて詳しく説明します。以下が改訂後のコンテンツです:

第2部 高度なStreamlitカラムの設定

Streamlitのst.column_config.Columnは、個々のカラムのプロパティを設定することができる強力な関数です。これにより、データの表現方法やユーザーがデータとの対話方法を細かく制御することができます。

st.column_config.Columnを使ったデータ表示の設定

st.column_config.Column関数を使用すると、カラムのプロパティを調整してデータの表示サイズを制御することができます。たとえば、widthheightの引数を使用して、表示サイズを大きくしたり小さくしたりして、自分のニーズに合わせることができます。以下に例を示します:

col1, col2 = st.columns([2, 3])
col1.metric(label="メトリック1", value=123)
col2.metric(label="メトリック2", value=456)

この例では、異なる幅を持つ2つの列を作成します。最初の列は2番目の列の2倍の幅であり、最初の列のメトリックは2番目の列のメトリックよりも大きく表示されます。

また、padding引数を使用して、可視化の周りにスペースを追加して読みやすくし、インタラクティブにすることもできます。以下に手順を示します。

col1、col2 = st.columns([23])
with col1:
    st.metric(label="メトリック1"、value=123)
    st.caption("これはメトリック1に関する追加の情報です。")
with col2:
    st.metric(label="メトリック2"、value=456)
    st.caption("これはメトリック2に関する追加の情報です。")

この例では、各メトリックにキャプションを追加して、可視化の周りに余白を作成しています。

st.column_config.Columnを使用したデータインタラクションの設定

st.column_config.Columnを使用すると、データの表示だけでなく、列の対話性も制御できます。たとえば、新しい方法でユーザーが操作できるように、clickable引数を使用して列をクリック可能にすることができます。以下に例を示します。

col1、col2 = st.columns(2)
with col1:
    if st.button("クリックしてください!"):
        st.write("ボタンがクリックされました!")
with col2:
    if st.button("クリックしないでください!"):
        st.write("ボタンがクリックされました!")

この例では、各列にボタンを追加しています。ボタンがクリックされると、対応する列にメッセージが表示されます。

Part 3. Streamlitレイアウトのプリミティブの探索

Streamlitには、アプリケーションのレイアウトをさらにカスタマイズするために使用できるさまざまなレイアウトのプリミティブがあります。これらのプリミティブはコンテンツをさらに整理するための追加的な方法を提供し、アプリケーションの外観と動作にさらなる制御を与えます。

st.containerを使用して複雑なレイアウトを作成する

Streamlitのレイアウトプリミティブの最新の追加の1つは、st.container関数です。この関数を使用すると、複数の要素を保持できるコンテナ、つまりアプリケーションのセクションを作成できます。コンテナはお互いにネストすることができ、複雑で階層的なレイアウトを作成できます。以下に例を示します。

with st.container():
    st.write("これは外側のコンテナです。")
    with st.container():
        st.write("これは内側のコンテナです。")

この例では、外側のコンテナと内側のコンテナを作成しています。内側のコンテナは外側のコンテナの中にネストされているため、階層的なレイアウトが作成されます。

st.expanderを使用して重要でないコンテンツを非表示にする

もう1つの新機能は、st.expander関数です。この関数を使用すると、アプリケーションの非表示セクションである展開セクションを作成できます。展開セクションは、重要でないコンテンツを非表示にするために使用でき、アプリケーションがよりクリーンでナビゲートしやすくなります。以下に例を示します。

with st.expander("クリックして展開"):
    st.write("非表示のコンテンツ")

この例では、ラベルが「クリックして展開」の展開セクションを作成しています。ユーザーがラベルをクリックすると、非表示のコンテンツが表示されます。

Part 4. Streamlitの列とサイドバー: 違いと使用例の理解

Streamlitの列とサイドバーは、アプリケーションのレイアウトを整理するための強力なツールです。ただし、それぞれ異なる目的で使用され、異なる状況で最適に使用されます。

サイドバーを使用したグローバルコントロール

サイドバーは、メインエリアとは別に配置されるアプリケーションの特別なセクションです。データのフィルタリングやオプションの選択など、アプリ全体に影響を与えるコントロールを配置するために最適です。以下に例を示します。

option = st.sidebar.selectbox(
    'オプションを選択してください',
    ('オプション1', 'オプション2', 'オプション3'))
st.write('選択したオプション:', option)

この例では、サイドバーに選択ボックスを作成しています。選択したオプションはアプリのメインエリアに表示されます。

Streamlitの列を使用してメインエリアを整理する

一方、Streamlitの列は、アプリのメインエリアの整理に最適です。コンテンツを複数のセクションに分割し、異なる要素を保持できるため、複数の可視化や情報を並べて表示するのに最適です。以下に例を示します。

col1、col2 = st.columns(2)
with col1:
    st.line_chart([0, 1, 2, 3, 4])
with col2:
    st.line_chart([4, 3, 2, 1, 0])

この例では、アプリのメインエリアに2つの列を作成しています。それぞれの列には折れ線グラフが含まれており、ユーザーは2つのグラフを並べて比較することができます。

Part 5: Streamlitの高度な列の設定

Streamlitのst.column_config.Columnは、データの表示とデータとの相互作用の設定を制御できる強力なツールです。列のプロパティを調整することで、データの表示やユーザーとの相互作用の方法を制御できます。

たとえば、widthheightの引数を使って、データの可視化のサイズを調整することで、必要に応じて大きくしたり小さくしたりできます。また、padding引数を使って可視化の周りにスペースを追加し、読みやすくし、相互作用しやすくすることもできます。

# widthとheightの引数を使用した例
column1、column2 = st.columns(2)
with column1:
    st.bar_chart(data、width=400、height=200)
with column2:
    st.line_chart(data、width=400、height=200)

さらに、st.column_config.Columnを使用すると、列の相互作用性を制御できます。例えば、clickable引数を使って列をクリックできるようにすることで、ユーザーは新しい方法でそれと対話することができます。draggable引数を使って列をドラッグ可能にすることもできます。これにより、ユーザーはレイアウトを自分のニーズに合わせて再配置することができます。

# clickableとdraggable引数を使用した例
column1、column2 = st.columns(2)
with column1:
    if st.button('クリックしてください!'):
        st.write('ボタンがクリックされました!')
with column2:
    st.slider('ドラッグしてください!', 0, 100, 50)

Part 6: Streamlitレイアウトプリミティブの探索

Streamlitは、アプリケーションのレイアウトをより柔軟に整理するための新しいレイアウトプリミティブを導入しました。その1つが st.container 関数で、複数の要素を保持できるコンテナを作成することができます。コンテナは相互にネストすることができ、複雑な階層レイアウトを作成することができます。

# st.containerの使用例
with st.container():
    st.write('これはコンテナです。')
    with st.container():
        st.write('これはネストされたコンテナです。')

もう1つの新しい追加機能は st.expander 関数で、アプリの折りたたみ可能なセクションであるエクスパンダを作成することができます。エクスパンダは、重要度の低いコンテンツを非表示にし、アプリをより清潔でナビゲーションしやすくするために使用することができます。

# st.expanderの使用例
with st.expander('クリックして展開'):
    st.write('こんにちは、世界!')

パート7: Streamlit Columns vs サイドバー

Streamlitのカラムとサイドバーは、アプリケーションのレイアウトを整理するための強力なツールです。しかし、それぞれ異なる目的で使用され、異なる状況で最適に利用されます。

サイドバーは、メインエリアとは別に存在するアプリの特別なセクションです。データのフィルタリングやオプションの選択など、アプリ全体に影響を与えるコントロールを配置するのに最適です。

# サイドバーの使用例
option = st.sidebar.selectbox('オプションを選択', ['オプション1', 'オプション2', 'オプション3'])
st.write(f'選択したオプションは {option} です。')

一方、Streamlitのカラムは、アプリのメインエリアを整理するために最適です。カラムを使用すると、異なる要素を保持する複数のセクションにコンテンツを分割することができます。これにより、複数の可視化や情報の並べ方に適しています。

# カラムの使用例
column1, column2, column3 = st.columns(3)
with column1:
    st.write('これはカラム1です。')
with column2:
    st.write('これはカラム2です。')
with column3:
    st.write('これはカラム3です。')

パート8: Streamlit ColumnsによるレスポンシブデザインとUIカスタマイズ

Streamlitのカラムは、アプリのレイアウトを整理するだけでなく、レスポンシブデザインの作成やアプリのユーザーインターフェース(UI)のカスタマイズにも重要な役割を果たします。カラムの幅やパディングなどのプロパティを調整することで、異なる画面サイズや向きに適応するレイアウトを作成することができます。これは、デスクトップやモバイルデバイスの両方でアプリが見栄え良く動作することを保証するために特に重要です。

さらに、Streamlitのカラムを使用することで、さまざまな方法でアプリのUIをカスタマイズすることができます。たとえば、グリッドレイアウトを作成するためにカラムを使用することで、アプリがより視覚的に魅力的でナビゲーションしやすくなります。また、関連する要素をグループ化するためにカラムを使用することで、アプリの使いやすさを向上させることができます。

# レスポンシブデザインとUIカスタマイズにカラムを使用する例
column1, column2, column3 = st.columns([1, 2, 1])
with column1:
    st.image('image1.jpg')
with column2:
    st.write('これはテキストです。')
    st.line_chart(data)
with column3:
    st.image('image2.jpg')

結論

Streamlitのカラムは、アプリケーションのレイアウトを整理し、UIをカスタマイズするための強力なツールです。Streamlitが導入したカラムとレイアウトプリミティブの使い方を理解することで、効果的で魅力的なデータアプリケーションを作成することができます。複数の可視化を並べて表示したり、レスポンシブデザインを作成したり、データの表示や操作方法を設定したりする場合、Streamlitのカラムは柔軟で直感的な方法を提供します。

Streamlit AppをTableauに変える、素晴らしいデータ分析&データ可視化ツールを聞いたことがありますか?

PyGWalker (opens in a new tab)は、自分のStreamlitアプリにTableauのようなUIを簡単に埋め込むのをサポートするPythonライブラリです。

PyGWalkerによるStreamlitでのデータ可視化 (opens in a new tab)

よくある質問

Q: Streamlitのデメリットは何ですか?

A: Streamlitはデータアプリケーションの構築には強力なツールですが、いくつかの制限もあります。たとえば、デフォルトではマルチページのアプリケーションをサポートしておらず、組み込みのユーザー認証やアクセス制御もありません。また、Streamlitのシンプルさは使いやすさを提供する一方、より複雑なフレームワークと比較して柔軟性に制限があります。

Q: Streamlitで要素を配置する方法はありますか?

A: Streamlitでは、カラムやコンテナを使用して要素を配置することができます。st.columns 関数を使用すると、アプリを複数のカラムに分割することができます。st.container 関数を使用すると、複数の要素をグループ化することができます。また、st.sidebar 関数を使用してサイドバーに要素を追加することもできます。

Q: Streamlitの利点は何ですか?

A: Streamlitはデータアプリケーションの構築にいくつかの利点を提供しています。シンプルで直感的なAPIを持つため、使いやすいです。また、コードを最小限に抑えて幅広いアプリケーションを作成できる高い柔軟性を持っています。さらに、Streamlitはインタラクティブなウィジェットをサポートしており、インタラクティブなアプリケーションを簡単に作成することができます。さらに、MarkdownやLaTeXのサポートにより、アプリケーション内で美しい、豊富にフォーマットされたテキストを作成することができます。

Q: Streamlitのエクスパンダとは何ですか?

A: Streamlitの st.expander 関数は、アプリ内の折りたたみ可能なセクションを作成することができます。このセクションには複数の要素を含めることができ、ユーザーによって展開または折りたたむことができます。折りたたまれた状態では、エクスパンダのラベルのみが表示されます。エクスパンダは、重要度の低いコンテンツを非表示にし、アプリをより清潔でナビゲーションしやすくするのに便利です。