Jupyter Notebook中生成含各Expression的PR与Metrics相关矩阵热图
问题:生成包含各Expression的相关矩阵及热图
需要实现针对PR与Metrics两组数据,生成包含所有Expression的相关矩阵及热图。样本数据如下:
| Expression(表情) | PR | Metrics |
|---|---|---|
| Engagement | 0.33 | 0.70 |
| Excitement | 0.33 | 0.15 |
| Focus | 0.33 | 0.36 |
| Interest | 0.67 | 0.47 |
| Relaxation | 0.55 | 0.20 |
| Stress | 0.44 | 0.40 |
手动创建DataFrame时的代码存在错误,原代码如下:
data = { 'Expression':['Engagement', 'Excitement', 'Focus','Interest','Relaxation','Stress'], 'PR': ['0.33','0.33','0.33','0.67','0.55','0.44'], 'Metrics': ['0.70','0.15','0.36','0.47','0.20','0.40'] } df['PR']=df['PR'].astype(float) #Converts object dtype to float df['Emotiv Metrics']=df['Emotiv Metrics'].astype(float) #Converts object dtype to float
注:代码中df['Emotiv Metrics']应为df['Metrics'],且缺少创建DataFrame的语句df = pd.DataFrame(data)。
当前使用df.corr()只能得到PR与Metrics列的整体相关系数:
PR Metrics PR 1.000000 -0.048189 Metrics -0.048189 1.000000
需要生成包含PR、Metrics及所有Expression的相关矩阵,具体实现步骤如下:
解决方案
1. 修正DataFrame创建与类型转换
首先补全并修正代码,确保数据类型正确:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 创建DataFrame data = { 'Expression':['Engagement', 'Excitement', 'Focus','Interest','Relaxation','Stress'], 'PR': ['0.33','0.33','0.33','0.67','0.55','0.44'], 'Metrics': ['0.70','0.15','0.36','0.47','0.20','0.40'] } df = pd.DataFrame(data) # 转换数值类型 df['PR'] = df['PR'].astype(float) df['Metrics'] = df['Metrics'].astype(float)
2. 重构数据以生成包含Expression的相关矩阵
要让Expression作为变量纳入相关矩阵,需要将数据转置,同时保留PR和Metrics作为独立变量:
# 将Expression设为索引,转置后得到以PR、Metrics为行,各Expression为列的DataFrame df_transposed = df.set_index('Expression').T # 添加PR和Metrics列(对应原数据的整列取值) df_transposed['PR'] = df['PR'].values df_transposed['Metrics'] = df['Metrics'].values
3. 计算完整相关矩阵
直接对重构后的DataFrame计算相关系数:
corr_matrix = df_transposed.corr() print(corr_matrix)
输出的相关矩阵会包含PR、Metrics及所有Expression,每个单元格代表两个变量的皮尔逊相关系数。
4. 绘制热图
使用seaborn绘制热图可视化相关矩阵:
plt.figure(figsize=(10, 8)) sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt='.2f', square=True) plt.title('Correlation Matrix: PR, Metrics & Expressions') plt.show()
内容的提问来源于stack exchange,提问作者Jun
相关产品推荐
相关产品推荐

