您的位置:首页 > 其它

pandas实例——MovieLens电影数据实战分析

2017-11-15 04:55 423 查看
在上一篇文章中我介绍了pandas的基本用法,今天我就用pandas实战操作,大家可以一起感受一下数据分析是如何从一堆数字中找到有价值的信息的。下面我也附上了代码,我强烈推荐大家将数据下载下来,亲自去实践敲一遍,我相信收获会更多。

废话不多说!     HERE WE GO!!!

一、数据集介绍

我采用的数据是来自MovieLen的电影数据集(https://grouplens.org/datasets/movielens)中的MovieLens 1M Dataset。需要的同学

可以在链接中自行下载。其中有三个dat数据包,分别为:users.dat、ratings.dat、movies.dat。另外还可下载README文件查看数据具体介绍,我在下面就只进行简短的介绍,想偷懒的同学不用看它的,看我的就够啦!^_^

users.dat:UserID、Gender、Age、Occupation、Zip-code

movies.dat:MovieID、Title、Genres

ratings.dat:UserID、MovieID、Rating、Timestamp

注:dat文件是数据存储的一种格式,即Data缩写。在pandas中用read_table即可打开。

二、具体分析过程

1、导入数据

ratings = pd.read_table('ratings.dat', header=None, names=['UserID', 'MovieID', 'Rating', 'Timestamp'], sep='::')
users = pd.read_table('users.dat', header=None, names=['UserID','Gender','Age','Occupation','Zip-code'], sep='::')
movies = pd.read_table('movies.dat', header=None, names=['MovieID', 'Title', 'Genres'], sep='::')


2、数据合并

在数据分析中,将不同的表合并起来汇聚成一张总表,会更加便于我们后面的处理与分析。

data = pd.merge(pd.merge(users, ratings), movies)

3、数据访问

print data[data.UserID == 1]


打印出数据表中UserID为1的用户所有的相关数据信息。

4、不同性别对电影的平均评分

data_gender = data.pivot_table(values='Rating', index='Title', columns='Gender', aggfunc='mean')


采用数据透视,建立以Title为行索引,Gerder为列索引,mean为聚合方法来显示Rating中的数据。
这样就获得了一张我们自创的data_gender数据表,下面我们再对该数据表进行操作:

data_gender['difference'] = data_gender.F - data_gender.M

data_gender_sorted = data_gender.sort_values(by='difference', ascending=False)


我们向data_gender数据表中新插入了一列difference,用来存放男女用户评分的差值。
接下来我们对difference列降序排列(或者升序),即可看到不同性别用户对相同电影评分差异最大的电影了。

5、平均分较高的电影

data_mean_rating = data.pivot_table(values='Rating', index='Title', aggfunc='mean')

data_mean_rating_sorted = data_mean_rating.sort_values(by='Rating', ascending=False)


依然是利用数据透视,对数据进行重新划分后排序,只是此次不再指定列标签,pandas会自动用Rating作为列标签。

随后对数据再进行排序,即可得到平均分较高的电影了,也就是好电影咯!!

6、评分次数最多热门的电影

data_rating_num = data.groupby('Title').size()

data_rating_num_sorted = data_rating_num.sort_values(ascending=False)


利用数据分组操作对Title进行分组,并用size()聚合函数即可统计出每个Title出现的次数,即评分次数。
再利用排序方法对值进行降序排列,即可获得热门电影的数据表啦!

7、问题出现在哪里????

推荐大家按照我上面的步骤,去体验一下数据分析带给我们的快乐!!如果你做了,你就会发现一个很奇怪的问题!
这个问题在上面第五项分析中最为明显:为什么那些平均分高的电影,我从来没看过?甚至有些听都没听过呢?这个问题

是不符合常理的,毕竟国内外好电影大家按说都应该耳熟能详的,所以这其中一定存在错误。

这个问题就在于:有些电影只有极少数的人(1-2人)看过,并且觉得很好看,给了很高的评分,这个时候我们去分析数据

的时候,得到的就是这种极小众认为好看的电影。因此,我们应该对评分次数做出最小值限定,使数据更加合理:

加入评分次数限制的分析不同性别对电影的平均评分:

data_gender_hot = data_gender.loc[data_rating_num[data_rating_num > 1000].index]

data_gender_hot.sort_values(by='diff', ascending=False)


加入评分次数限制的分析平均分高的电影:

data_mean_rating_number = data_mean_rating.loc[data_rating_num[data_rating_num > 1000].index]
data_mean_rating_number_sorted = data_mean_rating_number.sort_values(by='Rating', ascending=False)

三、总结

在数据处理过程中,合并、透视、分组、排序这四大类操作是最经常用的,所以希望大家能够熟练掌握这四种方法的用法。

以上内容就是我为大家带来的运用pandas数据分析的全部内容啦!有问题想与我交流的直接留言即可咯! 拜了个拜~!

代码一定要亲自敲一遍!代码一定要亲自敲一遍!代码一定要亲自敲一遍!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐