多指标进行关联性分析

难点:统一维度、设置动态的关联性强弱

关联性分析前要进行数据预处理
缺失值的处理在此就不过多赘述,主要讲一下时间维度的统一,在项目中往往存在不同的指标时间维度不一致的情况,对此需要进行处理。
指标大多分为年指标、月指标、日指标。虽然指标的时间维度不统一时可以进行关联性分析,但为了确保分析的准确性和可靠性,建议对数据进行适当的预处理,并谨慎解释分析结果。
在进行关联性分析前将数据转换为统一的时间尺度,如日、周、月或年,以便进行分析。

设置动态关联性强弱:这种方法能够根据数据的分布情况动态地划分出不同等级,而不是固定使用预先设定的阈值。这样可以更好地适应不同数据的特点,使得划分更具有灵活性和准确性。对此,可选择四分位数法。
代码来源于GPT

import pandas as pd

# 示例数据,假设这是你的关联性矩阵
correlation_matrix = pd.DataFrame({
    '指标1': [1.0, 0.8, -0.3],
    '指标2': [0.8, 1.0, -0.5],
    '指标3': [-0.3, -0.5, 1.0]
}, index=['指标1', '指标2', '指标3'])

# 定义动态分等级函数(四分位数法)
def dynamic_grade(value, quartiles_positive, quartiles_negative):
    if isinstance(value, str):  # 如果值已经是字符串(已经是等级),则直接返回
        return value
    if value >= 0:  # 正相关
        if value >= quartiles_positive[2]:  # 第三分位数及以上
            return '正强关联'
        elif value >= quartiles_positive[1]:  # 第二分位数
            return '正中等关联'
        else:  # 第一分位数及以下
            return '正弱关联'
    else:  # 负相关
        if abs(value) >= quartiles_negative[2]:  # 第三分位数及以上
            return '负强关联'
        elif abs(value) >= quartiles_negative[1]:  # 第二分位数
            return '负中等关联'
        else:  # 第一分位数及以下
            return '负弱关联'

# 应用动态分等级函数到关联性矩阵
graded_matrix = pd.DataFrame()
for column in correlation_matrix.columns:
    # 正相关和负相关的四分位数
    positive_values = correlation_matrix[column][correlation_matrix[column] >= 0]
    negative_values = correlation_matrix[column][correlation_matrix[column] < 0]
    quartiles_positive = positive_values.quantile([0.25, 0.5, 0.75]).tolist()
    quartiles_negative = negative_values.quantile([0.25, 0.5, 0.75]).tolist()
    graded_matrix[column] = correlation_matrix[column].apply(lambda x: dynamic_grade(x, quartiles_positive, quartiles_negative))

# 保存结果到 Excel 表格
output_excel = "graded_correlation_matrix.xlsx"
graded_matrix.to_excel(output_excel)

print(f"结果已保存到 {output_excel} 文件中。")

带上每个指标的四分位数的代码

import pandas as pd

# 示例数据,假设这是你的关联性矩阵
correlation_matrix = pd.DataFrame({
    '指标1': [1.0, 0.8, -0.3],
    '指标2': [0.8, 1.0, -0.5],
    '指标3': [-0.3, -0.5, 1.0]
}, index=['指标1', '指标2', '指标3'])

# 定义动态分等级函数(四分位数法)
def dynamic_grade(value, quartiles_positive, quartiles_negative):
    if isinstance(value, str):  # 如果值已经是字符串(已经是等级),则直接返回
        return value
    if value >= 0:  # 正相关
        if value >= quartiles_positive[2]:  # 第三分位数及以上
            return '正强关联', quartiles_positive
        elif value >= quartiles_positive[1]:  # 第二分位数
            return '正中等关联', quartiles_positive
        else:  # 第一分位数及以下
            return '正弱关联', quartiles_positive
    else:  # 负相关
        if abs(value) >= quartiles_negative[2]:  # 第三分位数及以上
            return '负强关联', quartiles_negative
        elif abs(value) >= quartiles_negative[1]:  # 第二分位数
            return '负中等关联', quartiles_negative
        else:  # 第一分位数及以下
            return '负弱关联', quartiles_negative

# 应用动态分等级函数到关联性矩阵
graded_matrix = pd.DataFrame()
for column in correlation_matrix.columns:
    # 正相关和负相关的四分位数
    positive_values = correlation_matrix[column][correlation_matrix[column] >= 0]
    negative_values = correlation_matrix[column][correlation_matrix[column] < 0]
    quartiles_positive = positive_values.quantile([0.25, 0.5, 0.75]).tolist()
    quartiles_negative = negative_values.quantile([0.25, 0.5, 0.75]).tolist()
    # 应用动态分等级函数到每个值,并将结果存储到 graded_matrix 中
    graded_matrix[column] = correlation_matrix[column].apply(lambda x: dynamic_grade(x, quartiles_positive, quartiles_negative))

# 保存结果到 Excel 表格
output_excel = "graded_correlation_matrix_with_quartiles.xlsx"
graded_matrix.to_excel(output_excel)

print(f"结果已保存到 {output_excel} 文件中。")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值