Önceki Dersden Hatırlatma 1: R Arayüzü ve Temel Çalışma Prensipleri

R arayüzü temelde dört ana pencereden oluşur:

  1. Script (Kod Alanı): Kodları yazdığımız bölümdür.

  2. Console (Konsol): İşlemlerin yapıldığı ve sonuçların, çıktıların görüldüğü alandır.

  3. Environment: Oluşturduğumuz nesnelerin (objelerin) ve içeri aktardığımız veri setlerinin bulunduğu sağ üst bölümdür.

  4. Files / Plots / Packages: Görsellerin (grafiklerin), dosyaların ve sisteme yüklenmiş gömülü paketlerin bulunduğu sağ alt bölümdür.

Not: R Studio’nun görünümü Tools -> Global Options -> Appearance menüsünden (örneğin Cobalt teması seçilerek) kişiselleştirilebilir ve yazı/zoom boyutları ayarlanabilir.

Kodları her zaman “R Script” üzerinden satır satır yazıp, çalıştırmak istediğimiz satıra gelerek Ctrl + Enter (Mac için control+Enter veya command + Enter ) kısayoluyla konsolda işleme sokarız. Dilerseniz R Script yerine R Notebook veya R Markdown kullanarak da çalışabilirsiniz; bu dosyalar açıp kapatılabilen, içlerinde kod blokları (chunk) barındıran daha gelişmiş ve düzenli arayüzlerdir. Bir kod blokunun R kodu olarak çalışabilmesi için başlangıcında ```{r} ve sonunda ``` olmalıdır.

Hocamızın Çalışma Yapacağı R Notebook ile ilgili Önceki Dersden Hatırlatmalar:

Hocamız bu aşamadan sonra R Exercise 12 17 2025 v1.R isimli bir R Notebook ile çalışmayı tercih etmiştir. Böylece vereceği örnekleri bloklar içinde yazıp o blokları çalıştıracaktır.

Bunun için File Menusunden New File oradan da R Notebook seçeneğini tıklamıştır. Karşısına gelen ekranda kod bloğu hariç herşeyi silmiş orada kod blokları yukarıdaki anlatımda ki gibi kod blokları oluşturarak anlatıma devam etmiştir.

Önceki Dersden Hatırlatma 2 : Temel Matematiksel ve Mantıksal İşlemler

En basit aritmetik işlemlerden karmaşık olanlara kadar R konsolunda işlemler yapabilirsiniz.

# Basit bir matematiksel işlem
3 + 5
## [1] 8

Mantıksal sorgulamalar yaparak “Doğru” (TRUE) veya “Yanlış” (FALSE) cevapları alabilirsiniz.

# Mantıksal sorgulamalar
2 < 3
## [1] TRUE
2 > 3
## [1] FALSE
2 < 1
## [1] FALSE

Önceki Dersden Hatırlatma 3: Vektörler ve Değişken Oluşturma

R’da birden çok öğeyi içerisinde barındıran vektörler (c() fonksiyonu ile) oluşturabiliriz. Vektörler karakter (metin), sayısal (numeric) veya mantıksal (TRUE/FALSE veya NA - Kayıp Veri) türlerde olabilir.

# Karakter (Metin) vektörü oluşturma (Atama için "=" kullanıyoruz)
ad = c("Ali", "Ahmet", "Ayşe", "Fatma")
ad
## [1] "Ali"   "Ahmet" "Ayşe"  "Fatma"

Verilerde Bulaşıcılık (Coercion) Kuralı : R’da farklı veri türleri tek bir vektörde birleşirse, daha güçlü olan tür vektörün tamamını dönüştürür. En baskın tür Karakterdir. Sayısal bir verinin arasına tırnak içinde olmasa dahi tek bir karakter girilirse, tüm veriler karaktere (string) dönüşür. İkinci baskın tür Sayısal veriler, en zayıf tür ise Mantıksal verilerdir. Türü kontrol etmek için typeof() fonksiyonu kullanılır.

Önceki Dersden Hatırlatma 4 : Data Frame (Veri Çerçevesi) Oluşturma

Bireysel vektörleri birleştirerek tıpkı Excel veya SPSS’te olduğu gibi satır ve sütunlardan oluşan bir Veri Çerçevesi (Data Frame) oluşturabiliriz. Veri çerçevesi oluşturmadan önce kullanacağınız tüm alt vektörleri environment’a (hafızaya) kaydetmiş yani çalıştırmış olmanız gerekir, aksi halde hata alırsınız.

# Önce vektörleri tanımlayalım (Environment'a alalım)
ID = c(101, 102, 103, 104)
yas = c(21, 25, 22, 24)
ar_stat = c(TRUE, FALSE, FALSE, TRUE)
car = c(1, NA, NA, 2)

# Ardından bu vektörleri bir data frame içinde birleştiriyoruz:
ogren = data.frame(ID, ad, yas, ar_stat, car)

# Oluşturulan veri çerçevesini görüntüleyelim
ogren

Veri çerçevesi içinde işlem yapma ve $ işareti:

Bağımsız bir vektörde işlem yaparken doğrudan ismini kullanırız (örn: mean(yas)) ancak bir data frame’in içindeki sütuna müdahale etmek istiyorsak, hangi veri setindeki hangi değişkene gideceğimizi spesifik olarak belirten $ (dolar) işaretini kullanmak zorundayız.

# 'ogren' isimli veri çerçevesindeki 'yas' değişkeninin ortalamasını alma
mean(ogren$yas)
## [1] 23

Aynı şekilde, mevcut bir veri setinin içerisine dışarıdan yeni bir değişken (kolon) ekleyebiliriz.

# Öğrenci datasına 'mat' isimli yeni bir matematik skoru vektörü ekleme
# Not: Eklenen vektörün uzunluğu veri çerçevesindeki satır sayısıyla aynı olmalıdır.
ogren$mat = c(85, 92, 78, 88)
ogren

1. R Paketleri Kurulumu ve Çağrılması

R, dışarıdan başkaları tarafından yazılmış paketleri (install.packages()) kurup çalıştırabildiğiniz (library()) açık bir platformdur.

Kullanacağımız Paketler ve İşlevleri:

# 1. Aşama: Paketleri Yükleme (İsimler tırnak içinde yazılır)
# Bu kod bloğunu sadece paketler yüklü değilse bir kere çalıştırın.
install.packages("haven")
install.packages("labelled")
install.packages("gtsummary")
install.packages("tidyverse")
# 2. Aşama: Paketleri Çalıştırma (İsimler tırnaksız yazılır)
library(haven)
library(labelled)
library(gtsummary)
## Warning: package 'gtsummary' was built under R version 4.5.2
library(tidyverse)
## Warning: package 'dplyr' was built under R version 4.5.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.1     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   4.0.0     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.4     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

2. SPSS Veri Setlerini İçe Aktarma (Import Dataset)

a) Environment Bölümünde Yer Alan Import Dataset ile read_sav için Veri Setini Yolunu Bularak Program İçinden Çağırma : (DİKKAT Çok uzun yoldur. Hocamızın tercih etmediği bir yöntemdir DİKKAT)

Paste ile yapıştırdığımız komutu çalıştırdığımızda;

# Uzun (Proje dışı) yöntem:
TGSS = read_sav("C:/Users/Marmara/Desktop/data/TGSS_2024.sav") # sizin dosyanız nerede ise o yazılır.

b) Veri setlerinizi import ederken en doğru yöntem: (Oluşturduğumuz proje içine veri setlerini fiziki olarak o proje klasörünün içine koymaktır.)

Not: Aşağıdaki kodların çalışması için TGSS_2024.sav ve GSS_2024.sav dosyalarının proje klasörünüzde olması gerekir.

# Kısa (Proje içi) yöntem:
TGSS = read_sav("TGSS_2024.sav") # Mutlaka çalışma klasörümüzde bu dosya olmalı
GSS_2024 = read_sav("GSS_2024.sav") # Mutlaka çalışma klasörümüzde bu dosya olmalı

Hafızadan bir veri setini temizlemek istersek rm() fonksiyonunu kullanırız.

# rm(GSS_2024) # Veri setini environment'tan siler. Aktifleştirmek için baştaki # kaldırınız.

SPSS’teki “Variable View” (Değişken Görünümü) sekmesinin bir karşılığını R’da elde etmek ve datadaki etiketleri görmek için labelled paketindeki look_for() fonksiyonunu kullanırız.

TGSS_sozluk = look_for(TGSS)
TGSS_sozluk

3. Keşfedici İstatistikler ve Kayıp Veriler (Missing Values)

Veri seti üzerindeki temel analizleri yapabiliriz. Eğer uzun bir ondalıklı sonuç çıkarsa round() fonksiyonu ile onu yuvarlayabiliriz.

# Yaş ortalamasını bulma
mean(TGSS$age)
## [1] 40.29446
# Sonucu doğrudan iki ondalığa yuvarlama
round(mean(TGSS$age), 2)
## [1] 40.29
# Veya önce bir objeye atayıp, o objeyi yuvarlama:
mean_age = mean(TGSS$age)
round(mean_age, 2)
## [1] 40.29

Eğer verimizde bir eksik veya kayıp değer (NA) varsa, R sonucu NA olarak döndürür. anyNA() ile kayıp veri olup olmadığını denetleriz. Varsa, hesaplama fonksiyonlarında na.rm = TRUE argümanını kullanarak kayıp verileri işlemden çıkarırız.

# Veride NA olup olmadığını sorgulama (TRUE veya FALSE verir)
anyNA(TGSS$age)      # Türkiye verisinde age değişkeninde NA yoktur diye biliyoruz sonuca bakıyoruz.(False çıktı yani NA yok.)
## [1] FALSE
anyNA(GSS_2024$age)  # ABD verisinde age değişkeninde NA vardır diye biliyoruz sonuca bakıyoruz.(True çıktı yani NA var.)
## [1] TRUE
# NA varsa ortalama alırken "na.rm = TRUE" kullanmalıyız.
mean_USA = mean(GSS_2024$age, na.rm = TRUE)
mean_TR = mean(TGSS$age)

mean_USA # ABD ortalaması NA barındırır onları dikkate almadan hesaplanmıştır.
## [1] 50.36845
mean_TR # Türkiye ortalaması NA barındırmaz.
## [1] 40.29446
# İki ülke arasındaki yaş farkını atayarak bulma
age_difference = mean_TR - mean_USA

# Çıkan sonucun Mutlak Değerini (Absolute Value) alma
age_df_abs <- abs(age_difference)
age_df_abs
## [1] 10.074
# Yuvalanmış (Nested) kullanım örneği:
age_df_abs_round = round(abs(mean_TR-mean_USA), 2)
age_df_abs_round
## [1] 10.07

Bir değişkenin özet istatistiklerini (minimum, maksimum, ortalama, medyan vb.) topluca görmek için summary() kullanılır.

# Age ve Weight için summary (özet) çıkartma
summary(TGSS$age)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   18.00   27.00   39.00   40.29   51.00  100.00
summary(TGSS$weight) # NA sayısını (örn: 906 NA) da raporlar.
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   40.00   63.00   73.00   74.49   85.00  140.00     906
# Çıktıyı bir objeye kaydetme
A = summary(TGSS$age)
A
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   18.00   27.00   39.00   40.29   51.00  100.00

4. Veri Tipleri Sorgulama ve Faktör Dönüşümleri

Örnek 1: degurba (Kentleşme Durumu) ile ilgili çalışmalar

# Veri tipi ve yapısını sorgulama
class(TGSS$degurba)
## [1] "haven_labelled" "vctrs_vctr"     "double"
typeof(TGSS$degurba) # değişkenim sayısal tipte veri barındırıyor.
## [1] "double"
attributes(TGSS$degurba) # değişken hakkında daha fazla bilgi verir.
## $label
## [1] "Kentleşme Durumu"
## 
## $format.spss
## [1] "F8.2"
## 
## $class
## [1] "haven_labelled" "vctrs_vctr"     "double"        
## 
## $labels
##          Kırsal Orta Yoğun Kent      Yoğun Kent 
##               1               2               3
is.factor(TGSS$degurba) # Orijinalde numeric görüyor, bunu birazdan faktöre çevireceğiz ki frekans tablosu çıkarabilelim.
## [1] FALSE
is.numeric(TGSS$degurba) # Orijinalde numeric
## [1] TRUE

Sayısal gözüken bu değişken için etiketli bir frekans tablosu almak isterseniz, değişkeni as_factor() ile “faktör” formatına dönüştürmeniz gerekir.

# Etiketsiz Frekans Tablosu (Sayıları basar)
table(TGSS$degurba)
## 
##    1    2    3 
##  426  436 1753
# Veriyi faktöre dönüştürme ve Etiketli (Label) Frekans Tablosu Çıkarma
a <- as_factor(TGSS$degurba) 
is.factor(a) # TRUE sonucunu verir
## [1] TRUE
table(a) # Frekans Tablosu
## a
##          Kırsal Orta Yoğun Kent      Yoğun Kent 
##             426             436            1753
# Tek satırda iç içe faktör dönüşümü ve tablo çıkarma
table(as_factor(TGSS$degurba))
## 
##          Kırsal Orta Yoğun Kent      Yoğun Kent 
##             426             436            1753

Örnek 2: empstr (İş Stresi) ile ilgili çalışmalar

# Tek satırda iç içe faktör dönüşümü ve tablo çıkarma
table(as_factor(TGSS$empstr)) 
## 
##             Hiçbir zaman                  Nadiren                    Bazen 
##                      127                      168                      400 
##                  Sık sık                Her zaman               Bilmiyorum 
##                      219                      265                        0 
## Cevap vermek istemiyorum 
##                        0

Kullanıcı Tanımlı Kayıp Veriler (User NA): “Bilmiyorum” gibi seçenekleri de görmek için user_na = TRUE argümanı kullanılır.

Hocamızın Açıklaması: TGSS 2024 veri setinde (read_sav() ile okunan SPSS dosyası) toplam 2615 gözlem bulunmasına rağmen, incelenen değişkende (Likert tipi soru: “hiçbir zaman, nadiren, bazen, sık sık, her zaman”) yalnızca 1436 geçerli cevap vardır. Geri kalan gözlemler “Bilmiyorum / Cevap vermek istemiyorum” gibi kullanıcı tanımlı kayıp değerler (user missing) olarak etiketlenmiştir.

read_sav() fonksiyonunda

user_na = TRUE parametresiyle bu değerler veri setinde kendi kodları (örneğin 0, 3, 5 vb.) ve etiketleriyle korunur; bu sayede table() veya grafiklerde ayrı kategoriler olarak görünebilir.

user_na = FALSE (veya DEFAULT hali) kullanıldığında ise bu değerler otomatik olarak NA’ya dönüştürülür ve analiz/tablo/grafiklerde görünmez (0 olarak gösterilmez, tamamen dışarıda bırakılır).

Bu ayar, veri temizliği ve raporlama aşamasında istenmeyen “user missing” kategorilerini hızlıca filtrelemek için kritik öneme sahiptir.

# Kayıp tanımlı etiketleri de dahil ederek veriyi içe aktarma
TGSS = read_sav("TGSS_2024.sav", user_na = TRUE)

# Tek satırda iç içe faktör dönüşümü ve tablo çıkarma şimdi bakar isek az önce 0 gözükenlerin gerçek değerleri gelir.
table(as_factor(TGSS$empstr)) 
## 
##             Hiçbir zaman                  Nadiren                    Bazen 
##                      127                      168                      400 
##                  Sık sık                Her zaman               Bilmiyorum 
##                      219                      265                        5 
## Cevap vermek istemiyorum 
##                        3

5. R’da Temel Görselleştirme İşlemleri

Base R komutları ile hızlı grafikler oluşturabiliriz. Bar grafiği için bir değişkenin tablosunu barplot() fonksiyonunun içine beslemeliyiz. Şu an herhangi bir paket kullanmadan Base R Kodları ile yapıyoruz. Paket kullanarak veri görselleştirmesi ayrı bir ders olarak yapılacaktır.

# Basit bir Bar Grafiği 
barplot(table(TGSS$degurba))

# Basit bir Bar Grafiği (Faktöre dönüştürülmüş tablodan Etiketli Olsun)
barplot(table(as_factor(TGSS$degurba)))

Grafik Görselini Zenginleştirme:

# Zenginleştirilmiş Bar Grafiği Oluşturma
barplot(table(as_factor(TGSS$degurba)), 
        ylim = c(0, 2000), 
        xlab = "Yerleşim Türü", 
        ylab = "Frekans (Sayı)", 
        col = c("blue", "red", "yellow"))

Pasta grafiği (pie()) için de mantık benzerdir.

# Renklendirilmiş Pasta Grafiği (Pie Chart) Oluşturma
pie(table(as_factor(TGSS$degurba)), 
    col = c("blue", "red", "yellow"),
    main = "Yerleşim Türüne Göre Dağılım")