Analýza e-commerce predaja

Táto práca ukazuje, ako možno pomocou jazyka R analyzovať údaje o predaji vybraných e-shopov (Bonami, Notino, Lidl, Decathlon, Martinus).
Cieľom je naučiť sa manipulovať s databázou, vytvárať nové premenné, vizualizovať výsledky a aplikovať základné štatistické testy.


1. Tradičná práca s databázou

Firma <- c("Bonami", "Notino", "Lidl", "Decathlon", "Martinus")
Kategoria <- c("Nábytok", "Kozmetika", "Potraviny", "Šport", "Knihy")
Predaj <- c(120000, 180000, 250000, 160000, 90000)
Spokojnost <- c(4.5, 4.2, 4.0, 4.3, 4.8)

eshop <- data.frame(Firma, Kategoria, Predaj, Spokojnost)
eshop
##       Firma Kategoria Predaj Spokojnost
## 1    Bonami   Nábytok 120000        4.5
## 2    Notino Kozmetika 180000        4.2
## 3      Lidl Potraviny 250000        4.0
## 4 Decathlon     Šport 160000        4.3
## 5  Martinus     Knihy  90000        4.8

2. Práca so stĺpcami a riadkami

eshop$Predaj
## [1] 120000 180000 250000 160000  90000
mean(eshop$Predaj)
## [1] 160000
eshop[eshop$Firma == "Notino", ]
##    Firma Kategoria Predaj Spokojnost
## 2 Notino Kozmetika 180000        4.2
eshop[1, ]
##    Firma Kategoria Predaj Spokojnost
## 1 Bonami   Nábytok 120000        4.5
eshop[, c("Firma", "Predaj")]
##       Firma Predaj
## 1    Bonami 120000
## 2    Notino 180000
## 3      Lidl 250000
## 4 Decathlon 160000
## 5  Martinus  90000
summary(eshop)
##     Firma            Kategoria             Predaj         Spokojnost  
##  Length:5           Length:5           Min.   : 90000   Min.   :4.00  
##  Class :character   Class :character   1st Qu.:120000   1st Qu.:4.20  
##  Mode  :character   Mode  :character   Median :160000   Median :4.30  
##                                        Mean   :160000   Mean   :4.36  
##                                        3rd Qu.:180000   3rd Qu.:4.50  
##                                        Max.   :250000   Max.   :4.80

3. Pridanie nových údajov

novy_eshop <- data.frame(
  Firma = "Planeo",
  Kategoria = "Elektronika",
  Predaj = 110000,
  Spokojnost = 4.1
)

eshop <- rbind(eshop, novy_eshop)
eshop
##       Firma   Kategoria Predaj Spokojnost
## 1    Bonami     Nábytok 120000        4.5
## 2    Notino   Kozmetika 180000        4.2
## 3      Lidl   Potraviny 250000        4.0
## 4 Decathlon       Šport 160000        4.3
## 5  Martinus       Knihy  90000        4.8
## 6    Planeo Elektronika 110000        4.1

4. Vizualizácia tabuľky pomocou kableExtra

library(knitr)
library(kableExtra)

kable(
  eshop,
  caption = "Základná databáza e-shopov"
) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"),
    full_width = FALSE,
    position = "center"
  )
Základná databáza e-shopov
Firma Kategoria Predaj Spokojnost
Bonami Nábytok 120000 4.5
Notino Kozmetika 180000 4.2
Lidl Potraviny 250000 4.0
Decathlon Šport 160000 4.3
Martinus Knihy 90000 4.8
Planeo Elektronika 110000 4.1

5. Farebná verzia tabuľky

eshop$Predaj <- cell_spec(
  eshop$Predaj,
  "html",
  color = "white",
  background = spec_color(as.numeric(eshop$Predaj), end = 0.7)
)

kable(
  eshop,
  format = "html",
  escape = FALSE,
  caption = "Predaj e-shopov s farebným stĺpcom"
) %>%
  kable_styling(bootstrap_options = c("striped", "hover"))
Predaj e-shopov s farebným stĺpcom
Firma Kategoria Predaj Spokojnost
Bonami Nábytok 120000 4.5
Notino Kozmetika 180000 4.2
Lidl Potraviny 250000 4.0
Decathlon Šport 160000 4.3
Martinus Knihy 90000 4.8
Planeo Elektronika 110000 4.1

6. Moderná práca s údajmi – tidyverse

library(tidyverse)

eshop_data <- data.frame(
  Firma = c("Bonami", "Notino", "Lidl", "Decathlon", "Martinus", "Planeo"),
  Kategoria = c("Nábytok", "Kozmetika", "Potraviny", "Šport", "Knihy", "Elektronika"),
  Predaj = c(120000, 180000, 250000, 160000, 90000, 110000),
  Spokojnost = c(4.5, 4.2, 4.0, 4.3, 4.8, 4.1)
)

eshop_data %>%
  filter(Predaj > 100000) %>%
  arrange(desc(Predaj)) %>%
  kable(caption = "E-shopy s predajom nad 100 000 €") %>%
  kable_styling(full_width = FALSE)
E-shopy s predajom nad 100 000 €
Firma Kategoria Predaj Spokojnost
Lidl Potraviny 250000 4.0
Notino Kozmetika 180000 4.2
Decathlon Šport 160000 4.3
Bonami Nábytok 120000 4.5
Planeo Elektronika 110000 4.1

7. Zoskupenie a sumarizácia

eshop_data %>%
  group_by(Kategoria) %>%
  summarise(
    PriemernýPredaj = mean(Predaj),
    PriemernáSpokojnosť = mean(Spokojnost)
  ) %>%
  kable(caption = "Priemerné hodnoty podľa kategórie") %>%
  kable_styling(full_width = FALSE)
Priemerné hodnoty podľa kategórie
Kategoria PriemernýPredaj PriemernáSpokojnosť
Elektronika 110000 4.1
Knihy 90000 4.8
Kozmetika 180000 4.2
Nábytok 120000 4.5
Potraviny 250000 4.0
Šport 160000 4.3

8. Nové premenné

eshop_data %>%
  mutate(
    Výkon = case_when(
      Predaj >= 200000 ~ "S",
      Predaj >= 150000 ~ "A",
      Predaj >= 100000 ~ "B",
      TRUE ~ "C"
    ),
    OdchýlkaOdLídra = max(Predaj) - Predaj
  ) %>%
  kable(caption = "Hodnotenie výkonnosti e-shopov") %>%
  kable_styling(full_width = FALSE)
Hodnotenie výkonnosti e-shopov
Firma Kategoria Predaj Spokojnost Výkon OdchýlkaOdLídra
Bonami Nábytok 120000 4.5 B 130000
Notino Kozmetika 180000 4.2 A 70000
Lidl Potraviny 250000 4.0 S 0
Decathlon Šport 160000 4.3 A 90000
Martinus Knihy 90000 4.8 C 160000
Planeo Elektronika 110000 4.1 B 140000

9. Vizualizácie

library(ggplot2)

ggplot(eshop_data, aes(x = Firma, y = Predaj, fill = Kategoria)) +
  geom_col() +
  theme_minimal() +
  labs(title = "Mesačný predaj podľa firmy", x = "Firma", y = "Predaj (€)")

ggplot(eshop_data, aes(x = Spokojnost, y = Predaj, color = Firma)) +
  geom_point(size = 3) +
  theme_minimal() +
  labs(title = "Vzťah medzi spokojnosťou a predajom", x = "Spokojnosť", y = "Predaj (€)")


10. Základné štatistiky

eshop_data %>%
  summarise(
    n = n(),
    mean = mean(Predaj),
    sd = sd(Predaj),
    min = min(Predaj),
    q25 = quantile(Predaj, 0.25),
    median = median(Predaj),
    q75 = quantile(Predaj, 0.75),
    max = max(Predaj)
  ) %>%
  kable(caption = "Základné štatistiky predaja") %>%
  kable_styling(full_width = FALSE)
Základné štatistiky predaja
n mean sd min q25 median q75 max
6 151666.7 58452.26 90000 112500 140000 175000 250000

11. Štatistické testy

T-test – porovnanie dvoch skupín

vysoka <- eshop_data$Predaj[eshop_data$Spokojnost >= 4.4]
nizka <- eshop_data$Predaj[eshop_data$Spokojnost < 4.4]

t.test(vysoka, nizka)
## 
##  Welch Two Sample t-test
## 
## data:  vysoka and nizka
## t = -2.1433, df = 3.9677, p-value = 0.09928
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -160970.09   20970.09
## sample estimates:
## mean of x mean of y 
##    105000    175000

Lineárna regresia – predikcia predaja

model <- lm(Predaj ~ Spokojnost, data = eshop_data)
summary(model)
## 
## Call:
## lm(formula = Predaj ~ Spokojnost, data = eshop_data)
## 
## Residuals:
##      1      2      3      4      5      6 
##  -5486  11673  53113   5953   7354 -72607 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)   768093     301902   2.544   0.0637 .
## Spokojnost   -142802      69805  -2.046   0.1102  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 45690 on 4 degrees of freedom
## Multiple R-squared:  0.5113, Adjusted R-squared:  0.3891 
## F-statistic: 4.185 on 1 and 4 DF,  p-value: 0.1102

12. Záver

Táto analýza ukazuje, že systematická práca s údajmi umožňuje firmám lepšie porozumieť predajným trendom a spokojnosti zákazníkov.
Moderné metódy ako Tidyverse, ggplot2 a kableExtra pomáhajú vizualizovať výsledky a podporujú rozhodovanie založené na dátach.