1 .Steam

Tentang Steam

Steam adalah layanan distribusi digital permainan video oleh Valve. Ini diluncurkan sebagai klien perangkat lunak mandiri pada September 2003 sebagai cara bagi Valve untuk memberikan pembaruan otomatis untuk permainan mereka, dan diperluas untuk memasukkan permainan dari penerbit pihak ketiga. Steam juga telah berkembang menjadi etalase online berbasis web dan seluler digital. Steam menawarkan digital rights management (DRM), server pembuat pertandingan, streaming video, dan layanan jejaring sosial. Ini juga menyediakan pengguna dengan instalasi dan pembaruan permainan secara otomatis, dan fitur komunitas seperti daftar teman dan grup, penyimpanan awan, dan fungsi obrolan suara dan dalam permainan.

Perangkat lunak ini menyediakan application programming interface (API) yang tersedia secara bebas yang disebut Steamworks, yang dapat digunakan pengembang untuk mengintegrasikan banyak fungsi Steam ke dalam produk mereka, termasuk perjodohan, pencapaian dalam permainan, transaksi mikro, dan dukungan untuk konten yang dibuat pengguna melalui Steam Workshop. Meskipun awalnya dikembangkan untuk digunakan pada sistem operasi Microsoft Windows, versi untuk macOS dan Linux kemudian dirilis. Aplikasi seluler juga dirilis untuk iOS, Android, dan Windows Phone pada tahun 2010-an. Platform ini juga menawarkan sejumlah kecil pilihan konten lainnya, termasuk perangkat lunak desain, perangkat keras, soundtrack permainan, anime, dan film.

Platform Steam adalah platform distribusi digital terbesar untuk PC gaming, menampung sekitar 75% ruang pasar pada tahun 2013.[4] Pada 2017, pengguna yang membeli permainan melalui Steam berjumlah sekitar US$4,3 miliar, mewakili setidaknya 18% dari penjualan permainan PC global.[5] Layanan ini memiliki lebih dari 34.000 permainan pada tahun 2019, dengan lebih dari 95 juta pengguna aktif bulanan. Keberhasilan Steam telah menyebabkan pengembangan produk microconsole Steam Machine, yang meliputi sistem operasi SteamOS dan Steam Controller.

1.1 .Sejarah Steam

Sejarah Valve telah menandatangani kontrak penerbitan dengan Sierra Studios pada tahun 1997 sebelum rilis tahun 1998 dari Half-Life. Kontrak tersebut telah memberikan beberapa hak kekayaan intelektual (IP) kepada Sierra selain kontrol penerbitan. Valve menerbitkan permainan tambahan melalui Sierra, termasuk ekspansi untuk Half-Life dan Counter-Strike. Sekitar tahun 1999, ketika Valve mulai mengerjakan Half-Life 2 dan mesin Source baru, mereka menjadi khawatir tentang kontrak mereka dengan Sierra terkait dengan hak kekayaan intelektual, dan kedua perusahaan tersebut menegosiasikan ulang kontrak baru pada tahun 2001. Kontrak baru menghapus hak kekayaan intelektual Sierra dan memberikan hak Valve untuk distribusi digital gimnya.

Sekitar saat ini, Valve memiliki masalah dalam memperbarui permainan online-nya. Mereka bisa menyediakan patch yang dapat diunduh, tetapi untuk permainan multipemain, patch ini akan mengakibatkan sebagian besar basis pengguna online terputus selama beberapa hari. Valve memutuskan untuk membuat platform yang akan memperbarui permainan secara otomatis dan menerapkan tindakan anti-pembajakan dan anti-kecurangan yang lebih kuat. Melalui jajak pendapat pengguna pada saat pengumumannya pada tahun 2002, Valve juga mengakui bahwa setidaknya 75% dari pengguna mereka memiliki akses ke koneksi internet berkecepatan tinggi, yang akan terus tumbuh dengan ekspansi broadband yang direncanakan pada tahun-tahun berikutnya, dan mengakui bahwa mereka bisa memberikan konten permainan lebih cepat ke pemain daripada melalui saluran ritel. Valve mendekati beberapa perusahaan, termasuk Microsoft, Yahoo!, dan RealNetworks untuk membangun klien dengan fitur-fitur ini, tetapi ditolak.

Pengembangan Steam dimulai pada tahun 2002, dengan nama yang berfungsi untuk platform tersebut adalah “Grid” dan “Gazelle”. Steam diumumkan secara publik di acara permainan Developers Conference pada 22 Maret 2002, dan dirilis untuk pengujian beta pada hari yang sama. Untuk menunjukkan kemudahan mengintegrasikan Steam dengan sebuah permainan, Relic Entertainment menciptakan versi khusus dari Impossible Creatures. Valve bermitra dengan beberapa perusahaan, termasuk AT&T, Acer, dan GameSpy. Mod pertama yang dirilis pada sistem adalah Day of Defeat. Pada tahun 2002, presiden Valve, Gabe Newell, mengatakan ia menawarkan kepada tim mod lisensi mesin permainan dan distribusi melalui Steam seharga US$995.

Sebelum pengumuman Steam, Valve menemukan bahwa Sierra telah mendistribusikan permainan mereka di kafe PC yang mereka klaim melanggar ketentuan kontrak, dan membawa Sierra dan pemiliknya, Vivendi Games, ke pengadilan. Sierra menuntun balik, menegaskan bahwa dengan diumumkannya Steam, Valve telah bekerja untuk merusak kontrak untuk menawarkan etalase digital untuk permainan mereka, yang secara langsung bersaing dengan Sierra. Kasus ini awalnya diputuskan mendukung Valve, memungkinkan mereka untuk meninggalkan kontrak karena pelanggaran tersebut dan mencari mitra penerbitan lain untuk salinan retail dari permainan mereka, sambil melanjutkan pekerjaan mereka dengan Steam. Salah satu perusahaan tersebut adalah Microsoft, tetapi Ed Fries menyatakan bahwa mereka menolak tawaran tersebut karena niat Valve untuk terus menjual permainan mereka melalui Steam.

Antara 80.000 dan 300.000 pemain berpartisipasi dalam uji beta sebelum perilisan resmi Steam pada 12 September 2003. Klien dan situs webnya tersedak oleh tekanan ribuan pengguna yang secara bersamaan mencoba untuk memainkan permainan. Pada saat itu, fungsi utama Steam adalah merampingkan proses tambalan yang umum di permainan komputer online, dan merupakan komponen yang opsional untuk semua permainan lainnya. Pada tahun 2004, World Opponent Network ditutup dan digantikan oleh Steam, dengan fitur online apa pun yang mengharuskannya berhenti berfungsi kecuali permainan tersebut dialihkan ke Steam.

Half-Life 2 adalah permainan pertama yang membutuhkan instalasi klien Steam untuk dimainkan, bahkan untuk salinan retail. Keputusan ini dipenuhi dengan kekhawatiran tentang kepemilikan perangkat lunak, persyaratan perangkat lunak, dan masalah dengan server yang kelebihan beban yang ditunjukkan sebelumnya oleh peluncuran Counter-Strike. Selama waktu ini, pengguna menghadapi banyak masalah saat mencoba memainkan permainan

Mulai tahun 2005, Valve mulai menegosiasikan kontrak dengan beberapa penerbit pihak ketiga untuk merilis produk mereka, seperti Rag Doll Kung Fu dan Darwinia, di Steam. Valve mengumumkan bahwa Steam menjadi menguntungkan karena beberapa permainan Valve yang sangat sukses. Meskipun distribusi digital belum bisa menyamai volume ritel, margin keuntungan Valve dan pengembang jauh lebih besar di Steam. Penerbit yang lebih besar, seperti id Software, Eidos Interactive, dan Capcom, mulai mendistribusikan permainan mereka di Steam pada tahun 2007. Pada Mei tahun itu, 13 juta akun telah dibuat di layanan Steam, dan sebanyak 150 permainan dijual di platform. Pada 2014, total penjualan permainan tahunan di Steam diperkirakan mencapai sekitar US$1,5 miliar. Pada 2018, layanan ini memiliki lebih dari 90 juta pengguna aktif bulanan.

1.1.1 Kurasi Steam

Kurasi Dengan penambahan Greenlight dan Direct sudah mengakselerasi beberapa permainan yang sudah ada di layanan, dengan hampir 40% dari 19.000 permainan yang ada di Steam di akhir tahun 2017 yang juga sudah dirilis tahun 2017.Pada akhir tahun 2018, terdapat lebih dari 27.000 permainan yang dirilis di Steam, dan mencapai lebih dari 34.000 pada akhir 2019. Lebih dari 50.000 permainan sudah ada di layanan tersebut pada akhir Febuari 2021. Menurut Greenlight, Valve melihat bahwa ada 5 permainan yang diterbitkan setiap minggunya. Greenlight berekspansi hingga 70 permainan per minggu, dan yang berlipatganda hingga 180 permainan per minggu diikuti dengan pengenalan Direct. Karena proses ini memperbolehkan pengembang untuk menerbitkan permainan di Steam dengan kelalaian minimum berkat valve, jurnalis telah mengkritisi Valve mengenai kurangnya kebijakan mengenai kurasi yang membuat sulitnya menemukan permainan berkualitas diantara permainan dengan kualitas prodksi yang buruk, dikenajl juga dengan “shovelware”. Seiring dengan peluncuran Steam Direct, yang memperbolehkan permainan diterbitkan tanpa kurasi Valve, anggota dari industri permaianan terbelah mengenai pendekatan Valve’s hands-off. Sebagian memuji Valve untuk menghindari menjadi juri moral dari konten dan memperbolehkan konsumen memilih konten apa yang ingin mereka lihat, sementara itu sebagian merasa hal ini mendorong pengembang untuk menerbitkan permainan yang penuh kebencian dan tidak bermoral bagi beberapa kelas sosial, seperti LGBTQ, dan Valve bergantung dengan filter pengguna dana algoritma yang mungkin tidak sukses dalam memblokir konten yang tidak diinginkan dari beberapa pengguna. Sebagian kritikan lanjutan adalah keputusan berdasarkan keuntungan finansial, ketika Valve mengambil 30% dari semua penjualan melalui Steam, memberikan perusahaan alasan untuk menhindari pemblokiran semua konten permainan, dan lebih lanjut masalah kurasi yang sudah ada menumpuk sejak layanan ini berdiri. The National Center on Sexual Exploitation mengabarkan sebuah pernyataan “mengecam keputusan ini mengingat maraknya permainan kekerasan dan eksploitasi seksual yang dihosting di Steam”, dan “Dalam arus kami #MeToo culture, Steam membuat pilihan pengecut untuk mengelak dari tanggung jawab perusahaan dan sosialnya untuk menghapus permainan video yang berisi kekerasan seksual dan eksploitatif dari platformnya”.

2 .Eksplorasi Data

  • “Install Packages”
library(readr)
library(ggplot2)
library(scales)
## 
## Attaching package: 'scales'
## The following object is masked from 'package:readr':
## 
##     col_factor
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(skimr)
library(tidyr)
library(purrr)
## 
## Attaching package: 'purrr'
## The following object is masked from 'package:scales':
## 
##     discard
library(tibble)
library(stringr)

2.1 “Pemanggilan Data”

Nama data frame “train”

steam <- read_csv("steam.csv")
## Rows: 27075 Columns: 18
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (8): name, developer, publisher, platforms, categories, genres, steamsp...
## dbl  (9): appid, english, required_age, achievements, positive_ratings, nega...
## date (1): release_date
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Menampilkan data

  • Menampilkan 5 data teratas
head(steam)
## # A tibble: 6 × 18
##   appid name   release_…¹ english devel…² publi…³ platf…⁴ requi…⁵ categ…⁶ genres
##   <dbl> <chr>  <date>       <dbl> <chr>   <chr>   <chr>     <dbl> <chr>   <chr> 
## 1    10 Count… 2000-11-01       1 Valve   Valve   window…       0 Multi-… Action
## 2    20 Team … 1999-04-01       1 Valve   Valve   window…       0 Multi-… Action
## 3    30 Day o… 2003-05-01       1 Valve   Valve   window…       0 Multi-… Action
## 4    40 Death… 2001-06-01       1 Valve   Valve   window…       0 Multi-… Action
## 5    50 Half-… 1999-11-01       1 Gearbo… Valve   window…       0 Single… Action
## 6    60 Ricoc… 2000-11-01       1 Valve   Valve   window…       0 Multi-… Action
## # … with 8 more variables: steamspy_tags <chr>, achievements <dbl>,
## #   positive_ratings <dbl>, negative_ratings <dbl>, average_playtime <dbl>,
## #   median_playtime <dbl>, owners <chr>, price <dbl>, and abbreviated variable
## #   names ¹​release_date, ²​developer, ³​publisher, ⁴​platforms, ⁵​required_age,
## #   ⁶​categories
  • Menampilkan 5 data terbawah
tail(steam)
## # A tibble: 6 × 18
##    appid name  release_…¹ english devel…² publi…³ platf…⁴ requi…⁵ categ…⁶ genres
##    <dbl> <chr> <date>       <dbl> <chr>   <chr>   <chr>     <dbl> <chr>   <chr> 
## 1 1.07e6 Deat… 2019-04-23       1 Anima   Team S… windows       0 Single… Indie 
## 2 1.07e6 Room… 2019-04-24       1 SHEN J… SHEN J… windows       0 Single… Adven…
## 3 1.07e6 Cybe… 2019-04-23       1 Semyon… Bekker… windows       0 Single… Actio…
## 4 1.07e6 Supe… 2019-04-24       1 Entwic… Entwic… windows       0 Single… Actio…
## 5 1.07e6 New … 2019-04-17       1 Yustas… Alawar… window…       0 Single… Adven…
## 6 1.07e6 Rune… 2019-04-24       1 Adept … Alawar… window…       0 Single… Adven…
## # … with 8 more variables: steamspy_tags <chr>, achievements <dbl>,
## #   positive_ratings <dbl>, negative_ratings <dbl>, average_playtime <dbl>,
## #   median_playtime <dbl>, owners <chr>, price <dbl>, and abbreviated variable
## #   names ¹​release_date, ²​developer, ³​publisher, ⁴​platforms, ⁵​required_age,
## #   ⁶​categories

2.2 “Inspeksi Data”

str(steam)
## spec_tbl_df [27,075 × 18] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ appid           : num [1:27075] 10 20 30 40 50 60 70 80 130 220 ...
##  $ name            : chr [1:27075] "Counter-Strike" "Team Fortress Classic" "Day of Defeat" "Deathmatch Classic" ...
##  $ release_date    : Date[1:27075], format: "2000-11-01" "1999-04-01" ...
##  $ english         : num [1:27075] 1 1 1 1 1 1 1 1 1 1 ...
##  $ developer       : chr [1:27075] "Valve" "Valve" "Valve" "Valve" ...
##  $ publisher       : chr [1:27075] "Valve" "Valve" "Valve" "Valve" ...
##  $ platforms       : chr [1:27075] "windows;mac;linux" "windows;mac;linux" "windows;mac;linux" "windows;mac;linux" ...
##  $ required_age    : num [1:27075] 0 0 0 0 0 0 0 0 0 0 ...
##  $ categories      : chr [1:27075] "Multi-player;Online Multi-Player;Local Multi-Player;Valve Anti-Cheat enabled" "Multi-player;Online Multi-Player;Local Multi-Player;Valve Anti-Cheat enabled" "Multi-player;Valve Anti-Cheat enabled" "Multi-player;Online Multi-Player;Local Multi-Player;Valve Anti-Cheat enabled" ...
##  $ genres          : chr [1:27075] "Action" "Action" "Action" "Action" ...
##  $ steamspy_tags   : chr [1:27075] "Action;FPS;Multiplayer" "Action;FPS;Multiplayer" "FPS;World War II;Multiplayer" "Action;FPS;Multiplayer" ...
##  $ achievements    : num [1:27075] 0 0 0 0 0 0 0 0 0 33 ...
##  $ positive_ratings: num [1:27075] 124534 3318 3416 1273 5250 ...
##  $ negative_ratings: num [1:27075] 3339 633 398 267 288 ...
##  $ average_playtime: num [1:27075] 17612 277 187 258 624 ...
##  $ median_playtime : num [1:27075] 317 62 34 184 415 10 83 43 205 402 ...
##  $ owners          : chr [1:27075] "10000000-20000000" "5000000-10000000" "5000000-10000000" "5000000-10000000" ...
##  $ price           : num [1:27075] 7.19 3.99 3.99 3.99 3.99 3.99 7.19 7.19 3.99 7.19 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   appid = col_double(),
##   ..   name = col_character(),
##   ..   release_date = col_date(format = ""),
##   ..   english = col_double(),
##   ..   developer = col_character(),
##   ..   publisher = col_character(),
##   ..   platforms = col_character(),
##   ..   required_age = col_double(),
##   ..   categories = col_character(),
##   ..   genres = col_character(),
##   ..   steamspy_tags = col_character(),
##   ..   achievements = col_double(),
##   ..   positive_ratings = col_double(),
##   ..   negative_ratings = col_double(),
##   ..   average_playtime = col_double(),
##   ..   median_playtime = col_double(),
##   ..   owners = col_character(),
##   ..   price = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
summary_steam <-  summary(steam)
summary_steam
##      appid             name            release_date           english      
##  Min.   :     10   Length:27075       Min.   :1997-06-30   Min.   :0.0000  
##  1st Qu.: 401230   Class :character   1st Qu.:2016-04-04   1st Qu.:1.0000  
##  Median : 599070   Mode  :character   Median :2017-08-08   Median :1.0000  
##  Mean   : 596204                      Mean   :2016-12-31   Mean   :0.9811  
##  3rd Qu.: 798760                      3rd Qu.:2018-06-06   3rd Qu.:1.0000  
##  Max.   :1069460                      Max.   :2019-05-01   Max.   :1.0000  
##   developer          publisher          platforms          required_age    
##  Length:27075       Length:27075       Length:27075       Min.   : 0.0000  
##  Class :character   Class :character   Class :character   1st Qu.: 0.0000  
##  Mode  :character   Mode  :character   Mode  :character   Median : 0.0000  
##                                                           Mean   : 0.3549  
##                                                           3rd Qu.: 0.0000  
##                                                           Max.   :18.0000  
##   categories           genres          steamspy_tags       achievements    
##  Length:27075       Length:27075       Length:27075       Min.   :   0.00  
##  Class :character   Class :character   Class :character   1st Qu.:   0.00  
##  Mode  :character   Mode  :character   Mode  :character   Median :   7.00  
##                                                           Mean   :  45.25  
##                                                           3rd Qu.:  23.00  
##                                                           Max.   :9821.00  
##  positive_ratings  negative_ratings average_playtime   median_playtime   
##  Min.   :      0   Min.   :     0   Min.   :     0.0   Min.   :     0.0  
##  1st Qu.:      6   1st Qu.:     2   1st Qu.:     0.0   1st Qu.:     0.0  
##  Median :     24   Median :     9   Median :     0.0   Median :     0.0  
##  Mean   :   1001   Mean   :   211   Mean   :   149.8   Mean   :   146.1  
##  3rd Qu.:    126   3rd Qu.:    42   3rd Qu.:     0.0   3rd Qu.:     0.0  
##  Max.   :2644404   Max.   :487076   Max.   :190625.0   Max.   :190625.0  
##     owners              price        
##  Length:27075       Min.   :  0.000  
##  Class :character   1st Qu.:  1.690  
##  Mode  :character   Median :  3.990  
##                     Mean   :  6.078  
##                     3rd Qu.:  7.190  
##                     Max.   :421.990
  • “Melihat Dimensi Data”
dim(steam)
## [1] 27075    18
names(steam)
##  [1] "appid"            "name"             "release_date"     "english"         
##  [5] "developer"        "publisher"        "platforms"        "required_age"    
##  [9] "categories"       "genres"           "steamspy_tags"    "achievements"    
## [13] "positive_ratings" "negative_ratings" "average_playtime" "median_playtime" 
## [17] "owners"           "price"
  • Melakukan cek baris dan kolom dapat menggunakan cara berikut : "nrow = baris & ncol = colom"
# Fungsi "nrow(train)" untuk menampilkan jumlah baris pada data,
# Fungsi "ncol(train)" untuk menampilkan jumlah kolom pada data.
nrow(steam)
## [1] 27075
ncol(steam)
## [1] 18
  • Code mengetahui panjang data dan banyaknya unik data
# Gunakan fungsi "unique" untuk mengetahui unik data :
# unique(steam$genres)
#  fungsi "length(unique" untuk mengetahui jumlah unik data :
# length(unique(steam$genres))

3 .Proses & Visualisasi Data

3.1 “Nilai Hilang (N/A)

  • Cek Data Hilang
# Fungsi "anyNA(train)"
# untuk cek adanya "missing value" pada data :
anyNA(steam)
## [1] TRUE
# Fungsi "colSums(is.na(train))"
# Cek jumlah data yang hilang berdasarkan "N/A"
colSums(is.na(steam))
##            appid             name     release_date          english 
##                0                0                0                0 
##        developer        publisher        platforms     required_age 
##                0                6                0                0 
##       categories           genres    steamspy_tags     achievements 
##                0                0                0                0 
## positive_ratings negative_ratings average_playtime  median_playtime 
##                0                0                0                0 
##           owners            price 
##                0                0
  • “Menampilkan Data Yang Hilang”
# Fungsi "train[!complete.cases(steam),]" Menampilkan data yang hilang,
# ditunjukan dengan nilai "NA" pada setiap baris dari kolom :
steam[!complete.cases(steam),]
## # A tibble: 6 × 18
##    appid name  release_…¹ english devel…² publi…³ platf…⁴ requi…⁵ categ…⁶ genres
##    <dbl> <chr> <date>       <dbl> <chr>   <chr>   <chr>     <dbl> <chr>   <chr> 
## 1 270010 Time… 2014-10-21       1 Proton… <NA>    window…       0 Single… Actio…
## 2 334690 Squi… 2015-01-12       1 Sean D… <NA>    windows       0 Single… Actio…
## 3 385770 Time… 2015-07-23       1 Proton… <NA>    window…       0 Single… Actio…
## 4 759830 Gamm… 2018-12-07       1 Ilias … <NA>    window…       0 Single… Actio…
## 5 889530 Sharp 2018-09-01       1 TiredO… <NA>    windows       0 Single… Actio…
## 6 938660 Acht… 2018-10-11       1 Erik S… <NA>    windows       0 Local … Actio…
## # … with 8 more variables: steamspy_tags <chr>, achievements <dbl>,
## #   positive_ratings <dbl>, negative_ratings <dbl>, average_playtime <dbl>,
## #   median_playtime <dbl>, owners <chr>, price <dbl>, and abbreviated variable
## #   names ¹​release_date, ²​developer, ³​publisher, ⁴​platforms, ⁵​required_age,
## #   ⁶​categories
  • “Perubahan Data Sesuai Kebutuhan”
# Menigis nilai N/A dengan "unknown"
steam$publisher[is.na(steam$publisher)] <- "unknown"
# Lakukan pemanggilan data steam$publisher untuk dapat memastikan data N/A sudah terisi dengan "unknown" :
# steam$publisher
  • Menambahkan Kolom ” release_month ”
# Melakukan perubahan tipe data dan menambah kolom "release_month"
steam$release_date <- as.Date(steam$release_date, format="%m/%d/%y")
steam$release_month <-  months(steam$release_date)
  • Pastikan kembali data “N/A” sudah terisi sesuai kebutuhan
steam
## # A tibble: 27,075 × 19
##    appid name  release_…¹ english devel…² publi…³ platf…⁴ requi…⁵ categ…⁶ genres
##    <dbl> <chr> <date>       <dbl> <chr>   <chr>   <chr>     <dbl> <chr>   <chr> 
##  1    10 Coun… 2000-11-01       1 Valve   Valve   window…       0 Multi-… Action
##  2    20 Team… 1999-04-01       1 Valve   Valve   window…       0 Multi-… Action
##  3    30 Day … 2003-05-01       1 Valve   Valve   window…       0 Multi-… Action
##  4    40 Deat… 2001-06-01       1 Valve   Valve   window…       0 Multi-… Action
##  5    50 Half… 1999-11-01       1 Gearbo… Valve   window…       0 Single… Action
##  6    60 Rico… 2000-11-01       1 Valve   Valve   window…       0 Multi-… Action
##  7    70 Half… 1998-11-08       1 Valve   Valve   window…       0 Single… Action
##  8    80 Coun… 2004-03-01       1 Valve   Valve   window…       0 Single… Action
##  9   130 Half… 2001-06-01       1 Gearbo… Valve   window…       0 Single… Action
## 10   220 Half… 2004-11-16       1 Valve   Valve   window…       0 Single… Action
## # … with 27,065 more rows, 9 more variables: steamspy_tags <chr>,
## #   achievements <dbl>, positive_ratings <dbl>, negative_ratings <dbl>,
## #   average_playtime <dbl>, median_playtime <dbl>, owners <chr>, price <dbl>,
## #   release_month <chr>, and abbreviated variable names ¹​release_date,
## #   ²​developer, ³​publisher, ⁴​platforms, ⁵​required_age, ⁶​categories
  • Pastikan kembali data “N/A” sudah tidak ada atau “0”
colSums(is.na(steam))
##            appid             name     release_date          english 
##                0                0                0                0 
##        developer        publisher        platforms     required_age 
##                0                0                0                0 
##       categories           genres    steamspy_tags     achievements 
##                0                0                0                0 
## positive_ratings negative_ratings average_playtime  median_playtime 
##                0                0                0                0 
##           owners            price    release_month 
##                0                0                0

3.2 “Penyesuaian Tipe Data”

Penyesuaian Tipe Data, Sesuaikan Tipe Data Sesuai Kebutuhan

str(steam)
## spec_tbl_df [27,075 × 19] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ appid           : num [1:27075] 10 20 30 40 50 60 70 80 130 220 ...
##  $ name            : chr [1:27075] "Counter-Strike" "Team Fortress Classic" "Day of Defeat" "Deathmatch Classic" ...
##  $ release_date    : Date[1:27075], format: "2000-11-01" "1999-04-01" ...
##  $ english         : num [1:27075] 1 1 1 1 1 1 1 1 1 1 ...
##  $ developer       : chr [1:27075] "Valve" "Valve" "Valve" "Valve" ...
##  $ publisher       : chr [1:27075] "Valve" "Valve" "Valve" "Valve" ...
##  $ platforms       : chr [1:27075] "windows;mac;linux" "windows;mac;linux" "windows;mac;linux" "windows;mac;linux" ...
##  $ required_age    : num [1:27075] 0 0 0 0 0 0 0 0 0 0 ...
##  $ categories      : chr [1:27075] "Multi-player;Online Multi-Player;Local Multi-Player;Valve Anti-Cheat enabled" "Multi-player;Online Multi-Player;Local Multi-Player;Valve Anti-Cheat enabled" "Multi-player;Valve Anti-Cheat enabled" "Multi-player;Online Multi-Player;Local Multi-Player;Valve Anti-Cheat enabled" ...
##  $ genres          : chr [1:27075] "Action" "Action" "Action" "Action" ...
##  $ steamspy_tags   : chr [1:27075] "Action;FPS;Multiplayer" "Action;FPS;Multiplayer" "FPS;World War II;Multiplayer" "Action;FPS;Multiplayer" ...
##  $ achievements    : num [1:27075] 0 0 0 0 0 0 0 0 0 33 ...
##  $ positive_ratings: num [1:27075] 124534 3318 3416 1273 5250 ...
##  $ negative_ratings: num [1:27075] 3339 633 398 267 288 ...
##  $ average_playtime: num [1:27075] 17612 277 187 258 624 ...
##  $ median_playtime : num [1:27075] 317 62 34 184 415 10 83 43 205 402 ...
##  $ owners          : chr [1:27075] "10000000-20000000" "5000000-10000000" "5000000-10000000" "5000000-10000000" ...
##  $ price           : num [1:27075] 7.19 3.99 3.99 3.99 3.99 3.99 7.19 7.19 3.99 7.19 ...
##  $ release_month   : chr [1:27075] "November" "April" "May" "June" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   appid = col_double(),
##   ..   name = col_character(),
##   ..   release_date = col_date(format = ""),
##   ..   english = col_double(),
##   ..   developer = col_character(),
##   ..   publisher = col_character(),
##   ..   platforms = col_character(),
##   ..   required_age = col_double(),
##   ..   categories = col_character(),
##   ..   genres = col_character(),
##   ..   steamspy_tags = col_character(),
##   ..   achievements = col_double(),
##   ..   positive_ratings = col_double(),
##   ..   negative_ratings = col_double(),
##   ..   average_playtime = col_double(),
##   ..   median_playtime = col_double(),
##   ..   owners = col_character(),
##   ..   price = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
# Gunakan subset untuk mengelompokan kolom :
steaminteger <-
  steam[,c("positive_ratings", "negative_ratings", "average_playtime")]
steamkategori <-
  steam[,c("developer", "publisher", "platforms")]
# Fungsi "lapply" untuk mengubah tipe data lebih dari satu :
steaminteger <-
  lapply(steam[,c("positive_ratings", "negative_ratings", "average_playtime")], as.integer)
steamkategori <-
  lapply(steam[,c("developer", "publisher", "platforms")], as.factor)
steam$price <- as.numeric(steam$price)
str(steam)
## spec_tbl_df [27,075 × 19] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ appid           : num [1:27075] 10 20 30 40 50 60 70 80 130 220 ...
##  $ name            : chr [1:27075] "Counter-Strike" "Team Fortress Classic" "Day of Defeat" "Deathmatch Classic" ...
##  $ release_date    : Date[1:27075], format: "2000-11-01" "1999-04-01" ...
##  $ english         : num [1:27075] 1 1 1 1 1 1 1 1 1 1 ...
##  $ developer       : chr [1:27075] "Valve" "Valve" "Valve" "Valve" ...
##  $ publisher       : chr [1:27075] "Valve" "Valve" "Valve" "Valve" ...
##  $ platforms       : chr [1:27075] "windows;mac;linux" "windows;mac;linux" "windows;mac;linux" "windows;mac;linux" ...
##  $ required_age    : num [1:27075] 0 0 0 0 0 0 0 0 0 0 ...
##  $ categories      : chr [1:27075] "Multi-player;Online Multi-Player;Local Multi-Player;Valve Anti-Cheat enabled" "Multi-player;Online Multi-Player;Local Multi-Player;Valve Anti-Cheat enabled" "Multi-player;Valve Anti-Cheat enabled" "Multi-player;Online Multi-Player;Local Multi-Player;Valve Anti-Cheat enabled" ...
##  $ genres          : chr [1:27075] "Action" "Action" "Action" "Action" ...
##  $ steamspy_tags   : chr [1:27075] "Action;FPS;Multiplayer" "Action;FPS;Multiplayer" "FPS;World War II;Multiplayer" "Action;FPS;Multiplayer" ...
##  $ achievements    : num [1:27075] 0 0 0 0 0 0 0 0 0 33 ...
##  $ positive_ratings: num [1:27075] 124534 3318 3416 1273 5250 ...
##  $ negative_ratings: num [1:27075] 3339 633 398 267 288 ...
##  $ average_playtime: num [1:27075] 17612 277 187 258 624 ...
##  $ median_playtime : num [1:27075] 317 62 34 184 415 10 83 43 205 402 ...
##  $ owners          : chr [1:27075] "10000000-20000000" "5000000-10000000" "5000000-10000000" "5000000-10000000" ...
##  $ price           : num [1:27075] 7.19 3.99 3.99 3.99 3.99 3.99 7.19 7.19 3.99 7.19 ...
##  $ release_month   : chr [1:27075] "November" "April" "May" "June" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   appid = col_double(),
##   ..   name = col_character(),
##   ..   release_date = col_date(format = ""),
##   ..   english = col_double(),
##   ..   developer = col_character(),
##   ..   publisher = col_character(),
##   ..   platforms = col_character(),
##   ..   required_age = col_double(),
##   ..   categories = col_character(),
##   ..   genres = col_character(),
##   ..   steamspy_tags = col_character(),
##   ..   achievements = col_double(),
##   ..   positive_ratings = col_double(),
##   ..   negative_ratings = col_double(),
##   ..   average_playtime = col_double(),
##   ..   median_playtime = col_double(),
##   ..   owners = col_character(),
##   ..   price = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
# Mengubah nama kolom sesuai keinginan :
colnames(steam)[colnames(steam)=="average_playtime"]= "Ratetime_players"
colnames(steam)[colnames(steam)=="positive_ratings"]= "Likes"
colnames(steam)[colnames(steam)=="negative_ratings"]= "Dislike"

3.3 “Proses Pengolahan Data”

str(steam)
## spec_tbl_df [27,075 × 19] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ appid           : num [1:27075] 10 20 30 40 50 60 70 80 130 220 ...
##  $ name            : chr [1:27075] "Counter-Strike" "Team Fortress Classic" "Day of Defeat" "Deathmatch Classic" ...
##  $ release_date    : Date[1:27075], format: "2000-11-01" "1999-04-01" ...
##  $ english         : num [1:27075] 1 1 1 1 1 1 1 1 1 1 ...
##  $ developer       : chr [1:27075] "Valve" "Valve" "Valve" "Valve" ...
##  $ publisher       : chr [1:27075] "Valve" "Valve" "Valve" "Valve" ...
##  $ platforms       : chr [1:27075] "windows;mac;linux" "windows;mac;linux" "windows;mac;linux" "windows;mac;linux" ...
##  $ required_age    : num [1:27075] 0 0 0 0 0 0 0 0 0 0 ...
##  $ categories      : chr [1:27075] "Multi-player;Online Multi-Player;Local Multi-Player;Valve Anti-Cheat enabled" "Multi-player;Online Multi-Player;Local Multi-Player;Valve Anti-Cheat enabled" "Multi-player;Valve Anti-Cheat enabled" "Multi-player;Online Multi-Player;Local Multi-Player;Valve Anti-Cheat enabled" ...
##  $ genres          : chr [1:27075] "Action" "Action" "Action" "Action" ...
##  $ steamspy_tags   : chr [1:27075] "Action;FPS;Multiplayer" "Action;FPS;Multiplayer" "FPS;World War II;Multiplayer" "Action;FPS;Multiplayer" ...
##  $ achievements    : num [1:27075] 0 0 0 0 0 0 0 0 0 33 ...
##  $ Likes           : num [1:27075] 124534 3318 3416 1273 5250 ...
##  $ Dislike         : num [1:27075] 3339 633 398 267 288 ...
##  $ Ratetime_players: num [1:27075] 17612 277 187 258 624 ...
##  $ median_playtime : num [1:27075] 317 62 34 184 415 10 83 43 205 402 ...
##  $ owners          : chr [1:27075] "10000000-20000000" "5000000-10000000" "5000000-10000000" "5000000-10000000" ...
##  $ price           : num [1:27075] 7.19 3.99 3.99 3.99 3.99 3.99 7.19 7.19 3.99 7.19 ...
##  $ release_month   : chr [1:27075] "November" "April" "May" "June" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   appid = col_double(),
##   ..   name = col_character(),
##   ..   release_date = col_date(format = ""),
##   ..   english = col_double(),
##   ..   developer = col_character(),
##   ..   publisher = col_character(),
##   ..   platforms = col_character(),
##   ..   required_age = col_double(),
##   ..   categories = col_character(),
##   ..   genres = col_character(),
##   ..   steamspy_tags = col_character(),
##   ..   achievements = col_double(),
##   ..   positive_ratings = col_double(),
##   ..   negative_ratings = col_double(),
##   ..   average_playtime = col_double(),
##   ..   median_playtime = col_double(),
##   ..   owners = col_character(),
##   ..   price = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
# Fungsi "range" mengetahui jarak nilai Terendah sampai tertinggi pada data
# sehingga dapat mengetahui selisih jarak antara nilai :
range(steam$Likes)
## [1]       0 2644404
range(steam$Dislike)
## [1]      0 487076
# Mencari nilai rata rata (mean) dari kolom "Like"
mean(steam$Likes) 
## [1] 1000.559
mean(steam$Dislike)
## [1] 211.0271
steam
## # A tibble: 27,075 × 19
##    appid name  release_…¹ english devel…² publi…³ platf…⁴ requi…⁵ categ…⁶ genres
##    <dbl> <chr> <date>       <dbl> <chr>   <chr>   <chr>     <dbl> <chr>   <chr> 
##  1    10 Coun… 2000-11-01       1 Valve   Valve   window…       0 Multi-… Action
##  2    20 Team… 1999-04-01       1 Valve   Valve   window…       0 Multi-… Action
##  3    30 Day … 2003-05-01       1 Valve   Valve   window…       0 Multi-… Action
##  4    40 Deat… 2001-06-01       1 Valve   Valve   window…       0 Multi-… Action
##  5    50 Half… 1999-11-01       1 Gearbo… Valve   window…       0 Single… Action
##  6    60 Rico… 2000-11-01       1 Valve   Valve   window…       0 Multi-… Action
##  7    70 Half… 1998-11-08       1 Valve   Valve   window…       0 Single… Action
##  8    80 Coun… 2004-03-01       1 Valve   Valve   window…       0 Single… Action
##  9   130 Half… 2001-06-01       1 Gearbo… Valve   window…       0 Single… Action
## 10   220 Half… 2004-11-16       1 Valve   Valve   window…       0 Single… Action
## # … with 27,065 more rows, 9 more variables: steamspy_tags <chr>,
## #   achievements <dbl>, Likes <dbl>, Dislike <dbl>, Ratetime_players <dbl>,
## #   median_playtime <dbl>, owners <chr>, price <dbl>, release_month <chr>, and
## #   abbreviated variable names ¹​release_date, ²​developer, ³​publisher,
## #   ⁴​platforms, ⁵​required_age, ⁶​categories
# Ranking 2 teratas berdasarkan banyaknya data pada "kolom" dengan menampilkan seluruh data
steam_name <- sort(table(steam$genres), decreasing = T)
steam_name <-  head(steam_name, 2)
steam_name
## 
## Action;Indie Casual;Indie 
##         1852         1482
barplot(sort(steam_name), main = "Genre Terfavorit",
     xlab = "Jumlah Pemain", xlim = c(0,2000), col = "#F7290A", horiz = T)

steam_name1 <- sort(table(steam$genres), decreasing = T)
steam_name1 <-  tail(steam_name1, 2)
steam_name1
## 
## Violent;Strategy   Web Publishing 
##                1                1
barplot(sort(steam_name1), main = "Genre Terbawah",
     xlab = "Jumlah Pemain", xlim = c(0,2), col = "#F7290A", horiz = T)

steam_name2 <- sort(xtabs(Likes ~ name, steam), decreasing = T)
steam_name2 <-  head(steam_name2, 2)
steam_name2
## name
## Counter-Strike: Global Offensive                           Dota 2 
##                          2644404                           863507
barplot(sort(steam_name2), main = "Game Terfavorit Berdasarkan Likes",
     xlab = "Jumlah Likes", xlim = c(0,3000000), col = "#F7290A", horiz = T)

#unique(steam$developer)
steamset <-  steam %>% filter(steam$developer %in% c("Valve", "Gearbox Software", "Valve;Hidden Path Entertainment")) %>% group_by()
steamset
## # A tibble: 34 × 19
##    appid name  release_…¹ english devel…² publi…³ platf…⁴ requi…⁵ categ…⁶ genres
##    <dbl> <chr> <date>       <dbl> <chr>   <chr>   <chr>     <dbl> <chr>   <chr> 
##  1    10 Coun… 2000-11-01       1 Valve   Valve   window…       0 Multi-… Action
##  2    20 Team… 1999-04-01       1 Valve   Valve   window…       0 Multi-… Action
##  3    30 Day … 2003-05-01       1 Valve   Valve   window…       0 Multi-… Action
##  4    40 Deat… 2001-06-01       1 Valve   Valve   window…       0 Multi-… Action
##  5    50 Half… 1999-11-01       1 Gearbo… Valve   window…       0 Single… Action
##  6    60 Rico… 2000-11-01       1 Valve   Valve   window…       0 Multi-… Action
##  7    70 Half… 1998-11-08       1 Valve   Valve   window…       0 Single… Action
##  8    80 Coun… 2004-03-01       1 Valve   Valve   window…       0 Single… Action
##  9   130 Half… 2001-06-01       1 Gearbo… Valve   window…       0 Single… Action
## 10   220 Half… 2004-11-16       1 Valve   Valve   window…       0 Single… Action
## # … with 24 more rows, 9 more variables: steamspy_tags <chr>,
## #   achievements <dbl>, Likes <dbl>, Dislike <dbl>, Ratetime_players <dbl>,
## #   median_playtime <dbl>, owners <chr>, price <dbl>, release_month <chr>, and
## #   abbreviated variable names ¹​release_date, ²​developer, ³​publisher,
## #   ⁴​platforms, ⁵​required_age, ⁶​categories
# ggplot(steamset, aes(name, fill = steam$Ratetime_players)) +
#   geom_bar(, position = "dodge") +
#   xlab("Nama Game")+
#   ylab("Waktu Main")+
#   scale_fill_discrete("Indikator") + ggtitle("Data Penumpang Berdasarkan Kelamin")