Práca s údajmi v R

Author

Dávid Švihra
(s využitím ChatGPT)

Published

October 1, 2026

knitr::opts_chunk$set(
  echo = TRUE,
  message = FALSE,
  warning = FALSE
)

Predstavenie databázy

Pre svoje zadanie som si vybral databázu počítačových hier z platformy Steam. Databáza obsahuje údaje o hrách, ich dátumoch vydania, cenách, žánroch a hodnoteniach.

Databázu plánujem využiť aj pri ďalších cvičeniach.Zaujíma ma predovšetkým vývoj počtu vydaných hier v jednotlivých rokoch.

1. Náhľad na databázu

Databázu som si otvoril v tabuľkovom procesore Excel. Každý riadok predstavuje jednu hru a jednotlivé stĺpce obsahujú informácie o nej.

Pôvodná databáza otvorená v Exceli

2. Import údajov

Keďže databáza obsahuje veľa stĺpcov a textových údajov, vyberiem iba premenné potrebné pre analýzu.

library(readr)
library(dplyr)
library(ggplot2)
library(knitr)
udaje <- read_csv(
  "games.csv",
  col_select = c(
    "AppID", "Name", "Release date",
    "Price", "Genres", "Positive", "Negative"
  ),
  show_col_types = FALSE
)

head(udaje)
# A tibble: 6 × 7
    AppID Name                  `Release date` Price Genres    Positive Negative
    <dbl> <chr>                 <chr>          <dbl> <chr>        <dbl>    <dbl>
1   20200 Galactic Bowling      Oct 21, 2008   20.0  Casual,I…        6       11
2  655370 Train Bandit          Oct 12, 2017    0.99 Action,I…       53        5
3 1732930 Jolt Project          Nov 17, 2021    4.99 Action,A…        0        0
4 1355720 Henosis™              Jul 23, 2020    5.99 Adventur…        3        0
5 1139950 Two Weeks in Painland Feb 3, 2020     0    Adventur…       50        8
6 1469160 Wartune Reborn        Feb 26, 2021    0    Adventur…       87       49

Pozriem si názvy jednotlivých stĺpcov a základné informácie o databáze.

colnames(udaje)
[1] "AppID"        "Name"         "Release date" "Price"        "Genres"      
[6] "Positive"     "Negative"    
dim(udaje)
[1] 97410     7
summary(udaje)
     AppID                Name          Release date       Price         
 Min.   :     10   Length   :97410   Length   :97410   Min.   :   0.000  
 1st Qu.: 847793   N.unique :96508   N.unique : 4709   1st Qu.:   0.990  
 Median :1489990   N.blank  :    0   N.blank  :    0   Median :   4.190  
 Mean   :1524636   Min.nchar:    1   Min.nchar:    8   Mean   :   7.086  
 3rd Qu.:2180648   Max.nchar:  207   Max.nchar:   12   3rd Qu.:   9.990  
 Max.   :3199580   NAs      :    6                     Max.   : 999.980  
       Genres         Positive            Negative       
 Length   :97410   Min.   :      0.0   Min.   :     0.0  
 N.unique : 2842   1st Qu.:      0.0   1st Qu.:     0.0  
 N.blank  :    0   Median :      5.0   Median :     1.0  
 Min.nchar:    3   Mean   :    848.9   Mean   :   141.1  
 Max.nchar:  236   3rd Qu.:     35.0   3rd Qu.:    10.0  
 NAs      : 4841   Max.   :5764420.0   Max.   :895978.0  

3. Čistenie údajov

Úprava názvov premenných

Podobne ako v cvičení 4 si upravím názvy stĺpcov tak, aby sa mi s nimi jednoduchšie pracovalo.

udaje <- udaje %>%
  rename(
    ID = AppID,
    Nazov = Name,
    Datum = `Release date`,
    Cena = Price,
    Zanre = Genres,
    Pozitivne = Positive,
    Negativne = Negative
  )

head(udaje)
# A tibble: 6 × 7
       ID Nazov                 Datum         Cena Zanre     Pozitivne Negativne
    <dbl> <chr>                 <chr>        <dbl> <chr>         <dbl>     <dbl>
1   20200 Galactic Bowling      Oct 21, 2008 20.0  Casual,I…         6        11
2  655370 Train Bandit          Oct 12, 2017  0.99 Action,I…        53         5
3 1732930 Jolt Project          Nov 17, 2021  4.99 Action,A…         0         0
4 1355720 Henosis™              Jul 23, 2020  5.99 Adventur…         3         0
5 1139950 Two Weeks in Painland Feb 3, 2020   0    Adventur…        50         8
6 1469160 Wartune Reborn        Feb 26, 2021  0    Adventur…        87        49

Kontrola chýbajúcich údajov

Pomocou funkcie is.na() zistím počet chýbajúcich hodnôt v jednotlivých stĺpcoch.

colSums(is.na(udaje))
       ID     Nazov     Datum      Cena     Zanre Pozitivne Negativne 
        0         6         0         0      4841         0         0 

Odstránenie neúplných záznamov

Odstránim záznamy bez názvu hry, dátumu vydania alebo ceny.

udaje1 <- udaje %>%
  filter(
    !is.na(Nazov),
    !is.na(Datum),
    !is.na(Cena)
  ) %>%
  distinct(ID, .keep_all = TRUE)

head(udaje1)
# A tibble: 6 × 7
       ID Nazov                 Datum         Cena Zanre     Pozitivne Negativne
    <dbl> <chr>                 <chr>        <dbl> <chr>         <dbl>     <dbl>
1   20200 Galactic Bowling      Oct 21, 2008 20.0  Casual,I…         6        11
2  655370 Train Bandit          Oct 12, 2017  0.99 Action,I…        53         5
3 1732930 Jolt Project          Nov 17, 2021  4.99 Action,A…         0         0
4 1355720 Henosis™              Jul 23, 2020  5.99 Adventur…         3         0
5 1139950 Two Weeks in Painland Feb 3, 2020   0    Adventur…        50         8
6 1469160 Wartune Reborn        Feb 26, 2021  0    Adventur…        87        49

Náhľad na upravenú databázu

Po základnom čistení som vytvoril upravenú verziu databázy, ktorú využijem na ďalšiu analýzu.

Upravená databáza v Exceli

4. Práca s údajmi

Výber a triedenie

Vyberiem hry, ktorých cena je vyššia ako 30 a zoradím ich od najdrahších.

udaje1 %>%
  filter(Cena > 30) %>%
  arrange(desc(Cena)) %>%
  select(Nazov, Cena, Zanre) %>%
  head(10) %>%
  kable()
Nazov Cena Zanre
The Leverage Game 999.98 Indie,Simulation
The Leverage Game Business Edition 999.98 Indie,Simulation
Ascent Free-Roaming VR Experience 999.00 Action
True Love 500.00 Action,Adventure,Casual,Indie
Aartform Curvy 3D 3.0 299.90 Animation & Modeling
Houdini Indie 269.99 Animation & Modeling,Design & Illustration,Video Production,Game Development
VEGAS 19 Edit - Steam Edition 249.00 Video Production
灰烬行星与填鸭少女 199.99 Casual,Indie
Earthquake escape 199.99 Simulation
安全教育 199.99 Adventure

Vytvorenie novej premennej

Rozdelím hry na bezplatné a platené.

udaje1 <- udaje1 %>%
  mutate(
    Typ = ifelse(Cena == 0, "Zadarmo", "Platená")
  )

udaje1 %>%
  count(Typ) %>%
  kable()
Typ n
Platená 77688
Zadarmo 19716

5. Grafy

Graf č. 1 – Ceny hier

Pomocou histogramu zobrazím rozdelenie cien hier.

ggplot(subset(udaje1, Cena >= 0 & Cena <= 50), aes(x = Cena)) +
  geom_histogram(binwidth = 5, boundary = 0,
                 fill = "lightblue", color = "darkblue") +
  scale_x_continuous(
    breaks = seq(2.5, 47.5, 5),
    labels = paste(seq(0, 45, 5), seq(5, 50, 5), sep = "–")
  ) +
  labs(title = "Rozdelenie cien hier na Steame",
       x = "Cenové intervaly", y = "Počet hier") +
  theme_minimal()

Graf č. 2 – Počet hier podľa roku vydania

Z dátumu vydania vytvorím premennú Rok a zobrazím počet vydaných hier v jednotlivých rokoch.

library(lubridate)

udaje1 <- udaje1 %>%
  mutate(Rok = year(mdy(Datum, quiet = TRUE)))

rocne_udaje <- udaje1 %>%
  filter(!is.na(Rok), Rok <= 2025) %>%
  count(Rok)

ggplot(rocne_udaje, aes(x = Rok, y = n)) +
  geom_line(color = "darkblue", linewidth = 1) +
  geom_point(color = "darkblue") +
  labs(
    title = "Vývoj počtu vydaných hier",
    x = "Rok vydania",
    y = "Počet hier"
  ) +
  theme_minimal()

6. Základné štatistiky

Vypočítam základné štatistiky cien hier.

udaje1 %>%
  summarise(
    Pocet = n(),
    Priemer = mean(Cena),
    Median = median(Cena),
    Minimum = min(Cena),
    Maximum = max(Cena)
  ) %>%
  kable(digits = 2)
Pocet Priemer Median Minimum Maximum
97404 7.09 4.19 0 999.98

7. Záver

V zadaní som pracoval s databázou počítačových hier Steam v spolupráci s ChatGPT. Naučil som sa importovať údaje do prostredia RStudio, upravovať názvy premenných, kontrolovať chýbajúce hodnoty a filtrovať záznamy. Vytvoril som tiež základné tabuľky a grafy, ktoré umožňujú jednoduchšie analyzovať herný trh.