MovieLens 1M数据集含有来自6000名用户对4000部电影的100万条评分数据,分为三个表,movies、ratings、users

数据处理

通过pandas.read_table将各表转化为pandas 的DataFrame对象

import pandas as pd
#用户信息
unames = ['user_id', 'gender', 'age' , 'occupation' , 'zip']
users = pd.read_table('E:/Wheat/DataAnalysis/pydata-book/pydata-book-2nd-edition/datasets/movielens/users.dat',sep= '::', header = None, names = unames,engine = 'python')
#评分
rnames = ['user_id', 'movie_id', 'rating', 'timestamp']
ratings = pd.read_table('E:/Wheat/DataAnalysis/pydata-book/pydata-book-2nd-edition/datasets/movielens/ratings.dat',sep= '::', header = None, names = rnames,engine = 'python')
#电影信息
mnames = ['movie_id', 'title' , 'genres']
movies =  pd.read_table('E:/Wheat/DataAnalysis/pydata-book/pydata-book-2nd-edition/datasets/movielens/movies.dat',sep= '::', header = None, names = mnames,engine = 'python')

其中用到的参数为分隔符sep、头文件header、列名定义names、解析器引擎engine,这里和书上相比多用了engine参数,engine参数有C和Python,C引擎速度更快,而Python引擎目前功能更完整。

利用python的切片查看每个DataFrame

#检查数据的输出
print(users[:5])
print(ratings[:5])
print(movies[:5])

结果输出如下

可通过info()查看dataframe的summary

ratings.info()

想要根据性别和年龄计算某部电影的平均得分,可用pandas.merge 将所有数据都合并到一个表中。merge有四种连接方式(默认为inner),分别为

内连接(inner),取交集;

外连接(outer),取并集,并用NaN填充;

左连接(left),左侧DataFrame取全部,右侧DataFrame取部分;

右连接(right),右侧DataFrame取全部,左侧DataFrame取部分;

data = pd.merge(pd.merge(ratings, users), movies)
data.info()

通过索引器查看第一行数据,当使用ix索引时,虽然仍有结果输出,但提示.ix已弃用,请使用基于标签的索引.loc或基于位置的索引.iloc,因此修改为

print(data.iloc[0])


数据透视表

为了按性别计算每部电影的平均得分,可通过数据透视表(pivot_table)实现

mean_ratings = data.pivot_table('rating', index=["title"],columns=["gender"], aggfunc='mean')
print(mean_ratings[:5])

该操作产生了另一个DataFrame,输出内容为rating列的数据,行标index为电影名称,列标为性别,aggfunc参数为函数或函数列表(默认为numpy.mean),其中“columns”提供了一种额外的方法来分割数据。

过滤评分数据不够250条的电影

通过groupby()对title进行分组,并利用size()得到一个含有各电影分组大小的Series对象。

ratings_by_title = data.groupby('title').size()
print(ratings_by_title[:10])

最后通过index索引筛选出评分数据大于250条的电影名称。

active_titles = ratings_by_title.index[ratings_by_title >= 250]
print(active_titles)

使用mean_ratings选取所需的行

mean_ratings = mean_ratings.loc[active_titles]
mean_ratings.info()
print(mean_ratings[:5])


了解女性观众最喜欢的电影

通过sort_index进行降序

top_female_ratings = mean_ratings.sort_index(by = 'F',  ascending = False)
print(top_female_ratings[:10])

by参数的作用是针对特定的列进行排序(不能对行使用),ascending的作用是确定排序方式,默认为升序


计算评分分歧

增加一列存放平均得分之差,并对其排序,得到分歧最大且女性观众更喜欢的电影

mean_ratings['diff'] = mean_ratings['M'] - mean_ratings['F']
sorted_by_diff = mean_ratings.sort_index(by = 'diff')
print(sorted_by_diff[:10])

对排序结果反序可得男性观众更喜欢的电影

print(sorted_by_diff[::-1][:10])

以上为本人使用《利用Python进行数据分析》的学习过程(Python 3.6),如有理解不当的地方,望指出,感激不尽!

Learning: 利用Python进行数据分析 - MovieLens 数据集的探索相关推荐

  1. python数据分析视频网盘-利用Python进行数据分析视频教程云盘下载

    利用Python进行数据分析视频教程 内容简介 本视频讲的是利用Python进行数据控制.处理.整理.分析等方面的具体细节和基本要点.同时,它也是利用Python进行科学计算的实用指南(专门针对数据密 ...

  2. 利用python进行数据分析——第十四章_数据分析案例

    文章目录 本章中的数据文件可从下面的github仓库中下载 利用python进行数据分析(第二版) 一.从Bitli获取 1.USA.gov数据 1.1纯python时区计数 1.2使用pandas进 ...

  3. 数据基础---《利用Python进行数据分析·第2版》第7章 数据清洗和准备

    之前自己对于numpy和pandas是要用的时候东学一点西一点,直到看到<利用Python进行数据分析·第2版>,觉得只看这一篇就够了.非常感谢原博主的翻译和分享. 在数据分析和建模的过程 ...

  4. 利用Python进行数据分析(学习笔记)

    第壹章 准备工作 1.1 本书内容 1.1.1 什么类型的数据 1.2 为何利用Python进行数据分析 1.2.1 Python作为胶水 1.2.2 解决"双语言"难题 1.2. ...

  5. 利用python进行数据分析第三版 mobi_利用python进行数据分析 pdf下载

    利用Python进行数据分析pdf电子版是一本广受好评的Python实战指导参考图书,该书以大量案例分析为基本,全面系统地教你如何解决各类数据分析问题,有兴趣的朋友快来下载吧! 利用Python进行数 ...

  6. 用python做数据分析pdf_利用python进行数据分析pdf

    利用python进行数据分析pdf微盘下载!<利用python进行数据分析>利用Python实现数据密集型应用由浅入深帮助读者解决数据分析问题~适合刚刚接触Python的分析人员以及刚刚接 ...

  7. 利用python进行数据分析之准备工作(1)

    目录 一.简介 二.重要的python库 1.numpy库 2.pandas 3.matplotlib 4.IPython 5.Scipy 三.python环境安装和数据分析前的数据准备 一.简介 什 ...

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

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

  9. 数据基础---《利用Python进行数据分析·第2版》第8章 数据规整:聚合、合并和重塑

    之前自己对于numpy和pandas是要用的时候东学一点西一点,直到看到<利用Python进行数据分析·第2版>,觉得只看这一篇就够了.非常感谢原博主的翻译和分享. 在许多应用中,数据可能 ...

最新文章

  1. 编写纳新网站后端的相关知识总结
  2. hp服务器ilo批量配置脚本
  3. mac版python连接mysql_Mac下Python连接MySQL · BlBana’s BlackHouse
  4. 使用SHA256证书进行微软数字签名代码签名
  5. 漫谈度量学习(Distance Metric Learning)那些事儿
  6. Exchange 2013 、Lync 2013、SharePoint 2013 三
  7. python framework threads_python 多线程,进程的理解
  8. spring boot2 整合(二)JPA(特别完整!)
  9. java行数可变的表格,怎么在表格中自动增加行,并对输入的数据作判断
  10. 004 - PHP git
  11. 工作中你都遇到哪些不要脸的同事?
  12. 创始团队的执行力很重要
  13. 你可以退部的,不必说抱歉
  14. 微信小程序 tab点击切换(不滑动)
  15. web期末作业设计网页:动漫网站设计——蜡笔小新(10页) HTML+CSS+JavaScript 学生DW网页设计作业成品 动漫网页设计作业 web网页设计与开发 html实训大作业
  16. 独木舟上的旅行(贪心算法)
  17. 汉字拼音的一个解决方法(初具使用价值)
  18. Python中“xx+=xx”与“xx=xx+xx”的区别
  19. 入门深度学习与机器学习的经验和学习路径
  20. ubuntu18.04 全局美化-------最全

热门文章

  1. 2个鸡蛋100楼问题
  2. 创新技术驱动印刷产业转型:惠普全新一代Indigo发布
  3. 蓝桥杯例题(附源码)
  4. windows系统dos命令合集
  5. 合成孔径成像的应用及发展
  6. 6-3 锥体体积计算
  7. mysql断开数据库连接_快速断开当前数据库的所有连接的方法
  8. 国密算法SM4加密,数据加密存储加密
  9. 表格中单元格的间距设置
  10. 即构互动白板升级:全面支持教育机构上线H5交互课件!