2020-006 用桑基图分析转专业数据

本文介绍了如何使用Python的pyecharts库绘制桑基图来分析西南交通大学2017-2019年转专业数据。通过桑基图展示了各学院的转出与转入人数,以及转出比例,揭示了学院间的转专业趋势。马大佬提供了按比例计算的流失率,并用MATLAB绘制了更具定制性的图表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用桑基图分析转专业数据

数据来源:西南交通大学教务网

西南交通大学2019年本科生转专业名单公示

西南交通大学2018年本科生转专业名单公示

西南交通大学2017年本科生转专业名单公示

2019和2018的数据下载后都是pdf格式,使用pdf处理网站 ilovepdf 将pdf转化成excel。

什么是桑基图

来自百度百科

桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图。它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、材料成分、金融等数据的可视化分析。因1898年Matthew Henry Phineas Riall Sankey绘制的“蒸汽机的能源效率图”而闻名,此后便以其名字命名为“桑基图”。

所以,桑基图中分支的宽度对应数据流量的大小,是展现数据流动的利器。

来看一个示例,图源 驴说蛙语/数据可视之美 - 桑基图

数据可视之美 - 桑基图

是不是很好看,很厉害,非常的nice?

那我们用它来展示一下转专业数据。

pyecharts

搜索了一下,python中pyecharts绘图包能够实现桑基图的绘制。

使用pip可以很容易的安装。

pip install pyecharts

有一点注意的是,pyecharts 分为 v0.5.X 和 v1 两个大版本,v0.5.X 和 v1 间不兼容。网上的教程有一些是基于v0.5.X的,因此要注意鉴别,推荐去官网查看教程。本文中,pyecharts的版本是1.8.1。

数据读取清洗

首先读取数据。

import pandas as pd
data_2019 = pd.read_excel('转专业2019-已转档.xlsx',skiprows=1)  #第一行是标题,skiprows=1跳过第一行
data_2019.head()

out:

image-20200727200929898

看起来还是比较不错的,但是很显然,地球科学与环境工程学院少了一个院字。

再看一下2018和2017的数据。

data_2018 = pd.read_excel('转专业2018-已转档.xlsx',skiprows=1)
data_2018.head()

out:

image-20200727202307456

data_2017 = pd.read_excel('转专业2017-已转档.xls',skiprows=1) 
data_2017.head()

out:

image-20200727202549887

首先,将各个数据加上年份,合并。

data_2019['年份'] = 2019
data_2018['年份'] = 2018
data_2017['年份'] = 2017
data = pd.concat([data_2019,data_2018,data_2017],axis=0)  

我们想以学院作为单位查看流动情况,那么主要使用到的列就是当前学院、拟转入学院。

看一下这两列的情况。

data['当前学院'].unique()

out:

array(['机械工程学院', '材料科学与工程学院', '生命科学与工程学院', '地球科学与环境工程学', '公共管理与政法学院',
       '经济管理学院', '马克思主义学院', '土木工程学院', '力学与工程学院', '交通运输与物流学院', '心理研究与咨询中心',
       '数学学院', '物理科学与技术学院', '电气工程学院', '茅以升学院', '信息科学与技术学院', '建筑与设计学院',
       '人文学院', '外国语学院', '地球科学与环境工程学\n院', '西南交大-利兹学院', '地球科学与环境工程学院'],
      dtype=object)

有带\n的,还有学院少个院的。

再看下拟转入学院。

data['拟转入学院'].unique()

out:

array(['土木工程学院', '机械工程学院', '电气工程学院', '信息科学与技术学院', '交通运输与物流学院', '经济管理学院',
       '人文学院', '外国语学院', '建筑与设计学院', '材料科学与工程学院', '力学与工程学院', '数学学院',
       '物理科学与技术学院', '生命科学与工程学院', '地球科学与环境工程学院', '公共管理与政法学院', '茅以升学院',
       '心理研究与咨询中心', '信息科学与技术学', '信息科学与技术学\n院', '交通运输与物流学', '交通运输与物流学\n院',
       '材料科学与工程学\n院', '材料科学与工程学', '物理科学与技术学\n院', '生命科学与工程学', '地球科学与环境工',
       '公共管理与政法学', '西南交大-利兹学院', '心理研究与咨询中', '心理研究与咨询中\n心', '马克思主义学院'],
      dtype=object)

有带\n的,中心少了心,学院少了院,地球科学与环境工直接少了程学院三个字。

处理一下。

data['当前学院'] = data['当前学院'].str.replace(r
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值