Python 分析到底是谁操纵《庆余年》上了热搜?

本文通过爬取《庆余年》电视剧的微博评论,分析了观众反响及传播特点,同时利用Python生成词云图展现不同角色的评论差异,并通过原著文本分析构建了人物关系图谱。

作者 |  A字头

责编 | 毛中政

庆余年电视剧终于在前两天上了,这两天赶紧爬取数据看一下它的表现。

庆余年

《庆余年》是作家猫腻的小说。这部从2007年就开更的作品拥有固定的书迷群体,也在文学IP价值榜上有名。

期待已久的影视版的《庆余年》终于播出了,一直很担心它会走一遍《盗墓笔记》的老路。在《庆余年》电视剧上线后,就第一时间去看了,真香。

庆余年微博传播分析

《庆余年》在微博上一直霸占热搜榜,去微博看一下大家都在讨论啥:

一条条看显然不符合数据分析师身份

于是爬取了微博超话页面,然后找到相关人员,分别去爬取相关人员的微博评论,看看大家都在讨论啥。

import argparse
parser = argparse.ArgumentParser(description="weibo comments spider")
parser.add_argument('-u', dest='username', help='weibo username', default='') #输入你的用户名
parser.add_argument('-p', dest='password', help='weibo password', default='') #输入你的微博密码
parser.add_argument('-m', dest='max_page', help='max number of comment pages to crawl(number<int> larger than 0 or all)', default=) #设定你需要爬取的评论页数
parser.add_argument('-l', dest='link', help='weibo comment link', default='') #输入你需要爬取的微博链接
parser.add_argument('-t', dest='url_type', help='weibo comment link type(pc or phone)', default='pc')
args = parser.parse_args()
wb = weibo()
username = args.username
password = args.password
try:
    max_page = int(float(args.max_page))
except:
    pass
url = args.link
url_type = args.url_type
if not username or not password or not max_page or not url or not url_type:
    raise ValueError('argument error')
wb.login(username, password)
wb.getComments(url, url_type, max_page)

如何利用Python生成词云图

爬取到微博评论后,老规矩,词云展示一下,不同主角的评论内容差别还是挺大的

张若昀:

李沁:

肖战:emmm....算了吧

从目前大家的评论来看,情绪比较正向,评价较高,相信《庆余年》会越来越火的。

这部剧在微博热度这么高,都是谁在传播呢?

于是我进一步点击用户头像获取转发用户的公开信息。

看了一下几位主演的相关微博,都是几十万的评论和转发,尤其是肖战有百万级的转发,尝试爬了一下肖战的微博,执行了6个小时的结果,大家随意感受一下执行过程:

最终还是败给了各位小飞侠,之后有结果再同步给大家。

于是我只能挑软柿子捏,换成官微的微博。

这条微博发布时间是26号,经过一段时间已经有比较好的传播,其中有几个关键节点进一步引爆话题。

经过几个关键节点后,进一步获得传播,这几个关键节点分别是:

肖战的超话:https://weibo.com/1081273845/Ii1ztr1BH

王小亚的微博:https://weibo.com/6475144268/Ii1rDEN6q

继续看一下转发该微博的用户分析:

整体看下来,庆余年官微的这条微博90%都是普通用户的转发,这部剧转发层级达到5层,传播范围广,在微博上的讨论女性居多(占比89%),大部分集中在一二线城市。

原著人物关系图谱

如果只看微博,不分析原著,那就不是一个合格的书粉。

于是我去下载了原著画一下人物关系图谱。

先给大家看一下原著的人物关系图谱:

emmm.....确实挺丑的,大家可以去Gephi上调整。

首先我需要从原著里洗出人物名,尝试用jieba分词库来清洗:

import jieba


test= 'temp.txt' #设置要分析的文本路径
text = open(test, 'r', 'utf-8')
seg_list = jieba.cut(text, cut_all=True, HMM=False)
print("Full Mode: " + "/ ".join(seg_list))  # 全模式

发现并不能很好的切分出所有人名,最简单的方法是直接准备好人物名称和他们的别名,这样就能准确定位到人物关系。

存储好人物表,以及他们对应的别名(建立成字典)

def synonymous_names(synonymous_dict_path):
    with codecs.open(synonymous_dict_path, 'r', 'utf-8') as f:
        lines = f.read().split('\n')
    for l in lines:
        synonymous_dict[l.split(' ')[0]] = l.split(' ')[1]
    return synonymous_dict

接下来直接清理文本数据:

def clean_text(text):
    new_text = []
    text_comment = []
    with open(text, encoding='gb18030') as f:
        para = f.read().split('\r\n')
        para = para[0].split('\u3000')
    for i in range(len(para)):
        if para[i] != '':
            new_text.append(para[i])
    for i in range(len(new_text)):
        new_text[i] = new_text[i].replace('\n', '')
        new_text[i] = new_text[i].replace(' ', '')
        text_comment.append(new_text[i])
    return text_comment

我们需要进一步统计人物出现次数,以及不同人物间的共现次数:

text_node = []
for name, times in person_counter.items():
    text_node.append([])
    text_node[-1].append(name)
    text_node[-1].append(name)
    text_node[-1].append(str(times))
node_data = DataFrame(text_node, columns=['Id', 'Label', 'Weight'])
node_data.to_csv('node.csv', encoding='gbk')

结果样例如下:

不愧是主角,范闲出现的次数超过了其他人物出现次数的总和,基本每个人都与主角直接或间接地产生影响。

同理可以得到不同人物的边,具体代码参考源文件。

接下来需要做的就是利用Gephi绘制人物关系图谱:

运行结果:

参考文献:Ren, Donghao, Xin Zhang, Zhenhuang Wang, Jing Li, and Xiaoru Yuan. "WeiboEvents: A Crowd Sourcing Weibo Visual Analytic System." In Pacific Visualization Symposium (PacificVis) Notes, 2014 IEEE, pp. 330-334. IEEE, 2014.

本文为作者投稿,版权归作者个人所有

基于遗传算法的微电网调度(风、光、蓄电池、微型燃气轮机)(Matlab代码实现)内容概要:本文档介绍了基于遗传算法的微电网调度模型,涵盖风能、太阳能、蓄电池和微型燃气轮机等多种能源形式,并通过Matlab代码实现系统优化调度。该模型旨在解决微电网中多能源协调运行的问题,优化能源分配,降低运行成本,提高可再生能源利用率,同时考虑系统稳定性与经济性。文中详细阐述了遗传算法在求解微电网多目标优化问题中的应用,包括编码方式、适应度函数设计、约束处理及算法流程,并提供了完整的仿真代码供复现与学习。此外,文档还列举了大量相关电力系统优化案例,如负荷预测、储能配置、潮流计算等,展示了广泛的应用背景和技术支撑。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事微电网、智能电网优化研究的工程技术人员。; 使用场景及目标:①学习遗传算法在微电网调度中的具体实现方法;②掌握多能源系统建模与优化调度的技术路线;③为科研项目、毕业设计或实际工程提供可复用的代码框架与算法参考; 阅读建议:建议结合Matlab代码逐段理解算法实现细节,重点关注目标函数构建与约束条件处理,同时可参考文档中提供的其他优化案例进行拓展学习,以提升综合应用能力。
此项目旨在实现一个简易而实用的RFID智能门禁控制系统。采用经典的51系列单片机——STC89C52作为核心控制器,集成MFRC522射频识别模块来读取RFID卡片信息。用户界面通过128x64像素的LCD显示屏展示相关信息,同时配备了键盘用于密码的输入、验证及修改。此设计结合了RFID技术的高效率识别与单片机的强大控制能力,适用于学习、教学或小型安防项目。 资源包含 源代码:完整C语言编写的源程序,涵盖了RFID识别、密码验证逻辑、显示控制以及用户交互等功能模块。 原理图:详细展示了整个系统的电路连接,包括单片机、MFRC522模块、LCD12864屏幕、按键等组件的电气连接方式,便于理解和自制。 技术特点 RFID技术应用:通过MFRC522模块实现非接触式身份认证,提升门禁安全性与便捷性。 人机交互界面:利用LCD12864显示屏直观展示状态信息,并通过物理按键进行操作,增加了系统的易用性。 密码安全机制:支持用户密码的设定和更改,增强系统安全性。 51单片机编程:适合初学者和专业人士学习51单片机应用开发,尤其是嵌入式系统与物联网领域的实践。 使用指南 环境搭建:确保你有合适的IDE(如Keil uVision)安装以编译51单片机的C代码。 原理图分析:详细阅读原理图,了解各部件间的连接,这对于正确搭建硬件平台至关重要。 编译与上传:将提供的源代码编译无误后,通过编程器或ISP接口烧录到STC89C52单片机中。 硬件组装:根据原理图搭建电路,确保所有组件正确连接。 测试与调试:完成后进行功能测试,可能需要对代码或硬件做适当调整以达到最佳工作状态。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值