文档章节

使用FEA Spk探索经典数据集MovieLens

openfea
 openfea
发布于 2017/06/15 21:19
字数 1433
阅读 19
收藏 0

有一种烦恼

叫“巧妇难为无米之炊”

一身的好技术

却苦于没有原料而无法发挥

相信很多想练手的FEA数据分析师

也有为找不到可以分析的数据集而烦恼的时候吧

今天我就告诉大家一个获取数据集的好地方

不用爬虫

合规使用

它就是MovieLens数据集

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作图如下

评分分布看来也应该挺满足正态分布的。

© 著作权归作者所有

openfea
粉丝 18
博文 86
码字总数 95615
作品 1
杭州
其他
私信 提问
最好用的 AI 开源数据集 Top 39:NLP、语音等 6 大类

以下是精心收集的一些非常好的开放数据集,也是做 AI 研究不容错过的数据集。 标签解释 【经典】这些是在 AI 领域中非常著名、众所周知的数据集。很少有研究者或工程师没有听说过它们。 【有...

达尔文
2017/02/24
5.7K
7
K-means算法(基于MovieLens数据分别对user和movie聚类)

本代码对高维的数据使用K-means算法进行聚类。使用的数据集是MovieLens。MovieLens中一共包含十万条记录,每一条记录分别由用户ID,电影ID,用户对电影的评分(1~5),以及日期组成。本代码使...

robin_Xu_shuai
2016/06/13
0
0
【推荐系统实践】基于用户的协同过滤算法(UserCF)的python实现

1.数据集MovieLens MovieLens数据集包含多个用户对多部电影的评级数据,也包括电影元数据信息和用户属性信息。这个数据集经常用来做推荐系统,机器学习算法的测试数据集。尤其在推荐系统领域...

李文豪
2018/10/25
0
0
使用Mahout搭建推荐系统之入门篇2-玩转你的数据1

用意: 搞推荐系统或者数据挖掘的, 对数据要绝对的敏感和熟悉, 并且热爱你的数据. 分析数据既要用统计分析那一套,又要熟悉业务发掘有趣的特征(feature). 后者有意思的多,但是因为我业务做的不...

清风漫步
2013/11/02
1K
0
基于 Python scikit 构建和分析推荐系统 - Surprise

Surprise是一个基于Python scikit构建和分析推荐系统。 设计时考虑到以下目的: 让用户完美控制他们的实验。为此,我们非常强调文档,我们试图通过指出算法的每个细节尽可能清晰和准确。 减轻...

匿名
02/25
2.4K
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
5
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部