Bu haftaki çalışmada ggplot2 paketinde yer alan “diamonds” veri seti kullanılmıştır. Bu veri seti, elmasların fiziksel özellikleri ile fiyatları arasındaki ilişkileri incelemek amacıyla oluşturulmuştur. Veri setinde 53.940 farklı elmas örneğine ait verilen değişkenler: Elmasın ağırlığı (carat), kesim kalitesi (cut), renk derecesi (color), berraklık seviyesi (clarity) ve fiyat (price) vd. olarak belirlenmiştir. Dolayısıyla veri seti, elmasların kalite ölçütleriyle ekonomik değerleri arasındaki ilişkilerin incelenmesi ve çeşitli ilişkisel grafikler çizdirilebilmesi açısından müsait bir yapıya sahiptir.
library(ggplot2)
library(dplyr)
library(corrplot)
library(ggcorrplot)
library(GGally)
library(ggExtra)
data(diamonds)
?diamonds
🖇️Yukarıdaki fonksiyon ile tablo üzerindeki sembolizasyondan tam olarak anlaşılmayan;
👉Color değişkeninin; D ile J arasındaki harfler ise sembolize edildiği ve D’nin en iyi J’nin ise en kötü rengi temsil ettiği belirlenmiştir.
👉Clarity değişkeninin; IF ile I1 arasındaki sembollerle sembolize edildiği ve IF’nin en iyi, I!’in ise en kötü kaliteyi temsil ettiği belirlenmiştir.
👉x değişkeninin; elmasın uzunluğunu temsil ettiği belirlenmiştir.
👉y değişkeninin; elmasın genişliğini temsil ettiği belirlenmiştir.
👉z değişkeninin elmasın yüksekliğini temsil ettiği belirlenmiştir.
dim(diamonds)
## [1] 53940 10
glimpse(diamonds)
## Rows: 53,940
## Columns: 10
## $ carat <dbl> 0.23, 0.21, 0.23, 0.29, 0.31, 0.24, 0.24, 0.26, 0.22, 0.23, 0.…
## $ cut <ord> Ideal, Premium, Good, Premium, Good, Very Good, Very Good, Ver…
## $ color <ord> E, E, E, I, J, J, I, H, E, H, J, J, F, J, E, E, I, J, J, J, I,…
## $ clarity <ord> SI2, SI1, VS1, VS2, SI2, VVS2, VVS1, SI1, VS2, VS1, SI1, VS1, …
## $ depth <dbl> 61.5, 59.8, 56.9, 62.4, 63.3, 62.8, 62.3, 61.9, 65.1, 59.4, 64…
## $ table <dbl> 55, 61, 65, 58, 58, 57, 57, 55, 61, 61, 55, 56, 61, 54, 62, 58…
## $ price <int> 326, 326, 327, 334, 335, 336, 336, 337, 337, 338, 339, 340, 34…
## $ x <dbl> 3.95, 3.89, 4.05, 4.20, 4.34, 3.94, 3.95, 4.07, 3.87, 4.00, 4.…
## $ y <dbl> 3.98, 3.84, 4.07, 4.23, 4.35, 3.96, 3.98, 4.11, 3.78, 4.05, 4.…
## $ z <dbl> 2.43, 2.31, 2.31, 2.63, 2.75, 2.48, 2.47, 2.53, 2.49, 2.39, 2.…
head(diamonds)
## # A tibble: 6 × 10
## carat cut color clarity depth table price x y z
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
## 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
## 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
## 4 0.29 Premium I VS2 62.4 58 334 4.2 4.23 2.63
## 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
## 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
elmaslar <- diamonds %>%
rename(karat = carat,
kesim = cut,
renk = color,
kalite = clarity,
derinlik = depth,
fiyat = price,
uzunluk = x,
genislik = y,
yukseklik = z
)
glimpse (elmaslar)
## Rows: 53,940
## Columns: 10
## $ karat <dbl> 0.23, 0.21, 0.23, 0.29, 0.31, 0.24, 0.24, 0.26, 0.22, 0.23, …
## $ kesim <ord> Ideal, Premium, Good, Premium, Good, Very Good, Very Good, V…
## $ renk <ord> E, E, E, I, J, J, I, H, E, H, J, J, F, J, E, E, I, J, J, J, …
## $ kalite <ord> SI2, SI1, VS1, VS2, SI2, VVS2, VVS1, SI1, VS2, VS1, SI1, VS1…
## $ derinlik <dbl> 61.5, 59.8, 56.9, 62.4, 63.3, 62.8, 62.3, 61.9, 65.1, 59.4, …
## $ table <dbl> 55, 61, 65, 58, 58, 57, 57, 55, 61, 61, 55, 56, 61, 54, 62, …
## $ fiyat <int> 326, 326, 327, 334, 335, 336, 336, 337, 337, 338, 339, 340, …
## $ uzunluk <dbl> 3.95, 3.89, 4.05, 4.20, 4.34, 3.94, 3.95, 4.07, 3.87, 4.00, …
## $ genislik <dbl> 3.98, 3.84, 4.07, 4.23, 4.35, 3.96, 3.98, 4.11, 3.78, 4.05, …
## $ yukseklik <dbl> 2.43, 2.31, 2.31, 2.63, 2.75, 2.48, 2.47, 2.53, 2.49, 2.39, …
sayisal_veriler <- elmaslar %>%
select(karat, derinlik, fiyat, uzunluk, genislik, yukseklik)
M <- cor(sayisal_veriler, use="complete.obs")
ggcorrplot(M,
method = "circle",
lab = TRUE,
lab_size = 2,
title = "Sayısal Değişkenler Arası Korelasyon Matrisi") +
coord_fixed() +
theme_classic() +
theme(axis.text.y = element_text(size = 5),
axis.text.x = element_text(size = 5, angle = 45),
legend.position = "top") +
labs(x = "Degiskenler", y = "Degiskenler")
Yorum: Elde edilen korelasyon matrisi grafiği incelendiğinde, elmas veri setindeki sayısal değişkenler arasında genel olarak pozitif yönlü ve güçlü ilişkiler olduğu görülmektedir. Özellikle karat, fiyat, uzunluk, genişlik ve yükseklik değişkenleri arasındaki korelasyon katsayılarının oldukça yüksek (r ≈ 0.9 ve üzeri) olduğu söylenebilir. Bu durum, elmasın ağırlığı ve fiziksel boyutları arttıkça fiyatının da yükseldiğini göstermektedir. Diğer yandan, derinlik değişkeninin fiyatla olan ilişkisi oldukça zayıftır; bu da elmasın derinliğinin fiyat üzerinde belirleyici bir etki yaratmadığını göstermektedir. Genel olarak grafik, elmas fiyatlarının en çok boyut ve karat ağırlığı gibi fiziksel özelliklerle ilişkilendiğini, buna karşın derinlik oranlarının fiyatla anlamlı bir korelasyona sahip olmadığını ortaya koymaktadır.
sayisal_veriler <- elmaslar %>%
select(karat, derinlik, fiyat, uzunluk, genislik, yukseklik)
M <- cor(sayisal_veriler, use="complete.obs")
ggcorrplot(M,
method = "square",
type = "lower",
lab = TRUE,
lab_size = 3,
colors = c("yellow", "pink", "skyblue"),
title = "Elmas Verisi: Sayısal Değişkenler Arası Korelasyon",
tl.srt = 45) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "italic", color = "green")) + labs(x="Degiskenler", y="Degiskenler")
Yorum: Yukarıdaki grafikte, diamonds veri setinde yer alan sayısal değişkenler (karat, derinlik, fiyat, uzunluk, genişlik, yükseklik) arasındaki ilişkilerin gücü ve yönü gösterilmektedir. Renk skalası, korelasyon katsayısının değerini temsil etmektedir; mavi tonlar pozitif, pembe tonlar 0’a yakın, sarı tonlar ise negatif ilişkileri göstermektedir.Grafiğe göre, karat, fiyat, uzunluk, genişlik ve yükseklik değişkenleri arasında oldukça yüksek düzeyde pozitif korelasyonlar gözlenmiştir. Bu durum, elmasın fiziksel boyutlarının (karat, uzunluk, genişlik, yükseklik) büyüdükçe fiyatının da arttığını göstermektedir.Buna karşın, derinlik değişkeni diğer değişkenlerle çok zayıf ve negatif yönde ilişkilidir.
sayisal_veriler2 <- sayisal_veriler %>%
select (karat, fiyat, derinlik)
ggpairs(
sayisal_veriler2,
title = "Sayısal Degiskenler Arasındaki Iliskiler",
upper = list(continuous = wrap("cor", size = 4, color = "darkblue")),
lower = list(continuous = wrap("smooth", alpha = 0.3, color = "yellow")),
diag = list(continuous = wrap("densityDiag", alpha = 0.5, fill = "green"))
) +
labs(x = "Degiskenler", y = "Degiskenler")+
theme_minimal() +
theme(
plot.title = element_text(size = 12, face = "italic", hjust = 0.5, color = "red"),
axis.text.x = element_text(size = 5, angle = 45),
axis.text.y = element_text(size = 5)
)
Yorum: Grafik sonuçlarına ilişkin olarak, elmas veri setindeki sayısal değişkenler arasındaki ilişkiler incelendiğinde, özellikle karat ile fiyat arasında oldukça güçlü ve pozitif bir ilişki olduğu görülmektedir (r ≈ 0.92). Bununla birlikte, derinlik (depth) değişkenleri ile fiyat arasında düşük düzeyde ve anlamlı olmayan ilişkiler bulunmuştur. Bu da elmasın geometrik yapısının fiyat üzerinde sınırlı bir etkisi olduğunu göstermektedir.Çünkü veri setinde belirtilen “derinlik” değişkeni: z / mean(x, y) = 2 * z / (x + y) şeklinde belirtilmiştir. Yoğunluk grafikleri incelendiğinde, özellikle fiyat değişkeninin sağa çarpık bir dağılıma sahip olduğu görülmektedir. Bu durum, veri setinde yüksek fiyatlı ancak sayıca az olan elmasların varlığına işaret etmektedir. Genel olarak bu analiz, elmas fiyatlarını belirleyen en güçlü faktörün (analize dahil edilen değişkenler arasında) karat olduğunu; derinlik oranlarının ise fiyat üzerinde anlamlı bir belirleyici olmadığını göstermektedir.
ggplot(elmaslar, aes(x = renk, y = fiyat, fill = renk)) +
geom_boxplot(outlier.alpha = .3) +
labs(title = "Renk Gruplarına Gore Fiyat Dagılımı",
x= "Harflendirme | D: En Kotu | J: En İyi", y = "Fiyat ($)") +
theme_minimal() + theme(legend.position = "right")
Yorum: Yukarıdaki kutu grafiği, elmasların rengi ile fiyat değişkeni arasındaki ilişkiyi göstermektedir. Renk değişkeni, D’den J’ye doğru sıralanmıştır; burada D en iyi, J ise en düşük kaliteye sahip elmasları ifade etmektedir. Grafikte genel olarak, renk kalitesi azaldıkça (D → J) elmas fiyatlarında artış eğilimi gözlemlenmektedir. Bu durum, J sınıfı elmasların ortalama fiyatlarının D ve E sınıflarına göre daha yüksek olduğunu göstermektedir.Ancak bu artış, doğrudan renk kalitesine bağlı bir ilişkiyi tam olarak yansıtmayabilir; ki bu da grafikte (mutlak doğrusal bir ilişki olmamasından kaynaklı gözükmektedir) çünkü fiyat, karat ve kesim gibi diğer faktörlerden de etkilenmektedir.
elmas_rastgele <- diamonds %>%
sample_n(500)
r_degeri <- cor(elmas_rastgele$carat, elmas_rastgele$price, use = "complete.obs")
model <- lm(price ~ carat, data = elmas_rastgele)
denklem <- paste0(
"y = ", round(coef(model)[1], 1),
" + ", round(coef(model)[2], 1), "x"
)
p <- ggplot(elmas_rastgele, aes(x = carat, y = price)) +
geom_point(aes(color = cut), alpha = 0.5, shape = 14, size = 1.8) +
geom_smooth(method = "lm", se = FALSE, color = "black", linewidth = 1) +
annotate("text", x = 4.8, y = 18000,
label = paste0("r = ", round(r_degeri, 2)),
color = "darkred", size = 5, fontface = "bold") +
annotate("text", x = 3.5, y = 23000,
label = denklem,
color = "darkblue", size = 4, fontface = "bold", hjust = 0) +
labs(
title = "Karat ile Fiyat Arasındaki İlişki",
x = "Karat",
y = "Fiyat (USD)",
color = "Kesim Kalitesi"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
plot.subtitle = element_text(hjust = 0.5, face = "italic", size = 10),
axis.text = element_text(size = 9)
)
ggMarginal(
p,
type = "boxplot",
fill = "skyblue",
color = "grey30",
size = 2
)
Yorum: Bu grafikte elmasların karat değeri ile fiyatları arasındaki ilişki incelenmiştir. Grafiğin merkezinde yer alan saçılım noktaları, her bir elmasın karat ve fiyat değerlerini temsil etmektedir. Noktalar, kesim kalitesine göre renklendirilmiştir. Grafikteki siyah çizgi, doğrusal regresyon modelini temsil eder. Bu çizgi, karat değeri arttıkça fiyatın nasıl değiştiğini göstermektedir. Çizginin eğimi pozitif yönde olup, bu durum karat ile fiyat arasında güçlü ve doğrusal bir ilişki bulunduğunu işaret etmektedir. Grafikte regresyon denklemi tam olarak görülmemektedir. Ayrıca grafikte yer alan kırmızı “r = 0.92” değeri, korelasyon katsayısını temsil eder. Bu değer, karat ve fiyat arasında çok güçlü pozitif bir korelasyon olduğunu ortaya koymaktadır.
Bu hafta gerçekleştirdiğim ödev kapsamında; ilk olarak ilgimi çeken bir veri seti olduğu için ve ilişkisel grafikler çizdirmeye müsait bir yapısı olduğu için “diamonds” veri setini seçtim. Ardından “?diamonds” kodu ile color, clarity, x, y, z değişkenlerinin ne anlattığını ve nasıl sembolize edildiğini anlayabilmek için “Help” sayfasından yardım aldım ve bu işlem işimi oldukça kolaylaştırdı. Bu işlemin her çalışma öncesinde gerçekleştirilmesi gerektiğinin elzem olduğunu düşünüyorum. Ardından “head” ve “glimpse” fonksiyonları ile veri setinin içine daha detaylı bir şekilde bakmış oldum. Ardından veri seti içerisindeki İngilizce değişkenleri ve veri setinin İngilizce ismini rename() fonksiyonu ile Türkçeleştirdim. Grafik oluşturma bölümüne geçtiğimde ise; ilk olarak tüm sayısal değişkenlerin birbirleriyle nasıl bir korelasyon ilişkisi gösterdiğini incelemek için veri setindeki tüm sayısal verileri select () komutu ile seçerek “sayisal_veriler” şeklinde isimlendirdim. Daha sonra Matris’i temsil eden yeni bir M değişkeni belirledim ve “sayisal_veriler” in korelasyonunu alması için cor() fonksiyonunu kullandım. Satır sonunda belirttiğim use=“complete.obs” kodu ise NA değerlerin işleme alınmamasını sağlayarak işimi kolaylaştırmıştır. Bu sayede en başta eksik verileri elemeye gerek kalmamıştır. Aldığım korelasyonu görselleştirmek için ise “ggcorplot” paketini kullandım. Method olarak “circle”ı belirledim ancak; “square”, gibi farklı bir temanın da kullanılabileceğini öğrendim. Ancak ben daire temasının görselliğini daha çok beğendiğim için onu tercih ettim.Lab size ve Lab= TRUE ile sayı etiketlerinin gözükmesini ve boyutunu ayarladım. “axis” kodları ile ise x ve y eksenleri ile ilgili düzenlemeler yaptım. “angle=45” kodunun yazıların eğimini ayarlamak için kullanıldığını öğrendim. Benim için oldukça faydalı ve estetik anlamda efektif bir bilgiydi. Ggpairs fonksiyonunu kullanmak için ise veri setindeki değişkenleri sadeleştirerek yalnızca karat, fiyat ve derinlik değişkenlerini inceledim. Bu işlem için select() fonksiyonunu kullanarak gereksiz sütunları çıkardım ve “sayisal_veriler2” adlı yeni bir alt veri seti oluşturdum. Ardından çoklu değişken ilişkilerini görselleştirebilmek için GGally paketini yükledim ve bu paketin ggpairs() fonksiyonundan yararlandım. İlk olarak upper, lower ve diag kodları olmadan yazdım ancak renksiz bir çıktı aldım. Ardından grafiklerin renklerini kendim ayarlayabilmek için Chat GPT yardımı ile bu yolu buldum ve değişkenler arasındaki korelasyon katsayılarını gösterecek şekilde “cor” fonksiyonu tanımladım ve bu değerleri mavi, sarı ve yeşil renkleri kullandım. Grafiğin iki eksenini de “Değişkenler” olarak adlandırdım. Ardından theme_minimal() ile sade bir başlığı kırmızı renkli, italik ve ortalanmış biçimde (hjust = 0.5) kodu ile düzenledim. Bu kodu öğrenmek benim için faydalı idi. Eksen etiketlerini okunabilir hale getirmek için yazı boyutlarını küçülttüm ve x eksenindeki metinleri 45° eğik biçimde yerleştirdim. Elmasların rengi ile fiyat arasında da ilişki olup olmadığını merak ettiğim için ise klasik bir boxplot grafiği çizdirdim. Bir dağılım grafiği çizdirmek için ise; ilk olarak veri setim oldukça kalabalık olduğu için onu 5000 elmas ile sınırlandırdım. Sonrasında korelasyon hesaplayarak lm() fonksiyonu ile fiyat ve karat arasında bir regresyon modeli kurdum. Bu model ile birlikte oluşan denklemi grafik üzerine coef() kodu ile ekledim. Ayrıca, geom_smooth(method = “lm”) fonksiyonuyla grafiğe regresyon çizgisi ekledim. Grafiğin üst ve yan kısımlarına kutu grafikleri ekledim. Bu işlem için ggMarginal() fonksiyonunu kullandım. Bu bölüm oldukça zordu. Sonuç olarak iki haftadır veri setini yanlış seçtiğimi düşünüyorum. Çünkü grafik çizdirmek için yeterince sayısal değişken yok ve tahmin edilebilir sonuçlar çıkıyor. (Karat, renk kalitesi vb. yükseldikçe fiyatının da yükseleceği gerçeği gibi)