DevVeri.com

Boğulacaksan büyük veride boğul!

R Programlama Dili

R_logo.svgBu yazımızda, veriyi anlamlandırmak için kullanılan analitik yöntemler için geliştirilmiş istatistiksel paket ve programlama dilleri içinde son yıllarda öne çıkan bir seçenek olan ve iki milyon kullanıcısı olduğu söylenen R programlama dili nin sağladığı avantajlara kısaca bakacağız. Özellikle büyük veri işlemede de etkin bir şekilde kullanımının örnekleri açıklandıkça bu dilin daha da popüler olacağı şüphesiz. Son olarak, R dili üzerine büyük veri ambarları ve Hadoop kapsamında kurumsal çözümler üreten Revolution Analytics firmasının Nisan 2015 başında Microsoft firması tarafından satın alınması bu trendin devam edeceğinin en büyük kanıtı.

Dünyada popüler ve yaygın olarak kullanılan programlama dilleri için bazı peryotlarda çeşitli indeksler ve sıralamalar yayınlanıyor. Bunların içinde benim takip ettiğim indeks, on yıldır aylık olarak yayınlanan TIOBE index. Nisan 2015 sıralamasında R dili 19 uncu sırada ve analitik dünyasının devi SAS firmasının SAS programlama dilinin 2 basamak üstünde. Bu denli yoğun rekabetin olduğu bir alanda nasıl oluyor da açık kaynak kodlu ücretsiz bir yazılım böyle bir başarı kazanabiliyor? Yıllarca SAS programlama dilini kullanmış bir veri madencisi olarak bu konudaki değerlendirmelerimi, ayrı bir yazıya bırakarak R programlama dilinin temel özelliklerine değinerek yazımıza başlayalım.

İstatistiksel çıkarım yapmak için kullanılan teknik ve algoritmaların hazır olarak kullanımı için geliştirilen kütüphaneleri de içeren, buna makine öğrenmesi algoritmalarının da eklendiği R dilinin fonksiyon tabanlı ve nesne bazlı bir dil olması ve rakiplerine görece daha yeni bir dil olması en büyük artılarından. Temel matematiksel işlemlerin yapılması dışında, karmaşık matris işlemlerinin bir satırlık kod ile yapılıyor olması, açık döngü yapıları yerine alternatif olan gizli döngülere izin veren etkin yapısı, dile yeni başlayanlar için sıkıntı yaratsa da ilerleyenler için büyük imkanlar sunuyor.

Ayrıca, açık kaynak kodlu ve ücretsiz ulaşılabilmesi, çok geniş kitleler tarafından kullanılan ve birçok veri işleme ve veri madenciliği yazılımının çözümüne dahil ettiği ortak çözüm dili olma yolunda emin adımlarla ilerlemesini sağlamaktadır.

R programlama dilinin nesne tabanlı bir dil olduğunu söylemiştik. Bu nedenle kullanılan her şey bir nesnedir.

01

Komutların genel yapısı,

çıktı <- komut(<girdi(ler)>)

şeklindedir. Her sonuç bir nesne olarak tutulur ve başka bir fonksiyona parametre olarak gönderilebilir. Örneğin c ile gösterdiğimiz sayıların ortalamasını almak için

Ortalama <- mean( c )

demek yeterlidir. Matematiksel işlemler ve istatistiksel hesaplamaları kolayca yapmak üzerine kurgulanmış bir dil olarak, matris ve vektör hesaplamaları çok kolaylaştırılmıştır. Matris oluşturma, matris çarpımı ve transpozunu alma işlemleri oldukça kolaydır.

02

Eldeki verinin işlenmesi ve analizi için de gayet uygun bir dildir ve veri bilimcilerinin Python dili ile birlikte kullandıkları zaman, veri işlemede her problemin üstesinden gelebilecek bir ikili olurlar.

Grafiksel analiz ve işlemler R programlamanın güçlü yanlarından birisidir. Temel faydaları;

  • Yaptıklarımız manuel işlemler olmadığı için kolay tekrar edilebilir geliştirilebilir, aktarılabilir, otomatikleştirilebilir.
  • Bir analizi birçok değer için tekrar etmek çok kolaylaşır.
  • Veriyi işleme kolaylaşır.
  • Programlama ile benzer problemlere hızlı çözüm mümkün olur.

Bu amaçla gelişmiş bir komut seti sunulmaktadır. Bunlardan bazılarını kısaca görerek devam edelim. R dilinin kütüphanelerle zenginleştirilmiş yapısı içinde base R olarak isimlendireceğimiz ana paketin içinde bulunan plot komutu ile aşağıdaki grafikleri kolayca elde edebiliriz.

03

04

Başka bir örnek, ortalaması 0, standart sapması 1 olan bir normal dağılımı 500 deneme için şu şekilde bulup, grafiğini çizebiliriz.

05

Bu çok basit grafik örnekleri verdikten sonra, istatistiksel hesaplamaların nasıl yapıldığı konusuna da girerek, bu tür bir işte geçirilen adımları da içerecek şekilde daha somut bir örnek ile devam edelim.

İhtiyacımız olan veriyi Dünya Bankası web adresinden Ülkelerin Nüfus Sayısı Değişim Oranları Verisi olarak alıyoruz. Kaynağından CSV formatında aldığımız verinin, R dilinde bir nesne olarak yüklenmesini çok kolay bir şekilde yapıyoruz. Bunun için benim de kullandığım ve gayet memnun olduğum IDE RStudio yu kullanırsanız, menüler ile de bu işlemi gerçekleştirebilirsiniz.

06

Veriye kısaca bakacak olursak, ülkelerin 1960 yılından itibaren yapılan nüfus sayımları sonuçlarına göre, senelik nüfus sayısı değişim oranlarını yüzde olarak bize veriyor. Şimdi R dilini kullanarak bu verileri kısaca analiz edelim. Öncelikle gereksiz olan kolonlardan kurtulalım.

07

Veriyi incelediğimizde bir zaman serisi verisi olduğunu görüyoruz. Zaman serileri, düzenli veya düzensiz aralıklarla değişkenin ölçülen değeri ile ölçüm zamanının sıralama ilişkisinin dikkate alınarak veri olarak saklanması ile oluşan matematiksel yapılardır. Elimizdeki veride ölçülen değişken nüfus değişim oranı, zaman dilimi yıldır. Zaman serileri; enerji, havacılık, parakende, telekom, finans, askeriye, bilimsel deney vb birçok alanda karşımıza çıkan ve Şeylerin İnterneti (Internet of Things – IOT) olarak isimlendirilen yeni büyük verinin temelidir. Veri üreten ve bu veriyi internet yolu ile aktaran akıllı cihazların yaygınlaşması ile yakın zamanda iş dünyasının karar alma mekanizmalarının kökten değişeceği görülmektedir. Öyle ki son birkaç yıldır zaman serileri için geliştirilen TSDB gibi özel veritabanlarına şahit oluyoruz.

Nüfus değişimi verilerimize dönecek olursak, 1960 yılı bütün ülkelerin verilerinden yola çıkarak, şöyle bir grafiğe çok kolay erişebiliyoruz.

08

Bu grafikten 1960 yılında ortalama nüfus artış hızının ikiyi biraz geçtiğini, ekstrem değerleri yuvarlak işaretlerle görüyoruz ve maksimumda %10 a yakın bir artışın olduğu ülke olduğu negatif olan yani nüfusu azalan bir ülke de olduğunu görüyoruz. Bu çizimlerin nasıl yorumlanacağı ile ilgili detay merak edenler tıklayın.

Üç ülke için 1960-2013 yıllarındaki bütün verileri değerlendirerek bakacak olursak;

09

10

Summary komutu ile aldığımız temel istatistiklere bakarak hemen görebiliyoruz ki nüfus artış ortalaması tüm dünya için 1960 dan bu yana düşüş trendinde.

11

Bunu grafik olarak da görebiliyoruz. Bütün dünyada 1960-2013 arasındaki nüfus değişim oranlarının yıl bazındaki temel istatistiklerini tek grafikte görmek mümkündür.

12

13

Dünyanın nüfus değişim oranlarındaki değişimin 1980 yılı mallonrasında, azalma trendinde olduğunu görüyoruz.

İncelediğimiz verinin zaman serisi olduğunu tespit etmiştik. Bu veriyi hazır fonksiyonları kullanarak kolayca işleyebilmek için R dilindeki ts sınıfını kullanabiliriz. Bunun için yılları gösteren kolonların satır olarak bulunması gerekiyor. Bu noktada veriyi uygun hale getirmek için bir ön işlem gereksinimi doğuyor. Bu bize R dilinin bu konudaki yeteneklerini göstermek için fırsat sunuyor. Bu amaçla R nin temel veri tiplerinden data.frame i, transpoze eden fonksiyonu kullanabiliriz ama bunu yaparken ilk kolondaki ülke isimlerini ayırmak, işlemin püf noktasıdır.

14

Bu şekilde veriyi aşağıdaki formata getirmiş olduk.

15

R dilinin tanımlı sınıflarından ts class ına geçirebiliriz. Verimizde zaman boyutunda her yıl bir gözlem/ölçüm olduğu için, başlangıcı ve frekansı verirken bunu dikkate alıyoruz.

16

Bu şekilde birden fazla ülke için 1960-2013 arasındaki çoklu bir zaman serisini elde etmiş oluyoruz.

17

Zaman serilerinin bir alt bölümünü almak istersek şu şekilde yapabiliriz.

18

Burada 1985-2013 aralığındaki zaman dilimi Türkiye verisi için basit bir lineer model (lm) yapabiliriz.

20

19

Temel grafik paketi ile çizimler görsel olarak zayıftır. Fakat yeteneklidir.

21 22

Bu noktada temel R içinde olmayıp ek paket olarak geliştirilmiş olan görsel yönden güçlü grafikler veren ve ek özellikler katan ggplot2 kütüphanesi’nden de bahsetmekte fayda var. Örnek olarak yukarıdaki grafik ggplot2 ile şu şekilde görselleştirilebilir.

23 24

Burada ggplot2 nin geliştirilmesi gereken bir noktadan bahsetmekte fayda var, zaman serilerini desteklemiyor. Bu nedenle veriyi dönüştürmek zorunda kalıyoruz. Bunun için aşağıdaki tablo üzerinde bazı değişiklikler yapmak gerekiyor. Her gözlem zamanı bir kolon ile gösterildiği formattan, her gözlemin yatayda olduğu bir formata geçmek gerekiyor. Bu işleme teknik olarak de-pivoting denmektedir. Bu işlem ile her bir satırda; ülke kodu, yıl ve gözlem değeri ayrı ayrı yer alacaktır. Elimizdeki veri şu şekilde,

25

De-pivoting işleminin R dilinde melt komutu ile ne kadar kolay yapılabildiğini görelim. Bunun için reshape paketine ihtiyaç duyuyoruz.

26 27

Bu formattaki veriden ilgilendiğimiz ülkelerle ilgili veriyi filtreleyip ggplot2 nin gelişmiş grafikleri ile görelim.

28 29

Sonuç

Büyük veriyi işlerken veriyi depolamak kadar önemli olan depolanan veriden sonuç çıkarma işlemi için etkili ve üründen bağımsız bir analitik dile ihtiyaç bulunmakta. Bu dil için en çok öne çıkan R dilinin analitik karar alma süreçlerinde ve veri analizinde gittikçe daha çok kullanılacağını görüyoruz. Bu nedenle bu konularda çalışan veya çalışmak isteyen veri bilimcisi ve analistlerin R dilini iyi bir şekilde öğrenmelerinde büyük fayda vardır.

,

4 thoughts on “R Programlama Dili

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir