7 Veri Setleri

  • Veri setleri iki boyutludur.

  • R'da bir çok fonksiyonun veri setleri ile çalışmaktadır.

  • Veri setleri R ortamında data.frame() fonksiyonu ile oluşturulabilir.

  • data.frame() fonksiyonu ile aynı uzunluktaki vektörlerden bir veri seti oluşturulabilir.

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
Ali 160 55 S
Elif 165 55 M
Su 170 57 S
Deniz 155 50 M
Aras 167 48 S
Berk 162 65 L
Can 169 58 M
Ece 158 62 L
Efe 160 45 S
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.
# 4 farklı uzunlukta vektör oluşturulması
x <- 11:14; y <- 10; M <- c(10,35); N <- 2:4
data.frame(x, y) # (4,1)
x y
11 10
12 10
13 10
14 10
data.frame(x, M) # (4,2)
x M
11 10
12 35
13 10
14 35
data.frame(x,N)  #(4,3) hata
## Error in data.frame(x, N): arguments imply differing number of rows: 4, 3
data.frame(y, M) #(1,2)
y M
10 10
10 35
data.frame(y, N) #(1,3)
y N
10 2
10 3
10 4
data.frame(M, N) #(2,3)
## Error in data.frame(M, N): arguments imply differing number of rows: 2, 3

7.1 Hazır Veri Setleri

  • Temel pakette yer alan veri setlerinin bir listesine aşağıdaki komutla ulaşabilirsiniz.
data() # yeni bir pencerede açılır.
  • Veri setlerinin yer aldığı paketlerde bulunmaktadır.
# install.packages("datasets")
library (datasets)
# install.packages("dslabs")
library (dslabs)
  • Hazır veri setleri çalışma ortamına data() fonksiyonu ile aktarılabilir.
data(WorldPhones) # environmet(calisma alanini) kontrol ediniz. 
  • hazır veri setlerini incelememek için aşağıdaki komutlar kullanılabilir.
data(cars) # enviromente ekler
iris      # enviromente eklemez!

7.2 İnceleme

  • Boyut sorgulamamak için farklı fonksiyonlar kullanılabilir.
dim(cars) # satir Sutun
## [1] 50  2
nrow(cars)
## [1] 50
ncol(cars)
## [1] 2
  • Veri setlerin ilk satırları head(), son satırları ise tail() fonksiyonu ile incelenebilir. head() fonksiyonu olağan olarak ilk 6 satırı yazdırır.
head(WorldPhones)
##      N.Amer Europe Asia S.Amer Oceania Africa Mid.Amer
## 1951  45939  21574 2876   1815    1646     89      555
## 1956  60423  29990 4708   2568    2366   1411      733
## 1957  64721  32510 5230   2695    2526   1546      773
## 1958  68484  35218 6662   2845    2691   1663      836
## 1959  71799  37598 6856   3000    2868   1769      911
## 1960  76036  40341 8220   3145    3054   1905     1008
  • Yazdırılacak satır sayısı n argümanı ile ayarlanır.
head(WorldPhones,n=2)
##      N.Amer Europe Asia S.Amer Oceania Africa Mid.Amer
## 1951  45939  21574 2876   1815    1646     89      555
## 1956  60423  29990 4708   2568    2366   1411      733
  • WorldPhones veri setinin son 8 satırını yazdıracak kodu yazınız.

  • datasets paketinde yer alan veri setlerinde examples() bölümünde çeşitli örneklere yer verilmiştir. Örneğin example(WorldPhones)

matplot(rownames(WorldPhones), WorldPhones, type = "b", log = "y",
        xlab = "Year", ylab = "Number of telephones (1000's)")
legend("bottomright", colnames(WorldPhones), col = 1:6, lty = 1:5,
       pch = rep(21, 7))
title(main = "World phones data: log scale for response")
  • Temel paket hariç diğer paketlerdeki veri setlerine data(veriseti, package="packagename") şeklinde ulaşılabilir.
data(CTTdata, package="CTT") 
head(CTTdata)
df1<- data.frame() 
df1 <- edit(df1)
# duzenlemek icin
fix(df)
# gozatmak icin 
View(df)

7.3 Eleman Seçme

Veri setlerinde eleman seçme matrislerdeki gibidir.

df[satirindeks, sutunindeks]

  • df'nin birinci satir elemanlarının seçilmesi
ad boy kilo beden
Ali 160 55 S
  • df'nin birinci sütun elemanlarının seçilmesi
##  [1] "Ali"   "Elif"  "Su"    "Deniz" "Aras"  "Berk"  "Can"   "Ece"   "Efe"  
## [10] "Arda"
  • df'nin ikinci satır elemanlarının seçilmesi
ad boy kilo beden
2 Elif 165 55 M
  • df'nin ikinci sütun elemanlarının seçilmesi
##  [1] 160 165 170 155 167 162 169 158 160 164
  • df'nin birinci satır üçüncü sütun elemanlarının seçilmesi
## [1] 55
  • Veri setlerinde satır elemanları yazdırıldığında veri seti (data.frame), sütun elemanları yazdırıldığında ise vektör (vector) oluşmaktadır.
# satir secimi
is.data.frame(df[1,])
## [1] TRUE
# sutun secimi
is.data.frame(df[,1])
## [1] FALSE
  • Sütun seçimi veri seti (data.frame) olarak yapılmak istenirse, drop argümanı FALSE değeri ile kullanılır.
df[,1,drop=FALSE]
ad
Ali
Elif
Su
Deniz
Aras
Berk
Can
Ece
Efe
Arda
  • Veri seçim işlemi için subset() fonksiyonu kullanılabilir.

  • ?subset bir fonksiyonu ilk daha kullanıyorsanız, mutlaka yardım sayfasını inceleyin.

subset(veriseti, kosul/Kosullar)

  • Boyu 165cm'den uzun öğrencilerin bilgilerinin seçilmesi
subset(df, boy >165)
ad boy kilo beden
3 Su 170 57 S
5 Aras 167 48 S
7 Can 169 58 M
  • subset() fonksiyonun yardım sayfasındaki örnekleri inceleyebilirsiniz.
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
  • df verisinde beden değişkeni "S" olan satırların seçimi subset(df,beden =="S")

  • df verisinde kilosu 50'in altında olan kişilerden oluşan veri seti oluşturma kodunu tamamlayınız subset(df,.......)

7.4 Eleman ekleme

  • Veri setine yeni sütun ekleme isleme $ operatörü ile [[]] operatörü ile cbind() fonksiyonları ile yapılabilmektedir.
df2 <- data.frame(
      S1 = sample(0:100,20),
      S2 = runif(n=20 ,min= 50 , max=70)
)
head(df2)
S1 S2
37 64.94345
1 51.91993
71 63.42551
77 53.56406
63 65.35272
42 63.27010
  • $ operatörü ile sütun ekleme
df2$S3 <- sample(60:80,20,replace = TRUE)
head(df2)
S1 S2 S3
37 64.94345 67
1 51.91993 73
71 63.42551 76
77 53.56406 77
63 65.35272 60
42 63.27010 65
  • [[]] operatörü ile sütun ekleme

  • df2 veri setinin ilk üç sütunun rowMeans() fonksiyonu ile ortalamasının alınarak ort isimi ile veri setine eklenmesi

df2[["ort"]] <- round(rowMeans(df2),2)
head(df2)
S1 S2 S3 ort
37 64.94345 67 56.31
1 51.91993 73 41.97
71 63.42551 76 70.14
77 53.56406 77 69.19
63 65.35272 60 62.78
42 63.27010 65 56.76
  • cbind() fonksiyonu ile sütun ekleme
cbind( df2, S4 = 10)
S1 S2 S3 ort S4
37 64.94345 67 56.31 10
1 51.91993 73 41.97 10
71 63.42551 76 70.14 10
77 53.56406 77 69.19 10
63 65.35272 60 62.78 10
42 63.27010 65 56.76 10
12 51.06149 63 42.02 10
3 58.37801 63 41.46 10
27 56.96972 60 47.99 10
28 52.06823 80 53.36 10
82 58.79704 75 71.93 10
96 62.87552 79 79.29 10
40 55.72831 80 58.58 10
0 58.59491 77 45.20 10
53 50.97243 65 56.32 10
64 69.71524 66 66.57 10
61 51.45924 73 61.82 10
21 59.02196 79 53.01 10
17 63.76606 68 49.59 10
95 59.59905 66 73.53 10

7.5 Eleman çıkarma

  • Veri setinden istenilen sütunun çıkarılabilir. Bu işlemi yapmak için iki farklı yol kullanılabilir.

  • - operatörü

head(df2,3)
S1 S2 S3 ort
37 64.94345 67 56.31
1 51.91993 73 41.97
71 63.42551 76 70.14
df2 <- df2[,-4] 
head(df2,3)
S1 S2 S3
37 64.94345 67
1 51.91993 73
71 63.42551 76
  • NULL operatörü
df2$S3 <- NULL
head(df2,3)
S1 S2
37 64.94345
1 51.91993
71 63.42551

7.6 Satır ekleme

  • Veri setlerine değişken ekleyip, çıkarabileceğiniz gibi gözlem de ekleyip, çıkarabilirsiniz. Veri setine iki satır ekleme
dim(df2)
## [1] 20  2
# eklenecek iki satırlık veri seti oluşturma
df3 <- data.frame(S1=c(50,60),S2=c(55.3,65.5))
# yeni veri seti
df4 <- rbind (df2,df3)
dim(df4)
## [1] 22  2

7.7 Veri yapısı inceleme

  • Veri setlerinin yapısını incelemek icin str() fonksiyonundan yararlanılmaktadır.
str(df)
## 'data.frame':    10 obs. of  4 variables:
##  $ ad   : chr  "Ali" "Elif" "Su" "Deniz" ...
##  $ boy  : num  160 165 170 155 167 162 169 158 160 164
##  $ kilo : num  55 55 57 50 48 65 58 62 45 47
##  $ beden: Factor w/ 3 levels "L","M","S": 3 2 3 2 3 1 2 1 3 3
  • "df" veri seti 10 gözlemden, 4 değişken. Her bir değişkenin önünde $ operatörü olduğuna dikkat ediniz.

  • veri setinin incelenmek için kullanılabilecek diğer fonksiyon ise attributes()

## $names
## [1] "ad"    "boy"   "kilo"  "beden"
## 
## $class
## [1] "data.frame"
## 
## $row.names
##  [1]  1  2  3  4  5  6  7  8  9 10

7.8 Isimlendirme

  • Veri setleri vektör birleştirme üzerinden yapılırsa, vektör adları sütun ismi olarak kullanılır. Ancak bu isimler değiştirilebilir. Bu işlem data.frame() fonksiyonu içinde yapılabilir.
df <- data.frame(isim = ad,
                 boyolcum = boy,
                 kiloolcum= kilo, 
                 bedenolcum=beden)
df
isim boyolcum kiloolcum bedenolcum
Ali 160 55 S
Elif 165 55 M
Su 170 57 S
Deniz 155 50 M
Aras 167 48 S
Berk 162 65 L
Can 169 58 M
Ece 158 62 L
Efe 160 45 S
Arda 164 47 S
  • Veri seti isimlendirme de diğer bir yol ise names() ya da colnames() fonksiyonlarıdır.
df <- data.frame(ad,boy,kilo,beden)
names(df) <- c("isim","boyolcum ","kiloolcum","bedenolcum")
df
isim boyolcum kiloolcum bedenolcum
Ali 160 55 S
Elif 165 55 M
Su 170 57 S
Deniz 155 50 M
Aras 167 48 S
Berk 162 65 L
Can 169 58 M
Ece 158 62 L
Efe 160 45 S
Arda 164 47 S

7.9 Betimsel istatistikler

  • Veri setinin tümüne ilişkin betimsel istatistikler
summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00
  • Veri setinin tek değişkenine ilişkin betimsel istatistikler
summary(cars$speed)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     4.0    12.0    15.0    15.4    19.0    25.0

attach() fonksiyonu ile bir veri setinin sütunları sütun isimi ile enviromente eklenir. Aynı işlem detach() fonksiyonu ile tersine alınabilir.

summary(women$height)   
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    58.0    61.5    65.0    65.0    68.5    72.0
attach(women)
summary(height)   # Ayni nesne isimi ile çağırılır.
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    58.0    61.5    65.0    65.0    68.5    72.0
height <- height*2.54   # Bunu yapmamaya calisin!!
find("height")
## [1] ".GlobalEnv" "women"
summary(height)         # Yeni değişken
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   147.3   156.2   165.1   165.1   174.0   182.9
rm(height)
detach("women")
summary(women$height)   # unchanged
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    58.0    61.5    65.0    65.0    68.5    72.0

7.9.1 Kendinizi Test Edin

S1. Sırayla değişken adları TamSayi, OndalikSayi, Karakter, Mantıksal, Faktör olan 5 değişkenli hiçbir gözlemi olmayan bir data.frame oluşturmanızı ve bu data.framenin yapısını yazdırmanızı bekliyorum. Beklenen çıktı aşağıdaki gibi olmalıdır.

[1] "Bos data.framenin yapısı:"
'data.frame':   0 obs. of  5 variables:  
 $ TamSayi    : int   
 $ OndalikSayi: num  
 $ Karakter   : chr  
 $ Mantiksal  : logi  
 $ Faktor     : Factor w/ 0 levels:  
NULL

S2. Aşağıda size verilen dört vektörden bir veri seti oluşturunuz. Oluşturduğunuz veri setinin deneme sütunundaki eksik veri sayısını hesaplayan komut yazınız.

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)

"Deneme sütunundaki NA sayısı:" [1] 4

7.10 Odev

Lütfen aşağıdaki bölümleri haftaya kadar okuyunuz.