aby wywołać pomoc dla konkretnej biblioteki, funkcji, struktury danych po prostu wywołaj:
?igraph
?data.frame
aby wywołać pomoc dla konkretnej biblioteki, funkcji, struktury danych po prostu wywołaj:
?igraph
?data.frame
Najprościej aby zainstalować nową bibliotekę:
1. Klikamy Packages&Data
2. Wybieramy Package Installer
3. Wybieramy źródło(serwer) np. R CRAN
4. Wpisujemy nazwę biblioteki której szukamy, np. igraph
5. Wybieramy z wyników tę która nas interesuje, klikamy Install Selected
6. Instalacja wykona się atuomatycznie
Aby korzystać z biblioteki, zaczynamy od komendy
library(igraph)
BARDZIEJ ZAAWANSOWANE WERSJE INSTALACJI BIBLIOTEK:
http://cran.r-project.org/doc/manuals/R-admin.html#Installing-packages
create file called x.R
today <- Sys.Date() today <-format(today, format="%d-%m-%Y") png(paste("raport-",today,".png",sep="")) hist(rnorm(100)) dev.off()
to run from comand lines (e.g Terminal Unix/Macintosch)
R CMD BATCH x.R
Jak iterować po elementach naszego data.frame? Całkiem prosto:
for (i in 1:nrow(naszDataFrame)){
#tu akcja ktora ma sie wykonywac
}
Zwróć uwagę, że zanim zacząłem robić pierw dodałem nową kolumnę i ją zainicjowałem zerami.
Nie jest możliwe by zrobić to „w biegu” w pętli i od razu coś tam wpisywać.
> a<-c(1.4,1.8,2.2,2.6,3.0,3.4,3.8) > b<-c+0.4 > c<-c(5,15,3,16,8,1,2) > df2<-data.frame(a,b,c) > df2$czest<-df2$c/sum(df2$c) > df2$dis2<-0 > sum<-0; for (i in 1:nrow(df2)){sum<- sum + df2[i,]$czest; df2[i,]$dis2<-sum;} > df2 a b c czest dist dis2 1 1.4 1.8 5 0.10 1 0.10 2 1.8 2.2 15 0.30 1 0.40 3 2.2 2.6 3 0.06 1 0.46 4 2.6 3.0 16 0.32 1 0.78 5 3.0 3.4 8 0.16 1 0.94 6 3.4 3.8 1 0.02 1 0.96 7 3.8 4.2 2 0.04 1 1.00
> barplot(df1$Freq,main="Rodzkład grup krwi",names.arg=df1$df)
UPRZEDNIO:
> df<-read.csv("z1.csv",header=TRUE,sep=";") > df blood_type 1 B 2 A 3 A 4 AB 5 B 6 A 7 B 8 AB 9 O 10 B 11 O 12 A 13 AB 14 O 15 A 16 B 17 O 18 A 19 B 20 O > table(df) df A AB B O 6 3 6 5 > df1<-as.data.frame(table(df)) > df1 df Freq 1 A 6 2 AB 3 3 B 6 4 O 5
wczytajmy sobie przykładowe dane dla których chcemy narysować histogram:
d<-c(13,15,20,16,26,12,24,30,12,25,24,16,23,12,26,14,8,13,24,17,30,24,12,27,14,10,25,13,10,24) hist(d) #lepiej najpierw: length(unique(d)) #a potem korzystamy z tej liczby wartości unikalnych: hist(d, breaks=length(unique(d)))
Otrzymamy potem (dla hist(d, breaks=15)):
Chcemy stworzyć histogram dla częstości względnych, w tym celu policzymy udziały, poszczególnych wartości obserwacji:
> xd<-as.data.frame(table(d)) > xd d Freq 1 8 1 2 10 2 3 12 4 4 13 3 5 14 2 6 15 1 7 16 2 8 17 1 9 20 1 10 23 1 11 24 5 12 25 2 13 26 2 14 27 1 15 30 2 xd$dens <- xd$Freq/sum(xd$Freq) > xd d Freq dens 1 8 1 0.03333333 2 10 2 0.06666667 3 12 4 0.13333333 4 13 3 0.10000000 5 14 2 0.06666667 6 15 1 0.03333333 7 16 2 0.06666667 8 17 1 0.03333333 9 20 1 0.03333333 10 23 1 0.03333333 11 24 5 0.16666667 12 25 2 0.06666667 13 26 2 0.06666667 14 27 1 0.03333333 15 30 2 0.06666667 hist(xd$dens)
wczytajmy przykładowe dane i wyświetlmy podstawowe statystyki korzystając z summary, ale wcześniej wyświetlmy sobie obserwacje w porządku rosnącym korzystając z sort
t<-c(5,4,5,6,2,8,6,5,10,4,5) sort(t) [1] 2 4 4 5 5 5 5 6 6 8 10 summary(t) Min. 1st Qu. Median Mean 3rd Qu. Max. 2.000 4.500 5.000 5.455 6.000 10.000
[WERSJA PIERWSZA]
Narysujmy pierwszą wersję wykresu pudełkowego, która jest prostsza w interpretacji, ale w mniejszym stopniu uwidacznia obserwacje nietypowe (ang. outliers).
boxplot(t, range=0)
Krótkie wyjaśnienie co widzimy na wykresie (aby łatwiej go zrozumieć spójrz na wyniki zwrócone w summary).
Zacznijmy od śrdkowej GRUBEJ linii. Znajduje się ona na poziomie: MEDIAN-y (czyli: 5)
Patrząc do góry znajdujemy cienką linię, która oznacza 3-KWARTYL (czyli: 6)
Patrząc poniżej mediany widzimy cienką linię, która oznacza z kolei 1-KWARTYL (czyli: 4.5)
Linie oznaczające pierwszy i trzeci kwartyl zamykają pudełko.
Od obu krawędzi pudełka odchodzą wąsy, które w tej wersji wykresu pudełkowego odchodzą do wartości maksymalnej(do góry) i minimalnej(do dołu).
[WERSJA DRUGA]
Przejdziemy teraz do o wiele bardziej wartościowej postaci wykresu BOXPLOT, która jest co więcej domyślną wersją w R. Jej wartościowość wiąże się ze specjalną troską (;)) jaką obdarza wartości nietypowe.
Wywołajmy:
boxplot(t)
Znów interpretację zaczynamy od grubej linii, która niezmiennie oznacza MEDIANĘ, dwie jej (po jednej z każdej strony) najbliższe również niezmiennie reprezentują odpowiednie kwartyle: kwartyl 1(poniżej) oraz kwartyl 3(powyżej).
Zauważamy RÓŹNICĘ w tym jak położone są pozostałe punkty, oraz jaką długość mają wąsy.
Wprowadźmy najpierw nową miarę IQR (Interquartile range), która oznacza nic innego jak 50% środkowych obserwacji (oczywiście przy zał., że obserwacje są posortowane). Można tę miarę wyrazić jako różnicę pomiędzy trzecim i pierwszym kwartylem.
IQR=Q3-Q1=6-4.5=1.5
Wprowadźmy wielkość, którą nazwiemy KROKIEM i zdefiniujemy jako: KROK=IQR *1.5=1.5*1.5=2.25
Następnie dodajemy do Q3+KROK i otrzymujemy 6+2.25=8.25 będzie to wartość graniczna, powyżej której nawet jeśli wystąpią obserwacje to nie dociągniemy do nich wąsa, a jedynie zaznaczymy je niewypełnionym kółeczkiem. Wąs dociągamy zatem do 8 bo to ostatnia największa obserwacja < Q3+1.5IQR (czyli 8.25)
Analogicznie postępujemy "w drugą stronę", tym razem od pierwszego kwartyle odejmując krok.
Q1-KROK=4.5-2.25=2.25. Poniżej tej wartości obserwacje traktujemy jako nietypowe i oznaczamy je tylko niewypełnionymi kółkami. Wąsy sięgają do pierwszej większej od 2.25 w naszym wypadku, to 4.
Warto w kontekście wykresu pudełkowego spojrzeć na rysunek z wikipedii obrazujący zależność z funkcją gęstości prawdopodobieństwa rozkładu normalnego (N(0, σ2). Mimo, że nasze wąsy nie sięgają już od minimum do maximum, to obszar zawarty pomiędzy nimi pokrywa aż (24,65 * 2) + 50 = 99,3 % przypadków. Innymi słowy, w przypadku modelowania warto będzie pominąć obserwacje odstające (outliers).
Najprościej można tak:
> pie(df$Freq, labels=df$dane)
Ale efekt nie będzie powalający.
Powiedzmy, że chcemy mieć oprócz etykiet również procentowy udział kategorii.
Nasz data frame df jak na razie zawiera.
> df dane Freq wzgl 1 A 6 0.30 2 AB 3 0.15 3 B 6 0.30 4 O 5 0.25
Stwórzmy więc ładne etykiety z tego co mamy:
> mylbl <-paste(df$dane,": ",df$wzgl*100,"%",sep="") > mylbl [1] "A: 30%" "AB: 15%" "B: 30%" "O: 25%"
Teraz wystarczy wywołać:
> pie(df$Freq, labels=mylbl, main="Udział grup krwi w próbie")
Pracujemy na wczytanym do data frame pliku z poprzednich zajęć.
> class(dane) [1] "data.frame" > table(dane) dane A AB B O 6 3 6 5 > summary(dane) blood_type A :6 AB:3 B :6 O :5 > class(summary(dane)) [1] "table" > class(table(dane)) [1] "table"
Powyżej pokazałem jak łatwo i szybko wyświetlić sobie takie podstawowe podsumowanie dla danych z data frame.
Ale jak widać oba są typu table, a na tym typie w R słabo się pracuje. Dlatego stworzymy sobie data frame.
> df<-as.data.frame(table(dane)) > df dane Freq 1 A 6 2 AB 3 3 B 6 4 O 5
Łatwo możemy rozwinąć swój data frame o kolejną kolumnę, np. dodając częstości względne:
> df$wzgl <- df$Freq/sum(df$Freq) > df dane Freq wzgl 1 A 6 0.30 2 AB 3 0.15 3 B 6 0.30 4 O 5 0.25
po prostu po dolarze dodaje nową nazwę wzgl dla mojego data frameu o nazwie df
Wartości zostają wyliczone jako odsetek wartości w df$Freq podzielony przez sumę wartości w kolumnie, którą otrzymałem dzięki użyciu: sum(df$Freq) .
Dane zostaną wczytane z pliku CSV. Plik taki bez problemy możemy utworzyć w Excelu, ale równie dobrze w notatniku. To po prostu plik zawierający wartości oddzielone przecinkami, lub innym separatorem (np. średnikiem). Informacje jak stworzyć plik CSV znajdziesz w oddzielnym wpisie.
STRUKTURA:
SAM IMPORT do nowo utworzonej struktury, która będzie typu DATA.FRAME:
dane <- read.csv(file="z1.csv",head=TRUE,sep=";") dane blood_type 1 B 2 A 3 A 4 AB 5 B 6 A 7 B 8 AB 9 O 10 B 11 O 12 A 13 AB 14 O 15 A 16 B 17 O 18 A 19 B 20 O
Możemy upewnić się jakiej klasy jest nasza struktura danych wywołując na jej rzecz np. attributes lub bezpośrednio class
attributes(dane)
PYTHON:
import csv t1=(1,'Andrzej',2013-05-16) t2=(2,'John',2014-05-15) l=[t1,t2] csv_file=open("output.csv",'wb') wr = csv.writer(csv_file) wr.writerows(l)