Files
linear_regression/main.py
tangchao0503 6adaf65fb3 1. 波长文件改为以tab键分割,wave_sn0205_sample.txt是示例波长文件,相应读取文件代码变化;
2. 使用方式,命令行参数:D:\PycharmProjects\linear_regression\wave_sn0205.txt 332
2022-12-18 21:31:25 +08:00

97 lines
3.0 KiB
Python

# https://www.cnblogs.com/vachester/p/7202793.html
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn import datasets, linear_model
import argparse
def read_data(file_name, start_row):
data = pd.read_csv(file_name, header=None, sep='\t')
# data = pd.read_excel(file_name)
row_bin1 = []
wave_bin1 = []
for i in range(start_row, start_row + 300):
row_bin1.append([float(i)])
for i in range(data.shape[1]):
wave_bin1.append(data.iloc[0][i])
row_bin2 = []
wave_bin2 = []
for i in np.arange(start_row / 2, start_row / 2 + 150):
row_bin2.append([float(i)])
for i in range(0, len(wave_bin1), 2):
# print(i)
# print(wave[i:i + 2])
wave_bin2.append((wave_bin1[i] + wave_bin1[i+1])/2)
return row_bin1, wave_bin1, row_bin2, wave_bin2
def plot(x, y, regre):
plt.scatter(x, y, color='blue')
plt.plot(x, regre.predict(x), color='red', linewidth=4)
# plt.xticks(())
# plt.yticks(())
plt.show()
def linearRegression(X_parameters, Y_parameters):#
regr = linear_model.LinearRegression()
regr.fit(X_parameters, Y_parameters)
# 绘图
# plot(X_parameters, Y_parameters, regr)
return regr
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("csv_path", help="Path of csv file which contains wavelength.")
parser.add_argument("start_row", help="Start row of coning 410 sensor.")
args = parser.parse_args()
row_bin1, wave_bin1, row_bin2, wave_bin2 = read_data(args.csv_path, int(args.start_row))
regr_bin1 = linearRegression(row_bin1, wave_bin1)
regr_bin2 = linearRegression(row_bin2, wave_bin2)
# bin1 calculate
yCalculated_bin1 = []
a_bin1 = regr_bin1.coef_[0]
b_bin1 = regr_bin1.intercept_
for i in range(len(row_bin1)):
yCalculated_bin1.append(a_bin1 * row_bin1[i][0] + b_bin1)
# bin2 calculate
yCalculated_bin2 = []
a_bin2 = regr_bin2.coef_[0]
b_bin2 = regr_bin2.intercept_
for i in range(len(row_bin2)):
yCalculated_bin2.append(a_bin2 * row_bin2[i][0] + b_bin2)
#
df_bin1 = pd.DataFrame(list(zip(wave_bin1, yCalculated_bin1)),
columns=['original', 'Calculated_bin1'])
df_bin2 = pd.DataFrame(list(zip(yCalculated_bin2)), columns=['Calculated_bin2'])
path_tmp = args.csv_path.split(".")
path_new = path_tmp[0] + "_result.xlsx"
writer = pd.ExcelWriter(path_new)
df_bin1.to_excel(excel_writer=writer, sheet_name="bin1",
columns=["original", "Calculated_bin1"], index=False)
df_bin2.to_excel(excel_writer=writer, sheet_name="bin2",
columns=["Calculated_bin2"], index=False)
writer.save()
writer.close()
print("bin1")
print("Intercept value ", regr_bin1.intercept_)
print("coefficient", regr_bin1.coef_)
print("bin2")
print("Intercept value ", regr_bin2.intercept_)
print("coefficient", regr_bin2.coef_)
print("completed!!")