Python进行数据分析(二)MovieLens 1M 数据集
- # -*- coding: utf-8 -*-
- """
- Created on Thu Sep 21 12:24:37 2017
- @author: Douzi
- """
- import pandas as pd
- # 用户信息
- unames = ['user_id', 'gender', 'age', 'occupation', 'zip']
- users = pd.read_table('ch02/movielens/users.dat', sep='::', header=None, names=unames, engine='python')
- # 电影排名
- rnames = ['user_id', 'movie_id', 'rating', 'timestamp']
- ratings = pd.read_table('ch02/movielens/ratings.dat', sep='::', header=None, names=rnames,engine='python')
- # 电影信息
- mnames = ['movie_id', 'title', 'genres']
- movies = pd.read_table('ch02/movielens/movies.dat', sep='::', header=None, names=mnames, engine='python')
- users[:5]
- Out[113]:
- user_id 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
- ratings[:5]
- Out[114]:
- user_id movie_id rating 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
- movies[:5]
- Out[115]:
- movie_id 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
合并数据
根据任意个用户或电影属性对评分数据进行聚合操作
按性别计算每部电影的平均得分(产生了另一个DataFrame,其内容是电影平均分,行标为电影名称,列标为性别)
对title进行分组, 利用size() 得到一个含有各个电影分组大小的 Series对象:
为了了解女性观众最喜欢的电影,我们可以对F列降序排列
- # -*- coding: utf-8 -*-
- import pandas as pd
- # 用户信息
- unames = ['user_id', 'gender', 'age', 'occupation', 'zip']
- users = pd.read_table('pydata-book-master/ch02/movielens/users.dat', sep='::', header=None, names=unames, engine='python')
- # 电影排名
- rnames = ['user_id', 'movie_id', 'rating', 'timestamp']
- ratings = pd.read_table('pydata-book-master/ch02/movielens/ratings.dat', sep='::', header=None, names=rnames,engine='python')
- # 电影信息
- mnames = ['movie_id', 'title', 'genres']
- movies = pd.read_table('pydata-book-master/ch02/movielens/movies.dat', sep='::', header=None, names=mnames, engine='python')
- data = pd.merge(pd.merge(ratings, users), movies)
- data.ix[0]
- mean_ratings = data.pivot_table('rating', index='title',
- columns='gender', aggfunc='mean')
- mean_ratings[:5]
- # 过滤掉评分数据不够250条的电影
- # 对title进行分组,然后利用size()得到一个含有各电影分组大小的Series对象
- ratings_by_title = data.groupby('title').size()
- ratings_by_title[:10]
- active_titles = ratings_by_title.index[ratings_by_title >= 250]
- # 该索引中含有评分数据>250条的电影名称,然后根据前面的mean_ratings中
- # 选取所需的行
- mean_ratings = mean_ratings.ix[active_titles]
- top_female_ratings = mean_ratings.sort_index(by='F', ascending=False)
- top_female_ratings[:10]
结果:
- top_female_ratings[:10]
- Out[4]:
- 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... 4.563107 4.385075
- Schindler's List (1993) 4.562602 4.491415
- Shawshank Redemption, The (1994) 4.539075 4.560625
- Grand Day Out, A (1992) 4.537879 4.293255
- To Kill a Mockingbird (1962) 4.536667 4.372611
- Creature Comforts (1990) 4.513889 4.272277
- Usual Suspects, The (1995) 4.513317 4.518248
计算评分分歧
找到男性和女性观众分歧最大的电影。
- # 给mean_ratings加上一个用于存放平均得分之差的列,并对其进行排序:
- mean_ratings['diff'] = mean_ratings['M'] - mean_ratings['F']
- sorted_by_diff = mean_ratings.sort_index(by='diff')
- # 按“diff” 排序即可得到分歧最大,且女性观众更喜欢的电影。
sorted_by_diff[:15]- Out[9]:
- gender F M diff
- title
- Dirty Dancing (1987) 3.790378 2.959596 -0.830782
- Jumpin' Jack Flash (1986) 3.254717 2.578358 -0.676359
- Grease (1978) 3.975265 3.367041 -0.608224
- Little Women (1994) 3.870588 3.321739 -0.548849
- Steel Magnolias (1989) 3.901734 3.365957 -0.535777
- Anastasia (1997) 3.800000 3.281609 -0.518391
- Rocky Horror Picture Show, The (1975) 3.673016 3.160131 -0.512885
- Color Purple, The (1985) 4.158192 3.659341 -0.498851
- Age of Innocence, The (1993) 3.827068 3.339506 -0.487561
- Free Willy (1993) 2.921348 2.438776 -0.482573
- French Kiss (1995) 3.535714 3.056962 -0.478752
- Little Shop of Horrors, The (1960) 3.650000 3.179688 -0.470312
- Guys and Dolls (1955) 4.051724 3.583333 -0.468391
- Mary Poppins (1964) 4.197740 3.730594 -0.467147
- Patch Adams (1998) 3.473282 3.008746 -0.464536
- # 对排序结果反序并取出前15行,得到的则是男性观众更喜欢的电影
- sorted_by_diff[::-1][:15]
- Out[11]:
- gender F M diff
- title
- 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
- Dumb & Dumber (1994) 2.697987 3.336595 0.638608
- Longest Day, The (1962) 3.411765 4.031447 0.619682
- Cable Guy, The (1996) 2.250000 2.863787 0.613787
- Evil Dead II (Dead By Dawn) (1987) 3.297297 3.909283 0.611985
- Hidden, The (1987) 3.137931 3.745098 0.607167
- Rocky III (1982) 2.361702 2.943503 0.581801
- Caddyshack (1980) 3.396135 3.969737 0.573602
- For a Few Dollars More (1965) 3.409091 3.953795 0.544704
- Porky's (1981) 2.296875 2.836364 0.539489
- Animal House (1978) 3.628906 4.167192 0.538286
- Exorcist, The (1973) 3.537634 4.067239 0.529605
- Fright Night (1985) 2.973684 3.500000 0.526316
- Barb Wire (1996) 1.585366 2.100386 0.515020
- # 根据电影名称分组的得分数据的标准差
- rating_std_by_title = data.groupby('title')['rating'].std()
- # 根据active_titles进行过滤
- rating_std_by_title = rating_std_by_title.ix[active_titles]
- # 根据值对Series进行降序排列
- rating_std_by_title.order(ascending=False)[:10]
- rating_std_by_title.order(ascending=False)[:10]
- Out[17]:
- 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: rating, dtype: float64
Python进行数据分析(二)MovieLens 1M 数据集的更多相关文章
- 《利用Python进行数据分析》笔记---第2章--MovieLens 1M数据集
写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...
- 利用python进行数据分析PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书
点击获取提取码:hi2j 内容简介 [名人推荐] "科学计算和数据分析社区已经等待这本书很多年了:大量具体的实践建议,以及大量综合应用方法.本书在未来几年里肯定会成为Python领域中技术计 ...
- 《利用python进行数据分析》读书笔记 --第一、二章 准备与例子
http://www.cnblogs.com/batteryhp/p/4868348.html 第一章 准备工作 今天开始码这本书--<利用python进行数据分析>.R和python都得 ...
- 利用python进行数据分析——(一)库的学习
总结一下自己对python常用包:Numpy,Pandas,Matplotlib,Scipy,Scikit-learn 一. Numpy: 标准安装的Python中用列表(list)保存一组值,可以用 ...
- 利用python进行数据分析之pandas入门
转自https://zhuanlan.zhihu.com/p/26100976 目录: 5.1 pandas 的数据结构介绍5.1.1 Series5.1.2 DataFrame5.1.3索引对象5. ...
- 《利用Python进行数据分析·第2版》第四章 Numpy基础:数组和矢量计算
<利用Python进行数据分析·第2版>第四章 Numpy基础:数组和矢量计算 numpy高效处理大数组的数据原因: numpy是在一个连续的内存块中存储数据,独立于其他python内置对 ...
- 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片
概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...
- 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作
一.reindex() 方法:重新索引 针对 Series 重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 ...
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...
随机推荐
- Junit4 单元测试框架的常用方法介绍
Junit 介绍: Junit是一套框架(用于JAVA语言),由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework),即 ...
- android入门 — ProgressDialog/DatePickerDialog/TimePickerDialog
这三个Dialog都是AlertDialog的子类. ①DatePickerDialog 1.创建DatePickerDialog的实例: 2.通过Calendar类获得系统时间: 3.通过DateP ...
- swift - tabBar图片设置的一些注意点
图片大小尺寸 刚刚开始接触的话,从美工那边拿来的图标大小一般都是偏大的,就像这样: 在此建议,tabBar的图标大小可以是32*32,个人感觉效果不错 图片的颜色问题 如上图所示,该图标的期望颜色(也 ...
- jQuery之css
设置css样式/读取css值 css() 1. 得到第一个p标签的颜色 2. 设置所有p标签的文本颜色为red 3. 设置第2个p的字体颜色(#ff0011),背景(blue),宽(300px), 高 ...
- 0302思考&回答
看完这两个网页,我们可以看出it行业始终是一门热门行业,在现在这个人潮汹涌的人才市场,面对严峻的就业形势,我们应该拿什么去参见招聘?人多而工作职位有限,这警醒我们必须拥有一技之长,否则则会被淘汰.如果 ...
- Node.js系列——(1)安装配置与基本使用
1.安装 进入下载地址 小编下载的是msi文件,下一步下一步傻瓜式安装. 打印个hello看看: 2.REPL 全称Read Eval Print Loop,即交互式解释器,可以执行读取.执行.打印. ...
- utuntu下安装pip&pip3
在utuntu下建议不要使用apt-get install 安装pip,会出现很多问题. 建议使用如下方式安装: wget https://bootstrap.pypa.io/get-pip.py - ...
- iOS开发--字典(NSDictionary)和JSON字符串(NSString)之间互转
iOS开发--字典(NSDictionary)和JSON字符串(NSString)之间互转 1. 字典转Json字符串 // 字典转json字符串方法 -(NSString *)convertToJs ...
- bzoj4815[CQOI2017]小Q的格子
题意 不简述题意了,简述题意之后这道题就做出来了.放个原题面. 小Q是个程序员. 作为一个年轻的程序员,小Q总是被老C欺负,老C经常把一些麻烦的任务交给小Q来处理. 每当小Q不知道如何解决时,就只好向 ...
- Qin Shi Huang's National Road System UVA - 1494(次小生成树)
秦始皇统一中国之后要在全国修公路连接各个城市,皇帝只想修成最小生成树(距离最小,不考虑人力),一个道士说自己可以不花人力物力修一条路,经过两方妥协,选择max(两个城市人口/(生成树长度-这条路的长度 ...