Zenn
🐻‍❄️

📈 Pandasの時系列データ処理と可視化

2025/04/06に公開
1

Pandasは、データの読み込みや加工だけでなく、時系列データの処理においても強力な機能を提供しています。
データ分析において、時間の流れに基づいたパターンの把握や予測は非常に重要です。

本記事では、Pandasを活用した時系列データ処理と可視化について、以下の5つのテーマに分けて詳しく解説します。

  1. 時系列データの作成と管理
  2. リサンプリングとシフト
  3. 移動平均と平滑化
  4. PandasとMatplotlibを活用したデータ可視化
  5. 時系列データ分析の実践例

1️⃣ 時系列データの作成と管理

Pandasでは、date_range() を用いて日付データを簡単に作成できます。
時系列データは、DatetimeIndex として管理することで、フィルタリングやリサンプリングが効率的に行えます。

🔹 date_range() での日付データ作成

import pandas as pd

# 日付データの生成
date_range = pd.date_range(start='2023-01-01', end='2023-01-10', freq='D')
print(date_range)

🖥️ 実行結果

DatetimeIndex(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04',
               '2023-01-05', '2023-01-06', '2023-01-07', '2023-01-08',
               '2023-01-09', '2023-01-10'],
              dtype='datetime64[ns]', freq='D')

🔹 日付データをインデックスにする

# 売上データの作成
data = {'売上': [300, 350, 400, 450, 420, 380, 410, 390, 360, 370]}
df = pd.DataFrame(data, index=date_range)
print(df)

🖥️ 実行結果

             売上
2023-01-01  300
2023-01-02  350
2023-01-03  400
2023-01-04  450
2023-01-05  420
2023-01-06  380
2023-01-07  410
2023-01-08  390
2023-01-09  360
2023-01-10  370

🔹 日付データのフィルタリング

# 2023年1月3日以降のデータ
print(df['2023-01-03':])

🖥️ 実行結果

             売上
2023-01-03  400
2023-01-04  450
2023-01-05  420
2023-01-06  380
2023-01-07  410
2023-01-08  390
2023-01-09  360
2023-01-10  370

2️⃣ リサンプリングとシフト

リサンプリング (Resampling) とシフト (Shift) は、時系列データの分析で重要なテクニックです。

🔹 リサンプリング

データを指定した期間ごとに集計できます。

# 月ごとの合計
print(df.resample('M').sum())

🖥️ 実行結果

              売上
2023-01-31  3830

🔹 シフト (Shift)

データを前後にずらすことで、過去データや未来データを活用できます。

# 1日前のデータを取得
df['前日'] = df['売上'].shift(1)
print(df)

🖥️ 実行結果

             売上    前日
2023-01-01  300    NaN
2023-01-02  350  300.0
2023-01-03  400  350.0
2023-01-04  450  400.0
2023-01-05  420  450.0
2023-01-06  380  420.0
2023-01-07  410  380.0
2023-01-08  390  410.0
2023-01-09  360  390.0
2023-01-10  370  360.0

3️⃣ 移動平均と平滑化

時系列データでは、変動が激しい場合に移動平均を用いてデータの傾向を把握するのが一般的です。

# 3日間の移動平均
df['移動平均'] = df['売上'].rolling(window=3).mean()
print(df)

🖥️ 実行結果

             売上     前日        移動平均
2023-01-01  300    NaN         NaN
2023-01-02  350  300.0         NaN
2023-01-03  400  350.0  350.000000
2023-01-04  450  400.0  400.000000
2023-01-05  420  450.0  423.333333
2023-01-06  380  420.0  416.666667
2023-01-07  410  380.0  403.333333
2023-01-08  390  410.0  393.333333
2023-01-09  360  390.0  386.666667
2023-01-10  370  360.0  373.333333

🔹 .ewm() での指数平滑

指数平滑は、直近のデータに重点を置き、過去のデータの影響を減らした移動平均手法です。

# 指数平滑の計算
df['指数平滑'] = df['売上'].ewm(span=3, adjust=False).mean()
print(df)

🖥️ 実行結果

             売上     前日        移動平均        指数平滑
2023-01-01  300    NaN         NaN  300.000000
2023-01-02  350  300.0         NaN  325.000000
2023-01-03  400  350.0  350.000000  362.500000
2023-01-04  450  400.0  400.000000  406.250000
2023-01-05  420  450.0  423.333333  413.125000
2023-01-06  380  420.0  416.666667  396.562500
2023-01-07  410  380.0  403.333333  403.281250
2023-01-08  390  410.0  393.333333  396.640625
2023-01-09  360  390.0  386.666667  378.320312
2023-01-10  370  360.0  373.333333  374.160156

4️⃣ PandasとMatplotlibを活用したデータ可視化

データの可視化は、時系列データのトレンドやパターンを理解する上で非常に重要です。

import matplotlib.pyplot as plt

df['売上'].plot(label='売上', marker='o')
df['移動平均'].plot(label='移動平均', linestyle='--')
plt.title('売上と移動平均')
plt.xlabel('日付')
plt.ylabel('売上')
plt.legend()
plt.show()

🖥️ 実行結果
➡️ 売上データと移動平均が同時に表示され、傾向が視覚的に理解できます。

5️⃣ 時系列データ分析の実践例

最後に、これまでのテクニックを活用して、実践的なデータ分析の流れを紹介します。

🔹 売上データの分析フロー

# データの読み込み
data = pd.read_csv('sales_data.csv', index_col='日付', parse_dates=True)

# データの可視化
data['売上'].plot(title='売上データの推移')
plt.show()

# 移動平均の計算
data['移動平均'] = data['売上'].rolling(window=7).mean()

# リサンプリング
monthly_sales = data['売上'].resample('M').sum()
print(monthly_sales)

sales_data.csv

日付,売上
2023-01-01,300
2023-01-02,350
2023-01-03,400
2023-01-04,450
2023-01-05,420
2023-01-06,380
2023-01-07,410
2023-01-08,390
2023-01-09,360
2023-01-10,370
2023-01-11,390
2023-01-12,420
2023-01-13,430
2023-01-14,400
2023-01-15,410
2023-01-16,450
2023-01-17,470
2023-01-18,490
2023-01-19,500
2023-01-20,480

🖥️ 実行結果

🎯 まとめ

本記事では、Pandasを活用した時系列データ処理と可視化について、以下の内容を詳しく解説しました。
✅ 日付データの作成と管理
✅ データのリサンプリングとシフト
✅ 移動平均と指数平滑
✅ PandasとMatplotlibを活用したデータ可視化
✅ 実践的なデータ分析フロー

これらのテクニックを活用することで、データのトレンドや変化をより深く理解し、正確な意思決定に役立てることができます。


株式会社ONE WEDGE

【Serverlessで世の中をもっと楽しく】 ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
https://onewedge.co.jp/

1

Discussion

ログインするとコメントできます