Anasayfa / Genel bir bakış / FIFA 19 Dashboard Veri Görselleştirme – Bölüm 1

FIFA 19 Dashboard Veri Görselleştirme – Bölüm 1

Son dönemde yazmış olduğum ve geliştirmeye devam ettiğim FIFA 19 Dashboard çok ilgi gördü ve ilgi görmeye devam ediyor. Bu çalışmam ile alakalı geri dönüşlerde bulunan ve eleştiri belirten herkese çok teşekkür ederek başlamak istiyorum.

R programlama dilinin önemli kütüphanelerinden biri olan Shiny ile FIFA 19 verisini kullanarak bir dashboard tasarladım. Bu dashboard içerisinde temel olarak liglerin, takımların ve oyuncuların özet istatistiklerini, görselleştirmelerini ve karşılaştırmalarını görebilirsiniz. Ligler demişken de dashboard içerisinde üç adet lig bulunmaktadır bunlar; Bundesliga, La Liga ve Premier League. Ayrıca dashboard içerisindeki Scout sayfasında da oyunculara ait bilgiler bulabilirsiniz ve yapmış olduğum küçük bir oyunlaştırma ile FIFA 19 içerisinde yer alan oyuncuları kendi takımınıza transfer edebilirsiniz. Yalnız dikkatli olmakta fayda var sizlere ait 200 Milyon Euro bütçe bulunmakta. 🙂

FIFA Dash uygulamasına göz atmak istiyorsanız Kaggle linkinden ulaşabilirsiniz. Ayrıca dashboard’u beğenirseniz ve Kaggle hesabınız varsa Upvote (Beğen tuşu denilebilir) ile oy verirseniz sevinirim. 🙂

https://www.kaggle.com/ekrembayar/fifa-19-dashboard-with-r-shiny

Dashboard’un geliştirmeleri devam etmekte. Farklı monitör boyutlarında arayüzde kayma problemleri olabiliyor. Bu problem de HTML ve CSS yardımı ile çözülecektir. Arayüz düzeltmeleri ve geliştirmeleri de ayrıca devam ediyor. Muhtemelen 2020 İlkbaharı gibi dashboard son ve en iyi halini alacaktır. Dashboard gelişimini de aşağıdaki linklerden görebilirsiniz.

FIFA 19 Dashboard Versiyon 1.0.0.

FIFA 19 Dashboard Versiyon 2.0.0.

FIFA 19 Dashboard Versiyon 3.0.0.

FIFA 19 Dashboard Versiyon 4.0.0.

Veri Bilimi Okulu YouTube sayfasında da dashboard’u anlattığım videoyu da görebilirsiniz.

Bu yazıda FIFA 19 verisi ile R Shiny Dashboard içerisinde gerçekleştirdiğim veri manipülasyonlarının ve veri görselleştirmelerinin bir kısmını sizlerle paylaşıyor olacağım.

Öncelikle veri setimize kaggle linkinden ulaşabilirsiniz.

options(scipen = 999)

1. Kütüphaneler

Veri Görselleştirme ve Veri Manipülasyonları için kullanılan kütüphaneler aşağıdadır.

suppressMessages(library(tidyverse))
suppressMessages(library(magrittr))
suppressMessages(library(maps))
suppressMessages(library(plotly))
suppressMessages(library(ggrepel))
suppressMessages(library(scales))

2. Veri Seti

Yukarıda FIFA 19 veri setinin linkini paylaşmıştık. Şimdi veri setini R’a aktaralım.

fifa <- read.csv("data.csv", encoding = "UTF-8")[-1]

Veriyi yükledikten sonra verinin yapısına ve dataya göz atalım.

glimpse(fifa)

## Observations: 18,207
## Variables: 88
## $ ID                        158023, 20801, 190871, 193080, 192985...
## $ Name                      L. Messi, Cristiano Ronaldo, Neymar J...
## $ Age                       31, 33, 26, 27, 27, 27, 32, 31, 32, 2...
## $ Nationality               Argentina, Portugal, Brazil, Spain, B...
## $ Overall                   94, 94, 92, 91, 91, 91, 91, 91, 91, 9...
## $ Potential                 94, 94, 93, 93, 92, 91, 91, 91, 91, 9...
## $ Club                      FC Barcelona, Juventus, Paris Saint-G...
## $ Value                     €110.5M, €77M, €118.5M, €72M, €102M, ...
## $ Wage                      €565K, €405K, €290K, €260K, €355K, €3...
## $ Position                  RF, ST, LW, GK, RCM, LF, RCM, RS, RCB...
## $ Crossing                  84, 84, 79, 17, 93, 81, 86, 77, 66, 1...
## $ Finishing                 95, 94, 87, 13, 82, 84, 72, 93, 60, 1...
## $ HeadingAccuracy           70, 89, 62, 21, 55, 61, 55, 77, 91, 1...
## $ ShortPassing              90, 81, 84, 50, 92, 89, 93, 82, 78, 2...
## $ Volleys                   86, 87, 84, 13, 82, 80, 76, 88, 66, 1...
## $ Dribbling                 97, 88, 96, 18, 86, 95, 90, 87, 63, 1...
## $ Curve                     93, 81, 88, 21, 85, 83, 85, 86, 74, 1...
## $ FKAccuracy                94, 76, 87, 19, 83, 79, 78, 84, 72, 1...
## $ LongPassing               87, 77, 78, 51, 91, 83, 88, 64, 77, 2...
## $ BallControl               96, 94, 95, 42, 91, 94, 93, 90, 84, 1...
## $ Acceleration              91, 89, 94, 57, 78, 94, 80, 86, 76, 4...
## $ SprintSpeed               86, 91, 90, 58, 76, 88, 72, 75, 75, 6...
## $ Agility                   91, 87, 96, 60, 79, 95, 93, 82, 78, 6...
## $ Reactions                 95, 96, 94, 90, 91, 90, 90, 92, 85, 8...
## $ Balance                   95, 70, 84, 43, 77, 94, 94, 83, 66, 4...
## $ ShotPower                 85, 95, 80, 31, 91, 82, 79, 86, 79, 2...
## $ Jumping                   68, 95, 61, 67, 63, 56, 68, 69, 93, 7...
## $ Stamina                   72, 88, 81, 43, 90, 83, 89, 90, 84, 4...
## $ Strength                  59, 79, 49, 64, 75, 66, 58, 83, 83, 7...
## $ LongShots                 94, 93, 82, 12, 91, 80, 82, 85, 59, 1...
## $ Aggression                48, 63, 56, 38, 76, 54, 62, 87, 88, 3...
## $ Interceptions             22, 29, 36, 30, 61, 41, 83, 41, 90, 1...
## $ Positioning               94, 95, 89, 12, 87, 87, 79, 92, 60, 1...
## $ Vision                    94, 82, 87, 68, 94, 89, 92, 84, 63, 7...
## $ Penalties                 75, 85, 81, 40, 79, 86, 82, 85, 75, 1...
## $ Composure                 96, 95, 94, 68, 88, 91, 84, 85, 82, 7...
## $ Marking                   33, 28, 27, 15, 68, 34, 60, 62, 87, 2...
## $ StandingTackle            28, 31, 24, 21, 58, 27, 76, 45, 92, 1...
## $ SlidingTackle             26, 23, 33, 13, 51, 22, 73, 38, 91, 1...
## $ GKDiving                  6, 7, 9, 90, 15, 11, 13, 27, 11, 86, ...
## $ GKHandling                11, 11, 9, 85, 13, 12, 9, 25, 8, 92, ...
## $ GKKicking                 15, 15, 15, 87, 5, 6, 7, 31, 9, 78, 1...
## $ GKPositioning             14, 14, 15, 88, 10, 8, 14, 33, 7, 88,...
## $ GKReflexes                8, 11, 11, 94, 13, 8, 9, 37, 11, 89, ...
## $ Release.Clause            €226.5M, €127.1M, €228.1M, €138.6M, €...

head(fifa)

##       ID              Name Age
## 1 158023          L. Messi  31
## 2  20801 Cristiano Ronaldo  33
## 3 190871         Neymar Jr  26
## 4 193080            De Gea  27
## 5 192985      K. De Bruyne  27
## 6 183277         E. Hazard  27
##                                            Photo Nationality
## 1 https://cdn.sofifa.org/players/4/19/158023.png   Argentina
## 2  https://cdn.sofifa.org/players/4/19/20801.png    Portugal
## 3 https://cdn.sofifa.org/players/4/19/190871.png      Brazil
## 4 https://cdn.sofifa.org/players/4/19/193080.png       Spain
## 5 https://cdn.sofifa.org/players/4/19/192985.png     Belgium
## 6 https://cdn.sofifa.org/players/4/19/183277.png     Belgium
##                                  Flag Overall Potential
## 1 https://cdn.sofifa.org/flags/52.png      94        94
## 2 https://cdn.sofifa.org/flags/38.png      94        94
## 3 https://cdn.sofifa.org/flags/54.png      92        93
## 4 https://cdn.sofifa.org/flags/45.png      91        93
## 5  https://cdn.sofifa.org/flags/7.png      91        92
## 6  https://cdn.sofifa.org/flags/7.png      91        91
##                  Club                                    Club.Logo   Value
## 1        FC Barcelona https://cdn.sofifa.org/teams/2/light/241.png 200110.5M
## 2            Juventus  https://cdn.sofifa.org/teams/2/light/45.png    20077M
## 3 Paris Saint-Germain  https://cdn.sofifa.org/teams/2/light/73.png 200118.5M
## 4   Manchester United  https://cdn.sofifa.org/teams/2/light/11.png    20072M
## 5     Manchester City  https://cdn.sofifa.org/teams/2/light/10.png   200102M
## 6             Chelsea   https://cdn.sofifa.org/teams/2/light/5.png    20093M
##    Wage Special Preferred.Foot International.Reputation Weak.Foot
## 1 200565K    2202           Left                        5         4
## 2 200405K    2228          Right                        5         4
## 3 200290K    2143          Right                        5         5
## 4 200260K    1471          Right                        4         3
## 5 200355K    2281          Right                        4         5
## 6 200340K    2142          Right                        4         4
##   Skill.Moves      Work.Rate  Body.Type Real.Face Position Jersey.Number
## 1           4 Medium/ Medium      Messi       Yes       RF            10
## 2           5      High/ Low C. Ronaldo       Yes       ST             7
## 3           5   High/ Medium     Neymar       Yes       LW            10
## 4           1 Medium/ Medium       Lean       Yes       GK             1
## 5           4     High/ High     Normal       Yes      RCM             7
## 6           4   High/ Medium     Normal       Yes       LF            10
##         Joined Loaned.From Contract.Valid.Until Height Weight   LS   ST
## 1  Jul 1, 2004                             2021    5'7 159lbs 88+2 88+2
## 2 Jul 10, 2018                             2022    6'2 183lbs 91+3 91+3
## 3  Aug 3, 2017                             2022    5'9 150lbs 84+3 84+3
## 4  Jul 1, 2011                             2020    6'4 168lbs          
## 5 Aug 30, 2015                             2023   5'11 154lbs 82+3 82+3
## 6  Jul 1, 2012                             2020    5'8 163lbs 83+3 83+3
##     RS   LW   LF   CF   RF   RW  LAM  CAM  RAM   LM  LCM   CM  RCM   RM
## 1 88+2 92+2 93+2 93+2 93+2 92+2 93+2 93+2 93+2 91+2 84+2 84+2 84+2 91+2
## 2 91+3 89+3 90+3 90+3 90+3 89+3 88+3 88+3 88+3 88+3 81+3 81+3 81+3 88+3
## 3 84+3 89+3 89+3 89+3 89+3 89+3 89+3 89+3 89+3 88+3 81+3 81+3 81+3 88+3
## 4                                                                      
## 5 82+3 87+3 87+3 87+3 87+3 87+3 88+3 88+3 88+3 88+3 87+3 87+3 87+3 88+3
## 6 83+3 89+3 88+3 88+3 88+3 89+3 89+3 89+3 89+3 89+3 82+3 82+3 82+3 89+3
##    LWB  LDM  CDM  RDM  RWB   LB  LCB   CB  RCB   RB Crossing Finishing
## 1 64+2 61+2 61+2 61+2 64+2 59+2 47+2 47+2 47+2 59+2       84        95
## 2 65+3 61+3 61+3 61+3 65+3 61+3 53+3 53+3 53+3 61+3       84        94
## 3 65+3 60+3 60+3 60+3 65+3 60+3 47+3 47+3 47+3 60+3       79        87
## 4                                                         17        13
## 5 77+3 77+3 77+3 77+3 77+3 73+3 66+3 66+3 66+3 73+3       93        82
## 6 66+3 63+3 63+3 63+3 66+3 60+3 49+3 49+3 49+3 60+3       81        84
##   HeadingAccuracy ShortPassing Volleys Dribbling Curve FKAccuracy
## 1              70           90      86        97    93         94
## 2              89           81      87        88    81         76
## 3              62           84      84        96    88         87
## 4              21           50      13        18    21         19
## 5              55           92      82        86    85         83
## 6              61           89      80        95    83         79
##   LongPassing BallControl Acceleration SprintSpeed Agility Reactions
## 1          87          96           91          86      91        95
## 2          77          94           89          91      87        96
## 3          78          95           94          90      96        94
## 4          51          42           57          58      60        90
## 5          91          91           78          76      79        91
## 6          83          94           94          88      95        90
##   Balance ShotPower Jumping Stamina Strength LongShots Aggression
## 1      95        85      68      72       59        94         48
## 2      70        95      95      88       79        93         63
## 3      84        80      61      81       49        82         56
## 4      43        31      67      43       64        12         38
## 5      77        91      63      90       75        91         76
## 6      94        82      56      83       66        80         54
##   Interceptions Positioning Vision Penalties Composure Marking
## 1            22          94     94        75        96      33
## 2            29          95     82        85        95      28
## 3            36          89     87        81        94      27
## 4            30          12     68        40        68      15
## 5            61          87     94        79        88      68
## 6            41          87     89        86        91      34
##   StandingTackle SlidingTackle GKDiving GKHandling GKKicking GKPositioning
## 1             28            26        6         11        15            14
## 2             31            23        7         11        15            14
## 3             24            33        9          9        15            15
## 4             21            13       90         85        87            88
## 5             58            51       15         13         5            10
## 6             27            22       11         12         6             8
##   GKReflexes Release.Clause
## 1          8        200226.5M
## 2         11        200127.1M
## 3         11        200228.1M
## 4         94        200138.6M
## 5         13        200196.4M
## 6          8        200172.1M

FIFA 19 verisi FIFA 19 Video Oyunu içerisindeki tüm oyuncuları ve oyuncuların özelliklerini barındıran değişkenlere sahiptir.

3. Veri Manipülasyonu

3.1. Örneklem Seçimi: İngiltere Premier Ligi

FIFA 19 içerisinde her bir oyuncunun oynamış olduğu takımları belirten Club değişkeni mevcuttur. Fakat hangi takımın hangi lige ait olduğunu belirten bir değişken yoktur. Bu yüzden elimizi çamura bulayıp teker teker 2018-2019 sezonunda Premier League içeriside olan takımları bir vektör haline getirelim.

premierLeague <- c(
    "Arsenal", "Bournemouth", "Brighton & Hove Albion", "Burnley",
    "Cardiff City", "Chelsea", "Crystal Palace", "Everton", "Fulham",
    "Huddersfield Town", "Leicester City", "Liverpool", "Manchester City",
    "Manchester United", "Newcastle United", "Southampton", 
    "Tottenham Hotspur", "Watford", "West Ham United", "Wolverhampton Wanderers"
  )

Çift taraflı pipeline’ı bilmeyenler için magrittr kütüphanesi içerisinde pipe ( %>% ) operatörü gibi bir operatör bulunmaktadır. %<>% operatörü hem zincir işlemi görüp hem de atama işlemini gerçekleştirir.

fifa %<>% filter(Club %in% premierLeague)

Bir alt küme seçerek veri setini 18207 gözlemden 649 değişkene indirmiş olduk. Elimizde sadece İngiltere’nin futbol kulüpleri bulunuyor artık.

dim(fifa)

## [1] 649  88

3.2. Oyuncu Değerini Kategorik Değişkenden Sürekli Hale Getirmek

head(fifa$Value)

## [1] 20072M   200102M  20093M   20060M   20063M   20083.5M
## 217 Levels: €0 €1.1M €1.2M €1.3M €1.4M €1.5M €1.6M €1.7M €1.8M ... €9M

class(fifa$Value)

## [1] "factor"

Oyuncuların değerleri Euro € cinsinden, M: Milyon ve K: Bin şeklinde ifade edilmiştir.

head(fifa %>% select(Name, Value))

##           Name  Value
## 1       De Gea   20072M
## 2 K. De Bruyne  200102M
## 3    E. Hazard   20093M
## 4  David Silva   20060M
## 5     N. Kanté   20063M
## 6      H. Kane 20083.5M

Yani K. De Bruyne için değer €102M ise bu gözlem değeri 102.000.000 milyon Euro’ya karşılık gelmektedir. Yazıyı yazdığım an itibariyle

 

11.11.2019 Tarihli Euro-TL Karşılıkları

(102000000 * 6.38)

## [1] 650760000

Rakamla 650.760.000 TL, yazıyla ALTIYÜZELLİMİLYONYEDİYÜZALTMIŞBİN TÜRK LİRASI’na karşılık gelmektedir. K. De Bruyne abimize helal olsun güzel kazanıyor.

Şimdi konumuza dönecek olursak, amacımız kategorik bir değişkeni sürekli hale getirmek. Bunun için stringr kütüphanesindeki fonksiyonları kullanacağız.

  • str_remove_all() içersine girilen karakter yapısını değişkenden kaldırır.
  • str_replace_all() içersine girilen karakter yapısını, diğer girilen karakter yapısıyla değiştirir.

fifa$Values <- str_remove_all(fifa$Value,"€") # Euro simgesinin kaldırılması
fifa$Values <- str_replace_all(fifa$Values,"K", "000") # K: Bin ifadesinin üç sıfır ile değiştirilmesi
fifa$Values <- str_remove_all(fifa$Values,"M") # M: Milyon ifadesinin kaldırılması

Value değişkenini elimizde tuttuk ve Value üzerinde işlem yaptıktan sonra Values değişkenini oluşturduk.

head(fifa$Values)

## [1] "72"   "102"  "93"   "60"   "63"   "83.5"

class(fifa$Values)

## [1] "character"

Values değişkeni karakter formatında olduğu için nümerik hale getirmemiz gerekir ve en son işlem olarak değişkenin olması gereken hale getiriyoruz.

fifa$Values <- as.numeric(fifa$Values)
fifa <- fifa  %>% mutate(Values = if_else(fifa$Values < 1000 , Values * 1000000, Values))

head(fifa$Values)

## [1]  72000000 102000000  93000000  60000000  63000000  83500000

3.3. Oyuncu Pozisyonlarını Sınıflara Ayırmak

Futbolcuların pozisyonları temelde 4 kategoriye ayrılır: Kaleci, Defans, Orta Saha ve Forvet.

Burada oyuncuların pozisyonlarını sınıflandırarak veri görselleştirmeler için işimizi kolaylaştıracağız.

# Class
defence <- c("CB", "RB", "LB", "LWB", "RWB", "LCB", "RCB")
midfielder <- c("CM", "CDM","CAM","LM","RM", "LAM", "RAM", "LCM", "RCM", "LDM", "RDM")
fifa %<>% mutate(Class = if_else(Position %in% "GK", "Goal Keeper",
                                 if_else(Position %in% defence, "Defender",
                                         if_else(Position %in% midfielder, "Midfielder", "Forward"))))

3.4. Oyuncu Pozisyonlarının ve İsimlerinin Birlikte Yazdırılması

Her bir oyuncunun ismiyle birlikte hangi pozisyonda oynadıklarını belirtelim.

fifa %<>% mutate(Name.Pos = paste0(Name, ", ", Position)) 
head(fifa$Name.Pos)

## [1] "De Gea, GK"        "K. De Bruyne, RCM" "E. Hazard, LF"    
## [4] "David Silva, LCM"  "N. Kanté, LDM"     "H. Kane, ST"

4. Veri Görselleştirme

Veri Görselleştirme kısmında elde etmek istediğimiz görseller için hem Veri Manipülasyonu hem de Veri Görselleştirme kodu yazacağız.

4.1. Dünya Haritası Grafiği

Problem 1: Amacımız İngiltere Ligi’nde oynayan her bir oyuncunun hangi ülkeden olduğunu göstermek!

Dünya haritası oluşturmak için ilk önce maps kütüphanesini yüklememiz gerekmekte ardından map_data() fonksiyonuyla dünya haritası bilgilerini edinmeliyiz.

Fifa verisinden yapılan hesaplama ile İngiltere Ligi’nde ülkelere göre oyuncu frekansları bulunur ardından dünya haritası verisi ile left_join() ile birleştirilir.

Ardından ggplot ile dünya haritası görselleştirilir. Eğer ggplot görseli interaktif bir hale getirilmek isteniyorsa plotly kütüphanesi ile ggplotly() fonksiyonu kullanılarak ggplot2 görselleştirmeleri plotly haline dönüştürülür.

# Dünya Haritası Bilgisi
world_map <- map_data("world")
# Oyuncu Sayıları Dünya Haritası verisiyle birleştirilir
numofplayers <- world_map %>% 
  mutate(region = as.character(region)) %>% 
  left_join((fifa %>% mutate(Nationality = as.character(Nationality),
                             Nationality = if_else(Nationality %in% "England", "UK", Nationality)) %>% 
               count(Nationality, name = "Number of Player") %>%
               rename(region = Nationality) %>%
               mutate(region = as.character(region))), by = "region")
# İnteraktif Dünya Haritası   
ggplotly(
  ggplot(numofplayers, aes(long, lat, group = group))+
    geom_polygon(aes(fill = Number of Player ), color = "white", show.legend = FALSE)+
    scale_fill_viridis_c(option = "C")+
    theme_void()+
    labs(fill = "Number of Players",
         title = "Nationality of The Players in The League"))

Grafiğe bakıldığında İngiltere Ligi’nde en çok yer alan oyuncuların milliyetleri İngiliz olarak gözükmekte ve frekansı da 255’tir. Bu frekansın yüksek olması demek İngiltere Ligi’ndeki takımların alt yapıdan yerli oyuncu yetiştirmesinde başarılı olunduğu varsayılabilir.

Türkiye’de ise bu durum İngiltere’den daha iyi. Türk futbolumuz da muhteşem olduğundan ve yerli oyuncularımız başarıyla yurt dışında bizi temsil ettiğinden Türkiye’de oynayacak oyuncu bulamıyoruz bile!

Real Madrid - Galatasaray, 6-0, 6 Kasım 2019 İlk 11 Kadrosu

 

Real Madrid – Galatasaray, 6-0, 6 Kasım 2019 İlk 11 Kadrosu
Görsel: transfermarkt

4.2. Oyuncu Pozisyonlarına Göre En Değerli Oyuncular

Problem 2: Amacımız her bir oyuncu pozisyonuna göre (Kaleci, Defans, Orta Saha, Forvet) en değerli 10 oyuncuyu bulmak!

Oyuncuların değerlerini büyükten küçüğe göre sıraladıktan sonra pozisyon sınıflarına göre gruplanır ve ilk 10 gözlem seçilir. Ardından görselleştirme yapılır.

ggplot2 renk paletlerini görmek için http://sape.inf.usi.ch/quick-reference/ggplot2/colour linkini ziyaret edebilirsiniz.

fifa %>% 
  arrange(-Values) %>% group_by(Class) %>% top_n(n = 10, wt = Values) %>% 
  ggplot(aes(reorder(Name, Values), Values, fill = Class, label = paste0("€", Values / 1000000, "M")))+
  geom_col(show.legend = FALSE)+
  geom_text_repel(ylim = 1, segment.color = "white", color = "white")+
  coord_flip()+
  theme_minimal()+
  facet_wrap(Class~., scales = "free",)+
  scale_fill_manual(values = c("seagreen", "orchid", "steelblue" ,"khaki"))+
  theme(axis.text.x=element_blank(),
        strip.background =element_rect(fill="gray"),
        strip.text.x = element_text(size = 10, colour = "white",face = "bold.italic"))+
  labs(title = "Most Valuable Players", x = NULL, y = NULL)

4.3. Takımların Oyuncu Değerlerine Göre Dağılımı

Problem 3: İngiltere Premier Ligi’nde her bir takımın değerlerinin dağılımını ve değişim aralıklarını görelim.

fifa %>%
    ggplot(aes(reorder(Club, Values), Values, fill = Club))+
    geom_boxplot(show.legend = FALSE)+
    coord_flip()+
    theme_minimal()+
    scale_fill_ordinal(option = "E")+
    scale_y_continuous(labels = comma)+
    labs(x = NULL, y = "Value")

Boxplot’a bakıldığında görseldeki ilk 6 takım lig’deki en değerli ve dünyaca bilinen takımlardır. Bu grafikten takımların bütçesel anlamda diğer takımlara baskınlıkları görülebilir. İlk altı takımın toplam oyuncu değerlerine bakıldığında ve diğer takımlarla karşılaştırıldığında çok ciddi bir maddi farklılık görülecektir.

4.4. Pozisyonlara Göre Oyuncuların Özelliklerinin Dağılımı

Problem 4: Takımımızın güçlü ve zayıf yönlerini görmek isteyelim. Burada oyuncuları pozisyon sınıflarına göre ayırarak takımımız içerisindeki oyuncuların özelliklerini inceleyelim!

Kalecileri analiz dışı bıraktıktan sonra Defans, Orta Saha ve Forvet pozisyonlarındaki oyuncuların özellikerine göre güçlü ve zayıf yönler görülür.

NOT: Bu görselleştirme Kaggle içerisindeki bir Kernel’dan alınmıştır. Linkini bulmaya üşendim o yüzden Kaggle içerisindeki FIFA Kernel’larına bakmanızı tavsiye ediyorum. Böylelikle oradaki güzel işleri de görmüş olursunuz. 🙂

tile_data <- fifa %>%
  filter(Club == "Manchester City") %>% 
  select_if(is.numeric) %>%
  select(-contains("GK")) %>%
  left_join(fifa %>% select(ID, Position, Class), by = "ID") %>%
  filter(Overall >= 70) %>%
  select(-ID, -International.Reputation, -Jersey.Number, -Skill.Moves, -Special, -Values, -Weak.Foot, -Age, -Overall, -Potential,
         -starts_with("Wage"))
tile_data <- tile_data %>%
  filter(Position != "GK") %>%
  gather(key = Attribute, value = Value, -Position, -Class) %>%
  group_by(Class, Position, Attribute) %>%
  summarise(MedianValue = median(Value, na.rm = T))
tile_data %>%
  ggplot(aes(x= Attribute, y= Position)) +
  geom_tile(aes(fill = MedianValue), colour = "black") +
  geom_text(aes(label = MedianValue)) +
  scale_fill_gradient(low = "purple", high = "green") +
  theme_minimal()+
  theme(axis.text.x = element_text(angle = 45, hjust = 1), 
        strip.text = element_text(face = "bold", size = 12), 
        legend.position = "none") +
  facet_wrap(~Class, scales = "free", ncol = 1)

4.5. 3-Boyutlu Görselleştirme ile Takım Bilgisi

Problem 5: Takımımızdaki oyuncuların Yaş (Age), Güç (Overall) ve Değer (Value) değişkenlerine göre Pozisyon bazlı dağılımlarını görmek isteyelim!

Plotly ile 3-Boyutlu ve interaktif görselleştirme yapılabilir.

p3d <- fifa %>% filter(Club == 'Chelsea')  
plot_ly(p3d, x = ~Values, y = ~Overall, z = ~Age, color = ~Class, text = ~Name.Pos) %>% 
  add_markers() %>%
  layout(
    scene = list(xaxis = list(title = 'Value'),
                 yaxis = list(title = 'Overall'),
                 zaxis = list(title = 'Age'))
    )

3-Boyutlu Plotly grafiğini FIFA 19 Dashboard’u içerisinden interaktif bir şekilde görebilirsiniz.

Bu yazıda FIFA 19 Dashboard’u içerisinde yapmış olduğum görselleştirmelerden bazılarını ve görselleştirme yapmadan önce hangi sorular ile yola çıktığımı sizler ile paylaştım ve bu problemlerin çözümlerini uygulamalı bir şekilde görmüş olduk.

FIFA 19 Dashboard Veri Görselleştirme yazı serimizin ilk bölümü burada sonlanmaktadır. Bir sonraki yazılarda görüşmek üzere.

Ekrem Bayar

Hakkında Ekrem Bayar

GÖZ ATMAK İSTEYEBİLİRSİNİZ

Natural Language Toolkit(NLTK)

Doğal Dil İşleme kütüphanesi olan Natural Language Toolkit(NLTK)'i ve en sık kullanılan modüllerinden bahsedip Pyhthon'da uygulamalarını gerçekleştirdim.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir