tpetric7.github.io

Follow me on GitHub

```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE)


# 0. Programi

```{r}
library(tidyverse)
library(scales)
library(tidymodels)
library(tidytext)
library(readxl)

1. Podatki

Podatki in posamezne naloge za delo z Excelom so iz seminarja dr. Simone Sternad Zabukovšek in mag. Zdenka Deželaka (Univerza v Mariboru, 21.5.2021).

Primerjamo z Excelom.

R: Oba delovna lista iz datoteke “Narocila.xlsx”) shranjujemo kot samostojni tabeli z imenoma “orders” in “zaposleni”.

orders = read_xlsx("data/Narocilo.xlsx", sheet = "Orders")
zaposleni = read_xlsx("data/Narocilo.xlsx", sheet = "Zaposleni")

Poglejmo prve podatke:

head(orders)
head(zaposleni)

2. Število podatkov v nizu

R: Načinov je več.

nrow(orders) # vrstice
ncol(orders) # stolpci
dim(orders) # vrstice x stolpci (dimenzije)

3. Lookup (Excel)

Excel (lookup): Na delovnem listu Zaposleni dodajte:

  • V celico P1 napišite besedilo »Vpišite številko ID«, v celici P2 vpišite besedilo »Telefonska številka«, v celico P3 pa »Datum zaposlitve«.
  • Nastavite, da se bo na podlagi vpisane ID številke v celici Q1, v celico Q2 izpisala telefonska številka (namig: Lookup).
  • Nastavite, da se bo na podlagi vpisane ID številke v celici Q1, v celico Q3 izpisal datum zaposlitve (namig: Lookup).

R:

zaposleni %>% 
  select(EmployeeID, HomePhone, HireDate) %>% 
  filter(EmployeeID == 1)

4. Vlookup, &, Concat

Excel: Na delovnem listu Orders dodajte: o Stolpec Priimek, v katerem naj bo izpisan Priimek zaposlenega glede na ID zaposlenega (namig: Vlookup). o Stolpec Ime, katerem naj bo izpisan Ime zaposlenega glede na ID zaposlenega o Stolpec Ime in priimek (združite predhodna dva). Preverite različne možnosti: • Bliskovita zapolnitev. • Formula (=Stolpec1&” “&Stolpec2). • Funkcija (CONCAT).

R: Podatkovna niza “orders” in “zaposleni” imata skupen stolpec “EmployeeID”. Ta bo osnova za združevanje obeh podatkovnih nizov. Nadaljnje iskanje ali filtriranje bo tako enostavno.

(zdruzena = orders %>% 
  left_join(zaposleni, by = "EmployeeID", keep = FALSE)
)

Novo obliko tabele (gl. spodaj) bi lahko shranil pod novim imenom (npr. “zdruzena_nova”). Prvotna tabela “zdruzena” ostane, kot jo vidite zgoraj.

zdruzena %>% 
  unite(EmployeeName, LastName:FirstName, sep = " ")

(zdruzena_nova = zdruzena %>% 
  unite(EmployeeName, c(FirstName, LastName), sep = " ")
)

5. Transpose

Excel: Na nov delovni list kopirajte območje A1:M10 iz delovnega lista Zaposleni tako, da zamenjate vrstice s stolpci. o Izbrišite prvo vrstico. o Preimenujte delovni list v Vir.

R: Transponiranje tabele ni potrebno, ker smo prej že ustvarili združen podatkovni niz. Funkcija “t()” (tj. transpose) sicer deluje podobno kot v Excelu.

vir = as.data.frame(t(zaposleni))

(vir = vir[-1,] %>% # izbrišemo prvo vrstico
  rownames_to_column(var = "Lastnosti") # nov stolpec
)

6. Dvojniki, razdružitev

Excel: Z delovnega lista Orders kopirajte na nov delovni list stolpec Ime in Priimek (kot vrednosti). o Preimenujte delovni list v Kontakt. o Odstranite dvojnike iz celotnega stolpca. o Razdružite ime in priimek v ločena stolpca. o V naslednji stolpec v prvo celico napišite Rojstni datum in v stolpcu s pomočjo funkcije vstavite rojstne datume zaposlenih s tabele delovnega lista Vir (namig: Hlookup). Nastavite kratko obliko datuma. o V naslednji stolpec v prvo celico napišite Telefon in v stolpcu s pomočjo funkcije vstavite še telefonske številke zaposlenih.

R:

(kontakt = zdruzena_nova %>% 
  distinct(EmployeeName, .keep_all = T) %>% 
  separate(EmployeeName, into = c("Ime", "Priimek")) %>% 
  select(Ime, Priimek, Title, BirthDate, HomePhone)
)

7. Xlookup

Excel: Postavite se na delovni list Zaposleni. o V celico S1 napišite besedilo »Vpišite ime«, v celici S2 vpišite besedilo »Telefonska številka«, v celico S3 pa »Naslov«. o Nastavite, da se bo na podlagi vpisanega imena v celici T1, v celico T2 izpisala telefonska številka (namig: Xlookup). o Nastavite, da se bo na podlagi vpisanega imena v celici T1, v celico T3 izpisal celotni naslov – Adress, City, Region, PostalCode, Country) (namig: Xlookup).

R:

zdruzena_nova %>% 
  filter(EmployeeName == "Steven Buchanan") %>% 
  select(EmployeeName, HomePhone, Address:Country) %>% 
  distinct() %>% 
  unite(Naslov, Address:Country, sep = ", ") %>% 
  rename(Telefon = HomePhone,
         Zaposleni = EmployeeName)

8. Index, Match

Excel: Postavite se na delovni list Zaposleni v celico P6 in izpišite, kaj se vam nahaja v vrstici 5 in stolpcu 8 (namig: index). • V celico P7 izpišite številko vrstice, v kateri se nahaja priimek Fuller (namig: match). • Postavite se na delovni list Orders, v naslednji stolpec v prvo celico napišite Št. vrstice, ter na podlagi priimka poiščite v kateri vrstici se priimek nahaja v stolpcu Priimek v tabeli Zaposleni (namig: match). • Postavite se na delovni list Orders, v naslednji stolpec v prvo celico napišite Title, ter na podlagi stolpca Št. vrstice poiščite naziv zaposlenega iz tabele Zaposleni (stolpec Title; namig: index). • Postavite se na delovni list Orders, v naslednji stolpec v prvo celico napišite Title, ter na podlagi priimka s pomočjo funkcij Index in Match vstavite naziv zaposlenega s tabele delovnega lista Zaposleni. • V naslednji stolpec v prvo celico napišite Naslavljanje, ter na podlagi priimka s pomočjo funkcij Index in Match vstavite obliko naslavljanja zaposlenega s tabele delovnega lista Zaposleni.

zaposleni[5,8] # vrstica 5, stolpec 8

zaposleni %>% 
  # add_rownames() %>% # opcionalen korak
  filter(str_detect(LastName, "Fuller")) %>% 
  select(EmployeeID)

zdruzena_nova %>% 
  filter(str_detect(EmployeeName, "Fuller"))

kontakt %>% 
  filter(str_detect(Priimek, "Fuller"))

9. Filtriranje

Excel: Funkcionalnost Napredno filtriranje. • Dodajte nov list z imenom Napredno filtriranje. • V celico A1 napišite besedilo ID zaposlenega in v celico B1 zapiši številko ID zaposlenega (poljubna številka od 1 - 9). • V celico A2 napišite besedilo Število naročil in v celico B2 izpišite število naročil za ID zaposlenega iz celice B1 (namig: Countif). • Na delovnem listu Orders s filtriranjem preverite naročila zaposlenega, ki ste jih prešteli (osnovno filtriranje). • Izpisati želimo seznam naročil na podlagi ID zaposlenega (namig: napredno filtriranje). Seznam naj se izpiše v celico A10 na delovnem listu Napredno filtriranje. • Namesto naprednega filtriranja uporabite funkcionalnost tabele in razčlenjevalnike.

R:

(seznam = zdruzena_nova %>% 
  count(EmployeeID, OrderID) %>% 
  filter(EmployeeID == 9)
)

(napredno_filtriranje = seznam %>% 
  summarise(Narocila = sum(n))
)

zdruzena_nova %>%
  count(EmployeeName) %>%
  mutate(Procent = n / sum(n)) %>% 
  ungroup() %>% 
  mutate(EmployeeName = fct_reorder(EmployeeName, Procent)) %>% 
  ggplot(aes(Procent, EmployeeName, fill = EmployeeName)) +
  geom_col(color = "black") +
  scale_x_continuous(labels = percent_format()) +
  theme(legend.position = "none") +
  labs(x="", y="", title = "Percentage of orders by employee")