利用python进行数据分析_第二章_案例2_movielens_电影评分分析
自己尝试了一下数据分析,和书里的方法不完全一样。标*的为比较好的方法。
================================================
MovieLens电影评分数据分析¶
path = 'C:\\Users\\yi&lei\\Documents\\电子书\\pydata-book-1st-edition\\pydata-book-1st-edition\\ch02\\movielens' a = path + '\\movies.dat' b = path + '\\ratings.dat' c = path + '\\users.dat' a
'C:\\Users\\yi&lei\\Documents\\电子书\\pydata-book-1st-edition\\pydata-book-1st-edition\\ch02\\movielens\\movies.dat'
import pandas as pd mnames = ['movieid','title','genres'] movie = pd.read_table(a,sep='::',header=None,names = mnames,engine='python')
movie.head()
movieid | title | genres | |
---|---|---|---|
0 | 1 | Toy Story (1995) | Animation|Children's|Comedy |
1 | 2 | Jumanji (1995) | Adventure|Children's|Fantasy |
2 | 3 | Grumpier Old Men (1995) | Comedy|Romance |
3 | 4 | Waiting to Exhale (1995) | Comedy|Drama |
4 | 5 | Father of the Bride Part II (1995) | Comedy |
unames = ['userid','gender','age','occupation','zip'] user = pd.read_table(c,sep='::',header=None,names = unames,engine='python') user.head()
userid | gender | age | occupation | zip | |
---|---|---|---|---|---|
0 | 1 | F | 1 | 10 | 48067 |
1 | 2 | M | 56 | 16 | 70072 |
2 | 3 | M | 25 | 15 | 55117 |
3 | 4 | M | 45 | 7 | 02460 |
4 | 5 | M | 25 | 20 | 55455 |
rnames = ['userid','movieid','ratings','timestamp'] rating = pd.read_table(b,sep='::',header=None,names = rnames,engine='python') rating.head()
userid | movieid | ratings | timestamp | |
---|---|---|---|---|
0 | 1 | 1193 | 5 | 978300760 |
1 | 1 | 661 | 3 | 978302109 |
2 | 1 | 914 | 3 | 978301968 |
3 | 1 | 3408 | 4 | 978300275 |
4 | 1 | 2355 | 5 | 978824291 |
把三张表的数据合并到一起¶
data = rating.merge(user).merge(movie) data.head()
userid | movieid | ratings | timestamp | gender | age | occupation | zip | title | genres | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 1193 | 5 | 978300760 | F | 1 | 10 | 48067 | One Flew Over the Cuckoo's Nest (1975) | Drama |
1 | 2 | 1193 | 5 | 978298413 | M | 56 | 16 | 70072 | One Flew Over the Cuckoo's Nest (1975) | Drama |
2 | 12 | 1193 | 4 | 978220179 | M | 25 | 12 | 32793 | One Flew Over the Cuckoo's Nest (1975) | Drama |
3 | 15 | 1193 | 4 | 978199279 | M | 25 | 7 | 22903 | One Flew Over the Cuckoo's Nest (1975) | Drama |
4 | 17 | 1193 | 5 | 978158471 | M | 50 | 1 | 95350 | One Flew Over the Cuckoo's Nest (1975) | Drama |
data.iloc[0] #data.iloc[0]和data.loc[0]结果相同
userid 1 movieid 1193 ratings 5 timestamp 978300760 gender F age 1 occupation 10 zip 48067 title One Flew Over the Cuckoo's Nest (1975) genres Drama Name: 0, dtype: object
按性别计算每部电影的平均得分¶
import numpy as np meanratings = pd.pivot_table(data,index=['title'],values='ratings',columns=['gender'],aggfunc=np.mean,fill_value=0) meanratings[:10]
gender | F | M |
---|---|---|
title | ||
$1,000,000 Duck (1971) | 3.375000 | 2.761905 |
'Night Mother (1986) | 3.388889 | 3.352941 |
'Til There Was You (1997) | 2.675676 | 2.733333 |
'burbs, The (1989) | 2.793478 | 2.962085 |
...And Justice for All (1979) | 3.828571 | 3.689024 |
1-900 (1994) | 2.000000 | 3.000000 |
10 Things I Hate About You (1999) | 3.646552 | 3.311966 |
101 Dalmatians (1961) | 3.791444 | 3.500000 |
101 Dalmatians (1996) | 3.240000 | 2.911215 |
12 Angry Men (1957) | 4.184397 | 4.328421 |
*过滤掉评分数据不到250条的电影,再按年龄统计电影的平均得分¶
movie_rating = data.groupby(['title']).size() movie_rating[:10]
title $1,000,000 Duck (1971) 37 'Night Mother (1986) 70 'Til There Was You (1997) 52 'burbs, The (1989) 303 ...And Justice for All (1979) 199 1-900 (1994) 2 10 Things I Hate About You (1999) 700 101 Dalmatians (1961) 565 101 Dalmatians (1996) 364 12 Angry Men (1957) 616 dtype: int64
movie_ix = movie_rating.index[movie_rating > 250] movie_ix
Index([''burbs, The (1989)', '10 Things I Hate About You (1999)','101 Dalmatians (1961)', '101 Dalmatians (1996)', '12 Angry Men (1957)','13th Warrior, The (1999)', '2 Days in the Valley (1996)','20,000 Leagues Under the Sea (1954)', '2001: A Space Odyssey (1968)','2010 (1984)',...'X-Men (2000)', 'Year of Living Dangerously (1982)','Yellow Submarine (1968)', 'You've Got Mail (1998)','Young Frankenstein (1974)', 'Young Guns (1988)','Young Guns II (1990)', 'Young Sherlock Holmes (1985)','Zero Effect (1998)', 'eXistenZ (1999)'],dtype='object', name='title', length=1214)
mrating = meanratings.loc[movie_ix] mrating.head()
gender | F | M |
---|---|---|
title | ||
'burbs, The (1989) | 2.793478 | 2.962085 |
10 Things I Hate About You (1999) | 3.646552 | 3.311966 |
101 Dalmatians (1961) | 3.791444 | 3.500000 |
101 Dalmatians (1996) | 3.240000 | 2.911215 |
12 Angry Men (1957) | 4.184397 | 4.328421 |
女性最喜欢的电影¶
mrating.sort_values(by=['F'],ascending=False).head()
gender | F | M |
---|---|---|
title | ||
Close Shave, A (1995) | 4.644444 | 4.473795 |
Wrong Trousers, The (1993) | 4.588235 | 4.478261 |
Sunset Blvd. (a.k.a. Sunset Boulevard) (1950) | 4.572650 | 4.464589 |
Wallace & Gromit: The Best of Aardman Animation (1996) | 4.563107 | 4.385075 |
Schindler's List (1993) | 4.562602 | 4.491415 |
找出男性和女性评分分歧最大的电影¶
##按男女评分差值的绝对值来统计 mrating['diff'] = np.abs(mrating['F']-mrating['M']) mrating.sort_values(by=['diff'],ascending=False).head()
gender | F | M | diff |
---|---|---|---|
title | |||
Dirty Dancing (1987) | 3.790378 | 2.959596 | 0.830782 |
Good, The Bad and The Ugly, The (1966) | 3.494949 | 4.221300 | 0.726351 |
Kentucky Fried Movie, The (1977) | 2.878788 | 3.555147 | 0.676359 |
Jumpin' Jack Flash (1986) | 3.254717 | 2.578358 | 0.676359 |
Dumb & Dumber (1994) | 2.697987 | 3.336595 | 0.638608 |
##按方差或标准差来计算 mrating['var'] = mrating[['F','M']].var(axis = 1) ##计算方差 mrating.sort_values(by=['var'],ascending=False).head()
gender | F | M | diff | var |
---|---|---|---|---|
title | ||||
Dirty Dancing (1987) | 3.790378 | 2.959596 | 0.830782 | 0.345099 |
Good, The Bad and The Ugly, The (1966) | 3.494949 | 4.221300 | 0.726351 | 0.263793 |
Kentucky Fried Movie, The (1977) | 2.878788 | 3.555147 | 0.676359 | 0.228731 |
Jumpin' Jack Flash (1986) | 3.254717 | 2.578358 | 0.676359 | 0.228731 |
Dumb & Dumber (1994) | 2.697987 | 3.336595 | 0.638608 | 0.203910 |
不考虑性别因素,分歧最大的电影(用方差来统计)¶
rating_std = data.groupby(by=['title'])['ratings'].std() rating_std_n = rating_std.loc[movie_ix] ##按照前面超过250条评论的电影进行过滤 rating_std_n.head()
title 'burbs, The (1989) 1.107760 10 Things I Hate About You (1999) 0.989815 101 Dalmatians (1961) 0.982103 101 Dalmatians (1996) 1.098717 12 Angry Men (1957) 0.812731 Name: ratings, dtype: float64
rating_std_n.fillna(0).sort_values(ascending=False)[:10]
title Dumb & Dumber (1994) 1.321333 Blair Witch Project, The (1999) 1.316368 Natural Born Killers (1994) 1.307198 Tank Girl (1995) 1.277695 Rocky Horror Picture Show, The (1975) 1.260177 Eyes Wide Shut (1999) 1.259624 Evita (1996) 1.253631 Billy Madison (1995) 1.249970 Fear and Loathing in Las Vegas (1998) 1.246408 Bicentennial Man (1999) 1.245533 Name: ratings, dtype: float64
利用python进行数据分析_第二章_案例2_movielens_电影评分分析相关推荐
- 利用python进行数据分析——第13章 python建模库介绍
文章目录 一.pandas与建模代码的结合 二.使用patsy创建模型描述 2.1Patsy公式中的数据转换 2.2分类数据与Patsy 三.statsmodels介绍 3.1评估线性模型 3.2评估 ...
- 利用Python进行数据分析_Wes McKinney著_唐学韬译_笔记
因本人刚开始写博客,学识经验有限,如有不正之处望读者指正,不胜感激:也望借此平台留下学习笔记以温故而知新.这篇主要是利用Python进行数据分析的学习笔记. 利用Python进行数据分析 百度网盘链接 ...
- 利用python进行数据分析数据集_《利用Python进行数据分析》终章·数据分析案例·学习笔记(二)...
一.第14章 数据分析案例 本书正文的最后一章,我们来看一些真实世界的数据集.对于每个数据集,我们会用之前介绍的方法,从原始数据中提取有意义的内容.展示的方法适用于其它数据集,也包括你的.本章包含了一 ...
- 《利用python进行数据分析》第二版 第14章-数据分析示例 学习笔记1
文章目录 一.从Bitly获取1.USA.gov数据 纯python下对时区进行计数 利用pandas对时区进行计数 二.MovieLens 1M数据集 测量评分分歧 三.美国1880~2010年的婴 ...
- 啃书:《利用Python进行数据分析》第一章
1.1本书内容 本书系统阐述了Python进行数据控制.处理.整理.分析等多方面的具体细节和基本要点.我再学习这本书的过程中进行一个汇总和总结,通过笔记来强化牢记知识点. 数据的类别 本书中出现的数据 ...
- 利用python进行数据分析_第二章_案例3_全美婴儿名字分析
In [1]: import pandas as pd data_year = {} path = 'C:\\Users\\yi&lei\\Documents\\电子书\\pydata-boo ...
- python列表乘数值_《利用Python进行数据分析》十一章· 时间序列·学习笔记(一)...
一.时间序列 时间序列(time series)数据是一种重要的结构化数据形式,应用于多个领域,包括金融学.经济学.生态学.神经科学.物理学等.在多个时间点观察或测量到的任何事物都可以形成一段时间序列 ...
- 基于python的数据分析方法五种_利用Python进行数据分析 第5章 pandas入门(1)
pandas库,含有使数据清洗和分析工作变得更快更简单的数据结构和操作工具.pandas是基于NumPy数组构建. pandas常结合数值计算工具NumPy和SciPy.分析库statsmodels和 ...
- python广义矩估计_《利用Python进行数据分析》13章(中二)建模库介绍
前文传送门: 13.3 statsmodels介绍 statsmodels是Python进行拟合多种统计模型.进行统计试验和数据探索可视化的库.Statsmodels包含许多经典的统计方法,但没有贝叶 ...
最新文章
- 链表类型题目需要用到的头文件list.h
- app 404 html,静态页面错误404(Flask框架)
- Hawk原理:通过IEnumerable实现通用的ETL管道
- OVS datapath简介(十八)
- 计算机硬盘能否做u盘用怎么用,U盘能一直插在电脑上当硬盘用吗?
- 利用js的闭包原理做对象封装及调用方法
- python反射、闭包、装饰器_python之闭包、装饰器、生成器、反射
- Golang——Println与键盘录入
- DCMTK3.6.0 (MT支持库)安装 完整说明
- eclipse远程发布代码的方法(SSH自动同步)
- 资源冲突导致启动黑屏问题
- java图形用户界面设计
- 【转】宽带路由器应用(三)—ARP欺骗防护功能的使用
- 【“玩物立志”-scratch少儿编程】亲手实现小猫走迷宫小游戏:其实挺简单
- 哔哩哔哩2020校园招聘前端笔试卷(一)答案解析
- VAPS XT开发入门教程02:安装配置
- PHP的_FILE_用法
- 中国软件行业协会成立25周年庆典 《程序员》荣获杰出传媒奖
- OJ 1199 堆积木
- 现在当兵有什么待遇复原以后_大学生当兵有什么好处 退伍后待遇怎么样
热门文章
- [RK3399][Android7.1] 调试笔记 --- CPU_B_SLEEP引脚改动引起系统无法开机
- R包自带数据汇总(自带数据包:datasets)
- win7输入法 老是不见
- Hyperspectral Band Selection by Multitask Sparsity Puisuit
- scipy.optimize.minimize 的优化算法(1): Nelder–Mead Simplex
- 索罗斯:走在时间前面的狐狸
- 给新开启的12月一个期盼
- JZOJ【入门】1290 行李托运费
- 什么是计算机病毒,看这里
- 微电子电路——例题期末总结