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
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.