
Pythonと時系列データ分析の重要性
時系列データは、時間の経過とともに変化するデータを指します。例えば、株価や気温、売上などが挙げられます。これらのデータは、時間の流れによって変化するため、分析手法や予測モデルの構築には時系列解析が必要となります。
Pythonは、時系列データ分析に必要なライブラリが豊富に揃っているため、データ分析において重要なツールとなっています。Pythonを用いることで、時系列データの取り扱いや前処理、可視化、予測モデルの構築が容易になります。
Pythonでの時系列データの取り扱い方
Pythonで時系列データを取り扱うためには、pandasライブラリを使用します。pandasライブラリには、時系列データを扱うためのクラスとして、datetimeクラスやTimestampクラスがあります。
datetimeクラスは、年月日時分秒を扱えるクラスで、以下のようにして生成します。
1 2 3 | import datetime dt = datetime.datetime( 2021 , 7 , 1 , 12 , 0 , 0 ) print (dt) |
Timestampクラスは、datetimeクラスと同様に時間を扱えるクラスですが、より高速に処理ができるように設計されています。以下のようにして生成します。
1 2 3 | import pandas as pd ts = pd.Timestamp( 2021 , 7 , 1 , 12 , 0 , 0 ) print (ts) |
Pythonを用いた時系列データの前処理方法
時系列データの前処理には、欠損値の補完や異常値の除外、周期性の除去などがあります。pandasライブラリには、これらの処理を行うためのメソッドが豊富に揃っています。
例えば、以下のようにして、時系列データの欠損値を補完することができます。
1 2 3 4 5 6 7 8 9 | 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ライブラリを用いて、時系列データの折れ線グラフを描画することができます。
1 2 3 4 5 6 7 8 9 | 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モデルを構築することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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モデルを用いて天気の予測を行うことができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | 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ライブラリを使用することで、これらの処理をより効率的に行うことができます。これらのツールを駆使して、時系列データ分析に取り組んでみてはいかがでしょうか。