Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00314 007390 11258725 na godz. na dobę w sumie
Język R. Kompletny zestaw narzędzi dla analityków danych - ebook/pdf
Język R. Kompletny zestaw narzędzi dla analityków danych - ebook/pdf
Autor: , Liczba stron: 432
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-283-3685-8 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> bazy danych >> inne
Porównaj ceny (książka, ebook (-20%), audiobook).

Analiza danych jest stosunkowo młodą, interdyscyplinarną dziedziną, której celem jest wydobycie i wykorzystanie wiedzy ukrytej w surowych danych pozyskanych z różnych źródeł. Można w ten sposób zrozumieć istotę zjawisk, przewidzieć wystąpienie zdarzeń czy pozyskać informacje niedostępne w inny sposób. W wielu przypadkach wnioski wyciągnięte z analizy danych okazują się bezcenne, co doceniają profesjonaliści z licznych branż. Przygotowanie danych, przeanalizowanie ich i odpowiednie przedstawienie płynącej z nich wiedzy bywa sporym wyzwaniem, jednak dzięki takim narzędziom jak język R i związane z nim pakiety zadanie to staje się znacząco prostsze.

Niniejsza książka jest przystępnie napisanym przewodnikiem po języku R i narzędziach służących do analizy danych. Zawarto tu wyczerpujące wprowadzenie do języka R, programu RStudio i tidyverse. Zaprezentowano zestaw pakietów R, które znacznie poprawiają komfort pracy podczas analizy danych. Wyjaśniono znaczenie poszczególnych etapów analizy danych: ich importowania, oczyszczania, przekształcania, modelowania, wizualizowania, a także skutecznego komunikowania wiedzy płynącej z danych. Mimo że książka dotyczy narzędzi programistycznych, skorzystają z niej nie tylko programiści. Doceni ją każdy, kto chce zyskać solidne podstawy przygotowania i analizy danych.

Najważniejsze zagadnienia:

R — wszystko, czego potrzebujesz w profesjonalnej analizie danych!


Hadley Wickham pracuje w RStudio. Jest również członkiem fundacji R Foundation. Tworzy ciekawe narzędzia do analizy danych. Jest również naukowcem, autorem książek i wykładowcą. Angażuje się w promowanie języka R jako narzędzia do analizy danych.

Garrett Grolemund jest statystykiem, nauczycielem i programistą R. Napisał powszechnie znany pakiet lubridate. Grolemund jest popularnym instruktorem języka R i analizy danych — w tym zakresie pomagał takim firmom, jak Google, eBay, Roche i inne.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: R for Data Science: Import, Tidy, Transform, Visualize, and Model Data Tłumaczenie: Joanna Zatorska ISBN: 978-83-283-3684-1 © 2018 Helion S.A. Authorized Polish translation of the English edition of R for Data Science, ISBN 9781491910399 © 2017 Garrett Grolemund, Hadley Wickham. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/jezrko.zip Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/jezrko Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis treści Wstęp ......................................................................................................................... 9 Część I. Przegląd ...........................................................................................21 1. Wizualizacja danych za pomocą pakietu ggplot2 ........................................................ 23 23 24 26 32 33 35 40 46 50 52 Wstęp Pierwsze kroki Mapowanie estetyk Typowe problemy Panele Obiekty geometryczne Przekształcenia statystyczne Dostosowanie położenia Systemy współrzędnych Warstwowa gramatyka graficzna 2. Organizacja pracy: podstawy ..................................................................................... 55 55 56 56 Podstawy kodowania Co się kryje pod nazwą? Wywoływanie funkcji 3. Przekształcanie danych za pomocą pakietu dplyr ....................................................... 59 59 61 65 66 68 71 83 Wprowadzenie Filtrowanie wierszy za pomocą funkcji filter() Organizowanie wierszy za pomocą funkcji arrange() Wybieranie kolumn za pomocą funkcji select() Dodawanie nowych zmiennych za pomocą funkcji mutate() Zgrupowane wartości sumaryczne za pomocą funkcji summarize() Grupowanie wyników mutowania (i filtrowania) 3 Poleć książkęKup książkę 4. Organizacja pracy: skrypty ......................................................................................... 87 88 88 Uruchamianie kodu Diagnostyka RStudio 5. Eksploracyjna analiza danych .................................................................................... 91 91 92 93 100 102 112 115 115 Wstęp Pytania Odchylenie Wartości brakujące Kowariancja Wzorce i modele Wywołania ggplot2 Więcej informacji 6. Organizacja pracy: projekty ..................................................................................... 117 117 118 119 119 121 Co jest prawdziwe? Gdzie przebywają nasze analizy? Ścieżki i katalogi Projekty RStudio Podsumowanie Część II. Przygotowywanie ..........................................................................123 7. Dane typu tibble z użyciem pakietu tibble ................................................................ 125 125 125 127 128 Wstęp Tworzenie danych typu tibble Typ tibble w porównaniu z typem data.frame Interakcje ze starszym kodem 8. Importowanie danych za pomocą pakietu readr ....................................................... 131 Wstęp 131 131 Zaczynamy 134 Parsowanie wektora 140 Parsowanie pliku Zapis do pliku 145 146 Inne typy danych 9. Czyszczenie danych z wykorzystaniem pakietu tidyr ................................................. 149 149 150 153 Wstęp Czyszczenie danych Rozkład i gromadzenie 4 (cid:95) Spis treści Poleć książkęKup książkę Rozdzielanie i łączenie Brakujące wartości Studium przypadku Dane nieoczyszczone 157 160 162 166 10. Dane relacyjne z wykorzystaniem pakietu dplyr ........................................................167 167 168 170 172 180 183 184 Wstęp nycflights13 Klucze Złączenia mutujące Złączenia filtrujące Problemy ze złączeniami Operacje na zbiorach 11. Przetwarzanie napisów za pomocą pakietu stringr ....................................................187 187 187 191 197 198 207 209 210 Wstęp Podstawy napisów Dopasowywanie wzorców do wyrażeń regularnych Grupowanie i odwołania wsteczne Narzędzia Inne typy wzorców Inne sposoby użycia wyrażeń regularnych Pakiet stringi 12. Czynniki z użyciem pakietu forcats ............................................................................211 211 211 213 214 218 Wstęp Tworzenie czynników Badania General Social Survey Modyfikowanie kolejności czynnika Modyfikowanie poziomów czynników 13. Przetwarzanie daty i czasu za pomocą pakietu lubridate ...........................................221 221 222 226 230 234 Wstęp Tworzenie daty lub czasu Komponenty danych typu data i czas Odcinki czasu Strefy czasowe Spis treści (cid:95) 5 Poleć książkęKup książkę Część III. Program .......................................................................................237 14. Potoki z wykorzystaniem pakietu magrittr ............................................................... 239 239 239 243 243 Wstęp Alternatywy potoków Kiedy nie należy używać potoków? Inne narzędzia z pakietu magrittr 15. Funkcje ................................................................................................................... 247 247 248 250 252 256 260 262 Wstęp Kiedy powinienem napisać funkcję? Funkcje są dla ludzi i komputerów Wykonywanie warunkowe Argumenty funkcji Zwracane wartości Środowisko 16. Wektory .................................................................................................................. 263 263 264 265 267 272 278 Wstęp Podstawy wektorów Ważne typy wektorów atomowych Używanie wektorów atomowych Wektory rekurencyjne (listy) Wektory rozszerzone 17. Iteracje za pomocą pakietu purrr ............................................................................. 281 Wstęp 281 282 Pętle for 284 Odmiany pętli for 288 Pętle for kontra programowanie funkcyjne Funkcje mapujące 290 293 Obsługa niepowodzeń 295 Mapowanie na podstawie wielu argumentów Funkcja walk 298 299 Inne wzorce pętli for 6 (cid:95) Spis treści Poleć książkęKup książkę Część IV. Model ...........................................................................................303 18. Podstawy modelowania z wykorzystaniem pakietu modelr .......................................307 307 308 315 318 329 329 Wstęp Prosty model Wizualizowanie modeli Formuły i rodziny modeli Wartości brakujące Inne rodziny modeli 19. Budowanie modelu ..................................................................................................331 331 332 339 349 Wstęp Dlaczego diamenty niskiej jakości są droższe? Co wpływa na liczbę lotów w ciągu dnia? Więcej informacji o modelach 20. Wiele modeli z użyciem pakietów purrr i broom ........................................................351 351 352 361 363 367 369 Wstęp gapminder Kolumny w postaci list Tworzenie kolumn w postaci list Upraszczanie kolumn w postaci list Czyszczenie danych za pomocą pakietu broom Część V. Komunikowanie .............................................................................371 21. R Markdown ............................................................................................................373 373 374 376 377 382 383 385 Wstęp Podstawy R Markdown Formatowanie tekstu za pomocą Markdown Fragmenty kodu Rozwiązywanie problemów Nagłówek YAML Więcej informacji 22. Grafika dla komunikacji z wykorzystaniem ggplot2 ...................................................387 387 388 390 Wstęp Etykieta Adnotacje Spis treści (cid:95) 7 Poleć książkęKup książkę Skale Powiększanie Szablony Zapisywanie wykresów Więcej informacji 396 404 405 407 410 23. Formaty R Markdown .............................................................................................. 411 411 412 413 413 414 415 417 418 418 Opcje wyjścia Dokumenty Notatniki Prezentacje Pulpity Interaktywność Serwisy WWW Inne formaty Więcej informacji 24. Sposób pracy z R Markdown ..................................................................................... 419 Skorowidz ............................................................................................................... 421 8 (cid:95) Spis treści Poleć książkęKup książkę ROZDZIAŁ 1. Wizualizacja danych za pomocą pakietu ggplot2 Wstęp Prosty wykres przekazał więcej informacji umysłowi analityka danych niż jakiekolwiek inne narzędzie. — John Tukey W tym rozdziale nauczysz się wizualizacji swoich danych za pomocą pakietu ggplot2. R jest wypo- sażony w różne systemy służące do tworzenia wykresów, ale ggplot2 jest jednym z najbardziej przej- rzystych i wszechstronnych. ggplot2 implementuje gramatykę graficzną, czyli spójny system opisu i tworzenia wykresów. Dzięki ggplot2 możemy dużo osiągnąć, opanowując tylko jeden system, który następnie wykorzystamy w wielu sytuacjach. Aby poznać więcej teoretycznych podstaw działania narzędzia ggplot2, warto najpierw przeczytać ar- tykuł „A Layered Grammar of Graphics” (http://vita.had.co.nz/papers/layered-grammar.pdf). Wymagania wstępne Ten rozdział koncentruje się na pakiecie ggplot2, jednym z głównych składników biblioteki tidyverse. Aby uzyskać dostęp do zbiorów danych, pomocy i funkcji, z których będziemy korzystać w tym rozdziale, wczytaj tidyverse, uruchamiając następujący kod: library(tidyverse) # Loading tidyverse: ggplot2 # Loading tidyverse: tibble # Loading tidyverse: tidyr # Loading tidyverse: readr # Loading tidyverse: purrr # Loading tidyverse: dplyr # Conflicts with tidy packages -------------------------------- # filter(): dplyr, stats # lag(): dplyr, stats Za pomocą tego jednego wiersza kodu zostanie wczytana podstawowa biblioteka tidyverse, zawierają- ca pakiety, z których będziesz korzystać podczas analizy prawie wszystkich danych. To polecenie wyświetla również informację o tym, które funkcje biblioteki tidyverse są w konflikcie z funkcjami bazowego R (lub z funkcjami z innych, wczytanych wcześniej pakietów). 23 Poleć książkęKup książkę Jeśli po uruchomieniu tego polecenia na ekranie pojawi się komunikat „there is no package called ‘tidyverse’”, należy najpierw zainstalować bibliotekę, a dopiero potem ponownie wykonać polecenie library(): install.packages( tidyverse ) library(tidyverse) Pakiet wystarczy zainstalować jednorazowo, ale podczas uruchamiania nowej sesji należy go wczytać ponownie. Aby jawnie określić pakiet zawierający funkcję (lub zbiór danych), należy skorzystać ze specjalnej składni pakiet::funkcja(). Jeśli na przykład napiszemy ggplot2::ggplot(), jawnie stwierdzimy, że chcemy skorzystać z funkcji ggplot(), dostępnej w pakiecie ggplot2. Pierwsze kroki Wykonajmy nasz pierwszy wykres, aby sprawdzić, czy samochody z silnikami o dużej pojemności wykorzystują więcej paliwa niż samochody z silnikami o małej pojemności. Prawdopodobnie znasz odpowiedź na to pytanie, ale spróbuj ją doprecyzować. Jaka jest relacja między pojemnością silnika a wykorzystaniem paliwa? Czy jest to zależność dodatnia? Ujemna? Liniowa? Nieliniowa? Ramka danych mpg Swoją odpowiedź możesz zweryfikować, korzystając z ramki danych mpg, dostępnej w pakiecie ggplot2 (inaczej ggplot2::mpg). Ramka danych jest dwuwymiarową kolekcją zmiennych (znajdujących się w kolumnach) i obserwacji (znajdujących się w wierszach). mpg zawiera obserwacje zebrane przez US Environment Protection Agency na temat 38 modeli samochodów: mpg # # A tibble: 234 x 11 # manufacturer model displ year cyl trans drv # chr chr dbl int int chr chr # 1 audi a4 1.8 1999 4 auto(l5) f # 2 audi a4 1.8 1999 4 manual(m5) f # 3 audi a4 2.0 2008 4 manual(m6) f # 4 audi a4 2.0 2008 4 auto(av) f # 5 audi a4 2.8 1999 6 auto(l5) f # 6 audi a4 2.8 1999 6 manual(m5) f # 7 audi a4 3.1 2008 6 auto(av) f # 8 audi a4 quattro 1.8 1999 4 manual(m5) 4 # 9 audi a4 quattro 1.8 1999 4 auto(l5) 4 # 10 audi a4 quattro 2.0 2008 4 manual(m6) 4 # # ... with 224 more rows, and 4 more variables: cty int , # # hwy int , fl chr , class chr mpg zawiera między innymi następujące zmienne: (cid:120) displ, czyli pojemność silnika samochodu w litrach. (cid:120) hwy, czyli wydajność wykorzystania paliwa na autostradzie w milach na galon (mpg). Na tym samym dystansie samochód z silnikiem o niskiej wydajności zużywa więcej paliwa niż samochód z silnikiem o wysokiej wydajności. Więcej informacji o zbiorze danych mpg można uzyskać, wykonując polecenie ?mpg, które otwiera do- kumentację pakietu. 24 (cid:95) Rozdział 1. Wizualizacja danych za pomocą pakietu ggplot2 Poleć książkęKup książkę Tworzenie wykresu za pomocą ggplot Aby wykonać wykres na podstawie danych mpg, uruchom poniższy kod. W tym przypadku zmienna displ będzie widoczna na osi x, a zmienna hwy na osi y: ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy)) Wykres przedstawia zależność ujemną między pojemnością silnika (displ) a wydajnością zużycia paliwa (hwy). Innymi słowy, samochody z silnikami o większej pojemności zużywają więcej paliwa. Czy to potwierdza, czy obala Twoją hipotezę dotyczącą wydajności i pojemności silnika? Jeśli chcemy utworzyć wykres za pomocą narzędzia ggplot2, korzystamy z funkcji ggplot(). Funkcja ggplot() generuje układ współrzędnych, na którym można tworzyć warstwy. Pierwszym argumen- tem funkcji ggplot() jest zbiór danych, na podstawie którego tworzymy wykres. Dlatego kod ggplot(data = mpg) utworzy pusty wykres, na tyle nieciekawy, że go tutaj nie zaprezentuję. Wykres uzupełniamy, dodając co najmniej jedną warstwę do instrukcji ggplot(). Funkcja geom_point() umieszcza na wykresie warstwę punktów, tworząc wykres punktowy. Pakiet ggplot2 zawiera im- plementację wielu funkcji geometrycznych. Każda z nich umożliwia umieszczenie na wykresie innego rodzaju warstwy. Wiele z tych funkcji poznasz w tym rozdziale. Wszystkie funkcje geometryczne z pakietu ggplot2 przyjmują argument mapping. Definiuje on spo- sób mapowania zmiennych ze zbioru danych na właściwości wizualne. Argument mapping zawsze występuje w parze z funkcją aes(), natomiast argumenty x i y funkcji aes() określają, które zmienne należy zmapować na osie x i y. ggplot2 szuka zmapowanej zmiennej w argumencie data, czyli w na- szym przykładzie w zmiennej mpg. Pierwsze kroki (cid:95) 25 Poleć książkęKup książkę Szablon wykresu Przekształćmy powyższy kod w szablon, który będzie można ponownie wykorzystać, aby utworzyć nowe wykresy narzędziem ggplot2. Aby utworzyć wykres, w poniższym kodzie zastąp sekcję w nawia- sach ostrokątnych nazwą zbioru danych, funkcji geometrycznej i kolekcją mapowań: ggplot(data = DANE ) + FUNKCJA_GEOMETRYCZNA (mapping = aes( MAPOWANIA )) W pozostałej części tego rozdziału dowiesz się, jak uzupełnić i rozszerzyć ten szablon, aby utworzyć różne rodzaje wykresów. Zaczniemy od komponentu MAPOWANIA . Ćwiczenia 1. Uruchom polecenie ggplot(data = mpg). Co widzisz? 2. Ile wierszy znajduje się w zbiorze danych mtcars? Ile jest kolumn? 3. Co opisuje zmienna drv? Dowiesz się tego z treści pomocy, która zostanie wyświetlona po uru- chomieniu polecenia ?mpg. 4. Wykonaj wykres punktowy zależności między zmiennymi hwy i cyl. 5. Co zobaczysz na wykresie punktowym zależności między zmiennymi class i drv? Dlaczego ten wykres jest bezużyteczny? Mapowanie estetyk Największa wartość obrazu polega na tym, że zmusza nas do zauważenia tego, czego nigdy się nie spodziewaliśmy dostrzec. — John Tukey Na pierwszym wykresie na następnej stronie jedna grupa punktów (oznaczona kolorem czerwonym) wydaje się wykraczać poza linię trendu. Te samochody mają wyższy przebieg, niż można by się tego spodziewać. Jak to wyjaśnić? Załóżmy, że są to samochody hybrydowe. Jednym ze sposobów weryfikacji tej hipotezy jest sprawdze- nie wartości zmiennej class dla każdego samochodu. Zmienna class w zbiorze danych mpg klasyfi- kuje samochody na kompaktowe, średniej wielkości i SUV-y. Jeśli nietypowe punkty reprezentują samochody hybrydowe, należałoby je ponownie zaklasyfikować jako kompaktowe albo bardzo małe samochody (pamiętaj, że te dane zostały zebrane, zanim popularność zyskały hybrydowe ciężarówki i SUV-y). Do dwuwymiarowego wykresu punktowego można dodać trzecią zmienną, na przykład class, mapu- jąc ją na estetykę wykresu. Estetyka jest wizualną właściwością obiektów przedstawionych na wykre- sie. Do estetyk należą takie właściwości jak rozmiar, kształt lub kolor punktów. Punkt (na przykład taki jak poniżej) można wyświetlić na różne sposoby, zmieniając wartości estetyk. Ponieważ słowa „wartość” użyliśmy już do opisu danych, skorzystajmy ze słowa „poziom”, aby opisać wartości estetyk. Poniżej widać, jak można zmienić poziom rozmiaru, kształtu i koloru punktu, aby uzyskać mały, trójkątny lub niebieski punkt (zobacz drugi wykres na następnej stronie). 26 (cid:95) Rozdział 1. Wizualizacja danych za pomocą pakietu ggplot2 Poleć książkęKup książkę Informacje o danych można zaprezentować, mapując estetyki wykresu do zmiennych w zbiorze da- nych. Możemy na przykład zmapować kolory punktów na zmienną class, aby przedstawić na wykre- sie klasę każdego samochodu (zobacz wykres na następnej stronie): ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, color = class)) (Jeśli tak jak Hadley wolisz brytyjski angielski, możesz użyć zmiennej colour zamiast color). Aby zmapować estetykę na zmienną, należy powiązać nazwę estetyki z nazwą zmiennej w funkcji aes(). ggplot2 automatycznie przydzieli unikatowy poziom estetyki (w tym przypadku unikatowy kolor) do każdej unikatowej wartości zmiennej w procesie zwanym skalowaniem. ggplot2 wygene- ruje też legendę informującą, którym wartościom odpowiadają poszczególne poziomy. Dzięki kolorom widać, że wiele nietypowych punktów dotyczy samochodów dwumiejscowych. Te samochody nie wydają się hybrydowe. I rzeczywiście — są samochodami sportowymi! Samochody sportowe mają ogromne silniki, podobnie jak SUV-y i pick-upy, ale niewielkie nadwozie o wielkości zbliżonej do samochodów średniej wielkości i kompaktowych, co zwiększa wydajność zużycia paliwa. Mapowanie estetyk (cid:95) 27 Poleć książkęKup książkę Gdy jeszcze raz spojrzymy na dane, dojdziemy do wniosku, że te samochody nie mogły być hybrydo- we, ponieważ miały silniki o dużej pojemności. W poprzednim przykładzie zmapowaliśmy zmienną class na estetykę koloru, ale mogliśmy ją w taki sam sposób zmapować na estetykę rozmiaru. W tym przypadku dokładny rozmiar każdego punktu odzwierciedlałby przynależność do klasy. Tutaj zostanie wyświetlone ostrzeżenie, ponieważ mapo- wanie nieuporządkowanej zmiennej (class) na uporządkowaną estetykę (size) nie jest dobrym pomysłem (zobacz wykres na następnej stronie): ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, size = class)) # Warning: Using size for a discrete variable is not advised. Moglibyśmy zmapować zmienną class na estetykę alpha, która kontroluje przezroczystość punktów lub kształt punktów (zobacz pierwszy wykres na stronie 30): # Na górze ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, alpha = class)) # Na dole ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, shape = class)) Zobacz wykresy na stronie 30. Co się stało z SUV-ami? ggplot2 użyje naraz tylko sześciu kształtów. W przypadku tej estetyki dodat- kowe grupy domyślnie nie zostaną uwzględnione. W przypadku wszystkich wykorzystywanych estetyk funkcja aes() łączy nazwę estetyki ze zmienną, którą chcemy wyświetlić. Funkcja aes() zbiera razem wszystkie mapowania estetyk występujących 28 (cid:95) Rozdział 1. Wizualizacja danych za pomocą pakietu ggplot2 Poleć książkęKup książkę w warstwie i przekazuje je do argumentu mapping warstwy. Składnia ujawnia przydatne cechy x i y: współrzędne x i y punktu są estetykami, czyli właściwościami wizualnymi, które można zmapować do zmiennych, aby wyświetlić informacje o danych. Po zmapowaniu estetyki ggplot2 zajmie się całą resztą. Wybierze odpowiednią skalę do przedstawie- nia estetyki i utworzy legendę, która objaśni mapowanie między poziomami a wartościami. W przy- padku estetyk x i y ggplot2 nie wygeneruje legendy, ale utworzy linię osi ze znacznikami i etykietami. Linia osi spełnia funkcję legendy — objaśnia mapowanie między położeniem a wartością. Właściwości estetyk geometrii można też ustawić ręcznie. Na przykład możemy pokolorować wszyst- kie punkty wykresu na niebiesko: ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy), color = blue ) Zobacz wykres na stronie 31. W tym przypadku kolor nie zawiera informacji o zmiennej, a jedynie zmienia wygląd wykresu. Aby ręcznie skonfigurować estetykę, przekaż jej nazwę jako argument do funkcji geometrycznej, czyli poza funkcją aes(). Musisz wybrać wartość, która ma sens dla tej estetyki: (cid:120) Nazwa koloru w postaci napisu. (cid:120) Rozmiar punktu w milimetrach. (cid:120) Kształt punktu jako liczba, zgodnie z rysunkiem 1.1. Widać tu kilka duplikatów, na przykład liczby 0, 15 i 22 reprezentują kwadraty. Różnica polega na interakcji między estetykami color i fill. Puste kształty (0 – 14) mają kontur w kolorze określonym estetyką color; jednolite kształty (15 – 18) mają kolor określony estetyką color; a wypełnione kształty (21 – 24) mają kontur w ko- lorze określonym estetyką color i są wypełnione kolorem określonym estetyką fill. Mapowanie estetyk (cid:95) 29 Poleć książkęKup książkę Ćwiczenia 1. W którym miejscu tego kodu znajduje się błąd? Dlaczego punkty nie są niebieskie? (zobacz wykres na następnej stronie) ggplot(data = mpg) + geom_point( mapping = aes(x = displ, y = hwy, color = blue ) ) 30 (cid:95) Rozdział 1. Wizualizacja danych za pomocą pakietu ggplot2 Poleć książkęKup książkę Rysunek 1.1. R ma 25 wbudowanych kształtów, do których są przypisane liczby 2. Które zmienne ze zbioru mpg są kategorialne? Które zmienne są ciągłe? (Wskazówka: wpisz ?mpg, aby przeczytać dokumentację tego zbioru danych). Jak sprawdzić te informacje, uruchamiając polecenie mpg? 3. Zmapuj zmienną ciągłą na estetykę color, size i shape. Na czym polega różnica w zachowaniu tych estetyk w przypadku zmiennych kategorialnych i ciągłych? 4. Co się stanie, jeśli zmapujesz tę samą zmienną na wiele estetyk? 5. Do czego służy estetyka stroke? Z jakimi kształtami można jej użyć? (Wskazówka: skorzystaj z polecenia ?geom_point). 6. Co się stanie, jeśli zmapujesz estetykę na coś innego niż nazwa zmiennej, jak na przykład aes(color = displ 5)? Mapowanie estetyk (cid:95) 31 Poleć książkęKup książkę Typowe problemy Gdy zaczniesz uruchamiać kod R, prędzej czy później natkniesz się na problemy. Nie martw się — to może przytrafić się każdemu. Piszę kod R już od wielu lat i codziennie zdarza mi się napisać coś, co nie działa! Zacznij od ostrożnego porównania uruchomionego kodu z kodem przedstawionym w książce. R jest niesłychanie grymaśny i przyczyną problemów może być zwykła literówka. Upewnij się, że każdy nawias ( ma swój odpowiednik ), a każdy znak ma swoją parę. Czasem uruchomisz kod i nic się nie wydarzy. Sprawdź, czy z lewej strony konsoli widoczny jest znak +. Jest to informacja, że R nie rozpo- znaje wpisanego wyrażenia i czeka, aż je uzupełnisz. W takiej sytuacji zwykle łatwiej będzie rozpocząć od nowa, naciskając najpierw klawisz Esc, aby przerwać przetwarzanie bieżącego polecenia. Jednym z typowych problemów podczas tworzenia wykresów za pomocą narzędzia ggplot2 jest umieszczenie znaku + w niewłaściwym miejscu: musi on znaleźć się na końcu wiersza, a nie na po- czątku. Innymi słowy, upewnij się, że przypadkowo nie napisałeś takiego kodu: ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy)) Jeśli problem nadal nie został rozwiązany, spróbuj przeczytać tekst pomocy. Dla każdej funkcji R mo- żesz wyświetlić pomoc, uruchamiając w konsoli polecenie ?nazwa_funkcji lub zaznaczając nazwę funkcji i naciskając F1 w programie RStudio. Nie przejmuj się, jeśli dokumentacja nie będzie się wydawać pomocna — przewiń ją na dół, gdzie znajdują się przykłady, i poszukaj kodu, który będzie pasować do Twoich zamierzeń. Jeśli to nie pomoże, ostrożnie przeczytaj komunikat o błędzie. Czasem właśnie tam znajdziesz od- powiedź! Ale jeśli jesteś początkującym użytkownikiem R, to mimo obecności odpowiedzi w komu- nikacie błędu być może nie będziesz umiał jej zinterpretować. Innym świetnym narzędziem jest Google: spróbuj tam wyszukać treść komunikatu błędu. Prawdopodobnie ktoś inny natknął się na taki sam problem i uzyskał pomoc online. 32 (cid:95) Rozdział 1. Wizualizacja danych za pomocą pakietu ggplot2 Poleć książkęKup książkę Panele Dodatkowe zmienne można umieścić na wykresie, korzystając między innymi z estetyk. Innym spo- sobem, szczególnie przydatnym w przypadku zmiennych kategorialnych, jest podział wykresu na panele, czyli wykresy cząstkowe, z których każdy wyświetla jeden podzbiór danych. Aby podzielić wykres na panele na podstawie jednej zmiennej, skorzystaj z funkcji facet_wrap(). Pierwszym argumentem tej funkcji powinna być formuła, którą tworzy się za pomocą znaku ~, po któ- rym następuje nazwa zmiennej (w tym przypadku „formuła” jest nazwą struktury danych w języku R, a nie synonimem „równania”). Zmienna przekazywana do funkcji facet_wrap() powinna być dyskretna: ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy)) + facet_wrap(~ class, nrow = 2) Aby podzielić wykres na panele według kombinacji dwóch zmiennych, dodaj do instrukcji funkcję facet_grid(). Pierwszym argumentem tej funkcji również jest formuła. Tym razem powinna ona zawierać nazwy dwóch zmiennych rozdzielone znakiem ~: ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy)) + facet_grid(drv ~ cyl) Jeśli nie chcemy tworzyć paneli na podstawie wierszy i kolumn, możemy zastąpić nazwę zmiennej kropką ., na przykład + facet_grid(. ~ cyl). Panele (cid:95) 33 Poleć książkęKup książkę Ćwiczenia 1. Co się stanie, jeśli podzielisz wykres na panele na podstawie zmiennej ciągłej? 2. Co oznaczają puste komórki na wykresie utworzonym przy użyciu instrukcji facet_grid(drv ~ cyl)? Jaka jest ich zależność względem tego wykresu? ggplot(data = mpg) + geom_point(mapping = aes(x = drv, y = cyl)) 3. Jakie wykresy powstaną po uruchomieniu tego kodu? Do czego służy znak .? ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy)) + facet_grid(drv ~ .) ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy)) + facet_grid(. ~ cyl) 4. Przyjrzyj się wykresowi w pierwszym panelu utworzonym za pomocą poniższego kodu: ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy)) + facet_wrap(~ class, nrow = 2) Jakie korzyści płyną z użycia paneli w porównaniu z użyciem estetyki koloru? Jakie są wady tego podejścia? Jak się to zmieni, jeśli skorzystasz z wielkiego zbioru danych? 5. Przeczytaj pomoc dla ?facet_wrap. Do czego służy argument nrow? Do czego służy argument ncol? Jakie inne opcje kontrolują układ poszczególnych paneli? Dlaczego funkcja facet_grid() nie przyjmuje argumentów nrow i ncol? 6. Podczas korzystania z funkcji facet_grid() w kolumnach zwykle należy umieszczać zmien- ne z bardziej unikatowymi poziomami. Dlaczego? 34 (cid:95) Rozdział 1. Wizualizacja danych za pomocą pakietu ggplot2 Poleć książkęKup książkę Obiekty geometryczne Co mają ze sobą wspólnego te dwa wykresy? Oba przestawiają zależność między tą samą zmienną x a tą samą zmienną y i oba przedstawiają te same dane. Ale te wykresy nie są identyczne. Każdy z nich reprezentuje dane za pomocą innego obiektu wizualnego. W terminologii ggplot2 mówimy, że wykorzystują różne obiekty geometryczne. Obiekt geometryczny służy do reprezentacji danych na wykresie. Wykresy zwykle opisuje się na pod- stawie użytego typu obiektu geometrycznego. Przykładowo na wykresach słupkowych używamy słup- ków, na wykresach liniowych używamy linii, na wykresach pudełkowych używamy prostokątów itd. Z tego trendu wyłamują się wykresy punktowe, które wykorzystują punkty. Jak widać powyżej, te same dane można przedstawić na wykresie za pomocą różnych obiektów geometrycznych. Na wykresie z lewej strony użyto punktów, a na wykresie z prawej użyto linii gładkiej, dopasowanej przebiegiem do danych. Aby zmienić obiekt geometryczny wykorzystywany na wykresie, w wywołaniu ggplot() należy skorzy- stać z innej funkcji geometrycznej. Aby narysować przedstawione powyżej wykresy, można skorzystać z następującego kodu: # z lewej ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy)) # z prawej ggplot(data = mpg) + geom_smooth(mapping = aes(x = displ, y = hwy)) Każda funkcja geometryczna dostępna w pakiecie ggplot2 przyjmuje argument mapping. Nie może- my jednak dowolnie stosować wszystkich estetyk z każdą funkcją geometryczną. Możemy skonfigu- rować kształt punktu, ale nie możemy zdefiniować „kształtu” linii. Z drugiej strony, możemy ustawić typ linii. Za pomocą funkcji geom_smooth() możemy narysować linie, których typ będzie zróżnicowany, zgodnie z unikatowymi wartościami zmiennej zmapowanej na estetykę linetype: ggplot(data = mpg) + geom_smooth(mapping = aes(x = displ, y = hwy, linetype = drv)) Obiekty geometryczne (cid:95) 35 Poleć książkęKup książkę W tym przypadku funkcja geom_smooth() prezentuje dane o samochodach za pomocą trzech linii, na podstawie wartości zmiennej drv dotyczącej układu napędowego samochodu. Jedna linia dotyczy punktów o wartości 4, druga linia dotyczy punktów o wartości f, a trzecia linia dotyczy punktów o wartości r. W tym przypadku wartość 4 dotyczy samochodów z napędem na cztery koła, f dotyczy samochodów z napędem na przednie koła, a r samochodów z napędem na tylne koła. Jeśli ta reprezentacja danych wydaje się dziwna, możemy zwiększyć jej czytelność, nakładając linie na surowe dane i kolorując wykres według wartości zmiennej drv. Zauważ, że na tym wykresie używamy jednocześnie dwóch typów obiektów geometrycznych! Jeśli czujesz się podekscytowany, zapnij pasy. W kolejnym podrozdziale dowiesz się, jak umieścić kilka typów obiektów geometrycznych na jednym wykresie. 36 (cid:95) Rozdział 1. Wizualizacja danych za pomocą pakietu ggplot2 Poleć książkęKup książkę W pakiecie ggplot2 mamy do dyspozycji ponad 30 typów obiektów geometrycznych, a w pakietach rozszerzających znajdziemy ich jeszcze więcej (przykłady można znaleźć na stronie https://www. ggplot2-exts.org). Obszerne omówienie tego zagadnienia znajdziemy w ściągawce pakietu ggplot2 do- stępnej na stronie http://rstudio.com/cheatsheets. Więcej informacji o poszczególnych typach obiektów geometrycznych można znaleźć w pomocy: ?geom_smooth. W przypadku wielu typów obiektów geometrycznych, na przykład geom_smooth(), jeden obiekt geo- metryczny służy do wyświetlenia wielu wierszy danych. W tej sytuacji można zmapować estetykę group do zmiennej kategorialnej, aby narysować wiele obiektów. ggplot2 wykreśli osobne obiekty dla każdej unikatowej wartości zmiennej grupującej. W praktyce ggplot2 zawsze automatycznie zgrupuje dane dla tych obiektów geometrycznych, wtedy gdy zmapujemy estetykę na zmienną dyskretną (jak w przykładzie wykorzystującym estetykę linetype). Warto na tym polegać, ponieważ jeśli skorzystamy z samej estetyki grupy, nie zostanie automatycznie wygenerowana legenda ani cechy wyróżniające obiekty geometryczne: ggplot(data = mpg) + geom_smooth(mapping = aes(x = displ, y = hwy)) ggplot(data = mpg) + geom_smooth(mapping = aes(x = displ, y = hwy, group = drv)) ggplot(data = mpg) + geom_smooth( mapping = aes(x = displ, y = hwy, color = drv), show.legend = FALSE ) Obiekty geometryczne (cid:95) 37 Poleć książkęKup książkę Aby wyświetlić kilka typów obiektów geometrycznych na jednym wykresie, dodaj kilka funkcji geo- metrycznych do wywołania ggplot(): ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy)) + geom_smooth(mapping = aes(x = displ, y = hwy)) Jednak w ten sposób wprowadzamy do kodu duplikację. Wyobraźmy sobie, że chcemy, aby na osi y wyświetlone były wartości zmiennej cty zamiast hwy. Musimy wtedy przepisać nazwę zmiennej w dwóch miejscach, ryzykując tym samym, że zapomnimy uaktualnić jedno z nich. Możemy uniknąć tego ryzyka, przekazując do funkcji ggplot() zestaw mapowań. ggplot2 potraktuje je jako mapowania globalne, mające zastosowanie w każdym obiekcie geometrycznym wykresu. Innymi słowy, za pomocą poniższego kodu wygenerujemy taki sam wykres jak poprzednio: ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) + geom_point() + geom_smooth() Jeśli umieścimy mapowania w funkcji geometrycznej, ggplot2 uzna je za mapowania lokalne dla warstwy. Za ich pomocą rozszerzy lub przesłoni mapowania globalne tylko w tej warstwie. Dzięki temu w różnych warstwach można wyświetlić różne estetyki: ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) + geom_point(mapping = aes(color = class)) + geom_smooth() Zobacz pierwszy wykres na następnej stronie. Ten sam pomysł można wykorzystać, by poprzez argument data określić różne dane dla każdej war- stwy. W poniższym przykładzie wygładzona linia reprezentuje jedynie podzbiór zbioru danych mpg, czyli małe samochody. Lokalny argument data w wywołaniu geom_smooth() przesłania globalny argu- ment data w wywołaniu ggplot() tylko dla tej warstwy: 38 (cid:95) Rozdział 1. Wizualizacja danych za pomocą pakietu ggplot2 Poleć książkęKup książkę ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) + geom_point(mapping = aes(color = class)) + geom_smooth( data = filter(mpg, class == subcompact ), se = FALSE ) (Działanie funkcji filter() poznasz w kolejnym rozdziale. Teraz wyjaśnię tylko, że w tym przykładzie za pomocą tego polecenia wybieramy jedynie małe samochody). Obiekty geometryczne (cid:95) 39 Poleć książkęKup książkę Ćwiczenia 1. Jakiej geometrii użyjesz, aby narysować wykres liniowy? Wykres pudełkowy? Histogram? Wykres warstwowy? 2. Wyobraź sobie wynik działania poniższego kodu. Następnie uruchom go w R i zweryfikuj swoje przewidywania: ggplot( data = mpg, mapping = aes(x = displ, y = hwy, color = drv) )+ geom_point() + geom_smooth(se = FALSE) 3. Do czego służy kod show.legend = FALSE? Co się stanie, gdy go usuniesz? Jak myślisz, dlaczego użyłem go wcześniej w tym rozdziale? 4. Do czego służy argument se w funkcji geom_smooth()? 5. Czy te dwa wykresy są inne? Dlaczego? ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) + geom_point() + geom_smooth() ggplot() + geom_point( data = mpg, mapping = aes(x = displ, y = hwy) )+ geom_smooth( data = mpg, mapping = aes(x = displ, y = hwy) ) 6. Odtwórz kod R potrzebny do wygenerowania następujących wykresów (zobacz na następnej stronie). Przekształcenia statystyczne Następnie przyjrzymy się wykresom słupkowym. Wykresy słupkowe na pierwszy rzut oka są bardzo proste, ale okazują się ciekawe, ponieważ na ich przykładzie możemy dostrzec pewne subtelności doty- czące wykresów. Przyjrzyjmy się prostemu wykresowi słupkowemu, takiemu, jaki uzyskamy za pomo- cą funkcji geom_bar(). Poniższy wykres przedstawia całkowitą liczbę diamentów ze zbioru danych diamonds, pogrupowaną według zmiennej cut. Zbiór danych diamonds jest dostępny w pakiecie ggplot2 i zawiera informacje o około 54 000 diamentów. Znajdziemy w nim wartości między innymi takich parametrów jak price, czyli cena, carat, czyli waga w karatach, color, czyli kolor, clarity, czyli przej- rzystość i cut, czyli szlif każdego diamentu. Na wykresie na stronie 42 widać, że dostępnych jest więcej diamentów o szlifie wysokiej niż niskiej jakości: ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut)) Zobacz pierwszy wykres na stronie 42. 40 (cid:95) Rozdział 1. Wizualizacja danych za pomocą pakietu ggplot2 Poleć książkęKup książkę Na osi x wykresu przedstawione są wartości zmiennej cut ze zbioru diamonds. Na osi y wyświetlone są wartości parametru count, ale count nie jest zmienną w zbiorze diamonds! Skąd się wziął parametr count? Na wielu wykresach, na przykład na wykresach punktowych, prezentowane są surowe wartości ze zbiorów danych. Na innych wykresach, na przykład słupkowych, stosowane są nowe, obliczone wartości: (cid:120) Wykresy słupkowe, histogramy i wieloboki częstotliwości grupują dane, a następnie prezentują liczbę elementów znajdujących się w poszczególnych grupach. (cid:120) Na wykresach liniowych model jest dopasowywany do danych, a następnie wykreślane są przewi- dywania wyznaczone przez model. Przekształcenia statystyczne (cid:95) 41 Poleć książkęKup książkę (cid:120) Wykresy pudełkowe obliczają kompleksowe podsumowanie rozkładu wartości i wyświetlają spe- cjalnie sformatowane prostokąty. Algorytm wykorzystywany do obliczania nowych wartości wykresu nosi nazwę stat. Jest to skrót od słów statistical transformation, czyli przekształcenia statystyczne. Poniższy rysunek przedstawia dzia- łanie tego procesu w przypadku funkcji geom_bar(). To, które przekształcenie zostanie użyte przez funkcję geometryczną, można sprawdzić, weryfikując wartość domyślną argumentu stat. Na przykład ?geom_bar wyświetli informację, że domyślną war- tością stat jest count, co oznacza, że funkcja geom_bar() wykorzystuje funkcję stat_count(). Funkcja stat_count() jest opisana na tej samej stronie co funkcja geom_bar(), a jeśli przewiniemy w dół treść dokumentacji, znajdziemy sekcję zatytułowaną „Computed variables”. Informuje ona, że w tym przypadku obliczane są dwie nowe zmienne: count i prop. 42 (cid:95) Rozdział 1. Wizualizacja danych za pomocą pakietu ggplot2 Poleć książkęKup książkę Ogólnie rzecz biorąc, funkcji geometrycznych i przekształceń statystycznych można używać wymiennie. Poprzedni wykres można utworzyć, korzystając z funkcji stat_count() zamiast geom_bar(): ggplot(data = diamonds) + stat_count(mapping = aes(x = cut)) Ten kod działa, ponieważ każdej funkcji geometrycznej odpowiada domyślne przekształcenie staty- styczne, a każdemu przekształceniu statystycznemu odpowiada domyślna funkcja geometryczna. Oznacza to, że zwykle można używać funkcji geometrycznych bez obaw o właściwe przekształcenia statystyczne. Istnieją trzy sytuacje, kiedy należy jawnie określić przekształcenie statystyczne: (cid:120) Chcemy przesłonić domyślne przekształcenia statystyczne. W poniższym kodzie zmieniłem prze- kształcenia statystyczne funkcji geom_bar() z count (domyślne) na identity. Dzięki temu mogę zmapować wysokość słupków na surowe wartości zmiennej y. Niestety podczas rozmów o wykre- sach słupkowych ludzie mogą mieć na myśli ten rodzaj wykresu, na którym wysokość słupka jest już obecna w danych, lub wcześniejszy wykres słupkowy, na którym wysokość słupka jest generowana na podstawie liczby wierszy. demo - tribble( ~a, ~b, bar_1 , 20, bar_2 , 30, bar_3 , 40 ) ggplot(data = demo) + geom_bar( mapping = aes(x = a, y = b), stat = identity ) (Nie przejmuj się, że nie znasz jeszcze składni - lub tibble(). Być może odgadłeś jej znaczenie z kontekstu, a już niebawem dowiesz się dokładnie, co oznacza!) Przekształcenia statystyczne (cid:95) 43 Poleć książkęKup książkę (cid:120) Chcemy przesłonić domyślne mapowanie przekształconych zmiennych na estetyki. Na przykład chcemy wyświetlić wykres słupkowy proporcji zamiast liczności: ggplot(data = diamonds) + geom_bar( mapping = aes(x = cut, y = ..prop.., group = 1) ) Aby znaleźć zmienne obliczane przez przekształcenie statystyczne, poszukaj sekcji pomocy zatytułowanej „Computed variables”. (cid:120) Chcemy zwrócić uwagę na przekształcenia statystyczne w naszym kodzie. Możemy skorzy- stać z funkcji stat_summary(), która oblicza sumaryczne wartości y dla każdej unikatowej wartości x, aby zwrócić uwagę na obliczane podsumowanie: 44 (cid:95) Rozdział 1. Wizualizacja danych za pomocą pakietu ggplot2 Poleć książkęKup książkę ggplot(data = diamonds) + stat_summary( mapping = aes(x = cut, y = depth), fun.ymin = min, fun.ymax = max, fun.y = median ) ggplot2 udostępnia ponad 20 przekształceń statystycznych. Każde z nich jest funkcją, dzięki czemu możemy w standardowy sposób uzyskać pomoc, wykonując przykładowo polecenie ?stat_bin. Aby uzyskać kompletną listę przekształceń statystycznych, zajrzyj do ściągawki pakietu ggplot2. Ćwiczenia 1. Która domyślna funkcja geometryczna jest związana z funkcją stat_summary()? Jak można prze- pisać wcześniejszy wykres, aby skorzystać z funkcji geometrycznej zamiast z przekształcenia statystycznego? 2. Do czego służy funkcja geom_col()? Czym różni się od funkcji geom_bar()? 3. Większość funkcji geometrycznych i przekształceń statystycznych tworzy pary, które niemal zawsze są używane wspólnie. Przeczytaj dokumentację i wykonaj listę tych par. Co mają ze sobą wspólnego? 4. Jakie zmienne oblicza funkcja stat_smooth()? Jakie parametry sterują jej zachowaniem? 5. Na naszym wykresie słupkowym proporcji musieliśmy skorzystać z zapisu group = 1. Dlaczego? Innymi słowy, na czym polega problem z poniższymi wykresami? ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, y = ..prop..)) ggplot(data = diamonds) + geom_bar( mapping = aes(x = cut, fill = color, y = ..prop..) ) Przekształcenia statystyczne (cid:95) 45 Poleć książkęKup książkę Dostosowanie położenia Z wykresami słupkowymi wiąże się jeszcze jedna magiczna sztuczka. Otóż wykres słupkowy można pokolorować, korzystając zarówno z estetyki color, jak i bardziej przydatnej fill: ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, color = cut)) ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = cut)) Zauważ, co się stanie, jeśli zmapujemy estetykę fill na inną zmienną, na przykład clarity: słupki zostaną automatycznie umieszczone jeden nad drugim. Każdy kolorowy prostokąt reprezentuje kom- binację wartości cut i clarity: ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = clarity)) Układanie słupków jeden nad drugim odbywa się automatycznie poprzez dostosowanie położenia na podstawie argumentu position. Jeśli nie chcesz tworzyć skumulowanego wykresu słupkowego, możesz skorzystać z jednej z trzech innych opcji: identity , dodge lub fill : 46 (cid:95) Rozdział 1. Wizualizacja danych za pomocą pakietu ggplot2 Poleć książkęKup książkę (cid:120) W przypadku argumentu position = identity każdy obiekt zostanie umieszczony dokładnie w tym miejscu, w którym się znajduje w kontekście wykresu. Nie jest to zbyt wygodne w przypad- ku słupków, ponieważ prowadzi do ich nakładania się na siebie. Aby zaprezentować ten efekt, musimy zadbać o niewielką przezroczystość słupków, ustawiając parametr alpha na małą wartość, lub utworzyć całkowicie przezroczyste słupki, ustawiając fill = NA: ggplot( data = diamonds, mapping = aes(x = cut, fill = clarity) )+ geom_bar(alpha = 1/5, position = identity ) ggplot( data = diamonds, mapping = aes(x = cut, color = clarity) )+ geom_bar(fill = NA, position = identity ) Dostosowanie położenia za pomocą wartości identity lepiej sprawdza się w przypadku geo- metrii dwuwymiarowych, takich jak punkty, dla których jest to wartość domyślna. (cid:120) position = fill działa podobnie jak kumulowanie wartości, ale każdy zestaw nałożonych na siebie słupków ma jednakową wysokość. Dzięki temu łatwiej porównywać proporcje w poszcze- gólnych grupach: ggplot(data = diamonds) + geom_bar( mapping = aes(x = cut, fill = clarity), position = fill ) (cid:120) position = dodge umieszcza nakładające się obiekty bezpośrednio obok siebie. To ułatwia po- równywanie poszczególnych wartości: ggplot(data = diamonds) + geom_bar( mapping = aes(x = cut, fill = clarity), position = dodge ) Dostosowanie położenia (cid:95) 47 Poleć książkęKup książkę Istnieje jeszcze jeden rodzaj dostosowania, który nie sprawdzi się na wykresach słupkowych, ale może się bardzo przydać na wykresach punktowych. Przypomnij sobie nasz pierwszy wykres punktowy. Czy zauważyłeś, że wykres wyświetla jedynie 126 punktów, chociaż zbiór danych zawiera 234 obserwacje? Wartości zmiennych hwy i displ są zaokrąglone, dlatego punkty są wyświetlone na siatce, a wiele punktów nakłada się na siebie. Ten problem jest znany pod nazwą overplotting, czyli nakładania się na siebie elementów wykresu. Tak ułożone punkty utrudniają dostrzeżenie, gdzie znajduje się duża ilość danych. Czy punkty są rozłożone równomiernie na wykresie, czy może istnieje pewna specjalna kombinacja zmiennych hwy i displ, która zawiera 109 wartości? Takiego umieszczenia punktów na siatce można uniknąć, ustawiając dostosowanie pozycji na jitter . Jeśli napiszemy position = jitter , do każdego punktu zostanie dodana mała ilość losowego szumu. Dzięki temu punkty zostaną od siebie oddalone, ponieważ prawdopodobieństwo przydzielenia tej samej wartości losowego szumu do dwóch różnych punktów jest nikłe: ggplot(data = mpg) + geom_point( 48 (cid:95) Rozdział 1. Wizualizacja danych za pomocą pakietu ggplot2 Poleć książkęKup książkę mapping = aes(x = displ, y = hwy), position = jitter ) Dodanie losowych zakłóceń wydaje się dziwnym sposobem na ulepszenie wykresu, ale chociaż taki wykres będzie mniej dokładny w małej skali, to w dużej skali ujawni więcej informacji. Ponieważ jest to tak przydatna operacja, w pakiecie ggplot2 zaimplementowano skrót wywołania geom_point(position = (cid:180) jitter ), czyli geom_jitter(). Więcej informacji o dostosowywaniu położenia można znaleźć w pomocy wszystkich metod stosowa- nych w tym procesie: ?position_dodge, ?position_fill, ?position_identity, ?position_jitter i ?position_stack. Ćwiczenia 1. Na czym polega problem z tym wykresem? Jak można go poprawić? ggplot(data = mpg, mapping = aes(x = cty, y = hwy)) + geom_point() Dostosowanie położenia (cid:95) 49 Poleć książkęKup książkę 2. Jakie parametry funkcji geom_jitter() sterują poziomem fluktuacji? 3. Porównaj ze sobą funkcje geom_jitter() i geom_count(). 4. Jakie jest domyślne dopasowanie położenia dla geom_boxplot()? Utwórz odpowiednią wizualizację zestawu danych mpg. Systemy współrzędnych Systemy współrzędnych są prawdopodobnie najbardziej skomplikowanym zagadnieniem związanym z pakietem ggplot2. Domyślnym systemem współrzędnych jest system kartezjański, w którym poło- żenie każdego punktu określane jest za pomocą niezależnych współrzędnych x i y. Istnieją inne syste- my współrzędnych, które mogą się nam czasem przydać: (cid:120) coord_flip() przełącza osie x i y. Przydaje się to, jeśli chcemy utworzyć na przykład poziome wy- kresy pudełkowe. Z tego systemu warto też korzystać w przypadku długich etykiet, które mogą się nakładać na oś x: ggplot(data = mpg, mapping = aes(x = class, y = hwy)) + geom_boxplot() ggplot(data = mpg, mapping = aes(x = class, y = hwy)) + geom_boxplot() + coord_flip() (cid:120) coord_quickmap() ustawia poprawny współczynnik proporcji dla map. Jest to bardzo ważne, jeśli prezentujemy dane przestrzenne za pomocą pakietu ggplot2 (na co niestety brakuje nam miejsca w tej książce): nz - map_data( nz ) ggplot(nz, aes(long, lat, group = group)) + geom_polygon(fill = white , color = black ) ggplot(nz, aes(long, lat, group = group)) + geom_polygon(fill = white , color = black ) + coord_quickmap() 50 (cid:95) Rozdział 1. Wizualizacja danych za pomocą pakietu ggplot2 Poleć książkęKup książkę (cid:120) coord_polar() wykorzystuje współrzędne biegunowe. Stosując współrzędne biegunowe, uzyskamy ciekawe połączenie wykresu słupkowego z wykresem biegunowo-polowym: bar - ggplot(data = diamonds) + geom_bar( mapping = aes(x = cut, fill = cut), show.legend = FALSE, width = 1 )+ theme(aspect.ratio = 1) + labs(x = NULL, y = NULL) bar + coord_flip() bar + coord_polar() Ćwiczenia 1. Przekształć skumulowany wykres słupkowy w wykres kołowy za pomocą funkcji coord_polar(). 2. Do czego służy funkcja labs()? Przeczytaj dokumentację. 3. Na czym polega różnica między coord_quickmap() a coord_map()? Systemy współrzędnych (cid:95) 51 Poleć książkęKup książkę 4. Patrząc na poniższy wykres, czego możesz się dowiedzieć o zależności między miastem (cty) a wydajnością zużycia paliwa na autostradzie (hwy)? Dlaczego ważne jest wywołanie coord_fixed()? Do czego służy funkcja geom_abline()? ggplot(data = mpg, mapping = aes(x = cty, y = hwy)) + geom_point() + geom_abline() + coord_fixed() Warstwowa gramatyka graficzna W poprzednich podrozdziałach dowiedziałeś się, jak tworzyć wykresy punktowe, słupkowe i pudeł- kowe. Poznałeś podstawy, dzięki którym możesz utworzyć dowolny rodzaj wykresu za pomocą pakietu ggplot2. Zweryfikujmy swoje umiejętności i uzupełnijmy nasz szablon, dodając dostosowywanie położenia, przekształcenia statystyczne, systemy współrzędnych i podział na panele: ggplot(data = DANE ) + FUNKCJA_GEOMETRYCZNA ( mapping = aes( MAPOWANIA ), stat = PRZEKSZTA(cid:146)CENIE_STATYSTYCZNE , position = POZYCJA )+ FUNKCJA_WSPÓ(cid:146)RZ(cid:125)DNYCH + FUNKCJA_PANELI Nasz nowy szablon przyjmuje siedem parametrów, które są oznaczone nawiasami ostrymi. W prakty- ce, aby utworzyć wykres, zwykle nie trzeba definiować wszystkich siedmiu parametrów, ponieważ ggplot2 uzupełni wartościami domyślnymi wszystkie parametry z wyjątkiem danych, mapowań i funkcji geometrycznych. Siedem parametrów w szablonie składa się na gramatykę opisu grafiki, czyli formalny system stosowa- ny w tworzeniu wykresów. Gramatyka opisu grafiki opiera się na spostrzeżeniu, że dowolny wykres można w unikatowy sposób opisać za pomocą kombinacji zbioru danych, funkcji geometrycznej, zestawu mapowań, przekształceń statystycznych, dopasowania położenia, systemu współrzędnych i schematu paneli. 52 (cid:95) Rozdział 1. Wizualizacja danych za pomocą pakietu ggplot2 Poleć książkęKup książkę Aby sprawdzić, jak to działa, zastanówmy się, jak zbudować od podstaw prosty wykres. Możemy za- cząć od zbioru danych, a następnie przekształcić go, wyodrębniając informacje, które chcemy zwi- zualizować (za pomocą przekształcenia statystycznego) zgodnie z poniższym rysunkiem. W kolejnym kroku możemy wybrać obiekt geometryczny reprezentujący każdą obserwację w prze- kształconych danych. Następnie możemy wykorzystać estetyki geometrii, aby odwzorować zmienne występujące w danych. Wartości każdej zmiennej mapujemy następnie na poziomy estetyki zgodnie z poniższym rysunkiem. Następnie wybieramy system współrzędnych, na którym umieszczone zostaną obiekty geometrycz- ne. Położenie obiektów (które samo w sobie jest właściwością estetyki) posłuży do wyświetlenia wartości zmiennych x i y. Na tym etapie można zakończyć tworzenie wykresu, ale możemy jeszcze dostosować położenie obiektów geometrycznych w systemie współrzędnych (dostosowanie położenia) lub podzielić wykres na podwykresy (panele). Możemy też rozszerzyć wykres, dodając jedną lub więcej warstw, z których każda wykorzystywałaby zbiór danych, obiekt geometryczny, zestaw mapowań, przekształcenie statystyczne i dopasowanie położenia. Za pomocą tej metody możemy zbudować dowolny wykres, jaki tylko sobie wyobrazimy. Innymi słowy, poznany w tym rozdziale szablon kodu można wykorzystać do zbudowania setek tysięcy uni- katowych wykresów. Warstwowa gramatyka graficzna (cid:95) 53 Poleć książkęKup książkę 54 (cid:95) Rozdział 1. Wizualizacja danych za pomocą pakietu ggplot2 Poleć książkęKup książkę Skorowidz D dane nieoczyszczone, 166 relacyjne, 167 typu data i czas, 222, 278 typu tibble, 125, 280 zagnieżdżone, 354 data i czas, 221, 222, 278 definiowanie funkcji, 241 kolumn kluczy, 177 diagnostyka RStudio, 88 diamenty, 332 długość sekwencji, 286 wektora wyjściowego, 285 dodawanie zmiennych, 68 dokument, 412 Markdown, 374 dopasowanie, 191, 198, 201 zgrupowane, 203 dopełnianie wektorów, 269 dostosowanie położenia, 46 dplyr, 59, 390 dane relacyjne, 167 dodawanie zmiennych, 68 filtrowanie wierszy, 61 funkcje kluczowe, 60 grupowanie, 82 łączenie operacji, 72 organizowanie wierszy, 65 przekształcanie danych, 59 rozgrupowywanie, 83 wybieranie kolumn, 66 zgrupowane wartości sumaryczne, 71 A adnotacje, 390 agregacje kumulatywne i zwijane, 70 analiza danych, 9 eksploracyjna, 91 argument mapping, 35 position, 46 argumenty funkcji, 256 arytmetyka modularna, 69 B bazowy R, 292 biblioteka tidyverse, 125 błąd średniokwadratowy, 79 bookdown, 418 brakujące wartości, 63, 74, 160 broom, 351 czyszczenie danych, 369 modele, 351 budowanie modelu, 331 C checkpoint, 420 CRAN, 13 cytaty, 384 czas, 222 czasy trwania, 231 czynniki, 211, 278 modyfikowanie poziomów, 218 tworzenie, 211 czyszczenie danych, 9, 149, 369 421 Poleć książkęKup książkę drzewa, 330 dwie zmienne ciągłe, 109 kategorialne, 107 działanie potoków, 239 E EDA, Exploratory Data Analysis, 91 eksploracja danych, 21 eksploracyjna analiza danych, EDA, 91 etykieta, 388 F filtrowanie, 83 według rang, 80 wierszy, 61 forcats, 211 czynniki, 211 formatowanie tekstu, 376 formaty R Markdown, 411 formuły, 318 fragmenty kodu, 377 funkcja accumulate(), 300 add_residuals(), 357 aes(), 29, 216 arrange(), 65 as_date(), 225 as_datetime(), 225 as_tibble(), 125 assign(), 242 base::merge(), 179 boundary(), 209 c(), 268 col_mean(), 288 coll(), 208 coord_cartesian(), 98 coord_flip(), 50, 106 coord_polar(), 51 coord_quickmap(), 50 count(), 213 cut_number(), 111 data.frame(), 126 data_grid(), 336 detect(), 300 discard(), 299 dplyr::count(), 94 422 (cid:95) Skorowidz dplyr::select(), 154, 159 dplyr::mutate(), 356 every(), 299 facet_grid(), 33 fct_inorder(), 212 fct_recode(), 218, 219 fct_relevel(), 216 fct_reorder(), 215, 216 fct_rev(), 217 filter(), 61, 83, 270 fixed(), 208 gather(), 153 gather_predictions(), 322 geom_abline(), 52, 309 geom_bar(), 40 geom_box plot(), 104 geom_histogram(), 110 geom_jitter(), 360 geom_label(), 391 geom_smooth(), 35, 36 geom_text(), 390, 395 geom_tile(), 108 ggplot2::cut_width(), 94 head_while(), 300 is.na(), 100 keep(), 299 labs(), 51, 388 lag(), 70 lead(), 70 left_join(), 172 library(), 15 lm(), 314 map(), 292 map2(), 364 mean(), 78, 288 min_rank(), 71 modelr::data_grid(), 315 modelr::add_predictions(), 315 mutate(), 68, 83, 173 nest(), 363 optim(), 314 purrr::transpose(), 294 readr::parse_factor(), 212 reduce(), 300 regex(), 208 replace_all(), 205 rmarkdown::render(), 384 safely(), 295 scale_color_viridis(), 403 Poleć książkęKup książkę select(), 66 separate(), 157 some(), 299 spread(), 153 stat_summary(), 44 stopifnot(), 258 str(), 127 str_c(), 189, 259 str_count(), 200 str_detect(), 198, 200 str_extract(), 203 str_locate(), 206 str_match(), 203 str_replace_all(), 204 str_split(), 209 str_sub(), 206 str_to_lower(), 190 stringr::str_split(), 364 stringr::str_wrap(), 394 summarize(), 71, 83, 365 switch(), 254 tail_while(), 300 tibble(), 126 today(), 226 tryCatch(), 243 unique(x), 212 unite(), 157 unnest(), 357, 359, 368 vapply(), 293 walk(), 298 funkcje, 247 argumenty, 256 efektów ubocznych, 261 mapujące, 290 pakietu dplyr, 60 predykatów, 299 przekształcające, 261 sprawdzanie wartości, 257 sumaryczne, 78 środowisko, 262 testujące, 269 wbudowane, 56 wywoływanie, 56 wyznaczające rangi, 71 z pakietu purrr, 263 z pakietu stringr, 198 zwektoryzowane, 364 zwracane wartości, 260 G gapminder, 352 generowanie hipotez, 13, 304 przewidywań, 316 ggplot obiekty geometryczne, 38 ggplot2, 23, 387 dostosowanie położenia, 46 grafika dla komunikacji, 387 gramatyka graficzna, 52 mapowanie estetyk, 26 obiekty geometryczne, 35 panele, 33 statystyki, 40 systemy współrzędnych, 50 szablony, 405 tworzenie wykresu, 25 wizualizacja danych, 23 wywołania, 115 ggrepel, 392 ggthemes, 405 grafika dla komunikacji, 387 gramatyka graficzna, 52 gromadzenie, 153 grupowanie, 197 według wielu zmiennych, 82 wyników mutowania, 83 H hierarchia typów wektorów, 264 hipoteza, 13 histogram, 94 htmlwidgets, 415 I importowanie danych, 131 informacje o modelach, 349 instrukcja, 323 else, 254 if, 252 interaktywność, 415 interwały, 233 iteracje, 281 Skorowidz (cid:95) 423 Poleć książkęKup książkę J jakość modelu, 359 jawne instrukcje zwracania, 260 K katalogi, 119 klasa difftime, 231 klasy znaków, 194 klucz główny, 170 obcy, 170 klucze legendy, 396 zduplikowane, 176 knitr, 374 kod inline, 381 kodowanie, 55 kolumny w postaci list, 356, 361, 363 tworzenie, 363 upraszczanie, 367 komponenty danych typu data i czas, 226 komunikacja, 10, 371 kotwice, 193 kowariancja, 102 między zmiennymi kategorialnymi, 107 kształty, 31 kwantyl, 79 L legenda, 396, 398 leniwe przetwarzanie, 243, 259 liczby całkowite, 266 rzeczywiste, 265 liczność, 75, 80 listy, 264, 272, 275 nazwane, 365 logarytmy, 70 lubridate, 221 przetwarzanie daty i czasu, 221 Ł łączenie, 159 napisów, 189 operacji w potok, 72 424 (cid:95) Skorowidz wyrażeń logicznych, 253 zmiennej ciągłej z kategorialną, 321 M magrittr, 239 potoki, 239 mapowanie, 295 estetyk, 26 mediana, 79 metadane, 276 miary położenia, 78 pozycji, 79 rangi, 79 rozkładu, 79 model, 303 ceny diamentów, 332 liczba lotów, 339 modele, 10, 112 interakcje, 323 jakość modelu, 359 przekształcenia, 326 wizualizowanie, 315 modelowanie, 21, 307 modelr, 307 modelowanie, 307 modyfikowanie istniejącego obiektu, 284 kolejności czynnika, 214 poziomów czynników, 218 mutowanie, 83 N nadpisywanie oryginału, 241 nagłówek YAML, 383 napisy, 187 długość, 188 łączenie, 189 ustawienia regionalne, 190 wyodrębnianie fragmentów, 189 narzędzia z pakietu magrittr, 243 nawiasy klamrowe, 254 nazwa argumentu, 257 fragmentu, 378 wektora, 270 z podkreślnikiem, 56 Poleć książkęKup książkę nieznana długość sekwencji, 286 wektora, 285 notatniki, 413 obiekty O geometryczne, 35 pośrednie, 241 typu difftime, 231 typu tibble, 168 obsługa niepowodzeń, 293 odchylenie, 93 standardowe, 79 wizualizacja rozkładów, 93 odcinki czasu, 230 odmiany pętli for, 284 odporne modele liniowe, 330 odwołania wsteczne, 197 okresy, 232 opcje fragmentów, 378 globalne, 381 wyjścia, 411 operacje na zbiorach, 167, 184 operator [, 271 [[, 272 operatory arytmetyczne, 69 logiczne, 62 porównania, 62 organizowanie wierszy, 65 overplotting, 48 P packrat, 420 pakiet bookdown, 18, 418 broom, 351 checkpoint, 420 dendextend, 18 dplyr, 59, 167 forcats, 211 gapminder, 352 ggplot2, 23 ggrepel, 392 ggthemes, 405 hms, 222 knitr, 374 Lahman, 77 lubridate, 221, 231 magrittr, 239 modelr, 307 nycflights13, 168 packrat, 420 prettydoc, 418 purrr, 263, 281, 351 R, 14 RColorBrewer, 401 readr, 131 rticles, 418 Shiny, 416 stringi, 210 stringr, 187, 191 tibble, 125 tidyr, 149 pandoc, 374, 384 panele, 33 penalizowane modele liniowe, 329 pętla for, 282 odmiany, 284 wzorce, 299 podsumowanie wielowartościowe, 365 podzbiory, 128 list, 274 wartości wektorów, 270 pomoc, 16 porównania, 62 logiczne, 70 potok, 72, 239, 242 potwierdzanie hipotez, 13, 304 powiększanie, 404 prettydoc, 418 prezentacje, 413 problemy, 32 ze złączeniami, 183 program RStudio, 13 programowanie, 237 funkcyjne, 288 projekty, 117 RStudio, 119 proporcje wartości logicznych, 81 przekształcanie danych, 59 listy w wektor, 367 Skorowidz (cid:95) 425 Poleć książkęKup książkę przekształcenia statystyczne, 40 przesunięcia, 70 przetwarzanie daty i czasu, 221 napisów, 187 przewidywania na podstawie modelu, 315 przygotowywanie danych, 123 pulpity, 414 purrr, 263, 281, 351 iteracje, 281 modele, 351 R R Markdown, 373 formatowanie tekstu, 376 formaty, 411 fragmenty kodu, 377 ramka danych, 125 mpg, 24 ranking, 71 RColorBrewer, 401 readr, 131 importowanie danych, 131 reguły dopełniania wektorów, 269 relacje, 169 resztki, 316 rodzaje wektorów, 264 rodziny modeli, 318, 329 rozdzielanie, 157 rozgrupowywanie, 83 rozkładanie, 155 rozstęp ćwiartkowy, 79, 104 RStudio, 14 rticles, 418 S serwisy WWW, 417 Shiny, 416 skalary, 269 skale, 396 ColorBrewer, 402 skrót klawiszowy Cmd/Ctrl+Alt+I, 377 Cmd/Ctrl+Enter, 88 Cmd/Ctrl+Shift+Enter, 419 Cmd/Ctrl+Shift+F10, 118 Cmd/Ctrl+Shift+N, 87 426 (cid:95) Skorowidz Cmd/Ctrl+Shift+P, 77 Cmd/Ctrl+Shift+S, 88, 118 skróty, 291 skrypty, 87, 117 standardowa miara rozkładu, 79 statystyki, 40 ważone, 257 strefy czasowe, 234 stringi, 210 stringr, 187 przetwarzanie napisów, 187 studium przypadku czyszczenie rz
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Język R. Kompletny zestaw narzędzi dla analityków danych
Autor:
,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: