使用FEA Spk探索經典數據集MovieLens

有一種煩惱算法

叫「巧婦難爲無米之炊」機器學習

一身的好技術學習

卻苦於沒有原料而沒法發揮測試

相信不少想練手的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做圖以下

評分分佈看來也應該挺知足正態分佈的。

相關文章
相關標籤/搜索