Я пытаюсь смоделировать временной ряд цены акций с помощью следующего кода:
import opendatasets as od
import numpy as np
import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import tensorflow as tf
from sklearn.preprocessing import StandardScaler
from sklearn.inspection import permutation_importance
import statsmodels.api as sm
from statsmodels.tsa.stattools import acf, pacf
import datetime
import warnings
warnings.filterwarnings('ignore')
и я получил следующую структуру:
date close
0 2021-01-04 04:00:00-05:00 133.740000
1 2021-01-04 05:00:00-05:00 133.600000
2 2021-01-04 06:00:00-05:00 134.220000
3 2021-01-04 07:00:00-05:00 133.750000
4 2021-01-04 08:00:00-05:00 134.020000
... ... ...
4070 2021-12-30 13:30:00-05:00 178.975006
4071 2021-12-30 14:30:00-05:00 178.960007
4072 2021-12-30 15:30:00-05:00 178.250000
4073 2021-12-30 16:00:00-05:00 178.190000
4074 2021-12-30 17:00:00-05:00 177.980000
В результате у меня есть
0 int64
dtype: object
Однако когда я пытаюсь разделить временной ряд для обучения и тестирования модели MLP и подогнать его следующим образом:
# splitting time series to train and test subsets
y_train = df.iloc[:-8766, :].copy()
y_test = df.iloc[-8766:, :].copy()
# Unobserved Components model definition
model = sm.tsa.UnobservedComponents(y_train,
level='dtrend',
irregular=True,
stochastic_level = False,
stochastic_trend = False,
stochastic_freq_seasonal = [False, False, False],
freq_seasonal=[{'period': 24, 'harmonics': 1},
{'period': 168, 'harmonics': 1},
{'period': 8766, 'harmonics': 2}])
# fitting model to train data
model_results = model.fit()
# printing statsmodels summary for model
print(model_results.summary())
Я получил следующую ошибку:
ValueError: Pandas data cast to numpy dtype of object. Check input data with np.asarray(data).
Я попытался преобразовать столбец date
из строки в дату, но безуспешно.
np.asarray(df)
возвращает следующее
array([['2021-01-04 04:00:00-05:00', 133.740000]
['2021-01-04 05:00:00-05:00', 133.600000]
['2021-01-04 06:00:00-05:00', 134.220000]
...
['2021-31-12 17:00:00-05:00', 177.980000]], dtype = object)
Я не знаю, проблема ли это в столбце даты или закрытия и что делать, чтобы это исправить.
Та же ошибка ValueError: Pandas data cast to numpy dtype of object. Check input data with np.asarray(data).
Более того, при выполнении df['date'].dtype
я получил dtype('O')
AFAIR, «дата» должна быть индексом (даты или времени) кадра данных, а не обычным столбцом кадра данных.
Насколько я понимаю, dtype неоднороден (datetime или, возможно, даже строка для первого столбца и float для второго). Можете ли вы вместо этого преобразовать столбец datetime в столбец с плавающей запятой (представляющий продолжительность в часах)?
Если проблема не устранена после использования df['date'] = pd.to_datetime(df['date'])
, возможно, в столбце 'date'
есть некоторые значения, которых нет в 'datetime' dtype
. Вы можете идентифицировать эти значения по следующему коду:
df['date'] = pd.to_datetime(df['date'], errors='coerce', utc=True)
Это установит эти значения на NaT(Not a Time)
. После этого вы можете обработать недостающие значения.
если
df['date'].dtype
возвращаетсяobject
, сначала попробуйdf['date'] = pd.to_datetime(df['date'])