大家好,我是查理~
昨晚,剛剛王力宏終于回應(yīng)了。
今天干脆手把手教大家如何數(shù)據(jù)處理+可視化他的微博評(píng)論,下載完整代碼/數(shù)據(jù)見文末。
12月15日,王力宏在微博突然宣布離婚,表示“靚蕾和我的私生活很簡(jiǎn)單很單純,所以不會(huì)再回應(yīng)任何媒體”,結(jié)束了8年的婚姻。
12月17日深夜,王力宏前妻李靚蕾突然發(fā)文,表示長(zhǎng)期被王力宏及其家人羞辱和冷暴力,同時(shí)還曝出王力宏婚內(nèi)出軌、私生活混亂等不為人知的事件,使得王力宏多年來的“優(yōu)質(zhì)男星”形象岌岌可危。
文章一經(jīng)發(fā)出,引發(fā)熱議,王力宏長(zhǎng)期以來的“優(yōu)質(zhì)偶像”形象備受質(zhì)疑,不少網(wǎng)友在李靚蕾的微博下留言表示,“好難過,太失望了”“王力宏在我心中的形象坍塌了”。
今天就帶大家用數(shù)據(jù)——吃吃瓜。
我使用Python編程,爬取王力宏宣布離婚的微博下的評(píng)論。
下載的csv文件中包括用戶名、用戶id、評(píng)論創(chuàng)建時(shí)間、評(píng)論id、評(píng)論內(nèi)容等。
如上圖所示,原始數(shù)據(jù)中的內(nèi)容非?;靵y,微博評(píng)論中夾雜大量表情包、話題以及“轉(zhuǎn)發(fā)微博”等等,需要進(jìn)行數(shù)據(jù)清洗。
首先根據(jù)評(píng)論的唯一ID進(jìn)行去重
df_1 = df_1.drop_duplicates(['idstr']).iloc[:,1:]
接著,對(duì)所有的微博評(píng)論按照小時(shí)計(jì)數(shù)
df_1['created_date'] = pd.to_datetime(df_1['created_date'])df_1_date = df_1.groupby([pd.Grouper(key='created_date',freq='H')]).size().reset_index(name='count')
得到分時(shí)數(shù)據(jù)后,就可以使用Matplotlib繪制折線圖。
columns = df_date.columnsfig = plt.figure(figsize=(10, 5), dpi=100)plt.fill_between(df_date['created_date'].values, y1=df_date['count_x'].values, y2=0, label='王力宏微博新增評(píng)論數(shù)/小時(shí)', alpha=0.75, facecolor="#43a9cb", linewidth=1, edgecolor='k')plt.xlabel("Date")plt.ylabel("Value")plt.legend(loc='upper right')plt.show()fig.savefig('王力宏.png')
輸出結(jié)果如下所示

15日時(shí)剛剛發(fā)布微博,瞬間引爆評(píng)論,火速上熱搜。
16、17日便沒有什么評(píng)論了。
直到昨晚23點(diǎn),前妻李靚蕾深夜發(fā)文后,群眾們趕緊沖過來開團(tuán)。
PS:除了吃瓜群眾,速度最快的應(yīng)該是英菲尼迪。
12月16日14時(shí),豪華汽車品牌英菲尼迪才剛剛官宣王力宏成為品牌代言人。18日凌晨1點(diǎn)22分,微博名為@英菲尼迪中國 便發(fā)布聲明英菲尼迪決定即日起終止與王力宏先生的合作關(guān)系。英菲尼迪從和他簽約到解約,僅有35小時(shí)。
如果我們將王力宏和李靚蕾的微博評(píng)論數(shù)量,放在一張圖會(huì)是什么樣子呢?
正好我也爬了李靚蕾的微博評(píng)論,同樣進(jìn)行數(shù)據(jù)處理后
columns = df_date.columnsfig = plt.figure(figsize=(10, 8), dpi=100)plt.fill_between(df_date['created_date'].values, y1=df_date['count_x'].values, y2=0, label='王力宏微博新增評(píng)論數(shù)/小時(shí)', alpha=0.75, facecolor="#43a9cb", linewidth=1, edgecolor='k')plt.fill_between(df_date['created_date'].values, y1=df_date['count_y'].values, y2=0, label='李靚蕾微博新增評(píng)論數(shù)/小時(shí)', alpha=0.75, facecolor="#b7ba6b", linewidth=1, edgecolor='k')plt.xlabel("Date")plt.ylabel("Value")plt.legend(loc='upper left')plt.show()
輸出結(jié)果如下所示:

相比之下,王力宏這邊的評(píng)論就根本不是一個(gè)量級(jí),顯得是“弟中之弟”了。
吃瓜群眾原來全部涌向了李靚蕾的微博。
這次我們還是想盤點(diǎn)一下:群眾們開團(tuán)后,都發(fā)了些什么?
與之前文章傳統(tǒng)的詞云圖不一樣,我打算玩點(diǎn)新東西。在前文中制作的折線面積圖中,將不同時(shí)間段的詞云填充其中。
很多小伙伴比較好奇怎么做的,其實(shí)就是ps將前文的折線圖和生成的詞云圖層疊加。如果你要問Python能不呢做到圖層覆蓋,我的回答是可以但沒必要。
做詞云圖前,需要將所有王力宏的微博評(píng)論分成兩部分(即前妻開錘前后),注意下方代碼中以2021-12-17 23:08:00"為界。
def get_cut_words(content_series): # 讀入停用詞表 import jieba stop_words = [] with open("stop_words.txt", 'r', encoding='utf-8') as f: lines = f.readlines() for line in lines: stop_words.append(line.strip()) # 添加關(guān)鍵詞 my_words = ['分分合合', '拉黑'] for i in my_words: jieba.add_word(i) # 自定義停用詞 my_stop_words = ['快轉(zhuǎn)','轉(zhuǎn)發(fā)','微博'] stop_words.extend(my_stop_words) # 分詞 word_num = jieba.lcut(content_series.str.cat(sep='。'), cut_all=False) # 條件篩選 word_num_selected = [i for i in word_num if i not in stop_words and len(i)>=2] return word_num_selectedtext1 = get_cut_words(content_series=df_1[df_1["created_date"] < "2021-12-17 23:08:00"]['text1'])
接著準(zhǔn)備兩個(gè)蒙版(取自前面得到的折線圖)
詞云圖的代碼詳細(xì)大家都很熟悉了,這里只需注意一點(diǎn)。
background_color='white'# 改為background_color=None,mode='RGBA',
這樣就可以將詞云圖的背景色設(shè)置為透明,從而方便圖層疊加。
<figcaption style="margin: 5px 0px 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; text-align: center; color: rgb(136, 136, 136); font-size: 12px; font-family: PingFangSC-Light;">▲生成的詞云圖</figcaption>
這樣我們就可以制作如下所示的圖了??
在前妻李靚蕾曝光前,王力宏的微博評(píng)論下基本都是這樣的:“結(jié)婚是為了幸福,離婚也是”、“情人總分分合合”、“尊重二哥的選擇”。
曝光后,王力宏的微博評(píng)論下變成了這樣:“重新定義簡(jiǎn)單單純”、“渣男”、“下頭”、“私生活簡(jiǎn)單?你侮辱了簡(jiǎn)單這個(gè)詞”、“人設(shè)崩塌”。
PS:憤怒的吃瓜群眾還輸出了很多“臟話”,我在詞云圖里做了排除。
我們?cè)贀Q個(gè)方向,娛樂一下。
我決定用數(shù)據(jù)探究一下:吃瓜的猹們最愛發(fā)哪些表情呢?
我提取了10萬條評(píng)論中的emoji表情,先提取微博評(píng)論可以使用的emoji的所有名稱(此處僅展示一部分)。
emoji_list = ["[小紅花]","[微笑]","[可愛]","[太開心]","[鼓掌]","[嘻嘻]","[哈哈]","[笑cry]","[擠眼]","[饞嘴]","[黑線]","[汗]","[挖鼻]","[哼]","[怒]","[委屈]","[可憐]","[失望]","[悲傷]","[淚]","[允悲]"]
使用in判斷是否包含某個(gè)emoji
def emoji_lis(string): entities = [] for i in emoji_list: if i in string: entities.append(i) return entitiesemoji_s = []for index, row in df_1.iterrows(): text = str(row['text']) emoji_s.extend(emoji_lis(text)) c = collections.Counter(emoji_s)print(c)
即可得到各emoji出現(xiàn)的次數(shù):
同樣還是使用使用Matplotlib繪制極坐標(biāo)圖
輸出結(jié)果如下所示:
匹配采集到評(píng)論中的表情后,按照出現(xiàn)次數(shù)選取前8名,并將其制作成極坐標(biāo)圖。
發(fā)現(xiàn)前8名的表情是:悲傷、淚、允悲、微笑、doge、吐、單身狗、吃瓜。
王力宏自出道便頂著“優(yōu)質(zhì)偶像”的名頭,家境良好、才華橫溢、長(zhǎng)相端正,出道多年更是鮮有負(fù)面出現(xiàn)。如今看來,優(yōu)質(zhì)的表皮只是假面,他千挑萬選找了一個(gè)最好拿捏的妻子,卻又在她多年的忍讓中得寸進(jìn)尺,變本加厲。
如同李靚蕾長(zhǎng)文所說“如果你的演藝事業(yè)有受影響,是你自己做出的種種選擇造成的,不是我。”