---
title: "Ćwiczenie 2: Przetwarzanie danych"
subtitle: "Statystyczne i graficzne podstawy geowizualizacji"
author: Anna Dmowska
format: html
editor: visual
---

# Katalog roboczy

***Zawsze rozpocznij pracę od ustawienia ścieżki do folder roboczego.***

```{r}
#| eval: false
#ustawienie ścieżki do katalogu roboczego
setwd("statystyka_geowizualizacja/cwiczenie_1")
```

```{r}
#| eval: false
#sprawdzanie ścieżki do katalogu 
getwd()
```

> W przypadku korzystania z dokumentów Quarto jako katalog roboczy domyślnie jest ustawiany katalog, w którym zapisano dokument Quarto o rozszerzeniu .qmd.

# Wczytywanie danych

Do wczytanania danych z pliku `gapminder_regions.csv` można użyć wbudowanej w R funkcji `read.csv()`. W funckji `read.csv()` należy podać względną lub bezwzględną ścieżkę do pliku. Dodatkowo argument ***encoding*** pozwala na ustawienie typu kodowania znaków. Na etapie wczytywania danych, trzeba je przypisać w R do obiektu, któremu nadamy jakąś nazwę (np. *dane* w poniższym przykładzie).

```{r}
dane = read.csv("dane/gapminder_regions.csv", encoding = 'UTF-8')
```

Po wczytaniu danych do R warto sprawdzić czy dane zostały wczytane poprawnie. Można w tym celu użyć funkcji `head()` lub `str()`.

```{r}
head(dane)
```

Podstawowe informacje o danych można uzyskać wykorzystując funkcję `str()`. Dla ramki danych uzyskamy informację o nazwach kolumn, typach danych (*int* - stałoprzecinkowy, *num* - zmiennoprzecinkowy (numeryczny), *chr* - tekstowy, *Factor* - zmienna czynnikowa) oraz podgląd kilku wartości.

```{r}
str(dane)
```

Wczytane dane mają postać tabeli składającej się z 1704 wiersze (obserwacji) oraz 9 kolumn (zmiennych). W R dane tabelaryczne są najczęściej przechowywane jako ramka danych (*data.frame*).

# Zmienne jakościowe w R

W R zmienne przechowujące dane jakościowe nazywa się **czynnikami** (ang. *factor*), a odmienne kategorie nazywamy ***poziomami*** (ang. *levels*). Poziomy mogą być uporządkowane lub nieuporządkowane. Jeśli wczytamy dane z pliku tesktowego domyślnie wartości nieliczbowe zostaną wczytane jako tekst (typ oznaczony jako *chr*). Jeśli zmienna przechowuje informacje o kategoriach, przed wykonaniem analiz należy ją zamienić na zmienną czynnikową. Zmienną można zamienić na zmienną czynnikową używając funkcji `as.factor()`. Funkcja `as.factor()` używana jest do prostej konwersji zmiennej (np. wektora liczbowego lub tekstowego) na zmienną czynnikową. Poziomy zmiennej są generowane automatycznie jako posortowane, unikalne wartości obecne w danych wejściowych.

```{r}
#Zmienna przed przekształceniem 
head(dane$kontynent)
```

```{r}
#przekształcenie na czynnik
dane$kontynent = as.factor(dane$kontynent)
```

```{r}
str(dane$kontynent)
```

Po przekształceniu na czynnik każda kategoria opisana tekstowo zostaje zamieniona na kod liczbowy, któremu przypisany jest poziom (levels) mający swoją etykietę (w przykładzie jest to nazwa kontynentu).

```{r}
head(dane$kontynent)
```

Do przekształcenia zmiennej na zmienną czynnikową można użyć także funkcji `factor(x,..)`, która pozwala także na przypisanie poziomów oraz etykiet. Funkcję `factor()` wykorzystujemy np. w sytuacji, gdy chcemy określić kolejność poziomów (np. "Low", "Medium", "High" zamiast kolejności alfabetycznej) lub uwzględnić poziomy, które nie występują w analizowanym zbiorze danych, ale potencjalnie zmienna może je przyjmować.

```{r}
dane$income_grp = factor(dane$income_grp,
                  levels = c(1, 2, 3),
                  labels = c("niski", "średni", "wysoki"))
```

Po przekształceniu zmiennej liczbowej typu *integer* na zmienną czynnikową liczby 1,2,3 są traktowane jako kategorie - można wg nich grupować dane przy obliczeniach statystyk dla grup lub przy wizualizacji.

```{r}
str(dane)
```

# Podstawowe informacje o zbiorze danych

## Liczba wierszy i kolumn

Informację o liczbie wierszy można uzyskać za pomocą funkcji `nrow()`, a o liczbie kolumn `ncol()`

```{r}
nrow(dane)
```

```{r}
ncol(dane)
```

## Nazwy zmiennych

Informację o nazwie zmiennych można uzyskać za pomocą `names()` lub `colnames()`.

```{r}
colnames(dane)
```

## Unikalne wartości

```{r}
unique(dane$kontynent)
```

# Tworzenie podzbioru danych

Ramki danych (ang. *data frame*) to złożone obiekty składające sie z wierszy i kolumn. Każda kolumna może przechowywać dane innego typu.

Wybór jednej zmiennej wykonywany jest za pomocą operatora '\$'.

```{r}
#| eval: false
dane$kraj
```

Do wyboru określonych wierszy lub kolumn można użyć tzw. indeksowania. Indeksowanie ramki danych ma postać: obiekt\[wiersz, kolumna\].

-   wybranie pierwszego wiersza i wszystkich kolumn.

```{r}
dane[1,]
```

-   wybranie pierwszej kolumny i wszystkich wierszy

```{r}
kraj = dane[,1]
head(kraj)
```

-   wybranie 2 wiersza i trzeciej kolumny

```{r}
dane[2,3]
```

-   wybranie zmiennych Name oraz Region na podstawie nazw (wybrane zmienne są przypisane do obiektu sel1)

```{r}
sel1 = dane[, c("kraj", "region")]
head(sel1)
```

-   wybranie wierszy spełniających określony warunek, np. podzbiór dla 1952 roku. Zauważ, że do wybrania danych należy użyć podwójnego znaku `==`.

```{r}
dane1952 = dane[dane$rok == 1952,]
head(dane1952)
```

-   wybranie wierszy spełniających określony warunek, np. podzbiór państw leżących w Azji oraz Europie

```{r}
europa_azja = dane[dane$kontynent%in%c('Europa', 'Azja'),]
```

-   wybranie wierszy spełniających określony warunek, np. dane dla roku 2007 dla Europy

```{r}
europa2007 = dane[dane$kontynent == 'Europa' & dane$rok == 2007,]
```

-   wybranie wierszy spełniających określony warunek, np. dane dla wszystkich kontynentów z wyjątkiem Azji.

```{r}
bez_azji = dane[dane$kontynent != 'Azja',]
```

```{r}
bez_azji = dane[!dane$kontynent%in%c('Azja'),]
```

# Zapisywanie pojedyńczego obiektu (np. ramki danych)

Dane wczytane do R można zapisać do pliku tesktowego, np. o rozszerzeniu *.csv*, który następnie może być otworzony w dowolnym oprogramowaniu.

Do zapisania danych w formacie *.csv* wykorzystuje się funkcję `write.csv()`, która jako znak dziesiętny używa kropki ("."), a jako separator między kolumnami używa przecinka (","). Argument *row.names = FALSE* oznacza, że do pliku nie zostanie dodana dodatkowa kolumna z nazwami wierszy.

```{r}
write.csv(europa2007, "out/europa2007.csv", row.names = FALSE)
```

## Zapisywanie wyników pracy w formacie dostępnym tylko w R

Zapisywanie wybranych obiektów ze środowiska pracy R

```{r}
save(europa2007, europa_azja, file = "out/cw2.rda")
```

Zapisywanie wszystkich obiektów znajdujących się w środowisku pracy R

```{r}
save.image("out/cw2.RData")
```

Otwieranie środowiska pracy (przydatne, gdy chcemy wczytać kilka obiektów do R)

```{r}
load("out/cw2.RData")
```

# Dane w arkusach kalkulacyjnych

Dane tabelaryczne często są przechowywane w arkuszach kalkulacyjnych tworzonych z wykorzystaniem oprogramowania MS Excel. Tego typu dane można wczytać do R wykorzystując fukcję `read_excel()` z pakietu **readxl**.

Plik `dane/dane_gapminder.xlsx` zawiera 2 skoroszty: Europa oraz Azja. W skoroszytach znajdują się dane dla 2007 roku dotyczące liczby ludności, PKB oraz długości trwania życia. Aby wczytać dane dla Europy do R należy podać ścieżkę do pliku oraz nazwę skoroszytu, z którego chcemy wczytać dane (argument `sheet`).

```{r}
#| eval: false
library(readxl)
europa = read_excel("dane/dane_gapminder.xlsx", sheet = "Europa")
```

Do zapisania ramki danych w formacie MS Excel wykorzystuje się funkcję `write_xlsx()` z pakietu **writexl**.

```{r}
#| eval: false
library(writexl)
write_xlsx(europa, "out/europa.xlsx")
```

# Pomoc

```{r}
#| eval: false
?nazwaFunkcji
help(nazwaFunkcji)
example(nazwaFunkcji)
args(nazwaFunkcji)
```
