FeatureTools — Как добавить 2 столбца вместе?

Я застрял. Используя Featuretools, все, что я хочу сделать, это создать новый столбец, который суммирует два столбца из моего набора данных, создавая своего рода составную функцию. Сделайте это для всех столбцов в моем наборе данных.

Мой код выглядит так:

# Define the function
def feature_engineering_dataset(df):

    es = ft.EntitySet(id = 'stockdata')
    
    # Make the "Date" index an actual column cuz defining it as the index below throws
    # a "can't find Date in index" error for some reason.
    df = df.reset_index()

    # Save some columns not used in Featuretools to concat back later
    dates = df['Date']
    tickers = df['Ticker']
    dailychange = df['DailyChange']
    classes = df['class']

    dataframe = df.drop(['Date', 'Ticker', 'DailyChange', 'class'],axis=1)

    # Define the entity
    es.entity_from_dataframe(entity_id='data', dataframe=dataframe, index='Date') # Won't find Date so uses a numbered index. We'll re-define date as index later

    # Pesky warnings
    warnings.filterwarnings("ignore", category=RuntimeWarning) 
    warnings.filterwarnings("once", category=ImportWarning)

    # Run deep feature synthesis
    feature_matrix, feature_defs = ft.dfs(n_jobs=-2,entityset=es, target_entity='data', 
                                           chunk_size=0.015,max_depth=2,verbose=True,
                    agg_primitives = ['sum'],
                    trans_primitives = []
                    ) 

    # Now re-add previous columnes because featuretools...
    df = pd.concat([dates, tickers, feature_matrix, dailychange, classes], axis=1)
    
    df = df.set_index(['Date'])
    
    # Return our new dataset!
    return(df)

# Now run that defined function
df = feature_engineering_dataset(df)

Я не уверен, что на самом деле здесь происходит, но я определил глубину 2, так что я понимаю, что для каждой комбинации пар столбцов в моем наборе данных будет создан новый столбец, который суммирует два вместе?

Моя исходная форма данных имеет 3101 столбец, и когда я запускаю эту команду, она говорит Built 3098 features, а окончательный df имеет 3098 столбцов после объединения, что неправильно, он должен иметь все мои исходные функции, ПЛЮС спроектированные.

Как я могу достичь того, что я после? Примеры на странице featuretools и в документации по API чрезвычайно запутаны и во многом связаны с устаревшими примерами, такими как транс-примитивы time_since_last и другими вещами, которые, похоже, здесь не применимы. Спасибо!


person Matt Wilson    schedule 12.07.2020    source источник


Ответы (1)


Спасибо за вопрос. Вы можете создать новый столбец, суммирующий два столбца, используя примитив преобразования add_numeric. Я приведу быстрый пример, используя эти данные.

id                time      open      high       low     close
 0 2019-07-10 07:00:00  1.053362  1.053587  1.053147  1.053442
 1 2019-07-10 08:00:00  1.053457  1.054057  1.053457  1.053987
 2 2019-07-10 09:00:00  1.053977  1.054192  1.053697  1.053917
 3 2019-07-10 10:00:00  1.053902  1.053907  1.053522  1.053557
 4 2019-07-10 11:00:00  1.053567  1.053627  1.053327  1.053397

Сначала мы создаем набор сущностей для данных.

import featuretools as ft

es = ft.EntitySet('stockdata')

es.entity_from_dataframe(
    entity_id='data',
    dataframe=df,
    index='id',
    time_index='time',
)

Теперь мы применяем DFS, используя примитив преобразования, чтобы добавить числовые столбцы.

feature_matrix, feature_defs = ft.dfs(
    entityset=es,
    target_entity='data',
    trans_primitives=['add_numeric'],
)

Затем новые инженерные функции возвращаются вместе с исходными.

feature_matrix
        open      high       low     close  close + high  low + open  high + low  close + open  high + open  close + low
id
0   1.053362  1.053587  1.053147  1.053442      2.107029    2.106509    2.106734      2.106804     2.106949     2.106589
1   1.053457  1.054057  1.053457  1.053987      2.108044    2.106914    2.107514      2.107444     2.107514     2.107444
2   1.053977  1.054192  1.053697  1.053917      2.108109    2.107674    2.107889      2.107894     2.108169     2.107614
3   1.053902  1.053907  1.053522  1.053557      2.107464    2.107424    2.107429      2.107459     2.107809     2.107079
4   1.053567  1.053627  1.053327  1.053397      2.107024    2.106894    2.106954      2.106964     2.107194     2.106724

Вы можете увидеть список всех встроенных примитивов, вызвав функцию ft.list_primitives().

person Jeff Hernandez    schedule 15.07.2020
comment
Благодарю вас! Я знал, что был близок. Я добавлю ft.list_primitives() в свой рабочий процесс, чтобы ознакомиться с преобразованиями. - person Matt Wilson; 16.07.2020