Pythonで時系列データを活用しよう!基本から応用まで

Pythonと時系列データ分析の重要性

時系列データは、時間の経過とともに変化するデータを指します。例えば、株価や気温、売上などが挙げられます。これらのデータは、時間の流れによって変化するため、分析手法や予測モデルの構築には時系列解析が必要となります。

Pythonは、時系列データ分析に必要なライブラリが豊富に揃っているため、データ分析において重要なツールとなっています。Pythonを用いることで、時系列データの取り扱いや前処理、可視化、予測モデルの構築が容易になります。

Pythonでの時系列データの取り扱い方

Pythonで時系列データを取り扱うためには、pandasライブラリを使用します。pandasライブラリには、時系列データを扱うためのクラスとして、datetimeクラスやTimestampクラスがあります。

datetimeクラスは、年月日時分秒を扱えるクラスで、以下のようにして生成します。

import datetime
dt = datetime.datetime(2021, 7, 1, 12, 0, 0)
print(dt)

Timestampクラスは、datetimeクラスと同様に時間を扱えるクラスですが、より高速に処理ができるように設計されています。以下のようにして生成します。

import pandas as pd
ts = pd.Timestamp(2021, 7, 1, 12, 0, 0)
print(ts)

Pythonを用いた時系列データの前処理方法

時系列データの前処理には、欠損値の補完や異常値の除外、周期性の除去などがあります。pandasライブラリには、これらの処理を行うためのメソッドが豊富に揃っています。

例えば、以下のようにして、時系列データの欠損値を補完することができます。

import pandas as pd
# 時系列データの生成
date_range = pd.date_range(start='2021-07-01', end='2021-07-10')
# 欠損値を含む時系列データの生成
data = [1, None, 3, 4, 5, None, 7, 8, None, 10]
ts = pd.Series(data, index=date_range)
# 欠損値を補完
ts = ts.interpolate()
print(ts)

Pythonでの時系列データの可視化方法

時系列データの可視化には、matplotlibライブラリやseabornライブラリを使用します。これらのライブラリを用いることで、折れ線グラフやヒストグラム、散布図などのグラフを描画することができます。

以下のようにして、matplotlibライブラリを用いて、時系列データの折れ線グラフを描画することができます。

import pandas as pd
import matplotlib.pyplot as plt
# 時系列データの生成
date_range = pd.date_range(start='2021-07-01', end='2021-07-10')
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ts = pd.Series(data, index=date_range)
# 折れ線グラフを描画
plt.plot(ts.index, ts.values)
plt.show()

Pythonを用いた時系列データの予測モデルの作り方

時系列データの予測モデルの構築には、ARIMAモデルやLSTMモデルなどがあります。これらのモデルは、pandasライブラリやtensorflowライブラリを使用して構築することができます。

以下のようにして、pandasライブラリを用いて、ARIMAモデルを構築することができます。

import pandas as pd
from statsmodels.tsa.arima.model import ARIMA  # 新しいARIMAモデルのインポートパス

# 時系列データの生成
date_range = pd.date_range(start='2021-07-01', end='2021-07-10')
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ts = pd.Series(data, index=date_range)

# ARIMAモデルの構築
model = ARIMA(ts, order=(1, 1, 1))  # .valuesは必要ありません
result = model.fit()

# 予測値の出力
print(result.forecast())

Pythonでの時系列データ分析の実例紹介

以下は、Pythonを用いた時系列データ分析の実例です。

天気予測

気象データは、時系列データの代表的な例の1つです。以下のようにして、pandasライブラリを用いて、気象データの時系列データを取得し、LSTMモデルを用いて天気の予測を行うことができます。

import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM

# データの取得
# 日付の範囲を指定して、日付リストを生成
date_rng = pd.date_range(start='2020-01-01', end='2020-12-31', freq='D')

# ランダムな気温データを生成
temperature = np.random.uniform(low=-10, high=35, size=(len(date_rng),))

# DataFrameを生成
df = pd.DataFrame({'Date': date_rng, 'Temperature': temperature})

# 'Date'カラムをインデックスに設定
df.set_index('Date', inplace=True)

# 気温の時系列データを取得
ts = df['Temperature']

# データの正規化
scaler = MinMaxScaler(feature_range=(0, 1))
ts_scaled = scaler.fit_transform(np.array(ts).reshape(-1, 1))

# 訓練データとテストデータの分割
train_size = int(len(ts_scaled) * 0.67)
test_size = len(ts_scaled) - train_size
train_data, test_data = ts_scaled[0:train_size,:], ts_scaled[train_size:len(ts_scaled),:]

# データセットの作成
def create_dataset(dataset, look_back=1):
    dataX, dataY = [], []
    for i in range(len(dataset)-look_back-1):
        a = dataset[i:(i+look_back), 0]
        dataX.append(a)
        dataY.append(dataset[i + look_back, 0])
    return np.array(dataX), np.array(dataY)

look_back = 3
trainX, trainY = create_dataset(train_data, look_back)
testX, testY = create_dataset(test_data, look_back)

# LSTMモデルの構築
# LSTMに渡すためにデータを[サンプル, タイムステップ, 特徴量]の形状に変更
trainX = np.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1))
testX = np.reshape(testX, (testX.shape[0], testX.shape[1], 1))

model = Sequential()
model.add(LSTM(4, input_shape=(look_back, 1)))  # タイムステップ数と特徴量の数をinput_shapeに指定
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')

# モデルの訓練
model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2)

# テストデータに対する予測
test_predict = model.predict(testX)
test_predict = scaler.inverse_transform(test_predict)
# 予測結果の出力
print(test_predict)

まとめ

Pythonを用いることで、時系列データの取り扱いや前処理、可視化、予測モデルの構築が容易になります。また、pandasライブラリやtensorflowライブラリを使用することで、これらの処理をより効率的に行うことができます。これらのツールを駆使して、時系列データ分析に取り組んでみてはいかがでしょうか。