Rachunek Prawdopodobieństwa i Statystyka lab 5 Kaja Gutowska (Kaja.Gutowska@cs.put.poznan.pl) Pliki do pobrania: -http://www.cs.put.poznan.pl/kgutowska/rpis/dane/dane.csv -http://www.cs.put.poznan.pl/kgutowska/rpis/dane/dane2.csv -http://www.cs.put.poznan.pl/kgutowska/rpis/dane/dane3.csv -http://www.cs.put.poznan.pl/kgutowska/rpis/dane/testr2.txt -http://www.cs.put.poznan.pl/kgutowska/rpis/dane/testr3.txt -http://www.cs.put.poznan.pl/kgutowska/rpis/dane/example.r 1. Operacje na plikach i katalogach Chcąc przeprowadzić analizę danych należy załadować/wczytać dane do R, a wyniki z pewnością chcemy zapisać. Funkcje z którymi warto się zapoznać: - setwd() - pozwala ustawić katalog roboczy (argumentem jest ścieżka do pliku), - getwd() - funkcja, która pobiera informacje o aktualnym katalogu roboczym. > setwd("c:/users/kaja/desktop/prowadzone Zajęcia/RPiS") > getwd() Aby zobaczyć jakie pliki znajdują się w aktualnym katalogu, można użyć: > list.files() lub dobrze znanego: > dir() W przypadku, gdy nie chcemy podawać jawnie ścieżki do pliku, możemy użyć funkcji file.choose() aby otworzyć okno systemowe wyboru pliku. 2. Najpopularniejsze funkcje do zapisu i odczytu danych: Funkcje do zapisu i odczytu danych znajdują się pakiecie utils. Odczyt danych: - read.table(): wczytuje dane o strukturze ramki danych, gdzie kolumny odpowiadają kolejnym zmiennym, a wiersze kolejnym przypadkom. Wartości w kolumnach muszą mieć odpowiedni typ. Istnieją również inne ważne funkcje pozwalające na odczytanie danych: - read.csv / read.csv2 Wykorzystaj help (np.?read.table()), aby sprawdzić jak powinna wyglądać deklaracja wyżej przedstawionych funkcji. Zwróć uwagę, że funkcje te różnią się parametryzacją argumentów domyślnych. Przeczytaj opisy argumentów tych funkcji. Kilka drobnych uwag: - Dane zapisane w programie Excel mają format.csv. Dla tego formatu separatorem kolumn jest średnik, natomiast kropką dziesiętną jest przecinek (read.csv2()).
- Dane zapisane w angielskiej wersji Excel różnią się tym, że kropka dziesiętna jest kropką, a separatorem jest przecinek (read.csv()). Istniejące dane można odczytać za pomocą funkcji read.csv/read.csv2() #dane które są separowane za pomocą przecinka > macierz1 <- read.csv(file="ścieżka/dane2.csv", sep=",") #dane które są separowane za pomocą średnika > macierz2 <- read.csv2(file="ścieżka/dane.csv", sep=";") > tabela1 <- read.table(file="ścieżka/dane.csv", sep=";") (Zwróć uwagę na różnicę wizualizacji danych między macierzą a tabelą.) Chcąc skorzystać z nazw kolumn należy je udostępnić używając funkcji attach(). Dane można zapisać > write.csv(macierz1, file="ścieżka/zapisana_macierz1.csv") > write.csv2(macierz2, file="ścieżka/zapisana_macierz2.csv") Zapis danych: - write.table(): zapisuje wartość zmiennej do pliku tekstowego, zapisać można zmienną atomową, wektor, macierz, ramkę danych. - write.csv(): separatorem jest,, kropką dziesiętną jest.. - write.csv2(): separatorem jest ;, kropką dziesiętną jest,. help. Sprawdź argumenty oraz przeczytaj opisy argumentów funkcji do zapisu używając Przykłady: - wypisz wektor na ekranie: > write.table(1:5, "ściezka do pliku") > write.table("tekst w pliku", "ściezka do pliku") Dostęp do schowka uzyskuje się poprzez podanie clipboard zamiast nazwy pliku. - zapisz wektor do schowka systemowego (skopiuj! poniższą instrukcję i wklej do R): > write.table(1:5,"clipboard",col.names=false, row.names=false) - przeczytaj ze schowka: > readclipboard() Schowek jest bardzo przydatny, można skopiować kilka interesujących nas danych z pliku i wyświetlić tylko te wybrane dane w formie tabeli. - skopiuj wybrane dane z pliku dane.csv i użyj instrukcji read.table: > tab <- read.table(file="clipboard",sep=";", header=true)
Ciekawostka: Zapisywanie dużych obiektów typu data.frame do pliku tekstowego może być czasochłonne, zwłaszcza jeśli kolumny są różnego typu (ma to związek ze stylem formatowania). R sprawdza typ każdej kolumny i wiersza i formatuje go w zależności od ich typu. W przypadku, gdy mamy ramkę danych, w której wszystkie wartości są tego samego typu, najlepiej przekonwertować ja na macierz używając funkcji as.matrix(). 3. Inne funkcje do zapisu i odczytu danych: Odczyt danych: - funkcja scan(): jest bardziej elastyczną funkcją odczytywania danych, która zwraca wektor odczytanych wartości. Co więcej, dane nie muszą być w postaci tabelarycznej (w każdym wierszu może być różna liczba wartości). Ważnym parametrem funkcji skan() jest what, który określa typ odczytywanych wartości. Dodatkowo, funkcja scan(), pozwala na wprowadzenie wartości bezpośrednio z konsoli. Przykład: > wektor.wartosci <- scan("http://www.cs.put.poznan.pl/kgutowska/rpis/dane/testr2.txt") > wektor.wartosci > wektor.lancuchow <- scan("http://www.cs.put.poznan.pl/kgutowska/rpis/dane/testr3.txt", what="character", sep=",") > wektor.lancuchow #wprowadzenie danych z konsoli: > dane_z_konsoli <- scan() #wprowadzamy dowolne dane (aby zakończyć wprowadzanie trzeba zrobić podać pustą linię), np. 1: 1 2 3 4: 1 2 3 7: 1 2 3 10: #funkcja scan() zwraca wektor: > dane #zapisz dane do pliku.csv > write.csv(dane_z_konsoli, file = "WriteTest.csv") #zapisz zwracany wektor jako macierz: > macierz <-matrix(dane_z_konsoli, 3, 3) #3x3 to wymiary macierzy!
4. Import danych z bibliotek R: Pakiety R udostępniają również pewne zbiory danych. Aby dostać się do istniejących, przykładowych zbiorów wykorzystuje się funkcję data(). Wywołaj funkcję data() bez argumentów i zobacz jakie zbiory posiada R. Można także znaleźć dodatkowe informacje o zasobach w internecie, np: http://stat.ethz.ch/r-manual/r-devel/library/datasets/html/00index.html - wykorzystaj dowolny pakiet, np cars, stwórz jakiś wykres: > data(cars) > plot(cars) > lines(lowess(cars)) 5. Zapisywanie grafik (wykresów) do pliku: Najprostszym sposobem, ale czasochłonnym jest zapis grafiki manualnie: File\Save as (pod warunkiem że mamy wykres w oknie graficznym R). Innym sposobem jest wykorzystanie funkcji z pakietu grdevices: png(), jpeg(), bmp(), pdf(), pictex() i inne. Funkcje te przekierowują domyślne wyjście dla grafiki do określonego przez użytkownika pliku. Jednak samo użycie wymienionej powyżej funkcji to za mało by zapisać grafikę. Należy zamknąć przekierowanie i zapisać grafikę o określonej nazwie do określonego pliku. Przykład: > png("ścieżka/grafika1.png") > plot(cars) > lines(lowess(cars)) > dev.off() Oczywiście można zdefiniować wielkość wykresu, określając wartości dla wybranych parametrów: > png("ścieżka/grafika2.png", width = 600, height = 400) Przydatną funkcją jest x11(), dzięki niej otwiera się kolejne okno graficzne i można stworzyć kolejny wykres. Tym sposobem można tworzyć różne wykresy w różnych oknach. > data(cars) > plot(cars) > x11() > data(co2) > plot(co2) Kilka wybranych funkcji z pakietu grdevices, które służą do zarządzania urządzeniami graficznymi: > dev.cur() - aktualnie otwarte urządzenie graficzne > dev.list() - lista otwartych urządzeń graficznych > dev.set(which = dev.next()) - uaktywnia wskazane urządzenie graficzne > dev.off(which = dev.cur()) - zamyka wskazane urządzenie graficzne
6. Tryb wsadowy (BATCH MODE) Program R może być uruchomiony zarówno w trybie interaktywnym (z graficznym interfejsem) jak i wsadowym. W przypadku, gdy nie potrzebujemy interakcji z R, można uruchomić tryb wsadowy. Jako strumień wejściowy należy wskazać zawartość pliku z listą poleceń do wykonania (po prostu skrypt). Strumień wejściowy można przekierować do wskazanego pliku. Chcąc ustawić katalog roboczy, wykorzystaj setwd() lub zrób to manualnie przez menu: File/Change dir. Następnie wybierz File/Source R code lub wykorzystaj funkcję source(), która jako argument przyjmuje ścieżkę do pliku, w którym znajduje się skrypt (stwórz przykładowy skrypt wyświetlający Hello R ). > setwd("") > source("ścieżka/example.r") Tryb wsadowy na linuxie, różne sposoby: $ Rscript example.r $ R CMD BATCH example.r output.txt $ R --vanilla <R.r> result.txt Parametr vanilla powoduje, że R po zakończeniu pracy nie pyta się, czy zapamiętać historię poleceń oraz przestrzeń roboczą. Na windowsie w wierszu poleceń, konieczne jest podanie ścieżki do R: "C:\Program Files\R\R-3.2.2\bin\R.exe" CMD BATCH --vanilla "C:\ścieżka\ example.r" out.txt
Zadania: Skrypty pod koniec zajęć prześlij na maila (Kaja.Gutowska@cs.put.poznan.pl). Proszę nadać tytuł maila zgodnie z opisem: RPiS_Imię_Nazwisko_lab5 1. Wykorzystaj zadanie z poprzednich zajęć, tak aby załadowanie przykładowych danych i wygenerowanie wykresów odbyło się w trybie wsadowym. Wygenerowane wykresy mają się zapisać w folderze roboczym o nazwie zgodnej ze schematem: numer_wykres-dd-mm-rrrr. 2. Stwórz plik o wybranym przez siebie rozszerzeniu (np. txt lub csv), który zawiera informacje o studentach i ich ocenach z konkretnych przedmiotów. Napisz funkcję, która dla każdego studenta wyliczy średnią arytmetyczną. Program powinien wyświetlić nazwisko najlepszego studenta. Stwórz stosowne wykresy. 3. Wczytaj zbiór danych (http://www.cs.put.poznan.pl/kgutowska/rpis/dane/dane3.csv) i wykonaj poniższe polecenia: - Napisz funkcję sprawdzającą typ i klasę każdej kolumny. - Wyświetl dane z wierszy o parzystych indeksach. - Wyświetl dane odpowiadajace pacjentom powyżej 50 roku życia, u których wystąpiły przerzuty (Wezly.chlonne=1).