1、《长津湖》观后2018 年有了孩子后,近 3 年没有再看过电影。 念于《长津湖》的确大热,我对战争片心念神往、对中国近现代史非常好奇,加上老婆的男神段奕宏参演。一拍即合,我俩在国庆假期的最后一天看了这部鸿篇巨制、热血催泪电影。 《长津湖》电影海报 宏大的战争场面、天壤之别的中美装备、物质条件差异、零下40度的恶劣的环境这些都已深深的印在我的脑海里。电影相对真实的还原了历史,这些历史是眼睛可以看到的,耳朵可以听到的,恰是之前学生阶段无法学到的或学的不够深刻的地方。 中学阶段学过魏巍的《谁是最可爱的人》,当时是全篇背下课文的。但是:我刚才自己又逐字逐句完整的读了一遍,不一样、完全不一样...... 边读边浑身起了鸡皮疙瘩,之前的懵懂、不懂现在全懂了,之前的死记硬背现在全都理解了。 思绪万千也感慨万千...... 电影里的雷公、伍千里、伍万里等是最可爱的人,数以百万的志愿军战士都是最可爱的人。 前辈们的出生入死,就是为了我们不再打仗。 没有他们,就不会有我们的万家灯火。 上面仅是我的一点感触,大家的反馈如何呢? 本文结合 ELK(Elasticsearch、Logstash、Kibana)实现了《长津湖》15万+影评数据的可视化分析。 2、动手之前我的几点疑问与思考Q1:数据从哪里来? Q2:原始数据就够了吗?需不需要清洗?如何清洗? Q3:有哪些字段?如何建模? Q4:做哪些维度的分析? Q5:如何做可视化分析? 这么一分析,就知道:数据是大前提,没有了数据的基础,清洗、建模、可视化分析都是“空中楼阁”。 如果从一个小项目的角度出发,我的初步构想数据流图如下: 其中:
3、影评数据获取可行性分析如前所述,数据分析的前提是:先拿到数据。 可供采集选型:mao眼、豆ban等。由于豆ban评论字段较少,可供分析的维度自然少一些,所以选择mao眼影评数据。 站在 N 多前辈mao眼影评采集 + 分析的基础上,猫眼有 API 能拿到全量的 json 形式的评论数据,基本确立了可行性。 确立可行性之后,要看能拿到哪些字段,以便后续建模和可视化分析。 初步公开可获取的可用字段如下:
cai 集过程非本文重点,所以略过。 初始 CSV 数据如下图所示: 4、可分析数据字段及预期可视化内容4.1 评论时间走势图
4.2 性别比例饼图
4.3 城市分布Top图
4.4 用户等级饼图
4.5城市地理位置坐标图城市分布图
4.6 评分饼图
4.7 评论内容词云
4.8 评论点赞+再评论混合排行榜
4.9 情感分析
5、数据清洗5.1 采集环节清洗比如:数据要基于键值评论 id 去重,以确保避免数据重复。
比如:去掉 message 字段,避免 ES 端重复存储。 比如:csv 中特定的引号等特殊字符要处理掉。 比如:csv 格式要逐行规范,避免同步大量报错。 5.2 数据预处理清洗6、数据建模6.1 数据建模的重要性数据建模非常重要,建模起到了承上启下的衔接作用。
字段类型设置要保证全局可用、支持未来可扩展。 重复建模需要 reindex 操作,数据量越大,时间成本越高。
ES 字段设置的不规范,会导致后面数据没法进行可视化或者效果不好。 6.2 遇到问题及解决方案
PUT changjinhu_movie_index 7、数据预处理基础清洗有了,建模有了,重头戏就放在数据预处理上了。 刚才也提及:我们不止是基于 csv 已有的字段做分析,而是会扩展了很多字段。 那么面临问题是:新扩展字段的数据怎么来?
最后的呈现不能全局搜索明星和导演形成词云,效率太低。 解决方案:借助 ingest 管道预处理,提前给满足给定条件的数据打上明星和导演的标记。 举例如下,借助 painless 脚本实现。 if(ctx.content.contains('易烊千玺') | ctx.content.contains('易烊') | ctx.content.contains('千玺')){
需要借助城市名称到城市经纬度坐标的映射关系,添加坐标字段。 这里当然可以在 csv 层面通过遍历添加或者在 ES 端通过 update_by_query 添加。 最后,我选择在 ingest 预处理环节添加,办法相对笨一些,但是效果不错,达到预期。 代码有几百行,篇幅原因,此处省略。 至此,我们就扫清了一切数据层面的障碍,接下来就是同步导入数据、数据分析&数据可视化了。 同步中规中矩,借助:logstash_input_csv 实现。
columns => ["comment_id","approve","reply","comment_time","sureViewed","nickName","gender","cityName","userLevel","user_id","score","content"]
logstash 同步环节截图: 8、Kibana 可视化分析8.1 基于城市名称经纬度坐标的可视化红球越大,代表观影人数阅读。 由多到少依次为:北京、深圳+广州、成都+重庆、上海等。 和下面的基于城市名称的统计结果一致。 8.2 总数据量统计图8.3 评论时间走势图8.4 主演词云和评论次数统计图8.5 导演词云8.6 评分统计8.7 用户等级统计8.8 最多点赞和最多评论叠加用户信息图8.9 总评论词云9、小结从构思到实现前后断断续续2个周的时间,中间清洗、预处理花费时间比较多。 类似影评分析国内基本用 python 结合 echarts 居多,而强大的 ELK 基本都能覆盖到,本文做了初步验证。 大家有好的想法也欢迎留言交流。 最后,我想以《谁是最可爱的人》中的一段话结束本篇文章,算作是对先辈们的缅怀,正如《长津湖》宣传海报所说:“如今繁华盛世、如您所愿”。
推荐更短时间更快习得更多干货! 已带领70位球友通过 Elastic 官方认证! 中国仅通过百余人 ![]() |
|