Найденный массив с 0 функциями (shape = (268215, 0)), в то время как StandardScaler требует минимум 1 - PullRequest
0 голосов
/ 12 марта 2020

Я решаю проблему, когда я извлекаю данные всех 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

Любая помощь здесь будет отличной! Спасибо

...