前提・実現したいこと
このサイトを参考にLSTMで株価予測を試したいと思っているのですが、
発生している問題・エラーメッセージ
as_matrix()を使うと以下のようなエラーが表示されます。
Traceback (most recent call last): File "chart1.py", line 51, in <module> (X_train, y_train), (X_test, y_test) = train_test_split(df, test_size = 0.1, n_prev = length_of_sequences) File "chart1.py", line 42, in train_test_split X_train, y_train = _load_data(df.iloc[0:ntrn], n_prev) File "chart1.py", line 31, in _load_data docX.append(data.iloc[i:i+n_prev].as_matrix()) File "/mnt/c/sucripe/.local/lib/python3.8/site-packages/pandas/core/generic.py", line 5462, in __getattr__ return object.__getattribute__(self, name) AttributeError: 'Series' object has no attribute 'as_matrix'
該当のソースコード
def _load_data(data, n_prev = 50): docX, docY = [], [] for i in range(len(data)-n_prev): docX.append(data.iloc[i:i+n_prev].values()) docY.append(data.iloc[i+n_prev].values()) alsX = np.array(docX) alsY = np.array(docY) return alsX, alsY
ソースコード
import matplotlib.pyplot as plt import numpy as np import csv import pandas as pd df = pd.read_csv("stock.csv") #データを反転 df = df.iloc[::-1] df.index = range(len(df)) x = df['finish'] #カラムごとapply x = x.apply(lambda s: float(s.replace(',',''))) # 50日分のデータを1塊とした窓を作る def _load_data(data, n_prev = 50): docX, docY = [], [] for i in range(len(data)-n_prev): docX.append(data.iloc[i:i+n_prev].values()) docY.append(data.iloc[i+n_prev].values()) alsX = np.array(docX) alsY = np.array(docY) return alsX, alsY def train_test_split(df, test_size=0.1, n_prev = 50): ntrn = round(len(df) * (1 - test_size)) ntrn = int(ntrn) X_train, y_train = _load_data(df.iloc[0:ntrn], n_prev) X_test, y_test = _load_data(df.iloc[ntrn:], n_prev) return (X_train, y_train), (X_test, y_test) #株価の平均値で割ることで正規化を実施 df = x / x.mean() length_of_sequences = 50 (X_train, y_train), (X_test, y_test) = train_test_split(df, test_size = 0.1, n_prev = length_of_sequences) #確認 print("X_train = ",X_train.shape) print("y_train = ",y_train.shape) print("X_test = ",X_test.shape) print("y_test = ",y_test.shape)
試したこと
検索するとas_matrixが非推奨であるという記事を見つけたのでvalues()を試したのですが
TypeError: 'numpy.ndarray' object is not callable
となりました。。。
なお、関数をなくすと
X_train = (2196, 50)
y_train = (2196,)
X_test = (199, 50)
y_test = (199,)
となります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/28 02:05
2021/01/28 03:34