python分析《西虹市首富》猫眼观众评论

1、背景

《西虹市首富》电影如火如茶的热映中,评价褒贬不一。评论有水军,有苛刻的专业评论。那整体对于电影的评价和分布到底是怎样的呢?接下来将爬去和分析猫眼电影用户的评论。

2、数据准备

(1)API获取评论

python分析《西虹市首富》猫眼观众评论_第1张图片
猫眼API

通过猫眼电影提供的API,获取电影的评论。由于API的限制,总共可以获得999页的评论,每页大概有25条评论。但实际评论的数量肯定不止这么多,所有在初识爬去评论后,还需要再搞个crontab每10分钟再爬去一下最新的评论。注意事项如下:

a.记录的存储

由于是一个持续更新的过程,这里采用mysql存储历史采集的数据。主要关心的字段如下:city(评论人城市)、content(评论内容)、cid(评论的ID、排重用)、score(评分)、gender(性别)、starttime(评论时间)。

b.记录的排重

在数据抓去时,数据本身还在更新,很有可能会重复抓贴;另外,有很多水贴,这些都是需要过滤的。通过用cid来判断是否该贴已经被采集。

(2)数据清洗

a.数据加载

df1 = pd.read_sql(sql, conn)

pandas读取mysql有如上方式,其中参数为1、sql,读取的sql语句,读取全部可写select *;2、conn为连接数据库的connection。加载完数据大致如下:

python分析《西虹市首富》猫眼观众评论_第2张图片
mysql数据至pandas

b.数据转换

b1、将city对应至各省

单存城市的分析无太大意义,但按省分析或许能找到很多特征。通过分析,city字段可能是该评论人所在市、县的名称。因此需要有映射表实现市、县-->省。github有个项目:https://github.com/wecatch/china_regions,有次对应关系。选取合适的类型下载,如选择sql形式下载,并放在数据库当中。

加载对应关系至pandas:通过select n.a_name a_name,n.c_name c_name,p.name p_name from (select a.name a_name, c.name c_name, c.province_id from city c left join area a on a.city_id = c.city_id) n left join province p on n.province_id = p.province_id,并读取至pandas,可得如下数据:

python分析《西虹市首富》猫眼观众评论_第3张图片
关系

由于猫眼的城市名称都是简写,而以上的映射关系是全城(如:新疆维吾尔自治区),因此如果完全对应存在困难,一种方式是在简写名称上添加“市”、“县”,然后与映射表匹配;另一种是两边名称都只选前两个字来模糊映射,这种虽然有误差,但如果误差很小的话,作为简便方法,还是可使用的。下面来介绍如何通过截断匹配。

首先将映射表形成一个字典,key为市、县,value为省。此时,key只选择前两个字key[:2]。取名为p_dict

其次,将猫眼评论的城市节选前两个字:

cut_func =lambda x: x[0:2] #构造lambda函数,其中lambda为单行可具备多参数的函数

df1['city'] = df1['city'].map(cut_func) #利用map来截断数据,其中map可利用函数或字典来实现字段对应

最后,再将简写城市对应至映射表当中:

df1['city']=df1['city'].map(p_dict)

最终的效果如下:

python分析《西虹市首富》猫眼观众评论_第4张图片
效果

b2、时间的截取

同理,时间的化我们可能会按天来观察数据,因此只截取日期即可:df1['starttime']=df1['starttime'].map(lambda x: x[:10])

(3)数据展示与观察

a.按省来看评论数

count = df1.groupby('city').count();count = count.sort_values(by='score');c_city = count.index;c_score = count['score'];show(c_city,c_score)

python分析《西虹市首富》猫眼观众评论_第5张图片
省评论分布

可见猫眼评论最多的是江苏省,

你可能感兴趣的:(python分析《西虹市首富》猫眼观众评论)