Temat 3 ćwiczenie 5 Bazy danych w R
Pliki, programy i foldery Co to jest plik? Co to jest program? Czy programy są plikami, czy nie? Co to jest skrypt? Czy skrypt jest programem, czy plikiem? Co to folder? Czy folder jest programem, skryptem, czy plikiem?
Definicje programu, pliku i folderu Definicja programu komputerowego Program komputerowy to sekwencja symboli opisująca sposób przetwarzania danych zgodnie z regułami zrozumiałymi dla komputera oraz wyprowadzająca określone wyniki. Także, plik z zapisem kodu programu komputerowego. Definicja pliku komputerowego Plik komputerowy to sekwencja symboli wyświetlanych jako mające znaczenie dla użytkownika jako informacje i dane. Także zapis kodu programu komputerowego. Definicja folderu/katalogu (w komputerze) Folder to logiczna struktura organizacji danych na nośnikach pamięci. Można ją skojarzyć z tzw. ścieżką dostępu do utworzonej przez użytkownika nazwy (nazwy folderu) która będzie przypisywana plikom i programom, które system wyświetla jako elementy zawarte w folderze o danej nazwie.
Programy i skrypty Programy Programy wykonywane bezpośrednio Programy wykonywane przez interpreter Zapisywane są w plikach tekstowych zwanych skryptami. Skrótowo nazywane skryptami - żargon, ale powszechny. Innymi słowy skrypty to zarazem programy jak i pliki.
Pytania do sali Gdzie zapisujemy pliki i programy? Dlaczego dysk twardy w komputerach nazywa się C:/ Dyskietki odczytywane jako dyski A: i B:
Organizacja zapisu plików i programów na dyskach BOOT SECTOR System nazw plików w sektorze rozruchowym (tzw. BOOT SECTOR) Nazwy plików i programów ze ścieżką dostępu (a więc nazwami folderów) z adresami zawartości plików i programów Pozostała część partycji Zawartość plików Partycje (najczęściej 1, maksymalnie 4) podzielone na sektory
Nazwy plików w systemie Windows 1. Dwuczłonowe: nazwa.rozszerzenie 2. Pełna nazwa: C:\folder\podfolder\...\ nazwa.rozszerzenie Chodzenie po folderach to w rzeczywistości ograniczanie nazw plików, które są wyświetlane 3. Nazwa z poziomu ostatniego folderu: nazwa.rozszerzenie 4. Nazwa z poziomu przedostatniego folderu: folder\nazwa.rozszerzenie 5. Wielkość liter w nazwach folderów i plików nie ma znaczenia 6. Pulpit (DeskTop) jest podfolderem nazwy_użytkownika, a jednocześnie z pulpitu przechodzi się często do niższych poziomów tak, jak by się szło do przodu. Działa to pewien rodzaj pętli, z którymi pewne programy sobie nie radzą. Dotyczy to głównie polecenia otwórz za pomocą stosowanego dla pliku znajdującego się na pulpicie.
Nazwy plików w R 5. W wielu programach zamiast \ używa się / (takim programem jest R) 6. Nazwy folderów w systemie Windows zostały przetłumaczone przez program zamieniający nazwy istniejące w systemie nazw plików na polskie odpowiedniki przy wyświetlaniu katalogów. W rzeczywistości są to nazwy angielskie: Użytkownicy -> users Pulpit -> desktop 7. Pełna nazwa pliku napisana w R wygląda następująco: C:/users/milka/desktop/123456/dane.txt 8. Odkrywanie ścieżki dostępu do aktywnego katalogu: getwd() 9. Zmiana aktywnego katalogu setwd(c:/users/milka/desktop/123456) Inny sposób: działanie w menu Plik> Zmień Katalog
1. Nazwa pliku może być zmienną w R Konkretne wnioski 2. Funkcja, która importuje plik tekstowy i zamienia go w wektor tekstowy (obiekt R) mogłaby mieć postać: importuj = function(plik) { readlines(plik) } Dopiero jej uruchomienie wymagałoby ścieżki dostępu: importuj( C:/users/milka/desktop/123456/dane.txt ) albo wcześniejszej zmiany katalogu i: importuj( dane.txt )
Zadanie na obecny tydzień Przeniesienie własnej bazy danych do R i zapamiętanie jej w postaci obiektu o typie data.frame Co to jest data.frame? Definicja informatyczna: Jest to tabela której kolumnami są wektory albo czynniki wszystkie jednakowej długości Definicja biologiczna: Jest to tabela której w kolumnach zapisano zmienne tekstowe i liczbowe, a w wierszach zmienne dotyczące tego samego obiektu biologicznego (np. wyniki pomiarów osobnika)
Wektory i czynniki w R wektory czynniki Nazwa typu vector factor Zastosowanie Tworzenie Opis Działania i funkcje Dla zmiennych liczbowych (istnieją wektory tekstowe) c(ciąg liczb, tekstów, wart. logicznych) k:n rep() seq() Ciąg liczb, tekstów albo wart. Logicznych. Uogólnienie wszelkich działań matematycznych na liczbach, i tekstach, uogólnienia funkcji matematycznych i szereg funkcji statystycznych. Dla wektorów tekstowych (istnieją czynniki liczbowe) factor(wektor) as.factor(wektor) gl(n,k) Ciąg złożony z liczb od 1 do k z referencjami w postaci nazw umieszczonymi w levels. Tylko specjalne funkcje posumowujące liczby tych samych wartości w czynniku.
Ćwiczenia z czynnikami a=c(15,15,15,15,15,14,14,14,14,13,13,13,12,12,11) a length(a) unique(a) sort(a) aa=factor(a) aa levels(aa) levels(aa)[5]=7 aa table(aa) str(aa) length(aa) unique(aa) b=rep(letters[1:5],3) b bb=factor(b) bb table(bb) str(bb)
Data frame aaa=data.frame(a=1:10, aa=letters[1:10], log=as.logical(rep(0:1,5))) aaa str(aaa) aaa[2,1] aaa[1,2] aaa[3,3] aaa[1,] aaa[5,] str(aaa[5,]) aaa[,1] aaa[,2] aaa[,3] str(aaa[,1]) str(aaa[,2]) str(aaa[,3])
Bazy do ćwiczeń Ściągnąć na swój komputer bazy do ćwiczeń: cw1_1.csv i cw2_2.csv lub te same pliki pod innymi nazwami cw2-dane-stanowiska.csv i cw2-danetaksonomia.csv i umieścić w swoim katalogu. Otworzyć R, zmienić katalog na swój. stan = read.csv2("cw2_1.csv") taks = read.csv2("cw2_2.csv") albo: stan = read.csv2("cw2-dane-stanowiska.csv") taks = read.csv2("cw2-dane-taksonomia.csv")
Praca z dużymi bazami # Sprawdzenie struktury tabeli i typów danych - czynniki! str(stan) str(taks) # Sprawdzanie rozmiaru tabel - wiersze x kolumny dim(stan) dim(taks) # Wybieranie kolumn stan$grupa stan[,3] stan[,c(1,4,5)] stan[,c("lp", "genus")]
Praca z dużymi bazami # Wybieranie wierszy + filtry stan[3,] stan[c(1,4,5),] taks[3:5,] head(stan) tail(taks) subset(stan, genus == "Linaria") subset(stan, genus == "Linaria", select=c("nazwa_pl", "nadl")) subset(stan, genus == "Linaria" & nadl == "Elbląg", select=c("nazwa_pl", "nadl")) subset(stan, genus == "Linaria" nadl %in% c("elbląg", "Ustka"), select=c("nazwa_pl", "nadl"))
Praca z dużymi bazami # Sortowanie taks[order(taks$classis), ] # Sortowanie przez klase taks[order(taks$classis, taks$ordo, taks$familia), ] # Sortowanie przez klasę, rząd i rodzinę # Sortowanie z filtrowaniem subset(taks, ordo %in% c("anura", "Squamata")) # Domyslny porzadek subset(taks[order(taks$classis),], ordo %in% c("anura", "Squamata")) # Sortowanie przez klase
Praca z dużymi bazami # Unikatowe wartości levels(stan$nazwa_pl) # Zwraca wektor napisów unique(stan$nazwa_pl) # Zwraca czynnik # Prosta tabela liczności table(stan$nazwa_pl) # Zlozona tabela licznosci aggregate(lp ~ wojewodztwo + grupa, data = stan, function(x) length(x)) table(stan[c("wojewodztwo", "grupa")]) table(stan$wojewodztwo, stan$grupa)
Praca z dużymi bazami # Łączenie tabel query1 = merge(stan, taks, by = "genus") # Zlaczenie razem z wybieraniem wierszy i kolumn subset(query1, genus == "Linaria")[c("nazwa_pl", "nadl", "familia", "ordo")] subset(query1, genus == "Linaria", select=c("nazwa_pl", "nadl", "familia", "ordo")) # Srednia liczba gatunkow w powiecie w przekroju wojewodztw (dwa etapy) query2 = aggregate(nazwa_pl ~ wojewodztwo + powiat, data = stan, function(x) length(unique(x))) query3 = aggregate(nazwa_pl ~ wojewodztwo, data = query2, function(x) mean(x))
Praca domowa Zadanie domowe przeznaczone jest dla par wykonujących ten sam temat i osób indywidualnych nie pracujących w parze. Trzeba własną bazę danych z arkusza kalkulacyjnego przenieść do R metodami wyjaśnionymi szczegółowo w rozdziale 10, część I (podstawowe operacje) podręcznika do R. Zapamiętać bazę jako obiekt data.frame. Za pomocą funkcji table() wykonać tabele z wielkościami prób i zapamiętać ją jako obiekt tab.1. Za pomocą funkcji aggregate wykonać obliczenie średnich i odchyleń standardowych pierwszej i drugiej zmiennej ciągłej w odpowiednich grupach wyznaczonych przez zmienne dyskretne. Zapamiętać je pod nazwami tab.2 i tab.3 (szczegóły w rozdziale 10). Bazę i tabele zapamiętać w postaci własnego skrótu do R (wyjaśnienia w podręczniku). Ten skrót z dodanymi numerami indeksów w nazwie i z zapamiętanymi obiektami typu data.frame należy przesłać na adres: milka@biol.uw.edu.pl