微信改版,加星标不迷路!
用Python分析了1w四六级数据,教你如何通过四六级!
作者:阿广
概述
前言
数据介绍
预期结果
实现过程
搞笑一刻
阿广说
每日问题
前言
陈奕迅说过:在有生的瞬间,考过四六级,竟花光所有运气。
马云说过:四六级还是要考的,万一过了呢。
曹雪芹说过:满纸荒唐言,一把辛酸泪。
爱迪生说过:四六级是1%的努力,加上99%的运气。
项羽说过:力拔山兮气盖世,却败给一场考试。
邓超说过:四六级没过的孩子,We are 伐木累。
阿广说过:考四六级英语这东西,三分天注定,七分考打拼,剩下的那700分就没办法了。
接下来带大家使用numpy和pandas对某大学的四六级情况进行分析统计,让我们看一下自己是否命中有六级?
数据介绍
从小角落中找到某大学的四六级成绩表,一共接近1w条数据,本想着四六级考试之前统计分析以下,太忙,所以一直拖到今天。
成绩表中有很多无效字段,例如操作时间等,经过处理,保留以下几个字段:
预期结果
利用上w条数据绘制出以下几点:
各个学院的四六级通过率
各个学院的各个年级的通过率
各个年级的通过率
各个学院的四六级平均成绩
男生女生通过率
例如,各个学院的过关人数:
实现过程
(1)导入依赖包
使用pandas进行分组转换,使用matplotlib进行绘图。
import pandas as pd
import matplotlib.pylab as plt
(2)加载数据
加载Excel类型的数据,使用pandas的read_excel生成DataFrame对象即可。
#加载全部数据
sj = pd.read_excel(r'D:\wx\Python_new\DataAnalysisNote-master\DataAnalysisNote-master\CET46\山东科技大学四六级.xls')
(3)求各个学院的平均分
想要各个学院的情况当然是要根据学院来进行分组了,同时也需要分出“CET4”和“CET6”两组。使用groupby即可,这样会生成一个SeriesGroupBy对象,然后再调用mean函数(默认是轴0计算,也就是我们想要的结果)即可统计出平均分情况。
#-----------------各个学院平均分------------------
#按照各个学院进行分组
xymean = sj['总分'].groupby([sj['院系名称'],sj['语言级别']])
#计算各个学院的平均分数
xymean = xymean.mean()
#将“语言级别”从行转换为列
xymean = xymean.unstack(level='语言级别')
#使用横向柱状图显示
xymean.plot(kind='barh')
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
#在PyCharm中需要使用,在Ipython环境中如果以--pylab形式打开就不需要
#plt.show()
(4)筛选出过关人数
#过滤出过关人数
sjpass = sj[sj['总分'] >= 425]
(5)各个学院的通过人数
#按照各个学院进行分组
xypass = sjpass['总分'].groupby([sjpass['院系名称'],sjpass['语言级别']])
#计算各个学院的过关总人数
xypass = xypass.count()
#将语言级别作为columns
xypass = xypass.unstack(level='语言级别')
#进行绘图
#xypass.plot(kind='barh')
#plt.show()
(6)各个学院年级通过人数
这次分组的时候加上年级即可,并且为了绘图比较好看一点,这次可以将“年纪”转换为列,并且像12年这种的有些学员已经没有人参加了,所以需要将缺失值用0填充:
#按照各个学院和年级进行分组
xypass = sjpass['总分'].groupby([sjpass['院系名称'],sjpass['语言级别'],sjpass['年级']])
#计算各个学院的过关总人数
xypass = xypass.count()
#将语言级别作为columns,并且将缺失值用0进行填充
xypass = xypass.unstack(level='年级').fillna(0)
#xypass.plot(kind='barh')
#plt.show()
(7)各个年级通过人数
使用groupby对年级进行分组即可:
njpass = sjpass['总分'].groupby([sjpass['年级'],sjpass['语言级别']]).count().unstack(level='语言级别')
#njpass.plot(kind='barh')
#plt.show()
(8)男生女生通过人数
将性别和语言级别进行分组:
nvpass = sjpass['总分'].groupby([sjpass['性别'],sjpass['语言级别']]).count().unstack(level='语言级别')
nvpass.plot(kind='bar')
plt.show()
https://github.com/zandaoguang/CET6
或者点击查看原文即可获得源码
搞笑一刻
分发试卷时...
做听力时...
阿广说
从绘图的结果上来看的话,各个学院之间音乐学院的平均分比较低,艺术设计和外国语学院的平均分都比较高,但是过关人数却没有那么的多,尤其是艺术设计的人数比较少,主要也是因为该学院的总人数比较少。
四级的过关人数明显比六级的人数多的多,而且因为当时15级是大二,在贵学校大二才可以参加四六级考试,所以过关的人数里面15级占有比较大的比分。而且不得不承认,女生的过关率要比男生高的不止一点。
这次六级考试还不错,试卷印刷很清晰,题型也很全,监考老师服务态度也很好,五星好评,下次还会再来!
今日问题
你感觉英语对学习计算机的影响大吗?
打卡格式:打卡第n天,答:...