Я решаю проблему, когда я извлекаю данные всех ProductID, а затем перебираю фрейм данных, чтобы посмотреть на уникальные ProductID для выполнения набора функций.
Здесь item - это ProductID / Номер изделия:
#looping through the big dataframe to get a dataframe pertaining to the unique ID
for item in df2['Item Nbr'].unique():
# fetch item data
df = df2.loc[df2['Item Nbr'] == item]
И затем у меня есть набор пользовательских python функций: Итак, когда я прохожу первый l oop (для одного productID) все прекрасно работает, но когда он проходит через l oop и переходит к следующему Product ID, я уверен, что данные, которые он извлекает, верны, но я получаю эту ошибку:
Найденный массив с 0 объектами (shape = (268215, 0)), в то время как StandardScaler требует минимум 1.
Хотя формы X_train и y_train являются: (268215, 6) (268215,)
Фрагмент кода: (Дополнительная информация)
Это огромный файл для показа. Но исходный большой фрейм данных имеет
[362988 строк x 7 столбцов] - для первого продукта и [268215 строк x 7 столбцов] - для второго продукта
Расширение кода:
большой фрейм данных с двумя уникальными ID продукта
biqQueryData = get_item_data (verbose = True)
итерация по каждому уникальному ID продукта для извлечения подмножества фреймов данных, которые относятся к идентификатору продукта
для элемента в biqQueryData ['Item Nbr']. Unique (): df = biqQueryData.loc [biqQueryData ['Item Nbr'] == item]
try:
df_model = model_all_stores(df, item, n_jobs=n_jobs,
train_model=train_model,
test_model=test_model,
tune_model=tune_model,
export_model=export_model,
output=export_demand)
функция model_all_stores
def model_all_stores(df_raw, item_nbr, n_jobs=1, train_model=False,
test_model=False, export_model=False, output=False,
tune_model=False):
"""Models demand for specified item.
Predict the demand of specified item for all stores. Does not
filter for predict hidden demand (the function get_hidden_demand
should be used for this.)
Output: data frame output
"""
# ML model hyperparameters
impute_with = 'median'
n_estimators = 100
min_samples_split = 3
min_samples_leaf = 3
max_depth = None
# load data and subset traited and valid
dfnew = subset_traited_valid(df_raw)
# get known demand
df_ma = get_demand(dfnew)
# impute missing sales data
median_sales = df_ma['Sales Qty'].median()
df_ma['Sales Qty'] = df_ma['Sales Qty'].fillna(median_sales)
# add moving average features
df_ma = df_ma.sort_values('Gregorian Days')
window_list = [7 * x for x in [1, 2, 4, 8, 16, 52]]
for w in window_list:
grouped = df_ma.groupby('Store Nbr')['Sales Qty'].shift(1)
rolling = grouped.rolling(window=w, min_periods=1).mean()
df_ma['MA' + str(w)] = rolling.reset_index(0, drop=True)
X_full = df_ma.loc[:, 'MA7':].values
#print(X_full.shape)
# use full data if not testing/tuning
rows_for_model = df_ma['Known Demand'].notnull()
X = df_ma.loc[rows_for_model, 'MA7':].values
y = df_ma.loc[rows_for_model, 'Known Demand'].values
X_train, y_train = X, y
print(X_train.shape, y_train.shape)
if train_model:
# instantiate model components
imputer = Imputer(missing_values='NaN', strategy=impute_with, axis=0)
scale = StandardScaler()
pca = PCA()
forest = RandomForestRegressor(n_estimators=n_estimators,
max_features='sqrt',
min_samples_split=min_samples_split,
min_samples_leaf=min_samples_leaf,
max_depth=max_depth,
criterion='mse',
random_state=42,
warm_start=True,
n_jobs=n_jobs)
# pipeline for model
pipeline_steps = [('imputer', imputer),
('scale', scale),
('pca', pca),
('forest', forest)]
regr = Pipeline(pipeline_steps)
regr.fit(X_train, y_train)
Здесь происходит сбой
Фрагмент данных:
biqQueryData (весь Dataframe)
364174,1084,2019-12-12 ,,,, 0.0
.....
364174,1084,2019-12-13 ,,,, 0.0
188880,397752,19421,2020-02-04,2.0,1.0,1.0,0.0
.....
188881,397752,19421,2020-02-05,2.0 , 1,0,1,0,0,0
Подмножество DF 1:
364174,1084,2019- 12-12 ,,,, 0,0 .....
364174,1084,2019-12-13 ,,,, 0,0
Подмножество DF 2:
188880 , 397752,19421,2020-02-04,2.0,1.0,1.0,0.0
.....
188881,397752,19421,2020-02-05,2.0,1.0 , 1.0,0.0
Любая помощь здесь будет отличной! Спасибо