和弦图分析:学生成绩数据
一、什么是和弦图
和弦图是一种用“环状节点 + 连接弦线”来展示多个对象之间关系的图表。通常所有对象均匀分布在一个圆周上,任意两个对象之间若有联系,就用一条从一方弧向另一方的弦连接起来。
和弦图常用来呈现相关性、流向或网络关系。在本例中,我们用 5 门课程作为圆周上的节点,用弦线的粗细表示两科成绩相关系数的绝对值大小,用颜色区分正相关与负相关,从而直观地看出一张“科目成绩关系网”。
二、示例数据说明
本次分析使用 8 名学生的成绩数据。
和弦图刻画的是“科目之间的关系”,因此先对清洗后的成绩计算各科之间的相关系数,再绘制和弦图。数据预览如表 1 所示。
表 1 学生成绩数据预览
学号 | 姓名 | 班级 | 语文 | 数学 | 英语 | Python程序设计 | 数据分析基础 |
2024001 | 张一 | 1班 | 80 | 80 | 77 | 52 | 61 |
2024002 | 张二 | 1班 | 70 | 78 | 65 | 71 | 65 |
2024003 | 张三 | 1班 | 84 | 61 | 68 | 72 | 100 |
2024004 | 张四 | 1班 | 86 | 80 | 68 | 90 | 63 |
2024005 | 李一 | 1班 | 62 | 72 | 59 | 81 | 85 |
2024006 | 李二 | 1班 | 68 | 73 | 77 | 74 | 62 |
2024007 | 李三 | 1班 | 79 | 82 | 67 | 91 | 86 |
2024008 | 李四 | 1班 | 75 | 73 | 72 | 49 | 79 |
三、绘制和弦图
一.数据构建部分
1.构造 10 名学生、5 门课的成绩表格;
2.corr()计算皮尔逊相关系数,得到 5×5 对称矩阵;
3.矩阵里corr_matrix.loc["语文","数学"]就是语文和数学的相关程度;
4。labels保存科目名称,n是科目数量。
二.计算圆环上每个科目的坐标
1.np.linspace(0,2π,5):把一个圆周 360° 平均分成 5 份,得到 5 个角度;
2.node_pos字典:存储每一门科目在圆环上的(x,y)坐标;r=1 代表圆环半径。
三. 循环遍历、绘制贝塞尔曲线连线
1.i in range(n), j in range(i+1,n):只取上三角,避免重复画线;
2.c = corr.iloc[i,j]:取出两门科目的相关系数;
3.lw = abs(c)*4:线条宽度 = 相关系数绝对值 ×4,系数越大线越粗;
4.颜色判断:正数红色,负数蓝色;
5.t取 0~1 之间 100 个点,把离散点连成顺滑曲线;
6.alpha=0.6设置透明度,多条线重叠时不会完全糊掉;
四、和弦图结果与解读
图 1 各科成绩相关性和弦图
对应的各科成绩相关系数矩阵如表 2 所示。
表 2 各科成绩相关系数矩阵
科目 | 语文 | 数学 | 英语 | Python程序设计 | 数据分析基础 |
语文 | 1.00 | -0.24 | 0.07 | 0.01 | -0.09 |
数学 | -0.24 | 1.00 | 0.05 | 0.17 | -0.12 |
英语 | 0.07 | 0.05 | 1.00 | -0.02 | -0.22 |
Python程序设计 | 0.01 | 0.17 | -0.02 | 1.00 | 0.04 |
数据分析基础 | -0.09 | -0.12 | -0.22 | 0.04 | 1.00 |
结合图 1 和表 2,可以从以下几个维度解读这份数据:
整体相关性偏弱:各科之间的弦线普遍较细,相关系数绝对值大多在 0.25 以内,说明各科成绩总体较为独立,并不存在“一门强则门门强”的明显趋势。
最明显的负相关:语文与数学的负相关最突出(-0.24,蓝色弦较粗),可理解为文理成绩存在一定的此消彼长;英语与数据分析基础也呈较明显负相关(-0.22)。
最明显的正相关:数学与 Python 程序设计的正相关最明显(0.17,红色弦较粗),说明逻辑与编程能力较强的同学,这两科往往都表现较好,具有一定协同性。
颜色与方向解读:红色弦代表正相关,蓝色弦代表负相关;
和弦图的价值:相比普通的相关矩阵表格,和弦图把 10 对相关系数放在同一个环状网络里,能一眼看出哪些科目关系更紧、方向如何,适合用来展示多维对象之间的关系网络。