R – Kodlama

R, istatistiksel hesaplama, veri analitiği ve bilimsel araştırmada yaygın olarak kullanılan bir programlama dili ve ortamıdır. İstatistikçiler, veri analistleri, araştırmacılar ve pazarlamacılar tarafından verileri almak, temizlemek, analiz etmek, görselleştirmek ve sunmak için kullanılan en popüler dillerden biridir.

Etkileyici sözdizimi ve kullanımı kolay arayüzü nedeniyle, son yıllarda popülerliği artan yazılım dillerinden biridir.

Daha önceki yazım ile R – Giriş başlığı altında R ortamı ve R veri tipleri ile ilgili yazmaya başlamıştım, dizilerle devam edeceğim orada. Ama şimdiki boşluğu da fırsat bilip R – Kodlama ile ilgili de yazmak istiyorum.

Sanırım öncelikle Paketler(packages) ve Kitaplık ya da Kütüphane’ lerden (library) bahsetmek ve belki de bir kaçından, en azından yaptıkları ve hedefleri ile ilgili bilgi vermek önemli diye düşünüyorum. Ben Kütüphane (library) demeyi tercih ediyorum. herkes tarafından yazılabilecek ve kullanılabilecek kod kümelerini içeriyor.

R’ da Paket(package) ve Kütüphane(library) nedir?

Bir paket, R fonksiyonları, verileri ve derlenmiş koddan oluşan bir koleksiyondur. Paketlerin depolandığı konuma ise Kitaplık ya da Kütüphane denir.

Paket, R’ın işlevselliğini genişletirken kod dağıtımını standart hale getirir. Böylece derlenmiş paketler, kodlar herkes tarafından erişilebilir ve kullanılabilir duruma gelir. Kitaplık ise paketlerin depolandığı bir dizindir. Sabit sürücünüzde birden çok kitaplık olabilir.

Hangi Kitaplıkların mevcut olduğunu görmek için:

Kütüphane ya da kitaplık yolu

.libPaths()

Ve hangi paketlerin hangi kütüphanede olduğunu görmek için:

lapply komutu

lapply(.libPaths(), dir)

Bir paket nasıl yüklenir ve kullanılır?

R’ da bir paketi yüklemenin pek çok yolu var. Bildiğim yolları göstermeye çalışacağım.

Araçlar(Tools)

R yazılımını açar açmaz önümüzde tepede görülen menüden Tools/ Araçlar tıklayıp altından Install Packages/ Paketleri yükle seçmek sanırım paket yüklemenin ilk yolu olarak söylenebilir

Paketler bölümü penceresi

Eğer sol alt bölme başlıklarında Packages/ Paketler göremiyorsanız önce üst menüde View/ Görünüm altından Panes/ Bölmeler seçip açılan alt menüden ya Show all panes/ Tüm bölmeleri göster ya da Zoom packages/ Paketlere yakınlaş seçip paketler bölmesini görünür hale getirelim. Packages/ Paketler bölümü menüsündeki ilk komut Install/ Yükle..

YouTube kanalımda da anlatmaya çalıştım, belki izlemek öğrenmeyi daha kolaylaştırabilir. Tıklayıp izleyebilirsiniz.

Paket yükleme

Bir diğer yolu ise Console/ Konsol bölmesinde install.pacakages() komutunu kullanmak.

install.packages(“ggplot2″, repos=”http://cran.r-project.org”, lib=”~/local/R_libs/”, dependencies = TRUE)

Paketler yükledikten sonra kodlamada kullanılmak isteniyorsa mevcut R ortamına ilave edilmelidir. Bu işlem yine birkaç türlü yapılabilir. Bence daha sonra yapmayı unutmamak adına kod satırlarının başında library(“paket ismi”) ile kullanılacak paketleri çağırmak en uygun yol.

Tabii yine konsoldan aynı komut library(“paket ismi”) ile paketi kullanılabilir duruma getirmek mümkün.

Bir diğer yol da Packages/ Paketler bölmesinde kullanmak istediğimiz paket isimleri yanındaki kutulara işaret koymak olacaktır.

Kullanmak istediğiniz paketleri Paketler penceresinde işaretleme

Kullanacağımız paketleri işaretledikten sonra konsolda ilgili library(“paket ismi”) komutunun çalışmış olduğunu görmek mümkün.

Biraz evvel “kod satırları başında” diye yazmıştım. R’ da da diğer yazılım dillerinde olduğu gibi script – yazılım parçası kullanmak mümkün. Yine diğer pek çok yazılım dilinde olduğu gibi Notepad – Not defteri kullanılıyor. R’ da bir örneğini burada altında “Script – Kodlama parçası” yazan resimde bulabilirsiniz. Ayrıca daha önce R-Giriş’ de bir kodlama(Script) dosyası nasıl hazırlanır, kaydedilir bahsetmiştim.

Önemli paketler

İhtiyacınız olan paketi Google’da arama yaparak bulma ve erişme imkanınız var. Mutlaka Cran-R sayfalarına da bakmayı unutmayın, pek çok paket ile ilgili bilgiye ulaşma imkanınız var sayfalarında: https://cran.r-project.org/ Sayfanın solundaki linklerden Packages tıklarsanız gelen sayfadan paketlere ulaşma imkanı mevcut. Ben genelde Table of available packages, sorted by name linkine tıklıyorum bu sayfada. Şimdilik sadece 16850 adet paket mevcut. hepsinden burada bahsetmek pek mümkün değil, ama bu linklerden ilerleyerek her paketin hangi işlemi nasıl gerçekleştirdiği konusunda bilgi almak mümkün. Tabii bunun için İngilizce okuyup anlıyor olmak gerekiyor. Her zaman dönüp bana sorabilirsiniz.

R studio yaptıkları işlere göre ayırmış önemli olanları

. Analiz ve Keşif

  • tidyverse : Veri bilimi için gerekli R paketlerini içerir. İçerdiği tüm paketler, temel ortak tasarım felsefesini, dil bilgisini ve veri yapılarını paylaşır. tidyverse R ortamına yüklenirse aşağıdaki paketlerle yüklenir. Eğer aşağıdaki paketlerden sadece birkaçına ihtiyacınız var ise sadece ihtiyacınız olanları R ortamına tek tek yükleyebilirsiniz. İçindeki paketler:
    • dplyr : Veri işleme dilidir. En yaygın veri işleme zorluklarını çözmemize yardımcı olan tutarlı bir fiil kümesi sağlar;
    • readr : Readr’nin amacı, dikdörtgen verileri (csv, tsv ve fwf gibi) okumanın hızlı ve kolay bir yolunu sağlamaktır. Dikdörtgen veride her sütun bir değişken, her satır bir durum veya bir kayıttır. Sanırım en çok csv uzantılı dosyaları okuruz: read_csv(): virgülle ayrılmış (CSV) dosyaları
    • purr : işlevler ve vektörlerle çalışmak için eksiksiz ve tutarlı bir araç seti sağlar.
    • ggplot2 : grafikler oluşturmak için hazırlanmıştır. Veriyi siz sağlarsınız, ggplot2’ye değişkenleri estetiğe nasıl eşleştireceğini, hangi grafiksel temelleri kullanacağını söylersiniz o da grafiği çizer. İlgili örnekleri ileride vereceğim. Kendi Covid grafikleri projemde de kullandım
    • tidyr : amacı, düzenli veriler (tidy data) oluşturmanıza yardımcı olmaktır. Verinizin derli toplu olmasını sağlarsanız, araçlarla savaşmak için daha az, analiziniz üzerinde çalışmak için daha fazla zaman harcarsınız. Verinin düzenli olduğu durumlar:
      1. Her sütun değişken ise
      2. Her sıra bir gözlem ise
      3. Her hücre tek bir değer ise
    • stringr : dizelerle(strings) çalışmayı olabildiğince kolaylaştırmak için tasarlanmıştır. stringi üstüne inşa edilmiştir. Bu paketdeki tüm işlevler str_ ile başlar ve ilk argüman olarak bir dizge vektörü alır. İleride göreceğimiz gibi str_ kalıbıyla çalışan yedi ana fiil var. Örneğin; str_count(x, pattern) desen(pattern) sayısını, ya da eşleşme sayısını sayar. str_count( c(“apple”, “banana”, “pear”, “pineapple”), “a”) komutunda apple, banana, pear ve pineapple kelimelerinde kaç kez “a” geçtiğini bulur.
    • tibble : tembel ve somurtkan veri çerçeveleridir(data.frame): daha az iş yaparlar (yani, değişken adlarını veya türlerini değiştirmezler ve kısmi eşleme yapmazlar, hiçbir zaman satır isimleri-row.names() oluşturmazlar) ve daha fazla şikayet ederler (örneğin, bir değişken olmadığında). Bu, bizi sorunlarla daha erken yüzleşmeye zorlar ve genellikle daha temiz, daha etkileyici kod yazmamıza yol açar. data.frame’ler, listeler, matrisler veya tablolar gibi girdiler için çalışır, tibble. Örnek vermek gerkirse; bir 5×3 lük tibble tibble(x = 1:5, y = 1, z = x ^ 2 + y)
    • forcats : amacı, seviye veya değerlerin sırasını değiştirmek de dahil olmak üzere faktörlerle ilgili ortak sorunları çözen bir araç seti sağlamaktır. Bir örnek vermek gerekirse; fct_reorder(): Faktör seviyelerini başka bir değişkene göre sıralayarak yeniden sıralar.

. İletişim ve Etkileşim

  • Shiny : etkileşimli web uygulamaları oluşturmayı kolaylaştıran bir R paketidir. Bağımsız uygulamaları bir web sayfasında barındırabilir veya bunları R Markdown belgelerine yerleştirebilir veya gösterge tabloları oluşturabilirsiniz. Shiny uygulamalarınızı CSS temaları, html araçları ve JavaScript eylemleriyle de genişletebilirsiniz.
  • rmarkdown : düz metin düzenleyici kullanarak biçimlendirilmiş metin oluşturan bir biçimlendirme dilidir. Bu paket, çeşitli formatlara dönüşüm işlemi için render() gibi yüksek seviyeli işlevleri içerir. render() ile bir girdi dosyası belirtilen çıktı biçimine dönüştürülür.
  • flexdashboard : R için kolay etkileşimli gösterge tabloları hazırlamaya yarar. Bir grup veri görsellini gösterge tablosu olarak yayınlamak için R Markdown kullanır. Htmlwidgets, ızgara grafikleri, tablo verileri, göstergeler ve metin açıklamaları dahil olmak üzere çok çeşitli bileşenleri destekler. Sıra ve sütun tabanlı düzenleri tanımlamak için kullanımı esnek ve kolaydır. Bileşenler, tarayıcıyı dolduracak şekilde akıllıca yeniden boyutlandırılır ve mobil cihazlarda görüntülenmek üzere uyarlanır. Görselleştirme dizilerini ve ilgili yorumları sunmak için film şeridi düzenleri içerir. Görselleştirmeleri dinamik olarak yönlendirmek için Shiny’ı kullanabilirsiniz.

. Model ve Tahmin

  • TensorFlow ™ : Makine Zekası için açık kaynaklı bir yazılım kitaplığıdır. TensorFlow’un R arayüzü, yüksek seviyeli Keras ve Estimator API’lerini ve temel TensorFlow API’yi kullanarak verimli bir şekilde çalışmanıza olanak tanır. TensorFlow ™, veri akış grafiklerini kullanan sayısal hesaplamaya dayalı açık kaynak yazılım kitaplığıdır. Grafiklerdeki düğümler matematiksel işlemleri temsil ederken, düğümleri birleştiren kenarlar aralarında iletişim kuran çok boyutlu veri dizilerini (tensörler) temsil eder. Esnek mimari, hesaplamayı tek bir API ile bir masaüstü, sunucu veya mobil cihazdaki bir veya daha fazla CPU veya GPU’ya dağıtmanıza olanak tanır. TensorFlow, ilk olarak, makine öğrenimi ve derin sinir ağları araştırması yapmak amacıyla Google’ın Makine Zekası araştırma organizasyonu içinde Google Beyin Ekibi’nde çalışan araştırmacılar ve mühendisler tarafından geliştirilmiştir, ancak sistem çok çeşitli diğer alanlarda uygulanabilir durumdadır.
  • tidymodels : Tidymodels çerçevesi, tidyverse ilkelerini kullanan modelleme ve makine öğrenimi için hazırlanmış paketler koleksiyonudur. Şimdilik, rsample, parsnip, recipes, tune ve yardstick paketlerini kapsar.
  • sparklyr : Spark’ın dağıtılmış makine öğrenimi kitaplığına bağlantılar sağlar. spark.ml paketi tarafından sağlanan makine öğrenimi rutinlerine erişmenizi sağlar. Sparklyr’in dplyr ara yüzüyle birlikte, R içinde, Spark üzerinde makine öğrenimi iş akışlarını kolayca oluşturabilir ve ayarlayabilirsiniz.

. Bağlantı ve Entegre

  • sparklyr : Yukarıda bahsetmiştik, kısaca sparklyr, Apache Spark için bir R arayüzüdür. Bu paket, yerel ve uzak Apache Spark kümelerine, “dplyr” uyumlu bir arka uca ve Spark’ın ML algoritmalarına bir arayüze bağlanır.
  • plumber : yalnızca birkaç özel yorum ekleyerek mevcut R kodunuzu web API’lerine dönüştürmenizi sağlar. (plumber linkinde başvuru- “Reference” – sayfasında kullanılabilecek fonksiyonları görebilir, bilgi alabilirsiniz)
  • reticulate : Python ile birlikte çalışabilirlik için kapsamlı bir araç seti sağlar. Reticulate, R oturumunuza bir Python oturumu yerleştirerek sorunsuz, yüksek performanslı birlikte çalışabilirlik sağlar. Çalışmalarınızın bir kısmı için Python kullanan bir R geliştiriciyseniz veya her iki dili de kullanan veri bilimi ekibinin bir üyesiyseniz, reticulate iş akışınızı önemli ölçüde kolaylaştırabilir. Paket şunları içerir:
    • R içinden Python’u R Markdown, Pyton betiklerini kaynak alarak, Pythom modüllerini içine almak da dahil olmak üzere çeşitli yollarla çağırır, Python’u bir R oturumu içinde etkileşimli olarak kullanır.
    • R ve Python nesneleri arasında çeviri (örneğin, R ve Pandas veri çerçeveleri arasında veya R matrisleri ile NumPy dizileri arasında) yapar.
    • Sanal ortamlar ve Conda ortamları dahil olmak üzere farklı Python sürümlerine esnek olarak bağlar.

R’ da Girdi – Input

Girdi-Input deyince tabii bir yazılıma birkaç türlü Girdi-Input tanımı yapmak mümkün, çünkü komut istemi ya da komut satırı da aslında bir Girdi-Input. R programını girdi komutlarını beklerken bir hazırlık yapar. Ekranda varsayılan komut istemi ‘>’ şeklinde belirir. UNIX’te shell prompt’u gibi düşünebilirsiniz bunu. Eğer UNIX’e aşinaysanız RStudio Terminal‘ini kullanabilirsiniz.. Terminal’de Shell olarak Command Prompt ya da Windows powershell seçme hakkınız mevcut, eğer Windows kullanıcısıysanız. Bu seçimi Araçlar(Tools) menüsünden Genel seçenekler(Global options) tıklayıp soldan Terminal menüsü altından yapabilirsiniz. RStudio yüklediyseniz orada da R için komut girişi yapabileceğiniz Konsol(Console) var. R’nin kodu değerlendirdiği yerdir Konsol(Console).

RStudio’ yu ilk açtığınızda, Konsol(Console) solunuzdaki bölmede görünür, ancak bunu menü çubuğundaki Görünüm(View)> Paneller(Panes) ile değiştirebilirsiniz. Konsol(console)’da > ile başlayan satır komut satırı olarak adlandırılır ve buraya komutlarınızı yazarsınız. Bir önceki yazımda komut satırı ile ilgili pek çok örnek bulabilir, veri tipleri ile ilgili bilgi sahibi olabilirsiniz. Komutlarınızı RStudio’da Kaynak(Source) kısmında toplu yazabilir, sonra bir dosya olarak saklayıp defalarca kullanabilirsiniz. Bir başka yol da Not Defteri dosyasında bu komutları saklamak. Daha sonra bu dosyayı Kaynak(Source) olarak çağırarak yine defalarca kullanabilirsiniz. İleride bunların örneklerini yapacağız.

Gelelim ikinci Girdi-Input konusuna, kullanıcıdan yazılım parametreleri için istenen Girdi-Input’ ye..

Kullanıcıdan bilgi almanın birkaç yolu var R’da;

  • readline() : terminalden bir satır okur. Kullanıcının ismini yazmasını istersek;
readline() örneği
readline() örneği
  • cat() : Sunulanları birleştirerek nesnelerin çıktısını alır. kedi baskıdan çok daha az dönüşüm gerçekleştirir.
cat() örneği
cat() örneği

Bir de ikisini birleştiren bir örnek vereyim:

readline() Örneği
readline() Örneği
cat() Örneği
cat() Örneği

Yazımın başında da söylediğim gibi R, istatistiksel hesaplama, veri analitiği ve bilimsel araştırmada yaygın olarak kullanılıyor. Ben de Covid ile ilgili projemde cat() kullanmıştım günlük rakamları veri dosyasında tutabilmek için;

cat(“\n”, “Enter today’s daily case number:”, “\n”)
t_dailycase <- scan(n=1, what=”character”)
cat(“\n”, “Enter name:”, “\n”)
t_dailycase <- as.integer(t_dailycase)
cat(“\n”, “Enter today’s total test number:”, “\n”)
t_totaltests <- scan(n=1, what=”character”)
t_totaltests <- as.integer(t_totaltests)
cat(“\n”, “Enter today’s total recovered number:”, “\n”)
t_totalrecovered <- scan(n=1, what=”character”)
t_totalrecovered <- as.integer(t_totalrecovered)
cat(“\n”, “Enter today’s total death number:”, “\n”)
t_totaldeath <- scan(n=1, what=”character”)
t_totaldeath <- as.integer(t_totaldeath)

İlk satırda kullanıcıdan cat() ile aldığım değeri ikinci satırda bir değişkene atayarak devam ediyorum. Bu yazım devam edecek ve projemi de daha detaylı sonlara doğru paylaşacağım.

R’ da Eğer – If komutu

Eğer – If komutunun sözdizimi yukarıdaki örnekte olduğu gibi küme parantezi {} kullanmadan veya C++’ daki if komutunda olduğu gibi küme parantezleri ile birlikte olabilir. Küme parantezli örneği aşağıda görebilirsiniz; benim Covid ile ilgili kodlarımdan.. En başta Excel ile grafikleri çizmeye çalışmıştım, bu sebeple Sağlık Bakanlığı Web sayfalarından topladığım veri Excel’deydi. Excel’den R’ a veri aktararak başladım. Bir müddet test amaçlı Excel ile birlikte yürümek istediğimden aynı dosyayı sıfırdan tekrar tekrar oluşturmamak için önce dosya var mı? kontrolü yapmam gerekti. Eğer dosya yoksa (!exists : not exists yani yok demek) Excel’den okuyup dosyayı hazırlıyorum. (Bu arada kendi projelerimden satırları yeşil yazmaya karar verdim. Sizce okuması zor oluyorsa lütfen haber verin.)

if(!exists(“corona_followup”)){
corona_followup <- read_excel(“C:/takip/corona-followup.xlsx”, sheet = “R”, col_types = c(“date”, “numeric”, “numeric”, “numeric”, “numeric”, “numeric”, “numeric”, “numeric”, “numeric”, “numeric”, “numeric”, “numeric”, “numeric”))
}

Eğer – if komutunda bir koşullu yürütme söz konusu; x değişkenine 10 sayısını atayalım, sonra bakalım x pozitif mi? Eğer x pozitif ise – x pozitif sayı – diye yazdıralım.

Eğer – if

Buna benzer Eğer-if komutlarının akış şemasını çizmek istersek:

Eğer-if Akış şeması
Eğer – if Akış şeması

şimdi bu şemayı örneğimize oturtursak daha iyi anlaşılacak sanırım:

Eğer-if Akış şeması
Eğer-if Akış şeması

Eğer-if’ in bir de else-yoksa şeklinde koşul gerçekleşmediğinde yapılacakları söylediğimiz kısmı var.

Eğer-if ve else örneği
Eğer-if ve else örneği

Yukarıdaki örnekte x değişkenine -5 atayıp x pozitif mi negatif mi baktık. Sonuç olarak x negatif sayı olarak yazdırıldı.

Bu örneğin Eğer-if else’ in akış şemasına bakacak olursak:

Eğer-if else Akış şeması
Eğer-if else Akış şeması

Sizlerden geri dönüş alabilmek için tam da bu noktada bırakmıştım yazmayı. Peki ya x = 0 ise ne yazdırılacak sizce?

Yukarıdaki resme bakalım, ve x’e 0 değerini atadığımızı düşünelim. Bu resimde koşulumuz ne? neye bakıyoruz? x, 0 değerinden büyük mü diye bakıyoruz değil mi? İşin başında x’e zaten 0 değerini verdiğimizden 0 > 0 olamaz değil mi? O zaman “Yanlış” yazan kolu izleyeceğiz ve neticesinde x negatif sayı diye yazılacak.

Eğer-if else örnek
Eğer-if else

Küme parantezleri ile de denedim. x’ in değeri 0 pozitif olmadığı için x negatif sayı diye yazıldı. Demek ki bir de x < 0 mı? diye bakmamız gerekecek. Bunun için ikinci bir eğer-if komutu yazmamız yeterli olacak.

if (x > 0)
print(“x pozitif sayı”) else if (x < 0)
print(“x negatif sayı”) else
print(“x = 0”)

Eğer-if ve else if örnek
Eğer-if ve else if

Aynı işi yapabilecek bir de ifelse() fonksiyonu var.
ifelse(test ifadesi, test doğru ise gerçekleşecek, test yanlış ise gerçekleşecek)
Aşağıdaki örnekte görüldüğü gibi, iç içe yazmak mümkün:

ifelse(test ifadesi, test doğru ise gerçekleşecek, ifelse(test ifadesi, test doğru ise gerçekleşecek, test yanlış ise gerçekleşecek))

ifelse örnek
ifelse() fonksiyonu

Bir de switch() fonksiyonu var. Bu fonksiyonla bir ifadeyi bir listenin öğelerine karşı test edebiliriz. İfadeden değerlendirilen değer listedeki öğeyle eşleşirse, karşılık gelen değer fonksiyonla döndürülür. Fonksiyon ilk bağımsız değişkenin bir karakter dizesi veya sayı olarak değerlendirilmesine bağlı olarak iki farklı şekilde çalışır. İfadeden değerlendirilen eğer listenin birden fazla öğesiyle eşleşirse, switch () fonksiyonu ilk eşleşen öğeyi döndürür.

switch() örnek
Switch()

İlk bağımsız değişkenin sayı olunca, switch(2,”kırmızı”,”yeşil”,”mavi”) komutunda switch fonksiyonu 2 ile yanındaki listeden 2ciyi döndürür, örnekte olduğu gibi “yeşil” ile sonuçlanır. Liste 3 elemanlı 4üncü veya 0ıncı istendiğinde bir şey geri dönmüyor.

İlk bağımsız değişkenin bir karakter dizesi olunca;

switch() örnek
Switch()

Listede ilk e harfi olan dönüyor fonksiyonla. Aşağıdaki gibi listede yerleri değiştirsek ve “a” arasak bu sefer ikinci eleman dönecek fonksiyondan.

switch(“a”, “e”=”elma”, “a”=”armut”, “k”=”karpuz”, “e”=”erik”)
[1] “armut”

Bir başka örnek vermek gerekirse; y değerine göre 2 fonksiyondan birini dönecek switch.

switch(y,
mean = mean(x),
median = median(x))

switch() örnek
Switch()

Bir de switch() akış şemasına bakalım:

switch() Akış Şeması
switch() Akış Şeması

.Devamı yarın..

İçindekiler:

Devamı yarın..

Not: Yeşil renkli yazılar projelerimde kullandığım satırlardan.. Mavi renkli yazılar ise link.

Last updated by at .