文档章节

3.pandas-电影数据分析

eddy_linux
 eddy_linux
发布于 2017/08/30 13:14
字数 829
阅读 119
收藏 0
#encoding:utf8

import pandas as pd


'''
数据来源
https://grouplens.org/datasets/movielens/
READE是对数据文件的说明
当量100W
3个文件
users.dat 评分用户
    ID 性别 年龄 职业 邮编
    1::F::1::10::48067
    2::M::56::16::70072
    3::M::25::15::55117
    4::M::45::7::02460
    5::M::25::20::55455
    6::F::50::9::55117
    7::M::35::1::06810
    8::M::25::12::11413
    9::M::25::17::61614
    10::F::35::1::95370
movies.dat 电影数据
    1::Toy Story (1995)::Animation|Children's|Comedy
    2::Jumanji (1995)::Adventure|Children's|Fantasy
    3::Grumpier Old Men (1995)::Comedy|Romance
    4::Waiting to Exhale (1995)::Comedy|Drama
    5::Father of the Bride Part II (1995)::Comedy
    6::Heat (1995)::Action|Crime|Thriller
ratings.dat 电影评分
   用户id 电影id 评分 时间戳
    1::1193::5::978300760
    1::661::3::978302109
    1::914::3::978301968
    1::3408::4::978300275
    1::2355::5::978824291
    1::1197::3::978302268
    1::1287::5::978302039
    1::2804::5::978300719
    '''

#加载数据
#定义users.dat的列名
unames = ['user_id','gender','age','occupation','zip']
#定义ratings.dat的列名
rating_names = ['user_id','movie_id','rating','timestamp']
#定义movies.dat的列名
movie_names = ['movie_id','title','geres']

#注意分隔符
users = pd.read_table('E:\\myproject\\data_analy\\ml-1m\\ml-1m\\users.dat',sep='::',header=None,names=unames)
ratings = pd.read_table('E:\\myproject\\data_analy\\ml-1m\\ml-1m\\ratings.dat',sep='::',header=None,names=rating_names)
movies = pd.read_table('E:\\myproject\\data_analy\\ml-1m\\ml-1m\\movies.dat',sep='::',header=None,names=movie_names)
print(len(users))
print(len(ratings))
print(len(movies))
#里面的代号在readme中有说明
print(users.head(5))
print(ratings.head(5))
print(movies.head(5))

#合并
data = pd.merge(pd.merge(users,ratings),movies)
print(len(data))
print(data.head(5))
#查看userid=1的用户
print(data[data.user_id == 1])

#统计男女对电影的评分差异最大的
#得到男女评分的所有电影
ratings_by_gender = data.pivot_table(values='rating',index='title',columns='gender',aggfunc='mean')
print(ratings_by_gender.head(5))

#加列用于男女评分相减
ratings_by_gender['diff'] = ratings_by_gender.F - ratings_by_gender.M
print(ratings_by_gender.head(5))
#排序 降序和升序的不同体现的是男性和女性喜欢的电影
print(ratings_by_gender.sort_values(by='diff',ascending=True).head(10))
#定义评分人数最多(热门)
ratings_by_title = data.groupby('title').size()
print(ratings_by_title.head(10))
print(ratings_by_title.sort_values(ascending=False).head(10))
#热门电影,也就是评分最高的电影
mean_ratings = data.pivot_table(values='rating',index='title',aggfunc='mean')
print(mean_ratings.sort_values(ascending=False).head(10))
#但是这里会有一个情况如果评分人很少但是分很高也不能算热门电影
#取一个评分人数的排序也就是看的比较多的人
top_10_hot = ratings_by_title.sort_values(ascending=False).head(10)
#最热门的的10大电影的评分
print(mean_ratings[top_10_hot.index])
#评分最高的10大电影的评价次数 观影次数
top_10_score = mean_ratings.sort_values(ascending=False).head(10)
print(ratings_by_title[top_10_score.index])

#找出热度足够高的电影,评价此处大于1000的
hot_movies = ratings_by_title[ratings_by_title > 1000]
#找出热门电影的评分数
hot_movies_rating = mean_ratings[hot_movies.index]
#对找出的热门电影评分进行降序排序
top_10_good_movies = hot_movies_rating.sort_values(ascending=False).head(10)
print(top_10_good_movies)



#优化取出男女评分差异最大的
#这里是得到男女评分差异的数据,但是没有排除掉观影人数过少的情况
#首先合并三个数据
data = pd.merge(pd.merge(users,ratings),movies)
#得到评分的人数
total_score = data.groupby('title').size()
#做一个性别为列索引的透视
hot_ratings_by_gender = data.pivot_table(values='rating',index='title',columns='gender',aggfunc='mean')
#加上一列评分人数
hot_ratings_by_gender['user_no'] = data.groupby('title').size()
#加上一列性别的差异评分
hot_ratings_by_gender['diff'] = ratings_by_gender.F - ratings_by_gender.M
#取出评分人数大于1000
hot_diff = hot_ratings_by_gender[hot_ratings_by_gender['score'] > 1000]
#在大于评分人数1000的范围排序diff列这样就可以得到热门中男女评分差异最大的电影
top_10_hot_diff = hot_diff.sort_values(by='diff',ascending=False).head(10)
print(top_10_hot_diff)

 

© 著作权归作者所有

共有 人打赏支持
eddy_linux
粉丝 18
博文 135
码字总数 188789
作品 0
成都
程序员
Python中pandas模块快速入门

我这里简单介绍一下Python中,pandas模块定义的两种常用的数据结构,Series和DaraFrame。Series和Python中的Dict类似,但是是结构化的,而DataFrame和数据库中的表类似。 1.pandas基本数据结...

小工sevenot
07/01
0
0
7.python数据分析与展示------Pandas库入门

1.Pandas库的介绍 Pandas是Python第三方库,提供高性能易用数据类型和分析工具 import pandas as pd Pandas基于Numpy实现,常与Numpy和Matplotlib一同使用 import pandas as pd d =pd.Series...

bxg1065283526
04/29
0
0
【python数据挖掘课程】二十.KNN最近邻分类算法分析详解及平衡秤TXT数据集读取

这是《Python数据挖掘课程》系列文章,也是我这学期上课的部分内容及书籍的一个案例。本文主要讲述KNN最近邻分类算法、简单实现分析平衡秤数据集,希望这篇文章对大家有所帮助,同时提供些思...

Eastmount
2017/12/08
0
0
初识sparklyr—电影数据分析

这篇文章是初次使用sparklyr扩展包来进行一些数据分析,对Spark牵扯不是很多。使用的数据是movieLens 100k,这份数据包含943个用户对1680部电影的评分数据,如需获取数据请在文末点击阅读原文...

wzgl__wh
04/25
0
0
使用Mahout搭建推荐系统之入门篇2-玩转你的数据1

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

清风漫步
2013/11/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
16分钟前
0
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
50分钟前
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
0
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
2
0
设计模式之五 责任链模式(Chain of Responsibility)

一. 场景 相信我们都有过这样的经历; 我们去职能部门办理一个事情,先去了A部门,到了地方被告知这件事情由B部门处理; 当我们到了B部门的时候,又被告知这件事情已经移交给了C部门处理; ...

JackieRiver
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部