スポンサーリンク
Pythonstreamlit

📘 Streamlitで株価取得期間を自由に選べる!st.slider活用アプリの作り方

Python
この記事は約6分で読めます。

はじめに: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は、データ分析や教育、ブログ発信において「操作性」と「視覚的な分かりやすさ」を両立できる強力なウィジェットです。今回の株価取得アプリのように、ユーザーが自由に期間を選べることで、より深いデータ理解や体験型の学習が可能になります。

コメント

タイトルとURLをコピーしました