#python #pandas #correlation
#python #pandas #корреляция
Вопрос:
Рассматривая два временных ряда как pandas.Series
:
tser_a
:
date
2016-05-25 13:30:00.023 50.41
2016-05-26 13:30:00.023 51.96
2016-05-27 13:30:00.030 51.98
2016-05-28 13:30:00.041 52.00
2016-05-29 13:30:00.048 52.01
2016-06-02 13:30:00.049 51.97
2016-06-03 13:30:00.072 52.01
2016-06-04 13:30:00.075 52.10
tser_b
:
date
2016-05-24 13:30:00.023 74.41
2016-05-25 13:30:00.023 74.96
2016-05-26 13:30:00.030 74.98
2016-05-27 13:30:00.041 73.00
2016-05-28 13:30:00.048 73.01
2016-05-29 13:30:00.049 73.97
2016-06-02 13:30:00.072 72.01
2016-06-03 13:30:00.075 72.10
Я хотел бы вычислить корреляцию между этими двумя временными рядами.
Pandas предлагает функцию pandas.Series.corr
(ref) для вычисления такого значения.
corr = tser_a.corr(tser_b)
Мои сомнения:
Однако мне нужно быть уверенным, что корреляция учитывает одну и ту же дату для каждого значения, таким образом, учитывая только пересечение между tser_a
и tser_b
.
Как псевдокод:
if ((tser_a[date_x] IS NOT NIL) AND (tser_b[date_x] IS NOT NIL)):
then: consider(tser_a[date_x], tser_b[date_x])
else:
then: skip and go ahead
Затем:
tser_a -> 2016-05-24 13:30:00.023 74.41
tser_b -> 2016-06-04 13:30:00.075 52.10
Должно быть исключено.
pandas.Series.corr
Предполагает ли это поведение по умолчанию или я должен сначала пересечь два временных date
ряда в соответствии с?
Комментарии:
1. Вы уверены, что каждая серия содержит не более одной выборки в день? Если нет, что произойдет, если у вас будет несколько выборок в день?
2. В этом я уже уверен, поскольку для моего варианта использования выборка производится один раз в день
Ответ №1:
Похоже tser_a.corr(tser_b)
, что соответствует индексам. Однако, поскольку у двух данных могут быть разные временные метки, вы получите неожиданный результат. Вместо этого вы можете использовать resample
first:
tser_a.resample('D').mean().corr(tser_b.resample('D').mean())
# out -0.5522781562573792