fbpx
Kategorie
Analiza danych Zrób to sam

Analiza danych w języku R – odcinek 4

W poprzednich odcinkach nauczyliśmy się, jak tworzyć ramkę danych z pliku CSV i jak wizualizować dane na wykresach. Co jednak, jeśli chcemy eksperymentować na własnych danych, które trzymamy w Excelu? Nie musimy używać formatów pośrednich – dziś utworzymy ramkę danych bezpośrednio z pliku XLSX.

Poradnik dla sponiewieranych Excelem

Niniejszy cykl artykułów był wcześniej dystrybuowany w formie e-mailowego „Poradnika dla sponiewieranych Excelem”. Oto lista odcinków opublikowanych na blogu:

Odcinek 1 – wprowadzenie do tematu
Odcinek 2 – ramka danych
Odcinek 3 – wykresy
Odcinek 4 – odczyt i zapis plików XLSX

ciąg dalszy wkrótce

Wczytujemy CSV do Excela

Zaczniemy od krótkiego przypomnienia, w jaki sposób importować do Excela dane z pliku tekstowego. Pierwszym krokiem będzie przejście do zakładki Dane i kliknięcie przycisku „Z pliku tekstowego/CSV”. Po wskazaniu upatrzonego pliku (u nas nadal jest to zestaw ofert Otomoto) zobaczymy następujące okienko:

Ponieważ automatyczna identyfikacja separatora (przecinek) i standardu kodowania tekstu (UTF-8) przebiegła prawidłowo, możemy od razu kliknąć „Załaduj”. Jeśli klikniemy przycisk „Przekształć dane”, zobaczymy edytor Power Query. Warto go znać, ale w Poradniku nie będziemy się nim zajmować.

W Excelu zobaczymy znany nam już arkusz – zapiszmy go pod nazwą „otomoto.xlsx” do bieżącego katalogu roboczego RStudio.

Wczytujemy CSV do ramki danych

Jak ten sam plik CSV wczytać do ramki danych w języku R? Wystarczy jedna komenda:

otomoto <- read_csv("otorandomized.csv")

Uwaga! Uważny czytelnik zauważył, że w poprzednich odcinkach używaliśmy funkcji read.csv z biblioteki standardowej języka R, zaś powyżej zastosowana została funkcja read_csv z biblioteki readr (będącej częścią pakietu Tidyverse). Ta druga ma więcej możliwości i jest nieco wygodniejsza w użyciu. Niestety, ich nazwy mogą nam się mylić.

Podobnie, jak w przypadku Excela, funkcja read_csv czyta pierwszych kilkaset wierszy pliku aby rozpoznać separatory, znak dziesiętny czy kodowanie znaków.

Jeśli automatyczna detekcja nie powiedzie się, możemy przekazać do funkcji dodatkowe parametry z podpowiedziami. Oto ważniejsze opcje:

  • col_names – przyjęcie wartości z pierwszego wiersza jako nazw kolumn (domyślnie: tak)
  • col_select – wskazanie kolumn do wczytania lub odrzucenia (domyślnie: wszystkie)
  • col_types – ręczne wskazanie typów kolumn (domyślnie: autodetekcja)
  • quote, escape_backslash, comment – wskazówki do interpretacji znaków specjalnych w napisach
  • trim_ws – czy usuwać białe znaki z początku i końca treści (domyślnie: nie)
  • na – napisy, które oznaczają brak wartości w komórce (domyślnie “” oraz “NA”)
  • skip, n_max – liczba wierszy do pominięcia oraz wczytania (domyślnie: zero i wszystkie)

Przykładowe użycie parametrów:

otomoto10k <- read_csv("otorandomized.csv", col_types = "fffnnnf?fn", n_max = 10000)

Tą komendą wczytamy pierwsze dziesięć tysięcy rekordów a większości kolumn tekstowych nadamy od razu pożądany typ kategoryczny. Pole „attr” widoczne w podglądzie ramki zawiera metadane opisujące wczytane kolumny danych.

Wczytujemy plik Excela do ramki danych

Jak najprościej wczytać do ramki danych informacje z pliku XLSX? Istnieje kilka bibliotek realizujących to zadanie. Różnią się zakresem możliwości i liczbą zewnętrznych narzędzi, które trzeba doinstalować. Z tego powodu użyjemy dziś biblioteki readxl – choć nie ona ma wielu zaawansowanych opcji, to jest prosta w użyciu i działa całkowicie samodzielnie. Po jej zainstalowaniu (install.packages("readxl")) oraz załadowaniu (library(readxl)) możemy wydać komendę:

otoexcel <- read_excel("otomoto.xlsx")

Po wydaniu tego polecenia w RStudio pojawi się nowa ramka danych. Możemy łatwo zauważyć, że ramki „otomoto” oraz „otoexcel” mają taką samą liczbę wierszy i kolumn. W okienkach podglądu dane wyglądają identycznie!

Warto wspomnieć, że język R posiada wbudowaną opcję wyświetlania dokumentacji – wystarczy wpisać w konsolę nazwę komendy poprzedzoną znakiem zapytania (np. „?read_excel”). RStudio przechwyci to polecenie i wyświetli w odpowiedniej zakładce dopuszczalne parametry polecenia wraz z ich opisem.

Zapisujemy ramkę danych do pliku Excela

To już ostatnia operacja na dziś – co nie znaczy, że najmniej ważna. Przeprowadźmy przykładowe przekształcenie ramki danych „otoexcel” i zapiszmy wynik do nowej ramki danych „skomplikowany_wynik”

Podgląd nowej ramki danych w RStudio:

Teraz instalujemy i ładujemy bibliotekę „writexl”, która posłuży do zapisu plików XLSX:

install.packages("writexl")
library(writexl)

Następnie wydajemy komendę

write_xlsx( skomplikowany_wynik, "wynik.xlsx" )

Rezultatem będzie plik Excela z następującą zawartością

Zakończenie

W „Poradniku dla sponiewieranych Excelem” nie chcę nikogo przekonywać do rezygnacji z Excela. To nie miałoby sensu, arkusz kalkulacyjny jest świetnym narzędziem. Wiesz już jednak, że w niektórych sytuacjach R sprawdzi się lepiej.

Jeśli zechcesz skorzystać z dobrodziejstw R/RStudio i automatyzować swoje metody przetwarzania danych, informacje z dzisiejszego odcinka pozwolą ci na stworzenie procesu hybrydowego, łączącego Excela i R. Może on wyglądać np. tak:

  • [Excel] wczytanie danych do Excela, rozpoczęcie obróbki danych
  • [Excel] zapisanie danych pośrednich do pliku A.XLSX
  • [RStudio] wczytanie pliku A.XLSX do ramki danych w RStudio
  • [RStudio] automatyzacje, agregacje, filtrowania dokonywane w języku R
  • [RStudio] zapis wyników przekształceń do pliku B.XLSX
  • [Excel] wczytanie pliku B.XLSX w Excelu, ciąg dalszy procesu

Im lepiej poznasz R, tym większą część swojego procesu będziesz w stanie zautomatyzować.

Zadanie domowe

Plik pomocniczy do dzisiejszego odcinka jest tutaj. Uruchom wszystkie komendy tam zawarte.

Utwórz plik XLSX z dwoma arkuszami. Zapoznaj się z dokumentacją pakietu readxl i użyj odpowiednich opcji polecenia read_excel, by wczytać te arkusze do dwóch różnych ramek danych.



O autorze: zawodowy programista od 2003 roku, pasjonat bezpieczeństwa informatycznego. Rozwijał systemy finansowe dla NBP, tworzył i weryfikował zabezpieczenia bankowych aplikacji mobilnych, brał udział w pracach nad grą Angry Birds i wyszukiwarką internetową Microsoft Bing.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *