小试牛刀!如何用Python分析《庆余年》的微博传播和人物图谱?

关注+星标,每天学习Python新技能

在这里插入图片描述

庆余年微博传播分析

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

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

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



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生成词云图

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

张若昀:

李沁:

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

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

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

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

原著人物关系图谱

首先我需要从原著里洗出人物名,尝试用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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值