难点:统一维度、设置动态的关联性强弱
关联性分析前要进行数据预处理
缺失值的处理在此就不过多赘述,主要讲一下时间维度的统一,在项目中往往存在不同的指标时间维度不一致的情况,对此需要进行处理。
指标大多分为年指标、月指标、日指标。虽然指标的时间维度不统一时可以进行关联性分析,但为了确保分析的准确性和可靠性,建议对数据进行适当的预处理,并谨慎解释分析结果。
在进行关联性分析前将数据转换为统一的时间尺度,如日、周、月或年,以便进行分析。
设置动态关联性强弱:这种方法能够根据数据的分布情况动态地划分出不同等级,而不是固定使用预先设定的阈值。这样可以更好地适应不同数据的特点,使得划分更具有灵活性和准确性。对此,可选择四分位数法。
代码来源于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} 文件中。")