如何复用单城市Linear Regression代码批量预测513城食用油支出
多城市批量食用油支出预测实现方案
你写好的Simeulue市单城市一元线性回归逻辑完全可以复用,不需要给每个城市单独写代码,只要加一层分组遍历逻辑,就能一次性跑完所有城市的2022年预测,步骤如下:
1. 先确认数据集格式
确保你的原始数据集是长表结构,至少包含三列:
- 城市名称列(比如列名
city):存每个城市的名称 - 年份列(比如列名
year):存2018-2021的年份值,也就是模型自变量 - 食用油支出列(比如列名
expense_rupiah):存对应城市对应年份的印尼盾计价支出金额,也就是模型因变量
如果你的数据是宽表(每一列对应一个年份,每行是一个城市),先转成长表再往下走,不然没法分组。
2. 把单城市建模逻辑封装成可复用函数
核心建模步骤和你之前跑Simeulue市的代码完全一致,只是包成函数方便反复调用,输入是单个城市的4年历史数据,输出是该城市的预测结果和模型参数,参考代码:
import pandas as pd import numpy as np from sklearn.linear_model import LinearRegression def get_city_pred(city_subdf): # 整理模型输入格式,和你单城市建模的处理逻辑完全一样 X = city_subdf['year'].values.reshape(-1, 1) y = city_subdf['expense_rupiah'].values # 拟合模型 lr = LinearRegression() lr.fit(X, y) # 输出2022年预测值,同时返回斜率、截距方便后续校验 return { "city_name": city_subdf['city'].iloc[0], "pred_2022_expense": round(lr.predict(np.array([[2022]]))[0], 2), "coef": lr.coef_[0], "intercept": lr.intercept_ }
3. 按城市分组批量遍历,一次性生成所有结果
用pandas的groupby按城市名称拆分数据集,自动把每个城市的4年数据喂给上面的函数,所有结果直接汇总成表:
result = [] # 遍历每个城市的分组数据 for city_name, city_data in df.groupby('city'): # 自动跳过历史记录不足4年的异常城市,避免报错 if len(city_data) < 4: print(f"[警告] 城市{city_name}历史数据不足4年,已跳过") continue result.append(get_city_pred(city_data)) # 转成DataFrame格式,后续筛选、导出、分析都可以直接用 pred_df = pd.DataFrame(result)
校验提示
跑完之后先在结果里找Simeulue市的预测值,和你之前手动建模得到的结果做对比,数值完全一致就说明批量逻辑没有问题。如果需要生成每个城市的拟合效果图,直接在遍历循环里加你之前写的单城市绘图代码就行,保存图片的时候用城市名命名文件,不会出现覆盖问题。
514个城市(含你已经跑过的Simeulue)的计算量非常小,普通笔记本环境下几秒钟就能跑完,不需要额外做性能优化。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

