R ile Yüksek Performanslı Programlama - 1
Bu yazı ile beraber yepyeni bir seriye başlıyoruz. Bu seriyi bitirdiğimizde R’ı daha verimli bir şekilde kullanmayı ve büyük verinin getirdiği performans sorunlarını aşmayı öğrenmiş olacağız! Biraz daha detaylı anlatmak gerekirse R’da yüksek performanslı kodlara neden ihtiyaç duyarızı ve bu kodları nasıl yazarızı konuşacağız. R’ın neden büyük verilerde yapılan işlemlerde yavaş kaldığını anlayacak ve sonrasında bu yavaşlığı gidermenin yöntemlerini öğreneceğiz. Bu serideki örneklerin ve anlatımların bir bölümü benim de öğrenme sürecinde kullandığım Lim ve Tjhi’nin ‘R High Performance Programming’ kitabından alınmıştır.
İlk olarak R’ın nasıl bir programlama dili olduğunu öğrenelim. Örneğin Java ile R arasında nasıl bir fark vardır? Java’da çok hızlı bir şekilde çalışan For Döngüsü R’da neden yavaştır ve tercih edilmemelidir?
R yorumlayıcı bir dildir. Bir diğer programlama dili tipi ise derleyici programlama dili tipidir. Peki yorumlayıcı olması ne anlama gelmektedir? Yorumlayıcı diller bizim çalıştırdığımız kodu farklı bir programlama diline çevirir, sonrasında derlenen bu kodlar çalışır. Her satırı çalıştırdığımızda bu yorumlama işlemi yapılır. Bunun bir avantajı her satır sonunda bir sonuç elde edebilmemiz, dezavantajı ise bu yorumlama işleminin bize bir yavaşlık olarak dönmesidir. Java dili derleyici bir dildir, bu nedenle yorumlama gibi bir işlem olmaksızın kodlarımız anında çalışır. Bu da onu çok daha hızlı yapar. Bu çalışma ‘execution time’ süresinde olmaktadır.
Yani bir R programını her çalıştırdığımızda 2 ayrı işlem yapılır. Önce kodlarımız yorumlanır, sonrasında çalıştırılır. Bu da onu yavaşlatır.
R dilinin yavaş kalmasının bir diğer sebebi de tek çekirdek ile çalışmasıdır. Biz aksi yönde bir aksiyon almadıkça bilgisayarımız kaç çekirdekli olursa olsun R otomatik olarak tek çekirdek ile çalışacaktır. Bu da bize bir performans düşüklüğü olarak dönmektedir. Burada bizim yapmamız gereken performans arttırıcı çözümler bulmaktır.
R dilinin bu sıkıntılarını aşmak için bir çok çözüm vardır. Biz de yazılarımızda bunları konuşacak ve çok daha hızlı çalışan programlar yazmayı öğreneceğiz. Fakat bunlardan önce R üzerinde yarattığımız değişkenlerin nerede tutulduğunu ve bunun etkilerini incelememiz gerekiyor.
R Üzerindeki Verilerimiz RAM’de Tutulur
R üzerinde çalıştığımız tüm veriler RAM’de tutulur. Yani veriyi yüklediğimiz an CPU tarafından anında işlenilebilir haldedir. Bu da performans için harika bir durumdur. Fakat bunun bir de dezavantajı bulunuyor. O da işleyebileceğimiz verinin maksimum büyüklüğünü RAM miktarı ile kısıtlamasıdır. Ve sistemimizde bulunan RAM’in tamamı da R’a ayrılmamıştır. Arkaplanda çalışan diğer işlemler de RAM kullanmaktadır. Diyelim ki 8 GB RAM’imiz bulunuyor. Bunun 6 GB’ı da R’a ayrılmış olursun. Bu demek oluyor ki işleyebileceğimiz verinin büyüklüğü 6 GB ile sınırlıdır. Diyelim ki kullanabileceğimiz tüm alanı kullandık. Sonrasında yapacağımız en ufak bir işlemde alacağımız hata aşağıdaki gibidir.
Error: cannot allocate a vector of size 800.1 Mb
Peki bu durum karşısında çaresiz miyiz? Hayır! RAM kullanımını optimize edecek çözümlerimiz de mevcut. Bunları da ilerleyen derslerde göreceğiz. Sıradaki yazı itibariyle uygulamalı yöntemlere başlıyoruz.
R ile ilgili daha fazla içerik ve video dersler için R Programlama ile Veri Bilimi isimli Udemy kursumu inceleyebilirsiniz.