在上一篇中我们探讨了学生的消费数据,消费数据对本次竞赛预测来讲很重要。本篇将探索寝室门禁、图书借阅、图书馆门禁和学生成绩等一些和学生学习相关的数据,来看看学生的品行如何,虽然资助金和奖学金的性质不太一样,但我们毕竟还是想资助那些品学兼优的学生,而不是资助虽然家境很贫寒但不学无术的学生。
所以本篇探索的数据可以比较好的反应出这些情况。当然这里面还隐藏了更好玩的话题,学霸去哪了?话不多说,let‘s go!
一、数据目录概况
官方提供的数据分为两组,分别是训练集和测试集,每一组都包含大约1万名学生的信息纪录:
图书借阅数据borrow_train.txt和borrow_test.txt;
一卡通数据card_train.txt和card_test.txt;
寝室门禁数据dorm_train.txt和dorm_test.txt;
图书馆门禁数据library_train.txt和library_test.txt;
学生成绩数据score_train.txt和score_test.txt;
助学金获奖数据subsidy_train.txt和subsidy_test.txt(实际下载的数据是studentID_test.txt即你需要预测的学生样本) 。
OpenFEA为做好本次活动的深度支持和报道,特下载了上述数据,并在互联网上搭建的在线实验环境可以直接分析此数据,具体在www.openfean.cn下载专区里有介绍,所有数据放在match/fund目录下,文件后缀名改成了csv。
二、数据探索
(一)寝室门禁数据
训练数据和测试数据分别是dorm_train.csv和dorm_test.csv
字段描述和示例如下:
学生id,具体时间,进出方向(0进寝室,1出寝室)
13126,"2014/01/2103:31:11","1"
9228,"2014/01/2110:28:23","0"
#加载寝室门禁训练数据
dt = load csv bymatch/fund/dorm_train.csv with (header=-1)
#看数据量大小 (211万5064行)
show tables
#查看数据
dump dt
寝室门禁的数据单独看意义不大,毕竟一个从夜店归来和从图书馆回来的行为时间差别不大,所以要想区别的话最少要和图书馆的门禁数据做关联。当然我们也可以分析深夜外出的同学有多少。
#更改列名
dt = rename dt as(0:"id",1:"time",2:"isout")
#提取小时为一列
dt.hour = str time by ([11:13])
#将hour列改为数字类型
alter dt.hour as int
dump dt
#过滤深夜早出的,有566条
dt_out = filter dt by (isout==1 and hourin [0,1,2,3,4])
#过滤深夜晚归的,有2131条,看来晚归的要大于早出的,但总体还是好的,^V^
dt_in = filter dt by (isout==0 and hourin [0,1,2,3,4])
#再来看一下有多少学生,以及是否有惯犯
dt_io = union dt_out,dt_in
dt_io_count = @udf dt_io byudf0.df_agg_count with (id)
#看下结果
plot dt_io_count
2131多条记录中,共涉及1297人,最多的34次,最少的1次,平均2.08次。元芳,你怎么看呢?
(二)图书借阅数据
图书借阅数据在borrow_train.csv和borrow_test.csv中。
注:有些图书的编号缺失。字段描述和示例如下(第三条记录缺失图书编号):
学生id,借阅日期,图书名称,图书编号
9708,2014/2/25,"我的英语日记/ (韩)南银英著 (韩)卢炫廷插图","H315 502"
6956,2013/10/27,"解读联想思维: 联想教父柳传志","K825.38=76 547"
9076,2014/3/28,"公司法 gong si fa = =Corporation law / 范健, 王建文著eng"
因为有数据缺失项,不是标准的CSV格式,处理起来要多费些周折:
#采用一个全文没有出现的分割符`,将数据按一整行加载成为DF表
bt = load csv bymatch/fund/borrow_train.csv with (header=-1,sep="`")
rename bt as (0:"raw")
#然后采用字符串处理函数来进行分割
bt.l = str row by (split(","))
#采用UDF函数,将数组列,转换成独立列
bt = @udf bt by udf0.df_l2cs with (l)
#选择需要的列
bt2 = loc bt by (n100,n101,n102,n103)
dump bt2
bt2.n101 = str n101 by ([1:-1])将引号去掉就可以使用了,主要可以分析借阅次数(本书),阅读时间等,要想再深入一些可以分析阅读的门类等,就不详细介绍了。
(三)图书馆门禁数据
图书馆门禁数据在library_train.csv和library_test.csv文件中,图书馆的开放时间为早上7点到晚上22点,门禁编号数据在2014/02/23之前只有“编号”信息,之后引入了“进门、出门”信息,还有些异常信息为null,请参赛者自行处理。
学生id,门禁编号,具体时间
3684,"5","2013/09/0108:42:50"
7434,"5","2013/09/0108:50:08"
8000,"进门2","2014/03/3118:20:31"
5332,"小门","2014/04/0320:11:06"
7397,"出门4","2014/09/0416:50:51"
#加载成为DF表
lt = load csv bymatch/fund/library_train.csv with (header=-1)
rename lt as(0:"id",1:"gate",2:"time")
dump lt
再来看一下2014/02/23之后的数据是否有变化:
#过滤2014/02/23之后的数据
lt_2 = filter lt by (time>="2014/02/23 00:00:00")
dump lt_2
数据还真发生了变化,有出入信息了。因为是初探,我们也不做深入分析,简单看下次数吧。
#udf函数对单一字段直接进行分组求和
lt_count = @udf lt by udf0.df_agg_countwith (id)
#可视化查看
pot lt_count
最多的学生是1485次,最少的居然两年只去1次(惨不忍睹,都忙啥了?),平均是122次。
去的次数最多的是不是学习成绩最好呢,一会我们验证一下。
(四)学生成绩数据
学生成绩数据score_train.csv和score_test.csv
注:成绩排名的计算方式是将所有成绩按学分加权求和,然后除以学分总和,再按照学生所在学院排序。
学生id,学院编号,成绩排名
#加载成绩数据
st = load csv bymatch/fund/score_train.csv with (header=-1)
rename st as(0:"id",1:"college",2:"score")
dump st
成绩数据就这样了,我们来看一下图书馆次数最多的学生成绩到底怎么样,是真的一份耕耘一份收获,还是在磨洋工装样子呢。
#取去图书馆次数最多的100人
lt_count = @udf lt_count byudf0.df_reset_index
rename lt_count as ("index":"id")
ltc_t100 = limit lt_count by 100
#和成绩进行关联
t100_st = @udf ltc_t100,st byudf0.df_ljoin with (id,id)
t100_st = @udf t100_st byudf0.df_set_index with (id)
t100_st = @udf t100_st byudf0.df_drop_col with (college)
#最后看可是化结果
plot t100_st
红线代表去图书馆的次数,绿线代表成绩的排名,看完这个也很心塞啊!其中最好的才排学院30名,比比都是500名开外,都在图书馆干嘛了呢?
好吧,再来看看学院的学霸们(前100名)到底去不去图书馆呢?
#取每个学院的前50名
st_t100 = filter st by (score <=100)
st_t100_t = @udf st_t100,lt_count byudf0.df_ljoin with (id,id)
st_t100_t = @udf st_t100_t byudf0.df_set_index with (id)
#居然出现空值,学霸竟然一次图书馆都没去过
st_t100_t = @udf st_t100_t byudf0.df_fillna with (0)
st_t100_t = @udf st_t100_t byudf0.df_drop_col with (college)
st_t100_t = order st_t100_t bycount,score
dump st_t100_t
看这满屏的0,不知你作何感想?禁不住要问学霸去哪了?这还是以前的大学图书馆吗?
红色代表成绩,绿色代表去图书馆的次数,去图书馆的平均线是105,看来"死读书"是越来越没市场了。^V^
有兴趣的同学,可以将学霸的数据和深夜外出的数据碰一下,看看学霸到底去哪了。
三、小结
通过本期对这四类数据的探索,大家应该对学生消费以外的学习生活有所了解了。虽然对精准资助的影响可能不是很大,但对最后提高细小的准确率还是有帮助的,也对学校怎样使用大数据加强校园的管理和学生的价值引导有积极作用。
好了,下期我们就要真刀实枪通过机器学习进行训练了,是不是离奖金又进了一步呢!加油!
原文地址:http://12238590.blog.51cto.com/12228590/1883983