利用Python进行数据分析 笔记4
2017-03-28 13:32
721 查看
MovieLens 1M数据集
GroupLens Research采集了一组从20世纪90年末到21世纪初由MovieLens用户提供的电影评分数据。这些数据中包括电影评分、电影元数据(风格类型和年代)以及关于用户的人口统计学数据(年龄、邮编、性别和职业等)。基于机器学习算法的推荐系统一般都会对此类数据感兴趣。
MovieLens 1M数据集含有来自6000名用户对4000部电影的100万条评分数据。它分为三个表:评分、用户信息和电影信息。将该数据从zip文件中解压出来之后,可以通过pandas.read_table将各个表分别读到一个pandas
DataFrame对象中:
import pandas
as pd
unames=['user_id','gender','age','occupation','zip']
users=pd.read_table('G:/python/pydata-book-master/ch02/movielens/users.dat',sep='::',header=None,names=unames)
rnames=['user_id','movie_id','rating','timestamp']
ratings=pd.read_table('G:/python/pydata-book-master/ch02/movielens/ratings.dat',sep='::',header=None,names=rnames)
mnames=['movie_id','title','genres']
movies=pd.read_table('G:/python/pydata-book-master/ch02/movielens/movies.dat',sep='::',header=None,names=mnames)
利用Python的切片语法,通过查看每个DataFrame的前几行即可验证数据加载工作是否一切顺利:
users[:5]
print ratings
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1000209 entries, 0 to 1000208
Data columns:
user_id 1000209 non-null values
movie_id 1000209 non-null values
rating 1000209 non-null values
timestamp 1000209 non-null values
dtypes: int64(4)
注意,其中的年龄和职业是以编码形式给出的。分析散布在三个表中的数据可不是一件轻松的事情。假设我们想要根据性别和年龄计算某部电影的平均得分,如果将所有数据合并到一个表中的话问题就简单了。可以先用pandas的merge函数将ratings跟users合并到一起,然后再将movies也合并进去。Pandas会根据列名的重叠情况推断出哪些列是合并或链接键:
data = pd.merge(pd.merge(ratings,users),movies)
print data
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1000209 entries, 0 to 1000208
Data columns:
user_id 1000209 non-null values
movie_id 1000209 non-null values
rating 1000209 non-null values
timestamp 1000209 non-null values
gender 1000209 non-null values
age 1000209 non-null values
occupation 1000209 non-null values
zip 1000209 non-null values
title 1000209 non-null values
genres 1000209 non-null values
dtypes: int64(6), object(4)
print data.ix[0]
user_id 1
movie_id 1
rating 5
timestamp 978824268
gender F
age 1
occupation 10
zip 48067
title Toy Story (1995)
genres Animation|Children's|Comedy
Name: 0
现在,熟悉一下pandas,就能轻松地根据任意用户或电影属性对评分数据进行聚合操作了,为了按性别计算每部电影的平均得分,可以使用pivot_table方法:
mean_ratings=data.pivot_table('rating',rows='title',cols='gender',aggfunc='mean')
mean_ratings[:5]
该操作会产生另一个DataFrame,其内容为电影平均得分,行标为电影名称,列标为性别。现在,可以尝试过滤掉评分数据不够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]
active_titles
该索引中含有评分数据大于250条的电影名称,然后就可以据此从前面的mean_ratings中选取所需的行了:
mean_ratings=mean_ratings.ix[active_titles]
mean_ratings
为了了解女性观众最喜欢的电影,可以对F列降序排列:
top_female_ratings=mean_ratings.sort_index(by='F',ascending=False)
top_female_ratings[:10]
GroupLens Research采集了一组从20世纪90年末到21世纪初由MovieLens用户提供的电影评分数据。这些数据中包括电影评分、电影元数据(风格类型和年代)以及关于用户的人口统计学数据(年龄、邮编、性别和职业等)。基于机器学习算法的推荐系统一般都会对此类数据感兴趣。
MovieLens 1M数据集含有来自6000名用户对4000部电影的100万条评分数据。它分为三个表:评分、用户信息和电影信息。将该数据从zip文件中解压出来之后,可以通过pandas.read_table将各个表分别读到一个pandas
DataFrame对象中:
import pandas
as pd
unames=['user_id','gender','age','occupation','zip']
users=pd.read_table('G:/python/pydata-book-master/ch02/movielens/users.dat',sep='::',header=None,names=unames)
rnames=['user_id','movie_id','rating','timestamp']
ratings=pd.read_table('G:/python/pydata-book-master/ch02/movielens/ratings.dat',sep='::',header=None,names=rnames)
mnames=['movie_id','title','genres']
movies=pd.read_table('G:/python/pydata-book-master/ch02/movielens/movies.dat',sep='::',header=None,names=mnames)
利用Python的切片语法,通过查看每个DataFrame的前几行即可验证数据加载工作是否一切顺利:
users[:5]
print ratings
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1000209 entries, 0 to 1000208
Data columns:
user_id 1000209 non-null values
movie_id 1000209 non-null values
rating 1000209 non-null values
timestamp 1000209 non-null values
dtypes: int64(4)
注意,其中的年龄和职业是以编码形式给出的。分析散布在三个表中的数据可不是一件轻松的事情。假设我们想要根据性别和年龄计算某部电影的平均得分,如果将所有数据合并到一个表中的话问题就简单了。可以先用pandas的merge函数将ratings跟users合并到一起,然后再将movies也合并进去。Pandas会根据列名的重叠情况推断出哪些列是合并或链接键:
data = pd.merge(pd.merge(ratings,users),movies)
print data
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1000209 entries, 0 to 1000208
Data columns:
user_id 1000209 non-null values
movie_id 1000209 non-null values
rating 1000209 non-null values
timestamp 1000209 non-null values
gender 1000209 non-null values
age 1000209 non-null values
occupation 1000209 non-null values
zip 1000209 non-null values
title 1000209 non-null values
genres 1000209 non-null values
dtypes: int64(6), object(4)
print data.ix[0]
user_id 1
movie_id 1
rating 5
timestamp 978824268
gender F
age 1
occupation 10
zip 48067
title Toy Story (1995)
genres Animation|Children's|Comedy
Name: 0
现在,熟悉一下pandas,就能轻松地根据任意用户或电影属性对评分数据进行聚合操作了,为了按性别计算每部电影的平均得分,可以使用pivot_table方法:
mean_ratings=data.pivot_table('rating',rows='title',cols='gender',aggfunc='mean')
mean_ratings[:5]
该操作会产生另一个DataFrame,其内容为电影平均得分,行标为电影名称,列标为性别。现在,可以尝试过滤掉评分数据不够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]
active_titles
该索引中含有评分数据大于250条的电影名称,然后就可以据此从前面的mean_ratings中选取所需的行了:
mean_ratings=mean_ratings.ix[active_titles]
mean_ratings
为了了解女性观众最喜欢的电影,可以对F列降序排列:
top_female_ratings=mean_ratings.sort_index(by='F',ascending=False)
top_female_ratings[:10]
相关文章推荐
- 利用Python进行数据分析笔记-第三章-ipython
- 《利用Python 进行数据分析》 - 笔记(5)
- 利用Python进行数据分析笔记(一
- 利用Pythonj进行数据分析学习笔记——第五章 pandas入门
- 《利用Python 进行数据分析》 - 笔记(4)
- 重要的Python库(利用Python进行数据分析笔记)
- 利用Python进行数据分析 笔记1
- 利用python进行数据分析--(阅读笔记一)
- 《利用Python 进行数据分析》 - 笔记(2)
- 笔记 利用python进行数据分析
- 利用Python进行数据分析 学习笔记
- 学习笔记:利用Python进行数据分析
- 转载]利用Python进行数据分析——绘图和可视化 xticks-学习笔记
- 利用Python进行数据分析笔记-第二章
- 利用Python进行数据分析笔记-第四章Numpy
- 《利用Python 进行数据分析》 - 笔记(3)
- 利用python进行数据分析笔记
- 利用python进行数据分析(学习笔记)
- 利用python进行数据分析(O'Relly)学习笔记
- 利用Python进行数据分析——笔记2