首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于舌尖中国豆瓣评价的数据解读及可视化

这一章还是以舌尖上中国这个纪录片为例,讲一讲数据解读和Python的一些工具包在数据上应用,即涉及到Pandas,Matplotlib,AipNlp的一些实用操作。

上一次只针对舌尖2的短评进行获取及分析,这次对整个舌尖系列的分集评论进行了完善归类。

表格可以看出:

舌尖1获取的数据量最多,有1242条;

舌尖2获取了950条;

舌尖3的数据最少只有199条,难道是真的难看人都懒得去评论?

总共2391条数据。

根据纪录片编号/分集编号/分集名称/及用户名/评论时间/评论内容梳理成一张表。在写入csv时候报字符串转义错,我都纳闷了用了Python3.X还能遇到这种中文编码问题,重回页面才发现太多人取那种杀马特及各种中二的名字,都是取材十几年前葬爱家族的QQ签名?

情感倾向分析

数据中最有价值的是这些用户的评论数据,可以进行简单文本解析,通过百度文本情感分析接口对评论数据进行积极/消极程度的量化分析。

百度AI文本分析用词义去揣测衡量这句话积极的程度百分比,百分比越高说明越积极,反之越低越消极。可是目前有 2391条数据,如果挨个投入页面中分析再记录分数,那么不是那个数据员疯了就是系统会崩溃。

百度还是人性地提供了情感分析的Python版接口-AipNlp。查看口说明,可以看到模型参数的输入是文本,分析得出的结果包括输入的词裂变,表示情感极性分类结果,表示分类的置信度,表示属于积极类别的概率,表示属于消极类别的概率。

将输出一个字典类的结果数据可以通过索引获取相应值。

将这个操作编辑成一个函数【get_value】,Pandas提供的apply就能接受这个函数,直接在表中做运算,而不用需要用到for循环,说实在Pandas解题思路更趋向R而不是Python。结果数据再次做了一张中间表。

词云分析

因为有了评论文字信息,倒是不能浪费,针对三季的评论内容各自做了一张词云图,

对比三张词云:

舌尖1评论数量最多,词汇量最丰富,出现比较多暖性感性的词汇及生活中名词;

舌尖2也是以比较多暖性感性的词汇所占最大的比重,不过也开始出现一些‘不好’,‘失望’,‘生硬’等负面情绪词汇;

舌尖3的词汇量明显最少,而且充斥比较多负面情绪;

比较好玩的是,后面两季的词云图都不约而同呼唤第一季,而且根据字体大小说明评论中第一季的所在比重不轻,看来第一季给了太多美好的印象,不过可能也会造成刻板印象;

看了一下三张图,‘感动’皆有出现,看来不管怎样,美食确实能直击观影者的内心。

数据解读

结果数据有涉及到分集,评论时间及情感趋向值,就能根据分类情况在Pandas中应用group by分组统计。

1. 首先对舌尖上系列做一次整体的统计,并通过Matplotlib可视化出图:

红色的柱状图,是每季情感趋向值的均值,可以看出舌尖1的评价最高,舌尖的评价最差;

黄色的柱状图,是每季情感趋向值的标准差,在出图时候我在纳闷按道理来说舌尖1应该评价最高,而图反应来说却是舌尖2的最高,乃至斗不过舌尖3,不符合社会舆情啊,后来问了统计学的基友,他告诉标准差是数据间起伏程度的指标,数值越高起伏越高。那么就没错了,舌尖2的社会评价分歧比较大,而舌尖1和舌尖3都是口碑一边倒的态势。

2. 接下来针对舌尖上根据分集为组做了统计:

根据三张图的情况,都可以发现每季开播第一集的呼声最高,尔后热度会稍微降低并趋向平稳;

可以看出舌尖1每集的得分都相对比较高,只有《厨房的秘密》那集的评价较低;

观看舌尖2的分集走图,让我有一个错觉:舌尖2好像的得分会比舌尖1高,不过舌尖2有出现了评价断崖点——在第4集《家常》。翻阅了下,网上对该集的评价:关于红烧肉及钢琴女孩的故事引发了网友的质疑,开始了对舌尖2的不信任感;

舌尖3的开局一路走低,一路低迷,在第3集《宴》出现了谷低,确实那集有1/4时间在讲矮萌一个厨师什么咖喱牛肉,感觉就是在看一个操作视频而已,啥内容都没有,也是矮萌一个开埠才几十年的地方有啥能吃,无非就是剽窃漳泉二州的东西,然后标榜是自己文化;

不过舌尖3有个爆点是在第6集《酥》,各种中式点心至少在我这相当能吸引眼球,特别是90多岁粤式餐点老爷子做的叉烧包及喝下午茶老西关做派,还有就是精致的西湖荷花酥。

3. 最后针对时间分组做了统计:

也是做了三张对比分析,时间跨度对应每一季首季开播时间顺延下去的两个月的时间:

绘制这张的最主要的目的还是在显示Matpotlib中对以时间尺度的数据的展示,实际能解读的信息有限。不过舌尖系列播出以日播形式,基本在一周内播完,可以看出舌尖1及舌尖2在播出两个月的时间讨论热度都很高,而舌尖3在播出来后基本就没有什么热度,从侧面体现一个片子好坏与社会舆情的关系。

技巧

这次的数据分析及可视化都是通过Python来完成,特别是可视化以Matplotlib主打。Matplotlib基本上市面上其他Python可视化包的基础,也是一个挺悲情的包。Matplotlib创始者已经驾崩了,全靠社区其他人维护升级。堪称Python界蜀国——先帝创业未半而中道崩殂,今天下三分,有seaborn异军突起。

不过Matplotlib倒是能提供全面可视化功能,只是散落在各处需要从各个案例中去提取想要的功能。而我习惯先绘制简单图形后再慢慢往上加风格化。

1. 标注,随便图形中有刻度网格,但是有些数值间差距不大时候往往表现不明显,这时候可能要有标注来体现数值:

Matplotlib我习惯两种方法:plt.annotate及plt.text

Plt.annotate构建标注内容,标注点的指向位置及偏移量来对相应的数据进行标注;

plt.text操作差不多,不过我在实例中看的比较多的是plt.text对柱状图进行标注,并且设置在柱状图上摆放位置。

2. 时间轴的刻度,我的需求是按在这个时间段内展示所有的数据,哪怕某个时间点没有数据也要空出位置来。如果有断点的数据,是要做一次插补的数据清洗的,然而mdates提供了相应的函数解决这些难题。

3. 假设在fig中有多个图要展示一些风格样式差不多只是数据不同的复图时候,笨方法是每个复图都写一遍风格化代码,那这样加大代码量显得不够优雅。其实可以把风格化写个函数,挨个读取就行,不过我更趋向是写个for循环去操作,当然也可以在for循环运行可视化的函数。

结语

最近慢慢在之前Python的技术一点点找回来。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180724G0BF5P00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券