Корреляция между двумя временными рядами - PullRequest
0 голосов
/ 03 мая 2020

Я довольно новичок в python и хотел бы выполнить корреляцию между двумя кадрами данных.

df1 = pd.DataFrame({'Date':['2015-01-04','2015-01-05','2015-01-06'],
                   'stockprice1':['1.01','1.01','1.01',],
                   'stockprice2':['1.04','1.05','1.03',]})

df2 = pd.DataFrame({'Date':['2015-01-04','2015-01-05','2015-01-06'],
                   'variable1':['1.11','1.21','1.31',],
                   'variable2':['2.01','2.04','2.03',]})

result = df1.corrwith(df2)

Мой предполагаемый вывод будет выглядеть примерно как отображение коэффициентов корреляции 2x2 (в зависимости от переменной цены). Однако приведенный ниже код не работает, кто-нибудь знает, что я делаю неправильно?

1 Ответ

0 голосов
/ 03 мая 2020

Несколько исправлений,

  1. stockprice1 имеет 0 дисперсию, поэтому корреляция между собой и другими переменными будет NaN.

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

  3. Корреляции приведены для переменных типа Numberri c, здесь переменные являются строками.

Решение: astype как float все переменные, затем concat оба кадра данных, используйте corr и фильтруйте матрицу.

#change df1 so the correlations are no `NaN`
df1.stockprice1 = ['1.02', '1.09', '1.01']

df1[['stockprice1', 'stockprice2']] = df1[[
    'stockprice1', 'stockprice2']].astype(float)
df2[['variable1', 'variable2']] = df2[[
    'variable1', 'variable2']].astype(float)


correlations = pd.concat([df1, df2], axis=1).corr().iloc[0:2, -2:]


#               variable1   variable2
# stockprice1   -0.114708   0.675845
# stockprice2   -0.500000   0.327327
...