用彈幕看一場NBA(公牛 - 老鷹)

我喜歡看NBA,幾乎不會錯過每一場騎士的比賽,老實說我是歐文的粉絲,有一天我在看比賽,突然看到騰訊NBA下面的彈幕(在比賽中和結束之後的評論區),這是聖誕大戰的時候截的圖,當然捨不得截掉小七。

看重點:下面的評論區,這個評論區基本上十幾秒會刷新一次,同時你也可以往上拉取之前的評論,於是產生了這麼個想法:我要把這些評論彈幕都抓取出來,我們可不可以通過這些彈幕去了解一場比賽?聽起來還是挺有趣的,那麼動手開始做吧。

首先,我要抓的是手機上的評論,所以用上了Fidder,抓包工具,沒用過的可以點擊這裡了解一下:Fiddler 抓包工具總結 - ﹏猴子請來的救兵 ,開始抓包之後就是這樣的。

仔細觀察就會發現,所有評論都是從這個url拉取的,url中有很明顯的comment。

http://183.232.103.198/comment/timeline?targetId=1499224113&pageflag=1&commentId=6228459552623915009&os=android&osvid=23&appvid=4.5.0&appvcode=450&network=wifi&store=96&width_=1080&height=1812&deviceId=866696028198537&guid=073E23E900E081E142ED056B56B029BE&omgid=36149a85e6dcca4cd1fa75ad94b94646edef0010211a07&omgbizid=743cbe9f962a264c52f9c50017b7be4c86070120211a07n

點擊去看一下就是評論相關的JSON了,信息主要包括:發表評論的人的ID、昵稱、頭像、性別、國家地區、發表時間、發表內容等等,對我來說比較重要的是時間和內容,每個JSON裡面大約有20-30條評論。

然後我們再多對比評論信息的url會發現targetId應該是一場比賽的id,commentId會變化,而這個數值我一開始猜想是時間戳進過了某種加密算出來的,後來我發現請求的下一個評論信息url的commentId隱藏在上一次的JSON中最後的評論中,所以思路就來了。

我拿到最新的一個commentId就可以不斷的往下走,一直到評論全部取出,代碼如下:有一點需要注意的,騰訊做了限制正常只能往前取5000條評論,數量較小我就沒有存儲資料庫。

到這裡,就差不多把所有的評論取出來了,我這次抓取的是1月21日九點鐘公牛對老鷹比賽的數據,共計七千多條評論,看過比賽的都知道公牛大敗。我忍住沒有看比賽,也沒有看比賽綜述,下面我們看看這些評論數據如何帶我們看一場比賽。

選取1月21日九點鐘公牛對老鷹比賽的原因:

  • 時間周六,不用受工作時間影響
  • 不選騎士或者勇士,因為粉絲數量大,評論帶有感情色彩太多
  • 九點鐘大部分已經醒了

好了,下面開始看比賽吧,首先是看一下球迷的統計數據。

1、先看下全球的分布,用騰訊NBA的肯定都是中國球迷吧,所以這樣的分布圖一定程度上反應的是:中國的籃球迷最喜歡去哪個國家。顏色越深,人數越多。

這樣的圖片不是很明顯,因為在中國的球迷太多,導致其他的國家數量對比不明顯,我們可以先把中國部分數據先去除掉再看,可以不看這幾個阿開頭的國家,應該是默認的國家,不然打死我也不相信有49位球迷在阿魯巴。

阿魯巴(Aruba)是一個位於加勒比海地區的島嶼

你一定以為排在第四的阿魯巴是這個:

2、看看球迷在國內的省份的分布

3、性別統計,你們自己感受以下。

正式進入比賽,按照每分鐘發表的評論總的數量做成如下圖:

抓取的評論的時間是從9:09開始,一直到下午1:25結束。同時可以看到在11:18的時候,評論數量驟然下降,猜測是此時比賽剛好結束。我們隨著這個時間軸去看評論,在看評論之前先做一些預測。

  • 圖中有兩處小高峰並且隨著時間不斷增長,第一處:9:32 ~ 9:5111:12 ~ 11:18 ,第一處9:32 ~ 9:51或許是比賽小高潮,從時間上來看應該處於第二節剛開始,有可能的情況是9:32 ~ 9:51,兩隊比賽咬的 還比較緊,打的很焦灼。
  • 第二處小高峰: 11:12 ~ 11:18,比賽接近尾聲,大家想看個結尾;另一種原因如上第一處小高峰就是比賽到最後仍然有懸念,而中間從9:51 ~ 11:12是比分差距較大,所以大部分人都走了,而最後時刻突然發現比賽又有了懸念。

以上是我的猜想,那麼我們是否能通過評論來驗證呢?進入下一步。

用jieba分詞並且使用以下演算法求出各個時間段的所有的關鍵詞。

我們按照時間段來看的話:在9:32有關於評論區中大部分沒有在討論比賽,關鍵詞求拉出現了上千次,這個用過騰訊NBA的球迷都知道,因為騰訊設了會員,只有會員才能看比賽,會員可以建立包廂拉不是會員的人一起免費看比賽。

但是比較奇怪的是:這場比賽是免費的場次,所以不是會員特權。這可能印證了我之前的猜想:這些在各場比賽中都會出現的求拉的人可能都是機器人,於是我去把這些評論都拉取了出來想看看具體評論內容,對這些含有求拉的評論再進行關鍵詞提取。

關鍵詞為:求拉、火箭、勇士。

一場公牛-老鷹的比賽,為何都在討論求拉、火箭和勇士呢?我在當日賽程找到了答案,在1月21日當天同一時間有一場火箭-勇士的比賽:

  • 西部第一與第三的較量

  • 非免費場次、會員場次

有如此多的人到其他比賽求拉也是情有可原。

回到9:32之前的評論,還有其他幾個關鍵詞:美娜、公牛,其中美娜為本場比賽女嘉賓,而在五個關鍵詞當中只有一個關鍵詞公牛是與比賽相關的,得出的結論是:在本場比賽的前半個小時,大家幾乎很少關心的是比賽本身,有小部分是公牛球迷,還有小部分是美娜球迷。那麼在這評論數量持續增長的時間裡,到底是公牛的球迷數量的增長還是勇士火箭球迷來求拉的人數量增長呢?

為了解決這個問題,我們需要看一下隨著時間的增長兩種評論數量隨著時間的變化。藍色段面積代表的是比賽無關的評論數量,下面代表的是於比賽相關的評論數量。

看圖形可以發現,比賽無關評論數量與比賽相關數量增長几乎同步,在9:32的時候達到最高值。但是我們很明顯地發現,大約在9:22時候,評論數量相對多的情況下比賽相關評論佔有量大,而9:32雖然總體達到峰值,但是比賽無關評論數量也佔有很大比例。

那麼開始的預測模型需要修改:也就是在9:22之前比賽分差還未拉開,但是9:22(即第一節後半節)分差開始拉大。

接著看9:32~9:51評論數量達到一個高峰,比賽相關的關鍵詞為:公牛、韋德,剔除掉比賽無關關鍵詞評論,繼續作圖。

在此階段,總體評論數量較多,而與比賽無關的評論(即包含:勇士、火箭)越來越少,比例也是越來越少,更多的人開始討論公牛以及韋德。此階段說明:不關心比賽的人(勇士球迷、火箭球迷)都離開了直播間、同時更多的公牛以及韋德球迷加入了直播間。

  • 討論韋德的很多,因為個人情感很重

那麼到這裡究竟如何判斷誰領先呢?我們不得而知,從這裡我們只知道在這場比賽裡面,很多人都是公牛、韋德的球迷,大家肯定都希望公牛贏,這裡我們很難判斷大家的情感。但是另一個關鍵詞:怎麼 ,在評論中出現這麼多怎麼怎麼,表示對比賽進行的疑惑。

  • 怎麼某個球員發揮那麼差?
  • 怎麼某個球隊在落後

上面說了大家都喜歡公牛勝,通過這個怎麼關鍵詞是不是能判斷:目前公牛處於下風。這個目前無法精確判斷,我們接著往下看。

9:51~11:12這個時間段,人數在逐漸的減少,並且與比賽相關的評論越來越少。甚至討論起敬業福來了(心疼支付寶三分鐘,每次好好搞個活動都會被拉到騰訊的平台來),而於比賽相關的評論比例十分之小,到此判斷比賽沒什麼懸念了。某一方領先比分很大,比賽已花。

繼續看下一時間段,11:12 ~ 11:18,這六分鐘發生了什麼?導致評論數量猛增,因為某各球員受傷了?因為某個球隊被壓了三節多,最後突然最後有希望了?

我們看看剛剛最上面的關鍵詞:假球、翻盤、劇本

很有意思,如果這段關鍵詞聯繫起來就是:在比賽最後時刻,一個一直落後的球隊突然有希望翻盤,但是很明顯沒有翻盤成功,大家紛紛吐槽在打假球。最後的時刻出現了翻盤的希望,大家都是很熱愛這種刺激感的,所以人數增多了,那麼現在可能的情況如下:

  • 公牛全場領先,到最後差點被老鷹翻盤,大家吐槽老鷹打假球故意輸給公牛
  • 老鷹全場領先,到最後差點被公牛翻盤,大家吐槽公牛打假球故意輸給老鷹

顯然,整場比賽可以發現大部分人是公牛的球迷,如果最後公牛勝,評論區一定歡呼雀躍,而不會去討論什麼假球,結合上一處論證:公牛輸。

這是最後的流程圖,可以結合比賽看一下:看比賽_體育直播_騰訊體育

...更多文章,關註:知乎專欄-學習編程


推薦閱讀:

羅德曼為什麼會對朝鮮進行「私人訪問」?怎麼評價這次的訪問?
玫瑰的綻放與凋零,終究還是沒能對抗過命運
史蒂芬 · 庫里當年參加 NBA 選秀為什麼會落到第七順位?
雷霆隊的出路在哪?
數據怪圖:納什擋拆真高手|馬刺防守穩如狗|波波維奇愛中投

TAG:NBA | Python | NBA球员 |