利用Python进行数据分析---ch02《MovieLens 1M数据集(下)》读书笔记
2016-03-11 09:27
786 查看
page:30-39页
#coding=UTF-8 import pandas as pd ''' 利用python的切片语法,通过查看每个DataFrame的前几行验证一下数据加载工作是否一切顺利 ''' unames = ['user_id','gender','age','occupation','zip'] users = pd.read_table('c:/pytm/ch02/ml-1m/users.dat',sep='::',header=None,names=unames,engine = 'python') print users[:5] rnames = ['user_id', 'movie_id', 'rating', 'timestamp'] ratings = pd.read_table('c:/pytm/ch02/ml-1m/ratings.dat', sep='::', header=None, names=rnames, engine='python') print ratings[:3] mnames = ['movie_id', 'title', 'genres'] movies = pd.read_table('c:/pytm/ch02/ml-1m/movies.dat', sep='::', header=None, names=mnames, engine='python') print movies[:4] print '==========分割线==========' ''' 利用python中的merge函数将ratings跟users合并到一起,然后再将movies也合并进去 并查看合并后的第一行数据 ''' data = pd.merge(pd.merge(ratings,users),movies) print data.ix[0] print '==========分割线==========' ''' 现在只要熟悉一下pandas,就能轻松地根据任意个用户或电影属性对评分数据进行聚合操作了。 为了按性别计算每部电影的平均得分,我们用pivot_table方法 ''' mean_ratings = data.pivot_table('rating',index='title',columns='gender',aggfunc='mean') print mean_ratings[:5] print '==========分割线==========' ''' 现在打算过滤掉评分数据不足250条的电影,为了达到这个目的,先对title进行分组,然后利用size()得到一个含有 各电影分组大小的Series对象 ''' ratings_by_title = data.groupby('title').size() print ratings_by_title[:10] active_titles = ratings_by_title.index[ratings_by_title >= 250] # print active_titles #将评分数据超过250条的电影按照男女评分 mean_ratings = mean_ratings.ix[active_titles] print mean_ratings ''' 为了了解女性观众最喜欢的电影,我们可以对F列降序排列 ''' top_female_ratings = mean_ratings.sort_values(by='F',ascending=False) print top_female_ratings[:10] ''' 假设我们想找出男性和女性观众分歧最大的电影,一个办法是给出mean_ratings加上 一个用于存放平均得分之差的列,并对其进行排序 ''' mean_ratings['diff'] = mean_ratings['M'] - mean_ratings['F'] sorted_by_diff = mean_ratings.sort_values(by='diff') print sorted_by_diff[:10] #对结果反序并取出前15行,得到的则是男性观众更喜欢的电影 print sorted_by_diff[::-1][:15] ''' 如果只是想找出分歧最大的电影(不考虑性别因素),则可以计算得分数据的方差或标准差 ''' #根据电影名称分组的得分数据的标准差 rating_std_by_title = data.groupby('title')['rating'].std() # #根据active_titles进行过滤 rating_std_by_title = rating_std_by_title.ix[active_titles] # #根据值对Series进行降序排列 print rating_std_by_title.sort_values()[-10:]
相关文章推荐
- 全面解读python web 程序的9种部署方式
- 决策树及其python实现
- Python库应用之Json
- 自己用Python写的iOS项目自动打包脚本
- Python 数据图表工具的比较
- Python中中列表分片插入的数目并不需要和原来的个数保持一致
- PEP8 Python 编码规范整理
- Python函数式编程指南(四):生成器详解
- Python函数式编程指南(二):从函数开始
- Python函数式编程指南(一):函数式编程概述
- python实现class对象转换成json/字典的方法
- python中enumerate函数遍历元素用法分析
- Python使用PIL库实现验证码图片的方法
- Python基本语法经典教程
- 详解Python中的变量及其命名和打印
- 简单讲解Python中的数字类型及基本的数学计算
- 使用Python读写文本文件及编写简单的文本编辑器
- Python中的if、else、elif语句用法简明讲解
- python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法
- Python类型——字符串