FeatureTools - Как сложить 2 столбца вместе? - PullRequest
0 голосов
/ 12 июля 2020

Я застрял. Все, что я хочу сделать с помощью 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, поэтому я понимаю, что для каждой комбинации пар столбцов в моем наборе данных он создаст новый столбец, который суммирует два вместе? говорит Built 3098 features, а окончательный df имеет 3098 столбцов после объединения, что неправильно, в нем должны быть все мои оригинальные функции, ПЛЮС спроектированные.

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

1 Ответ

2 голосов
/ 15 июля 2020

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

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, используя примитив преобразования для добавления столбцов numeri c.

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().

...