Я играю с данными StatsBomb FIFA World Cup 18 и пытаюсь выяснить центральных игроков в каждой команде.Я делаю это путем построения сети пропусков (ориентированный граф с игроком, делающим пас, и игроком, получающим пас).Затем я смотрю на различные меры центральности, чтобы измерить наиболее важных игроков (в том, что касается игры)
Существуют два основных способа представления этих данных алгоритму.Один из них состоит в том, чтобы при создании графа назначать каждое событие (проход) как отдельную строку (несколько ребер между двумя узлами), а другой - агрегировать по прохожим и получателям и придавать вес ребру в соответствии с тем, сколько раз игрок А прошел игроку Би т. д.
Если посмотреть на показатели силы, результаты будут точно такими же.Тем не менее, это само по себе неинтересно (забастовщики получают много шаров, но они больше не пропускают его вперед, так что нельзя сказать, что они находятся в гуще событий)
Более подходящим будет показатель промежуточности, вычисляющийкак часто игрок X является мостиком в шаре, идущем от A к B. (насколько я понимаю, взвешенная версия меры по принципу единства)
Однако результаты здесь сильно колеблются.Несколько проходов по одному проходу на ряд между двумя узлами дают достаточно логичные результаты (здесь, глядя на Аргентину против Хорватии и Месси, второго по важности игрока после защитника Николя Тальяфико и нападающих Агуэро, а затем Игуаина на другом конце. Если выпомните, игра была катастрофой для Аргентины: https://www.independent.co.uk/sport/football/world-cup/world-cup-2018-argentina-jorge-sampaoli-group-nigeria-lionel-messi-tactics-a8411031.html
Взвешенная версия, тем не менее, ставит на первое место саб Игуаин и хорошие результаты для Агуэро и двух других сабов Дыбала / Павона. Это не может быть правильным, но японятия не имею, почему результаты так различны. Имеет ли значение тот факт, что на индивидуальном уровне у нас есть порядок проходов?
Вот мой код R, необходимо установить StatsBombR из Github через devtools::install_github("statsbomb/StatsBombR")
library(StatsBombR)
library(dplyr)
library(igraph)
matches <- FreeMatches(43)
#download match events
match <- get.matchFree(matches[9,])
#take info about passes, remove non-pass events
passes <- select(match,player.name,pass.recipient.name,team.name)
passes <- na.omit(passes)
#teams in match
teams <- unique(passes$team.name)
#two ways of presenting data, pass-per-row or aggregated player-wise
teamPasses <- passes[passes$team.name==teams[2],1:2]
weightPasses <- teamPasses %>%
group_by(player.name, pass.recipient.name) %>%
summarise(weight=n())
#create graphs
net <- graph_from_data_frame(teamPasses, directed = TRUE)
net2 <- graph_from_data_frame(weightPasses, directed = TRUE)
E(net2)$weight <- weightPasses$weight
#scores
betweenness(net)
betweenness(net2)
strength(net, mode = "out")
strength(net2, mode = "out")