大數據

會唱歌的程序員為何如此受歡迎?

廣告
廣告

 作者 朱小五

愛奇藝的獨家綜藝《樂隊的夏天》總決賽終于落下了帷幕,雖然決賽過程有些“曲折”,但是我最喜歡的刺猬樂隊,仍然憑借自己的硬實力,最終排在第二名!

值得一提的是,這只樂隊的吉他手兼主唱也是一位程序員。

刺猬樂隊其實成立10多年了,很有實力。

但是在老牌樂隊云集的這次比賽中,第一次31進16時僅僅排在第12名,那么他又是如何逆風翻盤的?

讓我來復盤一下。

獲取數據

獲取愛奇藝視頻《樂隊的夏天》各期節目的下面的評論。

F12,Network查看異步請求XHR,找到評論接口。

不要以為這里結束了,我們來看一下Request URL

https://sns-comment.iqiyi.com/v3/comment/get_comments.action?
content_id=2537368600&types=time&last_id=213811925021
&business_type=17&agent_type=119&agent_version=9.9.0&authcookie=

經過測試,大部分參數都是不變的,只有“content_id”和“last_id”,content_id對于每一期節目是固定的,我們可以自己手動獲分析獲得。那么last_id是怎么來的?

給大家放一下連續幾頁的 last_id 看一下吧。

213811925021

213372828221

212600215021

211973666621

它們之間并沒有什么累加的規律。

放棄的同學可以直接翻到上一張圖,標黃的部分“213811925021”,正是我們看到的第一個 last_id 參數。

也就是說每個json里的最后一個 CommentId ,作為下一個url的 last_id 使用。

那么我們需要注意的就是在解析json的過程中需要返回最后一個 CommentId 。

def get_comments(url):
    data = []
    doc = get_json(url)
    jobs=doc['data']['comments']
    for job in jobs:
        dic = {}
        global CommentId
        CommentId=jsonpath.jsonpath(job,'$..id')[0] #id
        dic['id'] = CommentId
        dic['content']=jsonpath.jsonpath(job,'$..content')[0] #評論
        add_Time=jsonpath.jsonpath(job,'$..addTime')[0]  #時間
        dic['addTime'] = stampToTime(add_Time)  #轉化時間格式
        dic['uid']=jsonpath.jsonpath(job['userInfo'],'$..uid')[0] #用戶id
        dic['uname']=jsonpath.jsonpath(job['userInfo'],'$..uname')[0] #用戶名稱
        dic['gender']=jsonpath.jsonpath(job['userInfo'],'$..gender')[0] #性別
        data.append(dic)
    return data,CommentId #獲得每個json里的最后一個CommentId 

剩下的循環爬取就好。匯總后就獲得了2.6萬條評論數據。

數據分析

一個樂隊名稱在每期評論中的提及次數,可以側面反映這只樂隊在這期節目后受到觀眾喜歡的程度。

#樂隊在評論中的提及數
a = {'痛仰':'痛仰', '新褲子':'褲子','猴子軍團':'猴子軍團','鹿先森':'鹿先森','旺福':'旺福','九連真人':'九連','盤尼西林':'盤尼西林|青霉素',
    '反光鏡':'反光鏡','click15':'click15|#15','海龜先生':'海龜先生','皇后皮箱':'皇后皮箱','面孔':'面孔','和平和浪':'和平和浪','MR.MISS':'MR.MISS|MISS',
    'VOGUE5':'VOGUE5|VOGUE','薄荷綠':'薄荷綠','熊貓眼':'熊貓眼','果味VC':'果味VC','BONGBONG':'BONGBONG','醒山':'醒山','刺猬':'刺猬','旅行團':'旅行團',
    '麋鹿王國':'麋鹿王國','宇宙人':'宇宙人','黑撒':'黑撒','南無':'南無','斯斯與帆':'斯斯與帆','葡萄不憤怒':'葡萄不憤怒','茶涼粉':'茶涼粉',
    '青年小伙子':'青年小伙子','Mr.WooHoo':'Mr.WooHoo|WooHoo',}
for key, value in a.items():
    data1[key] = data1['content'].str.contains(value)
staff_count = pd.Series({key: data1.loc[data1[key], 'content'].count() for key in a.keys()}).sort_values()
print(staff_count)

以第一期為例,結果如下。

每期節目的樂隊排名都依次降序盤點匯總一下。

結果還蠻驚訝的。

除去第二期他們沒有參加,也就是說從第三期開始,刺猬樂隊便開始展現實力,幾乎每一期都能讓觀眾如此喜歡。

數據可視化

篩選出評論中提到刺猬樂隊的評論數據。

data_ciwei=?data[data['content'].str.contains('刺猬')]

爬取得到的數據字段其實沒幾個。

簡單看一下喜歡他們的觀眾的性別分布。

from pyecharts import Pie
# 生成餅圖

gender_data = data_ciwei.groupby(['gender'])
gender_cw = gender_data['gender'].agg(['count'])
gender_cw.reset_index(inplace=True)

attr = ['女', '男', '無']
v1 = gender_cw['count']
pie = Pie("評論提及刺猬樂隊的用戶性別分布", title_pos='center', title_top=0)
pie.add("", attr, v1, radius=[40, 70], label_text_color=None, is_label_show=True, legend_orient="vertical", legend_pos="left", legend_top="%10")
pie

使用pyecharts作圖。

至于評論的長度之類的就不做分析了。

最后看一下詞云,不用jieba分詞試試。

from pyecharts import WordCloud
# 生成詞云

bj_tag = []
for st in data_ciwei.dropna(subset=['content'])['content']:
    bj_tag.extend(st.split(' '))

name, value = WordCloud.cast(Counter(bj_tag))
wordcloud = WordCloud(width=1000, height=500)
wordcloud.add("", name, value, word_size_range=[18, 250])
wordcloud

還是使用pyecharts作圖。

可以看出觀眾對于刺猬樂隊的要么是直接夸,要么是和其他強隊做對比,總體都是希望它能越來越好。

刺猬總是強調搖滾樂是屬于年輕人的,35歲之后可能就不那么搖滾了。

不過35歲之后,他們又將去向哪里呢?

也許等到中年的子健,面對著年輕的樂手們會說:

我不是針對誰,我是說在坐的各位,都沒我代碼寫的好!

文章轉載自公眾號  凹凸玩數據 

我還沒有學會寫個人說明!

滴滴大數據在汽車金融風控場景中的應用

上一篇

穩定彰顯強悍實力,商務辦公首選ThinkPad L490

下一篇

你也可能喜歡

會唱歌的程序員為何如此受歡迎?

長按儲存圖像,分享給朋友

ITPUB 每周精要將以郵件的形式發放至您的郵箱


微信掃一掃

微信掃一掃
大丰收注册
街机动物狂欢多人版 幸运票极速时时 广东麻将技巧 手机比分网球探 丫丫湖南麻将代理 总进球 网络棋牌 三张牌游戏炸金花规则 500比分网 彩票助赢在线计划 公式规律平码三中三 篮彩 北京pk10赛车计划软件 黑马全人工计划网页版 江苏11选5助手 江苏快三计划软件免费全天计划