97 lines
3.0 KiB
Python
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!!")
|