有一种烦恼算法
叫“巧妇难为无米之炊”机器学习
一身的好技术学习
却苦于没有原料而没法发挥测试
相信不少想练手的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做图以下
评分分布看来也应该挺知足正态分布的。