Ben bu derse gelememiştim. Kitaptan adım adım takip ederek tekrar ettim. Sınavda ggplot ile ilgili soru soracağınızı belirttiğiniz için özellikle o bölümü daha iyi kavrayabilemek için uğraştım. ggplot fonksiyonu ile grafik çizmek gerçekten hoşuma gitti. Yaptığımız analizi görselleştirmeyi sevdim, yani yazdığım kodla somut bir şey elde etmiş gibi olduğu için keyif aldım çalışırken diyebilirim.
load("D:/OLC_731/rpubs/Hafta_08/data/PISA_COG_2018.rda")
load("D:/OLC_731/rpubs/Hafta_08/data/PISA_OGR_2018.rda")
load("D:/OLC_731/rpubs/Hafta_08/data/PISA_SCH_2018.rda")load("D:/OLC_731/rpubs/Hafta_08/data/miniPISA.rda")
load("D:/OLC_731/rpubs/Hafta_08/data/midiPISA.rda")Veri setlerini düzenlerken en sık kullanılan veri setleri kitabın kapsamına dahil edilmiş.
min() ve max() fonksiyonları, bir veri kümesindeki en küçük ve en büyük değeri bulmada kullanılır. Yani bir veri setindeki en uç değerleri gösterir.
## [1] 166.622
## [1] 729.878
range() fonksiyonu, doğrudan minimum ve maksimum değerleri(bu sırayla) verir.
midiPISA$ODOKUMA2 <- as.numeric(midiPISA$ODOKUMA2)
minimum <- range(midiPISA$ODOKUMA2, na.rm = TRUE)[1]
minimum## [1] 166.622
## [1] 729.878
Ortalama mean() fonksiyonu ile hesaplanır. En sık kullanılan merkezi eğilim ölçüsüdür ancak uç değerlerden etkilenir. Veri setinde eksik veriler bulunduğunda na.rm = TRUE kullanılarak analizden hariç tutulabilir.
## [1] 464.4204
Veri kümesi sıralandıktan sonra ortada kalan değeri medyan gösterir. Medyan median(), veri kümesindeki aşırı uç değerlerden çok az etkilenir ve veri kümesinin merkezi eğilimini ortalamaya göre daha doğru bir şekilde gösterir.
## [1] 465.9175
Bir veri kümesinin belirli yüzdelik dilimlerini (quantiles) hesaplamak için kullanılır. Quantiles, verileri belirli bir oranda bölen değerlerdir ve genellikle verinin dağılımını anlamak için kullanılır.
## 25%
## 403.4538
## 75%
## 525.3202
Veri kümesinin merkezi eğilimi ve yayılımı hakkında bilgi edinmek için önemlidir.
Standart sapma sd(), bir veri kümesindeki değerlerin ortalama etrafında ne kadar yayılma gösterdiğini ölçer. Varyans var(), veri kümesindeki değerlerin ortalama etrafında ne kadar dağıldığını gösteren bir ölçüdür. Standart sapma ile aynı bilgiyi sağlar, ancak birim olarak daha farklıdır.
## [1] 87.696
## [1] 7690.589
summary() fonksiyonu betimleyici istatistikleri özetler.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 166.6 403.5 465.9 464.4 525.3 729.9
Bu tanımlayıcı istatistikleri gruba göre hesaplamak istenirse by() fonksiyonu kullanıılır.
## midiPISA$SINIF: 7
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 252.6 263.5 274.3 302.6 327.6 380.9
## ------------------------------------------------------------
## midiPISA$SINIF: 8
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 234.2 324.7 364.5 364.1 385.2 512.4
## ------------------------------------------------------------
## midiPISA$SINIF: 9
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 166.6 360.5 430.0 438.2 511.2 722.4
## ------------------------------------------------------------
## midiPISA$SINIF: 10
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 220.3 413.3 473.3 471.4 528.4 729.9
## ------------------------------------------------------------
## midiPISA$SINIF: 11
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 237.2 401.3 466.5 461.5 515.7 670.1
## ------------------------------------------------------------
## midiPISA$SINIF: 12
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 237.2 322.7 403.6 380.4 427.7 506.4
Daha açıklayıcı istatistiklere ihtiyaç varsa, psych paketindeki describe() fonksiyonu kullanılmalıdır.
library(psych)
describe(midiPISA %>%
select(SINIF,ODOKUMA2)) # özetleyici istatistiklerinin hesaplanmasıDeğişkenlik katsayısı, standart sapmanın ortalamaya oranıdır ve farklı birimler veya ölçeklerdeki veri setlerini karşılaştırmak için kullanılır. stat.desc() ile hesaplanır.
library(pastecs) # paketin aktifleştirilmesi
round(stat.desc(midiPISA %>%
select(SINIF,OKUMA_ZEVK)),2) # değişkenlik katsayısının hesaplanmasıMod, bir veri kümesindeki en sık rastlanan değeri gösterir. Bir değişkenin modunu bulmak için table() ve sort() fonksiyonları kullanarak hesaplanmalıdır.
##
## 0 1 2 3 4 5 6
## 263 1456 1708 669 530 889 1318
##
## 2 1 6 5 3 4 0
## 1708 1456 1318 889 669 530 263
Baba eğitim değişkenindeki en sık rastlanan değer 2’dir.
Frekans tablosu, veri setinin demografik özelliklerini kolay bir şekilde anlamamızı sağlar.
midiPISA %>%
group_by(Baba_Egitim) %>% # Baba_Egitim e göre gruplandırma
count() %>% # frekans tablosu oluşturma
ungroup() # gruplandırmanın kaldırılmasıBenzer şekilde, örneklemin ortalama başarısı (ve SD’sini) hesaplanmak istendiğinde dplyr/tidyverse paketindeki summarise() fonkisyonu kullanılabilir.
bilgi<-midiPISA %>%
summarise(ort = mean(ODOKUMA2), # ortalama
sd = sd(ODOKUMA2), # standart sapma
n = n()) # frekans hesaplama
bilgiR dilinde, betimleyici istatistikler veri kümesini anlayıp özetlemenin en temel yollarından biridir.
R dilinde veri görselleştirme için en popüler ve güçlü paketlerden birinin ggplot2() olduğunu öğrendim. Gerçekten karmaşık verileri görselleştirerek daha kolay anlaşılmasını sağlıyor. Hem estetik açıdan hoş hem de işlevsel grafiklerin oluşturulmasını sağlıyor. Bu nedenle ggplot2 paketine “Grammar of Graphics” (Grafik Dilinin Grameri) deniliyormuş.
Grafikler oluşturulurken, genellikle birden fazla değişkene ilişkin gözlemlerin yer aldığı veri setleri kullanılır. Grafik çizimlerinde grup değişkenlerine ihtiyaç duyulduğu için kategorik değişkenler as.factor() fonksiyonuyla kategorik hâle getirilmiştir. Ardından faktör değişkenlerine düzeyler atanmıştır.
library(tidyverse)
library(dplyr)
library(magrittr)
library(haven)
library(plotly)
load("data/PISA_OGR_2018.rda")
miniPISA <- PISA_OGR_2018 %>%
select(CINSIYET, SINIF,KITAPSAYISI, SES, Anne_Egitim, Baba_Egitim,Okuloncesi_yil,OKUL_TUR,OKUMA_ZEVK,
OK_YETERLIK,ODOKUMA1)
# kategorik değişkenlerin faktör olarak kaydı
miniPISA<- miniPISA %>% mutate_if(is.labelled, sjlabelled::as_factor)
# Faktör değiskenlere düzey atama amacıyla yazılan fonksiyon
levelsnames <- function(x){
levels(x) <- names(attr(x,"labels"))
x
}
# yazılan fonksiyonun faktör değişkenlere uygulanması
miniPISA <-mutate_if(miniPISA,is.factor, levelsnames)
head(miniPISA)ggplot paketi, birden çok değişkeni aynı grafik üzerinde göstermek ve veriler arasındaki çok düzeyli ilişkileri özetlemek amacıyla geliştirilmiştir. Bu bölümde yer alan tüm grafiklerin başlığı, x ve y eksenleri etiketleri, rengi vb. düzenlemeler yapılarak özelleştirilebilir. Katman mantığıyla çalıştıklarından metin ekleme, renklendirme, açıklama kutucukları vb. özelleştirmeler toplama işareti(+) ile kodlara eklenebilmektedir. ggplot2 paketinde yer alan temel fonksiyonlar; qplot() ve ggplot() fonksiyonlarıdır. qplot(), hızlı grafik (quick plot) çizimi anlamına gelmektedir. Bu fonksiyonların kullanımı;
Burada yer alan aes() argümanı her bir değişkenin alacağı rolü belirlemede kullanılır. aes() fonksiyonu değişkenleri sadece olduğu gibi değil özelleştirilmiş şekilde grafiğe dönüştürmeye olanak vermektedir. data argümanı ile veri setleri üzerinden grafiklerin çizimi yapılmaktadır. geom() fonksiyonu “ggplot2” paketinde çizilecek grafiğin türünü belirlemek amacıyla kullanılır. Örneğin yoğunluk grafiği çizilmek istendiğinde aşağıdaki iki kod kullanılabilir.
Yoğunluk grafiği, dağılımın şekli hakkında daha detaylı bilgi verir ve grafiğin tepe yaptığı noktalar x eksenindeki değerlerin en çok nerede yoğunlaştığını gösterir. Bu da veri setini anlamamızda bize yardımcı olur. Genellikle belli bir zamana göre yoğunluk grafiği çizdirilir fakat midiPISA veri setinde zamana ilişkin bir değişken olmadığından okuma olası değer 2’nin yoğunluk grafiği çizdirilmiştir.
ggplot(midiPISA, aes(x = ODOKUMA2)) +
geom_density(linetype="dashed", fill = "purple", alpha = 0.5) +
labs(title = "Okuma Puanlarının Yoğunluğu", x = "Okuma Puanları", y = "Yoğunluk")Veri kümesinin dağılımını görselleştirmek için histogramlar çok sık kullanılır. Özellikle de frekansları göstermek için etkilidir.
ggplot(midiPISA, aes(x = ODOKUMA2)) +
geom_histogram(binwidth = 50, fill = "lightblue", color = "red") +
labs(title = "Okuma Puanları Histogramı", x = "Okuma Puanları", y = "Frekans")En az aralık ölçeğindeki değişkenlerin frekans dağılımlarının betimlenmesinde kullanıldığından sütunlar arası boşluk içermemektedir. ggplot2 paketi katman mantığı ile çalışan bir paket olduğundan “+” işareti ile katmanlar birbirine eklenerek ayrıntılı grafikler oluşturulabilir. Aşağıda bununla ilgili örnekler verilmiştir:
grafik_1 <- ggplot(miniPISA, aes(x=ODOKUMA1))
grafik_1 +
geom_histogram() +
facet_wrap(~CINSIYET, ncol=2) # cinsiyet değişkenindeki faktörlerin sütunda yer alması ggplot(midiPISA, aes(x=ODOKUMA2)) +
geom_histogram()+ #histogram çizilmesi
facet_grid(Anne_Egitim~CINSIYET) # anne eğitim ve cinsiyete göre yüzey eklenmesiVeri seti görselleştirilirken kategorik değişkenlere göre gruplandırmanın verilerin anlaşılırlığını artırdığını söyleyebiliriz. Örneğin, grafikler oluşturulurken cinsiyet değişkeninin grup olarak belirlendiği durumda color() argümanı yardımıyla gruplar oluşturularak grafikler çizilebilir.
Örnek:
ggplot(
miniPISA %>%
group_by(Anne_Egitim,CINSIYET) %>%
mutate(ort=mean(ODOKUMA1)) %>%
ungroup(),
aes(x=Anne_Egitim, y=ort, color=CINSIYET )) +
geom_point() +
xlab("Sınıf Duzeyi")+
ylab("Ortalama Puan")Grafikler daha sonradan kullanılmak üzere kaydedilmek istendiğinde herhangi bir isim ile bir nesneye atanmalıdır. Örnekte oluşturulan saçılım grafiği “p1” nesnesine atanmıştır.
p1 <- ggplot(midiPISA, aes(x=Anne_Egitim, y=ODOKUMA2)) + # x ve y eksenlerini belirleme
geom_point() # saçılım grafiği çizme
p1Estetik, çizilmiş verinin görsel bir özelliğini ifade etmektedir. ggplot2 paketinin kullandığı estetik özellikler bulunmaktadır. Bunlar; color: nokta ve diğer şekillerin renklerini, fill: sekil içi doldurma rengini, size: noktaların büyüklüğünü, çizgilerin kalınlığı/inceliğini, alpha: saydamlık derecesini, linetype: kesikli çizgi tiplerini, labels: eksen veya grafik etiketlerini, shape: şekilleri görselleştirmede kullanılır. Bunlara bazı örnekler aşağıda gösterilmiştir:
ggplot(miniPISA, aes(CINSIYET, OKUMA_ZEVK)) +
geom_point(color = "green") # saçılım grafiğinin rengini seçmeggplot(miniPISA, aes(CINSIYET, OKUMA_ZEVK)) +
geom_point(color = "red",size=6, shape="k") # saçılım grafiğinin rengini, büyüklüğünü ve şeklini seçmeggplot(miniPISA, aes(SINIF, OKUMA_ZEVK, color = CINSIYET)) + # cinsiyete göre gruplandırma
geom_point() # saçılılm grafiği çizmeHer komut bir öncekine artı sembolü (+) ile eklenerek çok katmanlı bir çizim nesnesi oluşturulur. Grafiklerin katman katman oluşturulması, veriyi daha anlamlı ve açıklayıcı hale getirmeye imkan sağlıyor. Temel olarak ggplot() fonksiyonu ile başlanır ve geom katmanları ile histogram, saçılım, frekans gibi grafik türleri eklenir. Daha sonra ise eksen etiketleri, başlık, yazı tipleri, boyutlar, renk şemaları, şekiller gibi tasarımla ilgili parametreler çizime eklenir.
ggplot(miniPISA, aes(x = as.numeric(ODOKUMA1), y = as.numeric(OKUMA_ZEVK), color = as.factor(CINSIYET))) +
geom_point() +
labs(
title = "Okuma Puanları ve Okuma Zevki İlişkisi",
x = "Okuma Puanları",
y = "Okuma Zevk Puanları",
color = "Cinsiyet"
)Başta karışık gibi geldi ama yazdıkça daha iyi anlayabildim. Katmanlardan oluşmusa ve birbirine “+” işareti ile birçok özelliğin eklenebilmesi paketi oldukça kullanışlı hale getiriyor diyebilirim.
Grafiklerde alpha() parametresi ile şeffaflık düzeyini kontrol edebilmek, karmaşık ve yoğun veri setlerinde kullanışlı olabilmektedir. Bu parametre ile veri setimizi daha iyi görselleştirebiliyoruz.
geom_text() fonksiyonu ile metinler veri sembolü olarak grafiğe eklenebilir. Gösterim amacıyla veri setinin sadece ilk 10 satırı kullanılmıştır.
ggplot2 paketinde, **scale_*()** fonksiyonları çeşitli çizim estetiğinin ölçeklerini özelleştirmek için kullanılır. scale_*() fonksiyonları, grafiklerin görünümünde ince ayar yapmak ve iletmek istenilen bilgileri etkili bir şekilde iletmeyi sağlamak için esnek bir yol sağlar.
sekiller <- data.frame(sekil = 0:24)
ggplot(sekiller, aes(0, 0, shape = sekil)) +
geom_point(aes(shape = sekil), size = 5, fill = 'red') +
scale_shape_identity() +
facet_wrap(~sekil) +
theme_void()limits() argümanı ile sınırlar belirlenir. Örneğin x ekseninin minimum ve maksimum değerleri belirlenmek isteniyorsa aşağıdaki örnekteki gibi bu argüman kullanılır.
ggplot(miniPISA, aes(x = ODOKUMA1,y = OKUMA_ZEVK,color = CINSIYET)) + # cinsiyete göre gruplandırma
geom_point(position = "jitter") + # üst üste gelen noktaları kaydırma
scale_x_continuous("Okuma Zevk Puanları",limits = c(100,900)) + # x eksenindeki okuma puanlarını sınırlandırma
scale_color_discrete("Cinsiyet",labels=c("KIZ","ERKEK")) # cinsiyete göre breaks=seq() fonksiyonu ile eksenin sınırları ve ayrımı belirlenir. seq() içine sırasıyla eksenin başlayacağı sayı, biteceği sayı ve kaçar kaçar ilerleneceği yazılır.
ggplot(miniPISA, aes(x = ODOKUMA1,
y = OKUMA_ZEVK,
color = CINSIYET)) +
geom_point(position = "jitter") +
scale_x_continuous("Okuma Zevk Puanları",limits = c(100,900),
breaks=seq(100,900,100)) +
scale_color_discrete("Cinsiyet")labs argümanı ile etiketleme eklenir. Grafik eksenleri (x ve y), başlık(title), alt başlık(subtitle) ve grup (color) isimlendirmeleri yapılır.
ggplot(miniPISA, aes(x = ODOKUMA1,
y = OKUMA_ZEVK,
color = CINSIYET)) +
geom_point(position = "jitter") +
labs(x = "\nBasari Puanları",
y = "\nYeterlik Puanları",
color = "Grup")En sık kullanılan grafiklerden olan bar grafikleri ya da sütun grafikleri frekansların dağılımını vermektedir. En çok kullanılan dikeyde frekansların yatay eksende ise değişken ve değişken kategorilerinin yer aldığı dikey versiyondur. Ayırıcı özelliği ise sütunlar arasında boşluk olmasıdır. Bu durum sıralama ve sınıflama ölçeğindeki verilerin görselleştirilmesinde kullanılan grafik türü olmasından kaynaklanmaktadır.
ggplot(miniPISA, aes(CINSIYET, fill = SINIF)) + geom_bar() + # sütun grafiği
labs(x = "Cinsiyet",
y = "Frekans") #etiketleme yapılmasıVeri setindeki gözlemlerin çizgilerle birleştirildiği çizgi grafikleri, x ekseninde genellikle zamanın yer aldığı verilerin zamana göre değişimi hakkında bilgi verir. Yıllara göre değişimi gösteren bir grafik elde etmek için 2009, 2012 , 2015 , 2018 veri setleri içlerinden okuma olası puanları (PV1READ) ve okuma olası puanları (ESCS) seçilerek R ortamına aktarılmıştır.
library(tuev)
PISA2009 <-PISA_STU_2009 %>%
select(PV1READ,ESCS) %>%
mutate(YIL=2009)
PISA2012 <-PISA_STU_2012 %>%
select(PV1READ,ESCS) %>%
mutate(YIL=2012)
PISA2015 <-PISA_STU_2015 %>%
select(PV1READ,ESCS) %>%
mutate(YIL=2015)
PISA2018 <-PISA_STU_2018 %>%
select(PV1READ,ESCS) %>%
mutate(YIL=2018)Dört veri seti rbind() fonskiyonu ile birleştirilmiştir.
Yıllara göre ortalama başarı puanlarını göstermek için öncelikle group_by() ve summarise() fonksiyonları ile ortalama alınmış, daha sonra geom_line() fonksiyonu içinde çizgi türü ve renk değiştirilerek grafik elde edilmiştir.
dat1 <- dat %>%
group_by(YIL ) %>%
summarise( ortalama = mean(PV1READ,na.rm=TRUE)) %>%
ungroup()
ggplot(dat1 , aes(x=YIL,y= ortalama)) +
geom_line(linetype = 2 , color = "black") +
theme_minimal()Çizgi grafikleri özellikle regresyon eğrileri oluşturmak için kullanır. Sosyoekonomik düzey başarı arasındaki ilişkiyi görselleştirmek için ilk olarak ESCS değişkeni kategorik hale getirilmiştir. Daha sonra ESCS’in kategorik düzeyleri için ESCS ve PV1 read değişkenlerinin ortalaması alınmıştır. Oluşan veri setinin ilk satırları yazdırılmıştır.
dat2 <- dat %>% mutate(ESCS_kategorik =
case_when(
ESCS > -4 & ESCS <= -2 ~ "Dusuk",
ESCS > -2 & ESCS <= 0 ~ "Orta",
ESCS > 0 ~ "Yuksek"))
dat3 <- dat2 %>% group_by(YIL, ESCS_kategorik) %>%
summarise(ortalamaSES= mean(ESCS,na.rm=TRUE),
ortalamaPV1= mean(PV1READ,na.rm=TRUE)) %>%
arrange(desc(ortalamaSES)) %>% ungroup()
head(dat3)Regresyon doğrusunun oluşturulması için ggpubr (Kassambara, 2023) paketinin stat_regline_equation() fonksiyonundan yararlanılmıştır.
library(ggpubr)
ggplot(dat3, aes(x=ortalamaSES , y=ortalamaPV1)) +
geom_line() +
facet_wrap(vars(YIL)) +
geom_smooth(method='lm', formula= y~x)+
stat_regline_equation() +
xlab("Ortalama ESCS") + ylab("Ortalama PV1") +
theme_bw()geom_boxplot() fonksiyonu ile kutu grafiği çizilir. Kutu grafiği ile veri setinin minimum, ilk çeyrek, medyan, üçüncü çeyrek ve maksimum değerleri gösterilir.
ggplot(miniPISA, aes(x = CINSIYET,y = OK_YETERLIK)) +
geom_boxplot(color="red", fill="purple", alpha=0.2) coord_flip() fonksiyonu, x ve y eksenlerinin yerlerini değiştirmek amacıyla kullanılır. Bazen bu şekilde bir kullanım daha faydalı olabilmektedir.
ggplot(miniPISA, aes(x = CINSIYET,y = OK_YETERLIK)) +
geom_boxplot(color="red", fill="purple", alpha=0.2) +
coord_flip()NOT: ggplot2 paketinin sunduğu geniş görselleştirme özellikleri ve her bir katmanın grafiğe derinlik kattığını öğrendim. Karmaşık veri setlerini daha etkili bir şekilde analiz edebilmek ve görselleştirebilmek için ggplot paketini ayrıntılı bir şekilde öğrenmek ve etkin bir şekilde kullanmayı çok istiyorum.