TCMB’nin EVDS sistemi bizi iktisatçılar için bir nimet. Bankanın sitesinde bu veriseti ve grafikleri görüntüleyebildiğiniz gibi Excel’e aktarmanın yolu da anlatılıyor. Ben ise bu verileri R’a çekmekten bahsedeceğim, bu sayede grafikleri çok daha fazla özelleştirme imkanına sahip olunuyor çünkü. İlk olarak TCMB EVDS’nin sitesine üye olmak ve kullanıcı ekranından API anahtarı almak gerekiyor. Üstteki menüden “Giriş Yap” kısmından giriş yaptıktan sonra orada ismimiz çıkıyor, tekrar tıklayıp “Profil” kısmına giriyoruz. Altta “API Anahtarı” butonu mevcut. Tıkladığımızda aldığımız anahtarı ileride R’a tanımlayacağız. Önce gerekli paketleri yüklemekle başlıyoruz: ```R install.packages(“XML”) install.packages(“RCurl”) install.packages(“plyr”) library(XML) library(RCurl) library(plyr) ``` İlk olarak aldığımız API anahtarını bir değişken olarak tanımlamak gerekiyor: ```R anahtar <- “XXXXXXXXXXXXX” ``` Daha sonra aşağıdaki fonksiyonu kullanıyoruz. Bu fonksiyonu yazan Barış Sanlı, ben de [sitesinden](https://web.archive.org/web/20191026000214/http://barissanli.com/calismalar/dersler/r/rders11.php) aldım. Frekans kısmını ben ekledim, geri kalan her şey için benim de çok şey öğrendiğim bu siteye bir bakmanızı tavsiye ederim. ```R tcmb_evds <- function(veriseti,baslangic,son, anahtar, frekans) { adres=”https://evds2.tcmb.gov.tr/service/evds/” seri=paste(“series=”, veriseti, sep=””) tarihler=paste(“&startDate=”, baslangic,”&endDate=”, son, sep=””) tamamlayici=paste(“&type=xml&key=”,anahtar, sep=””) frekansi=paste(“&frequency=”, frekans, sep=””) veriadresi <- paste(adres,seri,tarihler,tamamlayici, frekansi, sep=””) xmlveri <- getURL(veriadresi, .opts = list(ssl.verifypeer = FALSE)) return(xmlveri) } ``` Basitçe düşünürsek fonksiyon normalde TCMB’nin kendisinin oluşturduğu XML tablosunu oluşturuyor ve R’a aktarıyor. Örnek vermek gerekirse dolar kuru için 01.01.2005 ve 01.02.2017 arasındaki veriseti şu şekilde oluşuyor, fonksiyon bunu otomatik hale getirmekte. Dikkat ederseniz işi fazla karıştırmamak için “avg” olarak tanımlı aggregationTypes değişkeni ekli değil. İlgilenenler biraz kurcalayınca eklemenin yolunu bulacaktır. https://evds2.tcmb.gov.tr/service/evds/series=TP.DK.USD.S.YTL&startDate=01-01-2005&endDate=01-02-2017&type=xml&key=XXXXXXXX&aggregationTypes=avg&formulas=1&frequency=8 Artık fonksiyon tanımlı ve aşağıdaki komut bize XML formatında veri çekmek için hazır: ```R tcmb_evds(“cekilecek veri”, “baslangic tarih”, “bitis tarihi”, anahtar, FREKANS) ``` Merkez Bankası hangi parametreyi, nasıl tanımlamış derseniz eğer; Bizim fonksiyonumuzda gözlem parametreleri ve formül parametreleri yok, ama dediğim gibi, algoritma aşağı yukarı belli olduğundan eklenebilir. Barış beyin yazdığı orijinal fonksiyon üzerinden giderek ben de frekans kısmını eklemiştim. **Seri kodları** için standart bir gösterim yok maalesef. TCMB’den bakmak gerekiyor. Kurlar için aşağı yukarı belli ama. _TP.DK.USD.A_, _TP.DK.EUR.A_ vs. Örnek olarak Japon Yeni kurunu(alış) çekelim, frekans günlük olduğu için “1” yazıyoruz. ```R JPY <- tcmb_evds(“TP.DK.JPY.A”, “01-01-2015”, “01-01-2018”, anahtar, 1) ``` JPY adında XML dosyasını çektik fakat pek anlam ifade etmiyor. Bunu XML formatından R’a uygun dataframe’e çeviriyoruz. ```R JPY <- xmlToDataFrame(JPY) ``` Aslında gayet anlaşılır bir formata geldi ama gereksiz kolonları da kaldıralım. ```R JPY$text <- NULL JPY$UNIXTIME <- NULL ``` Aşağı yukarı şöyle bir tablo oluştu, dikkat haftasonları boş. Önce tarihi “Date” formatına getirelim. ```R JPY$Tarih <- as.Date(JPY$Tarih,format = “%d-%m-%Y”) ``` Kuru is numerik yapıyoruz. ```R JPY$TP_DK_JPY_A<-as.numeric(as.character(JPY$TP_DK_JPY_A)) ``` Kur bilgisinin olmadığı haftasonu vb. tarihleri(NA) kaldırıyoruz, newJPY olarak kaydediyoruz. ```R newJPY <-JPY[complete.cases(JPY), ] ``` Artık grafiğe hazırız. Biraz da süsleyelim. ```R library(tidyverse) library(scales) library(ggthemes) ggplot(newJPY, aes(x=Tarih, y=TP_DK_JPY_A))+ labs(title = “JPY/TRY”, subtitle = “2015-2017”, caption = “(TCMB Verileri, 100 Japon Yeni = …)”)+ ylab(“Kur\n”)+ xlab(“\nTarih”)+ scale_x_date(breaks = pretty_breaks(10))+ theme(text=element_text(size=10, family=”Verdana”), axis.title=element_text(size=7))+ geom_line(color=”blue”)+ theme_economist() ``` **Mevsimsellik Etkisi** Bazı verilerin yapısı doğası gereği çeşitli mevsimsellik özellikleri taşıyor. Altında yatan bir trend, rastgele değerler ve mevsimsellik veri setini etkileyebiliyor. Ben de TCMB EVDS’den işsizlik verilerini önceki yazıdaki fonksiyonu kullanarak çekecek ve mevsimsel etkiyi gözlemeye çalışacağım. Öncelikle gerekli paketleri(hatta daha fazlasını) R’a yüklüyorum, eğer eksik olan varsa install.packages(“paket adı”) komutu ile önce paketi indirmeniz gerekiyor. ```R library(XML) library(RCurl) library(plyr) library(tidyverse) library(zoo) library(ggthemes) library(scales) library(TTR) library(xts) ``` Önceki yazıda aldığım anahtar hâlâ tanımlıysa sorun yok, yoksa tekrar tanımlıyorum ve yine önceden kullandığım tcmb_evds fonksiyonunu çalıştırıyorum.  Merkez Bankası seriye “TP.TIG07” adını vermiş, 2010-2018 aylık olarak çektiğim için frekansı yine EVDS tanımına göre 5 olarak giriyorum. ```R unemp<-tcmb_evds(“TP.TIG07”,“01-01-2010”,“01-01-2018”,anahtar, 5) ``` XML formatında yükledik, data.frame’e çeviriyoruz. ```R UNEMPTR <- xmlToDataFrame(unemp) ``` Gereksiz kolonları kaldırıyorum. ```R UNEMPTR$text <- NULL UNEMPTR$UNIXTIME <- NULL ``` Seri adını “UNEMPTR” olarak değiştiriyor ve numerik hale getiriyorum. ```R UNEMPTR = rename(UNEMPTR, UNEMP=TP_TIG07) UNEMPTR$UNEMP <- as.numeric(as.character(UNEMPTR$UNEMP)) ``` R yıl-ay verisini tarih olarak pek tanımaya istekli değil. Çözüm olarak sonuna -01 ekliyorum her ayın. Bu sayede bir tarih vektörü oluşturabiliyorum. Bu vektörü de oluşturduğum UNEMPTR data.frame’in içine atıyorum. ```R Tarih <- paste(UNEMPTR$Tarih,”-01″,sep=””) Tarih <- as.Date(Tarih, format = “%Y-%m-%d”) UNEMPTR$Tarih <- Tarih ``` Eksik değerleri atarak en son versiyonu da oluşturuyorum. ```R UNEMPTRFINAL <- UNEMPTR[complete.cases(UNEMPTR), ] ``` Biraz tema vs. kullanarak en son veriyi grafiğe döküyorum. ```R ggplot(UNEMPTRFINAL, aes(x=Tarih, y=UNEMP))+ geom_line()+ scale_x_date(breaks = pretty_breaks(9))+ theme_wsj() ``` ## Mevsimsellik Etkisi Şimdi iş geldi mevsimsellik, trend vb. parçalara ayırmaya. Bunun için zaman serisine çevirmemiz gerekiyor. Bu konuda baya uğraştım ve en sonunda şu fonksiyonla çözümü buldum. 12 (aylık) periyot ile 2010 başından itibaren UNEMP verisi ile zaman serisi oluşturdum. ```R UNEMPTS2<-ts(UNEMPTRFINAL$UNEMP,frequency=12,start=c(2010,1)) ``` Mevsimsellik vb. etkileri R otomatik ayırabiliyor. Burada önemli olan etkilerin “additive” mi “multiplicative” mi olduğu. Eğer değerler büyüdükçe mevsimsellik etkisi de büyüyorsa multiplicative denilebiliyor kabaca. Kabaca ama, bu önemli. Mevsimsellik etkisini ayırmak için stl fonksiyonunu kullanıyorum ve grafiğe döküyorum. ```R stlUNEMP <- stl(UNEMPTS2, “periodic”) plot(stlUNEMP) ``` Görüldüğü gibi işsizlik trendinde bir artış ve kışları işsizlikte artış var. Mevsimsel işsizlik. stlUNEMP serisinde her kolonda biri olmak üzere mevsimsellik, trend vb. var. Bunları da ayırmak isterseniz şu komutlar yeterli. ```R mevsimsellikUNEMP <- stlUNEMP$time.series[,1] trendUNEMP <- stlUNEMP$time.series[,2] randomUNEMP <- stlUNEMP$time.series[,3] ``` Mevsimsellik etkisinden arındırmak için (additive varsaydım); ```R unempenson <- UNEMPTS2-mevsimsellikUNEMP plot(unempenson) ``` Durum kısaca böyle. Ben bu noktada en çok TCMB verisini ayarlarken zorlandım. Umarım eksik bir veri yoktur, yoksa kayma oluyor. En çok sıkıntı tarih kısmında oluyor.