Python 分析究竟是誰操縱《慶餘年》上了熱搜?

做者 |  A字頭node

責編 | 毛中政npm

慶餘年電視劇終於在前兩天上了,這兩天趕忙爬取數據看一下它的表現。app

 

慶餘年ide

 

《慶餘年》是做家貓膩的小說。這部從2007年就開更的做品擁有固定的書迷羣體,也在文學IP價值榜上有名。url

spa

期待已久的影視版的《慶餘年》終於播出了,一直很擔憂它會走一遍《盜墓筆記》的老路。在《慶餘年》電視劇上線後,就第一時間去看了,真香。3d

 

慶餘年微博傳播分析code

 

《慶餘年》在微博上一直霸佔熱搜榜,去微博看一下你們都在討論啥:orm

一條條看顯然不符合數據分析師身份blog

因而爬取了微博超話頁面,而後找到相關人員,分別去爬取相關人員的微博評論,看看你們都在討論啥。

 

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.

相關文章
相關標籤/搜索