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