Bu haftaki derse matris nesnesi oluşturarak başladık. Matris oluşturmak için “matrix()” fonksiyonu kullanılmaktadır.
m1 <- matrix(1:12, ncol = 3, nrow = 4); m1
## [,1] [,2] [,3]
## [1,] 1 5 9
## [2,] 2 6 10
## [3,] 3 7 11
## [4,] 4 8 12
matrix(1:12, ncol = 3, nrow = 4, byrow = TRUE)
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
## [4,] 10 11 12
t(m1)
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
2 * m1
## [,1] [,2] [,3]
## [1,] 2 10 18
## [2,] 4 12 20
## [3,] 6 14 22
## [4,] 8 16 24
c(1,2,3) * m1
## [,1] [,2] [,3]
## [1,] 1 10 27
## [2,] 4 18 10
## [3,] 9 7 22
## [4,] 4 16 36
Daha sonra veri seti oluşturduk. factor ile beden vektöründe kategorik değişken oluşturduk, ardından veri çerçevimizi görüntüledik.
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
Uzunlukları farklı olan vektörlerle veri setleri oluşturulmaya çalışılırsa kısa vektörün, uzun vektör uzunluğunda tekrar edeceğini gördük ancak Eğer bir vektörün uzunluğu diğerinin tam katıysa, R geri döngü yaparak otomatik olarak tekrarlayabilir. Ancak vektörlerin uzunlukları birbiriyle uyumsuzsa ve biri diğerinin tam katı değilse, hata aldık.
#Farklı uzunlukta vektör oluşturulması
x <- 11:14; y <- 10;
data.frame(x, y) #(4,1)
## x y
## 1 11 10
## 2 12 10
## 3 13 10
## 4 14 10
Derste bazı hazır veri setlerini görmek için “data()” fonksiyonunu kullandık.
# install.packages("datasets")
library (datasets)
# install.packages("dslabs")
library (dslabs)
data ("WorldPhones")
View ("WorldPhones")
data(cars) # enviromente ekler
iris # enviromente eklemez!
## 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
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5.0 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
## 11 5.4 3.7 1.5 0.2 setosa
## 12 4.8 3.4 1.6 0.2 setosa
## 13 4.8 3.0 1.4 0.1 setosa
## 14 4.3 3.0 1.1 0.1 setosa
## 15 5.8 4.0 1.2 0.2 setosa
## 16 5.7 4.4 1.5 0.4 setosa
## 17 5.4 3.9 1.3 0.4 setosa
## 18 5.1 3.5 1.4 0.3 setosa
## 19 5.7 3.8 1.7 0.3 setosa
## 20 5.1 3.8 1.5 0.3 setosa
## 21 5.4 3.4 1.7 0.2 setosa
## 22 5.1 3.7 1.5 0.4 setosa
## 23 4.6 3.6 1.0 0.2 setosa
## 24 5.1 3.3 1.7 0.5 setosa
## 25 4.8 3.4 1.9 0.2 setosa
## 26 5.0 3.0 1.6 0.2 setosa
## 27 5.0 3.4 1.6 0.4 setosa
## 28 5.2 3.5 1.5 0.2 setosa
## 29 5.2 3.4 1.4 0.2 setosa
## 30 4.7 3.2 1.6 0.2 setosa
## 31 4.8 3.1 1.6 0.2 setosa
## 32 5.4 3.4 1.5 0.4 setosa
## 33 5.2 4.1 1.5 0.1 setosa
## 34 5.5 4.2 1.4 0.2 setosa
## 35 4.9 3.1 1.5 0.2 setosa
## 36 5.0 3.2 1.2 0.2 setosa
## 37 5.5 3.5 1.3 0.2 setosa
## 38 4.9 3.6 1.4 0.1 setosa
## 39 4.4 3.0 1.3 0.2 setosa
## 40 5.1 3.4 1.5 0.2 setosa
## 41 5.0 3.5 1.3 0.3 setosa
## 42 4.5 2.3 1.3 0.3 setosa
## 43 4.4 3.2 1.3 0.2 setosa
## 44 5.0 3.5 1.6 0.6 setosa
## 45 5.1 3.8 1.9 0.4 setosa
## 46 4.8 3.0 1.4 0.3 setosa
## 47 5.1 3.8 1.6 0.2 setosa
## 48 4.6 3.2 1.4 0.2 setosa
## 49 5.3 3.7 1.5 0.2 setosa
## 50 5.0 3.3 1.4 0.2 setosa
## 51 7.0 3.2 4.7 1.4 versicolor
## 52 6.4 3.2 4.5 1.5 versicolor
## 53 6.9 3.1 4.9 1.5 versicolor
## 54 5.5 2.3 4.0 1.3 versicolor
## 55 6.5 2.8 4.6 1.5 versicolor
## 56 5.7 2.8 4.5 1.3 versicolor
## 57 6.3 3.3 4.7 1.6 versicolor
## 58 4.9 2.4 3.3 1.0 versicolor
## 59 6.6 2.9 4.6 1.3 versicolor
## 60 5.2 2.7 3.9 1.4 versicolor
## 61 5.0 2.0 3.5 1.0 versicolor
## 62 5.9 3.0 4.2 1.5 versicolor
## 63 6.0 2.2 4.0 1.0 versicolor
## 64 6.1 2.9 4.7 1.4 versicolor
## 65 5.6 2.9 3.6 1.3 versicolor
## 66 6.7 3.1 4.4 1.4 versicolor
## 67 5.6 3.0 4.5 1.5 versicolor
## 68 5.8 2.7 4.1 1.0 versicolor
## 69 6.2 2.2 4.5 1.5 versicolor
## 70 5.6 2.5 3.9 1.1 versicolor
## 71 5.9 3.2 4.8 1.8 versicolor
## 72 6.1 2.8 4.0 1.3 versicolor
## 73 6.3 2.5 4.9 1.5 versicolor
## 74 6.1 2.8 4.7 1.2 versicolor
## 75 6.4 2.9 4.3 1.3 versicolor
## 76 6.6 3.0 4.4 1.4 versicolor
## 77 6.8 2.8 4.8 1.4 versicolor
## 78 6.7 3.0 5.0 1.7 versicolor
## 79 6.0 2.9 4.5 1.5 versicolor
## 80 5.7 2.6 3.5 1.0 versicolor
## 81 5.5 2.4 3.8 1.1 versicolor
## 82 5.5 2.4 3.7 1.0 versicolor
## 83 5.8 2.7 3.9 1.2 versicolor
## 84 6.0 2.7 5.1 1.6 versicolor
## 85 5.4 3.0 4.5 1.5 versicolor
## 86 6.0 3.4 4.5 1.6 versicolor
## 87 6.7 3.1 4.7 1.5 versicolor
## 88 6.3 2.3 4.4 1.3 versicolor
## 89 5.6 3.0 4.1 1.3 versicolor
## 90 5.5 2.5 4.0 1.3 versicolor
## 91 5.5 2.6 4.4 1.2 versicolor
## 92 6.1 3.0 4.6 1.4 versicolor
## 93 5.8 2.6 4.0 1.2 versicolor
## 94 5.0 2.3 3.3 1.0 versicolor
## 95 5.6 2.7 4.2 1.3 versicolor
## 96 5.7 3.0 4.2 1.2 versicolor
## 97 5.7 2.9 4.2 1.3 versicolor
## 98 6.2 2.9 4.3 1.3 versicolor
## 99 5.1 2.5 3.0 1.1 versicolor
## 100 5.7 2.8 4.1 1.3 versicolor
## 101 6.3 3.3 6.0 2.5 virginica
## 102 5.8 2.7 5.1 1.9 virginica
## 103 7.1 3.0 5.9 2.1 virginica
## 104 6.3 2.9 5.6 1.8 virginica
## 105 6.5 3.0 5.8 2.2 virginica
## 106 7.6 3.0 6.6 2.1 virginica
## 107 4.9 2.5 4.5 1.7 virginica
## 108 7.3 2.9 6.3 1.8 virginica
## 109 6.7 2.5 5.8 1.8 virginica
## 110 7.2 3.6 6.1 2.5 virginica
## 111 6.5 3.2 5.1 2.0 virginica
## 112 6.4 2.7 5.3 1.9 virginica
## 113 6.8 3.0 5.5 2.1 virginica
## 114 5.7 2.5 5.0 2.0 virginica
## 115 5.8 2.8 5.1 2.4 virginica
## 116 6.4 3.2 5.3 2.3 virginica
## 117 6.5 3.0 5.5 1.8 virginica
## 118 7.7 3.8 6.7 2.2 virginica
## 119 7.7 2.6 6.9 2.3 virginica
## 120 6.0 2.2 5.0 1.5 virginica
## 121 6.9 3.2 5.7 2.3 virginica
## 122 5.6 2.8 4.9 2.0 virginica
## 123 7.7 2.8 6.7 2.0 virginica
## 124 6.3 2.7 4.9 1.8 virginica
## 125 6.7 3.3 5.7 2.1 virginica
## 126 7.2 3.2 6.0 1.8 virginica
## 127 6.2 2.8 4.8 1.8 virginica
## 128 6.1 3.0 4.9 1.8 virginica
## 129 6.4 2.8 5.6 2.1 virginica
## 130 7.2 3.0 5.8 1.6 virginica
## 131 7.4 2.8 6.1 1.9 virginica
## 132 7.9 3.8 6.4 2.0 virginica
## 133 6.4 2.8 5.6 2.2 virginica
## 134 6.3 2.8 5.1 1.5 virginica
## 135 6.1 2.6 5.6 1.4 virginica
## 136 7.7 3.0 6.1 2.3 virginica
## 137 6.3 3.4 5.6 2.4 virginica
## 138 6.4 3.1 5.5 1.8 virginica
## 139 6.0 3.0 4.8 1.8 virginica
## 140 6.9 3.1 5.4 2.1 virginica
## 141 6.7 3.1 5.6 2.4 virginica
## 142 6.9 3.1 5.1 2.3 virginica
## 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
#head() fonksiyonu ile veri setinin ilk 6 satırını, tail() fonksiyonu ile de veri setinin son 6 satırını görüntüleyebildiğimizi öğrendik.
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
tail(WorldPhones)
## N.Amer Europe Asia S.Amer Oceania Africa Mid.Amer
## 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
## 1961 79831 43173 9053 3338 3224 2005 1076
#Yazdığımız kodda n ile görüntülemek istediğimiz satır sayısını belirtebiliriz.
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
tail(WorldPhones, n=7)
## 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
## 1961 79831 43173 9053 3338 3224 2005 1076
Veri setlerinde eleman seçmenin matrislerdeki gibi olduğunu öğrendik.
#df[satirindeks, sutunindeks]
df[,2]
## [1] 160 165 170 155 167 162 169 158 160 164
df[2,]
## ad boy kilo beden
## 2 Elif 165 55 M
#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.
df[1,] #satır seçerken data frame halini koruyor
## ad boy kilo beden
## 1 Ali 160 55 S
df[,1] #sütun seçerken vektöre dönüştürüyor tekrar data frame olması için alttaki kodu yazmalısın!
## [1] "Ali" "Elif" "Su" "Deniz" "Aras" "Berk" "Can" "Ece" "Efe"
## [10] "Arda"
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
Veri setleri içinden alt veri setleri oluşturmak için subset() fonkdiyonunu kullanabileceğimizi öğrendik. Fonksiyonda seçmek istediğimiz grubun özelliklerini tanımlamamız gerektiğini gördük.
subset(df, boy >165) #SUBSET FONK.UN YARDIM SAYFASINI İNCELE! SUBSET FONKLA DATA.FRAME DE MANİPÜLASYON YAPABİLİRSİN
## ad boy kilo beden
## 3 Su 170 57 S
## 5 Aras 167 48 S
## 7 Can 169 58 M
#Aşağıdaki airquality veri setinde sıcaklığı 90 derecenin üstünde olanların çekilmesi istendi
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 = -4)
## 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")
## 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)
## ad boy kilo beden
## 5 Aras 167 48 S
## 9 Efe 160 45 S
## 10 Arda 164 47 S
subset(df, kilo<=50)
## ad boy kilo beden
## 4 Deniz 155 50 M
## 5 Aras 167 48 S
## 9 Efe 160 45 S
## 10 Arda 164 47 S
subset(df, kilo>=50)
## ad boy kilo beden
## 1 Ali 160 55 S
## 2 Elif 165 55 M
## 3 Su 170 57 S
## 4 Deniz 155 50 M
## 6 Berk 162 65 L
## 7 Can 169 58 M
## 8 Ece 158 62 L
Veri setlerine yeni sütun ekleme isleme $ operatörü ile [[]] operatörü ile cbind() fonksiyonları ile yapılabileceğini öğrendik.
Veri setinden istenilen sütunun çıkarılabilir. Bu işlemi yapmak için “-” ya da “NULL” kullanılmaktadır.
# Sütun Ekleme
df2 <- data.frame( S1 = sample(0:100,20),
S2 = runif(n=20 ,min= 50 , max=70))
head(df2)
## S1 S2
## 1 100 53.78730
## 2 75 58.77261
## 3 40 50.67786
## 4 84 68.51043
## 5 98 59.35132
## 6 67 67.40316
df2$S3 <- sample(60:80,20,replace = TRUE)
head(df2)
## S1 S2 S3
## 1 100 53.78730 70
## 2 75 58.77261 72
## 3 40 50.67786 78
## 4 84 68.51043 76
## 5 98 59.35132 66
## 6 67 67.40316 74
# Sütun Çıkarma
df2 <- df2[,-4]
head(df2,3)
## S1 S2 S3
## 1 100 53.78730 70
## 2 75 58.77261 72
## 3 40 50.67786 78
Veri yapısını str() ya da attributes() fonksiyonları ile inceleyebileceğimizi öğrendik, ardından data.frame() ya da names() fonksiyonu ile isimlendirme yapabileceğimizi gördük.
str(df) #structure:str
## '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
attributes(df)
## $names
## [1] "ad" "boy" "kilo" "beden"
##
## $class
## [1] "data.frame"
##
## $row.names
## [1] 1 2 3 4 5 6 7 8 9 10
df <- data.frame(isim = ad,
boyolcum = boy,
kiloolcum= kilo,
bedenolcum=beden)
df
## isim boyolcum kiloolcum bedenolcum
## 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 <- data.frame(ad,boy,kilo,beden)
names(df) <- c("isim","boyolcum ","kiloolcum","bedenolcum")
df
## isim boyolcum kiloolcum bedenolcum
## 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
Veri setine dair betimsek istatistikleri summary() fonksiyonu ile görebileceğimizi öğrendik.
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
summary(cars$speed)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.0 12.0 15.0 15.4 19.0 25.0
Listelerin esnek olduğunu örneğin data frame de mecburen her sütun 10 elemanlı olmalıyken liste nin ilk bileşeni vektör olabilir ikinci bileşene data frame olabilir bu esnekliğin istatistiksel veriler için işe yaradığını öğrendik.
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
Daha sonra ek paket yüklemeleri yapıp Rmarkdown sayfası oluşturma kısmına geçtik. Derste oluşturduğum deneme sayfasını aşağıya ekliyorum.
Bu kısım gösterim amaçlıdır. Burada standart sapma (\(\sigma_x\)) formülü verilecektir. \[\sigma_x = \sqrt\frac{X-\overline{x}}{n-1}\] Bu kısım gösterim amaçlıdır. Burada z puanı (\(z_X\)) formülü verilecektir.
\[ z_X = \frac{X-\overline{X}}{\sigma_X} \]
\[ \text {z-score} = \frac {X-\overline{X}}{\sigma_X} \]
x <- 3
y <- 5
x + y
## [1] 8
set.seed(41)
veri <- rnorm(n=100, mean=50 , sd=10)
Olusturulan veri setinin ortalamasi 51.9, standart sapması ise 10.28 dir.
Derste korelasyon formülünü yazmamız istenmişti.
\[ \text {r} = \frac{\sum (X_i - \overline{X})(Y_i - \overline{Y})}{\sqrt{\sum (X_i - \overline{X})^2} \sqrt{\sum (Y_i - \overline{Y})^2}} \]
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
df <- data.frame(
TamSayi = integer(),
OndalikSayi = numeric(),
Karakter = character(),
Mantiksal = logical(),
Faktor = factor()
)
str(df)
## 'data.frame': 0 obs. of 5 variables:
## $ TamSayi : int
## $ OndalikSayi: num
## $ Karakter : chr
## $ Mantiksal : logi
## $ Faktor : Factor w/ 0 levels:
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)
df <- data.frame(ad, puan, deneme, bonus)
na_count <- sum(is.na(df$deneme))
na_count
## [1] 4
## 💖
## 📚
Kitap Bölüm 2 ve Bölüm 3’te yer alan tüm soruları tamamlayınız.
Kitap Bölüm 2 nin 1. sorusunu önceki hafta tamamlamıştım. Bu sebeple bu hafta bölüm 2’nin 2. sorusundan başlıyorum ancak 1. soruya bağlı sorular olduğu için bu kodda 1. sorunun yanıtlarına da yer veriyorum.
#a)
isim <- c("Ali","Defne","Meltem","Semih","Sevda","Gizem","Emre","Zeynep","Utku","Beril")
#b)
vize <- c("60","70","50","80","65","70","85","70","92","80")
#c)
final <-c("70","65","50","45","67","75","80","85","95","85")
#d)
names(vize) <- isim
names(final) <- isim
#e)
vize["Ali"]
## Ali
## "60"
vize["Beril"]
## Beril
## "80"
#f)
vize <- as.numeric(vize)
final <- as.numeric(final)
vize_ort <- mean(vize)
final_ort <- mean(final)
vize_sd <- sd(vize)
final_sd <- sd(final)
#g)
vize_min <- min(vize)
vize_max <- max(vize)
vize_median <- median(vize)
vize_quartiles <- quantile(vize, probs = c(0.25, 0.75))
summary(vize)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 50.00 66.25 70.00 72.20 80.00 92.00
final_min <- min(final)
final_max <- max(final)
final_median <- median(final)
final_quartiles <- quantile(final, probs= c(0.25, 0.75))
summary(final)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 45.00 65.50 72.50 71.70 83.75 95.00
#h)
sonuc_90_ustu <- vize > 90 & final > 90
sonuc_90_ustu
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
#i)
sonuc_50_alti <- vize < 50 | final < 50
sonuc_50_alti
## [1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
#j)
final_yuksek <- final > vize
final_yuksek_notlar <- final[final > vize]
#k) Dersi gecebilmek için finalden en az 50 puan alinmasi gerekmektedir. Finalden 50 puan ve üzeri alan ögrencilerin final ve vize notlarindan olusan "final _y" ve "vize_y" vektörlerini olusturunuz.
final_y <- final [final >= 50]
vize_y <- vize[vize >= 50]
#l) "final_y" ve "vize_y" vektörlerinin uzunluklarini yazdriniz.
length(final_y)
## [1] 9
length(vize_y)
## [1] 10
#m) Final puani en yüksek ve vize puani en yüksek ögrencileri bulunuz.
en_yuksek_vize <- which.max(vize)
en_yuksek_final <- which.max(final)
en_yuksek_vize_ogrenci <- isim[en_yuksek_vize]
en_yuksek_final_ogrenci <- isim[en_yuksek_final]
print(paste("En yüksek vize puanını alan öğrenci:", en_yuksek_vize_ogrenci))
## [1] "En yüksek vize puanını alan öğrenci: Utku"
print(paste("En yüksek final puanını alan öğrenci:", en_yuksek_final_ogrenci))
## [1] "En yüksek final puanını alan öğrenci: Utku"
#n) Ögrencilerin vize ve final puanlarını ayrı ayrı toplayarak toplam iki farklı vektör oluşturunuz.
toplam_vize <- sum(vize)
toplam_final <- sum(final)
print(paste("Vize puanlarının toplamı:", toplam_vize))
## [1] "Vize puanlarının toplamı: 722"
print(paste("Final puanlarının toplamı:", toplam_final))
## [1] "Final puanlarının toplamı: 717"
#o) Final puaninin %60'ini ve vize puaninin %40'ini alarak geçme notu hesaplayiniz. "not" vektörüne atayip, "not" vektörünün betimsel istatistiklerini hesaplayiniz.
# Geçme notunu hesaplayarak "not" vektörünü oluşturma
not <- vize * 0.4 + final * 0.6
# "not" vektörünün betimsel istatistiklerini hesaplama
not_ort <- mean(not)
not_sd <- sd(not)
not_min <- min(not)
not_max <- max(not)
not_median <- median(not)
not_quartiles <- quantile(not, probs = c(0.25, 0.75))
not_summary <- summary(not)
# Sonuçları yazdırmak için
print(paste("Not ortalaması:", not_ort))
## [1] "Not ortalaması: 71.9"
print(paste("Not standart sapması:", not_sd))
## [1] "Not standart sapması: 12.8831500633795"
print(paste("Not minimum değeri:", not_min))
## [1] "Not minimum değeri: 50"
print(paste("Not maksimum değeri:", not_max))
## [1] "Not maksimum değeri: 93.8"
print(paste("Not medyanı:", not_median))
## [1] "Not medyanı: 70"
print("Not çeyrek değerleri:")
## [1] "Not çeyrek değerleri:"
print(not_quartiles)
## 25% 75%
## 66.05 81.25
print("Not özeti:")
## [1] "Not özeti:"
print(not_summary)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 50.00 66.05 70.00 71.90 81.25 93.80
#p) "not" vektörünü buyükten küçüge siralayarak "not _s" vektörünü olusturunuz.
not_s <- sort(not, decreasing= TRUE)
#q) Su ana kadar olusturdugunuz vektörlerin yapisini ilgili fonksiyonu kullanarak inceleyiniz.
str(isim)
## chr [1:10] "Ali" "Defne" "Meltem" "Semih" "Sevda" "Gizem" "Emre" "Zeynep" ...
str(vize)
## num [1:10] 60 70 50 80 65 70 85 70 92 80
str(final)
## num [1:10] 70 65 50 45 67 75 80 85 95 85
str(final_yuksek)
## logi [1:10] TRUE FALSE FALSE FALSE TRUE TRUE ...
str(final_y)
## num [1:9] 70 65 50 67 75 80 85 95 85
str(vize_y)
## num [1:10] 60 70 50 80 65 70 85 70 92 80
str(toplam_vize)
## num 722
str(toplam_final)
## num 717
str(not)
## num [1:10] 66 67 50 59 66.2 73 82 79 93.8 83
#r) Geçme notu ortalamanin üzerinde olan ögrencileri mantiksal operatörleri kullanarak yazdirniz.
gecme_yuksek <- not > not_ort
gecme_yuksek_notlar <- isim[gecme_yuksek]
#s) Geçme notu 66, 72 ve 88 e esit olan ögrencilerin olup olmadigini test ediniz.
# 66 notuna sahip öğrenci var mı?
sonuc_66 <- not[not == 66]
print(sonuc_66)
## [1] 66
# 72 notuna sahip öğrenci var mı?
sonuc_72 <- not[not == 72]
print(sonuc_72)
## numeric(0)
# 88 notuna sahip öğrenci var mı?
sonuc_88 <- not[not == 88]
print(sonuc_88)
## numeric(0)
BÖLÜM 2 SORU 2,3,4,5,6
SORU 2
# 1 ile 20 arasında eşit aralıklarla 40 elemanlı bir vektör
vektor <- seq(1, 20, length.out = 40)
# Vektörün elemanlarını yüzde birler basamağına yuvarlama
(yuvarlanmis_vektor <- round(vektor))
## [1] 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13
## [26] 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20
SORU 3
# a) Öğrenci isimlerini içeren vektör
ogrenci_vektor <- paste("ogrenci_", 1:10)
print(ogrenci_vektor)
## [1] "ogrenci_ 1" "ogrenci_ 2" "ogrenci_ 3" "ogrenci_ 4" "ogrenci_ 5"
## [6] "ogrenci_ 6" "ogrenci_ 7" "ogrenci_ 8" "ogrenci_ 9" "ogrenci_ 10"
# b) Sayıları karakter olarak içeren vektör
sayi_vektor <- c(rep(c(10, 15, 25, 50, 100), times = c(3, 5, 1, 4, 3)))
print(sayi_vektor)
## [1] 10 10 10 15 15 15 15 15 25 50 50 50 50 100 100 100
# c) Uzun karakter dizisini içeren vektör
karakter_vektor <- paste("1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3")
print(karakter_vektor)
## [1] "1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3"
SORU 4
# 1. Öğrencilerin cinsiyet bilgilerini içeren vektör
cins <- c("Erkek", "Kız", "Kız", "Erkek", "Kız", "Kız", "Erkek", "Kız", "Erkek", "Kız")
# 2. Cins vektörünü faktör olarak kaydetme
cins_faktor <- factor(cins)
# 3. İki farklı faktör oluşturma
# a) Sayısal düzeyli faktör
cins_sayisal <- factor(cins, levels = c("Kız", "Erkek"), labels = c(1, 2))
# b) Karakter düzeyli faktör
cins_karakter <- factor(cins)
# 4. Vektör düzeylerini görüntüleme
print(levels(cins_faktor)) # Cinsiyet faktörü düzeyleri
## [1] "Erkek" "Kız"
print(levels(cins_sayisal)) # Sayısal düzeyli cinsiyet faktörü düzeyleri
## [1] "1" "2"
print(levels(cins_karakter)) # Karakter düzeyli cinsiyet faktörü düzeyleri
## [1] "Erkek" "Kız"
SORU 5
# 1. Öğrencilerin geçme notları
not
## [1] 66.0 67.0 50.0 59.0 66.2 73.0 82.0 79.0 93.8 83.0
# 2. Harf notlarını belirleme ve faktör olarak kaydetme
harf_not <- cut(not,
breaks = c(-Inf, 49, 59, 69, 79, 89, 100),
labels = c("F", "E", "D", "C", "B", "A"),
right = TRUE)
# Harf notlarının sıralı faktör olması için
harf_not <- factor(harf_not, levels = c("F", "E", "D", "C", "B", "A"), ordered = TRUE)
harf_not_char <- as.character(harf_not)
# 3. Harf notlarının yapısını yazdırma
str(harf_not)
## Ord.factor w/ 6 levels "F"<"E"<"D"<"C"<..: 3 3 2 2 3 4 5 4 6 5
SORU 6
#Matris oluşturma
not_matris <- matrix(c(vize, final, not), nrow = length(vize), byrow = FALSE)
# Sütun isimlerini belirleme
colnames(not_matris) <- c("Vize", "Final", "Geçme Notu")
# 3.Sonuc
print(not_matris)
## Vize Final Geçme Notu
## [1,] 60 70 66.0
## [2,] 70 65 67.0
## [3,] 50 50 50.0
## [4,] 80 45 59.0
## [5,] 65 67 66.2
## [6,] 70 75 73.0
## [7,] 85 80 82.0
## [8,] 70 85 79.0
## [9,] 92 95 93.8
## [10,] 80 85 83.0
#6-a)
# Öğrenci isimleri
ogrenci_isimleri <- c("Ali", "Defne", "Meltem", "Semih", "Sevda", "Gizem", "Emre", "Zeynep", "Utku", "Beril")
# Matrisin satır isimlerini belirleme
(rownames(not_matris) <- ogrenci_isimleri)
## [1] "Ali" "Defne" "Meltem" "Semih" "Sevda" "Gizem" "Emre" "Zeynep"
## [9] "Utku" "Beril"
print(not_matris)
## Vize Final Geçme Notu
## Ali 60 70 66.0
## Defne 70 65 67.0
## Meltem 50 50 50.0
## Semih 80 45 59.0
## Sevda 65 67 66.2
## Gizem 70 75 73.0
## Emre 85 80 82.0
## Zeynep 70 85 79.0
## Utku 92 95 93.8
## Beril 80 85 83.0
#6-b)
# Vize, final ve geçme notlarının ortalamasını hesaplama
ortalama_notlar <- colMeans(not_matris)
# Ortalamayı matrise ekleme
not_matris <- rbind(not_matris, "Ortalama" = ortalama_notlar)
# Sonucu görüntüleme
print(not_matris)
## Vize Final Geçme Notu
## Ali 60.0 70.0 66.0
## Defne 70.0 65.0 67.0
## Meltem 50.0 50.0 50.0
## Semih 80.0 45.0 59.0
## Sevda 65.0 67.0 66.2
## Gizem 70.0 75.0 73.0
## Emre 85.0 80.0 82.0
## Zeynep 70.0 85.0 79.0
## Utku 92.0 95.0 93.8
## Beril 80.0 85.0 83.0
## Ortalama 72.2 71.7 71.9
#6-c)
# Harf notlarını matrise ekleme
not_matris <- cbind(not_matris, Harf_Not = harf_not_char)
## Warning in cbind(not_matris, Harf_Not = harf_not_char): number of rows of
## result is not a multiple of vector length (arg 2)
# Sonucu görüntüleme
print(not_matris)
## Vize Final Geçme Notu Harf_Not
## Ali "60" "70" "66" "D"
## Defne "70" "65" "67" "D"
## Meltem "50" "50" "50" "E"
## Semih "80" "45" "59" "E"
## Sevda "65" "67" "66.2" "D"
## Gizem "70" "75" "73" "C"
## Emre "85" "80" "82" "B"
## Zeynep "70" "85" "79" "C"
## Utku "92" "95" "93.8" "A"
## Beril "80" "85" "83" "B"
## Ortalama "72.2" "71.7" "71.9" "D"
BÖLÜM 3 SORU 1,2,3
SORU 1
#Öğrenci isimleri, vize ve final notları
isimler <- c("Ali", "Defne", "Meltem", "Semih", "Sevda", "Gizem", "Emre", "Zeynep", "Utku", "Beril")
vize_notlari <- c(60, 70, 50, 80, 65, 70, 85, 70, 92, 80)
final_notlari <- c(70, 65, 50, 45, 67, 75, 80, 85, 95, 85)
SORU 2
# Liste nesnesini oluşturma
bilgi <- list(öğrenci = isimler, vize_not = vize_notlari, final_not = final_notlari)
# a) Listenin yapısını inceleme
str(bilgi)
## List of 3
## $ öğrenci : chr [1:10] "Ali" "Defne" "Meltem" "Semih" ...
## $ vize_not : num [1:10] 60 70 50 80 65 70 85 70 92 80
## $ final_not: num [1:10] 70 65 50 45 67 75 80 85 95 85
# b) Bileşenlere isim verme
names(bilgi) <- c("öğrenci", "vize_not", "final_not")
# c) Geçme notlarını hesaplayıp listeye ekleme
gecme_notu <- 0.4 * bilgi$vize_not + 0.6 * bilgi$final_not
bilgi$not <- gecme_notu
# d) Listenin "vize_not" bileşenini yazdırma
print(bilgi$vize_not)
## [1] 60 70 50 80 65 70 85 70 92 80
# e) "vize_not" bileşeninin üçüncü elemanını yazdırma
print(bilgi$vize_not[3])
## [1] 50
# f) Geçme notu en yüksek olan öğrencinin notunu 100 olarak değiştirme
max_not_index <- which.max(bilgi$not) # En yüksek geçme notunun indeksini bulma
bilgi$not[max_not_index] <- 100 # En yüksek geçme notunu 100 olarak güncelleme
# Sonuc
print(bilgi$not) # Güncellenmiş notları yazdırma
## [1] 66.0 67.0 50.0 59.0 66.2 73.0 82.0 79.0 100.0 83.0
SORU 3
# Öğrenci isimleri, vize ve final notları ile "test" adında bir veri seti oluşturma
test <- data.frame(
öğrenci = c("Ali", "Defne", "Meltem", "Semih", "Sevda",
"Gizem", "Emre", "Zeynep", "Utku", "Beril"),
vize = c(60, 70, 50, 80, 65,
70, 85, 70, 92, 80),
final = c(70, 65, 50, 45, 67,
75, 80, 85, 95, 85)
)
# a) Veri setini tablo şeklinde görüntüleme
View(test) # Bu komut, RStudio'da veri setini tablo şeklinde açar.
# b) Geçme notlarını hesaplayıp veri setine ekleme
test$not <- 0.4 * test$vize + 0.6 * test$final
# c) Final notu 70'den büyük olan gözlemlerden yeni bir veri seti oluşturma
test_gecti <- subset(test, final > 70)
# d) "test_gecti" nesnesinin boyutunu yazdırma
print(dim(test_gecti))
## [1] 5 4
# e) "test_gecti" nesnesinin sadece vize ve final notlarının betimsel istatistiklerini yazdırma
summary(test_gecti[, c("vize", "final")])
## vize final
## Min. :70.0 Min. :75
## 1st Qu.:70.0 1st Qu.:80
## Median :80.0 Median :85
## Mean :79.4 Mean :84
## 3rd Qu.:85.0 3rd Qu.:85
## Max. :92.0 Max. :95
# f) "test_gecti" nesnesini not değişkenine göre büyükten küçüğe sıralama
test_gecti <- test_gecti[order(-test_gecti$not), ]
# Sonuç olarak güncellenmiş "test_gecti" veri setini yazdırma
print(test_gecti)
## öğrenci vize final not
## 9 Utku 92 95 93.8
## 10 Beril 80 85 83.0
## 7 Emre 85 80 82.0
## 8 Zeynep 70 85 79.0
## 6 Gizem 70 75 73.0