1 Rozdział 1. Podstawowe operacje

1.1 Rodzaje struktur danych

1.1.1 Wektory

Zadanie 1. Utwórz wektor danych “ryzyko” oraz “wiek”. Każdy z nich ma mieć 10 obserwacji, dowolne wartości. Ryzyko jako zmienna 0-1, wiek w latach.

ryzyko <- c(0,1,0,1,0,1,1,1,0,0)
wiek <- c(15,25,40,50,60,23,33,36,19,24)

Zadanie 2. Przekoduj ryzyko na czynnik (factor): dla wieku >30 lat “0” o etykiecie “wysokie”, a dla pozostałych “1” o etykiecie “niskie”. Wskazówka: można wykorzystać ifelse.

ryzyko <- as.factor(ifelse(wiek>30,0,1))
kody <- c(wysokie=0, niskie=1)
ryzyko <- factor(ryzyko, levels=kody, labels=names(kody))
levels(ryzyko)
## [1] "wysokie" "niskie"

Zadanie 3. Połącz wiek i ryzyko tworząc nową ramkę danych o nazwie “ramka”. Posortuj obserwacje wg wieku (rosnąco).

ramka <- data.frame(wiek,ryzyko)
ramka <- ramka[order(wiek),]
View(ramka)

Zadanie 4. Utwórz tablicę “tablica” z wieku i ryzyka o wymiarach 5 wierszy, 2 kolumny (zmienne), 2 podgrupy o nazwie “Grupa 1.” oraz “Grupa 2”.

tablica1<- array(c(wiek[1:5], ryzyko[1:5]), dim=c(5,2))
tablica2 <- array(c(wiek[6:10],ryzyko[6:10]),dim=c(5,2))
tablica<- array(c(tablica1,tablica2),dim=c(5,2,2))
dimnames(tablica)[[2]]<- list("Wiek","Ryzyko")
dimnames(tablica)[[3]]<- list("Grupa 1","Grupa 2")
tablica
## , , Grupa 1
## 
##      Wiek Ryzyko
## [1,]   15      2
## [2,]   25      2
## [3,]   40      1
## [4,]   50      1
## [5,]   60      1
## 
## , , Grupa 2
## 
##      Wiek Ryzyko
## [1,]   23      2
## [2,]   33      1
## [3,]   36      1
## [4,]   19      2
## [5,]   24      2

Zadanie 5. Uwtórz listę “lista” zawierającą pierwsze 3 elementy każdej z grup w tablicy “tablica” oraz 3 kolory, które najbardziej lubisz.

lista<-list(tablica1[1:3,1:2],tablica2[1:3,1:2],c("czarny", "biały", "różowy"))
lista
## [[1]]
##      [,1] [,2]
## [1,]   15    2
## [2,]   25    2
## [3,]   40    1
## 
## [[2]]
##      [,1] [,2]
## [1,]   23    2
## [2,]   33    1
## [3,]   36    1
## 
## [[3]]
## [1] "czarny" "biały"  "różowy"

Zadanie 6. Utwórz macierz B z cyfr od 1 do 9; macierz A od 1 do 6, macierz C od 1 do 6. Dodaj do A wiersz [1,1,1] jako macierz D, a do macierzy C dodaj kolumnę [1,1,1] jako macierz E. Wyświetl 3 wiersz E i 3 kolumnę D.

B <- matrix(c(1:9), nrow=3, ncol=3)
A <- matrix(c(1:6), nrow=2)
C <- matrix(c(1:6), nrow=3, ncol=2)

D <- rbind(A, c(1,1,1))
E <- cbind(C, c(1,1,1))

E[3,]
## [1] 3 6 1
D[,3]
## [1] 5 6 1

Zadanie 7. Dokonaj pełnej analizy opisowej dla osób z grupy 1. oraz grupy 2. (średnia, odchylenia, kwartyle, skośność, kurtoza).

mean(tablica1[,1])
## [1] 38
mean(tablica2[,1])
## [1] 27
sd(tablica1[,1])
## [1] 18.2346
sd(tablica2[,1])
## [1] 7.17635
quantile(tablica1[,1])
##   0%  25%  50%  75% 100% 
##   15   25   40   50   60
quantile(tablica2[,1])
##   0%  25%  50%  75% 100% 
##   19   23   24   33   36
library(moments)
skewness(tablica1[,1])
## [1] -0.0912794
skewness(tablica2[,1])
## [1] 0.258649
kurtosis(tablica1[,1])
## [1] 1.59254
kurtosis(tablica2[,1])
## [1] 1.44806
summary(tablica1[,1])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      15      25      40      38      50      60

Zadanie 8. Przedstaw na histogramach oraz wykresach ramkowych rozkłady wieku osób z wysokim i niskim ryzykiem kredytowym (porównanie - 2 wykresy obok siebie).

par(mfrow=c(1,1))

hist(ramka$wiek,prob=T, main="Rozkład wieku według ryzyka kredytowego", col="gray",
     xlab='Wiek w latach', ylab='Ryzyko', ylim = c(0, 0.05))
lines(density(ramka[ryzyko=="niskie",1]), col='blue')
lines(density(ramka[ryzyko=="wysokie",1]), col='red')


legend("bottomright", title="Legenda",
       legend=c("Wysokie ryzyko", "Niskie ryzyko"),col=c("red","blue"),
       lty=1:2, cex=0.7)

1.2 Fajki

Dane dotyczą prawie 985 transakcji sprzedaży mieszkań z Sacramento (Kalifornia,USA). Poniżej pokazano przykład wykorzystania fajki bazowej R “|>”: wykres logarytmu gęstości cen.

price |> 
  log() |>
  density() |>
  plot()

1.3 Przykład - dplyr

Wykreśl histogram cen sprzedaży mieszkań (“Condo”) z dwiema sypialniami. Filtry z dplyr działają na całej ramce danych, stąd by wykreślić ceny musimy użyć pakietu ggplot2:

Bez użycia filtra i fajek nie ma takiej potrzeby: