3 ggplot2 ile Veri Görselleştirme

Bu bölümde ggplot2 paketinden yararlanarak veri görselleştirmenin nasıl yapılabileceği farklı fonksiyonlar ve örnekler üzerinden gösterilecektir.

3.1 Hazırlıklar

dplyr paketinde birden fazla fonksiyonu aynı veri setine uygulamak için “Bağlantı Operatörü” (%>%) kullanılırken ggplot2 paketinde ise birden fazla etkiyi aynı anda uygulamak için (+) operatörü kullanılıyor. Bu durum başlangıç grafiğinin üzerine farklı görseller eklenmesi olarak düşünülebilir.

ggplot() fonksiyonu ile de ilk kez karşılaşıldığından bazı özelliklerinden bahsedilmelidir. Fonksiyonun içine ilk yazılan parametre kullanılacak veri setinin ismidir. Daha sonra aes() yardımıyla grafiğin x ve y koordinatları belirlenir. aes() içerisinde ayrıca color, fill, alpha, shape, size gibi özellikler de belirlenebilir. Bu özelliklerden işimize yarayacak olanlar kullanıldıkları yerlerde açıklanacaktır.

ggplot() fonksiyonu tanımlandıktan sonra istenilen grafik şekline göre farklı fonksiyonlar (+) operatörü ile üstüne eklenir. Örneğin,

  • Nokta grafiği için geom_point() fonksiyonu,
  • Sütunlu grafik için geom_bar() fonksiyonu,
  • Çizgi grafiği için geom_line() fonksiyonu,
  • Isı haritası ya da grafiği için ise geom_tile() fonksiyonları eklenir.

3.2 Nokta Grafiği (Scatter Plot)

İlk olarak bahsedilecek grafik türü olan “Scatter Plot” temel olarak var olan verinin noktasal dağılımını göstermek için kullanılır.

“Scatter Plot” için kullanılan fonksiyon geom_point()tir. x ekseninde “PTF”, y ekseninde ise “SMF” değerleri renkleri günlere göre değişecek şekilde gösterilirse (Öncelikle gün sütunu ekleniyor ve yeni bir tabloya ataması yapılıyor.),

Tabloya göz atalım,

## # A tibble: 8,760 x 6
##    Tarih                 PTF   SMF   PDF   NDF Gün       
##    <dttm>              <dbl> <dbl> <dbl> <dbl> <date>    
##  1 2019-01-01 00:00:00 100.    5    4.85 103.  2019-01-01
##  2 2019-01-01 01:00:00  96.7  95.0 92.2   99.6 2019-01-01
##  3 2019-01-01 02:00:00  81.6  79.6 77.2   84.0 2019-01-01
##  4 2019-01-01 03:00:00  38.6   0    0     39.7 2019-01-01
##  5 2019-01-01 04:00:00  11.5   0    0     11.9 2019-01-01
##  6 2019-01-01 05:00:00  11.1   0    0     11.5 2019-01-01
##  7 2019-01-01 06:00:00  11.1   0    0     11.5 2019-01-01
##  8 2019-01-01 07:00:00  24.4   0    0     25.1 2019-01-01
##  9 2019-01-01 08:00:00  34.5   0    0     35.5 2019-01-01
## 10 2019-01-01 09:00:00  45.2   0    0     46.6 2019-01-01
## # … with 8,750 more rows

Şimdi grafiği çizdirecek olursak,

Görülebileceği üzere öncelikle veri seti, sonrasında ise aes() içerisinde x ve y koordinatları ile renk color yardımıyla belirlendi.

Grafiği görsel olarak daha güzel hale getirmek için öncelikle arka plandaki gri kısım theme_minimal() fonksiyonu yardımıyla kaldırılabilir.

Eksenlerinin ismini değiştirmek, x eksenindeki yazıları döndürmek ve lejantı istenilen şekilde konumlamak için aşağıdakiler uygulanmalıdır.

Burada labs() fonksiyonu içinde x ve y eksenlerinin isimleri sırayla değiştirildi, theme() fonksiyonu içerisinde axis.text.x = element_text(angle = 45) komutu ile x eksenindeki yazılar 45 derece döndürüldü, legend.position = "top" komutu ile lejantın pozisyonu sayfanın üst kısmı olarak belirlendi.

3.3 Sütunlu Grafik (Bar Chart)

“Bar Chart”ta ise veriler sütunlarda gösterilir. “Scatter Plot”taki geom_point() yerine geom_bar() fonksiyonu, aes() içerisinde color yerine ise fill kullanılır. (Burada geom_bar içerisinde stat="identity" yazılması zorunludur.)

Örneğin Negatif Dengesizlik Fiyatı’nın ne kadarının PTF’den ne kadarının ceza payından geldiği Haziran ayı için saatlere göre incelenmek isteniyor.

Bu durumu incelemek için gerçekleştirilen veri manipülasyonu kodunu aşağıda bulabilirsiniz.

Burada bir önceki bölümde İleri Seviye örneklerden aşina olabileceğiniz tidyr paketinin pivot_longer() fonksiyonu bulunuyor. Bu fonksiyon temel olarak geniş tabloları belirli sütunlarını bir ortak sütun içerisinde birleştirip bunu yaparken de satır sayısını birleştirilen sütun sayısı oranında artıran bir fonksiyondur.

Bu paketin indirme ve yüklenme aşamaları için Gerekli Paketlerin İndirilip Yüklenmesi bölümüne göz atabilirsiniz.

Örneğimizle devam edecek olursak,

Tabloya göz atalım,

## # A tibble: 48 x 3
##     Saat Piyasa_Degiskeni Fiyatlar
##    <int> <chr>               <dbl>
##  1     0 PTF                 231. 
##  2     0 Fark_NDF_PTF         12.4
##  3     1 PTF                 253. 
##  4     1 Fark_NDF_PTF         20.2
##  5     2 PTF                 237. 
##  6     2 Fark_NDF_PTF         17.4
##  7     3 PTF                 205. 
##  8     3 Fark_NDF_PTF         13.6
##  9     4 PTF                 186. 
## 10     4 Fark_NDF_PTF         17.4
## # … with 38 more rows

Bu şekilde bir tablo ortaya çıktı. Şimdi grafiği çizdirmek için,

Bu grafiği yüzdesel oranlarına göre tam olarak sığdırmak için ise,

Son olarak da daha aşina olunduğu üzere sütunları yan yana yerleştirmek için,

Son iki grafikte dikkat edilmesi gereken nokta sütunları dikeyde oranları göz önüne alınarak sığdırmak için position="fill", yan yana yerleştirmek için ise position="dodge" kullanılır.

En sonda yukarıda yapılan güzelleştirme operasyonları da uygulanırsa,

3.4 Çizgi Grafiği (Line Chart)

“Line Chart”larda ise tahmin edilebileceği üzere geom_line() kullanılacaktır. Örneğin Şubat ayı saatlik ortalama PTF ve SMF değerleri incelenmek isteniyor. Öncelikle veri manipülasyonu yapılırsa,

Bu şekilde bir tablo ortaya çıkıyor.

## # A tibble: 56 x 3
##    Tarih      Piyasa_Degiskeni Fiyatlar
##    <date>     <chr>               <dbl>
##  1 2019-02-01 PTF                  224.
##  2 2019-02-01 SMF                  262.
##  3 2019-02-02 PTF                  251.
##  4 2019-02-02 SMF                  179.
##  5 2019-02-03 PTF                  187.
##  6 2019-02-03 SMF                  127.
##  7 2019-02-04 PTF                  253.
##  8 2019-02-04 SMF                  234.
##  9 2019-02-05 PTF                  257.
## 10 2019-02-05 SMF                  220.
## # … with 46 more rows

Şimdi grafik çizdirilirse,

Yine daha güzel görünümlü bir grafik elde etmek için gerekli fonksiyonlar da yazılırsa,

Burada önceden gördüğümüz fonksiyonlara ek olarak, scale_x_date(date_breaks = "1 day", date_labels = "%m/%d") komutunu görüyoruz. Bu komut sayesinde date tipinde olan bir değişken istenilen formatta bastırılmış oluyor.

3.5 Isı Harıtası (Heat Map)

Bu grafik türünde ise iki farklı değişken baz alınarak temelde gözlenmek istenen değişkeni farklı renk tonlarında göstererek incelenmesi hedefleniyor. Bu işlem için ise geom_tile() fonksiyonu kullanılıyor ve asıl olarak gösterilmek istenen değişken fill fonksiyonuna veriliyor.

Örneğin Temmuz ayı için x ekseninde saatler, y ekseninde ise ayın günleri olacak şekilde Piyasa Takas Fiyatı (PTF) değişkeninin ısı grafiği için (Öncelikle veri manipülasyonu yapılıyor.),

## # A tibble: 744 x 3
##     Saat Tarih        PTF
##    <int> <date>     <dbl>
##  1     0 2019-07-01 100. 
##  2     1 2019-07-01 204. 
##  3     2 2019-07-01 227  
##  4     3 2019-07-01 150  
##  5     4 2019-07-01 170. 
##  6     5 2019-07-01  50.0
##  7     6 2019-07-01 100  
##  8     7 2019-07-01 204. 
##  9     8 2019-07-01 300. 
## 10     9 2019-07-01 302. 
## # … with 734 more rows

Bu şekilde bir tablo ortaya çıktı. Şimdi grafiği çizdirecek olursak,

Güzelleştirmek için yukarıdaki fonksiyonlar eklenirse,

Burada ise önceden aşina olmadığımız scale_x_discrete(limits=c(0:23)) komutunu görüyoruz. Bu komut sayesinde x ekseninde 0’dan 23’e bütün sayıları bastırabiliyoruz. (scale_y_date komutu bir önceki bölümde anlatılan scale_y_date komutuyla tamamen aynı işlevde olup y ekseni ile ilgilenmektedir.)

Isı grafiğinin rengi değiştirilmek istenirse ise scale_fill_gradient fonksiyonu içerisinde iki renk belirtilerek aralarındaki renkler kullanılabilir.