【Streamlit】簡単な株価可視化アプリを作ってみよう

Streamlit
この記事は約9分で読めます。

こんにちは、JS2IIUです。
NISAをやっていて株価が気になってしまう方もいるかもしれません。StreamlitとWEB APIを組み合わせることで簡単に株価を表示するアプリが作成できます。今回もよろしくお願いします。

1. はじめに

この記事では、PythonとStreamlitを使って簡単な株価可視化アプリを作成する方法を、初心者にもわかりやすく解説していきます。

この記事のゴール:

  • 無料のAPIを使って株価データを取得し、
  • Streamlitでインタラクティブなグラフ表示アプリを作ること。

PythonやStreamlitにまだ不慣れな方でも、ステップバイステップで丁寧に解説していきますので、安心して読み進めてください。

2. 必要なツールとライブラリ

Pythonの準備

まずは、Pythonがパソコンにインストールされている必要があります。
インストールがまだの方は、以下の公式サイトから最新版をダウンロードしてください:

👉 Python公式サイト

必要なライブラリのインストール

以下のコマンドをターミナルやコマンドプロンプトで実行して、必要なライブラリをインストールします。

Bash
pip install streamlit pandas yfinance

それぞれのライブラリの役割:

ライブラリ名用途
streamlitWebアプリのUI構築
pandasデータの操作と加工
yfinanceYahoo! Financeから株価データを取得

3. 公開API(yfinance)を使って株価データを取得する

yfinanceとは?

yfinanceは、Yahoo! Financeから株価データを取得できるPythonライブラリです。無料で使え、使い方もシンプルなので、初心者におすすめです。

yfinance documentation — yfinance

株価データの取得例

以下のコードは、Apple(AAPL)の2023年の株価データを取得し、最初の5行を表示するものです。

Python
import yfinance as yf

# AAPL(Apple)の株価データを2023年の期間で取得
data = yf.download("AAPL", start="2023-01-01", end="2023-12-31")

# 最初の5行を表示
print(data.head())

出力結果は以下のような形式になります:

Plaintext
                 Open       High        Low      Close  Adj Close     Volume
Date                                                                        
2023-01-03  130.279999  130.899994  124.169998  125.0699  124.105438  112117500
2023-01-04  126.889999  127.830002  125.119995  126.3600  125.383148  89113600
...

他のAPIの選択肢(参考)

yfinance以外のAPIもぜひトライして見てください。それぞれ異なったサービスを提供しています。

API名特徴
Alpha Vantage無料プランあり・APIキー必要
IEX Cloud無料枠あり・リアルタイム対応
Finnhub経済ニュースも取得可能

4. Streamlitでアプリの土台を作る

Streamlitでは、PythonコードだけでWebアプリを作ることができます。

まずは、最小限のStreamlitアプリを作ってみましょう。

基本構造

Python
import streamlit as st

st.title("株価可視化アプリ")

ユーザー入力のUIを追加

Python
symbol = st.text_input("銘柄コードを入力してください(例:AAPL)", "AAPL")

これで、ユーザーが任意の銘柄コードを入力できるようになります。

さらに、日付の入力も追加できます:

Python
start_date = st.date_input("開始日", value=pd.to_datetime("2023-01-01"))
end_date = st.date_input("終了日", value=pd.to_datetime("2023-12-31"))

5. 株価データを可視化する

もっとも簡単な方法:st.line_chart

Python
import pandas as pd
import yfinance as yf
import streamlit as st

# ユーザー入力
symbol = st.text_input("銘柄コードを入力してください", "AAPL")
start_date = st.date_input("開始日", pd.to_datetime("2023-01-01"))
end_date = st.date_input("終了日", pd.to_datetime("2023-12-31"))

# データ取得
data = yf.download(symbol, start=start_date, end=end_date)

# 折れ線グラフ表示(終値)
st.line_chart(data["Close"])

銘柄コードを色々と変えてみましょう。データが読み込まれてグラフが更新されます。

カスタマイズ可能な方法:plotly

Python
import plotly.express as px

fig = px.line(data, x=data.index, y="Close", title=f"{symbol}の株価推移")
st.plotly_chart(fig)

6. 完成アプリの全体コード

以下は、これまでの内容をすべてまとめた完成コードです:

Python
import streamlit as st
import pandas as pd
import yfinance as yf
import plotly.express as px

# タイトル
st.title("📈 株価可視化アプリ")

# ユーザー入力
symbol = st.text_input("銘柄コードを入力してください(例:AAPL)", "AAPL")
start_date = st.date_input("開始日", pd.to_datetime("2023-01-01"))
end_date = st.date_input("終了日", pd.to_datetime("2023-12-31"))

# データ取得
if symbol:
    data = yf.download(symbol, start=start_date, end=end_date)

    if not data.empty:
        # カラムがMultiIndexの場合に対応(列名を平坦化)
        if isinstance(data.columns, pd.MultiIndex):
            data.columns = data.columns.get_level_values(0)

        st.write(f"表示中のデータ:{symbol}")
        st.dataframe(data)

        # グラフ描画
        fig = px.line(data, x=data.index, y="Close", title=f"{symbol}の終値推移")
        st.plotly_chart(fig)
    else:
        st.warning("データが取得できませんでした。銘柄コードを確認してください。")
  • yfinance.download() は複数銘柄に対応しており、銘柄を1つだけ渡してもMultiIndexになることがあります。
  • 今回のように、symbolが1つでも data.columns がMultiIndexのままになっていることがあるため、それを単層に変換してから使うのが安全です。

    7. Streamlitアプリの実行方法とTips

    アプリの起動方法

    保存したPythonファイル(例:stock_app.py)を、以下のコマンドで実行します:

    Bash
    streamlit run stock_app.py

    ブラウザが自動で開き、アプリが表示されます。

    よくあるエラーと対処法

    エラー内容対処法
    データが取得できない銘柄コードが間違っている可能性。例:日本株は7203.Tのように証券コード+.Tの形式
    モジュールがないpip installコマンドでモジュールを再インストールする

    8. おわりに

    この記事では、PythonとStreamlitを使って株価を可視化するシンプルなWebアプリを作成しました。

    学べたこと:

    • 株価データAPI(yfinance)の使い方
    • StreamlitでのUI作成とグラフ表示

    発展アイデア:

    • 移動平均線の追加
    • 出来高グラフの追加
    • 複数銘柄を比較表示

    興味がある方は、Streamlitの他のコンポーネントも活用して、さらに便利なアプリに進化させてみてください!

    9. 参考リンク

    最後に書籍のPRです。
    24年9月に出版された「ハイパーモダンPython-信頼性の高いワークフローを構築するモダンテクニック」、Claudio Jolowicz著、嶋田、鈴木訳。開発環境の構築、プロジェクトの管理、テストに関して実践的な内容でとても参考になる一冊です。Poetryについても詳しく説明されています。ぜひ手に取ってみてください。

    最後まで読んでいただきありがとうございます。

    コメント

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