我有一个数据集(csv文件),其中包含三个单独的列。第0列是信号时间,第1列是频率,第2列是强度。可以通过找到每个信号频率的方差来对数据中的大量噪声进行分类。如果它小于2332,则它是正确的频率。因此,这就是我要用来计算线性/多边形回归的数据。 ps。我必须手动计算线性:(。我嵌套的for循环决策结构当前无法正常工作。任何解决方案都将有所帮助!谢谢
data = csv.reader(file1)
sort = sorted(data, key=(operator.itemgetter(1))) #sorted by the frequencies
for row in sort:
x.append(float(row[0]))
y.append(float(row[2]))
frequencies.append(float(row[1]))
for i in range(499) :
freq_dict.update({ frequencies[i] : [x[i], y[i]] })
for key in freq_dict.items():
for row in sort :
if key == float(row[1]):
a.append(float(row[1]))
b.append(float(row[2]))
c.append(float(row[0]))
else :
num = np.var(a)
if num < 2332.0:
linearRegression(c, b, linear)
print('yo')
polyRegression(c, b, d, linear, py)
mplot.plot(linear, py)
else:
a = []
b = []
c = []
我使用了499的范围,因为那是我的数据集的长度。另外,如果频率不正确,我尝试清除列表(a,b,c)。
我看到了几个问题。我不确定为什么要对数据进行排序,如果大家都知道要查找的确切值。我不确定为什么还要将数据拆分为单独的变量。双重“ for”循环意味着您要对freq_dict中的每个键重复“ sort”中的所有内容。不知道这是否是您打算多次重复所有这些值。另外,freq_dict.items()生成元组(键,值对),因此您的“键”是元组,因此“键”将永远不等于浮点数。无论如何,这是尝试重新编写一些代码。
import csv, numpy
import matplotlib.pyplot as plt
from scipy import stats
data = csv.reader(file1) #Read file.
f_data = filter(lambda (x,f,y):f<2332.0,data) #Filter data to condition.
x,_,y = list(zip(*f_data)) #Split data down column.
#Standard linear stats function.
slope,intercept,r_value,p_value,std_err = stats.linregress(x,y)
#Plot the data and the fit line.
plt.scatter(x,y)
plt.plot(x,numpy.array(x)*slope+intercept)
plt.show()