MovieLens 1M 数据集
MovieLens 1M 数据集
了解有关具有丰富数据,图像和预告片的电影的更多信息。
!git clone https://github.com/wesm/pydata-book!tree pydata-book/datasets/movielens
0 导入相关库
# 基础
import numpy as np # 处理数组
import pandas as pd # 读取数据&&DataFrame
import matplotlib.pyplot as plt # 制图
import seaborn as sns
from matplotlib import rcParams # 定义参数
from matplotlib.cm import rainbow # 配置颜色%matplotlib inline
import warnings
warnings.filterwarnings('ignore') # 忽略警告信息
np.set_printoptions(precision=4) # 小数点后
pd.options.display.max_rows = 10 # 最大行数
1 读取文本文件(ZIP格式)
用户信息
人口统计学数据(年龄、职业、邮编)
6000名用户信息
unames = ['user_id', 'gender', 'age', 'occupation', 'zip']
user = pd.read_table('pydata-book/datasets/movielens/users.dat', sep='::', header=None, names=unames)
user
User information is in the file users.dat
and is in the following format:
UserID::Gender::Age::Occupation::Zip-code
Gender is denoted by a “M” for male and “F” for female
Age is chosen from the following ranges:
- 1: “Under 18”
- 18: “18-24”
- 25: “25-34”
- 35: “35-44”
- 45: “45-49”
- 50: “50-55”
- 56: “56+”
Occupation is chosen from the following choices:
- 0: “other” or not specified
- 1: “academic/educator”
- 2: “artist”
- 3: “clerical/admin”
- 4: “college/grad student”
- 5: “customer service”
- 6: “doctor/health care”
- 7: “executive/managerial”
- 8: “farmer”
- 9: “homemaker”
- 10: “K-12 student”
- 11: “lawyer”
- 12: “programmer”
- 13: “retired”
- 14: “sales/marketing”
- 15: “scientist”
- 16: “self-employed”
- 17: “technician/engineer”
- 18: “tradesman/craftsman”
- 19: “unemployed”
- 20: “writer”
电影评分
100万条评分
数据
rnames = ['user_id', 'movie_id', 'rating', 'timestamp']
ratings = pd.read_table('pydata-book/datasets/movielens/ratings.dat', sep='::', header=None, names=rnames)
ratings
rnames = ['user_id', 'movie_id', 'rating', 'timestamp']
ratings = pd.read_table('pydata-book/datasets/movielens/ratings.dat', sep='::', header=None, names=rnames)
ratings
All ratings are contained in the file ratings.dat
and are in the following format:
UserID::MovieID::Rating::Timestamp
- UserIDs range between 1 and 6040
- MovieIDs range between 1 and 3952
- Ratings are made on a 5-star scale (whole-star ratings only)
- Timestamp is represented in seconds since the epoch as returned by time(2)
- Each user has at least 20 ratings
电影元数据(风格类型和年代)
4000部电影信息
mnames = ['movie_id', 'title', 'genres']
movies = pd.read_table('pydata-book/datasets/movielens/movies.dat', sep='::', header=None, names=mnames)
movies
Movie information is in the file movies.dat
and is in the following format:
MovieID::Title::Genres
Titles are identical to titles provided by the IMDB (including year of release)
Genres are pipe-separated and are selected from the following genres:
- Action
- Adventure
- Animation
- Children’s
- Comedy
- Crime
- Documentary
- Drama
- Fantasy
- Film-Noir
- Horror
- Musical
- Mystery
- Romance
- Sci-Fi
- Thriller
- War
- Western
Some MovieIDs do not correspond to a movie due to accidental duplicate
entries and/or test entriesMovies are mostly entered by hand, so errors and inconsistencies may exist
2 数据预处理
合并((ratings, users), movies)
pd.merge
data = pd.merge(pd.merge(ratings, users), movies)
data
按性别计算每部电影的平均分
pd.DataFrame.pivot_table # 行 -> 列
mean_ratings = data.pivot_table('rating', index='title', columns='gender', aggfunc='mean')
mean_ratings
内容为电影平均得分
行标为电影名称(索引)
列标为性别
过滤评分数据不够
300
条的电影
pd.DataFrame.groupby
pd.DataFrame.size
ratings_by_title = data.groupby('title').size()
ratings_by_title
pd.Series.index
active_titles = ratings_by_title.index[ratings_by_title >= 300]
active_titlesmean_ratings = mean_ratings.loc[active_titles]
mean_ratings
mean_ratings = mean_ratings.loc[active_titles]
mean_ratings
女性 & 男性观众最爱看电影(top10)
pd.DataFrame.sort_values
top_female_ratings = mean_ratings.sort_values(by='F', ascending=False)
top_female_ratingstop_male_ratings = mean_ratings.sort_values(by='M', ascending=False)
top_male_ratingstop_female_ratings10 = top_female_ratings['F'][:10]
top_female_ratings10top_male_ratings10 = top_male_ratings['M'][:10]
top_male_ratings10
rcParams['font.size'] = 16sns.barplot(top_female_ratings10.values, top_female_ratings10.index)
plt.xlabel('rating')
plt.title('top_female_ratings10', {'fontsize': rcParams['axes.titlesize']})
sns.barplot(top_male_ratings10.values, top_male_ratings10.index)
a = set(top_female_ratings10.index) # 女性
ab = set(top_male_ratings10.index) # 男性
ba & b # 交集
pd.DataFrame.loc
mean_ratings.loc[a&b]
intersection = mean_ratings.loc[a&b]
intersection.describe()
plt.legend
intersection.plot.barh()
plt.legend(prop={'size':8}, loc='center') # 图例
计算评分分歧
mean_ratings['diff'] = mean_ratings['M'] - mean_ratings['F']
mean_ratings
pd.DataFrame.sort_values
sorted_by_diff = mean_ratings.sort_values(by='diff')
sorted_by_diff
男性更喜欢的电影
对排序结果反序并取出前10行
sorted_by_diff[::-1][:10]
不考虑性别因素
标准差
rating_std_by_title = data.groupby('title')['rating'].std()
rating_std_by_title
过滤
rating_std_by_title = rating_std_by_title.loc[active_titles]
rating_std_by_titlerating_std_by_title.sort_values(ascending=False)[:10]
data.groupby('genres').size()
MovieLens 1M 数据集相关推荐
- 利用 Python 分析 MovieLens 1M 数据集
1 数据集简介 MovieLens数据集是一个关于电影评分的数据集,里面包含了从IMDB, The Movie DataBase上面得到的用户对电影的评分信息,详细请看下面的介绍. 1 links.c ...
- movielens数据集导入mysql_我来做数据--如何对数据进行处理以满足机器学习技术(一):MovieLens数据...
标签(空格分隔): 数据分析 python 数据挖掘 MovieLens 1M数据集 一组从20世纪90年末到21世纪初由MovieLens用户提供的电影评分数据.这些数据中包括电影评分.电影元数据( ...
- Learning: 利用Python进行数据分析 - MovieLens 数据集的探索
MovieLens 1M数据集含有来自6000名用户对4000部电影的100万条评分数据,分为三个表,movies.ratings.users 数据处理 通过pandas.read_table将各表转 ...
- 利用python进行数据分析数据集_《利用Python进行数据分析》终章·数据分析案例·学习笔记(二)...
一.第14章 数据分析案例 本书正文的最后一章,我们来看一些真实世界的数据集.对于每个数据集,我们会用之前介绍的方法,从原始数据中提取有意义的内容.展示的方法适用于其它数据集,也包括你的.本章包含了一 ...
- 第四课.KNN电影推荐
目录 基于近邻用户的协同过滤 基于近邻物品的协同过滤 相似度计算-Jaccard相似度 实验:基于KNN的电影推荐系统 简介 movielens 数据集 模型实现 基于近邻用户的协同过滤 基于近邻用户 ...
- python推荐系统-基于Python的推荐系统的设计与实现
张玉叶 摘 要: 大数据时代的推荐系统可以帮助用户从海量信息中高效地获取自己的潜在需求,是大数据在互联网领域的典型应用.文章介绍了利用Python语言实现的一个基于物品的协同过滤算法推荐系统,给出了 ...
- python数据分析视频网盘-利用Python进行数据分析视频教程云盘下载
利用Python进行数据分析视频教程 内容简介 本视频讲的是利用Python进行数据控制.处理.整理.分析等方面的具体细节和基本要点.同时,它也是利用Python进行科学计算的实用指南(专门针对数据密 ...
- python数据分析第七章实训3_《利用Python进行数据分析·第2版》第7章 数据清洗和准备7.1 处理缺失数据7.2 数据转换7.3 字符串操作7.4 总结...
在数据分析和建模的过程中,相当多的时间要用在数据准备上:加载.清理.转换以及重塑.这些工作会占到分析师时间的80%或更多.有时,存储在文件和数据库中的数据的格式不适合某个特定的任务.许多研究者都选择使 ...
- python中写入csv文件的方法_Python写入CSV文件的方法
python笔记5-python2写csv文件中文乱码问题 前言 python2最大的坑在于中文编码问题,遇到中文报错首先加u,再各种encode.decode. 当list.tuple.dict里面 ...
- TensorFlow实战——深度学习训练个性化推荐系统
请安装TensorFlow1.0,Python3.5 项目地址:https://github.com/xiaobingchan/movie_recommender 前言 本项目使用文本卷积神经网络,并 ...
最新文章
- php限制字符输入,.NET_asp.net(c#)限制用户输入规定的字符和数字的代码,一下是这个代码: 只允许 用 - phpStudy...
- Nature综述:噬菌体的百年研究
- opencv和HALCON坐标系的不同
- 《深入.NET平台和C# 编程》内部测试 笔试题
- nssl1232-函数【数论,欧拉函数,莫比乌斯反演】
- 云有约 | 精华汇总
- 内置模块/核心模块 (自带的)---http 服务器模块
- SSH远程链接:SCP远程拷贝文件与文件夹
- 使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能(七)
- 145.Binary Tree Postorder Traversal
- Android开发中加载Gif动画图片方法
- android室内地图,室内位置-与地图交互-开发指南-Android 室内地图SDK | 高德地图API...
- CKEditor配置使用
- Google云游戏平台Stadia好不好玩?第一波实测火热出炉!
- 用Python分析北京二手房房价
- Win10解决:系统管理员已阻止你运行此应用
- 关于ppt无法添加页码的解决办法
- 51单片机利用8266获取网络时间
- C语言程序设计笔记(浙大翁恺版) 第五周:循环控制
- 【JDK7】新特性(4) NIO2.0 文件系统