利用Python进行数据分析 笔记4

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)

 

注意,其中的年龄和职业是以编码形式给出的。分析散布在三个表中的数据可不是一件轻松的事情。假设我们想要根据性别和年龄计算某部电影的平均得分,如果将所有数据合并到一个表中的话问题就简单了。可以先用pandasmerge函数将ratingsusers合并到一起,然后再将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]

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习数据分析是当代信息时代的一项重要技能,Python作为一种强大的编程语言,是数据分析的热门工具之一。以下是我在学习利用Python进行数据分析过程中的一些笔记。 首先,学习Python的基础知识是必不可少的。了解Python的基本语法、数据类型、循环和条件语句等知识对于数据分析的学习非常重要。我通过自学网课和阅读相关书籍,逐渐掌握了Python的基础知识。 其次,学习使用Python数据分析库。在Python中,有很多强大的数据分析库,例如NumPy、Pandas和Matplotlib等。我通过学习这些库的用法,掌握了数据的处理、清洗、分析和可视化的技巧。我学习了如何使用NumPy进行矩阵运算和数值计算,如何使用Pandas进行数据处理和数据操作,以及如何使用Matplotlib进行数据可视化。 除了数据分析库,学习Python的机器学习库也是必不可少的。机器学习在数据分析中扮演着重要角色,Python中有很多优秀的机器学习库,例如Scikit-learn和TensorFlow。我通过学习这些库的使用,了解了机器学习的基本概念和常用算法,例如回归、分类和聚类等。我也学习了如何使用这些库来构建和训练机器学习模型。 最后,实践是学习的关键。在学习的过程中,我通过实践项目来巩固所学知识。我选择了一些真实的数据集,并运用Python数据分析技术进行数据处理、分析和可视化。通过实践,我不仅掌握了数据分析的具体步骤和方法,还锻炼了自己解决实际问题的能力。 总的来说,学习利用Python进行数据分析需要掌握Python的基础知识、数据分析库和机器学习库的使用,同时也需要通过实践项目来巩固所学知识。这个过程需要持续不断的学习和实践,但是通过不断的努力和实践,我相信能够掌握Python进行数据分析的技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值