利用pandas对MovieLens电影数据分析
掌握pandas基本语法操作「pandas基础入门中有详细语法格式」后,就可以利用pandas做一些简单实例的数据处理。
Movie电影数据分析
首先需要下载电影数据集MovieLens,这个数据集中包含用户数据;电影数据;电影评分表。电影数据中包含了电影id,电影名,电影类型。这个数据集中的数据都经过了预处理,保证一个用户至少对20个电影进行了评分。
导入数据
首先,通过pandas将电影数据导入程序中。
要想读用户信息,需要把用户表数据的标题先表示出来;读列表的第一个参数是文件名,因为没有表头,因此需要设置header为空。
unames = ['user_id','gender','age','occupation','zip']
users = pd.read_table('ml-1m/users.dat',sep = '::',header = None,names = unames)
同理将电影数据和电影评分数据也导入到程序;
rating_names = ['users_id','movie_id','rating','timestamp']
ratings = pd.read_table('ml-1m/users.dat',sep = '::',header = None,names = rating_names)movie_names = ['movie_id','title','genres']
movies = pd.read_table('ml-1m/users.dat',sep = '::',header = None,names = movie_names)
通过print (len( ))
可以返回导入数据的总数量,可以设置显示数据条数;
数据合并
pandas中,需要吧数据合并起来更利于分析,用merge函数先合并用户表和评分表,再合并电影表;
data = pd.merge(pd.merge(users,ratings),movies)
使用merge函数需要注意被合并表格需要有相同行/列名;当不指定合并行时,默认按照相同行/列名进行合并。
当没有相同的可以用于合并的行/列名时,运行报错:No common columns to perform merge on
merge函数会将两个表中的电影id一一对应进行匹配,通过data[data.users_id == 1
可以查看用户id为1的用户看的所有电影的评分;
用到的是pandas中数据透视的函数;查询值是评分,行索引是电影名,列索引是性别,通过平均值来聚合数据
计算每一部电影,不同性别的评分对比
ratings_by_gender = data.pivot_table(values = 'rating',\
index = 'title',columns = 'gender',aggfunc = 'mean')
ratings_by_gender.head(10)# check the top 10 movies of men and women
其中,pandas.pivot_table是pandas中数据透视表函数。
语法格式如下:
DataFrame.pivot_table(values=None, index=None, columns=None, \aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False)
其中参数:
- values 列:可选;
- index索引:如果传递数组,则其长度必须与数据长度相同。该列表可以包含任何其他类型(列表除外)。在数据透视表索引上进行分组的键。如果传递数组,则其使用方式与列值相同;
- columns行:如果传递数组,则其长度必须与数据长度相同。该列表可以包含任何其他类型(列表除外)。在数据透视表索引上进行分组的键。如果传递数组,则其使用方式与列值相同;
- aggfunc函数,函数列表,字典,默认为numpy.mean:如果传递了函数列表,则生成的数据透视表将具有层次结构列,其顶层是函数名称(从函数对象本身推断出)。如果传递了dict,则键为要聚合的列,值是函数或函数列表;
- fill_value标量,默认无:用于替换缺失的值(在汇总后的结果数据透视表中);
- margins,类型为bool,默认为False:添加所有行/列;
- dropna,类型为bool,默认为True:不要包括所有条目均为NaN的列;
- margins_name str,默认为“All”:当margins为True时将包含总计的行/列的名称。
在上述代码中,查询值是评分,行索引是电影名,列索引是性别,通过平均值来聚合数据
由此我们可以去分析哪些电影的男女观影分歧最大。要想算出分歧最大,就要算平均得分差异越大的数据,就需要加一列数据,用于存放男女评分数据差异值。
ratings_by_gender['diff'] = ratings_by_gender.F-ratings_by_gender.M
ratings_by_gender.head(10)# show 10 movies with big differences in ratings
diff:计算差异与所述数据帧另一元件相比,数据帧元件的erence(默认为前一行中元素)。
通过对diff进行排序,找出最大值,就可以找出分歧最大的电影,ascending是排序方式,默认升序。
ratings_by_gender.sort_values(by = 'diff',ascending = True).head(10)
数据分组
通过分析电影评分数据,看看那些电影看的人最多。给电影评分的人最多,说明看的人最多,就可以找出热门电影;
ratings_by_title = data.groupby('title').size()
按照电影名title来进行数据分组,通过size分别获取每个title下评分个数;按照title来进行分组;接着按照评分数量给数据进行排序(降序)找出最热门的10部电影.
ratings_by_title.sort_values(ascending = False).head(10)
从另一排序维度来看,我们可以通过数据透视表查看评分最高的电影。这里聚合函数还是选取求平均值;通过value=获取评分的数据,利用电影标题进行索引。
mean_ratings = data.pivot_table(values = 'rating',index = 'title',aggfunc = 'mean')
对上述平均评分数据进行排序,就可以得出评分最高的10部电影
mean_ratings.sort_values(by = 'rating',ascending = False).head(10)
通过评分最高的方式选出高分电影后,发现有些电影是很小众和陌生的,可以却是评分很高的电影,原因是看的人很少但看完后给了高分。因此,评价一部电影是否为好电影,不仅仅看评分还需要有足够大的观看人数。所以,我们可以说一部好电影,既要是热门电影,又要是评分很高的电影。
查看观看人数最多的top10电影的评分:
top_10_hot = ratings_by_title.sort_values(ascending = False).head(10)
mean_ratings.loc[top_10_hot.index]
同理查看评分最高top10电影的观看人数:
top_10_score = mean_ratings.sort_values(by = 'rating',ascending = False).head(10)
ratings_by_title.loc[top_10_score.index]
可见两个数据毫无重合,因此首先需要找出热度足够高的电影,即评分次数较多的电影。假设大于2000评分就代表热度足够高;接着需要从热度足够高的电影中排序查找评分足够搞得电影,即针对热门电影的评分数据进行降序排序处理,取top10即是真正的好电影了。
hot_movies = ratings_by_title[ratings_by_title > 2000]
print(len(hot_movies))
hot_movies.head(10)
hot_movies_rating = mean_ratings.loc[hot_movies.index]
top_10_good_movies = hot_movies_rating.sort_values(by = 'rating',ascending = False).head(10)
top_10_good_movies
利用pandas对MovieLens电影数据分析相关推荐
- 机器学习数据科学包(三)——Pandas实例:MovieLens电影数据分析
电影数据分析 准备工作 从网站 grouplens.org/datasets/movielens 下载 MovieLens 1M Dataset 数据. 数据说明 参阅数据介绍文件 README.tx ...
- pandas实例——MovieLens电影数据实战分析
在上一篇文章中我介绍了pandas的基本用法,今天我就用pandas实战操作,大家可以一起感受一下数据分析是如何从一堆数字中找到有价值的信息的.下面我也附上了代码,我强烈推荐大家将数据下载下来,亲自去 ...
- python基于爬虫技术的海量电影数据分析源码,数据处理分析可视化,GUI界面展示
基于爬虫技术的海量电影数据分析 介绍 一个基于爬虫技术的海量电影数据分析系统 系统架构 本系统主要分为四个部分,分别为后端爬虫抓取.数据处理分析可视化.GUI界面展示.启动运行,分别对应getData ...
- 【机器学习-数据科学】第三节:数据分析实例 分析MovieLens电影数据
数据分析实例 分析MovieLens电影数据 导入数据 数据合并 按性别查看各个电影的平均评分 活跃电影排行榜 电影投票数据 grouplens.org/datasets/movielens 把文件放 ...
- 数据分析入门活动赛事,利用Pandas分析美国选民总统喜爱
本次赛事由开源学习组织Datawhale主办,主要带领学习者利用Python进行数据分析以及数据可视化,包含数据集的处理.数据探索与清晰.数据分析.数据可视化四部分,利用pandas.matplotl ...
- 阿里云AI训练营-数据分析入门:利用Pandas分析美国总统选举
1.1 前言 本次赛事由开源学习组织Datawhale主办,主要带领学习者利用Python进行数据分析以及数据可视化,包含数据集的处理.数据探索与清晰.数据分析.数据可视化四部分,利用pandas.m ...
- ML之KG:基于MovieLens电影评分数据集利用基于知识图谱的推荐算法(networkx+基于路径相似度的方法)实现对用户进行Top电影推荐案例
ML之KG:基于MovieLens电影评分数据集利用基于知识图谱的推荐算法(networkx+基于路径相似度的方法)实现对用户进行Top电影推荐案例 目录 基于MovieLens电影评分数据集利用基于 ...
- ML之RL:基于MovieLens电影评分数据集利用强化学习算法(多臂老虎机+EpsilonGreedy策略)实现对用户进行Top电影推荐案例
ML之RL:基于MovieLens电影评分数据集利用强化学习算法(多臂老虎机+EpsilonGreedy策略)实现对用户进行Top电影推荐案例 目录 基于MovieLens电影评分数据集利用强化学习算 ...
- 【Python有趣打卡】利用pandas完成数据分析项目(二)——爬微信好友+分析
今天依然是跟着罗罗攀学习数据分析,原创:罗罗攀(公众号:luoluopan1) Python有趣|数据可视化那些事(二) 今天主要是学习pyecharts(http://pyecharts.org/# ...
- 大数据项目开发案例_大数据分析技术——项目案例1(猫眼电影数据分析上)...
壹 猫眼Top100电影数据分析概述 从这一节开始,我们就综合利用已学到的一些分析技术来尝试做一些比较复杂的实际数据分析项目.在这些实际的项目案例中,我们将会看到一个完整的数据分析流程:数据清理--数 ...
最新文章
- Java盗刷_一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!
- spring resource
- 用Scikit-learn和TensorFlow进行机器学习(二)
- Android 插件化原理解析——Service的插件化
- 第四章:Java_面向对象编程(二)
- word List44
- vijos p1460——拉力赛
- 应用神经网络相关pre-processing(预处理 )
- Python 中文数字对照表 输入一个数字,转换成中文数字
- 创建型模式Creational Patterns之单例模式singleton
- linux 时间设置的坑,linux 配置定时任务crontab碰到的坑sendmail
- java中任何变量都可以被赋值为null,关于异常处理:为什么“throw null”没有在Java中创建编译错误?...
- 大数据all_in环境搭建
- JavaScript字符串操作
- RevitAPI之标高和轴网(Level/Grid)
- ad中按钮开关的符号_电工新手必经之路:按钮开关结构原理及安装
- Maven 私服的上传和下载
- C语言多组输入和字符输入(小白)
- 1.1 大型网站软件系统的特点[读书敲录]
- 大学四年级(yuan)