文档章节

3.pandas-电影数据分析

eddy_linux
 eddy_linux
发布于 2017/08/30 13:14
字数 829
阅读 254
收藏 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)

 

下一篇: 2.pandas基础
eddy_linux
粉丝 22
博文 135
码字总数 188789
作品 0
成都
程序员
私信 提问
加载中
请先登录后再评论。
Flappy Bird(安卓版)逆向分析(一)

更改每过一关的增长分数 反编译的步骤就不介绍了,我们直接来看反编译得到的文件夹 方法1:在smali目录下,我们看到org/andengine/,可以知晓游戏是由andengine引擎开发的。打开/res/raw/at...

enimey
2014/03/04
5.9K
18
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
22
树莓派(Raspberry Pi):完美的家用服务器

自从树莓派发布后,所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒,但树莓派( RPi )最明显却又是最不吸引人的用处是:创建你的完美家用...

异次元
2013/11/09
5.5K
8
实时分析系统--istatd

istatd是IMVU公司工程师开发的一款优秀的实时分析系统,能够有效地收集,存储和搜索各种分析指标,类似cacti,Graphite,Zabbix等系统。实际上,istatd修改了Graphite的存储后端,重新实现了...

匿名
2013/02/07
2.8K
1
日志分析平台 - Kibana

Kibana 是一个为 Logstash 和 ElasticSearch 提供的日志分析的 Web 接口。可使用它对日志进行高效的搜索、可视化、分析等各种操作。 环境要求: ruby >= 1.8.7 (probably?) bundler logstash...

匿名
2013/02/13
11.5W
1

没有更多内容

加载失败,请刷新页面

加载更多

揭秘神秘的MarxDB

主题:MarxDB金融级分布式数据库 大纲: 1、石老师好像是第一次来3306π,可以先重点自我介绍一下。 2、石老师可以简单介绍一下MarxDB的情况吗? 3、跟传统的关系型数据库相比,MarxDB有什么...

叶金荣
昨天
7
0
ASP.NET Core搭建多层网站架构【13-扩展之支持全球化和本地化多语言】

2020/02/03, ASP.NET Core 3.1, VS2019, ResXManager 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【13-扩展之支持全球化和本地化多语言】 使用资源管理多语言文件实现网站本地化...

osc_wip0vvls
27分钟前
9
0
浙江移动正式采用蚂蚁集团自研数据库OceanBase

近日,浙江移动正式引入蚂蚁集团的自研数据库OceanBase,首期应用于其政企网格智慧运营系统,这也是OceanBase首次落地于运营商场景。 政企网格智慧运营平台是浙江移动针对政企用户推出的服务...

支付宝技术
昨天
13
0
使用Charles代理功能将网络请求定向至本地文件

  最近在进行前端开发的时候发现Charles一个非常牛叉的功能,就是可以通过代理将网络请求定向至本地文件。有了这个功能在进行iOS开发时就可以在缺少后台接口的情况下更加真实的进行数据moc...

osc_qvtw8r10
27分钟前
7
0
多边形裁剪图片升级啦!Cocos Creator !

支持合图,支持gizmo添加节点和调整位置,支持缩放旋转。文章底部获取完整项目! 效果预览与使用 原理 回顾 在gizmo入门探索介绍了 gizmo 与多边形裁剪的配合。 在使用 mesh 实现多边形裁剪图...

白玉无冰
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部