作者 |A字头
责编 | 毛中政
庆余年电视剧终于在前两天上了,这两天赶紧爬取数据看一下它的表现。
庆余年
《庆余年》是作家猫腻的小说。这部从就开更的作品拥有固定的书迷群体,也在文学IP价值榜上有名。
期待已久的影视版的《庆余年》终于播出了,一直很担心它会走一遍《盗墓笔记》的老路。在《庆余年》电视剧上线后,就第一时间去看了,真香。
庆余年微博传播分析
《庆余年》在微博上一直霸占热搜榜,去微博看一下大家都在讨论啥:
一条条看显然不符合数据分析师身份
于是爬取了微博超话页面,然后找到相关人员,分别去爬取相关人员的微博评论,看看大家都在讨论啥。
importargparse parser=argparse.ArgumentParser(description="weibocommentsspider") parser.add_argument('-u',dest='username',help='weibousername',default='')#输入你的用户名 parser.add_argument('-p',dest='password',help='weibopassword',default='')#输入你的微博密码 parser.add_argument('-m',dest='max_page',help='maxnumberofcommentpagestocrawl(number<int>largerthan0orall)',default=)#设定你需要爬取的评论页数 parser.add_argument('-l',dest='link',help='weibocommentlink',default='')#输入你需要爬取的微博链接 parser.add_argument('-t',dest='url_type',help='weibocommentlinktype(pcorphone)',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 ifnotusernameornotpasswordornotmax_pageornoturlornoturl_type: raiseValueError('argumenterror') wb.login(username,password) wb.getComments(url,url_type,max_page)
如何利用Python生成词云图
爬取到微博评论后,老规矩,词云展示一下,不同主角的评论内容差别还是挺大的
张若昀:
李沁:
肖战:emmm....算了吧
从目前大家的评论来看,情绪比较正向,评价较高,相信《庆余年》会越来越火的。
这部剧在微博热度这么高,都是谁在传播呢?
于是我进一步点击用户头像获取转发用户的公开信息。
看了一下几位主演的相关微博,都是几十万的评论和转发,尤其是肖战有百万级的转发,尝试爬了一下肖战的微博,执行了6个小时的结果,大家随意感受一下执行过程:
最终还是败给了各位小飞侠,之后有结果再同步给大家。
于是我只能挑软柿子捏,换成官微的微博。
这条微博发布时间是26号,经过一段时间已经有比较好的传播,其中有几个关键节点进一步引爆话题。
经过几个关键节点后,进一步获得传播,这几个关键节点分别是:
肖战的超话:/1081273845/Ii1ztr1BH
王小亚的微博:/6475144268/Ii1rDEN6q
继续看一下转发该微博的用户分析:
整体看下来,庆余年官微的这条微博90%都是普通用户的转发,这部剧转发层级达到5层,传播范围广,在微博上的讨论女性居多(占比89%),大部分集中在一二线城市。
原著人物关系图谱
如果只看微博,不分析原著,那就不是一个合格的书粉。
于是我去下载了原著画一下人物关系图谱。
先给大家看一下原著的人物关系图谱:
emmm.....确实挺丑的,大家可以去Gephi上调整。
首先我需要从原著里洗出人物名,尝试用jieba分词库来清洗:
importjieba test='temp.txt'#设置要分析的文本路径 text=open(test,'r','utf-8') seg_list=jieba.cut(text,cut_all=True,HMM=False) print("FullMode:"+"/".join(seg_list))#全模式
发现并不能很好的切分出所有人名,最简单的方法是直接准备好人物名称和他们的别名,这样就能准确定位到人物关系。
存储好人物表,以及他们对应的别名(建立成字典)
defsynonymous_names(synonymous_dict_path): withcodecs.open(synonymous_dict_path,'r','utf-8')asf: lines=f.read().split('\n') forlinlines: synonymous_dict[l.split('')[0]]=l.split('')[1] returnsynonymous_dict
接下来直接清理文本数据:
defclean_text(text): new_text=[] text_comment=[] withopen(text,encoding='gb18030')asf: para=f.read().split('\r\n') para=para[0].split('\u3000') foriinrange(len(para)): ifpara[i]!='': new_text.append(para[i]) foriinrange(len(new_text)): new_text[i]=new_text[i].replace('\n','') new_text[i]=new_text[i].replace('','') text_comment.append(new_text[i]) returntext_comment
我们需要进一步统计人物出现次数,以及不同人物间的共现次数:
text_node=[] forname,timesinperson_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, IEEE, pp. 330-334. IEEE, .
本文为作者投稿,版权归作者个人所有