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