こんにちは、JS2IIUです。
今回はStreamlit上で時系列データ予測ができるアプリを構築していきます。MetaのProphetライブラリを活用した予測です。今回もよろしくお願いします。
1. はじめに
本記事は、Pythonで時系列データを予測するためのライブラリ「Prophet」を使って、デーモアプリをStreamlitで作成する手順を解説します。
時系列データは「時間の流れとともに変化するデータ」で、売上や気温、Webアクセス数など、実生活の認識にも関わる重要なデータの一種です。
2. Prophetとは?
ProphetはMeta (Facebook)が開発した、時系列データを簡単に予測できるライブラリです。特徴は以下のとおりです。
- Python、Rで利用可
- データは
ds(日付),y(値)の2列だけで使用可 - 簡単なAPIで使える
- トレンド、季節性、休日などをモデルに反映可
- 簡易なティューニングなしでも使いやすい
本格的な予測機能を持つため、ビジネスでも中角の分析ツールとして使われています。
3. 必要なライブラリのインストール
Python環境を用意したら、以下のコマンドでライブラリをインストールします:
pip install streamlit prophet pandas matplotlib注意:Prophetは背後で
pystanやcmdstanpyなどを使用しているため、環境によっては設定エラーになる場合があります。conda環境などを使うと広範囲に対応できます。
4. データの準備
Prophetで使うデータは、日付ds (はDateTime型)と値yの2列だけを持つ細長いテーブルのイメージです。
例:CSVファイルにdate、valueの列がある場合
import pandas as pd
df = pd.read_csv("sample.csv")
df.rename(columns={"date": "ds", "value": "y"}, inplace=True)
df['ds'] = pd.to_datetime(df['ds']) # 日付はdatetime型に5. Prophetによる基本的な予測
ステップ 1:モデルの作成
from prophet import Prophet
model = Prophet()
model.fit(df)ステップ 2:未来日のデータを生成
future = model.make_future_dataframe(periods=30) # 30日分を予測ステップ 3:予測の実行
forecast = model.predict(future)ステップ 4:予測結果の表示
model.plot(forecast)6. Prophetの主な機能
季節性の組み込み
- Prophetは自動的に年次、月次の季節性を検出
- 例:
model = Prophet(yearly_seasonality=True, weekly_seasonality=True, daily_seasonality=False)Seasonality, Holiday Effects, And Regressors | Prophet
休日の指定
- 国ごとの休日カレンダーを追加可
model.add_country_holidays(country_name='JP')Seasonality, Holiday Effects, And Regressors | Prophet
追加の季節性を自作
model.add_seasonality(name='monthly', period=30.5, fourier_order=5)要素分解プロット
fig2 = model.plot_components(forecast)7. Streamlitで時系列予測アプリを作成
Streamlitを使うと、ライブラリの内部処理を技術者でなくても操作できるようになります。
以下にベーシックなアプリの例を示します:
import streamlit as st
import pandas as pd
from prophet import Prophet
import matplotlib.pyplot as plt
st.title("時系列予測アプリ")
uploaded_file = st.file_uploader("CSVファイルをアップロード", type="csv")
if uploaded_file is not None:
df = pd.read_csv(uploaded_file)
df.rename(columns={"date": "ds", "value": "y"}, inplace=True)
df['ds'] = pd.to_datetime(df['ds'])
period = st.slider("予測期間(日)", min_value=1, max_value=365, value=30)
model = Prophet()
model.add_country_holidays(country_name='JP')
model.fit(df)
future = model.make_future_dataframe(periods=period)
forecast = model.predict(future)
fig1 = model.plot(forecast)
st.pyplot(fig1)
fig2 = model.plot_components(forecast)
st.pyplot(fig2)
入力させるサンプルCSVデータ
こちらにCSVデータのサンプルをおきます。名前をつけて保存してください。
ds,y
2025-01-01,158
2025-01-02,138
2025-01-03,154
2025-01-04,124
2025-01-05,129
2025-01-06,130
2025-01-07,131
2025-01-08,141
2025-01-09,134
2025-01-10,154
2025-01-11,149
2025-01-12,170
2025-01-13,159
2025-01-14,150
2025-01-15,172
2025-01-16,144
2025-01-17,151
2025-01-18,133
2025-01-19,133
2025-01-20,141
2025-01-21,178
2025-01-22,179
2025-01-23,158
2025-01-24,148
2025-01-25,156
2025-01-26,132
2025-01-27,167
2025-01-28,157
2025-01-29,125
2025-01-30,137
このデータを生成するためのPythonコードも示します。
import pandas as pd
import numpy as np
# 日付を生成
date_range = pd.date_range(start="2025-01-01", periods=30, freq="D")
# 適当な変動を加えた数値データを生成
values = np.random.randint(120, 180, size=30)
# DataFrame作成
df = pd.DataFrame({
"ds": date_range,
"y": values
})
# CSVとして保存
df.to_csv("sample_timeseries.csv", index=False)
8. まとめ
- Prophetは、データの予測を簡単に行うことができる元Facebook製の強力なライブラリ
- Streamlitを使うことで、実用的な予測Webアプリをコード少なめで完成できる
- 少しのコード修正で、多様なビジネスに応用可能
9. 参考リンク
最後に書籍のPRです。
24年11月に第3版が発行された「scikit-learn、Keras、TensorFlowによる実践機械学習 第3版」、Aurélien Géron 著。下田、牧、長尾訳。機械学習のトピックスについて手を動かしながら網羅的に学べる書籍です。ぜひ手に取ってみてください。
最後まで読んでいただきありがとうございます。


コメント