---
title: "Praca z danymi - część pierwsza"
author: 
  - Jarosław Kotowicz:
      institute: 
        - IIUwB
      correspondence: false
      email: j.kotowicz@uwb.edu.pl
date: "4 marca 2020"
always_allow_html: true
output:
  html_notebook:
    fig_caption: yes
    highlight: pygments
    number_sections: yes
    pandoc_args:
      - --lua-filter=scholarly-metadata.lua
      - --lua-filter=author-info-blocks.lua
    theme: cerulean
    toc: yes
institute: 
  - IIUwB: Zakład Bioinformatyki, Instytut Informatyki, Uniwersytet w Białymstoku
csl: big-data-and-information-analytics.csl
bibliography: InfEko.bib
---

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

# Praca z danymi - kształtowanie danych

Podstawą i inspiracją do napisania tego *notebooka* jest rodział 14.3 książki Jareda P. Landera *"R dla każdego. Zaawansowane analizy i grafika statystyczna"* (zobacz [@lander_RdK]). Dane wykorzystane pochodzą również ze strony Jareda P. Landera (zobacz [@website_lander_RdK]).

Korzystamy z 

1. R (zobacz [@language_R]),
2. bibliotek R (zobacz [@package_stringr; @package_dplyr; @package_reshape2; @package_DT]),
3. piszemy używając języka znaczników i biblioteki **rmarkdown** (zobacz [@book_rmarkdown; @package_rmarkdown]) w **RStudio** z wykorzystaniem **R Notebook**.

## Ściągnięcie danych z *Internetu*

Zaczynamy od wyczyszczenia środowiska ze zmiennych

```{r czyszczenie_danych}
rm(list = ls())
```

Importujemy dane w postaci pliku *zip* poleceniem **download.file** i następnie rozpakowujemy archiwum  poeceniem **uzip**.
```{r plik_JL_US_Foreign_Aid}
download.file(url = "http://jaredlander.com/data/US_Foreign_Aid.zip", 
              destfile = "ForeignAid.zip")
unzip("ForeignAid.zip")
```

Zapisujemy nazwy plików z rozszerzeniem *csv* do wektora poleceniem **dir**.

```{r lista_plikow}
theFiles <- dir(pattern = "\\.csv")
theFiles
```

## Przypisanie zmiennym danych

Wczytujemy bibliotekę **stringr** w celu pracy z napisami.

```{r chunk_pakiet_stringr}
library(stringr)
```

Pętlą **for** iterując po nazwach pliku tworzymy

1. nazwę zmiennych (zbiorów danych) wykorzystając nazwy plików (litery od 12 do 18) poleceniem **str_sub** z bibiloteki **stringr**,
2. podczytujemy dane z plików o rozszerzeniu *csv* poleceniem **read.table**,
3. przypisujemy nazwom zmiennych podczytane dane poleceniem **assign**.

```{r odczytanie_danych}
for (a in theFiles) {
  nameToUse <- str_sub(string = a, start = 12, end = 18)
  temp <- read.table(file = a, header = TRUE, sep = ",", stringsAsFactors = FALSE)
  assign(x = nameToUse, value = temp)
}
```

## Trochę przekształcenia

Wczytujemy bibliotekę **dyplyr** do pracy z danymi (w tym do przetwarzania potokowego - operator **pipe** - *%>%*).

*Uwaga*. Używamy opcji wstawek **chunk** do nie wyświetlania ostrzeżeń i informacji.

```{r pakiet_dplyr, message=FALSE, warning=FALSE}
library(dplyr)
```

Wczytujemy bibliotekę **reshape2** do przekształacania danych (postacie *wąska* i *szeroka*).

```{r pakiet_reshape2}
library(reshape2)
```

Funkcją **melt** przekształcamy dane z postaci *szerokiej* do *wąskiej*.

```{r funkcja_melt}
melt00 <- melt(Aid_00s, 
               id.vars = c("Country.Name", "Program.Name"),
               variable.name = "Year", 
               value.name = "Dollars")
```

Funkcją **head** oglądamy początkowe wiersze danych (*6 wierszy*).

```{r funkcja_head}
melt00 %>% head
```

Z wartości zmiennej **Year** zostawiamy tylko same cyfry, zamieniając napis na liczbę poleceniami
**str_extract** z bibilioteki **stringr** i **as.numeric** wykorzystując wyrażenia regularne (polecenie **\\d+**). Przy okazji zmienia się typ kolumny. Nadpisujemy kolumnę **Year** używając operatora odwołania do kolumny **$** i przypisania **<-**.
```{r year_as_number}
melt00$Year <- as.numeric(str_extract(string = melt00$Year, pattern = "\\d+"))
```
I znowu oglądamy początkowe wiersze danych.
```{r funkcja_head_02}
melt00 %>% head
```
Zapisujemy wszystkie dane z przestrzeni nazw (środowiska) poleceniem **save**.
```{r save_Aid}
save(list = ls(), file = "Aid.RData")
```

## Prezentacja danych interaktywnie

Ponieważ polecenie **head** wyświetla tylko kilka początkowych wierszy danych (domyślnie 6) nie jest możliwe oglądanie wszystkich dany w przeglądarce (plik **html**).

Można temu zapobiec wykorzystując bibliotekę **DT**.

### Dane w postaci wąskiej (długiej)

Wczytujemy bibilotekę **DT**.
```{r pakiet_DT, message=FALSE, warning=FALSE}
library(DT)
```
Możemy w końcu oglądać wszystkie dane na stronie internetowej (budowa tablicy interaktywnej poleceniem **datatable**).
```{r tablica_interaktywna_melt, message=FALSE, warning=FALSE}
melt00 %>% datatable
```

### Dane do postaci szerokiej i ich prezentacja

Poleceniem **dcast** z biblioteki **Reshape2** formatujemy dane z postaci *wąskiej* do postaci *szerokiej*.
```{r funcja_dcast}
Aid_00 <- dcast(
  melt00, 
  Country.Name + Program.Name ~ Year, 
  value.var = "Dollars"
)
```

Oglądamy początkowe wiersze danych.
```{r funcja_head_03}
Aid_00 %>% head
```

Do dalszego wykorzystania zapisujemy dane ze zbioru **Aid_00** do pliku binarnego **Aid_00.RData**.
```{r save_Aid_00, warning=FALSE}
save(Aid_00, file = "Aid_00.RData")
```

I jeszcze raz tablica interaktywna z danymi w postaci *szerokiej*.
```{r tablica_interaktywna_dcast}
Aid_00 %>% datatable
```
Na koniec usuwamy ze środowiska funkcje z użytywanych bibliotek poleceniem **detach**. 
```{r pakiety_zamykanie}
detach(package:stringr)
detach(package:dplyr)
detach(package:reshape2)
detach(package:DT)
```

# Bibliografia

<div id="refs"></div>