Merhaba Dostlar, Atölyedeki Makineleri Çalıştırıyoruz!

Bu bölümde, özellikle kategorik değişkenleri ve onların sayısal özetlerini görselleştirmek için tasarlanmış makineleri tanıyacağız.

Hazırsanız, bu makineleri sırayla çalıştırıp, hangi işler için en uygun olduklarını mpg veri seti üzerinden keşfedelim.

library(tidyverse)

1. Miktarları Karşılaştırma: Çubuk Grafikleri

Amaç: Farklı kategorilerin sahip olduğu miktarları veya sayıları birbiriyle görsel olarak karşılaştırmak.

a) Kategorileri Sayma: geom_bar()

Eğer amacımız, veri setimizdeki her bir kategoriden kaç adet gözlem olduğunu saymaksa, geom_bar() tek başına yeterlidir. Sadece x estetiğine kategorik değişkenimizi vermemiz gerekir, y eksenini (sayıları) kendisi otomatik olarak hesaplar.

ggplot(data = mpg, mapping = aes(x = class)) +
  geom_bar(aes(fill = class)) + # Her çubuğa kendi kategorisinin rengini verelim
  theme(legend.position = "none") + # Renkler zaten eksende belli, efsaneye gerek yok
  labs(title = "Arac Siniflarina Gore Gozlem Sayisi", x = "Arac Sinifi", y = "Arac Adedi")
Arac Siniflarina Gore Arac Sayilari

Arac Siniflarina Gore Arac Sayilari

b) Mevcut Değerleri Çizme: geom_col()

Eğer elimizde zaten özetlenmiş bir veri varsa, bu iş için özel olarak tasarlanmış olan geom_col()’u kullanırız.

# Adım 1: dplyr ile veriyi özetleyelim.
mpg_summary <- mpg %>%
  group_by(class) %>%
  summarise(ortalama_hwy = mean(hwy), .groups = 'drop')

# Adım 2: Bu özet veriyi geom_col ile görselleştirelim.
ggplot(data = mpg_summary, 
       mapping = aes(x = reorder(class, ortalama_hwy), 
                                         y = ortalama_hwy)) +
  geom_col(aes(fill = class)) +
  coord_flip() +
  theme(legend.position = "none") +
  labs(title = "Arac Siniflarina Gore Ortalama Yakit Verimliligi", 
       x = NULL, y = "Ortalama Otoyol Verimliligi (MPG)")
Her Araç Sınıfının Ortalama Yakıt Verimliliği

Her Araç Sınıfının Ortalama Yakıt Verimliliği

2. İki Kategoriyi Birlikte Görselleştirme

Amaç: İki kategorik değişken arasındaki ilişkiyi anlamak. Örneğin, “Silindir sayısı (cyl) ile çekiş tipi (drv) arasında bir ilişki var mı?”

a) Gruplandırılmış Çubuk Grafik (position = "dodge")

Kategorileri yan yana koyarak doğrudan karşılaştırma yapmak için kullanılır.

ggplot(mpg, aes(x = factor(cyl), fill = drv)) +
  geom_bar(position = "dodge") +
  labs(title = "Cekis Tipinin Silindir Sayisina Gore Dagilimi", 
       x = "Silindir Sayisi", y = "Arac Sayisi", fill = "Cekis Tipi")
Gruplandırılmış Çubuk Grafik

Gruplandırılmış Çubuk Grafik

b) Yığılmış Çubuk Grafik (position = "stack" veya "fill")

Grupların bir bütün içindeki oranlarını veya toplamlarını göstermek için kullanılır.

# position="fill", her bir silindir grubunu %100'e tamamlayarak oranları gösterir.
ggplot(mpg, aes(x = factor(cyl), fill = drv)) +
  geom_bar(position = "fill") +
  labs(title = "Cekis Tipinin Silindir Sayisi Icindeki Orani", 
       x = "Silindir Sayisi", y = "Oran", fill = "Cekis Tipi")
Yığılmış Oransal Çubuk Grafik

Yığılmış Oransal Çubuk Grafik

Ustalık Uyarısı: Yığılmış çubuk grafikler, en alttaki kategori hariç diğerlerini karşılaştırmayı zorlaştırır. Genellikle gruplandırılmış (dodge) veya bir sonraki göreceğimiz panelli (facet) grafikler daha iyi bir seçimdir.

3. Alternatifler ve İleri Teknikler

a) Gürültüyü Azaltmak: Çok Panelli Grafikler (facet_wrap)

Grafiği, bir kategorik değişkenin her bir seviyesi için küçük “mini grafiklere” bölerek, karşılaştırmayı daha temiz ve odaklı hale getirir.

ggplot(mpg, aes(x = factor(cyl), fill = factor(cyl))) +
  geom_bar() +
  facet_wrap(~ drv) +
  theme(legend.position = "none") + # Renkler zaten eksende belli, efsaneye gerek yok
  labs(title = "Farkli Cekis Tipleri Icin Silindir Sayisi Dagilimi", 
       x = "Silindir Sayisi", y = "Arac Sayisi")
Panellere Ayrılmış Grafikler

Panellere Ayrılmış Grafikler

b) İki Kategorinin Kesişimi: Isı Haritaları (geom_tile)

İki kategorik değişkenin kesişimindeki “yoğunluğu” (gözlem sayısını) renklerle göstermek için kullanılır.

# Önce dplyr ile her bir kesişimdeki araç sayısını hesaplayalım
class_drv_summary <- mpg %>%
  count(class, drv)
# Şimdi bu özet veriyi geom_tile ile görselleştirelim
ggplot(class_drv_summary, aes(x = class, y = drv, fill = n)) +
  geom_tile(color = "white", linewidth = 1) + # Hücreler arasına beyaz çizgi ekleyelim
  geom_text(aes(label = n), color = "white") + # Hücrelerin içine sayıları yazalım
  scale_fill_viridis_c() + # Renk körü dostu bir renk paleti
  labs(title = "Arac Sinifi ve Cekis Tipi Kesisimi", 
       x = "Arac Sinifi", y = "Cekis Tipi", fill = "Arac Sayisi")
Sınıf ve Çekiş Tipi Kesişimi (Isı Haritası)

Sınıf ve Çekiş Tipi Kesişimi (Isı Haritası)

4. Grupların Dağılımlarını Karşılaştırma: geom_boxplot ve geom_violin

Amaç: Farklı kategorilerin, tek bir sayısal değişken üzerindeki dağılımlarını bir bütün olarak kıyaslamak.

geom_boxplot() (Kutu Grafiği)

Bir grubun medyanını, çeyrekliklerini ve aykırı değerlerini bir bakışta gösterir.

ggplot(mpg, aes(x = class, y = hwy)) +
  geom_boxplot() +
  coord_flip() +
  labs(title = "Arac Siniflarina Gore Otoyol Yakit Verimliligi Dagilimi",
       x = NULL, y = "Otoyol Yakit Verimliligi (MPG)")
Araç Sınıflarına Göre Yakıt Verimliliği (Kutu Grafiği)

Araç Sınıflarına Göre Yakıt Verimliliği (Kutu Grafiği)

geom_violin() (Keman Grafiği)

Kutu grafiğinin göremediği, verinin yoğunluk “şeklini” gösterir. Özellikle birden fazla tepe noktası olan (çok modlu) dağılımları tespit etmek için harikadır.

Kemanın genişliği, o noktadaki veri yoğunluğunu temsil eder. Bu sayede, bir grubun içindeki değerlerin nerelerde kümelendiğini bir bakışta görebiliriz.

ggplot(mpg, aes(x = class, y = hwy)) +
  geom_violin(aes(fill = class)) + # Her kemana kendi rengini verelim
  geom_jitter(width = 0.1, alpha = 0.3) + # Gerçek veri noktalarını da ekleyelim
  coord_flip() +
  theme(legend.position = "none") +
  labs(
    title = "Arac Siniflarina Gore Yakit Verimliligi Dagilimi",
    x = NULL,
    y = "Otoyol Yakit Verimliligi (MPG)"
  )
Araç Sınıflarına Göre Yakıt Verimliliği (Keman Grafiği)

Araç Sınıflarına Göre Yakıt Verimliliği (Keman Grafiği)

Grafiği Yorumlayalım: Bu keman grafiği, bir önceki kutu grafiğinin anlattığı hikayeyi daha da derinleştiriyor. Örneğin, “suv” sınıfında yakıt verimliliğinin iki ayrı noktada (~17 ve ~22 MPG) yoğunlaştığını, yani iki farklı tip SUV olabileceğini ima ediyor. Kutu grafiği bu detayı bize gösteremezdi. Ayrıca, geom_jitter() ile eklediğimiz şeffaf noktalar sayesinde, kemanın “olmayan veriyi gösterme” riskini de ortadan kaldırmış olduk.

Ustanın Kararı: Eğer bir grubun dağılımının simetrik mi, çarpık mı, yoksa çok tepeli mi olduğunu merak ediyorsanız, keman grafiği genellikle kutu grafiğinden daha zengin bir hikaye anlatır.

Bölümün Özeti ve Bir Sonraki Adım

Dostlar, tebrikler! Bu bölümde atölyemizdeki en sık kullanılan makinelerden bazılarını daha öğrendiniz. Artık kategorik verileri saymak, grupları birbiriyle yan yana veya yığılmış olarak karşılaştırmak ve grupların dağılımlarını kutu ve keman grafikleriyle derinlemesine incelemek için elinizde çok güçlü aletler var.

Bu makinelerin ortak bir noktası vardı: Hepsi, genellikle birbirinden bağımsız kategorileri veya grupları karşılaştırıyordu. Bu, bir durumun “anlık fotoğrafını” çekmek için harikadır.

Peki ya bizim hikayemiz, farklı grupları karşılaştırmak değil de, tek bir şeyin zaman içindeki yolculuğunu, inişlerini ve çıkışlarını anlatmak üzerine kuruluysa? Örneğin, bir şehrin yıllık sıcaklık ortalamasının değişimi veya bir ekonomik göstergenin aylar içindeki seyri gibi…

İşte bu tür hikayeleri anlatmak için farklı bir alete ihtiyacımız var. O anlık fotoğrafları birleştirip, bir “zaman tüneli” yaratan, trendleri ve yolculukları görünür kılan bir alete.

Bir sonraki durağımız, “Bölüm 4.4: Trendleri ve Zamanı Görselleştirme” olacak. Bu yeni bölümde, ggplot2 atölyesindeki bu özel makineyi, yani geom_line (çizgi grafiği)’ni ve onun en yakın akrabası olan geom_area (alan grafiği)’nı tanıyacağız. Verinin zaman içindeki serüvenini bir çizgiyle nasıl takip edeceğimizi ve bu yolculuğun ardındaki ana trendleri nasıl keşfedeceğimizi öğreneceğiz.

Atölyenin zaman makinesini çalıştırmaya hazır olun, macera devam ediyor! Lütfen takipte kalın.