自己尝试了一下数据分析,和书里的方法不完全一样。标*的为比较好的方法。
================================================

MovieLens电影评分数据分析¶

In [8]:
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

Out[8]:
'C:\\Users\\yi&lei\\Documents\\电子书\\pydata-book-1st-edition\\pydata-book-1st-edition\\ch02\\movielens\\movies.dat'

In [20]:
import pandas as pd
mnames = ['movieid','title','genres']
movie = pd.read_table(a,sep='::',header=None,names = mnames,engine='python')

In [21]:
movie.head()

Out[21]:
  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

In [17]:
unames = ['userid','gender','age','occupation','zip']
user = pd.read_table(c,sep='::',header=None,names = unames,engine='python')
user.head()

Out[17]:
  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

In [19]:
rnames = ['userid','movieid','ratings','timestamp']
rating = pd.read_table(b,sep='::',header=None,names = rnames,engine='python')
rating.head()

Out[19]:
  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

把三张表的数据合并到一起¶

In [26]:
data = rating.merge(user).merge(movie)
data.head()

Out[26]:
  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

In [30]:
data.iloc[0] #data.iloc[0]和data.loc[0]结果相同

Out[30]:
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

按性别计算每部电影的平均得分¶

In [37]:
import numpy as np
meanratings = pd.pivot_table(data,index=['title'],values='ratings',columns=['gender'],aggfunc=np.mean,fill_value=0)
meanratings[:10]

Out[37]:
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条的电影,再按年龄统计电影的平均得分¶

In [39]:
movie_rating = data.groupby(['title']).size()
movie_rating[:10]

Out[39]:
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

In [41]:
movie_ix = movie_rating.index[movie_rating > 250]
movie_ix

Out[41]:
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)

In [55]:
mrating = meanratings.loc[movie_ix]
mrating.head()

Out[55]:
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

女性最喜欢的电影¶

In [56]:
mrating.sort_values(by=['F'],ascending=False).head()

Out[56]:
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

找出男性和女性评分分歧最大的电影¶

In [58]:
##按男女评分差值的绝对值来统计
mrating['diff'] = np.abs(mrating['F']-mrating['M'])
mrating.sort_values(by=['diff'],ascending=False).head()

Out[58]:
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

In [69]:
##按方差或标准差来计算
mrating['var'] = mrating[['F','M']].var(axis = 1)  ##计算方差
mrating.sort_values(by=['var'],ascending=False).head()

Out[69]:
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

不考虑性别因素,分歧最大的电影(用方差来统计)¶

In [98]:
rating_std = data.groupby(by=['title'])['ratings'].std()
rating_std_n = rating_std.loc[movie_ix] ##按照前面超过250条评论的电影进行过滤
rating_std_n.head()

Out[98]:
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

In [99]:
rating_std_n.fillna(0).sort_values(ascending=False)[:10]

Out[99]:
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_电影评分分析相关推荐

  1. 利用python进行数据分析——第13章 python建模库介绍

    文章目录 一.pandas与建模代码的结合 二.使用patsy创建模型描述 2.1Patsy公式中的数据转换 2.2分类数据与Patsy 三.statsmodels介绍 3.1评估线性模型 3.2评估 ...

  2. 利用Python进行数据分析_Wes McKinney著_唐学韬译_笔记

    因本人刚开始写博客,学识经验有限,如有不正之处望读者指正,不胜感激:也望借此平台留下学习笔记以温故而知新.这篇主要是利用Python进行数据分析的学习笔记. 利用Python进行数据分析 百度网盘链接 ...

  3. 利用python进行数据分析数据集_《利用Python进行数据分析》终章·数据分析案例·学习笔记(二)...

    一.第14章 数据分析案例 本书正文的最后一章,我们来看一些真实世界的数据集.对于每个数据集,我们会用之前介绍的方法,从原始数据中提取有意义的内容.展示的方法适用于其它数据集,也包括你的.本章包含了一 ...

  4. 《利用python进行数据分析》第二版 第14章-数据分析示例 学习笔记1

    文章目录 一.从Bitly获取1.USA.gov数据 纯python下对时区进行计数 利用pandas对时区进行计数 二.MovieLens 1M数据集 测量评分分歧 三.美国1880~2010年的婴 ...

  5. 啃书:《利用Python进行数据分析》第一章

    1.1本书内容 本书系统阐述了Python进行数据控制.处理.整理.分析等多方面的具体细节和基本要点.我再学习这本书的过程中进行一个汇总和总结,通过笔记来强化牢记知识点. 数据的类别 本书中出现的数据 ...

  6. 利用python进行数据分析_第二章_案例3_全美婴儿名字分析

    In [1]: import pandas as pd data_year = {} path = 'C:\\Users\\yi&lei\\Documents\\电子书\\pydata-boo ...

  7. python列表乘数值_《利用Python进行数据分析》十一章· 时间序列·学习笔记(一)...

    一.时间序列 时间序列(time series)数据是一种重要的结构化数据形式,应用于多个领域,包括金融学.经济学.生态学.神经科学.物理学等.在多个时间点观察或测量到的任何事物都可以形成一段时间序列 ...

  8. 基于python的数据分析方法五种_利用Python进行数据分析 第5章 pandas入门(1)

    pandas库,含有使数据清洗和分析工作变得更快更简单的数据结构和操作工具.pandas是基于NumPy数组构建. pandas常结合数值计算工具NumPy和SciPy.分析库statsmodels和 ...

  9. python广义矩估计_《利用Python进行数据分析》13章(中二)建模库介绍

    前文传送门: 13.3 statsmodels介绍 statsmodels是Python进行拟合多种统计模型.进行统计试验和数据探索可视化的库.Statsmodels包含许多经典的统计方法,但没有贝叶 ...

最新文章

  1. 链表类型题目需要用到的头文件list.h
  2. app 404 html,静态页面错误404(Flask框架)
  3. Hawk原理:通过IEnumerable实现通用的ETL管道
  4. OVS datapath简介(十八)
  5. 计算机硬盘能否做u盘用怎么用,U盘能一直插在电脑上当硬盘用吗?
  6. 利用js的闭包原理做对象封装及调用方法
  7. python反射、闭包、装饰器_python之闭包、装饰器、生成器、反射
  8. Golang——Println与键盘录入
  9. DCMTK3.6.0 (MT支持库)安装 完整说明
  10. eclipse远程发布代码的方法(SSH自动同步)
  11. 资源冲突导致启动黑屏问题
  12. java图形用户界面设计
  13. 【转】宽带路由器应用(三)—ARP欺骗防护功能的使用
  14. 【“玩物立志”-scratch少儿编程】亲手实现小猫走迷宫小游戏:其实挺简单
  15. 哔哩哔哩2020校园招聘前端笔试卷(一)答案解析
  16. VAPS XT开发入门教程02:安装配置
  17. PHP的_FILE_用法
  18. 中国软件行业协会成立25周年庆典 《程序员》荣获杰出传媒奖
  19. OJ 1199 堆积木
  20. 现在当兵有什么待遇复原以后_大学生当兵有什么好处 退伍后待遇怎么样

热门文章

  1. [RK3399][Android7.1] 调试笔记 --- CPU_B_SLEEP引脚改动引起系统无法开机
  2. R包自带数据汇总(自带数据包:datasets)
  3. win7输入法 老是不见
  4. Hyperspectral Band Selection by Multitask Sparsity Puisuit
  5. scipy.optimize.minimize 的优化算法(1): Nelder–Mead Simplex
  6. 索罗斯:走在时间前面的狐狸
  7. 给新开启的12月一个期盼
  8. JZOJ【入门】1290 行李托运费
  9. 什么是计算机病毒,看这里
  10. 微电子电路——例题期末总结