14 Ekim 2016 Cuma

SQL Server 2016 Yenilikleri - 4 (Always Encrypted)

SQL Server 2016 ile birlikte irili ufaklı bir çok yenilik duyuruldu.  Bu yeniliklerden bazıları gerçekten diğerlerinden çok daha farklı bir etkiye sahip. Önceki yazılara şu linklerden ulaşabilirsiniz:

SQL Server 2016 BI Yenilikleri - Hızlı Bakış
http://www.abdullahkise.com/2016/09/sql-server-2016-bi-yenilikleri-hzl-baks.html

SQL Server 2016 Yenilikleri - 1 (In-Memory DW - Updatable ColumnStore Indexes)
http://abdullahkise.blogspot.com.tr/2016/03/sql-server-2016-yenilikleri-1-in-memory.html

SQL Server 2016 Yenilikleri - 2 (In-Memory OLTP Geliştirmeleri)

SQL Server 2016 Yenilikleri - 3 (Operational Analytics)

SQL Server 2016 yenilikleri serimizin bu bölümünde en etkileyici yeniliklerden biri olan Always Encrypted özelliğini ele alacağız.

Nedir Bu Always Encrypted?


Bu özellik yeni bir veritabanı şifreleme yöntemidir. Veritabanı şifreleme yöntemleri ile hassas verileri şifreleyip koruyabilirsiniz. Şifrelenmiş veriler ilk bakışta anlamsız ifadelerle temsil edilir ve üzerinde çalışılması engellenmiş olur. Kredi kartı bilgilerini, kişisel kimlik bilgilerini veya sizin için önemli olan ve kolayca kullanılmasını istemediğiniz diğer verileri hassas veri olarak düşünebilirsiniz.

SQL Server'ın önceki versiyonlarında şu veritabanı şifreleme yöntemleri mevcuttu:

  1. Belli alanları korumak istediğinizde kullanacağınız Kolon Seviyesinde Şifreleme (Column-Level Encryption) yöntemi: http://www.abdullahkise.com/2013/09/kolon-satr-bazl-sifreleme-column-level.html
  2. Yedekler dahil tüm veritabanını korumak istediğinizde kullanacağınız Dosya Seviyesinde Şifreleme (File-Level Encryption - Transparent Data Encryption) yöntemi: http://www.abdullahkise.com/2014/02/dosya-database-bazl-sifreleme.html
  3. Sadece yedeklerin farklı bir serverda çalışmasını engellemek istediğinizde kullanacağınız Yedek Şifreleme (Backup Encryption) yöntemi: http://www.abdullahkise.com/2014/08/sql-server-2014-yenilikleri-5-backup.html
Veri şifreleme ve şifre çözme iş yükü, kullanım yoğunluğuna ve şifreleme tekniğine bağlı olarak kritik seviyelere ulaşabilir. Önceki versiyonlarda kullanılan yöntemlerde tüm iş yükü SQL Server üzerindedir. Kritik seviyede seyir eden serverlar bu iş yükünü kaldıramayabilir. Çoğu zaman hem yönetiminin kritik ve zor olması, hem de sisteme ek yük getirmesi nedeni ile şifreleme yöntemleri yerine sıradan yetkilendirme prosedürleri kullanılmaktadır. Ancak sıradan yetkilendirme prosedürleri veri güvenliğini sağlamak için tek başına yeterli değildir. Özellikle veri yer değiştirdiğinde kontrol elden gider.

SQL Server 2016 ile birlikte duyurulan Always Encrypted yöntemi şifreleme ve şifre çözme iş yükünü SQL Server'a değil, istemcilere yükler. Veritabanındaki şifrelenmesini istediğiniz alanlar daima şifreli olarak durur. En yetkili kullanıcılar bile eğer istemezseniz bu verilerin açık halini göremez. Bu yöntem sayesinde verinin sahibi ve veriyi yöneten kolayca ayrılır. 

Always Encrypted - SQL Server 2016 Yenilikleri

Nasıl Çalışır?


Veriler, istemciye şifreli gider. Geliştirilmiş Ado.NET kütüphanesi istemci tarafındaki anahtarı kullanarak şifreyi çözer ve veriyi istemci uygulamasının açık şekilde görmesini sağlar. Uygulama tarafından açık şekilde gönderilen veri aynı şekilde istemci tarafında şifrelenir ve veritabanına şifreli olarak gider. 

İstemci ve veritabanı arasındaki bu süreç otomatik olarak çalışır. .NET 4.6 ile gelen geliştirilmiş Ado.NET kütüphanesi bağlantı cümlesine eklenen bir ifade ve depolanan anahtar yardımıyla işlemleri otomatik olarak yerine getirir. 

Column Master Key olarak ifade edeceğimiz anahtar istemci uygulamların ulaşabileceği bir yerde örneğin; Windows Certificate Store, Azure Key Vault veya bir "hardware security module" (anahtarı yönetmek için kullanılan özel cihazlar) içinde depolanabilir. Ancak bu anahtar SQL Server üzerinde depolanmaz. SQL Server üzerinde sadece Column Master Key tarafından korunan (şifrenmiş) Column Encryption Key tutulur. Column Encryption Key de belirttiğimiz kolonları korur (şifreler).

Diğer şifreleme yöntemlerinde olduğu gibi bu yöntemde de katmanlı bir koruma söz konusu. Yani seçtiğiniz kolonları Column Encryption Key şifreliyor. Column Encryption Key SQL Server'da depolanıyor. Bu önemli anahtarı da istemci tarafında depolanan Column Master Key şifreliyor. Column Master Key'e sahip olan istemciler verileri otomatik olarak temiz haliyle görür. Geri kalan herkes sadece şifrelenmiş metni görür. Bu şekilde şifreleme ve şifre çözme iş yükü istemci tarafına konumlanır. Veritabanında belirtiğimiz kolonlar için sadece şifreli veri yer alır.

Genel olarak istemci tarafında şu değişiklikler yapılır:
  • Connection Stringse "Column Encryption Setting=ENABLED" ifadesi eklenir.
  • Parametreler SqlParameter nesnesi ile gönderilir.
  • Anahtarın (Column Master Key) depolandığı yere göre kodlamada bir miktar farklılık olmaktadır. Eğer anahtar istemci makinedeki Windows Certificate Store'da depolanıyorsa bağlantı cümlesi ve parametre gönderme prensibine uymak yeterli. Ancak diğer depolama yöntemlerinde ruhsat (authorize) alabilmek için bir miktar kod yazmak gerekiyor.

Nasıl yapılır?


Tüm adımları kolayca atmanızı sağlayan Always Encrypted sihirbazını kullanabilirsiniz. T-SQL veya PowerShell komutları da kullanılabilmektedir. İsterseniz her bir nesneyi ayrı ayrı kendi sihirbazları ile oluşturabilirsiniz. Nesnelerin kendi sihirbazları bir miktar esneklik sağlamaktadır.

Biz örneğimizde Always Encrypted sihirbazından yardım alacağız. Hadi başlayalım!

Öncelikle üzerinde çalışmak için bir veritabanı ve tablo oluşturalım. Sonra bu tabloya iki satır veri ekleyip görüntüleyelim :

CREATE DATABASE AlwaysEncryptedDB
GO
USE AlwaysEncryptedDB

CREATE TABLE MusteriBilgileri
(
       Id int identity(1,1) PRIMARY KEY,
       Ad nvarchar(50),
       KartNo char(19)
)

INSERT INTO MusteriBilgileri VALUES ('Abdullah Kise','123 123 123 123'),
                                    ('Veli Uçan','897 897 897 897')


SELECT * FROM MusteriBilgileri

SQL Server 2016 Yenilikleri - Tablo

Yukarıda işaretlediğim KartNo alanı bizim için hassas veri olsun. Bu alanı şifreleyeceğiz.
Şifreleme sihirbazını başlatmak için 'Object Explorer'daki tablomuzu sağ tıklayıp açılan menüden 'Encrypt Columns'ı seçiyoruz.

SQL Server 2016 Yenilikleri - Encrypt Columns

Sihirbazın ilk sayfasında kısa bir bilgilendirme var. İkinci sayfasına geçerek şifrelemek istediğimiz kolonları seçelim. Bu örnekte KartNo kolonunu şifreleyeceğiz:

SQL Server 2016 Yenilikleri - Always Encrypted Wizard - Column Encryption Key

KartNo kolonu için şifreleme tipini (Encryption Type) Deterministic olarak belirtiyoruz. Bu kolonun şifrelenmesi için bir 'Column Encryption Key (CEK)'e ihtiyacımız olacak. Daha önce oluşturduğumuz bir CEK varsa listeden seçebiliriz. Yeni bir tane oluşturmak için yanında (New) ifadasi olan seçeneği seçiyoruz.

Şifreleme tipi hakkında kısa bir bilgi verelim. İki tür şifreleme tipi mevcut:

  1. Deterministic yöntemde temiz veriye göre hep aynı şifrelenmiş değer elde edilir. Bu sayede şifrelenmiş verileri sıralamak, gruplamak, birleştirmek ve indekslemek mümkün olur. Ancak bu yöntem şifreleme paternini keşfetmeyi ve veri hakkında tahminde bulunmayı kolaylaştırır. Özellikle şifrelenen alan çok az benzersiz değer içeriyorsa tahmin etmesi çok kolay olur. Mesela True/False veya cinsiyet, evlilik durumu gibi alanlar kolayca tahmin edilebilir.
  2. Randomized yöntemde paterni bulmak daha zor olur. Sürekli aynı veri için aynı şifreli değer elde edilmez. Daha güvenlidir. Ancak bu durumda sıralamak, gruplamak, birleştirmek ve indekslemek mümkün olmayacaktır.
Bu adımda seçimlerimizi yapıp bir sonraki adıma geçiyoruz. CEK, SQL Server tarafında duran bir anahtardır. Bu anahtarı korumak (şifrelemek) için Column Master Key (CMK) oluşturmamız gerekir. CMK istemci uygulamaların erişebileceği şekilde depolanır.

SQL Server 2016 Yenilikleri - Always Encrypted Wizard - Column Master Key

Daha önce oluşturduğumuz bir CMK'yı seçebiliriz veya yukarıdaki gibi yeni bir tane oluşturabiliriz. 

Yeni bir tane oluştururken CMK'nın nerede depolanacağını belirtiyoruz. Burada iki seçenek var fakat CMK'nın kendi sihirbazını kullanarak daha fazla seçeneğe erişmek mümkün. Bir CMK, Windows Certificate Store, Azure Key Vault veya bir "hardware security module" (anahtarı yönetmek için kullanılan özel cihazlar) içinde depolanabilir.

Sonraki adımda bir uyarı alıyoruz. Var olan tablodaki kolonları sonradan şifrelemek istediğimiz için sihirbaz bazı adımları bizim yerimize atacak. Bu adımlar; kolonu şifrelenmiş bir tablo oluşturmak, verileri bu tabloya şifreleyerek taşımak, eski tabloyu silmek ve yeni tablonun adını eskisi olarak atamak şeklindedir. Uyarıda bu işlemler esnasında tablo kullanılırsa veri kaybı olabilir diyor. Yani bu işlemi rastgele bir zamanda yapmamak gerekir. Tablonun kullanılmadığından emin olmak gerekir.

SQL Server 2016 Yenilikleri - Always Encrypted

İlerleyen adımlarda yaptığımız ayarların özetini ve çalıştırdığımızda işlemin sonucunu görebiliriz.

Şifreleme işlemi başarıyla tamamlandığında veritabanı içerisinde bir takım nesneler oluşur. Nesnelerin Create scriptlerine göz atarak ne gibi kodlar kullanıldığını inceleyebilirsiniz. İsterseniz bu nesnelerin kendi sihirbazlarını veya ilgili kodları kullanarak adım adım Always Encrypted özelliğini aktif edebilirsiniz.

SQL Server 2016 Yenilikleri - Always Ecrypted - Şifreleme

Always Encrypted özelliğini aktif ettik ve tablomuzdaki KartNo alanını şifreledik. Tablonun önceki ve sonraki haline bir bakalım:

SQL Server 2016 Yenilikleri - Always Encrypted - Şifreleme Sonucu

Artık sysadmin bile bu alanı ruhsat (authorize) almadan göremez. Bu ruhsat Column Master Key (CMK) ile alınabilir. İstemciler CMK yardımıyla verileri otomatik olarak şifresiz görür ve üzerinde çalışabilir.

Örneğimizde CMK'yı Windows Certificate Store üzerinde oluşturmuştuk. Bu bizim kendi makinemizde oluştu. CMK'yı görmek isterseniz Run/certmgr.msc veya Run/certlm.msc ile açılan pencereden Personal klasörü altındaki Certificate klasörüne bakabilirsiniz.

SQL Server 2016 Yenilikleri - Always Encrypted - Windows Certificate Store
CMK kendi makinemizde oluştuğu için kendi makinemizdeki bir istemci verilerin açık haline otomatik olarak erişebilir. Test etmek için istemci uygulaması olarak SSMS'i kullanabiliriz. 

Tek yapmamız gereken SSMS ile bağlanırken Options/Additional Connection Parameters tabından bağlantı cümesine ek bir ifade belirtmek. Bu ifade "Column Encryption Setting=ENABLED" ifadesidir. Bu şekilde bağlandığımızda artık şifreleme ve şifre çözme işlemi otomatik olarak gerçekleştir. Veritbanında verileri şifreli olmasına rağmen SSMS üzerinde bu bağlantı için verinin şifresiz halini görürüz.

SQL Server 2016 Yenilikleri - Always Encrypted - Column Encryption Settings

Veritabanına bu bağlantı üzerinden erişip veriyi bu kolon dahil dönüştürmek istediğimde şifrelediğim kolonla ilgili hata alıyorum.Sanıyorum SSMS'in bağlantı sağlayıcıları ile ilgili geçici bir durum. 

İstemci tarafından temiz veri girişinin otomatik olarak şifrelendiğini test etmek için uygulama yazmak yerine Import-Export sihirbazını kullanıyorum. Siz de Object Explorer / Veritabanınız (örneğimizde AlwaysEncryptedDB) / Task / Import Data ile bu sihirbazı çalıştırabilirsiniz.

Sihirbazın ilk adımında veri kaynağını seçiyoruz. İkinci adımında ise şifreleme yaptığımız veritabanını (örneğimizde AlwaysEncryptedDB) seçiyoruz. Ancak bağlantı sağlayıcısının .NET Provider olmasına dikkat edelim ve Column Encryption Setting parametresini Enabled olarak değiştirelim.

Import Export

Sonraki adımlarda kaynak ve hedefteki kolon eşleştirmesini yaptıktan sonra aktarımı başlatalım. Testimizde veri aktarımı şifreli kolon dahil başarıyla gerçekleşti. Kayıtları şifreli ve otomatik şifre (Column Encryption Settings=Enabled) çözen bağlantı üzerinde listelediğimizde testin başarılı olduğunu görebiliriz.


Konu ile ilgili ayrıntılı dökümanlara şu adresten erişebilirsiniz:

Sonuç olarak bu konu ile ilgili şunları söyleyebiliriz; 

SQL Server 2016 ile birlikte gelen Always Encrypted özelliği yeni bir veritabanı şifreleme bakış açısı sunuyor. Önceki yöntemlerde şifreleme ve şifre çözme iş yükü SQL Server üzerindeyken bu yöntemde iş yükü tamamen istemci üzerinde. Veritabanında veri şifreli halde bulunuyor. CMK'dan ruhsat alan istemci şifreli veriyi alıp otomatik olarak şifresini çözüyor ve üzerinde çalışabiliyor. Veriyi yöneten ve veriyi okuyan güvenle ayrışabiliyor. Yani bu yöntem diğerlerinden farklı olarak daha az şifreleme iş yükü, daha güvenli veri yönetimi imkanı sunuyor.

3 Ekim 2016 Pazartesi

Adım Adım Veri Bilimi - 1 (R Dünyasına Giriş)

Microsoft son zamanlarda Advanced Analytics ve Big Data başlıklarına odaklanmış durumda. Bu başlıklardaki ihtiyaçlara cevap verecek yeni ürünler-özellikler Microsoft tarafından geliştirilmekte ve hem lokalde hem de bulutta hızla duyurulmakta.

Bu başlıkların odak noktası veri analizi. Veri analizi denilince de akla ilk gelen şeylerden biri de R oluyor haliyle. Peki nedir bu R? Ne işe yarar? Microsoft bu konuda neler yapıyor?

Bazı temel soruların cevaplarını R dünyasına giriş niteliği taşıyan bu yazımızda ele alalım istedim.


R Nedir?


R (ar) denildiğinde akla birkaç şey birlikte gelir. Bunlar R dili, R dilinin çalıştığı platform (distribution veya engine diye düşünebilirsiniz.), R paketleri ve geliştirme ortamı (IDE).

R programlama dili (ilk çıkışı 1993 - Yeni Zelanda Auckland Üniversitesi'nde araştırma projesi olarak) 20 yılı aşkın süredir kullanılan ve geliştirilen açık kaynak kodlu bir script dilidir. İstatistiksel hesaplamalar, tahmine dayalı analizler (Predictive Analytics), veri görselleştirme ve raporlama alanları söz konusu olduğunda en çok tercih edilen dildir. Karmaşık istatistiksel hesaplamalar yapıp sonuçları çok geniş yelpazedeki görsellerle sunabilme yeteneği olduğu için özellikle üniversitelerce desteklenmiştir. İstatistiksel Analiz ve Veri Bilimi çalışmaları için yoğun olarak tercih edilen bu dil bir tür standart haline gelmiştir.

R Kime Ait?


R Kuruluşu kar amacı gütmeyen bir organizasyondur. Bu organizasyon çeşitli ülkelerdeki üniversiteler ve kurumlar tarafından desteklenmektedir. Dünya çapındaki bağışçılar sayesinde "Development Core Team - Geliştirme Çekirdek Ekibi" R dilini ve ortamını ayakta tutmakta dahası gittikçe güçlendirmektedir. Arkasında canlı ve geniş bir topluluk desteği mevcuttur.
R, Free Software Foundation'ın GNU General Public License (GNU Genel Kamu Lisansı) altında açık kaynak kod olarak dağıtılmaktadır. Ücretsizdir.

Ayrıntılı bilgilere şu linkten ulaşabilirsiniz:
https://www.r-project.org/

Farklı R Dağıtımları Mevcut Mu?


R'ın imkanlarını içeren farklı ticari ve kurumsal dağıtımlar da mevcut. Mesela Microsoft'un satın alıp geliştirdiği REvoluation R (yeni adı Microsoft R Open), paralel işlem yeteneğine sahip ParallelR, R+ ve RStat bunlardan bir kaçı.

R dilini farklı R dağıtımları (platform - ortam) üzerinde kullanabilirsiniz. Dağıtımlar temel kütüphaneler bakımından bir biri ile %100 uyumludur. Ancak aralarında performans, R kodlarının paylaşım kolaylığı, ek kütüphaneler ve hata ayıklama başlıklarında farklılıklar olabilmektedir. Bu dağıtımlar Windows, Mac ve Linux üzerinde çalışabilmektedir (kısıtlar ve farklılıklar olabilir).

Gücünü Nereden Alır?


R'ın yetenekleri çalışma ortamına yüklenen paketlerle genişletilebilir. Bu paketler çeşitli analiz teknikleri, gelişmiş grafik özellikleri, farklı türden dosya okuma/yazma gibi bir çok yeteneği hizmetinize sunar. Şuanda (Ekim 2016) CRAN (Comprehensive R Archive Network - Geniş Kapsamlı R Yazılım Ağı) havuzunda erişilebilir durumda  9273 yetenekli R paketi yer almaktadır. Bu paketleri ortamınıza yükleyebilir içlerindeki istatistiksel ve görsel kütüphaneleri kullanarak derin veri analizi çalışmaları yürütebilirsiniz. Yeni paketler geliştirmek ve bu havuzu genişletmek de mümkün. Hatta gerektiğinde C, C++, Fortran programlama dilleriyle yazılmış kodları da kullanarak çalışma zamanında yoğun hesaplama gereken görevler icra edilebilmektedir.

Alfabetik sıraya göre CRAN paketlerine şu linkten ulaşabilirsiniz :
https://cran.r-project.org/web/packages/available_packages_by_name.html

Başlıklara göre bakmak isterseniz şu linki kullanabilirsiniz:
https://cran.r-project.org/web/views/

R Kodları Nereye Yazılır?


R ortamını kurduktan sonra komut satırı üzerinde veya çeşitli grafik arayüzlü  geliştirme ortamlarında (IDE) üzerinde çalışmaya başlayabilirsiniz. R kodlarını kurulum yapmadan çalıştıran websiteleri de mevcut. Grafik arayüzlü geliştirme ortamlarından bazıları şunlar; R Tools for Visual StudioRStudioJava Gui for RRattle GUIStatistical Lab vs.

Ekosistemdeki Yeri Nedir?


R konusu istatistiksel veri analizi, veri madenciliği, makine öğrenmesi, veri yönetimi, veri bilimi, büyük veri, veri görselleştirme gibi analiz ve raporlama odaklı daha bir çok konu ile ilişkilidir. Dolayısıyla bazı teknolooji şirketleri ürünlerinde R'a destek vermektedir veya tamamen R temelli hizmetler sunmaktadır. R her geçen gün daha da popüler olmaktadır. Odağı veri analizi olmasına rağmen araştırmaya göre popülerlik sıralamasında 6. sırada görünüyor.



Microsoft da son zamanlarda bu alanda ciddi adımlar atmakta. Hatta geçtiğimiz sene (2015) REvolution R dağıtımını kendi bünyesine kattı. Performans, geliştirme ortamı, kod paylaşımı ve hata ayıklama gibi çeşitli başlıklarda iyileştirmeler yaparak Microsoft R Open adıyla açık kaynak R dağıtımını yayınladı. şu linkten bilgi alabilirsiniz:
https://mran.revolutionanalytics.com/

Microsoft'un R dünyasına yakınlaşmasının nimetlerini yeni ürünlerinde görmek mümkün. SQL Server 2016 özelliklerinden R in Database adıyla duyurulan yenilik sayesinde R kodlarını veritabanı içerisinden çağırıp kullanmak mümkün. Paralel çalışma imkanı olan R Server'ın lokal kurulumu, Azure ML içerisinde R kodlarıyla işlem yapılabilmesi, Azure HDInsight üzerinde R Server oluşturma imkanı olması, Azure üzerinde Hadoop dağıtımlarında kullanılabilmesi, Power BI ve SSRS üzerinde R görsellerinin sunulabilmesi gibi çeşitli senaryolar da mevcut.

Nereden başlayabilirim?


R dilini öğrenmek oldukça kolay. Ancak uzman olmak biraz zor. Çünkü bir çok kütüphanenin kullanımı yoğun istatistik ve matematik bilgisi gerektiriyor. Kodlarla çalışmanın doğal yan etkileri de var tabi. Yazmak oldukça yavaş, okumak ve değişiklik yapmak da çok kolay sayılmaz. Ancak koca koca analizleri komut satırları ile ifade edip dağıtmak oldukça pratik.

Bu konuda bir çok eğitim sitesi bulmak mümkün. R dilini çeşitli yönlerinden ele almaktalar. Temelleri konusunda hemen hemen aynı şeyleri her yerde görebilirsiniz. Bizler de serinin devamında daha kısa özetlerle temellere değineceğiz.

R ile ilgili ne gibi başlıklar var diye merak edenler şu siteye bir göz atabilirler:
http://www.r-tutor.com/

Haydi kurulumla başlayalım!

R ile çalışmaya başlamak için 2 yol sunayım:

1. Yol : CRAN (Comprehensive R Archive Network)

  • Kurulum
    • Şu linkten tüm muhtemel indirme linklerine erişebilirsiniz : https://cran.r-project.org/mirrors.html
    • Ben Turkiye altında görünen Pamukkale Üniversitesi'ne ait olan şu linki tıkladım: https://cran.pau.edu.tr/
    • Açılan linkte işletim sisteminize ait linki tıklayalım (ben Windows seçtim). 
    • Yeni açılan sayfada şu base linkini tıklayarak R platformunu indirip kurabilirsiniz: https://cran.pau.edu.tr/bin/windows/base/
    • Eğer varsayılan ayarlarda kurulum yaptıysanız R logolu kısayol masaüstünüze gelecektir. Kısayolu tıklayıp R kodlarını yazmaya başlayabilirsiniz. 
    • print("Merhaba Dünya") yazıp sonra Enter tuşuna basarak komutu çalıştırın
  • Not: Grafik arayüzü gelişmiş başka bir ürünle çalışmak isterseniz RStudio veya R Tools for Visual Studio ile çalışmanızı öneririm. RStudio'yu şu linkten indirebilirsiniz : https://www.rstudio.com/
2. Yol : MRAN (Microsoft R Application Network)


Serinin devamında ikinci seçenek üzerinden ilerleyerek ekran görüntüleri paylaşacağım. Ancak siz kendinizi rahat hissettiğiniz bir ortamda çalışabilirsiniz. Odaklanacağımız giriş seviyesi komutlar tüm dağıtımlarda çalışacaktır.

R'ı özetlersek; Başarılı veri analizleri yapabilmek için gereklidir. Hızlıca öğrenilebilir fakat ustalaşması zaman alır. Standart haline gelmiş, yetenekli ve güçlü bir ortam sunar. Destekçisi ve takipçisi çoktur.