1. R’ın Atomları: Temel Veri Tipleri

R’da her şeyin en küçük birimine “veri tipi” denir. Tıpkı atomlar gibi, bunlar da verinin en saf halidir. En sık kullanacağımız üç temel atom şunlardır:

Bir verinin tipini class() fonksiyonu ile kontrol edebiliriz. Gelin farklı örneklerle deneyelim:

# --- Örnek 1: Temel Değişkenler ---
sayi_1 <- 15.5
metin_1 <- "Veri Bilimi"
durum_1 <- TRUE

class(sayi_1)
## [1] "numeric"
class(metin_1)
## [1] "character"
class(durum_1)
## [1] "logical"
# --- Örnek 2: Matematiksel Bir İşlemin Sonucu ---
# İki sayıyı topladığımızda sonuç yine 'numeric' olacaktır.
islem_sonucu <- 100 + 25.7
islem_sonucu
## [1] 125.7
class(islem_sonucu)
## [1] "numeric"
# --- Örnek 3: Mantıksal Bir Karşılaştırma ---
# 5'in 5'e eşit olup olmadığını kontrol edelim (== operatörü ile)
karsilastirma <- 5 == 5 
karsilastirma
## [1] TRUE
class(karsilastirma)
## [1] "logical"

2. Atomları Birleştirmek: Temel Veri Yapıları

Tek bir atom nadiren işimize yarar. Bizim, bu atomları bir araya getirip anlamlı moleküller, yani “veri yapıları” oluşturmaya ihtiyacımız var. Bu bölümde en sık kullanacağımız 5 temel veri yapısını tanıyacağız: Vektörler, Matrisler, Listeler, Veri Çerçeveleri (Data Frame) ve Faktörler.

2.1 Vektörler (Vectors): R’ın Omurgası

R’daki en temel ve en önemli veri yapısı vektördür.

  • Nedir? Aynı tipteki verilerin sıralı bir koleksiyonudur.
  • Altın Kural: Bir vektördeki tüm elemanlar aynı tipte olmak zorundadır! Yani bir vektör ya tamamen sayılardan, ya tamamen metinlerden ya da tamamen mantıksal değerlerden oluşur.
  • Nasıl Oluşturulur? c() (combine/birleştir) fonksiyonu ile.
# --- Örnek 1: Sayısal Vektör (Aylık Satış Adetleri) ---
satis_adetleri <- c(150, 210, 180, 250, 300)
satis_adetleri
## [1] 150 210 180 250 300
# --- Örnek 2: Karakter Vektörü (Ankete Verilen Cevaplar) ---
cevaplar <- c("Evet", "Hayır", "Evet", "Kararsızım", "Evet")
cevaplar
## [1] "Evet"       "Hayır"      "Evet"       "Kararsızım" "Evet"
# --- Örnek 3: Mantıksal Vektör (Ürünlerin Stok Durumu) ---
stok_durumu <- c(TRUE, FALSE, TRUE, TRUE, FALSE)
stok_durumu
## [1]  TRUE FALSE  TRUE  TRUE FALSE

2.2 Matrisler (Matrices): Düzenli Dizilimler

Matrisler, vektörlerin iki boyutlu halidir.

  • Nedir? Satır ve sütunlardan oluşan, tablo benzeri bir yapıdır.
  • Altın Kural: Tıpkı vektörler gibi, bir matristeki tüm elemanlar aynı tipte olmak zorundadır!
  • Nasıl Oluşturulur? matrix() fonksiyonu ile.
# Örnek 1: 2 ürünün 3 aylık satış verilerini tutan bir matris
# byrow=TRUE parametresi, R'a vektörü satır satır doldurmasını söyler.
satis_matrisi <- matrix(c(10, 12, 15, 20, 18, 22), nrow = 2, byrow = TRUE)
satis_matrisi
##      [,1] [,2] [,3]
## [1,]   10   12   15
## [2,]   20   18   22

2.3 Listeler (Lists): Atölyenin Her Gözü Çekmecesi

Peki ya farklı tipleri bir arada tutmak istersek? İşte o zaman sahneye listeler çıkar.

  • Nedir? Herhangi bir tipteki veriyi bir arada tutabilen, esnek bir koleksiyondur.
  • Analoji: İçine çekiç (sayısal vektör), tornavida (karakter) ve kullanma kılavuzu (başka bir liste) koyabildiğiniz bir alet çantası gibidir.
  • Nasıl Oluşturulur? list() fonksiyonu ile.
# Örnek 1: Bir ürünün farklı tiplerdeki özellikleri
urun_ozellikleri <- list(
  isim = "Akıllı Telefon",
  fiyat = 15000,
  markalar = c("Marka A", "Marka B", "Marka C"),
  garantisi_var_mi = TRUE
)
# Bir listenin yapısını görmek için str() (structure) fonksiyonu harikadır.
str(urun_ozellikleri)
## List of 4
##  $ isim            : chr "Akıllı Telefon"
##  $ fiyat           : num 15000
##  $ markalar        : chr [1:3] "Marka A" "Marka B" "Marka C"
##  $ garantisi_var_mi: logi TRUE

2.4 Veri Çerçeveleri (Data Frames): Bizim Excel Tablomuz

Geldik en önemli yapıya! Veri analizi ve makine öğrenmesi projelerinin %99’unda verilerimizi bu yapıda tutarız.

  • Nedir? İki boyutlu, tablo benzeri bir veri yapısıdır. Tıpkı Excel’deki gibi satırları ve sütunları vardır.
  • Altın Kurallar:
    1. Her sütun farklı veri tipinde olabilir (bir sütun sayısal, diğeri metin olabilir).
    2. Ancak bir sütun içindeki tüm veriler aynı tipte olmalıdır.
    3. Tüm sütunlar aynı uzunlukta (aynı sayıda elemana sahip) olmak zorundadır!
  • Nasıl Oluşturulur? data.frame() fonksiyonu ile.
# Örnek 1: Kitaplar hakkında bilgi içeren bir veri çerçevesi
kitap_df <- data.frame(
  KitapAdi = c("Veri Madenciliği", "R ile Programlama", "Yapay Zeka"),
  SayfaSayisi = c(350, 420, 510),
  StoktaVar = c(TRUE, FALSE, TRUE)
)
kitap_df
str(kitap_df)
## 'data.frame':    3 obs. of  3 variables:
##  $ KitapAdi   : chr  "Veri Madenciliği" "R ile Programlama" "Yapay Zeka"
##  $ SayfaSayisi: num  350 420 510
##  $ StoktaVar  : logi  TRUE FALSE TRUE

2.5 Faktörler (Factors): Kategorik Verilerin Efendisi

R’da kategorik verileri (örneğin “kadın/erkek”, “küçük/orta/büyük” gibi) saklamak için factor adında özel bir yapı vardır.

  • Nedir? Bir metin vektörünü alır ve onu “seviyeler” (levels) olarak bilinen sabit kategorilere dönüştürür. Bu, modelleme ve görselleştirme için çok önemlidir.
  • Nasıl Oluşturulur? factor() veya sıralama önemliyse ordered() fonksiyonları ile.
# Örnek 1: Tişört bedenlerini faktöre dönüştürme
bedenler_vektor <- c("M", "L", "S", "L", "M", "XL")
bedenler_faktor <- factor(bedenler_vektor)
bedenler_faktor
## [1] M  L  S  L  M  XL
## Levels: L M S XL
# Örnek 2: Eğitim seviyesi gibi sıralı bir kategorik değişken
egitim_seviyesi <- ordered(
  c("Lise", "Üniversite", "Yüksek Lisans", "Üniversite"),
  levels = c("Lise", "Üniversite", "Yüksek Lisans")
)
egitim_seviyesi
## [1] Lise          Üniversite    Yüksek Lisans Üniversite   
## Levels: Lise < Üniversite < Yüksek Lisans

Bu Bölümde Neler Öğrendik?

Tebrikler! Artık R’ın alfabesini (veri tipleri) ve bu harflerle ilk kelimeleri nasıl oluşturacağımızı (veri yapıları) öğrendik. Özellikle data frame, makine öğrenmesi yolculuğumuzda verilerimizi taşıyacağımız en önemli aracımız olacak.

Bir sonraki bölümde, bu data frame’leri nasıl manipüle edeceğimizi, yani verileri nasıl süzeceğimizi, sıralayacağımızı ve yeni sütunlar ekleyeceğimizi öğreneceğiz. Artık veri hazırlama sanatına ilk adımı atmaya hazırız!

Yararlandığımız Kaynak

Bu bölümdeki konuların sırası ve anlatım felsefesi oluşturulurken aşağıdaki değerli eserden ilham alınmıştır. Örnekler ve metinler tamamen özgün olsa da, bu kaynağın yol göstericiliği için atıfta bulunmak etik bir gerekliliktir.

Lafaye de Micheaux, P., Drouilhet, R., & Liquet, B. (2013). The R Software: Fundamentals of Programming and Statistical Analysis. Springer.

Alıştırmalar

Şimdi öğrendiklerimizi pekiştirme zamanı!

1. Vektörler: Bir haftanın sıcaklık değerlerini (numeric), günlerini (character) ve o gün yağmur yağıp yağmadığını (logical) tutan üç ayrı vektör oluşturun.

2. Matrisler: 2 öğrencinin 3 farklı dersten (Matematik, Fizik, Kimya) aldıkları notları içeren 2x3 boyutunda bir matris oluşturun.

3. Listeler: Bir sinema filmi için; adını (character), vizyon yılını (numeric), başrol oyuncularının isimlerini bir vektör içinde (character vektörü) ve IMDb puanını (numeric) içeren bir liste oluşturun.

4. Veri Çerçeveleri (Data Frames): 3 farklı çalışanın Ad, Departman, Maaş ve TamZamanliMi bilgilerini içeren bir veri çerçevesi (data frame) oluşturun. Oluşturduktan sonra str() fonksiyonu ile yapısını kontrol edin.

5. Faktörler: Bir grup insanın en sevdiği mevsimi tutan bir character vektörü oluşturun ("İlkbahar", "Yaz", "Sonbahar", "Kış"). Bu vektörü bir faktöre dönüştürün ve seviyelerini (levels()) kontrol edin.

Alıştırmalar ve Çözümleri

Aşağıda, alıştırmaların R kodlarını ve bu kodların çalıştırıldığında RStudio’da üreteceği çıktıları bulabilirsiniz.

# --- Çözüm 1: Vektörler ---
haftalik_sicaklik <- c(22.5, 24.0, 23.1, 21.8, 25.2, 26.0, 24.5)
haftanin_gunleri <- c("Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar")
yagmur_durumu <- c(FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE)

# Oluşturduğumuz vektörleri kontrol edelim:
haftalik_sicaklik
## [1] 22.5 24.0 23.1 21.8 25.2 26.0 24.5
haftanin_gunleri
## [1] "Pazartesi" "Salı"      "Çarşamba"  "Perşembe"  "Cuma"      "Cumartesi"
## [7] "Pazar"
yagmur_durumu
## [1] FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE
# --- Çözüm 2: Matrisler ---
ogrenci_notlari <- matrix(c(85, 90, 75, 95, 88, 92), nrow = 2, byrow = TRUE)
# Sütun ve satır isimleri eklemek iyi bir pratiktir:
colnames(ogrenci_notlari) <- c("Matematik", "Fizik", "Kimya")
rownames(ogrenci_notlari) <- c("Öğrenci A", "Öğrenci B")

# Matrisimizi kontrol edelim:
ogrenci_notlari
##           Matematik Fizik Kimya
## Öğrenci A        85    90    75
## Öğrenci B        95    88    92
# --- Çözüm 3: Listeler ---
film_bilgisi <- list(
  ad = "Geleceğe Dönüş",
  vizyon_yili = 1985,
  oyuncular = c("Michael J. Fox", "Christopher Lloyd"),
  imdb_puani = 8.5
)

# Listemizin yapısını str() ile inceleyelim:
str(film_bilgisi)
## List of 4
##  $ ad         : chr "Geleceğe Dönüş"
##  $ vizyon_yili: num 1985
##  $ oyuncular  : chr [1:2] "Michael J. Fox" "Christopher Lloyd"
##  $ imdb_puani : num 8.5
# --- Çözüm 4: Veri Çerçeveleri ---
calisan_df <- data.frame(
  Ad = c("Ayşe", "Mehmet", "Fatma"),
  Departman = c("İK", "IT", "Pazarlama"),
  Maas = c(15000, 22000, 18000),
  TamZamanliMi = c(TRUE, TRUE, FALSE)
)

# Data frame'imizi hem görüntüleyelim hem de yapısını kontrol edelim:
calisan_df
str(calisan_df)
## 'data.frame':    3 obs. of  4 variables:
##  $ Ad          : chr  "Ayşe" "Mehmet" "Fatma"
##  $ Departman   : chr  "İK" "IT" "Pazarlama"
##  $ Maas        : num  15000 22000 18000
##  $ TamZamanliMi: logi  TRUE TRUE FALSE
# --- Çözüm 5: Faktörler ---
sevilen_mevsimler <- c("Yaz", "İlkbahar", "Yaz", "Sonbahar", "Kış", "İlkbahar")
mevsim_faktor <- factor(sevilen_mevsimler)

# Faktörümüzü ve seviyelerini kontrol edelim:
mevsim_faktor
## [1] Yaz      İlkbahar Yaz      Sonbahar Kış      İlkbahar
## Levels: İlkbahar Kış Sonbahar Yaz
levels(mevsim_faktor)
## [1] "İlkbahar" "Kış"      "Sonbahar" "Yaz"