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ライブラリを使用することで、これらの処理をより効率的に行うことができます。これらのツールを駆使して、時系列データ分析に取り組んでみてはいかがでしょうか。