+ - 0:00:00
Notes for current slide
Notes for next slide

Podstawy programowania

Wizualizacja danych

© Łukasz Wawrowski

1 / 47

Wczytanie danych

  1. Ściągnij zbiór rossmann.xlsx i umieść w folderze data

  2. Utwórz nowy skrypt i wczytaj biblioteki tidyverse i readxl

  3. Wczytaj zbiór danych rossmann.xlsx do pamięci R

  4. Za pomocą funkcji filter wybierz jeden ze sklepów

10:00
3 / 47

Proste wykresy

  • plot() - wykres punktowy/liniowy

  • hist() - histogram

  • barplot() - wykres kolumnowy

  • boxplot() - wykres pudełkowy

4 / 47

Problemy z nazwami zmiennych

  • nazwy zmiennych nie powinny zawierać polskich liter i spacji

  • nazwy zmiennych nie powinny zaczynać się od liczby

  • surowe dane zwykle nie posiadają nazw kolumn przystosowanych do przetwarzania przez komputer

  • ten problem rozwiązuje pakiet janitor i funkcja clean_names():

zbior <- janitor::clean_names(zbior)
  • funkcja ta zamienia wielkie litery na małe, spacje na podkreślniki i znaki transliteruje do ASCII.
5 / 47

Wczytanie danych

library(tidyverse)
library(readxl)
rossmann <- read_xlsx("../data/rossmann.xlsx")
sklep11 <- rossmann %>%
filter(sklep_id == 11, czy_otwarty == "Tak")
plot(sklep11$sprzedaz, sklep11$liczba_klientow)

6 / 47

Pakiet ggplot2

Tworzenie wykresów poprzez dodawanie (+) kolejnych warstw.

7 / 47

Pierwsza wersja 10.06.2007

Niezbędny kod

ggplot(data = zbior_danych, aes(x = cecha1, y=cecha2))
  • x - zawartość osi x

  • y - zawartość osi y

  • fill - wypełnienie

  • size - rozmiar

  • color - kolor

  • shape - kształt

8 / 47

Wykres punktowy - geom_point

Obowiązkowe argumenty aes:

  • x

  • y

9 / 47

Wykres punktowy

ggplot(sklep11, aes(x=liczba_klientow,
y=sprzedaz)) +
geom_point()

10 / 47

Dodatkowe elementy

  • xlim(0,10) - minimum i maksimum osi x

  • ylim(-5,5) - minimum i maksimum osi y

  • xlab("tekst") - etykieta osi x

  • ylab("tekst") - etykieta osi y

  • ggtitle("tekst") - tytuł wykresu

  • labs(subtitle = "tekst") - podtytuł

  • labs(caption = "tekst") - podpis

11 / 47

Wykres punktowy

ggplot(sklep11, aes(x=liczba_klientow,
y=sprzedaz)) +
geom_point() +
xlab("Liczba klientów") +
ylab("Sprzedaż")

12 / 47

Wykres punktowy

ggplot(sklep11, aes(x=liczba_klientow,
y=sprzedaz)) +
geom_point() +
xlab("Liczba klientów") +
ylab("Sprzedaż") +
ylim(0,20000)

13 / 47

Wykres punktowy

ggplot(sklep11, aes(x=liczba_klientow,
y=sprzedaz)) +
geom_point() +
xlab("Liczba klientów") +
ylab("Sprzedaż") +
ylim(0,20000) +
ggtitle("Sprzedaż i liczba klientów w sklepie nr 11")

14 / 47

Motywy

  • theme_bw
  • theme_classic
  • theme_dark
  • theme_gray - domyślnie
  • theme_light
  • theme_linedraw
  • theme_minimal
  • theme_void

Powyższe motywy są zaimplementowane w pakiecie ggplot2, ale można także skorzystać z dodatkowych pakietów: ggthemes, bbplot, xkcd.

Istnieje także możliwość stworzenia własnego motywu.

15 / 47

Zadanie

Przetestuj kilka motywów i wybierz jeden z nich.

02:00
16 / 47

Zapisywanie wykresu

  • w zakładce Plots -> Export

  • funkcja ggsave()

    • filename - nazwa pliku z rozszerzeniem (png, pdf)

    • width i height - szerokość i wysokość (domyślnie w calach)

    • scale - skalowanie po zmianie rozdzielczości

    • dpi - liczba punktów na cal

W przypadku generowania plików pdf z polskimi znakami trzeb dodać argument device = cairo_pdf.

Funkcja ggsave() zapisuje ostatnio stworzony wykres. Wątek na temat zachowania tej funkcji.

17 / 47

Wykres punktowy

ggplot(sklep11, aes(x=liczba_klientow,
y=sprzedaz)) +
geom_point() +
xlab("Liczba klientów") +
ylab("Sprzedaż") +
ylim(0,20000) +
ggtitle("Sprzedaż i liczba klientów w sklepie nr 11") +
theme_light()
ggsave("figs/sklep11.png",
width = 12,
height = 10,
scale = 0.5,
dpi = 1200)

18 / 47

Wykres punktowy

ggplot(sklep11, aes(x=liczba_klientow,
y=sprzedaz,
color=czy_promocja)) +
geom_point() +
xlab("Liczba klientów") +
ylab("Sprzedaż") +
ylim(0,20000) +
ggtitle("Sprzedaż i liczba klientów w sklepie nr 11") +
theme_light()

19 / 47

Wykres punktowy

ggplot(sklep11, aes(x=liczba_klientow,
y=sprzedaz,
color=czy_promocja)) +
geom_point() +
xlab("Liczba klientów") +
ylab("Sprzedaż") +
scale_color_discrete(name = "Promocja?") +
ylim(0,20000) +
ggtitle("Sprzedaż i liczba klientów w sklepie nr 11") +
theme_light()

20 / 47

Wykres punktowy

ggplot(sklep11, aes(x=liczba_klientow,
y=sprzedaz,
color=czy_promocja)) +
geom_point() +
xlab("Liczba klientów") +
ylab("Sprzedaż") +
scale_color_discrete(name = "Promocja?") +
ylim(0,20000) +
ggtitle("Sprzedaż i liczba klientów w sklepie nr 11") +
theme_light()

21 / 47

Wykres punktowy

ggplot(sklep11, aes(x=liczba_klientow,
y=sprzedaz,
color=czy_promocja)) +
geom_point() +
xlab("Liczba klientów") +
ylab("Sprzedaż") +
scale_color_discrete(name = "Promocja?") +
ylim(0,20000) +
ggtitle("Sprzedaż i liczba klientów w sklepie nr 11") +
theme_light() +
theme(legend.position = "bottom")

22 / 47

Wykres punktowy

ggplot(sklep11, aes(x=liczba_klientow,
y=sprzedaz,
color=czy_promocja)) +
geom_point() +
xlab("Liczba klientów") +
ylab("Sprzedaż") +
scale_color_discrete(name = "Promocja?") +
ylim(0,20000) +
ggtitle("Sprzedaż i liczba klientów w sklepie nr 11") +
theme_light() +
theme(legend.position = "inside", legend.position.inside = c(0.1,0.8))

23 / 47

Wykresy interaktywne

plotly to biblioteka do wykresów, która posiada swoją własną składnię.

Za pomocą funkcji ggplotly() można zamienić każdy wykres ggplot2 na wykres interaktywny.

24 / 47

Wykres punktowy

p <- ggplot(sklep11, aes(x=liczba_klientow,
y=sprzedaz,
color=czy_promocja)) +
geom_point() +
xlab("Liczba klientów") +
ylab("Sprzedaż") +
scale_color_discrete(name = "Promocja?") +
ylim(0,20000) +
ggtitle("Sprzedaż i liczba klientów w sklepie nr 11") +
theme_light()
plotly::ggplotly(p)
50010001500200005000100001500020000
Promocja?NieTakSprzedaż i liczba klientów w sklepie nr 11Liczba klientówSprzedaż
25 / 47

Zadanie

10:00

Na podstawie zbioru temperatura w maju wygeneruj poniższy wykres.

26 / 47

Histogram - geom_histogram

Obowiązkowe argumenty aes:

  • x

Domyślnie tworzy zawsze 30 słupków.

27 / 47

Histogram

ggplot(sklep11, aes(x = liczba_klientow)) +
geom_histogram()

Domyślnie tworzonych jest 30 słupków.

28 / 47

Histogram - 12 słupków

ggplot(sklep11, aes(x = liczba_klientow)) +
geom_histogram(bins = 12)

29 / 47

Histogram - słupek = 100 klientów

ggplot(sklep11, aes(x = liczba_klientow)) +
geom_histogram(binwidth = 100)

30 / 47

Histogram - fill jako zmienna

ggplot(sklep11, aes(x = liczba_klientow,
fill = czy_promocja)) +
geom_histogram(binwidth = 100)

31 / 47

Histogram - fill jako kolor

ggplot(sklep11, aes(x = liczba_klientow)) +
geom_histogram(binwidth = 100,
fill = "blue")

32 / 47

Krzywa gęstości

ggplot(sklep11, aes(x = liczba_klientow)) +
geom_density(fill = "blue")

33 / 47

Wykres słupkowy - geom_bar / geom_col

  • geom_bar - funkcja sama oblicza wartości do wyświetlenia na podstawie zbioru danych jednostkowych

  • geom_col - funkcja otrzymuje już obliczone wartości (dane zagregowane)

34 / 47

Wykres słupkowy - geom_bar

ggplot(sklep11, aes(x = czy_promocja)) +
geom_bar()

35 / 47

Wykres słupkowy - geom_bar

ggplot(sklep11, aes(x = czy_promocja)) +
geom_bar(fill = "#99d8c9")

36 / 47

Wykres słupkowy - geom_col

sklep_promocja <- sklep11 %>%
count(czy_promocja)
ggplot(sklep_promocja, aes(x = czy_promocja,
y = n)) +
geom_col()

37 / 47

Wykres pudełkowy - geom_boxplot

Obowiązkowe argumenty aes:

  • x - zmienna grupująca (tekstowa/faktor)

  • y - zmienna analizowana

38 / 47

Wykres pudełkowy

ggplot(sklep11, aes(x=czy_promocja, y=sprzedaz)) +
geom_boxplot()

39 / 47

Wykres pudełkowy

ggplot(sklep11, aes(y=czy_promocja, x=sprzedaz)) +
geom_boxplot()

40 / 47

Zadanie

Stwórz następujący wykres

10:00
41 / 47

facet_wrap

ggplot(sklep11, aes(x=liczba_klientow,
y=sprzedaz)) +
geom_point() +
facet_wrap( ~ czy_promocja)

42 / 47

facet_wrap

ggplot(sklep11, aes(x=liczba_klientow,
y=sprzedaz)) +
geom_point() +
facet_wrap(dzien_tyg ~ czy_promocja)

43 / 47

facet_wrap

ggplot(sklep11, aes(x=liczba_klientow,
y=sprzedaz)) +
geom_point() +
facet_wrap(dzien_tyg ~ czy_promocja,
nrow = 2)

44 / 47

facet_grid

ggplot(sklep11, aes(x=liczba_klientow,
y=sprzedaz)) +
geom_point() +
facet_grid(dzien_tyg ~ czy_promocja)

45 / 47

Zadania

Wykonaj zadania zamieszczone na stronie.

Bootcamp z zadaniami z przetwarzania i wizualizacji: https://r-bootcamp.netlify.app/

46 / 47

Pytania?

47 / 47
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow