天天看點

簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語

寫在前面

最近晚上沒事經常和朋友一起開黑玩手遊吃雞,在每一盤遊戲都會發現有這樣一類“玩家”,這類“玩家”有以下特征:

  1. 突然出現在你的身邊放“冷槍”,但卻對你造成的傷害很低
  2. 走位如同無頭蒼蠅,打中他一槍就換個方向跑
  3. 裝備極好,甚至不少裝備三級套

估計大家已經猜到這些“玩家”是騰訊官方為了補充遊戲人數,和增加遊戲體驗的“機器人”,俗稱“人機”。

在我的印象中,越低的段位,人機出現的機率往往會越高,甚至在剛入坑的幾場遊戲中,除了自己以外其他玩家都是人機。事不宜遲,馬上抓取分析微信朋友圈的吃雞資料。

男人之間的對話¬_¬:

簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語

資料擷取

微信端的吃雞資料我們通過微信發現頁面的遊戲視窗可查詢,我們需要在手機用戶端與伺服器端之間截獲這些資料。這裡就需要神器“Charles”作為代理人,通過攔截用戶端的資料,再僞裝成用戶端向伺服器發送請求,進而對網絡封包截獲和分析。

使用Charles抓包

1.設定Charles:

設定代理伺服器端口:

簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語

關閉windows的代理:

簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語

在手機端的無線區域網路下設定目前連接配接網絡的手動配置服,伺服器填寫本機IP,端口填寫Charles配置的端口。

這樣就完成了基本配置,此時Charles已經可以截獲用戶端的資料了。

簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語

處理https資料

微信請求流量均采用https協定,而導緻抓取到加密的資料,是以需要在用戶端和電腦安裝Charles的證書。

簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語

之後就可以看到解密後的資料。

簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語

接口分析

這裡我們用三個資料接口:

getfeatureranklist2

  • 作用:擷取微信朋友圈好友資訊
  • 方法:get
  • 參數:

    'appid':遊戲id(固定) 'time_type':(時間類型,比如本周,本賽季等), 'rank_type':(比賽類型,比如單人,雙人等), 'method':'GET', 'abt':'26', 'pass_ticket'(每次都是固定的)

    簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語
    getjdqssybattlelist?
  • 作用:擷取某好友最近遊戲場次
  • 方法:get
  • 參數:

    'session_id':(會話id,每次登陸系統會配置設定一個session_id), 'limit':(目前頁面最大顯示場數), 'after_time':(下一頁面第一個比賽的時間戳), 'plat_id':(101單人模式 102 雙人模式 103 四人模式), 'mode_type':(1:第一人稱,2:第三人稱)

    簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語
    getjdqssybattledetail??
  • 作用:擷取某好友在某場比賽的比賽資訊
  • 方法:get
  • 參數:

    'session_id':(會話id,每次登陸系統會配置設定一個session_id), 'openid':(每一個玩家的一個唯一的id), 'team_id':(玩家所在隊伍在該場戰鬥的id), 'plat_id':(平台id,ios系統為0 Android系統為1), 'battle_id':(某一場戰鬥的id), 'mode':(101單人模式 102 雙人模式 103 四人模式), 'dt_event_time':(開始時間戳), 'type': (# default 1)

    簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語

注意:

  • session_id的擷取方法如微信開發文檔所示,我們這裡隻是簡單粗暴的從Charles抓取:
    簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語
  • 有些場次的詳細資訊因為相隔時間太久而無法抓取
    簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語
  • 這裡隻抓取正式比賽(season:1-7)的資料,而不抓取娛樂模式(season:0)的資料
  • 有的玩家有兩個賬号,即雙平台(ios & Android,比如我¬_¬),那麼就要對兩個平台的資料全部抓取
  • 在每進行一次get請求後,設定延時2s左右,否則會因請求次數過頻繁而報api請求次數已達最大值的錯誤

找到這三個關鍵的接口,我們就隻需要按照如下流程圖的思路便可以得到所需要的資料:

資料分析

雖然爬取到資料,然而如何區分人和人機呢?

通過觀察好友的open_id和擊殺人機的open_id可以看出

真人玩家的open_id格式如下:osewR0************************

人機的open_id 格式如下:osesjdksjjkd_(battle_id)_(number)

是以我們對每個玩家open_id分割後與該場次的battle_id比對,如一緻則說明該open_id為人機!

1.朋友圈玩家最高擊殺場次人機擊殺分析

朋友圈吃雞清單的好友共有27人,但其中3人最高擊殺場次因相隔時間太久而無法抓取。

這24人中,最高擊殺18人,最低也有8人,但我們看看這些資料“水分”如何呢?

  1. 我們将資料按照人機擊殺比排序,可以看出11人的人機擊殺占比為100%,也就是說,擊殺全部玩家為機器人
  2. 17位好友人機擊殺占比大于50%,22位好友人機擊殺占比大于70%
  3. 當然好友也不乏大神,最厲害的一位好友擊殺15人,人機僅占2人,是個狼滅?

是以,如果你的一個朋友告訴你,他最高擊殺數為十幾人時,你的第一反應應該是,50%的機率他殺的全部是人機,30%的機率他殺了一半人機,20%的機率你可以抱緊大腿,上分求帶了>_<

簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語

2.朋友圈各段位人機擊殺分析

這裡爬取27位好友各段位的最近擊殺場次,并按照段位從低到高的順序顯示,那麼我們看看是否段位越低,人機越多呢?

  • 因為有些場次相隔時間太久而無法爬取詳細資訊,是以隻爬取到了從青銅到王牌7個段位的資料(某個戰神段位的朋友的資料因時間久而沒有爬到,仰望大佬orz)
  • 資料基本呈正态分布,其中青銅、皇冠和超級王牌三個段位的資料較少,總共擊殺數均少于100
  • 黃金段位擊殺數最多,遠高于其他各段位,看樣子大部分朋友在黃金段位待了很長一段時間
  • 白銀段位和星鑽段位的總擊殺數相似,而人機占比也在0.4,這裡大膽猜測:段位和人機占比沒有關系!
  • 除了超級王牌段位,其他段位的人機擊殺占比大約分布在0.4~0.5

雖然資料量比較少,資料說服力不足,我隻能粗略得出這樣一個結論:在中低段位,人機占比基本在50%左右,并不會随段位升高而減少。

簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語

3.朋友圈在不同模式下各段位場次分布分析

簡單分析完人機擊殺占比,我還發現了一些可以可視化的資料,比如在不同模式下各段位場次分布

  • 單人模式下,場次主要分布低段位,白銀段位占比最高,和最高段位(無敵是多麼的寂寞)
  • 雙人模式下,場次主要分布中低段位,黃金段位占比最高
  • 四人模式下,場次覆寫所有段位,鉑金段位占比最高

是以說,想要達到高段位,叫上你的基友一起四排哇~

簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語

4.朋友圈吃雞時間分布

為了顯示更加直覺,我選擇極坐标圖繪制每天,每周的吃雞時間分布:

  • 朋友圈好友每天吃雞的時間的高峰期分别是下午4點到5點, 晚上7點到11點
  • 晚上10點到11點這兩個小時的遊戲場次,幾乎是全天其餘時間場次的總和
  • 不少好友在大半夜(1點到4點)也在吃雞,盲猜一下海外留學黨和修仙黨~
  • 朋友圈好友每周吃雞的時間的高峰期分别是星期五, 星期六
  • 周五遊戲場數最多,周三遊戲場數最少
    簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語

結語

粗略簡單地做了一個人機資料分析和可視化,當然還有更多有趣的資料等待去挖掘,如果還有一些很贊的想法歡迎留言。祝大家上分愉快,大吉大利,天天吃?!

簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語

完整代碼連結如下代碼位址