+ - 0:00:00
Notes for current slide
Notes for next slide

Podstawy programowania

Przetwarzanie danych

© Łukasz Wawrowski

1 / 32

Rozpoczynanie pracy z R

Nowy projekt

  1. Otwórz RStudio
  2. Stwórz nowy projekt
  3. Przenieś dane do folderu projektu
  4. Otwórz nowy skrypt R
  5. (Zainstaluj i) wczytaj biblioteki
  6. Wczytaj dane
  7. Analizuj

Istniejący projekt

  1. Otwórz RStudio
  2. Otwórz istniejący skrypt R
  3. Wczytaj biblioteki
  4. Wczytaj dane
  5. Kontyuuj analizę
2 / 32

Zadanie

Wczytaj zbiór danych dotyczący wyników wyborów.

02:00
3 / 32

Pytania do zbioru danych

  1. Ile obwodów głosowania miało frekwencję powyżej 80%?

  2. Ile obwodów głosowania znajduje się w Poznaniu?

  3. Jaka była średnia frekwencja w województwach?

  4. Gdzie była największa różnica pomiędzy wybranymi partiami?

  5. W jakich miastach za granicą utworzono najwięcej obwodów głosowania?

4 / 32

R base vs. tidyverse

Podstawowe funkcje R

widest_petals <- by(iris,
INDICES = iris$Species,
FUN = function(x){
x[x$Petal.Width == max(x$Petal.Width), ]
})
do.call(rbind, widest_petals)
5 / 32

R base vs. tidyverse

Podstawowe funkcje R

widest_petals <- by(iris,
INDICES = iris$Species,
FUN = function(x){
x[x$Petal.Width == max(x$Petal.Width), ]
})
do.call(rbind, widest_petals)

Funkcje pakietu tidyverse

iris %>%
group_by(Species) %>%
filter(Petal.Width == max(Petal.Width))

źródło

5 / 32
6 / 32

Przetwarzanie potokowe

Sekwencja zdarzeń - w życiu

obudź się %>%
wyjdź z łóżka %>%
skorzystaj z łazienki %>%
zjedź śniadanie %>%
ubierz się %>%
idź do pracy

źródło

7 / 32

Przetwarzanie potokowe

Użycie operatora pipe: %>% (łącznik) ułatwia zarządzanie kodem i pisanie czytelnej składni poprzez wykorzystanie istniejących struktur danych:

Nowe obiekty

iris_3kol <- select(iris, Petal.Length, Petal.Width, Species)
iris_3kol_wymiar <- mutate(iris_3kol, petal_wymiar=Petal.Length+Petal.Width)
iris_3kol_wymiar_setosa <- filter(iris_3kol_wymiar, Species=="setosa")
8 / 32

Przetwarzanie potokowe

Użycie operatora pipe: %>% (łącznik) ułatwia zarządzanie kodem i pisanie czytelnej składni poprzez wykorzystanie istniejących struktur danych:

Nowe obiekty

iris_3kol <- select(iris, Petal.Length, Petal.Width, Species)
iris_3kol_wymiar <- mutate(iris_3kol, petal_wymiar=Petal.Length+Petal.Width)
iris_3kol_wymiar_setosa <- filter(iris_3kol_wymiar, Species=="setosa")

Zagnieżdżanie

iris_setosa <- filter(mutate(select(iris, Petal.Length, Petal.Width, Species),
petal_wymiar=Petal.Length+Petal.Width),
Species=="setosa")
8 / 32

Przetwarzanie potokowe

Przetwarzanie potokowe

iris_setosa <- iris %>%
select(Petal.Length, Petal.Width, Species) %>%
mutate(petal_wymiar=Petal.Length+Petal.Width) %>%
filter(Species=="setosa")
9 / 32

Przetwarzanie potokowe

Przetwarzanie potokowe

iris_setosa <- iris %>%
select(Petal.Length, Petal.Width, Species) %>%
mutate(petal_wymiar=Petal.Length+Petal.Width) %>%
filter(Species=="setosa")

Znak %>% oznacza, że jako argument wejściowy data w kolejnej funkcji zostanie wpisany wynik działania wcześniejszej funkcji.

Skrót klawiszowy: ctrl + shift + m

9 / 32

Wybrane funkcje

  • select() - wybór zmiennych

  • filter() - wybór obserwacji

  • mutate() - tworzenie/modyfikacja zmiennej

  • rename() - zmiana nazwy zmiennej

  • count() - zliczanie obserwacji

  • summarise() - podsumowania danych

  • group_by() - operowanie na grupach

  • arrange() - sortowanie

10 / 32

Filtrowanie - filter()

Porównywanie:

  • = symbol przypisania (nie jest używany w filtrowaniu)

  • == symbol porównania (jest równe)

  • != symbol negacji (jest różne)

  • > i < większe i mniejsze

  • >= i <= większe lub równe i mniejsze lub równe

Operatory:

  • & - i

  • | - lub (alternatywa)

  • %in% - wartość ze zbioru

  • ! - negacja

11 / 32

Zadanie

Utwórz zbiór danych zawierający filmy, które są filmami akcji, miały swoją premierę po 2010 roku i trwały co najmniej 120 minut lub miały ocenę powyżej 8.0. Alternatywa ma dotyczyć tylko dwóch ostatnich warunków.

05:00
12 / 32

Braki danych

Brak danych jest oznaczany jako NA. Jest to wartość nieliczbowa i nie można jej porównywać w następujący sposób:

  • zmienna == NA

  • zmienna != NA

  • zmienna == "NA"

  • zmienna != "NA"

tylko z wykorzystaniem funkcji is.na():

  • is.na(zmienna)

  • !is.na(zmienna)

Funkcja complete.cases() służy do identyfikacji obserwacji, które nie zawierają braków danych w całym zbiorze danych.

13 / 32

Wybieranie kolumn - select()

Wybór kolumn, które mają się znaleźć w nowym zbiorze:

iris2 <- iris %>%
select(Species, Petal.Length, Petal.Width)

Które nie mają się znaleźć w nowym zbiorze:

iris2 <- iris %>%
select(-Petal.Length, -Petal.Width)

Które mają znaleźć się w nowym zbiorze z nową nazwą:

iris2 <- iris %>%
select(gatunek=Species, Petal.Length, Petal.Width)
14 / 32

Kolejność w przetwarzaniu potokowym

DOBRZE

iris %>%
filter(Petal.Width < 0.5) %>%
select(Species, Sepal.Length, Sepal.Width)
## Species Sepal.Length Sepal.Width
## 1 setosa 5.1 3.5
## 2 setosa 4.9 3.0
## 3 setosa 4.7 3.2
## 4 setosa 4.6 3.1
## 5 setosa 5.0 3.6
## 6 setosa 5.4 3.9
15 / 32

Kolejność w przetwarzaniu potokowym

DOBRZE

iris %>%
filter(Petal.Width < 0.5) %>%
select(Species, Sepal.Length, Sepal.Width)
## Species Sepal.Length Sepal.Width
## 1 setosa 5.1 3.5
## 2 setosa 4.9 3.0
## 3 setosa 4.7 3.2
## 4 setosa 4.6 3.1
## 5 setosa 5.0 3.6
## 6 setosa 5.4 3.9

ŹLE

iris %>%
select(Species, Sepal.Length, Sepal.Width) %>%
filter(Petal.Width < 0.5)
## Error in `filter()`:
## ℹ In argument: `Petal.Width < 0.5`.
## Caused by error:
## ! object 'Petal.Width' not found
15 / 32

Zmiana nazwy - rename()

Zapis w konwencji rename(nowa_nazwa=stara_nazwa)

Można także wykorzystać funkcję select() - zmieniając nazwę podczas wybierania zmiennych

Funkcja rename_with() umożliwia zmianę nazw z wykorzystaniem funkcji np. zamieniając nazwy kolumn na zapisane wielkimi literami.

16 / 32

Nowa zmienna/modyfikacja - mutate()

iris <- iris %>%
mutate(petal=Petal.Length+Petal.Width,
sepal=Sepal.Length+Sepal.Width,
iloraz=petal/sepal)

Funkcje:

  • mutate_all - modyfikacja wszystkich zmiennych według podanej formuły

  • mutate_if - modyfikacja wszystkich zmiennych spełniających warunek

  • mutate_at - modyfikacja wszystkich wskazanych zmiennych

są zastępowane przez jedną funkcję across.

17 / 32

Zadanie

W zbiorze dotyczącym wyborów stwórz nowe zmienne, które będą zawierały procentowy wynik komitetów.

05:00
18 / 32

Podsumowanie - summarise() i summarize()

iris %>%
summarise(liczebnosc=n(),
srednia_pl=mean(Petal.Length),
mediana_sl=median(Sepal.Length))
## liczebnosc srednia_pl mediana_sl
## 1 150 3.758 5.8
19 / 32

Zadanie

Ile wynosiła średnia, mediana i odchylenie standardowe wartości frekwencji?

05:00
20 / 32

Grupowanie - group_by()

Najlepiej działa w połączeniu z summarise():

iris %>%
group_by(Species) %>%
summarise(liczebnosc=n(),
srednia_pl=mean(Petal.Length))
## # A tibble: 3 × 3
## Species liczebnosc srednia_pl
## <fct> <int> <dbl>
## 1 setosa 50 1.46
## 2 versicolor 50 4.26
## 3 virginica 50 5.55
21 / 32

Liczebności - count()

Jeżeli chcemy tylko wyznaczyć liczebności grup to wystarczy funkcja count():

iris %>%
count(Species)
## Species n
## 1 setosa 50
## 2 versicolor 50
## 3 virginica 50
22 / 32

Sortowanie - arrange()

Sortuje podane kolumny w porządku rosnącym.

iris %>%
arrange(Sepal.Length, Sepal.Width) %>%
head()
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 4.3 3.0 1.1 0.1 setosa
## 2 4.4 2.9 1.4 0.2 setosa
## 3 4.4 3.0 1.3 0.2 setosa
## 4 4.4 3.2 1.3 0.2 setosa
## 5 4.5 2.3 1.3 0.3 setosa
## 6 4.6 3.1 1.5 0.2 setosa

Posortowanie w porządku malejącym wymaga użycia funkcji desc() w odniesieniu do wybranej kolumny.

23 / 32

Zadanie

Oblicz liczbę komisji w poszczególnych województwach oraz średnią liczbę nieważnych głosów.

05:00
24 / 32

Łączenie danych

źródło

25 / 32

Zadanie

Po wczytaniu zbioru danych gus.RData połącz ze sobą zbiory danych zawierające informacje o liczbie przedsiębiorstw na 10 tys. mieszkańców (zbiór pod_10tys), stopie bezrobocia (zbiór bezrobocie) oraz wynagrodzeniu (zbiór wyn).

10:00
26 / 32

Szeroka i długa reprezentacja danych

źródło

27 / 32

Animacja

źródło

28 / 32

Zbiór iris

head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
29 / 32

Wide -> long - pivot_longer()

iris_long <- iris %>%
mutate(id=1:nrow(iris)) %>%
pivot_longer(Sepal.Length:Petal.Width)
head(iris_long)
## # A tibble: 6 × 4
## Species id name value
## <fct> <int> <chr> <dbl>
## 1 setosa 1 Sepal.Length 5.1
## 2 setosa 1 Sepal.Width 3.5
## 3 setosa 1 Petal.Length 1.4
## 4 setosa 1 Petal.Width 0.2
## 5 setosa 2 Sepal.Length 4.9
## 6 setosa 2 Sepal.Width 3
30 / 32

Long -> wide - pivot_wider()

iris_wide <- iris_long %>%
pivot_wider()
head(iris_wide)
## # A tibble: 6 × 6
## Species id Sepal.Length Sepal.Width Petal.Length Petal.Width
## <fct> <int> <dbl> <dbl> <dbl> <dbl>
## 1 setosa 1 5.1 3.5 1.4 0.2
## 2 setosa 2 4.9 3 1.4 0.2
## 3 setosa 3 4.7 3.2 1.3 0.2
## 4 setosa 4 4.6 3.1 1.5 0.2
## 5 setosa 5 5 3.6 1.4 0.2
## 6 setosa 6 5.4 3.9 1.7 0.4
31 / 32

Pytania?

32 / 32

Rozpoczynanie pracy z R

Nowy projekt

  1. Otwórz RStudio
  2. Stwórz nowy projekt
  3. Przenieś dane do folderu projektu
  4. Otwórz nowy skrypt R
  5. (Zainstaluj i) wczytaj biblioteki
  6. Wczytaj dane
  7. Analizuj

Istniejący projekt

  1. Otwórz RStudio
  2. Otwórz istniejący skrypt R
  3. Wczytaj biblioteki
  4. Wczytaj dane
  5. Kontyuuj analizę
2 / 32
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow