报错信息如下:
traceback (most recent call last ):
FIle "D:\Separate data\fit_main.py",line 19,in<module>
coef = fitting.fitting(file_path)
AttributeError: module'fitting has no attribute'fitting'
现在有6个拟合函数,要一个excel中的第一列数据的个数,然后把第一列的数据逐个带入到每一个拟合函数中,求出拟合值
主要就是求带入各个拟合函数的拟合值
#fit_main.py
import os
import xlrd
import numpy as np
import pandas as pd
import fitting
# 获取2003年的数据量与SRTM高程数据
data = xlrd.open_workbook('D:\\AB_ICESAT\\delete abnormal\\zhengti\\2003.xlsx') # excle文件位置
table = data.sheets()[0] # 读取第一个表
rows=table.nrows # 获取工作表中的总行数
clou_1 = table.col_values(0) # 读取第一列
x = clou_1[1:] # 去除第一行的第一个数
array = np.zeros([rows-1,7])
# 对每年的数据进行拟合
fileList = os.listdir('D:\AB_ICESAT\delete abnormal\zhengti') # listdir的参数是文件夹的路径
i = 0
for file in fileList:
file_path = os.path.join('D:\AB_ICESAT\delete abnormal\zhengti', file) # 将路径与文件名结合起来就是每个文件的完整路径
coef = fitting.fitting(file_path)
print(coef)
# 将2003年的SRTM高程数据带入拟合函数中
yvals = np.polyval(coef, x) # 将x带入多项式
print(yvals)
for j in range(rows-1):
array[j][i] = yvals[j]
i += 1
print(array)
#np.savetxt("D:/code/design2/out.txt", array, "%f ,%f ,%f ,%f ,%f ,%f ,%f", delimiter=',')
#将输出的矩阵保存到Excel
Data = pd.DataFrame(array)
writer = pd.ExcelWriter('D:\AB_ICESAT\delete abnormal\out.xlsx') # 写入Excel文件
Data.to_excel(writer, 'page_1') # ‘page_1’是写入excel的sheet名
writer.save()
writer.close()
#fitting.py
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#读取Excel中的数据
import xlrd
def fitting(path):
data = xlrd.open_workbook(path) # excle文件位置
table = data.sheets()[0] # 读取第一个表
clou_1 = table.col_values(0) #读取第一列
x_axis = clou_1[1:] #去除第一行的第一个数
clou_2 = table.col_values(1) #读取第二列
y_axis = clou_2[1:] #去除第一行的第一个数
#定义x、y散点坐标
x = np.array(x_axis)
#print('x is :\n',x)
y = np.array(y_axis)
#print('y is :\n',y)
#用3次多项式拟合
f1 = np.polyfit(x, y, 3) # 返回多项式系数,deg次数太高会有震荡
#print('f1 is :\n',f1)
p1 = np.poly1d(f1) # 获得多项式
print('p1 is :\n',p1)
yvals=np.polyval(f1, x) # 将x带入多项式
correlation = np.corrcoef(y, yvals)[0, 1] # 相关系数correlation**2 #R方
print(correlation)
#绘图
plot1 = plt.plot(x, y, 'b+',label='original values')
plot2 = plt.plot(x, yvals, '.r',label='polyfit values')
plt.xlabel('x')
plt.ylabel('y')
plt.legend(loc=4) #指定legend的位置右下角
plt.title('polyfitting')
plt.show()
return f1