有一種煩惱算法
叫「巧婦難爲無米之炊」機器學習
一身的好技術學習
卻苦於沒有原料而沒法發揮測試
相信不少想練手的FEA數據分析師ui
也有爲找不到能夠分析的數據集而煩惱的時候吧編碼
今天我就告訴你們一個獲取數據集的好地方spa
不用爬蟲.net
合規使用code
它就是MovieLens數據集orm
MovieLens數據集包括電影元數據信息和用戶屬性信息。經常用來作推薦系統,機器學習算法的測試數據集。
尤爲在推薦系統領域,不少著名論文都是基於這個數據集的。
下載地址爲:http://files.grouplens.org/datasets/movielens/,有好幾種版本,對應不一樣數據量,可選用。
本文下載數據量最小的100k版本,對該數據集進行探索:
初步預覽
1. 首先是用戶信息:
其中各列數據分別爲:
用戶id | 用戶年齡 | 用戶性別 | 用戶職業 | 用戶郵政編碼
2. 而後是影片信息:
其中前幾列數據分別爲:
影片id | 影片名 | 影片發行日期 | 影片連接 | (後面幾列先不去管)
3. 最後是評分數據:
其中各列數據分別爲:
用戶id | 影片id | 評分值 | 時間戳(timestamp格式)
探索用戶數據
1. 打開fea界面,執行如下原語
#建立spk鏈接
spk = @udf df0@sys by spk.open_spark
#加載|爲分隔符的u.user文件
df= @udf spk by spk.load_format with (|,/sample/u.user)
給df表更換列名
df=@udf df by spk.renameall with (uid,age,sex,profession,code)
#查看加載後的數據,默認顯示前10行
a= @udf df by spk.dump
dump a
2. 分別統計用戶,性別,職業的個數:
df1=@udf df by spk.loc with (uid) #選擇uid這列
a=@udf df1 by spk.count #統計用戶數
dump a
df2=@udf df by spk.loc with (sex) #選擇sex這列
df2=@udf df2 by spk.distinct #對sex進行去重
a=@udf df2 by spk.count #統計性別數
dump a
df3=@udf df by spk.loc with (profession) #選擇profession這列
df3=@udf df3 by spk.distinct #對profession進行去重
a=@udf df3 by spk.count #統計職業數
dump a
df4=@udf df by spk.loc with (code) #選擇code這列
df4=@udf df4 by spk.distinct #對code進行去重
a=@udf df4 by spk.count #統計郵編數
dump a
3. 查看年齡分佈狀況:
df5=@udf df by spk.loc with (age) #選擇age這列
df51=@udf df5 by spk.df_agg_count with (age) #對age字段分組統計
df52= @udf df51 by spk.order with (age)
#對df51表按照age字段進行升序排列
a=@udf df52 by spk.to_DF
dump a
下面使用fea畫出圖,以下所示
18歲以上觀看者人數激增,估計是「高考」完了時間多了?
20多歲的年輕人,我猜主要是大學生和剛工做不久的年輕人?觀看者最多。
而後50歲的觀看者也蠻多的,估計是快退休了,開始享受生活了。
4.查看職業分佈狀況:
df6=@udf df by spk.loc with (profession) #profession這列
df61=@udf df6 by spk.df_agg_count with (profession)
#對profession字段分組統計
b=@udf df61 by spk.to_DF
dump b
使用fea 作出圖,以下所示
果真,是學生,教育工做者觀看影片的多。
不過程序猿觀衆也很多...... 醫生是最少看電影的。
探索電影數據
打開fea界面,運行如下命令
m= @udf spk by spk.load_format with (|,/sample/u.item)
a=@udf m by spk.dump
dump a
咱們須要的數據是
影片id | 影片名 | 影片發行日期 | 影片連接 |
m= @udf m by spk.loc with (_c0,_c1,_c2,_c4)#選擇這四列
m= @udf m by spk.renameall with (pid,pname,pdate,plink)
#爲這四列重命名
a=@udf m by spk.dump
dump a
能夠看到咱們所要的數據了
a=@udf m by spk.count #統計有多少部電影
dump a
c= @udf m by spk.df_null_count with (pid,pname,pdate,plink)
#統計這四個字段是否有空值,有多少個空值
dump c
m= @udf m by spk.drop_null with (pdate)
#將pdate字段爲null的過濾掉
c= @udf m by spk.df_null_count with (pid,pname,pdate,plink)
dump c
能夠看到已通過濾掉了
m1= @udf m by spk.opfield with (pid:pname:substring(pdate,-4,4):substring(pdate,-4,4) as time:plink)
#選擇pid列,pname列,pdate列提取出年份列名爲substring(pdate,-4,4)
substring(pdate,-4,4)列重命名爲time,plink列
p= @udf m1 by spk.dump
dump p
能夠看到多了一列substring(pdate,-4,4)
m1= @udf m1 by spk.df_drop_col with (substring(pdate, -4, 4))
#刪除substring(pdate, -4, 4)這列
p= @udf m1 by spk.dump
dump p
m2= @udf m1 by spk.opfield with (1998-time)
#由於這份數據集比較老,1998年提供的,因此就按當時的電影年齡來統計吧
m2= @udf m2 by spk.rename with ((1998 - time):age)
#將(1998 - time)字段命名爲age字段
m3= @udf m2 by spk.df_agg_count with (age)
#對age字段進行分組統計
m3= @udf m3 by spk.alter with (age:int)
#將age字段的類型修改成int類型
m3= @udf m3 by spk.order with (age)
#按照m3表的age字段升序排列
c= @udf m3 by spk.to_DF
dump c
使用fea做圖以下
能夠看到,大部分電影仍是比較新的
探索評級數據
打開fea的界面,輸入如下原語
u= @udf spk by spk.load_format with (\t,/sample/u.data)
u=@udf u by spk.renameall with (uid,pid,rating,time)
#給四列數據重命名
p=@udf u by spk.count#統計有多少條評分記錄
dump p
p=@udf u by spk.dump #查看錶的數據
dump p
u1= @udf u by spk. df_desc with (rating)
#查看rating字段的最大值,最小值,平均值等指標
p=@udf u1 by spk.dump
dump p
u2=@udf u by spk.df_agg_count with (uid)
#統計不一樣用戶的評分次數
p=@udf u2 by spk.dump
dump p
u3= @udf u by spk.df_agg_count with (rating)
#對評分數據進行分組統計
u3= @udf u3 by spk.order with (rating)
#按照rating字段升序
d= @udf u3 by spk.to_DF
dump d
使用fea做圖以下
評分分佈看來也應該挺知足正態分佈的。