1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Thu Sep 21 12:24:37 2017
  4. @author: Douzi
  5. """
  6. import pandas as pd
  7. # 用户信息
  8. unames = ['user_id', 'gender', 'age', 'occupation', 'zip']
  9. users = pd.read_table('ch02/movielens/users.dat', sep='::', header=None, names=unames, engine='python')
  10. # 电影排名
  11. rnames = ['user_id', 'movie_id', 'rating', 'timestamp']
  12. ratings = pd.read_table('ch02/movielens/ratings.dat', sep='::', header=None, names=rnames,engine='python')
  13. # 电影信息
  14. mnames = ['movie_id', 'title', 'genres']
  15. movies = pd.read_table('ch02/movielens/movies.dat', sep='::', header=None, names=mnames, engine='python')
  16. users[:5]
  17. Out[113]:
  18. user_id gender age occupation zip
  19. 0 1 F 1 10 48067
  20. 1 2 M 56 16 70072
  21. 2 3 M 25 15 55117
  22. 3 4 M 45 7 02460
  23. 4 5 M 25 20 55455
  24. ratings[:5]
  25. Out[114]:
  26. user_id movie_id rating timestamp
  27. 0 1 1193 5 978300760
  28. 1 1 661 3 978302109
  29. 2 1 914 3 978301968
  30. 3 1 3408 4 978300275
  31. 4 1 2355 5 978824291
  32. movies[:5]
  33. Out[115]:
  34. movie_id title genres
  35. 0 1 Toy Story (1995) Animation|Children's|Comedy
  36. 1 2 Jumanji (1995) Adventure|Children's|Fantasy
  37. 2 3 Grumpier Old Men (1995) Comedy|Romance
  38. 3 4 Waiting to Exhale (1995) Comedy|Drama
  39. 4 5 Father of the Bride Part II (1995) Comedy
  • 合并数据

  • 根据任意个用户或电影属性对评分数据进行聚合操作

  • 按性别计算每部电影的平均得分(产生了另一个DataFrame,其内容是电影平均分,行标为电影名称,列标为性别)

  • 对title进行分组, 利用size() 得到一个含有各个电影分组大小的 Series对象:

  • 为了了解女性观众最喜欢的电影,我们可以对F列降序排列

  1. # -*- coding: utf-8 -*-
  2. import pandas as pd
  3. # 用户信息
  4. unames = ['user_id', 'gender', 'age', 'occupation', 'zip']
  5. users = pd.read_table('pydata-book-master/ch02/movielens/users.dat', sep='::', header=None, names=unames, engine='python')
  6. # 电影排名
  7. rnames = ['user_id', 'movie_id', 'rating', 'timestamp']
  8. ratings = pd.read_table('pydata-book-master/ch02/movielens/ratings.dat', sep='::', header=None, names=rnames,engine='python')
  9. # 电影信息
  10. mnames = ['movie_id', 'title', 'genres']
  11. movies = pd.read_table('pydata-book-master/ch02/movielens/movies.dat', sep='::', header=None, names=mnames, engine='python')
  12. data = pd.merge(pd.merge(ratings, users), movies)
  13. data.ix[0]
  14. mean_ratings = data.pivot_table('rating', index='title',
  15. columns='gender', aggfunc='mean')
  16. mean_ratings[:5]
  17. # 过滤掉评分数据不够250条的电影
  18. # 对title进行分组,然后利用size()得到一个含有各电影分组大小的Series对象
  19. ratings_by_title = data.groupby('title').size()
  20. ratings_by_title[:10]
  21. active_titles = ratings_by_title.index[ratings_by_title >= 250]
  22. # 该索引中含有评分数据>250条的电影名称,然后根据前面的mean_ratings中
  23. # 选取所需的行
  24. mean_ratings = mean_ratings.ix[active_titles]
  25. top_female_ratings = mean_ratings.sort_index(by='F', ascending=False)
  26. top_female_ratings[:10]

结果:

  1. top_female_ratings[:10]
  2. Out[4]:
  3. gender F M
  4. title
  5. Close Shave, A (1995) 4.644444 4.473795
  6. Wrong Trousers, The (1993) 4.588235 4.478261
  7. Sunset Blvd. (a.k.a. Sunset Boulevard) (1950) 4.572650 4.464589
  8. Wallace & Gromit: The Best of Aardman Animation... 4.563107 4.385075
  9. Schindler's List (1993) 4.562602 4.491415
  10. Shawshank Redemption, The (1994) 4.539075 4.560625
  11. Grand Day Out, A (1992) 4.537879 4.293255
  12. To Kill a Mockingbird (1962) 4.536667 4.372611
  13. Creature Comforts (1990) 4.513889 4.272277
  14. Usual Suspects, The (1995) 4.513317 4.518248
  • 计算评分分歧

  • 找到男性和女性观众分歧最大的电影。

  1. # 给mean_ratings加上一个用于存放平均得分之差的列,并对其进行排序:
  2. mean_ratings['diff'] = mean_ratings['M'] - mean_ratings['F']
  3. sorted_by_diff = mean_ratings.sort_index(by='diff')
  1. # 按“diff” 排序即可得到分歧最大,且女性观众更喜欢的电影。
    sorted_by_diff[:15]
  2. Out[9]:
  3. gender F M diff
  4. title
  5. Dirty Dancing (1987) 3.790378 2.959596 -0.830782
  6. Jumpin' Jack Flash (1986) 3.254717 2.578358 -0.676359
  7. Grease (1978) 3.975265 3.367041 -0.608224
  8. Little Women (1994) 3.870588 3.321739 -0.548849
  9. Steel Magnolias (1989) 3.901734 3.365957 -0.535777
  10. Anastasia (1997) 3.800000 3.281609 -0.518391
  11. Rocky Horror Picture Show, The (1975) 3.673016 3.160131 -0.512885
  12. Color Purple, The (1985) 4.158192 3.659341 -0.498851
  13. Age of Innocence, The (1993) 3.827068 3.339506 -0.487561
  14. Free Willy (1993) 2.921348 2.438776 -0.482573
  15. French Kiss (1995) 3.535714 3.056962 -0.478752
  16. Little Shop of Horrors, The (1960) 3.650000 3.179688 -0.470312
  17. Guys and Dolls (1955) 4.051724 3.583333 -0.468391
  18. Mary Poppins (1964) 4.197740 3.730594 -0.467147
  19. Patch Adams (1998) 3.473282 3.008746 -0.464536
  1. # 对排序结果反序并取出前15行,得到的则是男性观众更喜欢的电影
  2. sorted_by_diff[::-1][:15]

  3. Out[11]:
  4. gender F M diff
  5. title
  6. Good, The Bad and The Ugly, The (1966) 3.494949 4.221300 0.726351
  7. Kentucky Fried Movie, The (1977) 2.878788 3.555147 0.676359
  8. Dumb & Dumber (1994) 2.697987 3.336595 0.638608
  9. Longest Day, The (1962) 3.411765 4.031447 0.619682
  10. Cable Guy, The (1996) 2.250000 2.863787 0.613787
  11. Evil Dead II (Dead By Dawn) (1987) 3.297297 3.909283 0.611985
  12. Hidden, The (1987) 3.137931 3.745098 0.607167
  13. Rocky III (1982) 2.361702 2.943503 0.581801
  14. Caddyshack (1980) 3.396135 3.969737 0.573602
  15. For a Few Dollars More (1965) 3.409091 3.953795 0.544704
  16. Porky's (1981) 2.296875 2.836364 0.539489
  17. Animal House (1978) 3.628906 4.167192 0.538286
  18. Exorcist, The (1973) 3.537634 4.067239 0.529605
  19. Fright Night (1985) 2.973684 3.500000 0.526316
  20. Barb Wire (1996) 1.585366 2.100386 0.515020
  1. # 根据电影名称分组的得分数据的标准差
  2. rating_std_by_title = data.groupby('title')['rating'].std()
  3. # 根据active_titles进行过滤
  4. rating_std_by_title = rating_std_by_title.ix[active_titles]
  5. # 根据值对Series进行降序排列
  6. rating_std_by_title.order(ascending=False)[:10]
  1. rating_std_by_title.order(ascending=False)[:10]
  2. Out[17]:
  3. title
  4. Dumb & Dumber (1994) 1.321333
  5. Blair Witch Project, The (1999) 1.316368
  6. Natural Born Killers (1994) 1.307198
  7. Tank Girl (1995) 1.277695
  8. Rocky Horror Picture Show, The (1975) 1.260177
  9. Eyes Wide Shut (1999) 1.259624
  10. Evita (1996) 1.253631
  11. Billy Madison (1995) 1.249970
  12. Fear and Loathing in Las Vegas (1998) 1.246408
  13. Bicentennial Man (1999) 1.245533
  14. Name: rating, dtype: float64

Python进行数据分析(二)MovieLens 1M 数据集的更多相关文章

  1. 《利用Python进行数据分析》笔记---第2章--MovieLens 1M数据集

    写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...

  2. 利用python进行数据分析PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:hi2j 内容简介 [名人推荐] "科学计算和数据分析社区已经等待这本书很多年了:大量具体的实践建议,以及大量综合应用方法.本书在未来几年里肯定会成为Python领域中技术计 ...

  3. 《利用python进行数据分析》读书笔记 --第一、二章 准备与例子

    http://www.cnblogs.com/batteryhp/p/4868348.html 第一章 准备工作 今天开始码这本书--<利用python进行数据分析>.R和python都得 ...

  4. 利用python进行数据分析——(一)库的学习

    总结一下自己对python常用包:Numpy,Pandas,Matplotlib,Scipy,Scikit-learn 一. Numpy: 标准安装的Python中用列表(list)保存一组值,可以用 ...

  5. 利用python进行数据分析之pandas入门

    转自https://zhuanlan.zhihu.com/p/26100976 目录: 5.1 pandas 的数据结构介绍5.1.1 Series5.1.2 DataFrame5.1.3索引对象5. ...

  6. 《利用Python进行数据分析·第2版》第四章 Numpy基础:数组和矢量计算

    <利用Python进行数据分析·第2版>第四章 Numpy基础:数组和矢量计算 numpy高效处理大数组的数据原因: numpy是在一个连续的内存块中存储数据,独立于其他python内置对 ...

  7. 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片

    概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...

  8. 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作

    一.reindex() 方法:重新索引 针对 Series   重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 ...

  9. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍

    一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...

随机推荐

  1. Junit4 单元测试框架的常用方法介绍

    Junit 介绍: Junit是一套框架(用于JAVA语言),由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework),即 ...

  2. android入门 — ProgressDialog/DatePickerDialog/TimePickerDialog

    这三个Dialog都是AlertDialog的子类. ①DatePickerDialog 1.创建DatePickerDialog的实例: 2.通过Calendar类获得系统时间: 3.通过DateP ...

  3. swift - tabBar图片设置的一些注意点

    图片大小尺寸 刚刚开始接触的话,从美工那边拿来的图标大小一般都是偏大的,就像这样: 在此建议,tabBar的图标大小可以是32*32,个人感觉效果不错 图片的颜色问题 如上图所示,该图标的期望颜色(也 ...

  4. jQuery之css

    设置css样式/读取css值 css() 1. 得到第一个p标签的颜色 2. 设置所有p标签的文本颜色为red 3. 设置第2个p的字体颜色(#ff0011),背景(blue),宽(300px), 高 ...

  5. 0302思考&回答

    看完这两个网页,我们可以看出it行业始终是一门热门行业,在现在这个人潮汹涌的人才市场,面对严峻的就业形势,我们应该拿什么去参见招聘?人多而工作职位有限,这警醒我们必须拥有一技之长,否则则会被淘汰.如果 ...

  6. Node.js系列——(1)安装配置与基本使用

    1.安装 进入下载地址 小编下载的是msi文件,下一步下一步傻瓜式安装. 打印个hello看看: 2.REPL 全称Read Eval Print Loop,即交互式解释器,可以执行读取.执行.打印. ...

  7. utuntu下安装pip&pip3

    在utuntu下建议不要使用apt-get install 安装pip,会出现很多问题. 建议使用如下方式安装: wget https://bootstrap.pypa.io/get-pip.py - ...

  8. iOS开发--字典(NSDictionary)和JSON字符串(NSString)之间互转

    iOS开发--字典(NSDictionary)和JSON字符串(NSString)之间互转 1. 字典转Json字符串 // 字典转json字符串方法 -(NSString *)convertToJs ...

  9. bzoj4815[CQOI2017]小Q的格子

    题意 不简述题意了,简述题意之后这道题就做出来了.放个原题面. 小Q是个程序员. 作为一个年轻的程序员,小Q总是被老C欺负,老C经常把一些麻烦的任务交给小Q来处理. 每当小Q不知道如何解决时,就只好向 ...

  10. Qin Shi Huang's National Road System UVA - 1494(次小生成树)

    秦始皇统一中国之后要在全国修公路连接各个城市,皇帝只想修成最小生成树(距离最小,不考虑人力),一个道士说自己可以不花人力物力修一条路,经过两方妥协,选择max(两个城市人口/(生成树长度-这条路的长度 ...