欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于关联规则的足球比赛数据分析

程序员文章站 2024-03-08 19:53:04
...

1、明确分析的目的和思路

目的:目前,足球比赛作为大众娱乐项目的一种,越来越受到大家的喜爱,其中不乏一些球队死忠、球星铁粉以及“赌球狗”,而希望自己支持的球队获胜也是足球比赛中的一大关注点。针对这种情况,本文通过足球比赛中产生的数据,比如射门次数、控球率、传球成功率等,运用关联规则算法进行建模、分析,探索足球比赛的胜负与哪些关键指标的关系密切。

思路:以本赛季的中超联赛(目前进行到第18轮)为分析对象,爬取体育网站上的各场比赛数据和胜负结果,经过数据处理后,采用Apriori算法,挖掘各数据指标与比赛结果之间的关系。

2、数据收集

对tzuqiu网站(http://www.tzuqiu.cc/)上的每场中超比赛的数据进行爬取,包括:1、射门次数,2、控球率,3、传球成功率,4、过人次数,5、抢断次数,6、角球次数,7、失误次数,以及比赛结果(胜、平、负)。如图1所示:

基于关联规则的足球比赛数据分析
图1 指标爬取示意图

最终结果共288条记录(18轮*每轮8场比赛*每场2支球队),结果如图2所示:

基于关联规则的足球比赛数据分析
图2 爬取结果

3、数据处理

使用Rstudio工具进行处理。

(1)数据清洗

首先导入数据,然后处理缺失值。

考虑到含有缺失值的记录较少(只有2条,第13轮上海上港与广州恒大的比赛因为天气原因延期进行),决定把源数据中含有缺失值的记录删除。

data = read.csv(file="csl_data.csv",header = TRUE) #导入数据

head(data) #列出前6条记录

ncol(data) #列数

nrow(data) #行数

data = data[complete.cases(data),] #去除含有缺失值的记录

nrow(data) 

输出结果如图3:

基于关联规则的足球比赛数据分析
图3 数据清洗输出结果

(2)数据规约

经过处理,数据集中有10个变量、286条记录。

为了有效地进行建模分析,将其中与建模任务不相关的属性剔除。因此,选取“射门次数”、“控球率%”、“传球成功率%”、“过人次数”、“抢断次数”、“角球次数”、“失误次数”和“比赛结果”列构成的数据集,其中“比赛结果”列中,3表示胜,1表示平,0表示负。

data = data[,c(3:9,10)] #取出指标列和结果列

head(data)

输出结果如图4:

基于关联规则的足球比赛数据分析
图4 数据规约输出结果

(3)数据离散化

由于Apriori算法无法处理连续型数值变量,为了将原始数据格式转换成适合建模的格式,需要对数据进行离散化。

采用聚类算法对各个数据指标进行离散化处理,将每个属性分成五类。

type = 5 #数据离散化的分组个数

index = 8 #比赛结果列

typelabel = c("A","B","C","D","E","F","G") #离散化后的标识前缀

cols = ncol(data[,1:7]) #数据指标列的个数

rows = nrow(data[,1:7]) #数据集的行数

disdata = matrix(NA,rows,cols+1) #初始化

for (i in 1:cols){
 cl = kmeans(data[,i],type,nstart = 20)
 disdata[,i] = paste(typelabel[i],cl$cluster,sep="")
 } #建立循环,对每个数据指标列进行聚类

disdata[,cols+1] = paste("H",data[,index],sep = "") #对结果列进行离散化

disdata = data.frame(disdata) #转换为数据框格式

colnames(disdata) = c("射门次数","控球率%","传球成功率%","过人次数","抢断次数","角球次数","失误次数","比赛结果") #修改列名

head(disdata)

输出结果如图5:

基于关联规则的足球比赛数据分析
图5 数据离散化输出结果

各个属性离散化后的结果如表1所示。

表1 数据指标列离散表
标识 聚类中心 标识 聚类中心 标识 聚类中心 标识 聚类中心 标识 聚类中心 标识 聚类中心 标识 聚类中心
A1 24.7 B1 57.65 C1 66.63 D1 12.13 E1 11.48 F1 1.64 G1 19.27
A2 18.55 B2 67.14 C2 57.97 D2 8.92 E2 20.74 F2 10.16 G2 14.06
A3 6.78 B3 42.35 C3 84.38 D3 5.89 E3 29.17 F3 7.33 G3 4.81
A4 14.26 B4 50 C4 78.94 D4 17.21 E4 7.33 F4 5.43 G4 8
A5 10.43 B5 32.86 C5 73.13 D5 3.26 E5 16.14 F5 3.54 G5 10.97

4、数据建模

采用Apriori关联规则算法,挖掘数据指标与比赛结果之间的关联关系。建模的流程如图6所示。

基于关联规则的足球比赛数据分析
图6 建模流程

 

library(arules)

trans = as(disdata,"transactions") #将数据转换为transactions格式

rules = apriori(trans,parameter = list(support=0.03,confidence=0.75)) #调用Apriori算法生成关联规则rules

inspect(rules)

输出结果如图7所示

基于关联规则的足球比赛数据分析
图7 关联规则模型结果

5、结果分析

由于探究数据指标与比赛结果之间的关系,我们只关注关联规则集中的第六条和第八条规则。

(1)B4、C4、D1 => H3,支持度达到3.5%,置信度达到76.92%。

说明当控球率达到50%、传球成功率达到79%和过人次数达到12次左右时,赢得比赛的可能性为76.92%,这种情况在统计的数据中发生的可能性为3.5%。

(2)A4、C4、G4 => H0,支持度达到3.5%,置信度达到83.33%。

说明当射门次数14次左右、传球成功率79%和失误次数8次左右时,输掉比赛的可能性为83.33%,这种情况在统计的数据中发生的可能性为3.5%。

综上所述,在中超赛场上,若要赢得比赛胜利,需要保持均衡的控球率,提高传球成功率以及多尝试过人;同时为了避免输球,注意控制失误次数以及提高射门次数。