gerekli paketlerin kurulumu

# install.packages("tidyverse", "stringr", "RCurl", "XML", "plyr")
# plyr ldply fonksiyonu için gerekli
library(plyr)
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.4.0      ✔ purrr   0.3.5 
## ✔ tibble  3.1.8      ✔ dplyr   1.0.10
## ✔ tidyr   1.2.1      ✔ stringr 1.5.0 
## ✔ readr   2.1.3      ✔ forcats 0.5.2 
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::arrange()   masks plyr::arrange()
## ✖ purrr::compact()   masks plyr::compact()
## ✖ dplyr::count()     masks plyr::count()
## ✖ dplyr::failwith()  masks plyr::failwith()
## ✖ dplyr::filter()    masks stats::filter()
## ✖ dplyr::id()        masks plyr::id()
## ✖ dplyr::lag()       masks stats::lag()
## ✖ dplyr::mutate()    masks plyr::mutate()
## ✖ dplyr::rename()    masks plyr::rename()
## ✖ dplyr::summarise() masks plyr::summarise()
## ✖ dplyr::summarize() masks plyr::summarize()
library(stringr)
library(RCurl)
## 
## Attaching package: 'RCurl'
## 
## The following object is masked from 'package:tidyr':
## 
##     complete
library(XML)

buraya kendi evds api anahtarınızı girin

anahtar <- "***********"

fonksiyon ile evds xml verisi otomasyonu

# install.packages("Rcurl", "XML","plyr")

tcmb_evds<-function(veriseti,baslangic,son, anahtar) {

  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="")

  veriadresi<-paste(adres,seri,tarihler,tamamlayici, sep="")

  xmlveri <- getURL(veriadresi, .opts = list(ssl.verifypeer = FALSE))

  return(xmlveri)

}

#buraya çekmek istediğiniz verinin evds2 kodunu, veri başlangıç tarihini, veri bitiş tarihini girin#

istenilen_veri <- "TP.BO.SBIL01"
baslangic_tarihi <- "01-01-2022"
bitis_tarihi <- "23-12-2022"
xmlveriler<-tcmb_evds(istenilen_veri, baslangic_tarihi, bitis_tarihi ,anahtar)

#xmlveriler = verilerin xml formatı

xml’ i dataframe’e çevirme

df <- ldply(xmlToDataFrame(xmlveriler))
df <- as.data.frame(df)

filtreleme kısmında işe yaraması için değişken atama. Evds kodunda veriler arasında nokta varken, çekilen veride alttan tire var.

istenilen_veri_satir <- str_replace_all(istenilen_veri, fixed("."), "_" )
# istenilen_veri_satir

###########################!!!!! ÖNEMLİ!!!!!################### ##dataframe’i düzenleme## ##View(df) komutundan sonra istenilen satırların (Tarih ve Değer) satır numarasını aşağıdaki ### df <- df[c(a,b)] komutuna yazalım. Artık buna gerek kalmadı çünkü bunu da otomatik olacak şekilde ayarladım

rownames(df) <- c(df$.id)

Bu chunk’ın tamamını iki defa çalıştırmamaya dikkat edin. Satır silme komutu veri silebilir dikkat. Öyle bir durumda en baştaki “df <-” ksımından tekrar başlayın.

df <- df[c("Tarih", istenilen_veri_satir),]

df <- t(df)
df <- as.data.frame(df)
df <- df[-1,]
colnames(df)[2] <- istenilen_veri_satir

colnames(df) <- ifelse(colnames(df) %in% istenilen_veri_satir,"Değer",colnames(df) <- colnames(df))
df <- as.data.frame(df)
df$Değer <- as.numeric(df$Değer)
df <- df|>
    filter(!is.na(df$Değer))

#!!!####!!!Bu kısım tarih düzenlemesi ve deneysel. Veriden veriye farklılık olabilir , o yüzden dikkatli kullanın, asıl verinin gitmemesi için yeni kolon açtım!!!###.######### Bu kısımdaki karışıklığı da halletim fakat yine de her verideki tarih formatını bilmediğimden emin olmak için başka kolon ile devam edin

df$Tarih1 <- ifelse((nchar(df$Tarih)<10),paste(df$Tarih,"-01",sep = ""),paste(df$Tarih,"",sep = ""))

#Asıl veriyi kaybetmemek için yeni kolondan devam ediyorum. Farklı tarih formatlarını tek formata çevirip kolonun yapısını date'e çevirmeye çalışıyorum. eğer "ambigous" hatası alıyorsanız dataframe'i yaparken satır numaralarını yanlış girmiş olabilirsiniz. Veya yapamadağım bir tarihi formatı da olabilir.

str(df)
## 'data.frame':    51 obs. of  3 variables:
##  $ Tarih : chr  "07-01-2022" "14-01-2022" "21-01-2022" "28-01-2022" ...
##  $ Değer : num  4.78e+09 4.78e+09 4.76e+09 4.79e+09 4.82e+09 ...
##  $ Tarih1: chr  "07-01-2022" "14-01-2022" "21-01-2022" "28-01-2022" ...
df$Tarih1 <- as.Date(df$Tarih1, tryFormats = c("%d-%m-%Y","%Y-%m-%d"))

Verilerin grafiklenmesi

plot(df$Tarih1, df$Değer,type = "h")

ggplot(df)+
    geom_line(aes(x =Tarih1, y = Değer))+
  labs(title = istenilen_veri_satir)

Fikrin çıkış kaynağı: http://www.barissanli.com/calismalar/dersler/r/rders11.php #kaynakta eski R ile çalışıldığı için verileri düzenlemesi farklıydı. Ders notlarım, stackoverflow ve daha birçok siteden araştırdım.