用桑基图分析转专业数据
数据来源:西南交通大学教务网
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:
看起来还是比较不错的,但是很显然,地球科学与环境工程学院少了一个院字。
再看一下2018和2017的数据。
data_2018 = pd.read_excel('转专业2018-已转档.xlsx',skiprows=1)
data_2018.head()
out:
data_2017 = pd.read_excel('转专业2017-已转档.xls',skiprows=1)
data_2017.head()
out:
首先,将各个数据加上年份,合并。
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