Veri Setleri

Veri setleri R ortamında data.frame() fonksiyonu ile oluşturulabilir. data.frame() fonksiyonu ile aynı uzunluktaki vektörlerden bir veri seti oluşturduk.

ad  <- c("Ali","Elif","Su","Deniz","Aras", "Berk","Can","Ece","Efe","Arda")
boy <- c(160,165,170,155,167,162, 169,158,160,164)
kilo <- c(55,55,57,50,48,65, 58,62,45,47)
beden <- c("S","M","S","M","S", "L","M","L","S","S")
beden <- factor(beden)

df <- data.frame(ad, boy, kilo, beden)
df
##       ad boy kilo beden
## 1    Ali 160   55     S
## 2   Elif 165   55     M
## 3     Su 170   57     S
## 4  Deniz 155   50     M
## 5   Aras 167   48     S
## 6   Berk 162   65     L
## 7    Can 169   58     M
## 8    Ece 158   62     L
## 9    Efe 160   45     S
## 10  Arda 164   47     S

Eğer uzunlukları farklı olan vektörlerle veri setleri oluşturulmaya çalışılırsa kısa vektör, uzun vektör uzunluğunda tekrar eder.

x <- 11:14; y <- 10; M <- c(10,35); N <- 2:4
data.frame(x, y) # (4,1)
##    x  y
## 1 11 10
## 2 12 10
## 3 13 10
## 4 14 10
data.frame(x, M) # (4,2)
##    x  M
## 1 11 10
## 2 12 35
## 3 13 10
## 4 14 35
#data.frame(x, N) # (4,3) hata verir
data.frame(y, M) # (1,2)
##    y  M
## 1 10 10
## 2 10 35
data.frame(y, N) # (1,3)
##    y N
## 1 10 2
## 2 10 3
## 3 10 4
#data.frame(M, N) # (2,3) hata verir

R programında yüklü hazır veri setlerini görüntülemek için data() fonksiyonunu kullandık.

data()
library(datasets)

iris veri setini yükledik ve bu veri setindeki ilk 2 ve son 8 veriyi görüntülemek için head() ve tail() fonksiyonlarını kullandık.

data("iris")
head(iris, n=2) #head fonksiyonu eğer değer girilmezse default olarak ilk 6 satırı verir.
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
tail(iris, n=8)
##     Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
## 143          5.8         2.7          5.1         1.9 virginica
## 144          6.8         3.2          5.9         2.3 virginica
## 145          6.7         3.3          5.7         2.5 virginica
## 146          6.7         3.0          5.2         2.3 virginica
## 147          6.3         2.5          5.0         1.9 virginica
## 148          6.5         3.0          5.2         2.0 virginica
## 149          6.2         3.4          5.4         2.3 virginica
## 150          5.9         3.0          5.1         1.8 virginica

Bir veri setinden yalnızca istenilen özelliği çekebilmek için $ isaretini kullanabileceğimizi öğrendik. Daha sonra çektiğimiz bu sütunun frekansını table() foksiyonu ile yazdırdık.

iris$Species
##   [1] setosa     setosa     setosa     setosa     setosa     setosa    
##   [7] setosa     setosa     setosa     setosa     setosa     setosa    
##  [13] setosa     setosa     setosa     setosa     setosa     setosa    
##  [19] setosa     setosa     setosa     setosa     setosa     setosa    
##  [25] setosa     setosa     setosa     setosa     setosa     setosa    
##  [31] setosa     setosa     setosa     setosa     setosa     setosa    
##  [37] setosa     setosa     setosa     setosa     setosa     setosa    
##  [43] setosa     setosa     setosa     setosa     setosa     setosa    
##  [49] setosa     setosa     versicolor versicolor versicolor versicolor
##  [55] versicolor versicolor versicolor versicolor versicolor versicolor
##  [61] versicolor versicolor versicolor versicolor versicolor versicolor
##  [67] versicolor versicolor versicolor versicolor versicolor versicolor
##  [73] versicolor versicolor versicolor versicolor versicolor versicolor
##  [79] versicolor versicolor versicolor versicolor versicolor versicolor
##  [85] versicolor versicolor versicolor versicolor versicolor versicolor
##  [91] versicolor versicolor versicolor versicolor versicolor versicolor
##  [97] versicolor versicolor versicolor versicolor virginica  virginica 
## [103] virginica  virginica  virginica  virginica  virginica  virginica 
## [109] virginica  virginica  virginica  virginica  virginica  virginica 
## [115] virginica  virginica  virginica  virginica  virginica  virginica 
## [121] virginica  virginica  virginica  virginica  virginica  virginica 
## [127] virginica  virginica  virginica  virginica  virginica  virginica 
## [133] virginica  virginica  virginica  virginica  virginica  virginica 
## [139] virginica  virginica  virginica  virginica  virginica  virginica 
## [145] virginica  virginica  virginica  virginica  virginica  virginica 
## Levels: setosa versicolor virginica
table(iris$Species)
## 
##     setosa versicolor  virginica 
##         50         50         50

Veri Setlerinde Eleman Seçme

ad  <- c("Ali","Elif","Su","Deniz","Aras", "Berk","Can","Ece","Efe","Arda")
boy <- c(160,165,170,155,167,162, 169,158,160,164)
kilo <- c(55,55,57,50,48,65, 58,62,45,47)
beden <- c("S","M","S","M","S", "L","M","L","S","S")
beden <- factor(beden)

(df <- data.frame(ad, boy, kilo, beden))
##       ad boy kilo beden
## 1    Ali 160   55     S
## 2   Elif 165   55     M
## 3     Su 170   57     S
## 4  Deniz 155   50     M
## 5   Aras 167   48     S
## 6   Berk 162   65     L
## 7    Can 169   58     M
## 8    Ece 158   62     L
## 9    Efe 160   45     S
## 10  Arda 164   47     S
df[1,]  #df’nin birinci satir elemanlarinin secilmesi
##    ad boy kilo beden
## 1 Ali 160   55     S
df[,1]  #df’nin birinci sütun elemanlarinin secilmesi
##  [1] "Ali"   "Elif"  "Su"    "Deniz" "Aras"  "Berk"  "Can"   "Ece"   "Efe"  
## [10] "Arda"
df[1,3] # 1.satir 3.sutun secimi
## [1] 55
#Veri setlerinde satir elemanlari yazdirildiginda veri seti (data.frame), sutun elemanlari yazdirildiginda ise vektör (vector) olusmaktadır.

# satir secimi
is.data.frame(df[1,])  #TRUE
## [1] TRUE
# sutun secimi
is.data.frame(df[,1])   #FALSE
## [1] FALSE
#Sutun secimi veri seti (data.frame) olarak yapılmak istenirse, drop argümani FALSE degeri ile kullanilir.
df[,1,drop=FALSE]
##       ad
## 1    Ali
## 2   Elif
## 3     Su
## 4  Deniz
## 5   Aras
## 6   Berk
## 7    Can
## 8    Ece
## 9    Efe
## 10  Arda

Bir veri Seti içerisinde alt kümeler seçebilmek için subset() foksiyonunun kullanılabileceğini öğrendik. subset(veriseti, kosul/kosullar, select)

subset(df, boy >165) #Boyu 165cm’den uzun ögrencilerin bilgilerinin secilmesi
##     ad boy kilo beden
## 3   Su 170   57     S
## 5 Aras 167   48     S
## 7  Can 169   58     M
subset(airquality, Temp > 90,select = c(Ozone, Temp))
##     Ozone Temp
## 42     NA   93
## 43     NA   92
## 69     97   92
## 70     97   92
## 75     NA   91
## 102    NA   92
## 120    76   97
## 121   118   94
## 122    84   96
## 123    85   94
## 124    96   91
## 125    78   92
## 126    73   93
## 127    91   93
subset(airquality, Day == 1, select = -Temp)
##     Ozone Solar.R Wind Month Day
## 1      41     190  7.4     5   1
## 32     NA     286  8.6     6   1
## 62    135     269  4.1     7   1
## 93     39      83  6.9     8   1
## 124    96     167  6.9     9   1
subset(df, beden=="S") #df verisinde beden degiskeni “S” olan satirlarin secimi
##      ad boy kilo beden
## 1   Ali 160   55     S
## 3    Su 170   57     S
## 5  Aras 167   48     S
## 9   Efe 160   45     S
## 10 Arda 164   47     S
subset(df, kilo<50) #df verisinde kilosu 50’in altında olan kiSilerden oluSan veri seti oluSturma kodu
##      ad boy kilo beden
## 5  Aras 167   48     S
## 9   Efe 160   45     S
## 10 Arda 164   47     S

Veri Setlerinde Yeni Sütun Ekleme

Yeni bir veri çerçevesi oluşturduk. Veri setlerine yeni sütun ekleme işleminin $ operatoru ile [[]] operatoru ile cbind() fonksiyonlari ile yapilabileceğini öğrendik. Oluşturduğumuz veriye bu fonksiyonları kullanarak yeni sütunlar ekledik.

df2 <- data.frame(
  S1 = sample(0:100,20),
  S2 = runif(n=20 ,min= 50 , max=70)
)
head(df2)
##   S1       S2
## 1 52 59.29561
## 2 72 51.06203
## 3 30 60.90078
## 4 27 65.90291
## 5 94 53.92932
## 6 21 61.59229

$ operatörü ile sütun ekleme

df2$S3 <- sample(60:80,20,replace = TRUE)
df2
##    S1       S2 S3
## 1  52 59.29561 61
## 2  72 51.06203 68
## 3  30 60.90078 66
## 4  27 65.90291 68
## 5  94 53.92932 71
## 6  21 61.59229 80
## 7  62 54.70561 78
## 8   9 59.03765 68
## 9  33 59.94087 76
## 10 38 69.81784 76
## 11 46 55.06508 72
## 12  2 66.29489 66
## 13 24 63.97262 65
## 14 40 57.74116 63
## 15 77 56.95768 64
## 16 75 62.95391 79
## 17 47 51.57379 60
## 18 93 68.94827 68
## 19 39 65.50693 70
## 20 10 54.83046 78
head(df2)
##   S1       S2 S3
## 1 52 59.29561 61
## 2 72 51.06203 68
## 3 30 60.90078 66
## 4 27 65.90291 68
## 5 94 53.92932 71
## 6 21 61.59229 80

[[]] operatörü ile sütun ekleme

df2[["ort"]] <- round(rowMeans(df2),2)
head(df2)  #df2 veri setinin ilk uc sutunun rowMeans() fonksiyonu ile ortalamasinin alınarak ort isimi ile veri setine eklenmesi
##   S1       S2 S3   ort
## 1 52 59.29561 61 57.43
## 2 72 51.06203 68 63.69
## 3 30 60.90078 66 52.30
## 4 27 65.90291 68 53.63
## 5 94 53.92932 71 72.98
## 6 21 61.59229 80 54.20

cbind() fonksiyonu ile sütun ekleme

cbind( df2, S4 = 10)
##    S1       S2 S3   ort S4
## 1  52 59.29561 61 57.43 10
## 2  72 51.06203 68 63.69 10
## 3  30 60.90078 66 52.30 10
## 4  27 65.90291 68 53.63 10
## 5  94 53.92932 71 72.98 10
## 6  21 61.59229 80 54.20 10
## 7  62 54.70561 78 64.90 10
## 8   9 59.03765 68 45.35 10
## 9  33 59.94087 76 56.31 10
## 10 38 69.81784 76 61.27 10
## 11 46 55.06508 72 57.69 10
## 12  2 66.29489 66 44.76 10
## 13 24 63.97262 65 50.99 10
## 14 40 57.74116 63 53.58 10
## 15 77 56.95768 64 65.99 10
## 16 75 62.95391 79 72.32 10
## 17 47 51.57379 60 52.86 10
## 18 93 68.94827 68 76.65 10
## 19 39 65.50693 70 58.17 10
## 20 10 54.83046 78 47.61 10

Veri Setlerinde Yeni Satır Ekleme

Veri setlerine değişken(sütun) ekleyip, çıkarabileceğimiz gibi gözlem(satır) de ekleyip, çIkarabiliyoruz. Veri setine iki satir eklemek için şu adımları uyguladık;

dim(df2) #kac satir kac sutun var veri setinde onu gosterir (dimension)
## [1] 20  4
df3 <- data.frame(S1=c(50,60),S2=c(55.3,65.5)) # eklenecek iki satirlik veri seti olusturma
df3
##   S1   S2
## 1 50 55.3
## 2 60 65.5
df4 <- cbind (df2,df3) # yeni veri seti
df4
##    S1       S2 S3   ort S1   S2
## 1  52 59.29561 61 57.43 50 55.3
## 2  72 51.06203 68 63.69 60 65.5
## 3  30 60.90078 66 52.30 50 55.3
## 4  27 65.90291 68 53.63 60 65.5
## 5  94 53.92932 71 72.98 50 55.3
## 6  21 61.59229 80 54.20 60 65.5
## 7  62 54.70561 78 64.90 50 55.3
## 8   9 59.03765 68 45.35 60 65.5
## 9  33 59.94087 76 56.31 50 55.3
## 10 38 69.81784 76 61.27 60 65.5
## 11 46 55.06508 72 57.69 50 55.3
## 12  2 66.29489 66 44.76 60 65.5
## 13 24 63.97262 65 50.99 50 55.3
## 14 40 57.74116 63 53.58 60 65.5
## 15 77 56.95768 64 65.99 50 55.3
## 16 75 62.95391 79 72.32 60 65.5
## 17 47 51.57379 60 52.86 50 55.3
## 18 93 68.94827 68 76.65 60 65.5
## 19 39 65.50693 70 58.17 50 55.3
## 20 10 54.83046 78 47.61 60 65.5
dim(df4)
## [1] 20  6

Listeler

Listelerin çok esnek ve karmaşık veri yapılarına sahip olabileceğini, listelerin farklı türlerde, farklı uzunluklarda verileri bir araya getirebildiğini öğrendik. Liste oluşturabilmek için list() fonksiyonunu kullandık.

ad  <-  c("Ali","Elif","Su","Deniz","Aras","Berk","Can","Ece","Efe","Arda")
boy <- c(160,165,170,155,167,162,169,158,160,164)
kilo <- c(55,55,57,50,48,65,58,62,45,47)

# ad, boy ve kilo vektorleri ile liste olusturulmasi
liste <- list(ad,boy,kilo)
liste
## [[1]]
##  [1] "Ali"   "Elif"  "Su"    "Deniz" "Aras"  "Berk"  "Can"   "Ece"   "Efe"  
## [10] "Arda" 
## 
## [[2]]
##  [1] 160 165 170 155 167 162 169 158 160 164
## 
## [[3]]
##  [1] 55 55 57 50 48 65 58 62 45 47

Listeler kendi içinde de farklı listeler barındırabilir. Bu 2 bileşenli listeler için list() ve c() kodlarını kullandık.

liste2 <- list(liste,c(1,2,3)) # liste ici liste
str(liste2)
## List of 2
##  $ :List of 3
##   ..$ : chr [1:10] "Ali" "Elif" "Su" "Deniz" ...
##   ..$ : num [1:10] 160 165 170 155 167 162 169 158 160 164
##   ..$ : num [1:10] 55 55 57 50 48 65 58 62 45 47
##  $ : num [1:3] 1 2 3

Liste bileşenleri isimlendirilebilir. Bunun için her bir vektöre isim ataması yaptık.

liste_isim <- list(isim = ad,boyolcum = boy,kiloolcum =kilo)
liste_isim
## $isim
##  [1] "Ali"   "Elif"  "Su"    "Deniz" "Aras"  "Berk"  "Can"   "Ece"   "Efe"  
## [10] "Arda" 
## 
## $boyolcum
##  [1] 160 165 170 155 167 162 169 158 160 164
## 
## $kiloolcum
##  [1] 55 55 57 50 48 65 58 62 45 47

Kendinizi Test Edin

Soru 1

df <- data.frame(
Tamsayi = integer(0),
Ondaliksayi = numeric(0),
Karakter = character(0),
Mantıksal = logical(0),
Faktor = factor(levels = character(0))
)

cat("[1] \"Bos data.framenin yapısı:\"\n")
## [1] "Bos data.framenin yapısı:"
str(df) 
## 'data.frame':    0 obs. of  5 variables:
##  $ Tamsayi    : int 
##  $ Ondaliksayi: num 
##  $ Karakter   : chr 
##  $ Mantıksal  : logi 
##  $ Faktor     : Factor w/ 0 levels:

Soru 2

ad = c('Su','Pera','Sule','Can','Cem','Name','Aras','Mete','Kaan','Pelin')
puan = c(12.5, 9, 16.5, 12, 9, 20, 14.5, 13.5, 8, 19)
deneme = c(1, NA, 2, NA, 2, NA, 1, NA, 2, 1)
bonus = c(1,0,1, 0, 0, 1, 1, 0,0, 1)

df<- data.frame(ad, puan, deneme, bonus)
df
##       ad puan deneme bonus
## 1     Su 12.5      1     1
## 2   Pera  9.0     NA     0
## 3   Sule 16.5      2     1
## 4    Can 12.0     NA     0
## 5    Cem  9.0      2     0
## 6   Name 20.0     NA     1
## 7   Aras 14.5      1     1
## 8   Mete 13.5     NA     0
## 9   Kaan  8.0      2     0
## 10 Pelin 19.0      1     1
#?subset

eksik_veriler<-subset(df, is.na(deneme))

eksik_veri_sayisi<-nrow(eksik_veriler)
eksik_veri_sayisi
## [1] 4
cat("Deneme sutunundaki NA sayisi:", eksik_veri_sayisi, "\n")
## Deneme sutunundaki NA sayisi: 4

Korelasyon Formülü

Burada korelasyon formülüne yer verilmiştir.

\[ r = \frac{n \sum{XY} - \sum{X} \sum{Y}}{\sqrt{[n \sum{X^2} - (\sum{X})^2][n \sum{Y^2} - (\sum{Y})^2]}} \]