У меня есть функция, которая читает кучу необработанных данных с помощью некоторого ввода пользователя и скомпилирует его в серии Pandas. В приведенном ниже примере я называю это create_data
, и он просто создает случайную серию длины n
.Создание объекта класса из серии pandas и методов применения
>>> def create_data(n):
... return pd.Series(np.random.randint(1, 100, n))
...
>>>
>>> function_result=create_data(10)
>>> function_result
0 73
1 91
2 31
3 44
4 19
5 30
6 42
7 56
8 69
9 70
dtype: int32
Тогда у меня есть набор функций, которые захотят применить к этой серии. В этом примере я создаю тот, который вычисляет корреляцию между серией и ее разницей первой степени.
>>> def temporal_corr(x):
... return pd.concat([x, x.shift()], 1).corr().iloc[0, 1]
...
я, очевидно, просто применить его к серии путем вызова функции ...
>>> temporal_corr(function_result)
0.38714413906049816
Но, допустим, у меня есть несколько различных функций, которые я хочу использовать в этой серии. Будет ли более целесообразным (или возможно) создание класса, который строит объект с помощью функции create_data
, а затем имеет набор функций внутри класса, которые могут применяться как методы? Я создаю класс и определяю эту функцию ниже.
>>> class myobj:
... def __init__(self, myobj):
... self.myobj = myobj
...
... def temporal_corr(self):
... return pd.concat([self.myobj, self.myobj.shift()], 1).corr().iloc[0, 1]
...
>>> a = myobj(function_result)
>>> a.temporal_corr()
0.38714413906049816
Что такое лучший способ иметь myobj
быть создан в результате функции create_data
объект класса? Я хотел бы иметь возможность позвонить create_data
и получить в результате объект, из которого я могу позвонить temporal_corr()
.
Я не уверен, что понимаю этот вопрос. Если вы хотите, чтобы 'create_data' возвращал экземпляр' myobj', почему бы просто не сделать это: 'def create_data (n): return myobj (pd.Series (np.random.randint (1, 100, n)))' – Blckknght
Зачем ты хочешь это сделать? Это делает код более сложным без каких-либо преимуществ. – BlackJack