はじめに:st.sliderとは?
StreamlitはPythonでインタラクティブなWebアプリを簡単に作れるフレームワーク。その中でもst.sliderは、数値や日付の範囲を直感的に選べるウィジェットとして、教育・業務・ブログ発信など幅広く活用されています。
今回は、st.sliderを使って「株価の取得期間を1〜10年で自由に選べるアプリ」を作成しながら、使いどころや応用例を分かりやすく紹介します。
アプリの概要
このアプリでは以下のことができます:
- 銘柄コードを入力(例:トヨタは「7203.T」)
st.sliderで取得期間(年数)を選択- 株価データを取得してグラフ表示
- 取得期間の統計情報(開始日・終了日・件数)を表示
- 最初と最後の10件を表形式で確認
完成コード(コピーしてすぐ使える)
import streamlit as st
import yfinance as yf
import pandas as pd
from datetime import datetime, timedelta
ticker = st.text_input("銘柄コードを入力してください(例:7203.T)", value="7203.T")
years = st.slider("取得期間(年)", min_value=1, max_value=10, value=5)
end_date = datetime.today()
start_date = end_date - timedelta(days=365 * years)
if st.button("株価データを表示"):
try:
df = yf.download(ticker, start=start_date, end=end_date, group_by='ticker')
# 🔍 マルチインデックス対策(複数銘柄対応時の整形)
if isinstance(df.columns, pd.MultiIndex):
df = df.xs(ticker, axis=1, level=0)
df = df.reset_index()
if df.empty:
st.warning("データが取得できませんでした。銘柄コードを確認してください。")
else:
st.success(f"{ticker} の株価データ({years}年分)を表示します")
st.line_chart(df.set_index("Date")["Close"])
st.subheader("📊 取得期間の統計情報")
st.write(f"- 開始日:{df['Date'].iloc[0].date()}")
st.write(f"- 終了日:{df['Date'].iloc[-1].date()}")
st.write(f"- データ件数(日数):{len(df)}")
st.subheader("📅 最初の10件(取得開始日付の確認)")
st.dataframe(df.head(10))
st.subheader("📅 最後の10件(取得終了日付の確認)")
st.dataframe(df.tail(10))
except Exception as e:
st.error(f"エラーが発生しました: {e}")


解説:マルチインデックスとは?
yfinance.download()で複数銘柄を取得した場合、データの列(columns)が「マルチインデックス(MultiIndex)」という階層構造になります。
🧠 例:
Close Open High Low
7203.T 7203.T 7203.T 7203.Tこのような構造では、通常のdf["Close"]のようなアクセスができません。
✅ 対策コードの意味
if isinstance(df.columns, pd.MultiIndex):
df = df.xs(ticker, axis=1, level=0)isinstance(...):列がマルチインデックスかどうかを判定df.xs(...):指定した銘柄(ticker)のデータだけを抽出axis=1:列方向に操作level=0:マルチインデックスの最上位階層を対象
これにより、単一銘柄のシンプルなDataFrameに変換され、df["Close"]などの通常操作が可能になります。
st.sliderの使いどころと活用例
| 用途 | 説明 | 使用例 |
|---|---|---|
| 📈 期間指定 | 株価や売上などの時系列データの取得 | years = st.slider("取得期間", 1, 10, 5) |
| 📊 パラメータ調整 | 機械学習モデルの設定 | n_estimators = st.slider("決定木の数", 10, 500, 100) |
| 🧮 範囲フィルター | 価格帯やスコアで絞り込み | price_range = st.slider("価格帯", 1000, 10000, (3000, 7000)) |
| 📅 日付選択 | 開始日・終了日を選ぶ | start_date = st.slider("開始日", date1, date2, default) |
| 🎨 表示調整 | グラフの透明度やサイズ調整 | opacity = st.slider("透明度", 0.0, 1.0, 0.5) |
実行結果のイメージ
- スライダーで「5年」を選ぶと、過去5年分の株価がグラフで表示されます
- 表形式で最初と最後のデータを確認できるので、取得期間の正確性が一目瞭然
- 統計情報で「開始日」「終了日」「件数」も明示され、教育用途にも最適
応用アイデア
st.selectboxで銘柄リストから選択st.checkboxで移動平均線の表示切り替えst.download_buttonでCSV保存機能追加st.sidebarにウィジェットを配置してUIを整理st.sliderで予測期間やモデルパラメータを調整する学習アプリにも応用可能
まとめ
Streamlitのst.sliderは、データ分析や教育、ブログ発信において「操作性」と「視覚的な分かりやすさ」を両立できる強力なウィジェットです。今回の株価取得アプリのように、ユーザーが自由に期間を選べることで、より深いデータ理解や体験型の学習が可能になります。


コメント