在上一篇中咱们探讨了学生的消费数据,消费数据对本次竞赛预测来说很重要。本篇将探索寝室门禁、图书借阅、图书馆门禁和学生成绩等一些和学生学习相关的数据,来看看学生的品行如何,虽然资助金和奖学金的性质不太同样,但咱们毕竟仍是想资助那些品学兼优的学生,而不是资助虽然家境很贫寒但不学无术的学生。数组
因此本篇探索的数据能够比较好的反应出这些状况。固然这里面还隐藏了更好玩的话题,学霸去哪了?话很少说,let's go!机器学习
1、数据目录概况函数
官方提供的数据分为两组,分别是训练集和测试集,每一组都包含大约1万名学生的信息纪录: 学习
图书借阅数据borrow_train.txt和borrow_test.txt;测试
一卡通数据card_train.txt和card_test.txt;大数据
寝室门禁数据dorm_train.txt和dorm_test.txt;orm
图书馆门禁数据library_train.txt和library_test.txt;blog
学生成绩数据score_train.txt和score_test.txt;排序
助学金获奖数据subsidy_train.txt和subsidy_test.txt(实际下载的数据是studentID_test.txt即你须要预测的学生样本) 。 字符串
OpenFEA为作好本次活动的深度支持和报道,特下载了上述数据,并在互联网上搭建的在线实验环境能够直接分析此数据,具体在www.openfean.cn下载专区里有介绍,全部数据放在match/fund目录下,文件后缀名改为了csv。
2、数据探索
(一)寝室门禁数据
训练数据和测试数据分别是dorm_train.csv和dorm_test.csv
字段描述和示例以下:
学生id,具体时间,进出方向(0进寝室,1出寝室)
13126,"2014/01/21 03:31:11","1"
9228,"2014/01/21 10:28:23","0"
#加载寝室门禁训练数据
dt = load csv by match/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 hour in [0,1,2,3,4])
#过滤深夜晚归的,有2131条,看来晚归的要大于早出的,但整体仍是好的,^V^
dt_in = filter dt by (isout==0 and hour in [0,1,2,3,4])
#再来看一下有多少学生,以及是否有惯犯
dt_io = union dt_out,dt_in
dt_io_count = @udf dt_io by udf0.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 by match/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/01 08:42:50"
7434,"5","2013/09/01 08:50:08"
8000,"进门2","2014/03/31 18:20:31"
5332,"小门","2014/04/03 20:11:06"
7397,"出门4","2014/09/04 16:50:51"
#加载成为DF表
lt = load csv by match/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_count with (id)
#可视化查看
pot lt_count
最多的学生是1485次,最少的竟然两年只去1次(惨不忍睹,都忙啥了?),平均是122次。
去的次数最多的是否是学习成绩最好呢,一会咱们验证一下。
(四)学生成绩数据
学生成绩数据score_train.csv和score_test.csv
注:成绩排名的计算方式是将全部成绩按学分加权求和,而后除以学分总和,再按照学生所在学院排序。
学生id,学院编号,成绩排名
#加载成绩数据
st = load csv by match/fund/score_train.csv with (header=-1)
rename st as (0:"id",1:"college",2:"score")
dump st
成绩数据就这样了,咱们来看一下图书馆次数最多的学生成绩到底怎么样,是真的一份耕耘一份收获,仍是在磨洋工装样子呢。
#取去图书馆次数最多的100人
lt_count = @udf lt_count by udf0.df_reset_index
rename lt_count as ("index":"id")
ltc_t100 = limit lt_count by 100
#和成绩进行关联
t100_st = @udf ltc_t100,st by udf0.df_ljoin with (id,id)
t100_st = @udf t100_st by udf0.df_set_index with (id)
t100_st = @udf t100_st by udf0.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 by udf0.df_ljoin with (id,id)
st_t100_t = @udf st_t100_t by udf0.df_set_index with (id)
#竟然出现空值,学霸居然一次图书馆都没去过
st_t100_t = @udf st_t100_t by udf0.df_fillna with (0)
st_t100_t = @udf st_t100_t by udf0.df_drop_col with (college)
st_t100_t = order st_t100_t by count,score
dump st_t100_t
看这满屏的0,不知你做何感想?禁不住要问学霸去哪了?这仍是之前的大学图书馆吗?
红色表明成绩,绿色表明去图书馆的次数,去图书馆的平均线是105,看来"死读书"是愈来愈没市场了。^V^
有兴趣的同窗,能够将学霸的数据和深夜外出的数据碰一下,看看学霸到底去哪了。
3、小结
经过本期对这四类数据的探索,你们应该对学生消费之外的学习生活有所了解了。虽然对精准资助的影响可能不是很大,但对最后提升细小的准确率仍是有帮助的,也对学校怎样使用大数据增强校园的管理和学生的价值引导有积极做用。
好了,下期咱们就要真刀实枪经过机器学习进行训练了,是否是离奖金又进了一步呢!加油!