Previous Entry Share Next Entry
Экономические данные для R
аттрактор
tractor32
Для того чтобы анализировать экономические данные их нужно откуда-то брать. Язык R здесь просто не заменим, так как для  импорта (экспорта) данных написано много пакетов и очень просто получать данные из нескольких источников сразу,  а затем быстро преобразовывать и анализировать их - и все это в одной среде R (конечно Python  может составить конкуренцию).  Но я придерживаюсь принципа:  что нет совершенных средств обработки данных (разработки программ),   так как их сотворил Человек, а  он обладает недостатками, а машине вообще без разницы какой код выполнять.  Один из источников данных это – проект  Quandl,  который позволяет мгновенно получать данные в форматах Excel, CSV, text, JSON or XML  из 500 источников, имеет  в настоящее время API Quandl packages для  R, Python, Matlab, Excel, Stata, Maple, C#, EViews, Java, C/C++, .NET, Clojure и Julia. Чтобы качать данные из Quandl без каких-либо ограничений, придется зарегистрироваться у них на сайте, для того чтобы получить доступ – authenticationtoken. А теперь пример, как быстро получить данные в R. В нём построена матрица корреляций для логарифмических доходностей разных рынков. В какой-то степени этот пример отражает взаимосвязь рыночных индексов разных стран.  Основа для примера взята отсюда.


Корреляции логарифмических доходностей в период кризиса Октябрь 2008 –Май 2009:
Корреляции логарифмических доходностей в период кризиса Октябрь 2008 –Май 2009 - savepic.net — сервис хранения изображений

Корреляции логарифмических доходностей с января 1998 года по сегодняшний день:
Корреляции логарифмических доходностей с января 1998 года по сегодняшний день - savepic.net — сервис хранения изображений

Код для R:
#R version 3.1.1 (2014-07-10) -- "Sock it to Me"
#-----------------------------------------------------------------------------------
#S&P 500 (US)
#RUSSELL 2000 (US Small Cap)
#NIKKEI (Japan)
#HANG SENG (Hong Kong)
#DAX (Germany)
#CAC (France)
#KOSPI (Korea)
#RTSI (Russia)

install.packages("xts", "Quandl", "gplots")

library(xts)
library(Quandl)

#First, we gather the index values and convert to returns:

my_start_date <- "1998-01-05"
SP500.Q <- Quandl("YAHOO/INDEX_GSPC", start_date = my_start_date, type = "xts")
RUSS2000.Q <- Quandl("YAHOO/INDEX_RUT", start_date = my_start_date, type = "xts")
NIKKEI.Q <- Quandl("NIKKEI/INDEX", start_date = my_start_date, type = "xts")
HANG_SENG.Q <- Quandl("YAHOO/INDEX_HSI", start_date = my_start_date, type = "xts")
DAX.Q <- Quandl("YAHOO/INDEX_GDAXI", start_date = my_start_date, type = "xts")
CAC.Q <- Quandl("YAHOO/INDEX_FCHI", start_date = my_start_date, type = "xts")
KOSPI.Q <- Quandl("YAHOO/INDEX_KS11", start_date = my_start_date, type = "xts")
RTSI.Q <- Quandl("YAHOO/INDEX_RTS_RS", start_date = my_start_date, type = "xts")

# Depending on the index, the final price for each day is either
# "Adjusted Close" or "Close Price".  Extract this single column for each:
SP500 <- SP500.Q[,"Adjusted Close"]
RUSS2000 <- RUSS2000.Q[,"Adjusted Close"]
DAX <- DAX.Q[,"Adjusted Close"]
CAC <- CAC.Q[,"Adjusted Close"]
KOSPI <- KOSPI.Q[,"Adjusted Close"]
NIKKEI <- NIKKEI.Q[,"Close Price"]
HANG_SENG <- HANG_SENG.Q[,"Adjusted Close"]
RTSI <- RTSI.Q[,"Adjusted Close"]

# The xts merge(.) function will only accept two series at a time.
# We can, however, merge multiple columns by downcasting to *zoo* objects.
# Remark:  "all = FALSE" uses an inner join to merge the data.
z <- merge(as.zoo(SP500), as.zoo(RUSS2000), as.zoo(DAX), as.zoo(CAC),
           as.zoo(KOSPI), as.zoo(NIKKEI), as.zoo(HANG_SENG), as.zoo(RTSI), all = FALSE)

# Set the column names; these will be used in the heat maps:
myColnames <- c("SP500","RUSS2000","DAX","CAC","KOSPI","NIKKEI","HANG_SENG","RTSI")
colnames(z) <- myColnames

# Cast back to an xts object:
mktPrices <- as.xts(z)

# Next, calculate log returns:
mktRtns <- diff(log(mktPrices), lag = 1)
head(mktRtns)
mktRtns <- mktRtns[-1, ]  # Remove resulting NA in the 1st row

require(gplots)

generate_heat_map <- function(correlationMatrix, title)
{

  heatmap.2(x = correlationMatrix,                   
            cellnote = correlationMatrix,   
            main = title,                                    
            symm = TRUE,                               
            dendrogram="none",                
            Rowv = FALSE,                               
            trace="none",                               
            density.info="none",                 
            notecol="black")

}


# Convert each to percent format
corr1 <- cor(mktRtns) * 100
#corr2 <- cor(mktRtns['2004-01/2004-12']) * 100
#corr3 <- cor(mktRtns['2008-10/2009-05']) * 100

#Now, let’s call our heat map function using the total market data set:

generate_heat_map(corr1, "Correlations of World Market Returns, Jan 1998 - Present")
#generate_heat_map(corr2, "Correlations of World Market Returns, Jan - Dec 2004")
#generate_heat_map(corr3, "Correlations of World Market Returns, Oct 2008 - May 2009")

?

Log in

No account? Create an account