Upload
dinhtu
View
217
Download
0
Embed Size (px)
Citation preview
TUGAS BESAR
PENGANTAR BIG DATA
Dosen Pengampu :
Drs. Danardono, M.P.H, P.hD.
Vemmie Nastiti Lestari, M.Sc.
Disusun Oleh:
Eugenia Sekar R 14/366184/PA/16224
Imron Amirulloh 13/346930/PA/15154
Muhammad Suryo S 14/368723/PA/16308
Zaky Nur K 14/364248/PA/15966
PROGRAM STUDI STATISTIKA
DEPARTEMEN MATEMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS GADJAH MADA
YOGYAKARTA
2017
BAB I
PENDAHULUAN
1.1. Latar Belakang
Pada era ini, big data atau data science bukan merupakan istilah yang asing bagi
banyak orang. Berbagai analisis sudah menggunakan analisis big data, karena cepatnya
terhimpun data-data dari berbagai aspek. Sudah banyak bidang kehidupan menggunakan
analisis big data untuk menghasilkan kesimpulan atau pengambilan keputusan yang lebih
akurat. Salah satunya dalam bidang sepakbola.
Bidang sepakbola juga merupakan salah satu sumber big data karena era sekarang
pengambilan data dalam bidang sepakbola sudah menjadi hal yang wajar. Banyak sekali data
yang dapat diperoleh dari sepakbola, contohnya data statistik dari suatu pertandingan
sepakbola. Jumlah pertandingan dalam satu musim untuk satu liga saja sudah banyak, apalagi
jika dikumpulkan untuk beberapa liga dan dalam beberapa musim, itu sudah bisa
menghasilkan big data. Contoh lain selain data pertandingan yaitu data statistik pemain, data
statistik secara tim/klub, dan lain-lain.
Zaman ini, ilmu statistika juga dapat digunakan dalam bidang persepekbolaan.
Misalkan seorang talent scout ketika ingin merekomendasikan seorang pemain kepada
pelatih, dia bisa menggunakan data performa dari pemain yang ingin direkomendasikan. Dia
bisa menjelaskan kepada klub bola tersebut mengapa klub bola itu layak mengeluarkan jutaan
euro untuk pemain tersebut. Atau misalnya seorang pelatih ingin menyusun starting line-up
untuk sebuah laga. Pelatih klub tersebut bisa melihat data dari tim lawan. Dia bisa mengambil
keputusan siapa saja yang dapat menjadi pemain starting line-up, yang mungkin bisa
mengeksploitasi kelemahan tim lawan. Atau kapan saat yang tepat seorang pemain bisa
menyerang tim lawan.
Analisis big data juga bisa dilakukan untuk membantu memutuskan kapan klub
tersebut menjual seorang pemain. Apakah klub tersebut masih bisa mempertahankan pemain
tersebut, atau lebih baik menjual pada musim transfer terdekat untuk mendapat nilai jual yang
tinggi. Selain untuk membuat keputusan penting dalam klub tersebut, analisis big data juga
bisa dilakukan untuk media olahraga untuk memprediksikan performa sebuah tim. Atau
perusahaan judi bola untuk mengetahui siapa yang akan memenangkan sebuah laga dengan
memperhatikan statistika pertandingan.
Pada laporan ini akan dilakukan pengolahan big data untuk data sepakbola liga Eropa.
Fokus tema dalam analisis ini yaitu tentang transfer pemain sepakbola. Analisis akan
dilakukan menggunakan visualisasi beserta dengan interpretasinya.
1.2. Tujuan
Tujuan dalam pengambilan topik ini antara lain:
Mengolah data sepakbola menjadi informasi yang berguna untuk pengambilan
sebuah keputusan
Membuat visualisasi informasi
1.3. Manfaat
Mengetahui transfer yang terjadi dalam sepakbola Liga Eropa
Mengetahui banyaknya transfer suatu klub sepak bola dalam visual yang lebih
mudah dipahami
BAB II
PEMBAHASAN
2.1. Deskripsi Data
Data yang dipakai dalam analisis ini merupakan data sepak bola dari 11 liga utama di
Eropa yang dikumpulkan dari tahun 2008 sampai tahun 2016. Lebih dari 25000 pertandingan
diambil datanya, dan juga lebih dari 10000 pemain sepak bola dengan data statistiknya.
Sumber asli data ini dikumpulkan dari beberapa sumber, yaitu :
http://football-data.mx-api.enetscores.com/
http://www.football-data.co.uk/
http://sofifa.com/.
Basis data ini terdiri dari 8 tabel, yaitu :
sqlite_sequence : tabel yang berisi nama dan id dari tabel utama
Player_Attributes : tabel statistik kemampuan dari pemain bola
Player : tabel nama pemain bola dan biodatanya
Match : tabel data statistik dari hasil suatu pertandingan
League : tabel nama liga dan beserta id
Country : tabel nama negara dari liga yang ada dalam database ini
Team : tabel nama tim atau klub sepakbola yang ada dalam database
Team_Attributes : tabel statistik kemampuan secara tim atau klub sepakbola
2.2. Analisis Data
Analisis data dari data sepakbola ini akan ditampilkan dalam visualisasi diagram dan
tabel beserta interpretasinya. Visualisasi yang akan dilakukan ada tiga macam, yaitu :
Diagram chord transfer pemain
Tabel jumah tranfer pemain
Diagram tentang perpindahan pemain dari suatu klub atau tim.
2.2.1. Diagram chord transfer pemain
Chord diagram merupakan diagram yang dapat digunakan untuk visualisasi tentang
data yang berhubungan dengan perpindahan, dan akan digunakan untuk visualisasi jumlah
transfer pemain sepakbola per liga. Berikut visualisasi dari chord diagram yang didapat :
Interpretasi :
Diagram di atas merupakan diagram chord dari jumlah transfer pemain per liga dari
tahun 2008 sampai 2016. Diagram tersebut menampilkan jumlah transfer dari 11 liga di
benua Eropa, dan juga menampilkan jumlah transfer antar liga yang berbeda. Misalnya kita
lihat di diagram untuk Spain LIGA BBVA ke Portugal Liga ZON Sagres. Kita cari dari
tempat Spain LIGA BBVA yang berwarna hijau, kita cari garis hijau yang menuju ke tempat
Portugal Liga ZON Sagres yang berwarna ungu. Maka terlihat bahwa garis hijau berlabuh ke
skala pengukuran di tempat Portugal Liga ZON Sagres dengan dua titik. Selisih nilai diantara
dua titik tersebut merupakan jumlah transfer yang terjadi dari Spain LIGA BBVA ke Portugal
Liga ZON Sagres. Begitu juga dengan transfer liga yang lain, sehingga dihasilkan diagram
chord seperti di atas.
2.2.2. Banyak transfer dalam liga dan antar liga
Bertujuan untuk mengetahui banyaknya transaksi pembelian maupun penjualan
pemain antar klub sesama anggota liga atau antara liga yang berbeda sejak tahun 2008.
Definisi pembelian, penjualan, atau peminjaman disini adalah menandakan bahwa pemain
tersebut sudah tidak lagi bermain untuk klub yang dibela sebelumnya.
Disini akan dibahas untuk dua kondisi yang berbeda, pertama yaitu banyaknya
aktivitas transfer pemain antar klub pada sesama liga maupun liga yang berbeda.
1. Banyak Transfer Pemain Sejak Tahun 2008 - 2016 (Anggota Klub Sesama Liga atau
Liga yang Berbeda)
Dari gambar diatas dapat diketahui bahwa total kegiatan transfer pemain (masuk dan
keluar) dari satu klub ke klub lain dalam liga yang sama maupun liga yang berbeda pada
Serie A Italia musim 2008 hingga 2016 adalah sebesar 1155 transfer pemain, begitu juga
untuk lainnya. Total kegiatan transfer antar klub sesama anggota liga atau antara liga yang
berbeda sejak tahun 2008 - 2016 tertinggi adalah Serie A Italia sebesar 1155, sedangkan
terendah adalah liga Scotland Premier League sebesar 378.
2. Banyak Transfer Pemain Sejak Tahun 2008 – 2016 untuk Anggota Klub Sesama Liga
Dari gambar diatas dapat diketahui bahwa total kegiatan transfer pemain (masuk dan
keluar) pada liga yang sama pada Serie A Italia musim 2008 – 2016 adalah sebesar 856
transfer pemain, begitu juga untuk lainnya. Total kegiatan transfer antar klub sesama anggota
liga sejak musim 2008 hingga 2016 tertinggi adalah Serie A Italia sebesar 856 transfer,
sedangkan terendah adalah liga Scotland Premier League sebesar 277 transfer.
Perbedaan dari kedua tabel diatas terlihat bahwa Liga ZON Sagres Portugal lebih
banyak melakukan transfer pemain pada klub yang masih satu liga sebesar 570 transfer dari
total transfer 836, dibandingkan dengan Liga BBVA Spanyol sebesar 534 transfer dari total
transfer 923 dan Ligue 1 Perancis sebesar 495 transfer dari total transfer 836.
2.2.3. Diagram perpindahan pemain suatu klub
Pada diagram ini akan divisualisasi perpindahan pemain dari suatu klub. Dari diagram
ini dapat kita lihat pemain mana yang sudah berpindah dari klub tersebut dan berpindah
kemana saja, dan juga bisa melihat pemain mana yang masih bertahan. Output dari diagram
perpindahan pemian yang didapat sebagai berikut :
Interpretasi :
Dari grafik di atas kita mengambil contoh untuk klub Manchester United dari tahun
2012 sampai 2016. Untuk gambar orang menunjukan pemain, nama di dekat gambar orang
tersebut menunjukan nama pemain tersebut dan gambar bola menunjukan klub, nama di
dekat gambar bola adalah nama klub. Gambar bola yang ada di tengah adalah gambar bola
yang merepresentasikan klub Manchester United, apabila ada pemain yang memiliki anak
panah selain ke arah gambar bola Manchester United maka pemain tersebut dikatakan
melakukan transfer pemain dari klub Manchester United setelah tahun 2012.
Kemudian penjelasanya seperti yang sudah dijelaskan sebelumnya gambar pemain
ada yang mengarah ke arah gambar bola dengan nama selain Manchester United maka
pemain tersebut pindah ke klub tersebut. Misal untuk pemain bernama Patricia Evra,
memiliki tanda anak panah ke arah gambar bola dengan nama klub Juventus maka Patricia
Evra bermain di Juventus setelah dari klub Manchester United pada tahun setelah tahun 2012.
Hal ini bisa dipastikan dari berita bahwa tepatnya dia berpindah bermain di Juventus pada
tahun 2014. Kemudian untuk pemain yang memiliki tanda anak panah ke arah bola lebih dari
1, maka pemain tersebut bermain di lebih dari 1 club lain setelah tranfer dari klub Manchester
United pada tahun setelah tahun 2012. Misal untuk pemain bernama Anderson, dia memiliki
tanda anak panah ke arah gambar bola bernama Fiorentina dan Eintracht Frankfurt. Maka
Anderson bermain di klub Fiorentina dan Eintracht Frankfurt setelah transfer dari Manchester
United pada tahun setelah tahun 2017. Kemudian untuk nama pemain yang tidak memiliki
tanda anak panah ke arah gambar bola selain gambar bola Manchester United maka bisa
dikatakan bahwa pemain tersebut tidak berpindah dari club MU setelah tahun 2012 sampai
sekarang.
BAB III
KESIMPULAN
Kesimpulan yang didapat dari analisis yang sudah dilakukan adalah :
1. Bidang sepakbola sudah menjadi sumber big data pada era ini, pengolahan big
data dengan metode statitika sudah sangat dibutuhkan dalam era ini.
2. Analisis big data untuk data sepakbola Eropa dalam laporan ini fokus pada tema
tentang transfer pemain.
3. Analisis dilakukan dengan visualisasi, yaitu dengan diagram chord, tabel dan
diagram perpindahan pemain suatu klub.
4. Diagram chord dapat digunakan untuk memvisualisasi jumlah perpindahan
pemain dari 11 liga Eropa sekaligus.
5. Diagram perpindahan pemain suatu klub dapat memvisualisasikan sudah bermain
dimana saja pemain suatu klub sepakbola dalam rentang yang diinginkan. Kita
dapat melihat pemain mana yang masih bertahan dan juga pemain mana yang
sudah berpindah.
6. Hasil analisis didapatkan liga dengan transfer terbanyak dari tahun 2008 sampai
2016 yaitu Italy Serie A, baik transfer lokal maupun transfer keluar antar liga yang
lain.
DAFTAR PUSTAKA
• https://www.kaggle.com/hugomathien/soccer
• https://www.kaggle.com/nappon/the-fans-stay-loyal-the-players-move-on
• https://www.visualcinnamon.com/2014/12/using-data-storytelling-with-chord.html
LAMPIRAN
Penampakan data sepakbola 11 liga Eropa tahun 2008-2016
Tabel sqlite_sequence
Tabel country
Tabel league
Tabel team
Tabel team_attributes
Tabel player
Tabel player_attributes
Tabel match
Syntax program analisis data sepakbola liga Eropa
#transfer
library(dplyr)
library(purrr)
library(tidyr)
library(ggplot2)
library(broom)
library(magrittr)
library(plotly)
library(RSQLite)
library(reshape2)
library(visNetwork)
library(networkD3)
library(jsonlite)
library(RColorBrewer)
library(gplots)
library(knitr)
library(DT)
library(data.table)
library(d3heatmap)
library(viridis)
library(maps)
library(ggmap)
library(circlize)
rm(list = ls())
rsplit <- function(x) {
x <- x[!is.na(x[,1]),,drop=FALSE]
if(nrow(x)==0) return(NULL)
if(ncol(x)==1) return(lapply(x[,1], function(v) list(name=v)))
s <- split(x[,-1, drop=FALSE], x[,1])
unname(mapply(function(v,n) {if(!is.null(v)) list(name=n, children=v) else
list(name=n)}, lapply(s, rsplit), names(s), SIMPLIFY=FALSE))
}
# Connect to data base ----------------------------------------------------
con <- dbConnect(SQLite(), dbname="database.sqlite")
player <- tbl_df(dbGetQuery(con,"SELECT * FROM player"))
# player_stats <- tbl_df(dbGetQuery(con,"SELECT * FROM player_stats"))
Match <- tbl_df(dbGetQuery(con,"SELECT * FROM Match"))
Team <- tbl_df(dbGetQuery(con,"SELECT * FROM Team"))
Country <- tbl_df(dbGetQuery(con,"SELECT * FROM Country"))
League <- tbl_df(dbGetQuery(con,"SELECT * FROM League"))
# select columns
player <- select(player,player_api_id, player_name) # use player_api_id as key
for join
Team <- select(Team, team_api_id, team_long_name, team_short_name) # use
team_api_id as key for join
Country <-select(Country, id, name) %>% rename(country_id = id) %>%
rename(country_name = name) # use country_id as key for join
League <- select(League, country_id, name) %>% rename(league_name = name)
# use country_id as key for join
Match <-select(Match, id, country_id, league_id, season, stage, date,
match_api_id, home_team_api_id, away_team_api_id, home_team_goal,
away_team_goal, home_player_1, home_player_2, home_player_3,
home_player_4, home_player_5, home_player_6, home_player_7,
home_player_8, home_player_9, home_player_10, home_player_11,
away_player_1, away_player_2, away_player_3, away_player_4, away_player_5,
away_player_6, away_player_7, away_player_8, away_player_9,
away_player_10, away_player_11, goal, shoton, shotoff, foulcommit, card, cross,
corner, possession)
### Data structure
# names(player)
# names(Team)
# names(Country)
# names(League)
# names(Match)
# built league table in format data.table because the composite key was easier to
create with data.table keycols = c("season", "league_id", "home_team_api_id" )
PointsDf <-Match %>%
select(1:11) %>%
mutate(homePoint = if_else((home_team_goal >
away_team_goal),3,if_else((home_team_goal == away_team_goal),1,0))) %>%
mutate(awayPoint = if_else((home_team_goal >
away_team_goal),0,if_else((home_team_goal == away_team_goal),1,3)))
tableHomeDt <- PointsDf %>%
group_by(season, league_id, home_team_api_id) %>%
summarise(pointsHome = sum(homePoint)) %>%
ungroup() %>% data.table
keycols = c("season", "league_id", "home_team_api_id" )
setkeyv(tableHomeDt,keycols)
tableAwayDt <- PointsDf %>%
group_by(season, league_id, away_team_api_id) %>%
summarise(pointsAway = sum(awayPoint)) %>%
ungroup() %>% data.table
keycols = c("season", "league_id", "away_team_api_id" )
setkeyv(tableAwayDt,keycols)
tableHomeAwayDt <- tableHomeDt[tableAwayDt, nomatch=0] %>%
mutate(points = pointsHome + pointsAway) %>%
group_by(season, league_id) %>%
mutate(rank = min_rank(desc(points)))
tableLong <- tableHomeAwayDt %>%
left_join(League, by = c("league_id" = "country_id")) %>%
left_join(Team, by = c("home_team_api_id" = "team_api_id")) %>%
ungroup() %>%
select(season, league_name, rank, team_long_name, points)
# melt match data to generate df with player names in one column ----------
matchMelt <-melt(Match,id = c(1:11), measure=c(12:33),na.rm = TRUE,
value.name = "player_api_id") %>%
mutate(team_api_id=ifelse(grepl("home",variable),home_team_api_id,
ifelse(grepl("away",variable),away_team_api_id,NA))) %>% #
create team_api_id column based on variable info
left_join(Team, by = "team_api_id") %>%
left_join(player, by = "player_api_id") %>% # add club to each player
left_join(Country, by = "country_id") %>% # add club to each player
left_join(League, by = "country_id") %>% # add club to each player
separate(season, into=c("saisonStart","saisonEnd"),sep = "/", convert = TRUE)
# split saison so it integer
TransferDf <-matchMelt %>%
select(player_name, team_long_name, team_short_name, saisonStart, saisonEnd,
country_name, league_name) %>%
group_by(player_name,team_long_name) %>%
arrange(saisonStart) %>%
summarise(Player = first(player_name), ClubFirst = min(saisonStart),ClubLast =
max(saisonEnd), Country = first(country_name), League = first(league_name))
%>%
arrange(ClubFirst) %>%
mutate(FormerClub = lag(team_long_name)) %>%
mutate(CurrentClub = team_long_name) %>%
mutate(FormerLeague = lag(League)) %>%
mutate(CurrentLeague = League) %>%
mutate(FormerCountry = lag(Country)) %>%
mutate(CurrentCountry = Country) %>%
select(Player, CurrentClub, FormerClub, ClubFirst, ClubLast, CurrentLeague,
FormerLeague, CurrentCountry, FormerCountry)
# Visnetwork function ----------------------------------------------
visNetworkCLubPlayerCountry <- function(TransferDf, Country, transfereSince)
{
edges <- TransferDf %>%
filter(CurrentCountry == Country) %>%
filter(ClubFirst >= transfereSince) %>%
select(c(CurrentClub,Player)) %>%
rename(from = CurrentClub) %>%
rename(to = Player) %>%
sample_frac(0.5, replace = FALSE) %>%
ungroup() %>%
mutate(arrows = c("from"))
edgesMelt <- edges %>%
mutate(shape = "") %>%
melt(id = "shape", measure = c("to", "from"), value.name = "id")
nodesClub <- edgesMelt %>%
filter(variable == "from") %>%
mutate(group = c("Club"))
nodesPlayer <- edgesMelt %>%
filter(variable == "to") %>%
mutate(group = Player)
nodes <- rbind(nodesClub,nodesPlayer) %>% select(c(variable,id, group)) %>%
unique()
visNetwork(nodes, edges) %>%
visOptions(highlightNearest = list(enabled = TRUE, degree =2),
nodesIdSelection = TRUE) %>%
visEdges(arrows = "from") %>%
visInteraction(dragNodes = FALSE, dragView = FALSE, zoomView = FALSE)
%>%
visInteraction(navigationButtons = TRUE)
}
# VisNetwork per player -------------------------
visNetworkPerClub <- function(matchMelt, Club, Saison)
{
PlayerSelected <- matchMelt %>%
filter(saisonStart == Saison) %>%
filter(team_long_name == Club) %>%
select(player_name) %>%
unique()
edges <- matchMelt %>%
filter(saisonStart>= Saison) %>%
filter(player_name %in% PlayerSelected$player_name) %>%
select(c(team_long_name,player_name)) %>%
rename(from = team_long_name) %>%
rename(to = player_name) %>%
unique() %>%
mutate(arrows = c("from"))
edgesMelt <- edges %>%
mutate(shape = "") %>%
melt(id = "shape", measure = c("to", "from"), value.name = "id")
nodesClub <- edgesMelt %>%
filter(variable == "from") %>%
mutate(group = c("Club"))
nodesPlayer <- edgesMelt %>%
filter(variable == "to") %>%
mutate(group = c("Player"))
nodes <- rbind(nodesClub,nodesPlayer) %>% select(c(variable,id, group)) %>%
unique()
visNetwork(nodes, edges, main = list(text = paste0("Where did the player of ",
Club, " play after 2012" ),
style = "font-family:Comic Sans MS;color:#ff0000;font-size:15px;text-
align:center;")) %>%
visGroups( groupname = "Player", color = "lightgreen") %>%
visGroups( groupname = "Club", color = "lightblue") %>%
visOptions(highlightNearest = list(enabled = TRUE, degree =1),
nodesIdSelection = FALSE) %>%
visInteraction(dragNodes = FALSE, dragView = FALSE, zoomView = FALSE)
%>%
visGroups(groupname = "Club", shape = "icon", icon = list(code = "f1e3", size =
75)) %>%
visGroups(groupname = "Player", shape = "icon", icon = list(code = "f183",
color = "green")) %>%
addFontAwesome() %>%
visInteraction(navigationButtons = TRUE)
}
Saison <-2012
#Diagram chord 11 liga Eropa
TransferMatrix <- na.omit(TransferDf) %>% ungroup() %>%
group_by(FormerLeague, CurrentLeague) %>%
summarise(sub = n()) %>% ungroup() %>% na.omit() %>%
mutate_each(funs(factor), FormerLeague:CurrentLeague) %>%
acast(FormerLeague ~ CurrentLeague, value.var = "sub")
kaggle <- 1
if (kaggle == 0) {
library(chorddiag)
chorddiag(TransferMatrix)
} else {
chordDiagram(TransferMatrix)
circos.clear()
}
#Tabel jumlah transfer 11 liga Eropa
na.omit(TransferDf) %>% ungroup() %>% group_by(FormerLeague) %>%
summarise(NumberOfTransfers = n()) %>% arrange(desc(NumberOfTransfers))
%>% data.table() %>% datatable( rownames = FALSE, colnames =c("League",
"Number of transfers since 2008") ,options = list(dom = 't', autoWidth = TRUE,
columnDefs = list(list(width = '250px', targets = c(1)))))
na.omit(TransferDf) %>% ungroup() %>%
filter_("FormerLeague==CurrentLeague") %>% group_by(FormerLeague) %>%
summarise(NumberOfTransfers = n()) %>% arrange(desc(NumberOfTransfers))
%>% data.table() %>% datatable( rownames = FALSE, colnames =c("League",
"Number of transfers within league since 2008") ,options = list(dom = 't',
autoWidth = TRUE,
columnDefs = list(list(width = '250px', targets = c(1)))))
#Diagram perpindahan pemain suatu klub
Club <- "Manchester United"
visNetworkPerClub(matchMelt, Club, Saison)