庆余年电视剧终于在前两天上了,这两天赶紧爬取数据看一下它的表现。
![5d89860f63647c87f9704a9ff8c1134c.png](https://i-blog.csdnimg.cn/blog_migrate/b60874bcedfa1551d03ccdf4f5046a53.jpeg)
庆余年
《庆余年》是作家猫腻的小说。这部从2007年就开更的作品拥有固定的书迷群体,也在文学IP价值榜上有名。
![b8f79705a525470b8db118a03012fbdf.png](https://i-blog.csdnimg.cn/blog_migrate/698a2cf32c3b1ddbf9283564c342512a.jpeg)
期待已久的影视版的《庆余年》终于播出了,一直很担心它会走一遍《盗墓笔记》的老路。在《庆余年》电视剧上线后,就第一时间去看了,真香。私信小编01 领取电子书三百本~
![465b98933cab443e6ef8f1b18b438340.gif](https://i-blog.csdnimg.cn/blog_migrate/8b57f9553b912766cef15639f0b40e28.gif)
庆余年微博传播分析
《庆余年》在微博上一直霸占热搜榜,去微博看一下大家都在讨论啥:
![7376ab191bad3b9649ed39a9cac564d3.png](https://i-blog.csdnimg.cn/blog_migrate/fbc9f1fa314ec9f8377e3859f833e00c.jpeg)
一条条看显然不符合数据分析师身份
于是爬取了微博超话页面,然后找到相关人员,分别去爬取相关人员的微博评论,看看大家都在讨论啥。
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生成词云图
爬取到微博评论后,老规矩,词云展示一下,不同主角的评论内容差别还是挺大的
张若昀:
![4b418991cdd93615973897701a56aca3.png](https://i-blog.csdnimg.cn/blog_migrate/1443c601346be907df72df5c315a72b5.jpeg)
李沁:
![1b08bb70ca9350d25b812add0b74be01.png](https://i-blog.csdnimg.cn/blog_migrate/ed43c9c77009ad601024dffbc6ef9acf.jpeg)
肖战:emmm....算了吧
![ba507374d31567cb3096b9fd7b73726a.png](https://i-blog.csdnimg.cn/blog_migrate/ded3bd24bfd8a342026d60b5b61bfa61.jpeg)
从目前大家的评论来看,情绪比较正向,评价较高,相信《庆余年》会越来越火的。
这部剧在微博热度这么高,都是谁在传播呢?
于是我进一步点击用户头像获取转发用户的公开信息。
看了一下几位主演的相关微博,都是几十万的评论和转发,尤其是肖战有百万级的转发,尝试爬了一下肖战的微博,执行了6个小时的结果,大家随意感受一下执行过程:
最终还是败给了各位小飞侠,之后有结果再同步给大家。
![dec5c83ea1bd54a8796d91efc918df91.png](https://i-blog.csdnimg.cn/blog_migrate/f171b79e4eef1019ea81353cb1a1f87d.jpeg)
于是我只能挑软柿子捏,换成官微的微博。
![8a0dc05498b88949ca9e9a331454f93e.png](https://i-blog.csdnimg.cn/blog_migrate/fdac3c56443104b8f03b9610ae684787.jpeg)
这条微博发布时间是26号,经过一段时间已经有比较好的传播,其中有几个关键节点进一步引爆话题。
![cdde29da30754a6ae4b5b93c0b1e5fa9.png](https://i-blog.csdnimg.cn/blog_migrate/b5c445e4419b585034c2d18b9f1e236f.jpeg)
经过几个关键节点后,进一步获得传播,这几个关键节点分别是:
肖战的超话:https://weibo.com/1081273845/Ii1ztr1BH
王小亚的微博:https://weibo.com/6475144268/Ii1rDEN6q
继续看一下转发该微博的用户分析:
![ddebd6828180d4c6c6f64b9095c4215d.png](https://i-blog.csdnimg.cn/blog_migrate/f55baa7a88ab38e23fd2da97173c3bbc.jpeg)
整体看下来,庆余年官微的这条微博90%都是普通用户的转发,这部剧转发层级达到5层,传播范围广,在微博上的讨论女性居多(占比89%),大部分集中在一二线城市。原著人物关系图谱
如果只看微博,不分析原著,那就不是一个合格的书粉。
![76e40540ad10b2f3e8b8051fca4ee123.png](https://i-blog.csdnimg.cn/blog_migrate/1adf8c29efb3aa6ffd5a9ba728f868c3.jpeg)
于是我去下载了原著画一下人物关系图谱。
先给大家看一下原著的人物关系图谱:
![686ddb96790ce040731f1083239c60c8.png](https://i-blog.csdnimg.cn/blog_migrate/3e54351a9f9ed6fca0db1b8b2195a117.jpeg)
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)) # 全模式
发现并不能很好的切分出所有人名,最简单的方法是直接准备好人物名称和他们的别名,这样就能准确定位到人物关系。
![82dc431ebfbe73123f12a6c364f47f05.png](https://i-blog.csdnimg.cn/blog_migrate/d6d23ca399afdc854070483a0fde2123.jpeg)
存储好人物表,以及他们对应的别名(建立成字典)
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('rn') 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')
结果样例如下:
![e4a08ad36dde2a7167ddac044738a1c4.png](https://i-blog.csdnimg.cn/blog_migrate/0a40e4d34adee407567ceeb8764bc5a1.jpeg)
不愧是主角,范闲出现的次数超过了其他人物出现次数的总和,基本每个人都与主角直接或间接地产生影响。
![1c00d2651c3ffac72c31279c98b9b115.png](https://i-blog.csdnimg.cn/blog_migrate/d3066d1417dce4f0699aab0d67b22b09.jpeg)
同理可以得到不同人物的边,具体代码参考源文件。
接下来需要做的就是利用Gephi绘制人物关系图谱:
运行结果:
![686ddb96790ce040731f1083239c60c8.png](https://i-blog.csdnimg.cn/blog_migrate/3e54351a9f9ed6fca0db1b8b2195a117.jpeg)