こんにちは、JS2IIUです。
今回は時系列データの分析に役立つテクニックを紹介していきます。今回もよろしくお願いします。
はじめに
データを扱う上で「時系列データ」はとても重要なテーマです。日ごとの売上や月ごとのアクセス数など、時間の流れとともに変化するデータは、傾向を読み取ることで意思決定に役立てることができます。
本記事では、PythonとStreamlitを使って、時系列データをグラフに表示し、さらにトレンドライン(傾向線)を追加する方法を、初心者向けにわかりやすく解説します。
時系列データとは?
「時系列データ」とは、時間の経過とともに観測されたデータのことです。たとえば、以下のようなデータが当てはまります:
- 毎日の気温の記録
- 月ごとの売上高
- 時間ごとのセンサーデータ
こうしたデータに対してトレンドラインを引くことで、全体として上昇傾向にあるのか、下降傾向にあるのかを視覚的に確認することができます。
開発環境の準備
まず、必要なPythonライブラリをインストールしましょう。以下のコマンドをターミナル(またはコマンドプロンプト)で実行してください:
pip install streamlit pandas numpy plotly scipyこれで、データ処理に使うpandasやnumpy、グラフ描画に使うplotly、回帰分析に使うscipyなどが使えるようになります。
サンプルデータの作成
次に、時系列データのサンプルを作成します。今回は、ランダムな値を累積した「架空の売上データ」のようなデータを使います。
import pandas as pd
import numpy as np
# 乱数のシードを固定(毎回同じ結果が出るように)
np.random.seed(0)
# 30日分の日付データを作成
dates = pd.date_range(start="2025-04-30", periods=30)
# ランダムな数値を累積して値を生成
values = np.random.normal(loc=100, scale=10, size=30)
# DataFrameにまとめる
df = pd.DataFrame({'Date': dates, 'Value': values})これで、日付と数値からなる時系列データが作成できました。
出力例:
Date Value
0 2025-04-30 117.640523
1 2025-05-01 104.001572
2 2025-05-02 109.787380
3 2025-05-03 122.408932
4 2025-05-04 118.675580
5 2025-05-05 90.227221
6 2025-05-06 109.500884
7 2025-05-07 98.486428
8 2025-05-08 98.967811
9 2025-05-09 104.105985
10 2025-05-10 101.440436
11 2025-05-11 114.542735
12 2025-05-12 107.610377
13 2025-05-13 101.216750
14 2025-05-14 104.438632
15 2025-05-15 103.336743
16 2025-05-16 114.940791
17 2025-05-17 97.948417
18 2025-05-18 103.130677
19 2025-05-19 91.459043
20 2025-05-20 74.470102
21 2025-05-21 106.536186
22 2025-05-22 108.644362
23 2025-05-23 92.578350
24 2025-05-24 122.697546
25 2025-05-25 85.456343
26 2025-05-26 100.457585
27 2025-05-27 98.128161
28 2025-05-28 115.327792
29 2025-05-29 114.693588Streamlitで時系列グラフを表示
次に、このデータをStreamlitを使って表示してみましょう。Streamlitのファイル(たとえば app.py)を以下のように作成します。
import streamlit as st
import pandas as pd
import numpy as np
import plotly.graph_objects as go
# サンプルデータの生成(前のステップと同じ)
np.random.seed(0)
dates = pd.date_range(start="2025-04-30", periods=30)
values = np.random.normal(loc=100, scale=10, size=30)
df = pd.DataFrame({'Date': dates, 'Value': values})
st.title("時系列データの可視化")
# 折れ線グラフの表示
st.line_chart(df.set_index("Date"))このコードを保存して、以下のコマンドで実行します:
streamlit run app.pyブラウザが開き、30日分の時系列データが折れ線グラフとして表示されます。
トレンドラインを追加する
次に、このグラフに「トレンドライン」を追加してみましょう。トレンドラインは、データの傾向(上昇・下降)を線形回帰によって求めることができます。
ステップ1:トレンドラインの計算
scipy.stats の linregress を使って、線形回帰を計算します。
from scipy.stats import linregress
# x軸に使う数値(0, 1, 2, ..., 29)
x = np.arange(len(df))
# 線形回帰の実行
slope, intercept, _, _, _ = linregress(x, df["Value"])
# 回帰直線の値を計算
trend = intercept + slope * x
# DataFrameに追加
df["Trend"] = trendステップ2:グラフにトレンドラインを追加
plotly.graph_objects を使うと、複数の線を重ねたグラフを作成できます。
fig = go.Figure()
# 実データの折れ線グラフ
fig.add_trace(go.Scatter(x=df["Date"], y=df["Value"], mode="lines", name="値"))
# トレンドライン
fig.add_trace(go.Scatter(x=df["Date"], y=df["Trend"], mode="lines", name="トレンドライン", line=dict(dash='dash')))
# タイトルとレイアウトの設定
fig.update_layout(title="時系列データとトレンドライン", xaxis_title="日付", yaxis_title="値")
# Streamlitで表示
st.plotly_chart(fig)完成したStreamlitアプリの全コード
以下は、トレンドライン付きの時系列グラフを表示するStreamlitアプリの全体コードです。
# app.py
import streamlit as st
import pandas as pd
import numpy as np
import plotly.graph_objects as go
from scipy.stats import linregress
# データ生成
np.random.seed(0)
dates = pd.date_range(start="2025-04-30", periods=30)
values = np.random.normal(loc=100, scale=10, size=30)
df = pd.DataFrame({'Date': dates, 'Value': values})
# トレンドラインの計算
x = np.arange(len(df))
slope, intercept, _, _, _ = linregress(x, df["Value"])
df["Trend"] = intercept + slope * x
# グラフ作成
fig = go.Figure()
fig.add_trace(go.Scatter(x=df["Date"], y=df["Value"], mode="lines", name="値"))
fig.add_trace(go.Scatter(x=df["Date"], y=df["Trend"], mode="lines", name="トレンドライン", line=dict(dash='dash')))
fig.update_layout(title="時系列データとトレンドライン", xaxis_title="日付", yaxis_title="値")
# Streamlitアプリ表示
st.title("時系列データの分析:トレンドラインの表示")
st.plotly_chart(fig)実行コマンド:
streamlit run app.py応用ポイント(おまけ)
このアプリはさらに発展させることも可能です:
- 移動平均線を追加して、よりなめらかな傾向を表示する
- 日付範囲スライダーを使って、任意の期間に絞って表示する
- CSVファイルのアップロード機能を使って、ユーザー自身のデータを分析できるようにする
まとめ
この記事では、Streamlitを使って時系列データを可視化し、トレンドラインを表示する方法を解説しました。
トレンドラインは、データの傾向を視覚的に理解するうえでとても有用な手法です。Streamlitと組み合わせれば、Pythonの知識だけで簡単にインタラクティブな分析ツールを作成できます。
参考リンク
最後に書籍のPRです。
24年9月に出版された「ハイパーモダンPython-信頼性の高いワークフローを構築するモダンテクニック」、Claudio Jolowicz著、嶋田、鈴木訳。開発環境の構築、プロジェクトの管理、テストに関して実践的な内容でとても参考になる一冊です。Poetryについても詳しく説明されています。ぜひ手に取ってみてください。
最後まで読んでいただきありがとうございます。

