1. Intro

Hello … Data yang akan digunakan adalah data dari tidytuesday tanggal 2021-03-16. Data ini memuat performa game - game windows pada platform steam.

Proprocessing

Import

Import data melalui github

games <- read.csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-03-16/games.csv')
games

merubah persentase pada avg_peak_perc menjadi numerik

games$avg_peak_perc <- as.numeric(gsub("%", "", games$avg_peak_perc))
class(games$avg_peak_perc)
## [1] "numeric"
head(games$avg_peak_perc)
## [1] 65.9567 62.1275 44.4707 61.4752 52.4988 75.7603

Change Data Types

melihat tipe data

games$gamename <- as.factor(gsub("[[:punct:]]", " ", games$gamename))
games$month <- as.factor(games$month)
str(games)
## 'data.frame':    83631 obs. of  7 variables:
##  $ gamename     : Factor w/ 1258 levels " U 4E09  U 56FD  U 7FA4  U 82F1  U 4F20 8 Heroes of the Three Kingdoms 8",..: 215 323 804 52 891 1041 492 1119 880 778 ...
##  $ year         : int  2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 ...
##  $ month        : Factor w/ 12 levels "April","August",..: 4 4 4 4 4 4 4 4 4 4 ...
##  $ avg          : num  741013 404832 198958 120983 117742 ...
##  $ gain         : num  -2196 -27840 -2290 49216 -24375 ...
##  $ peak         : int  1123485 651615 447390 196799 224276 133620 146438 113338 103429 90539 ...
##  $ avg_peak_perc: num  66 62.1 44.5 61.5 52.5 ...

Heads

melihat 10 data pertama

head(games)

Tails

melihat 10 data terakhir

tail(games)

Check Null Data

Mengecek apakah ada data yang null

colSums(is.na(games))
##      gamename          year         month           avg          gain 
##             0             0             0             0          1258 
##          peak avg_peak_perc 
##             0           156

terdapat 1258 data dari kolom gain 156 dari kolom avg_peak_perc yang kosong, maka kita akan menghapus data yang nan

games <- na.omit(games)
dim(games)
## [1] 82267     7
colSums(is.na(games))
##      gamename          year         month           avg          gain 
##             0             0             0             0             0 
##          peak avg_peak_perc 
##             0             0

Summary

summary data games

summary(games)
##                            gamename          year            month      
##  Age of Empires  III  2007    :  103   Min.   :2012   February : 7448  
##  AirMech Strike                :  103   1st Qu.:2016   January  : 7371  
##  Alan Wake                     :  103   Median :2018   December : 7274  
##  Alan Wake s American Nightmare:  103   Mean   :2017   November : 7176  
##  Alien Swarm                   :  103   3rd Qu.:2019   October  : 7059  
##  Aliens vs  Predator           :  103   Max.   :2021   September: 6963  
##  (Other)                       :81649                  (Other)  :38976  
##       avg                 gain                peak         avg_peak_perc  
##  Min.   :      0.0   Min.   :-250249.0   Min.   :      1   Min.   : 0.00  
##  1st Qu.:     53.9   1st Qu.:    -38.3   1st Qu.:    139   1st Qu.:34.63  
##  Median :    203.1   Median :     -1.6   Median :    499   Median :43.90  
##  Mean   :   2749.3   Mean   :    -10.3   Mean   :   5419   Mean   :42.58  
##  3rd Qu.:    756.0   3rd Qu.:     22.3   3rd Qu.:   1706   3rd Qu.:51.39  
##  Max.   :1584886.8   Max.   : 426446.1   Max.   :3236027   Max.   :88.84  
## 

Dari summary dapat diketahui:

  1. Data dimulai pada tahun 2012 sampai tahu 2019, dengan data paling banyak pada tahun 2018

  2. Jumlah data pada bulan februari paling banyak dibandingkan data bulan lainya

  3. pertumbuhan pemain dimuali dari 0 sampai 1584886 pemain per observasi, dengan rata rata pertumbuhan pemain 2749.3

  4. pertumbuhan pemain sangat bervariasi dengan nilai maksimal 426446.1 dan nilai minimal -250249.0 dengan rata rata -10.3 dimana pada kebanyakan video game mayoritas mengalami penurunan -10.3 pemain per observasi

Study Cases

Study Case 1

membuat dataframe dari data terakhir tiap nama game yang berbeda

unique_game <- games[order(games$year, decreasing = T), ]
gm.unik <- unique_game[ match(x = unique(unique_game$gamename), table = unique_game$gamename), ]
gm.unik

kita akan melihat pertumbuhan pemain pada tiap game (gain) karena terdapat 1,258 judul kita kan mencari 10 yang memiliki gain terbanyak

sub_set1 <- gm.unik[order(gm.unik$gain, decreasing = T), ]
sub_set1 <- head(sub_set1, 10)
sub_set1$gamename <- as.factor(sub_set1$gamename)
# ggplot
ggplot(data = sub_set1, 
       aes(x = gain, 
           y =  reorder(gamename, gain),
           fill = peak)
       ) +
  geom_col() +
  labs(title="Grafik Perbandingan Pertumbuhan Pemain Game",
       subtitle = "Untuk Pertumbuhan 10 Paling Banyak",
       caption = "source: tidytuesday",
       y="Judul Game",
       x="Jumlah Pertumbuhan Pemain",
       fill = "Peak Of Total Players") +
  scale_fill_gradient(low = "red", high = "yellow")

Penjelasan Grafik 1

  1. Terlihat bahwa Apex Legends memiliki jumlah pertumbuhan pemain yang paling tinggi dari game lainya

  2. Tetapi dalam jumlah pertumbuhan game World of Warships memiliki jumlah peak pemain yang sangat tinggi dimana menandakan pemain berada dalam retensi yang tinggi

  3. Team Fortress 2, Apex Legends, dan Destiny 2 memiliki genre yang sama tetapi jumlah pemain yang cukup berbeda dimana apex legend mendominasi genre

Study Case 2

Kita akan melakukan visualisasi pertumbuhan pemain antara data observasi pertama kali dengan data observasi terakhir degan judul avg_diff

x_p <- c()
for (val in gm.unik$gamename) {
data = games[games$gamename == val, ]
data = data[order(data$year, decreasing = T), ]
last_data <- tail(data, 1)
first_data <- head(data, 1)
gain_diff <- first_data$avg - last_data$avg
x_p <- c(x_p,gain_diff )
}
gm.unik$avg_diff <- x_p
gm.unik
gam_agg <- aggregate(avg ~ avg_diff + gamename + peak, gm.unik, mean)
sub_set2 <- head(gam_agg[order(gam_agg$avg, decreasing = T), ], 10)
ggplot(data = sub_set2, 
       aes(x = avg, 
           y =  reorder(gamename, avg),
           size= avg,
           color=avg_diff
           )
       ) +
  geom_point() +
  labs(title="Grafik Perbandingan Pemain Game",
       subtitle = "Untuk 10 game dengan jumlah pemain paling banyak",
       caption = "source: tidytuesday",
       y="Judul Game",
       x="Jumlah Pemain", 
       size = "Peak Players",
       color = "Diff Avg") +
  theme_minimal() +
  scale_color_gradient(low = "green", high = "YELLOW") +
  guides(size = F)

Penjelasan Grafik 2

  1. Dalam hal jumlah pemain Counter Strike Global Offensive memiliki jumlah pemain paling banyak dan pertumbuhan pemain yang sangat tinggi dimana akumulasi pemain observasi pertama dikurangi oservasi terakhir masih sangat tinggi berada di antara 600000 pemain. Hanya pada game ini memiliki perbedaan pemain di sekitar 600000

  2. Dota 2 memiliki jumlah pemain yang terbesar kedua setelah Counter Strike Global Offensive hal ini mungkin saja dikarenakan kesulitan mengusai game dimana game Counter Strike Global Offensive lebih mudah dimainkan dan tidak terlalu rumit dibandingkan Dota 2. Tetapi walaupun begitu Dota 2 dengan genre MOBA bersaing dengan banyak pemain dengan genre First Person Shooters dan tetap mengunguli baik dari jumlah pamain maupun perbedaan jumlah observasi yang cukup tinggi

  3. Apex legend yang mana memiliki pertumbuhan pemain yang tinggi masih kalah dengan game yang sudah rilis terlebih dahulu seperti Dota 2 dan Counter Strike Global Offensive.

Study Case 3

Akan dilihat pertumbuhan pemain berbanding dengan peak pemain

ggplot(data = games, 
       aes(x = peak,
           y = avg, 
           size = avg,
           color=peak
           )
       ) +
  geom_point() +
  labs(title="Grafik Pertumbuhan Pemain Game",
       subtitle = "Mulai Tahun 2012 - 2019",
       caption = "source: tidytuesday",
       y="Pertumbuhan Pemain",
       x="Jumlah Peak Pemain", 
       size="Jumlah Pemain",
       color="Peak Pemain") +
  theme_pander() +
  theme(
    
    plot.title = element_text(hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5)
        
        )  +
  geom_smooth(aes(peak, avg)) + 
  scale_color_gradient(low = "red", high = "yellow") +
  guides(size = F)  +
  theme(
    
    plot.title = element_text(hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5)
        
        )
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

Penjelasan Grafik

Terlihat bahwa pertumbuhan pemain berbanding lurus dengan peak pemain dimana hal ini menandakan dengan bertambahnya pamain baru retensi pemain pun tetap bertambah dimana banyak pemain lama dan pemain baru tetap menyukai bermain game

Study Case 4

data_agg2 <- aggregate(avg ~ year, games, sum)
ggplot(data = data_agg2, 
       aes(x = year,
           y = avg, 
           size = year,
           color = avg
           )
       ) +
  geom_point() +
  scale_color_gradient(low = "red", high = "yellow") + 
  guides(size=F) +
  labs(title="Grafik Pertumbuhan Pemain Game",
       subtitle = "Mulai Tahun 2012 - 2019",
       caption = "source: tidytuesday",
       y="Tahun",
       x="Pertumbuhan Jumlah Pemain", 
       size="Tahun",
       color="Jumlah Pemain") +
  theme_pander() +
  theme(
    
    plot.title = element_text(hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5)
        
        )

Penjelasan Grafik 4

Bila dilihat dari grafik pertumbuhan pemain tidak selalu naik tiap tahun, contohnya oada tahun 2019 terdapat penurunan pertambahan pemain. Bila dilihat tahun 2020 merupakan tahun dengan pertambahan pemain tertinggi hal ini salah satunya dikarenakan karena adanya virus corona yang menyebabkan setiap orang harus tetap berada di dalam rumah yan mendorong orang orang untuk lebih sering bermain game

Study Case 5

Akan di visualisasikan persebaran pertumbuhan pemain dalam bulan

data_agg3 <- aggregate(avg ~ year + month, games, max)
ggplot(data = data_agg3, 
       aes(x = avg,
           y = reorder(month, avg)
           )
       ) +
  geom_boxplot() + geom_line() +
  theme_fivethirtyeight() +
  labs(title="Grafik Sebaran Pemain Game",
       subtitle = "Mulai Tahun 2012 - 2019",
       caption = "source: tidytuesday",
       y="Tahun",
       x="Pertumbuhan Jumlah Pemain", 
       size="Tahun",
       color="Jumlah Pemain") +
  theme(
    
    plot.title = element_text(hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5)
        
        )

Penjelasan Grafik 5

Bila dilihat pada grafik januari merupakan bulan yang memiliki pertumbuhan pemain yang paling tidak stabil dengan Q1 dibawah 400000 dan Q3 hampir mendekati 1600000 tetapi di bulan januari juga merupakan bulan dengan pertumbuhan pemain paling tinggi kedua. Bulan februari merupakan bulan dengan pertumbuhan pemain paling tinggi.