如何按年份生成DataFrame中Qentrada与Qsalida的相关矩阵?
按年份分组计算月度数据的相关矩阵并可视化
步骤1:确保索引为datetime类型
首先确认你的FECHA索引是datetime格式,若不是先转换:
corr.index = pd.to_datetime(corr.index)
步骤2:按年份分组计算相关矩阵
使用groupby按年份拆分数据,对每个分组应用.corr()生成年度相关矩阵:
# 生成带年份索引的年度相关矩阵 yearly_corr = corr.groupby(corr.index.year).corr()
输出结果为多层索引结构,外层是年份,内层是列名,示例如下:
Qentrada Qsalida 2017 Qentrada 1.000000 0.234567 Qsalida 0.234567 1.000000 2018 Qentrada 1.000000 0.567890 Qsalida 0.567890 1.000000 ...
如果只需要提取Qentrada和Qsalida的交叉相关系数(非对角线值),可以用以下代码直接生成年度相关系数序列:
yearly_cross_corr = corr.groupby(corr.index.year).apply(lambda x: x['Qentrada'].corr(x['Qsalida']))
步骤3:可视化实现
方式1:热力图展示年度相关矩阵
将多层索引的结果转换为宽格式,用seaborn绘制热力图:
import seaborn as sns import matplotlib.pyplot as plt # 转换为宽格式表格 corr_matrix_df = yearly_corr.unstack(level=0) # 绘制热力图 plt.figure(figsize=(10, 6)) sns.heatmap(corr_matrix_df, annot=True, cmap='coolwarm', fmt='.4f') plt.title('各年份Qentrada与Qsalida相关矩阵') plt.show()
方式2:折线图展示相关系数年度变化
聚焦两个变量的相关系数变化趋势,用折线图更直观:
plt.figure(figsize=(10, 6)) yearly_cross_corr.plot(kind='line', marker='o', color='#2e86de') plt.title('Qentrada与Qsalida年度相关系数变化') plt.xlabel('年份') plt.ylabel('Pearson相关系数') plt.grid(axis='y', linestyle='--', alpha=0.7) plt.show()
方式3:子图展示单个年度相关矩阵
若需要单独查看每一年的相关矩阵,可生成子图布局:
years = corr.index.year.unique() n_cols = 3 n_rows = (len(years) + n_cols - 1) // n_cols fig, axes = plt.subplots(n_rows, n_cols, figsize=(15, 10)) axes = axes.flatten() for i, year in enumerate(years): year_data = corr[corr.index.year == year] corr_matrix = year_data.corr() sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt='.4f', ax=axes[i]) axes[i].set_title(f'{year}年相关矩阵') # 隐藏多余子图 for j in range(i+1, len(axes)): axes[j].axis('off') plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者Guille GL
相关产品推荐
相关产品推荐

