XML и RCharts

R позволяет достаточно просто получать информацию из внешних источников данных и визуализировать её.  В частности, мы можем построить график курсов доллара и евро к рублю за интересующий нас период времени, используя данные с сайта ЦБ. Мы получим файл в формате XML, обработаем его и создадим красивый интерактивный график.

Загрузим необходимые библиотеки:

require(XML)
require(rCharts)
require(dplyr)

Напишем функцию для получения данных из ЦБ и получим данные по курсам доллара и евро с 1 января 2007 по 31 марта 2016:

downloadcbr<-function(date1,date2,ticket) {
 result<-paste0('http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1=',date1,
    '&date_req2=',date2,'&VAL_NM_RQ=',ticket)
 xmlParse(result)
}
usd<-downloadcbr('01/01/2007','31/03/2016','R01235')
eur<-downloadcbr('01/01/2007','31/03/2016','R01239')

Преобразуем данные и сведем их в таблицу:

#Напишем функцию для обработки XML:
xmltodf<-function(x) {
#Конвертируем файл XML в лист:
 x<-xmlToList(x)
#Преобразовываем лист в вектор:
 x<-unlist(x)
#Отбираем все элементы вектора с названиями, соответствующими курсу валюты, 
#заменяя при этом разделитель "," на разделитель ".", и сохраняя вектора как 
#числовой вектор:
 value<-as.numeric(gsub(',','.',x[names(x)=='Record.Value']))
#Отбираем все элементы вектора с соответствующими курсам датами, и сообщаем 
#R, в каком формате наши даты:
 dat<-x[names(x)=='Record..attrs.Date']
 dat<-as.Date(dat,format='%d.%m.%Y')
#Объединяем вектора в таблицу:
 data.frame(value=value,date=dat,stringsAsFactors = F)
}
#Преобразовываем XML в таблицы:
usddf<-xmltodf(usd)
eurdf<-xmltodf(eur)
#Объединяем курсы валют по датам и сохраним даты в виде текста:
usdeur<-inner_join(usddf,eurdf,by=c('date'='date'))
names(usdeur)<-c('usd','date','eur')
usdeur$date<-as.character(usdeur$date)

Создадим интерактивный график с помощью пакета rCharts:

euplot <- mPlot(x = "date", y = c("usd", "eur"), type = "Line", data = usdeur)
euplot$set(pointSize = 0, lineWidth = 1)
euplot$save('euplot.html', standalone = TRUE)

Подобный график можно использовать в презентациях, выложить его на сайт или встроить в web-приложение.