Python: 如何找到两个值之间的相关性并去除噪声?

Python: how to find correlation between two values and remove noise?

我有两条曲线 AB 高度相关,如下图所示,其中 CA 和 [= 之间的皮尔逊相关性13=].

可以下载包含数据的文件here

import numpy as np
import pandas as pd
import pylab as plt

df = pd.read_csv('prova.csv')
A = df['A'].values
B = df['B'].values
from scipy.stats.stats import pearsonr 
C = pearsonr(A,B)[0]


fig, ax = plt.subplots(1,2, figsize=(20, 5))
ax1 = ax[0]
ax2 = ax1.twinx()
ax1.plot(A, 'g-')
ax2.plot(B, 'b-')
ax1.set_ylabel('A', color='g', fontsize=20);
ax2.set_ylabel('B', color='b', fontsize=20);


ax2 = ax[1]
txt = 'C = %.2f'%C
ax2.scatter(A, B, label=txt)
ax2.set_xlabel('A', color='g', fontsize=20);
ax2.set_ylabel('B', color='b', fontsize=20);
ax2.legend(fontsize = 16)

绿色曲线的值应为 0,但信号受到 B 的影响。我想找到 AB 之间的关系,以便 AB 抵消,但我不确定如何进行。

显然,AB 相互预测得很好。我们可以利用它来确保我们在给定 AB 的值时获得大约 0 的值。我选择的方法是 least_squares fit.

我们想要最小化某些参数 xcA - x * B - c。这可以使用

import matplotlib.pyplot as plt
import pandas as pd
import scipy.optimize as opt


df = pd.read_csv('prova.csv')

def fit(x):
    return df['A'] - x[0] * df['B'] - x[1]


result = opt.least_squares(fit, [0, 0])

fit(result.x).plot()
plt.show()

这导致,

接近零的数量级。