DataFrame数据批量做线性回归

本文介绍如何使用Python的pandas库读取CSV文件,并利用sklearn库进行一元线性回归分析,以计算2001年至2009年间作物产量的增长趋势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    我们通常用pandas读取csv文件为DataFrame数据格式,如下图,是部分县2001年到2009年的某种作物的产量数据。我们希望求得9年的增长趋势,即求一个一元线性回归模型的斜率,这个时候便可以调用python的sklearn包中的线性回归模型计算。


思路:

将2001-2009年作为自变量X,需要注意的是sklearn的模型输入的变量是矩阵,因此要用numpy将list转化为矩阵,然后用ix方法定位每行数据为因变量y。pandas数据索引可参考博文点击打开链接。当然,最后输出的斜率的形式也是矩阵的数组,用简单的嵌套循环将其转为列表就可以了。


具体代码如下:

from pandas import DataFrame,Series
import pandas as pd
from sklearn import linear_model
import numpy as np
def trend()
    
    crop = pd.read_csv('....')
    X = np.array([[2001,2002,2003,2004,2005,2006,2007,2008,2009]]).T
    regr = linear_model.LinearRegression()
    trend = []

    for i in range(0,1271):
        y = rice.ix[i,2:11]
        regr.fit(X,y)
        trend.append(regr.coef_)

    # list in list, we need to change data struction
    trend1 = []
    for i in trend:
        for j in i:
            trend1.append(j)
    trend2 = Series(trend1)    
    rice_trend = pd.concat([rice,trend2],axis=1)
    
    return rice_trend

rice_trend.to_csv('rice_trend.csv', index=False)

最后效果如下:


转载于:https://www.cnblogs.com/mtcnn/p/9411612.html

### 批量单变量线性回归分析 为了执行批量单变量线性回归分析,可以采用Pandas处理数据并结合Scikit-learn中的`LinearRegression`模块完成建模工作。具体而言,在准备阶段需先导入必要的库,包括pandas用于数据分析以及sklearn.linear_model.LinearRegression来进行线性拟合[^1]。 对于每一个自变量(特征),单独构建一个线性回归模型并目标因变量关联起来。这可以通过遍历DataFrame的列来实现自动化操作。下面是一个完整的例子展示如何使用Python Pandas和Sklearn进行批量单变量线性回归: ```python import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score # 假设df是已经加载好的包含多个预测因子X_i及响应变量Y的数据框 data = {'X_1': range(10), 'X_2': (i*2 for i in range(10)), 'Y': (i+3 for i in range(10))} df = pd.DataFrame(data) def batch_univariate_regression(df, target_col='Y'): results = {} X_cols = [col for col in df.columns if col != target_col] for feature in X_cols: # 准备训练集测试集划分 X_train, X_test, y_train, y_test = train_test_split( df[[feature]], df[target_col], test_size=0.2, random_state=42) model = LinearRegression() model.fit(X_train, y_train) predictions = model.predict(X_test) mse = mean_squared_error(y_test, predictions) r2 = r2_score(y_test, predictions) results[feature] = { "model": model, "mse": mse, "r2": r2, "coefficients": model.coef_, "intercept": model.intercept_ } return results results = batch_univariate_regression(df) for key,value in results.items(): print(f"For {key}: MSE={value['mse']:.2f}, R²={value['r2']:.2f}") ``` 上述代码片段展示了怎样通过循环迭代每一列作为独立输入特性,并针对这些特性分别创建线性回归模型的过程。每次运行都会输出对应于不同特性的均方误差(MSE)和决定系数(R²),从而评估各个单一因素对结果的影响程度[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值