Merhaba dostlar!

Bir önceki “teknik mola”mızda, bir veri setinin ruhunu anlamak için kullandığımız temel istatistiksel kavramları (ortalama, medyan, standart sapma, çarpıklık, basıklık) hatırladık. Bu kavramlar, verinin karakter haritasını çıkarmak için kullandığımız en temel araçlardı. Bize verinin kalbinin nerede attığını, ne kadar dağınık olduğunu ve kişiliğinin (şeklinin) nasıl olduğunu fısıldadılar.

Ancak, Claus Wilke’nin (2019) de vurguladığı gibi, bir dağılımı anlamak, verinin hikayesini anlamanın ilk ve en önemli adımıdır ve bazen bu hikayeyi en iyi anlatan şey rakamlar değil, görsellerdir.

İşte bu bölümde, o teorik bilgileri ve istatistiksel ölçüleri alıp, onları herkesin bir bakışta anlayabileceği, canlı ve konuşan grafiklere dönüştüreceğiz. Atölyemizdeki en hassas ölçüm cihazlarını, yani ggplot2’nin dağılım geometrilerini kullanarak, verinin bize fısıldadığı o sırları duymaya ve görmeye tamamen hazır olacağız.

Bu yolculukta kullanacağımız alet çantamız oldukça zengin:

Hazırsanız, bu güçlü aletlerle verinin ruhuna yapacağımız bu derin ve görsel yolculuğa başlayalım!

library(tidyverse)
# Bu bölümde, DALEX paketinden gelen meşhur titanic veri setini kullanacağız.
# Eğer yüklü değilse: install.packages("DALEX")
library(DALEX)

1. Klasik Yöntem: Veriyi Kutulara Ayırmak (geom_histogram)

Amaç: Sürekli bir değişkeni (örneğin, yaş) eşit aralıklara bölerek, her bir aralığa kaç gözlemin düştüğünü saymak. Bu, verinin en yoğun ve en seyrek olduğu bölgeleri bir bakışta görmemizi sağlar.

ggplot(data = titanic, mapping = aes(x = age)) +
  geom_histogram(binwidth = 5, fill = "steelblue", color = "white") +
  labs(
    title = "Titanic Yolcularinin Yas Dagilimi",
    x = "Yas",
    y = "Yolcu Sayisi (Frekans)"
  )
Titanic Yolcularinin Yas Dagilimi (Histogram)

Titanic Yolcularinin Yas Dagilimi (Histogram)

Ustalık Tartışması: binwidth’in (Kutu Genişliği) Kritik Önemi

Bir histogramın anlattığı hikaye, seçtiğiniz kutu genişliğine (binwidth) derinden bağlıdır. Çok dar bir aralık, verideki her küçük “gürültüyü” bir tepe gibi göstererek ana deseni görmemizi engeller. Çok geniş bir aralık ise önemli detayları “yutarak” hikayeyi aşırı basitleştirir.

Doğru binwidth’i bulmak, bir sanat ve bilim karışımıdır. Gelin, aynı verinin farklı binwidth değerleriyle nasıl farklı hikayeler anlattığını görelim.

library(patchwork)

# Ortak tema ayarlarımızı bir değişkene atayalım ki tekrar yazmak zorunda kalmayalım
ortak_tema <- theme(
  plot.title = element_text(size = 7),       # Ana başlık boyutu
  axis.title.x = element_text(size = 7),      # X ekseni başlığının boyutu
  axis.title.y = element_text(size = 7)       # Y ekseni başlığının boyutu
)

p1 <- ggplot(titanic, aes(x=age)) + 
      geom_histogram(binwidth=1) + 
      ggtitle("Binwidth = 1 (Cok Detayli)") +
      labs(x="Yas", y="Sayi") + # Eksen etiketlerini ekleyelim
      ortak_tema # Ortak tema ayarlarımızı uygulayalım

p2 <- ggplot(titanic, aes(x=age)) + 
      geom_histogram(binwidth=5) + 
      ggtitle("Binwidth = 5 (Dengeli)") +
      labs(x="Yas", y="Sayi") +
      ortak_tema

p3 <- ggplot(titanic, aes(x=age)) + 
      geom_histogram(binwidth=20) + 
      ggtitle("Binwidth = 20 (Cok Genel)") +
      labs(x="Yas", y="Sayi") +
      ortak_tema

(p1 | p2 | p3)
Farkli Kutu Genisliklerinin Dagilim Uzerindeki Etkisi

Farkli Kutu Genisliklerinin Dagilim Uzerindeki Etkisi

Gördüğünüz gibi, binwidth = 5 bize en dengeli hikayeyi anlatıyor: yolcuların çoğunluğunun genç yetişkinler olduğunu, çok az sayıda yaşlı bulunduğunu net bir şekilde görebiliyoruz.

2. Pürüzsüz Alternatif: Yoğunluk Grafiği (geom_density)

Amaç: Histogramın “köşeli” yapısını, pürüzsüz bir eğri ile göstererek dağılımın genel şeklini daha akıcı bir şekilde ortaya çıkarmak.

ggplot(data = titanic, mapping = aes(x = age)) +
  geom_density(fill = "skyblue", alpha = 0.7) + # alpha ile şeffaflık katıyoruz
  labs(
    title = "Titanic Yolcularinin Yas Yogunluk Grafigi",
    x = "Yas",
    y = "Yogunluk"
  )
Titanic Yolcularinin Yas Yogunluk Grafigi

Titanic Yolcularinin Yas Yogunluk Grafigi

Kritik Uyarı: Olmayan Yerde Veri Yaratma Riski

Yoğunluk grafikleri harikadır, ancak bir dezavantajları vardır. Doğaları gereği, verinin olmadığı yerlerde bile (örneğin, Titanic’te negatif yaşta yolcular olmamasına rağmen) bir yoğunluk varmış gibi gösterebilirler. Grafiğimizin sol tarafta sıfırın altına hafifçe sarktığını görebilirsiniz.

Ustanın Notu: Bir yoğunluk grafiğini yorumlarken, her zaman verinizin mantıksal sınırlarını aklınızda tutun ve grafiğin bu sınırların dışına taştığı yerleri “aletin bir özelliği” olarak kabul edin.

Ara özet

Dostlar, bu bölümde dağılımları anlamak için en temel iki aracımızı, geom_histogram ve geom_density’yi tanıdık. En önemlisi, bu araçları kullanırken bir usta gibi düşünmeyi, binwidth gibi kritik ayarların anlattığımız hikayeyi nasıl şekillendirdiğini öğrendik.

Bir sonraki bölümde, bu temel üzerine inşa ederek, birden fazla grubun dağılımını nasıl karşılaştıracağımızı ve boxplot, violin plot, raincloud plot gibi daha modern ve daha zengin görselleştirme makinelerini nasıl kullanacağımızı keşfedeceğiz.

3. Grupların Dağılımlarını Karşılaştırma

Şimdiye kadar tek bir grubun dağılımını inceledik. Peki ya “Kadın ve erkek yolcuların yaş dağılımları birbirinden farklı mı?” gibi bir soruyu cevaplamak isteseydik? Bunun için, atölyedeki aletlerimizi gruplar üzerinde kullanmamız gerekir.

Kötü Yöntem: Yığılmış Histogram (position = "stack")

İlk akla gelen yöntemlerden biri yığılmış histogramdır. Ancak bu yöntem, genellikle kötü bir fikirdir.

ggplot(titanic, aes(x = age, fill = gender)) +
  geom_histogram(binwidth = 5, position = "stack", color = "white") + 
  # Çubuklar arasına beyaz çizgi ekledim
  scale_fill_discrete(
    name = "Cinsiyet", # Lejant başlığını buradan da kontrol edebiliriz
    labels = c("Kadin", "Erkek") # ÖNEMLİ: Orijinal etiketlerin sırasına göre ('female', 'male')
  ) +
  labs(
    x = "Yas",
    y = "Yolcu Sayisi",
    title = "Cinsiyete Gore Yas Dagilimi (Yigilmis)",
    subtitle = "Bu grafik turu karsilastirma icin yaniltici olabilir."
  )
Yigilmis Histogram: Karsilastirma Neden Zor?

Yigilmis Histogram: Karsilastirma Neden Zor?

Gördüğünüz gibi, alttaki grubun (bu durumda ‘erkek’) dağılımını yorumlamak kolayken, onun üzerinde “yüzen” ‘kadin’ grubunun gerçek dağılım şeklini anlamak neredeyse imkansızdır. Çünkü başlangıç noktaları sabit değildir. Bu nedenle, dağılımları karşılaştırmak için yığılmış histogramlardan kaçınırız.

İyi Yöntem: Şeffaf Yoğunluk Grafikleri (alpha)

İki (veya birkaç) grubun dağılımını karşılaştırmak için en estetik ve en etkili yöntemlerden biri, geom_density’nin alpha (şeffaflık) özelliğini kullanmaktır.

ggplot(titanic, aes(x = age, fill = gender)) +
  geom_density(alpha = 0.5) + # alpha=0.5 ile %50 şeffaflık veriyoruz
  scale_fill_discrete(
  name = "Cinsiyet",
  labels = c("Kadin", "Erkek")
  ) +
  labs(
  title = "Cinsiyete Gore Yas Dagilimlarinin Karsilastirilmasi",
  x = "Yas",
  y = "Yogunluk"
  )
Seffaf Yogunluk Grafikleri: Grupları Karsilastirmanin Uygun Yolu

Seffaf Yogunluk Grafikleri: Grupları Karsilastirmanin Uygun Yolu

İşte bu kadar net! Şeffaflık sayesinde, her iki grubun dağılım eğrisini de baştan sona görebiliyoruz. Bu grafik bize çok katmanlı bir hikaye anlatıyor:

-Ana Hikaye: Hem kadınların (pembe) hem de erkeklerin (turkuaz) yaş dağılımı, en yoğun noktasını 20-30 yaş aralığında buluyor. Bu, yolcuların çoğunluğunun genç yetişkinlerden oluştuğunu teyit eder.

-Gizli Detay: Ancak grafiğin en soluna, 0-10 yaş aralığına dikkatle baktığımızda, bu sefer kadın yolculara ait pembe eğride ikinci, daha küçük ama belirgin bir tepe olduğunu görüyoruz. Erkek yolculara ait turkuaz eğride ise bu tepe o kadar belirgin değil. Bu, bize Titanic’teki küçük kız çocuklarının sayısının, küçük erkek çocuklarına göre oransal olarak daha fazla olduğunu fısıldayan çok önemli bir içgörüdür.

Ara Özet ve Bir Sonraki Adım

Dostlar, dağılımları görselleştirmenin en klasik iki yolu olan histogram ve yoğunluk grafiklerini ve bunları gruplar üzerinde nasıl etkili bir şekilde kullanacağımızı öğrendik.

Ancak bu grafikler bize dağılımın “şekli” hakkında harika bilgiler verirken, medyan, çeyreklikler, aykırı değerler gibi spesifik istatistiksel özetleri doğrudan göstermezler.

Bir sonraki adımda, atölyedeki daha modern ve istatistiksel olarak daha zengin makineleri tanıyacağız: Kutu Grafikleri (geom_boxplot), Keman Grafikleri (geom_violin) ve bu ikisinin gücünü birleştiren Yağmur Bulutu Grafikleri (Raincloud Plots). Bu aletler, dağılımın hem şeklini hem de istatistiksel özetini aynı anda görmemizi sağlayacak.

4. Modern Dağılım Grafikleri: Özet ve Şekil Bir Arada

Histogramlar bize yoğunluğu gösterir, ama bir bakışta “bu verinin ortası neresi?” veya “aykırı değerler var mı?” gibi sorulara net cevap vermez. Şimdi, bu soruları cevaplamak için tasarlanmış daha modern ve istatistiksel olarak daha zengin makineleri tanıyacağız.

a) geom_boxplot (Kutu-Bıyık Grafiği): Beş Sayılık Özet

Amaç: Bir veri setinin temel istatistiksel özetini (“Beş Sayı Özeti”: minimum, ilk çeyrek, medyan, üçüncü çeyrek, maksimum) ve aykırı değerlerini tek bir bakışta görmek.

ggplot(data = titanic, mapping = aes(y = age)) +
  geom_boxplot() +
  # Tek bir değişkenin dağılımına bakarken x eksenine gerek olmadığı için kaldıralım.
  theme(axis.text.x = element_blank(),
        axis.ticks.x = element_blank()) +
  labs(title = "Yolcularin Genel Yas Dagilimi", y = "Yas")
Titanic Yolcularinin Yas Dagilimi (Kutu Grafigi)

Titanic Yolcularinin Yas Dagilimi (Kutu Grafigi)

Kutu Grafiğini Okuma Sanatı:

  • Kutunun ortasındaki kalın çizgi, verinin medyanını (tam orta noktası) gösterir.
  • Kutunun alt ve üst kenarları, verinin ilk (%25) ve üçüncü (%75) çeyrekliklerini gösterir. Kutunun boyu, verinin en yoğun olduğu orta %50’lik kısmın yayılımını (IQR) temsil eder.
  • “Bıyıklar” (whiskers), aykırı olmayan en uzak veri noktalarına kadar uzanır.
  • Bıyıkların dışındaki tekil noktalar, olası aykırı değerlerdir (outliers).

Şimdi bu aletin asıl gücünü, grupları karşılaştırmak için kullanalım.

ggplot(data = titanic, mapping = aes(x = class, y = age, fill = class)) +
  geom_boxplot() +
  theme(legend.position = "none") +
  labs(title = "Yolcu Siniflarina Gore Yas Dagilimi", x = "Yolcu Sinifi", y = "Yas") +
  coord_flip() # Eksenleri çevirerek okunabilirliği artıralım
Yolcu Siniflarina Gore Yas Dagilimi (Kutu Grafigi)

Yolcu Siniflarina Gore Yas Dagilimi (Kutu Grafigi)

Grafiğin Yorumu:

  • Merkezi Eğilim: Birinci sınıf (1st) yolcuların medyan yaşının, diğer tüm gruplardan belirgin şekilde daha yüksek olduğunu görebiliyoruz.

  • Yayılım: Yaş yayılımının en dar olduğu grup, yani yaşları birbirine en yakın olanlar, restaurant staff (restoran personeli) gibi görünüyor. Bu, bu gruptaki kişilerin benzer bir yaş profilinde olduğunu düşündürür.

  • En İlginç Hikaye: En ilginç hikaye üçüncü sınıfta (3rd) saklı. Bu grubun medyan yaşı oldukça genç. Fakat grafiğin bütününe baktığımızda, özellikle yukarıya doğru uzanan çok sayıda aykırı değer (siyah noktalar) görüyoruz. Bu durum, üçüncü sınıfın aslında çok daha çeşitli bir yaş yapısına sahip olduğunu ve bu grupta, “tipik” yaş aralığının dışında, beklenenden daha yaşlı birçok yolcunun da bulunduğunu kanıtlıyor.

Peki bu aykırı değerler, sadece rastgele uç noktalar mı, yoksa verinin içinde göremediğimiz ikinci bir yoğunlaşma noktasının habercisi mi? İşte kutu grafiği, bize bu sorunun tam cevabını veremez.

Merak etmeyin dostlar, bu gizemi birazdan, atölyemizdeki daha modern bir alet olan Yağmur Bulutu Grafiği (Raincloud Plot) ile aydınlatacağız. O grafik, bu dağılımın gerçek “şeklini” bize çok daha net bir şekilde gösterecek.

b) geom_violin (Keman Grafiği): Dağılımın Gerçek Şeklini Görmek

Amaç: Kutu grafiğinin göremediği, verinin yoğunluk “şeklini” ve çok modlu (multimodal) yapısını göstermek.

# İki grafiği yan yana görmek için patchwork paketini kullanalım
library(patchwork)

p_box <- ggplot(titanic, aes(x = class, y = age, fill = class)) +
  geom_boxplot() + 
  coord_flip() + # Eksenleri ters yüz ediyoruz!
  theme(legend.position = "none") +
  labs(title = "Kutu Grafigi", x = "Yolcu Sinifi") # x eksenine bir isim verelim

p_violin <- ggplot(titanic, aes(x = class, y = age, fill = class)) +
  geom_violin() + 
  coord_flip() + # Eksenleri burada da ters yüz ediyoruz!
  theme(legend.position = "none") +
  labs(title = "Keman Grafigi", x = "Yolcu Sinifi")

p_box + p_violin
Kutu ve Keman Grafiginin Karsilastirilmasi

Kutu ve Keman Grafiginin Karsilastirilmasi

Grafikleri Birlikte Okuma Sanatı:

Bu iki grafiğe baktığımızda, her ikisi de bize aynı temel hikayeyi anlatıyor ama farklı detaylar sunuyorlar.

  • Kutu Grafiğinin Anlattığı: Sol taraftaki Kutu Grafiği, bize her grubun istatistiksel bir özetini sunar. Bir bakışta, 1. sınıf yolcuların medyan yaşının (~38 yaş) diğer tüm gruplardan daha yüksek olduğunu net bir şekilde görebiliriz. 3. sınıf yolcuların ise medyan yaşının (~24 yaş) en düşük olduğunu ve bu grupta çok sayıda aykırı değer (dışarıdaki noktalar) bulunduğunu fark ederiz. Mürettebat grupları ise genellikle 25-40 yaş aralığında yoğunlaşmış. Kutu grafiği, bu tür özetleri ve aykırı değerleri tespit etmek için harikadır.

  • Keman Grafiğinin Fısıldadığı Sırlar: Sağ taraftaki Keman Grafiği ise, bu özetin ötesine geçerek bize dağılımın “şeklini” gösterir. Kemanın genişliği, o noktadaki veri yoğunluğunu temsil eder.

    • 3. Sınıf: Kutu grafiğinde göremediğimiz bir detayı fark ederiz: 3. sınıftaki yoğunluk, sadece gençlerde değil, aynı zamanda bebek/küçük çocuk yaşlarında da (0-5 yaş) küçük bir “şişkinlik” yapıyor. Bu, bu sınıfta çok sayıda genç ailenin seyahat ettiğinin bir işareti olabilir.

    • Mürettebat: Örneğin, “engineering crew” (mühendislik) ve “deck crew” (güverte) gruplarının kemanları, verinin tek bir tepe noktasında (unimodal) toplandığını gösterirken, “victualling crew” (tedarik) grubunun kemanı daha yayvan ve neredeyse iki tepe noktalı bir yapıya sahiptir. Bu, bu grupta hem çok genç hem de daha deneyimli çalışanların bir arada olduğunu fısıldar.

Ustanın Kararı: Kutu grafiği, hızlı bir özet ve aykırı değer tespiti için mükemmeldir. Keman grafiği ise, dağılımın şekli ve içindeki gizli kümeler hakkında daha derin bir hikaye anlatır. En güçlü yaklaşım ise, genellikle ikisini bir arada düşünmektir. Tıpkı bizim az sonra tanıyacağımız “Yağmur Bulutu Grafiği”nin yaptığı gibi!

c) geom_raincloud (Yağmur Bulutu Grafiği): Gizemi Çözme Zamanı!

Dostlar, hatırlarsanız Kutu Grafiğini incelerken aklımızda bir soru kalmıştı:

“Üçüncü sınıftaki (3rd) o çok sayıdaki ‘aykırı’ olarak görünen yaşlı yolcular, sadece rastgele uç noktalar mı, yoksa verinin içinde göremediğimiz ikinci bir yoğunlaşma noktasının habercisi mi?”

Kutu grafiği bize bu gizemin varlığını fısıldamıştı. Şimdi, atölyemizdeki en modern aletlerden birini kullanarak bu gizemi tamamen aydınlatma ve hikayenin tüm parçalarını bir araya getirme zamanı.

Felsefe: “Neden birini seçmek zorundayız ki? Hepsini bir arada görelim!”

Yağmur bulutu grafiği, son yılların en popüler yaklaşımlarından biridir. Genellikle üç katmanı birleştirir:

  1. Bulut: geom_density ile dağılımın pürüzsüz şekli.
  2. Yağmur: geom_jitter ile her bir veri noktasının kendisi.
  3. Toprak: geom_boxplot ile istatistiksel özet.

Bu grafiği oluşturmak için ggdist paketini kullanacağız (eğer yüklü değilse install.packages("ggdist") ile kurun).

library(ggdist)

ggplot(titanic, aes(x = class, y = age, fill = class)) +
  # Dağılımın yarısını (bulut) çizelim
  stat_halfeye(
    adjust = 0.5,
    justification = -0.2,
    .width = 0,
    point_colour = NA
  ) +
  geom_boxplot(
    width = 0.12,
    outlier.color = NA, # Aykırı değerleri noktalarla göstereceğimiz için kutudan kaldıralım
    alpha = 0.5
  ) +
  # Ham veri noktalarını (yağmur) ekleyelim
  stat_dots(
    side = "left",
    justification = 1.1,
    binwidth = 0.25
  ) +
  theme(legend.position = "none") +
  labs(
    title = "Yolcu Siniflarina Gore Yas Dagilimi (Yagmur Bulutu)",
    x = "Yolcu Sinifi",
    y = "Yas"
  ) +
  coord_flip()
Yagmur Bulutu Grafigi: En Kapsamli Dagilim Gorseli

Yagmur Bulutu Grafigi: En Kapsamli Dagilim Gorseli

İşte Gizem Çözüldü! Grafiğin Anatomisi

Bu grafik, sadece sayılardan ibaret değil; içinde insan hikayeleri barındıran, adeta geminin sosyolojik bir portresidir. Gelin bu hikayeyi birlikte okuyalım.

Yolcu Sınıfları: Sosyo-Ekonomik Bir Hiyerarşi

  • 1. Sınıf (1st Class):

    • Gözlem: En geniş yaş aralığına sahip grup. Dağılım, 30-40 yaş aralığında bir zirve yapsa da, “yağmur damlaları” sayesinde hem küçük çocukların hem de 70’li yaşlardaki yolcuların varlığını net bir şekilde görüyoruz.
    • Hikaye: Bu, 1. sınıfın sadece zengin iş insanlarını değil, aynı zamanda çocuklarıyla seyahat eden köklü aileleri ve emekliliğini geçiren yaşlı aristokratları da barındırdığını gösterir. En yüksek medyan yaş (kutu özetindeki orta çizgi) buradadır.
  • 2. Sınıf (2nd Class):

    • Gözlem: 1. sınıfa göre daha dar ve daha genç bir dağılım. Yoğunluk, 25-35 yaş aralığında toplanmış. Çocuklar var ama yaşlı yolcular daha az.
    • Hikaye: Bu, orta sınıf profesyonelleri, öğretmenleri ve tüccarları temsil eden bir profil çizer. Tam bir “ara sınıf” portresi.
  • 3. Sınıf (3rd Class):

    • Gözlem: Dağılım, belirgin bir şekilde genç yaşlara yığılmış. Grafikteki en yoğun “yağmur” (en çok nokta) bu grupta. “Bulut”un en şişkin olduğu yer 20-25 yaş arası.
    • Hikaye: Bu, yeni bir hayata başlamak için yolculuk eden genç göçmenlerin, bekar işçilerin ve genç ailelerin hikayesidir. En düşük medyan yaş ve en kalabalık grup buradadır.

Mürettebat: Bir İş Organizasyonunun Anatomisi

  • Mühendislik ve Güverte Ekipleri (Engineering & Deck Crew):

    • Gözlem: Her ikisi de tipik “çalışma çağı” olan 25-45 yaş aralığında yoğunlaşmış.
    • Hikaye: Bunlar, geminin makine dairesini ve güvertesini işleten, fiziksel güç ve teknik bilgi gerektiren işlerdeki profesyonellerdir.
  • Restoran ve Tedarik Personeli (Restaurant Staff & Victualling Crew):

    • Gözlem: Mürettebat içindeki en genç gruplar. Özellikle restoran personelinin yaş dağılımı çok dar ve genç bir aralıkta.
    • Hikaye: Bunlar, yolculara doğrudan hizmet veren, genellikle daha genç ve dinamik personelin oluşturduğu ekiplerdir.

Ustalık Sorusu: 3. Sınıftaki Yaşlı Yolcuların Sırrı Nedir?

Dostlar, şimdi bu harika yağmur bulutu grafiğine bir dedektif gibi bakalım. Gözümüzü özellikle 3. Sınıf (3rd) yolcuların olduğu sıraya çevirelim.

Grafik bize bu grubun medyan yaşının oldukça genç (~24 yaş) olduğunu ve yoğunluğun (bulutun en şişkin olduğu yer) 20-30 yaş arasında toplandığını net bir şekilde gösteriyor. Ancak, bıyıkların çok ötesinde, sağ tarafa doğru saçılmış bir sürü “yağmur damlası”, yani 60 yaş ve üzeri yolcular görüyoruz.

İşte bir veri kaşifinin sorması gereken o can alıcı soru:

“Bu aykırı görünen yaşlı yolcular, sadece istisnai durumlar mı, yoksa grafiğin bize tam olarak gösteremediği, 3. sınıfta aslında ikinci bir ‘yaşlı yolcu’ kümesi olduğunun habercisi mi?”

Cevabı Grafikte Arıyoruz:

Bu sorunun cevabını bulmak için yağmur bulutunun üç katmanını da birlikte okumalıyız:

  1. Yağmur Damlaları (Noktalar): Evet, 60 yaş üstünde epey bir nokta var. Bu, bu yaş grubunda yolcuların var olduğunu teyit ediyor.

  2. Kutu Özeti (Box Plot): Bu noktaların tamamı, kutu grafiğinin bıyığının dışında kaldığı için istatistiksel olarak “aykırı değer” olarak sınıflandırılmış.

  3. Bulut (Yoğunluk Eğrisi): İşte en önemli ipucu burada! Eğer bu yaşlı yolcular ikinci bir yoğun küme oluştursaydı, yoğunluk eğrisinin (yeşil bulutun) 60 yaş civarında tekrar şişkinleşmesi, ikinci bir tepe yapması gerekirdi. Ancak grafiğe baktığımızda, bulutun 40 yaşından sonra hızla inceldiğini ve sağa doğru sadece ince bir “kuyruk” olarak uzandığını görüyoruz.

Ustanın Yorumu:

Bu üç ipucunu birleştirdiğimizde şu sonuca varabiliriz: Grafik, 3. sınıftaki yaşlı yolcuların, ikincil bir yoğunlaşma noktasından ziyade, ana genç nüfus grubunun dışında kalan istisnai ve rastgele uç noktalar olduğunu kuvvetle düşündürüyor. Yani, 3. sınıftaki yolcuların ezici çoğunluğu gençti ve aralarında az sayıda, istatistiksel olarak aykırı kabul edilen yaşlı birey bulunuyordu.

İşte dostlar, bir yağmur bulutu grafiği bize sadece özetleri değil, aynı zamanda bu tür derin ve nüanslı hikayeleri okuma ve yorumlama gücü de verir.

5. Zaman İçinde Dağılımların Değişimi: Ridgeline Grafikleri

Şimdiye kadar, bir veya daha fazla grubun dağılımının “anlık fotoğrafını” çektik. Peki ya bir dağılımın, zaman veya başka bir sıralı kategori boyunca nasıl değiştiğini, evrildiğini göstermek isteseydik?

Onlarca yoğunluk grafiğini üst üste bindirmek yerine, ggridges paketi bize Ridgeline Grafiği adında harika bir çözüm sunar. Bu grafik, birden fazla yoğunluk grafiğini, hafifçe üst üste gelecek şekilde, bir “sıra dağlar” gibi dizer ve karşılaştırmayı inanılmaz derecede kolay ve estetik hale getirir.

Amaç: Yıllara göre Amerika’daki yeni doğan bebeklere verilen isimlerin popülerliğinin dağılımını incelemek.

Bunun için babynames paketini kullanacağız (eğer yüklü değilse install.packages("babynames") ile kurun). Bu veri seti, 1880’den günümüze ABD’deki bebek isimlerinin yıllık popülerliğini içerir.

library(ggridges)
library(babynames)

# Sadece 'Mary' isminin verisini alalım ve 10 yıllık periyotlar oluşturalım
mary_data <- babynames %>%
  filter(name == "Mary", sex == "F") %>%
  mutate(decade = floor(year / 10) * 10)

ggplot(mary_data, aes(x = prop * 100, y = factor(decade, levels = sort(unique(decade), 
                                      decreasing = TRUE)), fill = factor(decade))) +
  geom_density_ridges() +
  theme_minimal() +
  theme(legend.position = "none") +
  labs(
    title = "'Mary' Isminin Populerliginin Zaman Icindeki Degisimi",
    x = "Tum Kadin Isimleri Icindeki Orani (%)",
    y = "On Yillik Periyotlar"
  )
Yillara Göre 'Mary' Isminin Populerlik Dagilim

Yillara Göre ‘Mary’ Isminin Populerlik Dagilim

Grafiğin Yorumu: Bir İsmin Kültürel Yolculuğu

Bu harika “sıra dağlar” grafiği, bize sadece rakamları değil, aynı zamanda “Mary” isminin Amerikan kültüründeki yaklaşık 130 yıllık inanılmaz yolculuğunu, zirveye çıkışını ve gözden düşüşünü adeta bir film şeridi gibi anlatıyor.

Sonuç: Bu ridgeline grafiği, bize sadece bir ismin popülerlik oranını göstermekle kalmıyor. Aynı zamanda, kültürel trendlerin, toplumsal tercihlerin ve hatta jenerasyonlar arası zevk farklılıklarının zaman içinde nasıl değişebileceğinin de güçlü bir görsel özetini sunuyor. Bu, tek bir ismin biyografisi, bir dönemin kültürel parmak izidir.

Yararlandığımız Kaynak

Bu bölümdeki konuların felsefesi ve anlatım yapısı oluşturulurken aşağıdaki değerli eserden ilham alınmıştır.

Wilke, C. O. (2019). Fundamentals of Data Visualization. O’Reilly Media. https://clauswilke.com/dataviz/

Bölümün Özeti: Verinin Ruhuna Yolculuk Tamamlandı

Dostlar, tebrikler! Bu bölümde, bir veri bilimcinin en önemli görevlerinden birini, yani verinin “karakter haritasını” çıkarmayı başardık. Artık bir veri setine baktığınızda, onun sadece rakamlardan ibaret olmadığını, içinde zengin bir hikaye barındıran canlı bir yapı olduğunu biliyorsunuz.

Bu yolculukta atölyemizdeki en hassas ölçüm cihazlarını kullandık:

Artık elinizdeki verinin sadece özetini değil, aynı zamanda şeklini, ruhunu ve hatta zaman içindeki yolculuğunu bile bir tuvale dökebilirsiniz. Bu, sizi veriyi sadece “analiz eden” birinden, onu “anlayan” ve “anlatan” birine dönüştüren kritik bir adımdır.

Bir Sonraki Adım: Sanat Eserini Sergilemeye Hazırlamak

Şimdiye kadar harika heykeller yonttuk, verinin en güzel formunu ortaya çıkardık. Ama bir sanat eseri, doğru ışık altında, doğru bir kaide üzerinde ve doğru bir etiketle sergilendiğinde gerçek değerini bulur.

İşte bir sonraki bölümde tam olarak bunu yapacağız. Bu anlattığımız hikayeleri daha da güzelleştirip, onları sunuma hazır, profesyonel birer sanat eserine dönüştüreceğiz. Grafiklere başlıklar ekleme (labs), renk paletlerini yönetme (scale_...) ve temalarla (theme) grafiğin her bir detayına hükmetme gibi “cila” ve “vernik” tekniklerini keşfedeceğiz.

Atölyenin en keyifli ve en yaratıcı kısmı şimdi başlıyor! Lütfen takipte kalın dostlar.