《利用Python进行数据分析》第2章学习笔记

《利用Python进行数据分析》第2章学习笔记

本篇博文是《利用Python进行数据分析》第二章的学习笔记,由于原书代码是用python2.7,现使用python3学习本书并重新实现书中内容;本人也是使用Python进行分析的初学者,如果您有意见及建议烦请多多交流。
数据集下载地址: https://github.com/wesm/pydata-book

  • 导入数据
  • 数据集的合并
  • 数据透视表的使用
  • 数据筛选
  • 数据排序
  • 图表制作

2.1 来自bit.ly的1.usa.gov数据

暂留,待补充


2.2 MovieLens 1M数据集分析

数据导入

原始数据集是.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)

你可能感兴趣的:(Python)