Python: 如何找到两个值之间的相关性并去除噪声?
Python: how to find correlation between two values and remove noise?
我有两条曲线 A
和 B
高度相关,如下图所示,其中 C
是 A
和 [= 之间的皮尔逊相关性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
的影响。我想找到 A
和 B
之间的关系,以便 A
和 B
抵消,但我不确定如何进行。
显然,A
和 B
相互预测得很好。我们可以利用它来确保我们在给定 A
和 B
的值时获得大约 0
的值。我选择的方法是 least_squares
fit.
我们想要最小化某些参数 x
和 c
的 A - 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()
这导致,
接近零的数量级。
我有两条曲线 A
和 B
高度相关,如下图所示,其中 C
是 A
和 [= 之间的皮尔逊相关性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
的影响。我想找到 A
和 B
之间的关系,以便 A
和 B
抵消,但我不确定如何进行。
显然,A
和 B
相互预测得很好。我们可以利用它来确保我们在给定 A
和 B
的值时获得大约 0
的值。我选择的方法是 least_squares
fit.
我们想要最小化某些参数 x
和 c
的 A - 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()
这导致,
接近零的数量级。