Примитив преобразования отлично работает с дополнительными аргументами.Вот пример
def string_count(column, string=None):
'''
..note:: this is a naive implementation used for clarity
'''
assert string is not None, "string to count needs to be defined"
counts = [str(element).lower().count(string) for element in column]
return counts
def string_count_generate_name(self):
return u"STRING_COUNT(%s, %s)" % (self.base_features[0].get_name(),
'"' + str(self.kwargs['string'] + '"'))
StringCount = make_trans_primitive(
function=string_count,
input_types=[Categorical],
return_type=Numeric,
cls_attributes={
"generate_name": string_count_generate_name
})
es = ft.demo.load_mock_customer(return_entityset=True)
count_the_feat = StringCount(es['transactions']['product_id'], string="5")
fm, fd = ft.dfs(
entityset=es,
target_entity='transactions',
max_depth=1,
features_only=False,
seed_features=[count_the_feat])
Вывод:
product_id STRING_COUNT(product_id, "5")
transaction_id
1 5 1
2 4 0
3 3 0
4 3 0
5 4 0
Однако, если я изменю и сделаю в Примитив агрегации примерно так:
def string_count(column, string=None):
'''
..note:: this is a naive implementation used for clarity
'''
assert string is not None, "string to count needs to be defined"
counts = [str(element).lower().count(string) for element in column]
return sum(counts)
def string_count_generate_name(self):
return u"STRING_COUNT(%s, %s)" % (self.base_features[0].get_name(),
'"' + str(self.kwargs['string'] + '"'))
StringCount = make_agg_primitive(
function=string_count,
input_types=[Categorical],
return_type=Numeric,
cls_attributes={
"generate_name": string_count_generate_name
})
es = ft.demo.load_mock_customer(return_entityset=True)
count_the_feat = StringCount(es['transactions']['product_id'], string="5")
Я получаю следующую ошибку:
TypeError: new_class_init() missing 1 required positional argument: 'parent_entity'
Поддерживаются ли пользовательские примитивы агрегации с дополнительными аргументами в featuretools?