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

R语言计算两个DataFrame相关系数并生成结果表的实现方法

相关系数计算函数实现

核心逻辑

  • 统一两个数据框的时间列字段,关联后自动过滤不在真实数据时间范围内的预测数据,排除2021-11-02的无效记录
  • 将宽格式存储的多商品数据转为长格式,自动遍历所有商品类别和预测方法组合
  • 按方法、商品类别分组后,匹配对应时间点的真实值和预测值计算相关系数

R 语言实现(基于tidyverse生态)

library(tidyverse)

calc_cor <- function(pred_df, real_df) {
  # 关联过滤有效预测数据
  pred_filtered <- pred_df %>%
    inner_join(real_df %>% select(datex, hourx), by = c("datex", "hour" = "hourx"))
  
  # 预测数据转长格式
  pred_long <- pred_filtered %>%
    pivot_longer(cols = c(books, shirts, shoes, hats), 
                 names_to = "metrics", 
                 values_to = "pred_value")
  
  # 真实数据转长格式
  real_long <- real_df %>%
    pivot_longer(cols = c(books, shirts, shoes, hats), 
                 names_to = "metrics", 
                 values_to = "real_value")
  
  # 分组计算相关系数
  res <- pred_long %>%
    left_join(real_long, by = c("datex", "hour" = "hourx", "metrics")) %>%
    group_by(method, metrics) %>%
    summarise(correlation = cor(pred_value, real_value), .groups = "drop") %>%
    select(metrics, method, correlation)
  
  return(res)
}

# 调用方法
result <- calc_cor(data.predicted, data.real)

Python 实现(基于pandas)

import pandas as pd

def calc_cor(pred_df, real_df):
    # 过滤有效预测数据
    pred_filtered = pd.merge(
        pred_df,
        real_df[["datex", "hourx"]],
        left_on=["datex", "hour"],
        right_on=["datex", "hourx"],
        how="inner"
    )
    # 预测数据转长格式
    pred_long = pred_filtered.melt(
        id_vars=["datex", "hour", "method"],
        value_vars=["books", "shirts", "shoes", "hats"],
        var_name="metrics",
        value_name="pred_value"
    )
    # 真实数据转长格式
    real_long = real_df.melt(
        id_vars=["datex", "hourx"],
        value_vars=["books", "shirts", "shoes", "hats"],
        var_name="metrics",
        value_name="real_value"
    )
    # 关联后分组计算相关系数
    merge_df = pd.merge(
        pred_long,
        real_long,
        left_on=["datex", "hour", "metrics"],
        right_on=["datex", "hourx", "metrics"],
        how="left"
    )
    res = merge_df.groupby(["method", "metrics"], group_keys=False).apply(
        lambda x: x["pred_value"].corr(x["real_value"])
    ).reset_index(name="correlation")[["metrics", "method", "correlation"]]
    
    return res

# 调用方法
result = calc_cor(data.predicted, data.real)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:15:03