《利用python进行数据分析》学习笔记(二)
2017-06-14 11:19
555 查看
处理MovieLens 1M data set
由于代码段不是很多,就将笔记和查漏补缺部分合在一起了。导入表格数据
import pandas as pd upath = os.path.expanduser('ch02/movielens/users.dat') rpath = os.path.expanduser('ch02/movielens/ratings.dat') mpath = os.path.expanduser('ch02/movielens/movies.dat') unames = ['user_id', 'gender', 'age', 'occupation', 'zip'] rnames = ['user_id', 'movie_id', 'rating', 'timestamp'] mnames = ['movie_id', 'title', 'genres'] #方法一 users = pd.read_table(upath, sep='::', header=None, names=unames, engine='python') ratings= pd.read_table(rpath, sep='::', header=None, names=rnames, engine='python') movies = pd.read_table(mpath, sep='::', header=None, names=mnames, engine='python') #方法二 users = pd.read_csv(upath, sep='::', header=None, names=unames) ratings = pd.read_csv(rpath, sep='::', header=None, names=rnames) movies = pd.read_csv(mpath, sep='::', header=None, names=mnames)
对于表格数据,用read_table和read_csv均可,names表示的是columns,sep是根据数据格式来确定的。
users数据
movies数据
ratings数据
数据合并
data = pd.merge(pd.merge(ratings, users), movies)
data
运用merge 进行数据合并,pandas会根据列名的重叠情况自动进行合并,这就非常智能,免去了自己合并表格的麻烦。如果没有特殊要求,就直接pd.merge(left,right)即可。
关于pandas.merge参数太多就不过多介绍,附上链接。
http://pandas.pydata.org/pandas-docs/stable/merging.html
按性别计算每部电影平均得分
mean_ratings = data.pivot_table(value='rating', index='title',columns='gender', aggfunc='mean')
mean_ratings
pandas.pivot_table
pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc=’mean’, fill_value=None, margins=False, dropna=True, margins_name=’All’)
parameters:
data : DataFrame
values: 需要聚合的列或者需要进行操作的列,比如代码中的‘rating’
index : 列 column
- 必须与data长度一致,它将构成pivot table的index,比如代码里的‘title’
columns : 列 column
- 必须与data长度一致,它将构成pivot table的column,比如代码里的‘gender’
aggfunc : function,默认为numpy.mean(), 取均值
fill_value : 标量,默认为None
- 填充缺失值
margins : 布尔量,默认为False
- 添加行或列,例如统计总数
dropna : 布尔量,默认为False
- 剔除全为NaN的列
margins_name : str,字符串,默认为’all’
- 当margins是True时,margins行或列的名称
现在回头去看那段关于pivot_table的代码就很明了了,title是我们的index,gender中存在的元素就是我们的列,这里只有F和M,所以只有两列,rating是我们pivot_table的要处理的value,最后我们经过aggfunc的处理之后得到我们要的数据,按性别计算每部电影的平均得分。下面再给出一种新方法
new_data = data[['rating','title','gender']].groupby(['title','gender']) mean_ratings = new_data.mean().unstack()
mean_ratings
可以发现结果基本一样除了多了一个rating标签,这说明pivot其实就是对数据进行新组合,新索引,然后调用函数,再unstack()的过程的集合。
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.pivot_table.html
统计每部电影评论条数并过滤掉不够250条的电影
# 方法1 ratings_by_title = data.groupby('title').size() # 方法2 ratings_by_title = data['title'].value_counts(sort=False) # 利用布尔索引提出评论条数多余250的电影 active_titles = ratings_by_title.index[ratings_by_title >= 250] # 利用title索引出对应电影的mean_ratings数据 mean_ratings = mean_ratings.ix[active_titles] # 统计最受女性欢迎的电影 top_female_ratings = mean_ratings.sort_index(by = 'F',ascending= False) # index重命名 mean_ratings = mean_ratings.rename(index={'Seven Samurai (The Magnificent Seven) (Shichinin no samurai) (1954)': 'Seven Samurai (Shichinin no samurai) (1954)'})
pandas.DataFrame.sort_index()
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_index.html
计算评分分歧
# 添加一列用于存放平均得分之差 mean_ratings['diff'] = mean_ratings['M'] - mean_ratings['F'] # 对其排序 sorted_by_diff = mean_ratings.sort_index(by='diff') # 对行反序,取出前15个 sorted_by_diff[::-1] ad02 [:15] # 根据电影名称分组的得分数据的标准差 rating_std_by_title = data.groupby('title')['rating'].std() # 根据active_titles进行过滤 rating_std_by_title = rating_std_by_title.ix[active_titles] # 根据值对Series进行降序排列 rating_std_by_title.sort_values(ascending=False)
原书中,根据值对Series排序,调用的是order()函数,我所用的python3.6所下载的pandas已经没有order函数了,已经改为sort_values().
相关文章推荐
- 《利用python进行数据分析》学习笔记(六)
- 《利用python进行数据分析》学习笔记(一)
- 《利用python进行数据分析》学习笔记(一)
- 《利用python进行数据分析》学习笔记第八章
- 《利用python进行数据分析》学习笔记(四)
- 《利用python进行数据分析》学习笔记ch09
- 《利用python进行数据分析》学习笔记(五)(下)
- 《利用Python进行数据分析》学习笔记ch02-1(1)
- 《利用python进行数据分析》学习笔记(二)4.3 通用函数 4.4 利用数组进行数据处理
- 《利用Python进行数据分析》学习笔记ch02-2(2)
- 《利用Python进行数据分析》学习笔记ch02-3(3)
- 《VC++深入详解》学习笔记 第十九章 动态链接库
- 《unix/linux编程实践教程》学习笔记:第七章 事件驱动编程:编写一个视频游戏
- 《鸟哥的Linux私房菜》学习笔记2_从Unix到Linux的历史
- MyBatis:学习笔记(1)——基础知识
- 学习笔记-1
- C# ErrorsAndExceptions- 错误与异常的学习-《C#高级编程》学习笔记
- LuceneInAction(第2版)学习笔记——第四章 Lucene的分析过程
- es6 箭头函数(arrow function) 学习笔记
- 学习笔记