用Python分析了1w四六级数据,教你如何通过四六级!

微信改版,加星标不迷路!

640?wx_fmt=gif

用Python分析了1w四六级数据,教你如何通过四六级!

作者:阿广

概述 

  • 前言

  • 数据介绍

  • 预期结果

  • 实现过程

  • 搞笑一刻

  • 阿广说

  • 每日问题

前言   

陈奕迅说过:在有生的瞬间,考过四六级,竟花光所有运气。

马云说过:四六级还是要考的,万一过了呢。

曹雪芹说过:满纸荒唐言,一把辛酸泪。

爱迪生说过:四六级是1%的努力,加上99%的运气。

项羽说过:力拔山兮气盖世,却败给一场考试。

邓超说过:四六级没过的孩子,We are 伐木累。

阿广说过:考四六级英语这东西,三分天注定,七分考打拼,剩下的那700分就没办法了。

接下来带大家使用numpy和pandas对某大学的四六级情况进行分析统计,让我们看一下自己是否命中有六级?

数据介绍

从小角落中找到某大学的四六级成绩表,一共接近1w条数据,本想着四六级考试之前统计分析以下,太忙,所以一直拖到今天。

成绩表中有很多无效字段,例如操作时间等,经过处理,保留以下几个字段:

640?wx_fmt=png

640?wx_fmt=png

预期结果

利用上w条数据绘制出以下几点:

  1. 各个学院的四六级通过率

  2. 各个学院的各个年级的通过率

  3. 各个年级的通过率

  4. 各个学院的四六级平均成绩

  5. 男生女生通过率

例如,各个学院的过关人数:

640?wx_fmt=png

实现过程

(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()


640?wx_fmt=png

(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()

640?wx_fmt=png

(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()

640?wx_fmt=png

(7)各个年级通过人数


使用groupby对年级进行分组即可:


njpass = sjpass['总分'].groupby([sjpass['年级'],sjpass['语言级别']]).count().unstack(level='语言级别')
#njpass.plot(kind='barh')
#plt.show()

640?wx_fmt=png

(8)男生女生通过人数

将性别和语言级别进行分组:

nvpass = sjpass['总分'].groupby([sjpass['性别'],sjpass['语言级别']]).count().unstack(level='语言级别')
nvpass.plot(kind='bar')
plt.show()


640?wx_fmt=png

https://github.com/zandaoguang/CET6

或者点击查看原文即可获得源码

搞笑一刻

分发试卷时...

640?wx_fmt=jpeg

640?wx_fmt=gif

640?wx_fmt=gif

640?wx_fmt=gif

做听力时...

640?wx_fmt=gif

640?wx_fmt=gif

640?wx_fmt=gif

640?wx_fmt=gif

阿广说

从绘图的结果上来看的话,各个学院之间音乐学院的平均分比较低,艺术设计和外国语学院的平均分都比较高,但是过关人数却没有那么的多,尤其是艺术设计的人数比较少,主要也是因为该学院的总人数比较少。

四级的过关人数明显比六级的人数多的多,而且因为当时15级是大二,在贵学校大二才可以参加四六级考试,所以过关的人数里面15级占有比较大的比分。而且不得不承认,女生的过关率要比男生高的不止一点。

这次六级考试还不错,试卷印刷很清晰,题型也很全,监考老师服务态度也很好,五星好评,下次还会再来!

640?

今日问题  

640?

你感觉英语对学习计算机的影响大吗?

打卡格式:打卡第n天,答:...

为什么打卡?戳下面你就知道了!

21/天/养/一/个/好/习/惯

640?wx_fmt=png

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值