Nesne Oluşturma (Devam)

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

Veri Seti Oluşturma

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

Hazır Veri Setleri

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

Eleman Seçme

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 Seçme

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

Eleman Ekleme ve Çıkarma

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ı İnceleme ve Veri Setini İsimlendirme

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

Betimsel İstatistikler

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

Liste Oluşturma

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.

Matematiksel Gösterimler

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.

ÖDEV

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}} \]

KENDİNİ TEST ET

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
## 💖
## 📚

4. HAFTANIN KİTAP ÖDEVİ

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