You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于日度数据高效计算月度频率的R squared值?

高效计算月度R²值的方法

我现在能计算全数据集的R²值,但计算月度R²时需要把DataFrame按月份切片成多个小数据集,处理大数据集时特别麻烦,有没有更简便的方法?

全数据集R²计算代码

from sklearn.metrics import r2_score
y_true = df['no2']
y_pred = df['temp']
r2_score(y_true, y_pred)

数据集示例

date,no2,temp
2022-03-27,22.0,12.0
2022-03-28,21.0,11.0
2022-03-29,25.0,15.0
2022-03-30,29.0,12.0
2022-03-31,24.0,17.0
2022-04-21,34.0,16.0
2022-04-22,32.0,19.0
2022-04-23,38.0,18.0
2022-04-24,37.0,19.0
2022-04-25,32.0,20.0
2022-05-25,36.0,21.0
2022-05-26,34.0,23.0
2022-05-27,39.0,21.0
2022-05-28,33.0,24.0
2022-05-29,31.0,22.0
2022-05-30,30.0,26.0

期望输出

date,r_squared
2022-03,45
2022-04,42
2022-05,56

解决方案:用Pandas Groupby批量计算

不用手动切片分组,直接利用Pandas的groupby功能按月份聚合计算,代码简洁且效率更高,适合大数据集:

import pandas as pd
from sklearn.metrics import r2_score

# 1. 加载数据并转换日期格式
df = pd.read_csv('your_dataset.csv')  # 替换成你的数据加载方式
df['date'] = pd.to_datetime(df['date'])

# 2. 按年月分组,计算每组的R²值
monthly_r2 = df.groupby(df['date'].dt.to_period('M')).apply(
    lambda group: r2_score(group['no2'], group['temp'])
).reset_index(name='r_squared')

# 3. 调整格式匹配期望输出
monthly_r2['date'] = monthly_r2['date'].astype(str)  # 把周期类型转为字符串
monthly_r2['r_squared'] = (monthly_r2['r_squared'] * 100).round().astype(int)  # 转为百分比整数

# 查看结果
print(monthly_r2.to_csv(index=False))

代码说明

  • dt.to_period('M'):将日期列转换为年月周期(如2022-03),是按月份分组的关键
  • groupby.apply():对每个月度分组自动调用r2_score,无需手动循环拆分数据集
  • 最后一步的格式调整是为了匹配你给出的期望输出样式,可根据实际需求修改小数位数或是否转为百分比

这种方法依赖Pandas的高效分组机制,处理大数据集时比手动切片快得多,代码也更易维护。

内容的提问来源于stack exchange,提问作者user16511234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:01:01