1 Podstawowa grafika w R
UWAGA: Ta części laboratorium 4 dotyczy podstawowej grafiki w R. Należy “wypróbować” działanie omawianych argumentów - np. poprzez dobór kolorów na wykresie, własny opis osi, własny tytuł wykresu itd. Na koniec kilka prostych zadań.
UWAGA: W jednym z kolejnych laboratoriów omówimy pakiet ggplot2, który ma dużo większe możliwości.
Podstawowa metoda tworzenia wykresów w R jest użycie polecenia
plot(x,y)
, gdzie x
jest wektorem argumentów
(oś OX), a y
jest wektorem wartości (oś OY).
Polecenie plot
pozwala również na ustawienie zakresów
osi, nadanie osiom nazw itp. Szczegółową pomoc na temat obu opcji można
uzyskać wpisując polecenie ? plot.default
.
Zaczynamy od prostego wykresu punktowego oraz kawałkami liniowego
Listę nazw kolorów dostępnych w R można uzyskać poprzez polecenie
colors()
, uwaga: w ten sposób otrzymana
lista jest dość długa… dlatego też ograniczymy się do wyświetlenia 6
pierwszych elementów tej listy za pomocą polecenia
head
:
## [1] "white" "aliceblue" "antiquewhite" "antiquewhite1"
## [5] "antiquewhite2" "antiquewhite3"
UWAGA: Kolory można podawać też za pomocą kodu hex.
Wpisując w google hasło color picker
lub
selektor kolorów
otrzymamy stronę, gdzie można ręcznie
wybrać kolor, a jego kod hex pojawi się w odpowiednim polu.
x=seq(1,10,by=.01) # więcej punktów, "wygładzenie" paraboli
y=x*x
plot(x,y,type='l',col="#21b8ae") # kod hex umieszczamy w cudzysłowie, znak # jest obowiązkowy
Osiom i wykresowi można nadać nazwy:
1.1 Dodawanie punktów lub
linii do wykresu za pomocą poleceń points
oraz
lines
, odpowiednio.
Dodawanie punktów do wykresu za pomocą points
y=x*x
plot(x,y,type='l',col='red',xlab='argumenty x',ylab='kwadrat',main='Tytuł wykresu')
x2=seq(1,10,by=.5)
y2=exp(x2)
points(x2,y2,col='blue',pch='k')
y2=x2*sqrt(x2)
points(x2,y2,col='#A689B8',pch=9)
Parametr pch
powyżej służy do określenia symbolu, jaki
zostanie użyty do zaznaczenia punktu na wykresie. Może to być symbol
typu litera, lub znak specjalny - w pomocy ? pch
znajduje
się lista symboli.
Dodawanie linii do wykresu za pomocą lines
y=x*x
plot(x,y,type='l',col='red',xlab='argumenty x',ylab='kwadrat',main='Tytuł wykresu')
y2=exp(x)
lines(x,y2,col='gray')
1.2 Podzielenie okna na części
par(mfrow=c(1,2)) #podział okna graficznego na 1*2 podokna
plot(x,sin(x),type='l')
plot(x,cos(x),type='l')
1.3 Zarządzanie oknami graficznymi
W RStudio za każdym razem wywołania polecenia plot
tworzone jest nowe okno graficzne, a stare okna są zachowywane. Można
przechodzić między rysunkami za pomocą strzałek w lewym, górnym
rogu:
Przycisk “Zoom” otwiera rysunek w nowym, osobnym oknie.
Za pomocą “Export” można zapisać aktualny rysunek do pliku.
“Czerwony krzyżyk” kasuje aktualny rysunek.
“Miotła” usuwa wszystkie rysunki
1.4 Zapisywanie grafiki.
Zapisanie grafiki, zależy głównie od posiadanego systemu operacyjnego. Można wybrać różne formaty zapisu grafiki, m.in:
jpeg | jpeg() | |
png | png() | |
win.metafile | win.metafile() | najlepszy wybór do użycia w Word |
pdf() | najlepszy wybór do użycia w pdflatex | |
postscript | postscript() | najlepszy wybór do użycia w latex i Open Office |
Dla powyższych funkcji możemy użyć między innymi takich argumentów
jak: width
oraz height
, aby dostosować
wysokość oraz szerokość grafiki (podawane wartości w pikselach). Dla
formatu jpeg możemy również dodać argument quality
, aby
zmniejszyć lub zwiększyć poziom kompresji (podana wartość powinna być
procentowa z zakresy \((0,100)\)).
Ogólna metoda, która działa niezależnie od systemu operacyjnego, polega na wykonaniu poniższego kodu:
jpeg('rplot.jpg', width = 500, height=500, quality = 70)# zapisuje grafikę w formacie jpg pod nazwą rplot
plot(x,y)
dev.off()
Możemy również podać wysokość i szerokość grafiki w cm
lub mm
za pomocą używając argumentu units
. W
tym przypadku warto również ustawić rozdzielczość używając
res
.
Grafika zostanie zapisana w chwilowo aktywnym katalogu, który można
sprawdzić za pomocą komendy getwd().
W celu zapisania
grafiki w innym wybrany katalogi można wywołać funkcję
jpeq()
podając ścieżkę dostępu
jpeg('/Moja_ścieżka_dostępu/rplot.jpg')
lub zmieniać
aktualny katalog za pomocą komendy setwd()
.
Inny sposób zmiany aktualnego katalogu to wybranie Files
i odpowiedniego katalogu w prawym dolnym oknie RStudio, a następnie
kliknięcie niebieskiego trybiku i wybranie Set As Working
Directory.
Warto również dodać, że możemy do tych funkcji przekazywać dodatkowe argumentu (więcej informacji w helpie) takie jak, np. width, height,… co może być przydatne, gdy chcemy mieć zapisanych wiele obrazków o takich samych wymiarach.
Gdy operujesz systemem Windows lub Mac, graficzny interfejs ułatwia zapisywanie plików.
Na systemie Windows, wystarczy kliknąć prawym przyciskiem myszki w okno wykresu i wybrać opcję np. “Zapisz jako…”.
Na systemie Mac, klikając w okno wykresy kliknij “Plik->Zapisz” (zostanie on wtedy zapisany w formacie pdf) lub “Plik->Zapisz jako”, aby zapisać w innym formacie.
1.5 Zadania - grafika
1.5.1 Zadanie - grafika
a. Narysować wykres funkcji \(\sin\) na przedziale \([0,10]\)
b. Narysować ponownie wykres funkcji \(\sin\), dodając tym razem zakres osi OY
\([-1.5,1.5]\) (opcja
ylim
). Nadać wykresowi tytuł np “Wykres funkcji sinus”, osi
OX nazwę “Kąt”, a osi OY nazwę “sinus”.
c. Dodać linię o równaniu \(y=\frac{x}{2
\pi}\) do poprzedniego wykresu za pomocą funkcji
lines
. Użyć np. koloru czerwonego.
d. Dodać do poprzedniego wykresu punkty o współrzędnych \((0,1.3)\) , \((1,1)\) oraz \((2,1)\) korzystając z funkcji
points
- punkty narysować niebieskim symbolem ‘*’.
1.5.2 Zadanie - grafika
Podzielić okno graficzne na 2*2 części i narysować:
wykres funkcji \(\cos\) w lewym górnym rogu
wykres funkcji \(\sin\) w prawym górnym rogu
wykres funkcji \(\exp\) w lewym dolnym rogu
wykres funkcji \(\log\) w prawym dolnym rogu
Nadać odpowiednie tytuły poszczególnym wykresom i zapisać wykres do pliku.
1.5.3 Zadanie - grafika
Narysować ponownie wykres funkcji kwadratowej:
x=seq(1,10,by=.01) # więcej punktów, "wygładzenie" paraboli
y=x*x
plot(x,y,type='l',col='red') # kolor wykresu, tutaj 'red'
Polecenie ? plot.default
(wpisane w Console) wyświetla
pomoc na temat dostępnych argumentów polecenia plot
.
Korzystając z pomocy sprawdzić działanie wybranych argumentów, w tym
type
, log
, main
,
sub
, axes
, frame.plot
,
pch
, cex
…
Wykonać osobne wykresy, za każdym razem w tytule wykresu umieszczając testowany argument i jego wartość, np “axes=FALSE”.
2 Importowanie i eksportowanie danych
2.1 Dane z bibliotek
Część zbiorów danych R jest umieszczanych w odpowiednich
bibliotekach. Informacje na temat innych “wbudowanych” zbiorów danych
możemy uzyskać poprzez pomoc ? datasets
. W ogólnym
przypadku pakiet ładujemy poleceniem
library("nazwa_pakietu")
, a dane
data("nazwa_danych")
.
2.2 Dane w formacie tekstowym, csv (comma separated values).
Plik csv jest popularnym formatem przechowywania danych. Niestety,
format ten nie ma ustandaryzowanej struktury. Kolejne kolumny oddzielane
są od siebie znakiem separującym, którym może być przecinek, średnik,
tabulacja. “Kropka dziesiętna” przy zapisie liczb może być oznaczana
przez znak .
lub ,
(kropka lub przecinek).
2.2.1 Import danych za pomocą kreatora RStudio
Dla celów ćwiczeniowych należy ze strony https://home.agh.edu.pl/~bras, podstrona przedmiotu,
ściągnąć plik Student_performance_data.csv
i zapisać ten
plik na dysku (najlepiej w swoim ulubionym folderze).
Kreator importu znajduje się w prawym górnym oknie zmiennych środowiskowych:
Następnie z menu importu wybieramy pierwszą pozycję:
i odszukujemy zapisany wcześniej plik
Student_performance_data.csv
na dysku. Pojawi się kolejne
okienko, gdzie na razie nie importujemy danych przed ustawieniem
odpowiednich parametrów (patrz informacja pod obrazkiem
!!!)
Istotne pola:
Nazwa zmiennej (ramki danych), pod którą będą dostępne dane po imporcie. Można pozostawić bez zmian.
Heading Pierwsza linia zbioru danych może zawierać (i tutaj tak jest) nazwy zmiennych (kolumn) jak w ramkach danych. Tutaj tak jest, należy zmienić na YES.
Pierwsza kolumna może zawierać nazwy/indeksy obserwacji. Można pozostawić bez zmian.
Separator kolumn - należy zmienić na
comma
jeżeli jest to co innego (tutaj ustawiony jest średnik). Dolna część okna powinna się zmienić. To, jaki separator kolumn należy wybrać, zależy od pliku.Znak “kropki dziesiętnej”, należy ustawić na
period
, o ile jest coś innego.Pozwala na potraktowanie łańcuchów tekstu jako zmiennych jakościowych. Nie zmieniamy.
2.2.2 Podgląd danych
Wygodny podgląd danych w RStudio mamy poprzez kliknięcie lupy/tabelki w oknie Enviroment:
2.2.3 “Analiza” zaimportowanych danych
Zbiór danych zawiera informacje na temat uczniów szkół średnich szczegółowo opisując ich dane demograficzne, nawyki związane z nauką, zaangażowanie rodziców, zajęcia pozalekcyjne i wyniki w nauce. Zmienna docelowa, GradeClass, klasyfikuje oceny uczniów na różne kategorie.
W zbiorze danych mamy:
StudentID: Numer identyfikujący studenta,
Age: Wiek studenta,
Gender: Płeć studenta, 0 oznacza mężczyznę, a 1 kobietę,
Ethnicity: grupę etyczną do której należy student:
0: Kaukaz,
1: Afroamerykanin,
2: Azjata,
3: Inne.
ParentalEducation: Poziom wykształcenia rodziców, według poniższych oznaczeń:
0: brak,
1: szkoła wyższa,
2: jakiś koledż,
3: licencjat,
4: wyżej niż licencjat,
StudyTimeWeekly: tygodniowy czas poświęcony nauce,
Absences: Liczba nieobecności w roku szkolnym,
Tutoring: cykl indywidualnych spotkań, 0 oznacza nie, a 1 oznacza tak,
ParentalSupport: poziom wsparcia rodziców według poniższych oznaczeń:
0: brak,
1: niski,
2: umiarkowany,
3: wysoki,
4: bardzo wysoki.
Extracurricular: Uczestnictwo w dodatkowych aktywnościach, 0 oznacza nie, 1 oznacza tak,
Sports: aktywność sportowa, 0 oznacza nie, 1 oznacza tak,
Music: aktywność w działalnościach muzycznych, 0 oznacza nie, 1 oznacza tak,
Volunteering: wolontariat, 0 oznacza nie, 1 oznacza tak,
GPA: Średnia ocen,
GradeClass: klasyfikacja studenta na poziomie średniej ocen, tj:
- 0: GPA\(\ge\) 3.5,
- 1: 3.0 \(\le\) GPA \(<\) 3.5,
- 2: 2.5 \(\le\) GPA \(<\) 3.0,
- 3: 2.0 \(\le\) GPA \(<\) 2.5,
- 4: GPA \(<\) 2.0
2.2.4 Zadania - import danych
Zadania dotyczące zaimportowanego zbioru danych
Student_performance_data
.
Sprawdź jak dużo jest obserwacji w zbiorze danych.
Wyświetl informacje na temat 10 studentów którzy otrzymali najwyższą średnią.
Napisz funkcję sprawdzająca, czy uczeń otrzymał odpowiednią GradeClass na podstawie uzyskanej średniej ocen. Funkcja powinna zwraca listę zawierająca numery indeksów uczniów dla których nastąpiła pomyłka oraz liczbę, ile pomyłek jest w zbiorze danych.
Ile procent studentów realizowało co najmniej 3 spośród 4 dodatkowych aktywności (Extracurricular, Sports, Music, Volunteering). Jaką średnią oni mieli.
Oblicz współczynnik korelacji Pearsona (polecenie
cor
) i narysuj wykres zależności (polecenieplot
) dla:
średniej ocen
GPA
oraz czasu naukiStudyTimeWeekly
,średniej ocen
GPA
oraz nieobecnościAbsences
.
2.2.5 Import danych za pomocą polecenia read.table()
Podstawowa składnia polecenia read.table()
umożliwiająca
import danych jak w kreatorze wyżej ma postać (należy użyć właśnej
ścieżki dostępu):
dane_studenci=read.table(file="C:\\Users\\moje\\Desktop\\Student_performance_data.csv", sep=",", dec=".",header=TRUE)
gdzie
“dane_studenci” to nazwa tworzonej ramki danych,
file - określa położenie pliku na dysku.
UWAGA: konieczne są podwójne slashe, tj
\\
w określaniu lokalizacji pliku! Można też użyć
/
(pojedynczy)
sep, dec - określają odpowiednio separator kolumn i kropkę
dziesiętną,
header - czy pierwszy wiersz zawiera nazwy zmiennych.
Więcej opcji - w pomocy.
Inny sposób wczytania danych, jeżeli dane znajdują się w bieżącym katalogu:
2.2.6 Zadanie - wczytywanie danych
Zadanie 1
Wczytaj swoje dane z dysku za pomocą polecenia pod swoją nazwą (parametrów nie zmieniać, może to tylko zaszkodzić). Lokalizację pliku w Windows można znaleźć klikając prawym klawiszem myszy, “właściwości”, ogólne. Pamiętamy o podwójnych slashach. Sprawdzić w podglądzie danych RStudio zawartość zaimportowanej ramki danych.
Uwaga: Polecenie read.table()
ma duża
liczbę argumentów (a zatem i możliwości), przez co może działać wolno w
przypadku dużej ilości danych. Można wtedy skorzystać z plecenia
fread()
z pakietu data.table
.
Uwaga: w pakiecie utils
znajdują się
polecenia read.csv()
, read.csv2()
,
read.delim()
, read.delim()
mające takie same
działanie jak read.table()
, ale pewne argumenty mają
domyślnie zdefiniowane.
Uwaga: zamiast lokalizacji pliku na dysku można podać jego adres internetowy
3 Zapisywanie danych do pliku tekstowego
Składnia polecenia write.table()
jest podobna do składni
polecenia read.table
. W szczególności określamy dane, plik,
separator, znak kropki dziesiętnej, informacje o nagłówkach kolumn i
wierszy, znak końca linii (eol). Przykładowo, zapiszemy do pliku
poniższą ramkę danych:
#tworzymy przykładową ramkę danych
Francja=as.data.frame(matrix(c(12220,15310,112958,8960,12125,6596,6999,40244,6170,8233,7223,10921,46146,4661,6653,357,395,1247,279,553,2239,3111,7629,4013,3178),ncol=5))
names(Francja)=c('n.human','n.scisle','medyczne','sportowe','techniczne')
row.names(Francja)=c('Bordeaux','Lyon','Paryz','Rennes','Tuluza')
write.table(Francja, file="C:\\Users\\moje\\Desktop\\frans.csv", sep=";", dec=".",col.names=TRUE, row.names=TRUE, eol="\n")
3.1 Zadania z zapisywaniem do pliku
3.1.1 Zadanie - zapis
Otworzyć zapisany plik w notatniku i sprawdzić zawartość (czy rzeczywiście zapisała nam się ramka danych).
3.1.2 Zadanie - zapis
Zapisać ramkę danych gotowego zbioru danych iris
do
pliku. Otworzyć zapisany plik.
Uwagi
Polecenie
## "x"
## "1" 0.721917895134538
## "2" 0.137734582880512
## "3" 0.577125806128606
## "4" 0.574321784777567
## "5" 0.235070161055773
## "6" 0.911978310206905
## "7" 0.17729244264774
## "8" 0.113027463434264
## "9" 0.716244660317898
## "10" 0.204301963560283
“zapisuje” wektor na ekranie.
Polecenie
“zapisuje” wektor do schowka systemowego. Można je “wkleić” za pomocą
ctrl+v
.
4 Importowanie danych w formacie Excela i ich analiza
Dla celów ćwiczeniowych należy ze strony <https://home.agh.edu.pl/~bras>, podstrona
przedmiotu, ściągnąć plik Students_performance.xlsx
i
zapisać ten plik na dysku (najlepiej w swoim ulubionym folderze).
4.1 Import danych za pomocą kreatora
Ponownie uruchamiamy kreator importu:
Tym razem wybieramy Excela.
RStudio może chcieć na tym etapie zainstalować dodatkowe pakiety (jednorazowo).
Wskazujemy odpowiedni plik na dysku (można też adres internetowy).
W kreatorze importu warto zwrócić uwagę na:
można ramce danych nadać własną nazwę,
pierwszy wiersz odpowiada za nazwy zmiennych, warto zaznaczyć,
wybór arkusza w pliku Excela, tutaj jest i tak tylko jeden
4.2 Import danych Excel -
polecenie z pakietu openxlsx
W standardowy sposób, o ile nie jest dostępny, instalujemy pakiet
openxlsx
.
Ładujemy pakiet poleceniem library("openxlsx")
.
Polecenie importu danych z pliku
Students_performance.xlsx
ma postać:
dane_studentow=read.xlsx("C:\\Usersxxxxxx\\Students_performance.xlsx", sheet=1)
,
gdzie należy podać położenie pliku na dysku.
5 Importowanie danych w formacie Matlaba
Jeden ze sposobów na importowanie danych w formacie Matlab (pliki z
rozszerzeniem .mat) jest wykorzystanie funkcji readMat
z
pakietu R.matlab
.
Może być wymagane za pierwszym razem zainstalowanie pakietu
R.matlab
(górny pasek, Tools, InstallPackages).
Tym razem zaimportujemy dane bezpośrednio ze strony www
library("R.matlab")
#options(max.print=5000) # czytaj UWAGA poniżej
matlab1=readMat("https://home.agh.edu.pl/~bras/WPDAD/matlab_dane.mat")
Dane wczytywane są w postaci listy kolejnych obiektów importowanego pliku.
Oczywiście, można plik ściągnąć na dysk i zaimportować dane podając ścieżkę dostępu do pliku na dysku.
Zadanie 1
Co znajduje się w zaimportowanym pliku (str
,
summary
)? Wskazówka: wartości numeryczne w pliku są losowe,
nie mają żadnej interpretacji.
UWAGA: ze względu na pewne ograniczenia, może
pojawić się w danych komunikat postaci “reached
getOption(”max.print”) – omitted” w przypadku próby wyświetlenia
całej zaimportowanej listy. W takiej sytuacji można zmienić wartość
max.print
jak w powyższym kodzie. Nie ma potrzeby ponownego
importu, R zaakceptował dane, ale nie uważa za stosowne wyświetlania
wszystkiego co użyszkodnik zechce.
5.1 Dostęp do zaimportowanych danych, typy danych…
## [1] TRUE
## $A
## [,1] [,2] [,3] [,4]
## [1,] 0.8354046 0.9431698 0.78962047 0.6534568
## [2,] 0.8357133 0.3214731 0.79918504 0.4896553
## [3,] 0.0498575 0.8064668 0.04956477 0.9728522
## [4,] 0.5458862 0.6013988 0.28319863 0.7484899
## [1] FALSE
## [,1] [,2] [,3] [,4]
## [1,] 0.8354046 0.9431698 0.78962047 0.6534568
## [2,] 0.8357133 0.3214731 0.79918504 0.4896553
## [3,] 0.0498575 0.8064668 0.04956477 0.9728522
## [4,] 0.5458862 0.6013988 0.28319863 0.7484899
## [1] TRUE
## [1] 0.9431698