亂分析LOL數據集-->R

數據集連接:kaggle.com/chuckephron/

感謝猴子老師的講解,感謝社群的交流氛圍,每天進步一點點一起戰鬥!

受啟發的群內一位小夥伴使用同樣數據的分析鏈接:R數據分析實戰-LOL中遊戲時長對雙方陣營勝率的影響 - 知乎專欄

以下內容為參考學習探索過程,並非完全原創,歡迎各位大牛指點,萬分感謝。

本人好久沒玩LOL,如果名詞翻譯不準確或是各種奇奇怪怪的邏輯問題,歡迎指正。

數據文檔說明

數據包由諸多csv文件構成

  • banvalues.csv 禁用英雄及順序
    • MatchHistory 比賽歷史
    • TeamColor 隊伍顏色
    • ban_1~5 禁用順序1~5(3 or 5)
  • deathValues.csv 比賽英雄死亡信息
    • MatchHistory 比賽歷史
    • TeamColor 隊伍顏色
    • Time 發生時間
    • Victim 被殺選手
    • Killer 主攻
    • Assist1~4 助攻1~4
  • goldValues.csv 所有隊伍和選手每分鐘的黃金值
    • MatchHistory 比賽歷史
    • NameType 分類名稱
    • min_1~81 分鐘數
  • LeagueofLegends.csv 比賽信息
    • MatchHistory 比賽歷史
    • League 聯盟
    • Season 賽季
    • Year 年份
    • blueTeamTag 藍方隊伍
    • bResult 藍方隊伍結果
    • rResult 紅方隊伍結果
    • redTeamTag 紅方隊伍
    • gamelength 比賽長度
    • blue/red TOP/Jungle/Middle/ADC/Support 位置英雄(藍方/紅方 上單/打野/中單/ADC/輔助)
    • blue/red TOP/Jungle/Middle/ADC/Support Champ 對應位置選手
  • objValues.csv 對象耗時
    • MatchHistory 比賽歷史
    • ObjType 對象名
    • num_1~16 對應數量

故LeagueofLegends.csv包含了整體比賽信息,其他文檔為細節信息。

一些定義

Leagues and Seasons: 聯賽和季節

  • CBLOL:巴西隊比賽
  • Europe:歐洲冠軍隊伍
  • LCK:韓國首爾
  • LMS:台北
  • Mid-Season_Invitational:官方春夏季賽
  • North_America:北美隊伍
  • Season_World_Championship:年度職業聯賽世界冠軍賽
  • Season(time during the year) :國際、區域、春/夏/冬季前/季後

分析過程

# Load packagelibrary(ggplot2)library(dplyr)library(gridExtra)library(grid)library(RColorBrewer)library(stringr)# Read csvglobal <- read.csv("../data/17-04-18 LeagueOfLegends Kaggle/LeagueofLegends.csv",sep=",")

第一部分:賽事、年份和站隊的總體關係

fill_color = c("#3B9AB2", "#78B7C5", "#EBCC2A", "#E1AF00", "#F21A00","#9A8822", "#F5CDB4", "#F8AFA8")global$Year = factor(global$Year)g1 <- global %>%dplyr::group_by(League,Season,Year) %>%dplyr::summarise(number=n()) %>% ggplot(aes(x=Year,y=number,fill=League)) + geom_histogram(stat = "identity",position = "stack")+scale_fill_manual(values=fill_color)+theme(legend.position = "right")+labs(title="2014~2017 LOL 全年聯盟場次情況",x="年份",y="場次")

統計場次中:2016年場次最多,2014年只有Season_World_Championship數據

g2 <- global %>%dplyr::group_by(League) %>%dplyr::summarise(number=n()) %>%ggplot(aes(x=reorder(League,-number),y=number,fill=League))+geom_histogram(stat ="identity")+scale_fill_manual(values = fill_color)+theme(legend.position="top")+xlab("隊伍")+ylab("場次")

所有賽事中LCK場次最多,North America和Europe次之。

第二部分:每場賽事中各年份站隊的賽事量

global %>%dplyr::group_by(League,Year,Season) %>%dplyr::summarise(number=n()) %>%ggplot(aes(x=Year,y=League,size=number,color=Season))+geom_point()+facet_wrap(~Season,nrow = 3)+scale_color_manual(values = fill_color)+theme(legend.position="bottom",legend.text=element_text(size=5),legend.key.size = unit(.1,"cm"))+labs(x="年份",y="戰隊")

【Legend標籤問題】顯示效果不滿意

第三部分:平均遊戲時長

global %>%dplyr::select(League,Season,gamelength) %>%dplyr::group_by(League) %>%ggplot(aes(x=gamelength,fill=League))+geom_density()+facet_wrap(~League,ncol = 4)+theme(legend.position="top")+scale_fill_manual(values=fill_color)+labs(x="遊戲時長",y="分布")

Season_World_Championship在60~80分鐘還有明顯的突出,說明其比賽膠著性

global %>%dplyr::select(League,Year,Season,gamelength) %>%dplyr::group_by(League) %>%ggplot(aes(x=gamelength,fill=League))+geom_density(alpha=.2)+theme(legend.position="top")+labs(x="遊戲時長",y="分布")+scale_fill_manual(values=fill_color)

CBLOL的比賽,30~40分鐘完賽率低於其他賽事,而50~60分鐘完賽率高於其他賽事

global %>%dplyr::select(League,Year,Season,gamelength) %>%dplyr::group_by(League) %>%ggplot(aes(x=League,y=gamelength,fill=League))+geom_violin()+geom_boxplot(width_=.3,notch=TRUE)+theme(legend.position="top")+scale_fill_manual(values=fill_color)+labs(x="賽事",y="遊戲時間分布")

可以看出各個賽事的時長特點:比如LCK和Europe擁有最長的比賽時間,Mid-Season擁有最穩定的比賽節奏等。

第四部分:各站隊各年的勝利數據和凈勝

g1 <- global %>%dplyr::select(Year,blueTeamTag,bResult,rResult,redTeamTag)g2 <- g1g2$cwin=g2$bResult-g2$rResultg2 <- dplyr::select(g2,Year,blueTeamTag,cwin) %>%dplyr::group_by(Year,blueTeamTag) %>%dplyr::summarise(cwin=sum(cwin))names(g2) <- c("Year","Team","bluewin")g3 <- g1g3$cwin=g3$rResult-g3$bResultg3 <- dplyr::select(g3,Year,redTeamTag,cwin) %>%dplyr::group_by(Year,redTeamTag) %>%dplyr::summarise(cwin=sum(cwin))names(g3) <- c("Year","Team","redwin")g4 <- merge(g2,g3,by=c("Year","Team")) %>%ggplot(aes(x=reorder(Team,-bluewin)))+geom_histogram(stat="identity",aes(y=bluewin),fill="blue",alpha=.5)+geom_histogram(stat="identity",aes(y=redwin),fill="red",alpha=.5)+labs(title="總隊伍凈勝情況",x="隊伍",y="")g4

很容易無責任推斷,對於大部分隊伍,藍方的凈勝場次都要高於紅方(同一個隊伍抽到藍方/紅方的可能性應為50%)

g4 + facet_wrap(~Year,ncol=1)+labs(title="歷年隊伍凈勝情況")

  • 可以看出紅藍方的優勢在2015,2017年尤其突出,2016年似乎比較均衡

(未完待續,歡迎拍磚)


推薦閱讀:

數據分析師,數據挖掘師,大數據工程師,三者的工作有何區別?
做卧底,如何不動聲色的毀掉對手的產品

TAG:R | 英雄联盟LoL | 数据分析 |