R arayüzü temelde dört ana pencereden oluşur:
Script (Kod Alanı): Kodları yazdığımız bölümdür.
Console (Konsol): İşlemlerin yapıldığı ve sonuçların, çıktıların görüldüğü alandır.
Environment: Oluşturduğumuz nesnelerin (objelerin) ve içeri aktardığımız veri setlerinin bulunduğu sağ üst bölümdür.
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.
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
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.
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
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:
haven: SPSS (sav) datalarını R platformuna taşır.
labelled: SPSS dosyalarından gelen etiketleri (labelları) okumayı ve kullanmayı sağlar.
gtsummary: Özet istatistik tabloları çıkarmaya yarar.
tidyverse: Veri manipülasyonu ve görselleştirme için kullanılan mega pakettir.
# 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
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.
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
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
# 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
# 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
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:
ylim = c(...): Y ekseni sınırları.
xlab = "...": X ekseni etiketi.
ylab = "...": Y ekseni etiketi.
col = "...": Renkler.
# 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")