我的数据第一列为时间,所以我将第一列设置索引列
时间后面是三列数据一组,我只求每组数据中的第二列
两个数据行数和列数要一致
最后将每个对应列的数据线性回归计算出来的斜率、截距以及r2保存在一个csv中
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
from scipy import stats
# 读取第一个 CSV 文件
data1 = pd.read_csv('F:/20240511.csv',encoding="gbk",index_col=0)
import numpy as np
# 读取第二个 CSV 文件
data2 = pd.read_csv('F:/20240511_2.csv',encoding="gbk",index_col=0)
slope_ = []
intercept_=[]
r_value_=[]
# 提取特定列的数据并进行线性回归
n = 0 # 列偏移量,初始值为0
while True:
# 计算列索引
col_index = 1 + n * 3 # 从第2列开始,每组数据有3列,计算列索引
# 检查索引是否超出数据范围
if col_index >= len(data1.columns):
break
# 提取特定列的数据
group1 = data1.iloc[:, col_index]
group2 = data2.iloc[:,col_index]
slope, intercept, r_value, _, _ = stats.linregress(group1, group2)
# 提取相关系数、R方和截距
slope_.append(slope)
intercept_.append( intercept)
r_value_.append( r_value)
# 更新列偏移量
n += 1
slops = pd.DataFrame(slope_, columns=[ 'Coefficient'])
intercept = pd.DataFrame(intercept_, columns=[ 'Intercept'])
r_value = pd.DataFrame(r_value_, columns=[ 'R_squared'])
# 使用 pd.concat() 函数按列合并这三个 DataFrame
combined_df = pd.concat([slops, intercept['Intercept'], r_value['R_squared']], axis=1)
combined_df.to_csv('F:/abs-new_20240511slops_results.csv', index=False)