智慧中國杯百萬大獎賽解讀 | 學霸去哪了(二)

在上一篇中咱們探討了學生的消費數據,消費數據對本次競賽預測來說很重要。本篇將探索寢室門禁、圖書借閱、圖書館門禁和學生成績等一些和學生學習相關的數據,來看看學生的品行如何,雖然資助金和獎學金的性質不太同樣,但咱們畢竟仍是想資助那些品學兼優的學生,而不是資助雖然家境很貧寒但不學無術的學生。數組

因此本篇探索的數據能夠比較好的反應出這些狀況。固然這裏面還隱藏了更好玩的話題,學霸去哪了?話很少說,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、小結

經過本期對這四類數據的探索,你們應該對學生消費之外的學習生活有所瞭解了。雖然對精準資助的影響可能不是很大,但對最後提升細小的準確率仍是有幫助的,也對學校怎樣使用大數據增強校園的管理和學生的價值引導有積極做用。

好了,下期咱們就要真刀實槍經過機器學習進行訓練了,是否是離獎金又進了一步呢!加油!

相關文章
相關標籤/搜索