1 Podstawowa grafika w R
UWAGA: Ta części laboratorium 5 dotyczy podstawowej grafiki w R. Ciekawszy jest pakiet graficzny ggplot2, którym zajmiemy się na następnych zajęciach.
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
.
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: liczba 6 elementów wynika z domyślnego
argumentu polecenia head
, odpowiednim argumentem liczbę tę
można zmienić. Odwrotne działanie: ostatnie elementy listy/wektora
wyświetlamy za pomocą tail
.
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
.
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')
Parametr pch
powyżej służy do określenia symbolu, jaki
zostanie użyty do zaznaczenia punktu na wykresie
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 - sinus
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 ‘*’.
Efekt powinien być podobny do:
1.5.2 Zadanie grafika - okno 2x2
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. Efekt powinien przypominać:
1.5.3 Zadanie grafika - 2 przykłady wykresów do odesłania
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. Z wbudowanych przykładowych danych iris
oraz
women
korzystaliśmy w Laboratorium 2. 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")
.
Korzystanie ze zbiorów z innych bibliotek omówimy przy okazji Laboratorium 6.
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 dane_w1.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 dane_w1.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.
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
Zaimportowany zbiór danych zawiera rzeczywiste dane pomiarowe z jednej doby pomiaru dla 140 metrowego masztu pomiarowego.
Pod linkiem Anemometr wygląd przykładowych urządzeń pomiarowych (strona producenta)
Podstawowe informacje techniczne, czyli co mamy w tych danych:
- Rejestrator danych zapisuje dane na karcie pamięci co 10 minut. Pojedynczy rekord (wiersz, fragment na screenie niżej) w pliku danych opisuje 5 parametrów dla każdego urządzenia: Avg - średnia z 10 minut pomiaru, Min i Max - wartości minimalne i maksymalne w ciągu 10 minut, StdDev - odchylenie standardowe, Count - liczba odczytów = 600 (czyli technicznie odczyt następuje co sekundę).
Taki pojedynczy rekord dla urządzenia “Anemometer1” ma postać:
w przypadku Count różnego od 600 możemy mieć do czynienia z usterką urządzenia pomiarowego, problemów z zasilaniem lub innych problemów technicznych
w przypadku niskiego St.Dev możemy mieć do czynienia z ciszą lub zamarznięciem urządzenia (np. w okresie zimowym).
Urządzenia opisane jako “anemometer” i/lub “wind speed” - służą do pomiaru prędkości wiatru [m/s].
Urządzenia opisane jako “wind vane” i/lub “wind direction” - służą do pomiaru kierunku wiatru [w stopniach].
czynniki atmosferyczne jak temperatura [w st. Celcjusza], ciśnienie (barometric air pressure) [chyba w hPa], wilgotność względna powietrza [w %]
parametry rejestratora typu napięcie [w V]
inne parametry (mniej istotne).
Istotne informacje:
wysokości zamontowanych anemometrów
Anemometr1, 140m
Anemometr2, 140m
Ultrasonic, 137m
Anemometr3, 112m
Anemometr4, 84mwysokości zamontowanych vane’ów:
Ultrasonic, 137m
Wind Vane 1, 137m
Wind Vane 2, 81m
2.2.4 Zadanie - profil pionowy wiatru
Utworzyć ramkę danych zawierającą 2 kolumny: wysokość anemometru
(dane wyżej) oraz średnią dobową (średnia kolumn Avg - policzyć trzeba)
- 5 wierszy, bo 5 urządzeń mamy. Narysować wykres zależności średniej
prędkości wiatru od wysokości (tzw profil pionowy wiatru) - polecenie
typu plot(wysokosc, srednia)
powinno wystarczyć. Dodać
opisy osi, tytuł wykresu.
Ramka i wykres powinny przypominać te poniżej (uwaga: dane wysokości mamy w informacji maszcie pomiarowym wyżej, a dane prędkości należy samodzielnie wyliczyć, a nie przepisywać cyferki).
## wysokosc predkosc
## 1 140 3.611029
## 2 140 3.612678
## 3 137 3.570795
## 4 112 3.569185
## 5 84 3.457780
2.2.5 Zadanie - róża wiatrów
Zainstalować pakiet o nazwie openair
(Górny pasek,
Tools, InstallPackages…). Narysować różę wiatrów:
library("openair") # ładowanie biblioteki
#?windRose #pomoc
windRose(dane_w1, ws="Ultrasonic.wind_speed.Avg", wd="Ultrasonic.wind_direction.Avg")# wlaściwe polecenie
2.2.6 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ć:
gdzie
“dane_wiatr” 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! Inne polecenia mogą
wymagać użycia innych ukośników…
Można też użyć pojedynczego znaku /
sep, dec - określają odpowiednio separator kolumn i kropkę
dziesiętną,
header - czy pierwszy wiersz zawiera nazwy zmiennych.
Więcej opcji - w pomocy.
2.2.6.1 Zadanie - import
Wczytaj swoje dane z dysku 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
2.2.6.2 Import danych za pomocą polecenia read.csv()
Można użyć tez plecenia:
dane_w1 <- read.csv("dane_w1.csv")
gdzie plik dane_w1.csv
znajduje się w bieżacym katalogu
(albo trzeba podać pełną sciężkę dostępu).
2.2.7 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 ramkę
danych utworzoną w jednym z wcześniejszych laboratoriów:
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")
2.2.8 Zadanie - zapis danych
Zapisać ramkę danych iris
do pliku. Otworzyć zapisany
plik.
Uwagi
Polecenie
## "x"
## "1" 0.716010678559542
## "2" 0.374742878135294
## "3" 0.400819241767749
## "4" 0.489198772702366
## "5" 0.837871527532116
## "6" 0.945206771837547
## "7" 0.615105347242206
## "8" 0.55823859712109
## "9" 0.0128257269971073
## "10" 0.325341913616285
“zapisuje” wektor na ekranie.
Polecenie
“zapisuje” wektor do schowka systemowego. Można je “wkleić” za pomocą
ctrl+v
.
3 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 dane_w2.xlsx
i zapisać ten plik
na dysku (najlepiej w swoim ulubionym folderze).
3.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
3.2 Analiza danych - tylko informacje techniczne. Zadania - po grafice.
Powyższe dane pochodzą z rzeczywistego pomiaru, tym razem dane z całego miesiąca. Jest to inny zestaw pomiarowy niż wcześniej, ale struktura jest podobna: średnia, odchylenie standardowe, minimum i maximum w próbce 10-minutowej.
Urządzenia (plik ze szczegółami jest “tajny”, CH - Channel, kanał):
Anemometry:
CH1, 81.00m; (backup - zapasowy)
CH4, 80.60m;
CH5, 60.90m;
CH6, 40.90mVane’y:
CH7, 78.30m;
CH8, 38.60mInne:
CH9 wilgotność
CH10 ciśnienie
CH11 temperatura
CH12 napięcie w rejestratorze
3.3 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 dane_w2.xlsx
ma
postać:
wiatr=read.xlsx("C:\\Usersxxxxxx\\dane_w2.xlsx", sheet=1)
, gdzie należy podać położenie pliku na dysku.
4 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
## R.matlab v3.7.0 (2022-08-25 21:52:34 UTC) successfully loaded. See ?R.matlab for help.
##
## Dołączanie pakietu: 'R.matlab'
## Następujące obiekty zostały zakryte z 'package:base':
##
## getOption, isOpen
#options(max.print=5000) # czytaj UWAGA poniżej
matlab1=readMat("https://home.agh.edu.pl/~bras/R/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.
4.0.1 Zadanie
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.
4.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