本篇博文是《利用Python进行数据分析》第二章的学习笔记,由于原书代码是用python2.7,现使用python3学习本书并重新实现书中内容;本人也是使用Python进行分析的初学者,如果您有意见及建议烦请多多交流。
数据集下载地址: https://github.com/wesm/pydata-book
暂留,待补充
原始数据集是.dat文件,可使用read_table
直接导入:
import pandas as pd
import numpy as np
users = pd.read_table(r'/Users/SEN/Downloads/pydata-book-2nd-edition/datasets/movielens/users.dat',
sep='::',header = None, names = ['user_id','gender','age','occupation','zip'],engine='python')
ratings = pd.read_table(r'/Users/SEN/Downloads/pydata-book-2nd-edition/datasets/movielens/ratings.dat',
sep='::',header = None, names= ['user_id','movie_id','rating','timestamp'], engine='python')
movies = pd.read_table(r'/Users/SEN/Downloads/pydata-book-2nd-edition/datasets/movielens/movies.dat',
sep='::',header = None, names= ['movie_id','title','genres'],engine='python')
可利用切片语法:
users[:5]
ratings[2:3]
也可直接用.head()方法展示前5行:
users.head()
分析散布在三个表总的数据可不是一件轻松的事情,假设我们想要根据性别以及年龄来计算某部电影的平均得分,将所有的数据合并到一个表中的话问题就简单了:
data = pd.merge(pd.merge(ratings,users),movies)
data.head()
现在,只要稍微熟悉一下pandas,就能轻松地根据任意个用户或者电影的属性对评分数据进行聚合操作了。为了计算每部电影的平均得分,我们可以使用pd.pivot_table
方法:
mean_ratings = pd.pivot_table(data, index='title', values=['rating'], columns='gender',
aggfunc= 'mean')['rating']
mean_ratings.head()
这样会产生另一个DataFrame,包括了数据集中各部电影的分性别的平均得分。
现在,打算过滤评分数不够250条的电影,首先对title
进行分组,然后利用size()
得到一个含有电影分组大小的Series
对象:
ratings_by_title = data.groupby('title').size()
active_titles = ratings_by_title.index[ratings_by_title>=250]
该索引中就有了评分数据大于250条的电影名称,之后我们就可以选取所需的行了:
mean_ratings = mean_ratings.loc[active_titles]
为了了解女性观众最喜欢的电影,我们可以对F列进行降序排列
mean_ratings.sort_values(by='F',ascending=False)