0.1 Rodzaje struktur danych

0.1.1 Wektory

Zadanie 1. Utwórz wektor danych “wiek” (w latach). Każdy z nich ma mieć 10 obserwacji, dowolne wartości.

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

0.1.2 Czynnik

Zadanie 2. Utwórz wektor ryzyko jako 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))
ryzyko
##  [1] niskie  niskie  wysokie wysokie wysokie niskie  wysokie wysokie niskie 
## [10] niskie 
## Levels: wysokie niskie
levels(ryzyko)
## [1] "wysokie" "niskie"

0.1.3 Ramka danych

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

ramka <- data.frame(wiek, ryzyko)
ramka <- ramka[order(wiek, decreasing = TRUE),]
ramka
##    wiek  ryzyko
## 5    60 wysokie
## 4    50 wysokie
## 3    40 wysokie
## 8    36 wysokie
## 7    33 wysokie
## 2    25  niskie
## 10   24  niskie
## 6    23  niskie
## 9    19  niskie
## 1    15  niskie

0.1.4 Tablice

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, ryzyko), dim = c(5,2,2))
mat1 <- tablica1[,1,1]
mat12 <- tablica1[,1,2]
mat2 <- tablica1[,2,1]
mat22 <- tablica1[,2,2]
tablica11 <- array(c(mat1, mat12), dim = c(5,2,1), dimnames = list(c(1:5), c("Wiek", "Ryzyko"), "Grupa 1"))
tablica12 <- array(c(mat2, mat22), dim = c(5,2,1), dimnames = list(c(1:5), c("Wiek", "Ryzyko"), "Grupa 2"))
tablica11
## , , Grupa 1
## 
##   Wiek Ryzyko
## 1   15      2
## 2   25      2
## 3   40      1
## 4   50      1
## 5   60      1
tablica12
## , , Grupa 2
## 
##   Wiek Ryzyko
## 1   23      2
## 2   33      1
## 3   36      1
## 4   19      2
## 5   24      2

0.1.5 Listy

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

lista <- list(tablica11[1:3,1,1], tablica12[1:3,1,1], "fioletowy", "niebieski", "czerwony")
lista
## [[1]]
##  1  2  3 
## 15 25 40 
## 
## [[2]]
##  1  2  3 
## 23 33 36 
## 
## [[3]]
## [1] "fioletowy"
## 
## [[4]]
## [1] "niebieski"
## 
## [[5]]
## [1] "czerwony"

0.1.6 Macierze

Zadanie 6. Utwórz macierz kwadratową B z cyfr od 1 do 9; macierz kwadratową A 2x3 z cyfr od 1 do 6; macierz C 3x2 z cyfr od 1 do 6. Dodaj do macierzy A wiersz [1,1,1] jako macierz D oraz do macierzy C kolumnę [1,1,1] jako macierz E. Wyświetl tylko trzeci wiersz macierzy E i trzecią kolumnę macierzy D.

B <- matrix(1:9) #lub matrix(1:9,3,3)
A <- matrix(1:6, nrow = 2, byrow = TRUE) #lub matrix(1:6,2,3)
C <- matrix(1:6, nrow = 3, byrow = TRUE) #lub matrix(1:6,3,2)
D <- rbind(A, c(1,1,1))
E <- cbind(C, c(1,1,1))
E[3,]
## [1] 5 6 1
D[,3]
## [1] 3 6 1

0.2 Analiza opisowa

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

sr1 <- mean(tablica11[,1,1])
sr1
## [1] 38
sr2 <- mean(tablica12[,1,1])
sr2
## [1] 27
odchylenie1 <- sd(tablica11[,1,1])
odchylenie1
## [1] 18.2346
odchylenie2 <-sd(tablica12[,1,1])
odchylenie2
## [1] 7.17635
mediana1 <- median(tablica11[,1,1])
mediana1
## [1] 40
mediana2 <- median(tablica12[,1,1])
mediana2
## [1] 24
kwantyl11 <- quantile(tablica11[,1,1], q=0.25)
kwantyl11
##   0%  25%  50%  75% 100% 
##   15   25   40   50   60
kwantyl21 <- quantile(tablica12[,1,1], q=0.25)
kwantyl21
##   0%  25%  50%  75% 100% 
##   19   23   24   33   36
#install.packages("e1071")
library(e1071)
skośność11 <- skewness(tablica11[,1,1])
skośność11
## [1] -0.0653142
skośność12 <- skewness(tablica12[,1,1])
skośność12
## [1] 0.185074
kurtoza11 <- kurtosis(tablica11[,1,1])
kurtoza11
## [1] -1.98077
kurtoza12 <- kurtosis(tablica12[,1,1])
kurtoza12
## [1] -2.07324
summary(tablica11[,1,1]) 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      15      25      40      38      50      60
summary(tablica12[,1,1])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      19      23      24      27      33      36

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,2))
hist(ramka$wiek, probability = TRUE,
     main = "Rozkład ryzyka względem wieku",
     col = "beige",
     xlab = "Wiek",
     ylab = "Gęstość",
     ylim = c(0, 0.05))

lines(density(ramka[ryzyko=="niskie",1]), col="red")
lines(density(ramka[ryzyko=="wysokie",1]), col="blue")

legend(x = "bottomright",
       legend = c("wysokie ryzyko", "niskie ryzyko"),
       lty = c(1,1),
       col = c("blue", "red"),
       lwd = 2,
       title = "Legenda",
       text.font = 2,
       bg="grey",
       cex = 0.8)

boxplot(ramka$wiek~ramka$ryzyko,
        main= "Rozkład ryzyka względem wieku",
        col= "red",
        prob= TRUE,
        xlab = "Ryzyko",
        ylab = "Wiek")

#----------------
#hist(ramka[ryzyko=="niskie",1], col = rgb(1,0,0,0,5))
#hist(ramka[ryzyko=="wysokie",1], col = rgb(0,0,1,0,5), add=TRUE)

0.3 Fajki

0.3.1 Fajka bazowa

Przykład. 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()

0.3.2 Fajka %>%

Przykład. 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: