Instalowanie bibliotek (Package Library)

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

Obliczanie dystrybuanty zmiennej losowej dyskretnej Pętla FOR, iterowanie po elementach data.frame

F(x)=P(X<x),\quad \bigvee _{  }^{  }{ x } \in R \\  F(x)=\sum _{ { x }_{ i }<x }^{  }{ { p }_{ i } }

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

WYKRES SŁUPKOWY – BARPLOT

> 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

HISTOGRAM dla częstości i częstości względnych

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 najpierw:

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)

wykres pudełkowy BOXPLOT i jego teoria

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).

Wykres kołowy piechart dla data frame

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")

Zliczanie częstości dla data frame

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) .

Wczytywanie danych z pliku CSV

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:
Struktura tabeli z której powstał CSV

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)