2000萬條直播數據,揭秘鬥魚主播生存現狀

  • 2019 年 10 月 8 日
  • 筆記

本文轉載自凹凸玩數據 2019年7月17日遊戲直播平台鬥魚在美國納斯達克股票交易所成功上市,成為繼虎牙直播之後第二家赴美上市的中國直播平台。

7月底鬥魚因為平台主播「喬碧蘿殿下」事件再次被推上熱搜。

段子手們紛紛調侃成為主播的門檻之低:只需要變聲軟體+盜圖+超級美顏。

那麼直播行業真的如同網友們所說的這麼簡單嗎?

主播們的真實生存現狀如何?

分析一下。

獲取數據

打開鬥魚直播介面,連續點擊翻頁

Network查看非同步請求XHR,找到對應的URL

get。

成功獲取到對應的URL。

https://www.douyu.com/gapi/rkc/directory/0_0/2  

翻頁只變動末尾的最後一個數字。

採用requests+pyquery來爬取。

部分爬蟲程式碼如下。

def get_datas(url):      data = []      doc = get_json(url)      jobs=doc['data']['rl']      for job in jobs:          dic = {}          dic['user_name']=jsonpath.jsonpath(job,'$..nn')[0] #用戶名          dic['user_id']= jsonpath.jsonpath(job,'$..uid')[0] #用戶ID          dic['room_name']=jsonpath.jsonpath(job,'$..rn')[0]  #房間名          dic['room_id']=jsonpath.jsonpath(job,'$..rid')[0] #房間ID          dic['redu']=jsonpath.jsonpath(job,'$..ol')[0] #熱度          dic['c2name']=jsonpath.jsonpath(job,'$..c2name')[0] #分區          dic['time']= stampToTime(time.time())          data.append(dic)      return data  

剩下就是連續爬取,我設置的是10分鐘爬取一次。

將爬取得到的數據存入Mysql中。

#存到Mysql  from sqlalchemy import create_engine    engine = create_engine('mysql+mysqldb://root:***密碼***@localhost:3306/demo?charset=utf8mb4')  final_result.to_sql('data_douyu',con=engine, index=False, index_label=False,if_exists='append', chunksize=1000)  

連續爬取了大概七天多時間,最終得到2062萬條直播數據。

數據分析

將數據導入python。

去重,其實爬虫部分已經設置去重,這裡為了保險再來一次,不過事實證明確實沒有重複。

因為實際爬取時間是0731下午到0808上午,為了方便後文計算,這裡選取0801-0807這連續七天的直播數據。

#去重  data = data[['c2name', 'redu', 'room_id', 'room_name', 'time','user_id', 'user_name']].drop_duplicates()    #篩選時間  data = data.loc[(data['time'] <= '2019-08-07') & (data['time'] >= '2019-08-01')]

我們還需要對主播按照id分組匯總。

先利用groupby分類匯總,再計算增加新列。

data_abc['av_redu'] = data_abc['redu']/data_abc['time_num']  data_abc['hour'] = data_abc['time_num']/ 42  #每十分鐘一次,七天  data_abc.head()  

這樣我們就又構建了一組以主播為索引的數據。

也就是說這七天之內,直播過的主播共有23萬餘人,那麼下文讓我們看看他們的生存現狀吧。

數據可視化

將這23萬主播按照平均直播時長和平均直播熱度繪製一個散點圖。

import seaborn as sns  import matplotlib as mpl #配置字體  mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默認字體  mpl.rcParams['axes.unicode_minus']    plt.figure(figsize=(8,8))  plt.xticks(fontsize=12)  plt.yticks(fontsize=12)    sns.scatterplot(data_test["hour"],data_test["av_redu"],hue=data_test["c2name"])  

結果如下圖所示。

從上圖能看出,絕大部分主播都在底部,能夠成為大主播的寥寥無幾,且熱度較高的主播集中於上述的幾個熱門分區,其他分區主播發展普遍一般。

由於有20多萬的主播集中在下方,很難看出他們平均直播時長的分布。

另一方面,主播分化程度較為嚴重,為了更直觀的展現趨勢,我們以1萬平均熱度為分界,分析不同規模的主播每天平均直播時長。

#頭部主播  plt.figure(figsize=(10,6))  plt.xticks(fontsize=13)  plt.yticks(fontsize=13)  sns.distplot(data_abc.loc[(data_abc['av_redu'] > 10000)]["hour"],kde=True,rug=False,color='y')  plt.show()

圖中可以發現較大的主播每天直播時長集中在5小時左右,這5個小時的遊戲並非我們平時玩的那麼簡單。主播直播時往往既需要全神貫注玩遊戲,又要和觀眾一起互動交流。

而較小主播直播時長則大部分在1小時左右,不能持續直播,導致觀眾少;觀看人數少,主播沒動力,久而久之,也就難以出頭,形成惡性循環。

上圖中有一些異常值,即平均每日直播時長超過20小時的直播間,這樣的直播大部分為「一起看」分區,可以24小時連續播放電影電視劇之類的影片,餘下都是遊戲或者比賽的官方頻道,用來循環播放官方影片。

那麼主播們大部分在什麼時間直播呢?

他們的觀眾也是同一時間準時觀看嗎?

從同一時間段內主播直播與觀眾觀看在線人數可以看出,有兩個時段有差異。

一個是晚上21點後至凌晨6點前,以直播為職業的主播往往已經進行了5-6小時高強度不間斷的直播,會選擇後半夜好好休息一下,而將看直播作為娛樂的觀眾則躺在床上看到上頭;

另一個時段是下午12點左右到18點,觀眾都正在上班上學,而很多全職主播中午起床吃飯後,正好下午開始了他們的直播。

2000萬條數據能分析的當然不止這些,詳情請移步。

《2000萬直播數據看20萬遊戲主播能否月入100萬>>>>》

大部分主播並非我們想像的那樣,時間自由,賺錢容易。每天在線直播的主播人數以十萬甚至百萬為單位,但真正贏得觀眾喜愛和自願刷大量禮物的事實上寥寥無幾。一時的流量換不來觀眾永遠的買賬,以噱頭博出位後如何用內容留住觀眾,是每個主播在探索的方向。

隨著行業監管的加強,直播平台逐漸褪去「泡沫」,流量紅利消失,回歸理性。「熊貓」已經遠走,行業內的競爭更加集中在剩下的頭部平台之間,這些平台也更需要探索更優質的內容和更多元的發展,絕不可寄希望於花幾千萬簽約「知名主播」或是炒作「喬碧蘿」之類的噱頭。

本文相關爬蟲程式碼,僅供學習交流:

#下載鏈接  https://t.zsxq.com/iQRjeeY