python 处理 MovieLens 数据

article/2025/10/12 16:09:53

文章目录

  • 一、总述
  • 二、处理流程
    • 1. 处理 users 数据
    • 2. 处理 movies 数据
    • 3. 处理 ratings 数据
    • 4. 将 users、movies 和 ratings 数据合并
    • 5. one-hot 处理
    • 6. 完整代码

一、总述

该文记录处理 MovieLens-1m 数据集的步骤,首先分别处理用户、电影和评分数据,接着将这三部分数据进行合并,最后 one-hot 处理。

二、处理流程

1. 处理 users 数据

users 数据描述:
用户文件有以下字段,分别是用户ID、性别、年龄、职业和邮编( UserID::Gender::Age::Occupation::Zip-code )

处理思路:

  • 将用户性别 M、F 进行 label encoding 编码
  • 将年龄 label encoding 编码
  • 邮编取前3位

代码:

# 处理用户
users = pd.read_table('../../dataset/ml-1m/users.dat', sep='::', header=None, engine='python', encoding='utf-8').to_numpy()# 处理用户年龄和邮编
le = LabelEncoder()
users[:, 1] = le.fit_transform(users[:, 1]) # 将性别 label Encodingfor user in users:  # 将年龄 Lable Encodingif user[2] == 1:user[2] = 0elif user[2] == 18:user[2] = 1 elif user[2] == 25:user[2] = 2elif user[2] == 35:user[2] = 3elif user[2] == 45:user[2] = 4elif user[2] == 50:user[2] = 5elif user[2] == 56:user[2] = 6user[4] = int(user[4][0:3]) - 1 # 取邮编的前3位user[0] -= 1 //0 开始

users 处理结果:
在这里插入图片描述

2. 处理 movies 数据

movies 数据描述:
电影文件包含三个字段,分别是电影ID、电影名、电影类型( MovieID::Title::Genres )

处理思路:
将电影名称删除,电影类型在合并users、movies和ratings之后做 one-hot 处理。

代码:

# 处理电影
movies = pd.read_table('../../dataset/ml-1m/movies.dat', sep='::', header=None, engine='python', encoding='ISO-8859-1').to_numpy()
movies = np.delete(movies, 1, axis=1) # 删除电影名称列  
movies[:, 0] -= 1

movies 处理结果:
在这里插入图片描述

3. 处理 ratings 数据

ratings 数据描述:
电影评分文件包含用户ID、电影ID、评分和时间戳( UserID::MovieID::Rating::Timestamp )

处理思路:

  • 将时间戳字段删除
  • 将评分大于3的作为正样本(记为1),评分小于等于3的作为负样本(记为0)

代码:

# 处理用户评分
ratings = pd.read_table('../../dataset/ml-1m/ratings.dat', sep='::', header=None, engine='python', encoding='utf-8').to_numpy()[:, :3]
ratings[:, 0:2] -= 1for i in range(len(ratings)):ratings[i][2] = 1 if ratings[i][2] > 3 else 0

4. 将 users、movies 和 ratings 数据合并

代码:

unames = ['userId', 'gender', 'age', 'occupation', 'zipCode']
mnames = ['movieId', 'genres']
rnames = ['userId', 'movieId', 'rating']users = pd.DataFrame(users, columns=unames)
movies = pd.DataFrame(movies, columns=mnames)
ratings = pd.DataFrame(ratings, columns=rnames)data = pd.merge(movies, ratings, on=['movieId'])
data = pd.merge(users, data, on=['userId'])

数据合并结果:
在这里插入图片描述

5. one-hot 处理

处理思路:

  • 将电影类型单独手动 one-hot 处理
  • 然后将 data 中的电影类型删除,再做 one-hot 处理

代码:

data = data.values // dataframe 转 numpy
y = data[:, 7]
x = np.delete(data, -1, axis=1) # 将评分列删除
typelist = x[:, -1]
x = np.delete(x, -1, axis=1)    # 将电影类型列删除# 将电影类型 one-hot 编码
genres = [] # 电影类型 ont-hot 编码
genresDict = {'Action' : 0, 'Adventure' : 1, 'Animation' : 2, "Children's" : 3, 'Comedy' : 4, 'Crime' : 5, 'Documentary' : 6, 'Drama' : 7, 'Fantasy' : 8, 'Film-Noir' : 9, 'Horror' : 10, 'Musical' : 11, 'Mystery' : 12, 'Romance' : 13, 'Sci-Fi' : 14, 'Thriller' : 15, 'War' : 16, 'Western' : 17}
for types in typelist:strs = types.split('|')tmp = np.zeros(18)for str in strs:tmp[genresDict[str]] = 1genres.append(tmp)
genres = np.array(genres)# 将 userId, gender, age, occupation, zipCode, movieId one-hot 编码
encoder = OneHotEncoder(handle_unknown='ignore')
x = encoder.fit_transform(x).toarray()
x = np.concatenate((x, genres),axis=1)

x one-hot 结果:
在这里插入图片描述
y one-hot 结果:
在这里插入图片描述

6. 完整代码

import numpy as np
import pandas as pd
from sklearn.preprocessing import OneHotEncoder, LabelEncoder# 处理用户
users = pd.read_table('../../dataset/ml-1m/users.dat', sep='::', header=None, engine='python', encoding='utf-8').to_numpy()# 处理用户年龄和邮编
le = LabelEncoder()
users[:, 1] = le.fit_transform(users[:, 1]) # 将性别 label Encodingfor user in users:  # 将年龄 Lable Encodingif user[2] == 1:user[2] = 0elif user[2] == 18:user[2] = 1 elif user[2] == 25:user[2] = 2elif user[2] == 35:user[2] = 3elif user[2] == 45:user[2] = 4elif user[2] == 50:user[2] = 5elif user[2] == 56:user[2] = 6user[4] = int(user[4][0:3]) - 1 # 取邮编的前3位user[0] -= 1# 处理电影
movies = pd.read_table('../../dataset/ml-1m/movies.dat', sep='::', header=None, engine='python', encoding='ISO-8859-1').to_numpy()
movies = np.delete(movies, 1, axis=1) # 删除电影名称列  
movies[:, 0] -= 1# 处理用户评分
ratings = pd.read_table('../../dataset/ml-1m/ratings.dat', sep='::', header=None, engine='python', encoding='utf-8').to_numpy()[:, :3]
ratings[:, 0:2] -= 1for i in range(len(ratings)):ratings[i][2] = 1 if ratings[i][2] > 3 else 0unames = ['userId', 'gender', 'age', 'occupation', 'zipCode']
mnames = ['movieId', 'genres']
rnames = ['userId', 'movieId', 'rating']
users = pd.DataFrame(users, columns=unames)
movies = pd.DataFrame(movies, columns=mnames)
ratings = pd.DataFrame(ratings, columns=rnames)
data = pd.merge(movies, ratings, on=['movieId'])
data = pd.merge(users, data, on=['userId'])data = data.values
y = data[:, 7]
x = np.delete(data, -1, axis=1) # 将评分列删除
typelist = x[:, -1]
x = np.delete(x, -1, axis=1)    # 将电影类型列删除# 将电影类型 one-hot 编码
genres = [] # 电影类型 one-hot 编码
genresDict = {'Action' : 0, 'Adventure' : 1, 'Animation' : 2, "Children's" : 3, 'Comedy' : 4, 'Crime' : 5, 'Documentary' : 6, 'Drama' : 7, 'Fantasy' : 8, 'Film-Noir' : 9, 'Horror' : 10, 'Musical' : 11, 'Mystery' : 12, 'Romance' : 13, 'Sci-Fi' : 14, 'Thriller' : 15, 'War' : 16, 'Western' : 17}
for types in typelist:strs = types.split('|')tmp = np.zeros(18)for str in strs:tmp[genresDict[str]] = 1genres.append(tmp)
genres = np.array(genres)# 将 userId, gender, age, occupation, zipCode, movieId one-hot 编码
encoder = OneHotEncoder(handle_unknown='ignore')
x = encoder.fit_transform(x).toarray()
x = np.concatenate((x, genres),axis=1)

http://chatgpt.dhexx.cn/article/uBs76aRJ.shtml

相关文章

电影数据集总结:Netflix、MovieLens、LDOS-CoMoDa、AdomMovie

数据集: 1.Netflix 描述:包含Netflix上48万多个随机选取的匿名用户,对于1万7千多部电影的1兆多个电影评分 时间:1988.10~2005.11 内容: 包括training set,movie titles,probe set&#xff0…

从IMDB上爬取MovieLens数据集中的详细电影信息

文章目录 基于协同过滤的电影推荐系统数据集HTML页面分析爬虫代码运行时间百度网盘链接 基于协同过滤的电影推荐系统 用这个数据集实现了一个小型的电影推荐网站,GitHub代码 数据集 数据集是MovieLens提供的ml-latest-small https://grouplens.org/datasets/mov…

数据分析实例:MovieLens电影数据分析

数据分析实例:MovieLens电影数据分析 数据准备 数据集来源:grouplens.org/datasets/movielens/ 下载 ml-1m.zip,read me 中有电影评分介绍 MovieLens 1M电影分级。 稳定的基准数据集。 6000个用户观看4000部电影时获得100万个评分。 发布2…

Spark Hive实现基于协同过滤的电影推荐(MovieLens数据集)

这篇文章记录一下我之前做过的通过Spark与Hive实现的基于协调过滤的电影推荐。这篇文章只能提供算法、思路和过程记录,并没有完整的代码,仅尽量全面地记录过程细节方便参考。 一、数据获取 数据集是从下面这个地址下载的,数据集主要内容是关…

基于用户的协同过滤Movielens电影推荐系统简单实例

基于用户的协同过滤Movielens电影推荐系统简单实例 一、Movielens数据集 1. MovieLens数据集的下载(Download) 1) 从网站下载数据 链接: https://grouplens.org/datasets/movielens/. 有好几种版本,对应不同数据量,…

ML之GB:基于MovieLens电影评分数据集利用基于图的推荐算法(Neo4j图数据库+Cypher查询语言)实现对用户进行Top5电影推荐案例

ML之GB:基于MovieLens电影评分数据集利用基于图的推荐算法(Neo4j图数据库Cypher查询语言)实现对用户进行Top5电影推荐案例 目录 基于MovieLens电影评分数据集利用基于图的推荐算法(Neo4j图数据库Cypher查询语言)实现对用户进行Top5电影推荐案例 1、定义数据集 1.…

从IMDB上爬取MovieLens-1m的补充数据(电影海报和简介)

文章主要内容 本人是想做推荐算法相关的一名在校生,目前想做多模态融合,而MovieLens-1m数据集只有电影信息和用户信息,于是有想法能否在原有的电影推荐公开数据集中而外获取电影海报(图片信息)和电影简介(…

对Movielens数据集进行评分预测

对Movielens数据集进行评分预测 实验源码:lab3代码.ipynb 实验环境:vscode colab 数据解释: movies.dat的数据如下 1::Toy Story (1995)::Animation|Childrens|Comedy 2::Jumanji (1995)::Adventure|Childrens|Fantasy 3::Grumpier Old…

ML之KG:基于MovieLens电影评分数据集利用基于知识图谱的推荐算法(networkx+基于路径相似度的方法)实现对用户进行Top电影推荐案例

ML之KG:基于MovieLens电影评分数据集利用基于知识图谱的推荐算法(networkx基于路径相似度的方法)实现对用户进行Top电影推荐案例 目录 基于MovieLens电影评分数据集利用基于知识图谱的推荐算法(networkx基于路径相似度的方法)实现对用户进行Top电影推荐案例 # 1、定…

利用pandas对MovieLens电影数据分析

掌握pandas基本语法操作「pandas基础入门中有详细语法格式」后,就可以利用pandas做一些简单实例的数据处理。 Movie电影数据分析 首先需要下载电影数据集MovieLens,这个数据集中包含用户数据;电影数据;电影评分表。电影数据中包…

MovieLens数据集处理

有一个定律,对于内容的访问遵循80/20原则,也就是20%的内容,会占有80%的访问量。就是zipf分布[1]。  根据MovieLens的数据集中的ratings.dat,我做了数据处理,获取得分最高的2000个条目。 ml-pro.py import os import …

推荐系统笔记(二):常用数据集Movielens学习

介绍 movielens数据集是电影推荐数据集,数据集有多种大小和目的使用的数据集。按照使用目的可以分为两类,一类数据集适用于推进最新研究的数据,一类数据集是用于高校研究和教育科研使用的数据集。本次介绍三个数据集的使用和处理。 数据集下…

java读取movielens数据txt

各位好,我是菜鸟小明哥,movielens数据是常见的推荐方面的开源数据集,另一个推荐方面的数据集是新闻MIND,本文将从movielens再次出发,做基础的推荐方法,比如基本的基于标题的相似性,word2vector&…

推荐系统数据集之MovieLens

1.概述 MovieLens其实是一个推荐系统和虚拟社区网站,它由美国 Minnesota 大学计算机科学与工程学院的GroupLens项目组创办,是一个非商业性质的、以研究为目的的实验性站点。GroupLens研究组根据MovieLens网站提供的数据制作了MovieLens数据集合&#xff…

【工具】Movielens数据集详细介绍

MovieLens数据集 MovieLens数据集包含多个用户对多部电影的评级数据,也包括电影元数据信息和用户属性信息。 下载地址 http://files.grouplens.org/datasets/movielens/ 介绍 下面以ml-100k数据集为例进行介绍: 最主要用的是u.data(评分) | u.item…

movielens数据集简述

一、movielens数据集 ratings数据: 文件里面的内容包含了每一个用户对于每一部电影的评分。数据格式如下: userId, movieId, rating, timestamp userId: 每个用户的id movieId: 每部电影的id rating: 用户评分,是5星制,按半颗星的规模递增(0.5 stars - 5 stars) timestam…

Movielens数据集详细介绍

MovieLens数据集包含多个用户对多部电影的评级数据,也包括电影元数据信息和用户属性信息。下载地址为:http://files.grouplens.org/datasets/movielens/ 下面以ml-100k数据集为例进行介绍: 最主要用的是u.data(评分) | u.item(电影信息) …

movielens数据集介绍及使用python简单处理

0 前言 个性化推荐中,电影推荐研究时常使用movielens上的数据集。该网站的数据集主要分两部分, 一是用于推进最新研究进展的数据集。当前最新的是发布于2019年12月份的25M数据集。 二是用于高校、组织科研的数据集。该类数据集按其是否带有标签、时间…

mui用ajax上拉加载更多,mui上拉加载更多下拉刷新数据的封装过程

辗转用mui做了两个项目,空下来把mui上拉加载更多,下拉刷新数据做了一个简单的封装,希望可以帮助到需要的朋友 demo项目的结构 直接贴代码了 index.html mui上拉刷新下拉加载都这里了,两个方法搞定mui上拉刷新下拉加载demo--封装 l…

如何实现上拉加载和下拉刷新

下拉刷新和上拉加载这两种交互⽅式通常出现在移动端中 本质上等同于PC⽹⻚中的分⻚,只是交互形式不同 开源社区也有很多优秀的解决⽅案,如 iscroll 、 better-scroll 、 pulltorefresh.js 库等等 这些第三⽅库使⽤起来⾮常便捷 我们通过原⽣的⽅式实现…