#Konjunktuuriinstituudi indikaatorite veebi panek
library(shiny)
library(ggplot2)
library(plotly)
library(dplyr)
library(reshape2)
library(tidyr)
library(lubridate)
library(lettercase)
library(readxl)
library(XML)
#setwd("C:/Users/avork/Documents/CITIS/EMTA/Makroandmed/KIindikaatorid")
download.external.variables <- function() {
########################################
# 1. Konjunktuuriinstituudi lehelt Exceli failid, NB! Exceli ridade nimed erinevad eri failides
########################################
#leht kus failidele lingid
url <- "http://www.ki.ee/baromeetrid/baromeetrid.htm"
doc <- htmlParse(url)
#otsime lehelt kõik lingid
links <- xpathSApply(doc, "//a/@href")
free(doc)
rm(doc)
# Otsime linkidest kõik xls lõpuga failid
wanted <- links[grepl("*.xls", links)]
# Jätame alles ainult need, mis meile huvi pakuvad
failialgused <- c("industry","ehitus","kaubandus","teenind", "majandus")
wanted <- wanted[sapply(failialgused, function(x) grep(x, wanted))]
# Vaatame, mis xls failid juba kaustas olemas on. Neid, mis olemas, enam uuesti ei tõmba
failid_kaustas <- list.files(pattern = "xls")
files_to_download = wanted[!(wanted %in% failid_kaustas)]
GetMe = ""
# Laeme alla need failid, mida veel ei ole
if (length(files_to_download) > 0) {
GetMe <- paste("http://www.ki.ee/baromeetrid/", files_to_download, sep = "")
#Laeme alla
lapply(seq_along(GetMe),
function(x) download.file(GetMe[x], files_to_download[x], mode = "wb"))
}
#Tarbijaküsitluse jaoks peab veel vaeva nägema
# failialgused <- c("industry","ehitus","kaubandus","teenind","majandus","tarbija")
#Loeme sisse soovitud Exceli failid
nimetused = data.frame(str_split_fixed(wanted, "_", n = 2), stringsAsFactors = F)
nimetused$end_date = as.Date(paste0(readr::parse_number(wanted),"01"), format = "%y%m%d")
for (x in seq(1:length(wanted))) {
failinimi <- wanted[x]
nimetus = nimetused[x,1]
if (!(nimetus %in% failialgused)) {stop("Viga andmete sisselugemisel")}
temp_df <- read_excel(failinimi)
assign(nimetus, temp_df)
}
rm(temp_df)
#Ükshaaval failide puhastamine
#jäta alles vajalikud read ja veerud alates 2003. aastast.
#NB! seda peab käsitsi kontrollima aeg-ajalt, et Konjunktuuriinstituut ei oleks muutnud veerge ega ridu
#Ehituse fail
ehitus <- ehitus[c(2,4:15), c(1,44:ncol(ehitus))]
#Tööstuse fail
industry <- industry[c(2:8,10:24), c(1,56:ncol(industry))]
#Kaubanduse fail
kaubandus <- kaubandus[c(2:8), c(1,44:ncol(kaubandus))]
#Teenindus
teenind <- teenind[c(2:7, 9:15), c(1,11:ncol(teenind))]
#Majandus
majandus <- majandus[c(2:7), c(1,48:ncol(majandus))]
#Tarbija - seda pole praegu vast vaja, nõuab palju käsitööd
# tarbija <- tarbija[c(2:7), c(1,48:ncol(tarbija))]
# Tsükliga teisendame
#Veergudele õigete kuude nimede panemine
start = as.Date("2003-01-01")
for (x in 1:nrow(nimetused)) {
data = get(nimetused[x,1])
end = nimetused$end_date[x]
#paneme kuud veerunimedeks
colnames(data) <- c("indicator", seq.Date(start,end,"month")[1:(ncol(data) - 1)])
#Keerame teistpidi
data = melt(data, id.vars = c("indicator"))
#Teeme kuupäeva
data$kpv <- as.Date(as.numeric(as.character(data$variable)))
data$value <- as.numeric(data$value)
data$variable <- NULL
#sektori nimi, kui on soov pärast kokku panna
data$sektor <- nimetused[x,1]
#Puhastame ja täpsutame näitajate nimesid
data$indicator <- gsub("[\n]","", data$indicator)
data$indicator <- gsub("[*]","", data$indicator)
data$indicator[is_lowercase(substr(data$indicator, 1,1))] <- paste0("Piirab praegu: ", data$indicator[is_lowercase(substr(data$indicator, 1,1))] )
#Salvestame sama nime alla, mis on Konjunktuuriinstituudi failid
assign(nimetused[x,1],data)
}
# save(industry, file = "industry.Rda")
# save(ehitus, file = "ehitus.Rda")
# save(kaubandus, file = "kaubandus.Rda")
# save(teenind, file = "teenind.Rda")
# save(majandus, file = "majandus.Rda")
#save(tarbija, file="tarbija.Rda")
#kustutame üleliigsed asjad
rm(data, wanted, url, links, GetMe, failinimi, failid_kaustas)
# Osade tunnuste kohta koondfailide tegemine
# ehitus$indicator[ehitus$indicator =="Töötajate arv järgneva 3 kuu jooksul"]<-"emp3"
# industry$indicator[industry$indicator =="Töötajate arv järgneva 3 kuu jooksul"]<-"emp3"
# teenind$indicator[teenind$indicator =="Töötajate arv järgneva 3 kuu jooksul"]<-"emp3"
# kaubandus$indicator[kaubandus$indicator=="Töötajate arv 3 kuu pärast"]<-"emp3"
#
# ehitus$indicator[ehitus$indicator =="Ehitustööde hinnad järgneva 3 kuu jooksul"]<-"prices3"
# industry$indicator[industry$indicator =="Toodangu müügihinnad järgneva 3 kuu jooksul"]<-"prices3"
# teenind$indicator[teenind$indicator =="Teenuste hinnad järgneva 3 kuu jooksul"]<-"prices3"
# kaubandus$indicator[kaubandus$indicator=="Kaupade hinnad järgneva 3 kuu jooksul"]<-"prices3"
#
ki <- rbind(ehitus, industry, kaubandus, teenind)
ki$indicator[ki$sektor=="ehitus"] <- paste0("Ehitus - ", ki$indicator[ki$sektor=="ehitus"])
ki$indicator[ki$sektor=="teenind"] <- paste0("Teenindus - ", ki$indicator[ki$sektor=="teenind"])
#ki$indicator[ki$sektor=="majandus"] <- paste0("Kogu majandus - ", ki$indicator[ki$sektor=="majandus"])
ki$indicator[ki$sektor=="kaubandus"] <- paste0("Kaubandus - ", ki$indicator[ki$sektor=="kaubandus"])
ki$indicator[ki$sektor=="industry"] <- paste0("Tööstus - ", ki$indicator[ki$sektor=="industry"])
save(ki,file = "ki.Rda")
# ########################################################
# # 2. Eurostatist Eesti ja EU majanduse usaldusindikaatorite toomine;
# # Kommentaar: Eesti andmed saaks ka konjunktuuriinstituudi andmetest
# # Tulevikus võiks tõmmata enam andmeid, sh ka teiste riikide omasid
# # Praegu olemas EU28 ja EA19
# ########################################################
#
# euconfind <- get_eurostat("ei_bssi_m_r2", filters = list(geo = c("EE", "EU28")), stringsAsFactors = FALSE)
# #Year and month for merge
# euconfind$kpv <- euconfind$time
# #kustuta puuduvad väärtused
# euconfind <- euconfind[!is.na(euconfind$values),]
# #Sobivamad nimed
# euconfind$indica <- NA
# euconfind$indica[euconfind$indic == "BS-CCI-BAL"] <- "Construction"
# euconfind$indica[euconfind$indic == "BS-CSMCI-BAL"] <- "Consumer"
# euconfind$indica[euconfind$indic == "BS-ICI-BAL"] <- "Industry"
# euconfind$indica[euconfind$indic == "BS-RCI-BAL"] <- "Retail"
# euconfind$indica[euconfind$indic == "BS-SCI-BAL"] <- "Service"
# euconfind$indica[euconfind$indic == "BS-ESI-I"] <- "Economy"
# euconfind$indicator <- paste0(euconfind$indica,"_", euconfind$s_adj)
#
# #Jätame alles vaatlused alates 2003
# euconfind <- euconfind %>% dplyr::filter(year(kpv)>=2003)
#
# #Final table for merge, miks <
# euconfind <- dcast(euconfind, kpv ~ indicator+geo , value.var = "values")
# save(euconfind, file = "euconfind.Rda")
#
# #Võib kaaluda veel teiste riikide - Soome, Rootsi, Läti ja Leedu indikaatorite sissetoomist
#
# ########################################################
# # 3. Eurostatist Eesti ja EU harmoniseeritud hinnaindeks
# #
# ########################################################
# # Indeces for Estonia and EU28, 2005=100, COICOP=CP00 or all-items HICP
# euprices <- get_eurostat("prc_hicp_midx", filters = list(geo = c("EE", "EU"), coicop=c("CP00"), unit=c("I05")), stringsAsFactors = FALSE)
# #Year and month for merge
# euprices$kpv <- euprices$time
# #kustuta puuduvad väärtused
# euprices <- euprices[!is.na(euprices$values),]
# #Sobivamad nimed
# #Jätame alles vaatlused alates 2003
# euprices$hicp <- euprices$values
# euprices <- euprices %>% dplyr::filter(year(kpv)>=2003) %>% dplyr::select(geo, hicp, kpv)
#
# #Final table for merge, miks <
# euprices <- dcast(euprices, kpv ~ geo , value.var = "hicp")
# colnames(euprices) <- c("kpv", "hicp_EE", "hicp_EU")
# save(euprices, file = "euprices.Rda")
#
#
# #################################
# #Tulevikus võib kaaluda Google trendsi andmete sisse toomist
# #################################
#
#
# # Andmete ühendamine ------------------------------------------------------
# external_data <- merge(ki, euconfind, by="kpv", all=TRUE)
# external_data <- merge(external_data, euprices, by="kpv", all=TRUE)
# save(external_data, file = "external_data.Rda")
# return(external_data)
}
#start=as.Date("2003-01-01", origin)
#end=as.Date("2017-12-31", origin)
load("data/ki.Rda")
ui <- fluidPage(
#head(Eesti Konjuktuuriinstituuti andmed)
sidebarLayout(
sidebarPanel(
selectInput("kifail", "Vali tunnused", unique(ki$indicator), selected ="",multiple = T),
#selectInput("kifail", "Vali tunnused", unique(ki$indicator), selected = c(unique(ki$indicator)[1]),multiple = T),
#actionButton("puhasta", "Puhasta joonis"),
actionButton("valised_tunnused", "Uuenda KI andmed kodulehelt")
),
mainPanel(
#plotlyOutput("joonis1")
plotOutput("joonis1")
#plotOutput("kijoonis",height = "400px"),
#plotOutput("targetjoonis",height = "400px"),
#DT::dataTableOutput('mudeliandmetetabel')
)
)
)
# Define server
server <- function(input, output, session) {
observeEvent(input$valised_tunnused, {
downloadX <- download.external.variables()
})
jooniseandmed = reactive({
df <- ki %>% filter(indicator %in% input$kifail) %>% select(kpv, indicator, value)
return(df)
})
# output$joonis1 = renderPlotly({
# p <- ggplot(jooniseandmed(), aes(x=kpv, y=value, color=indicator)) +
# geom_line() +
# labs(y="Indikaatori väärtused", x="",
# title="Konjunktuuriinstituudi andmed",
# subtitle="http://www.ki.ee/baromeetrid/baromeetrid.htm", caption=Sys.Date())
#
# ggplotly(p)
# })
output$joonis1 = renderPlot({
ggplot(jooniseandmed(), aes(x=kpv, y=value, color=indicator, group=indicator)) +
geom_line(data=jooniseandmed()[!is.na(jooniseandmed()$value),]) +
#geom_point() +
scale_x_date(date_breaks = "1 year" ,date_labels = "%Y") +
labs(y="Indikaatori väärtused", x="", color="Indikaator",
title="Konjunktuuriinstituudi andmed",
subtitle="http://www.ki.ee/baromeetrid/baromeetrid.htm", caption=Sys.Date())
})
observeEvent( input$puhasta, {
updateSelectInput(session, "kifail",
label = "Vali tunnused",
choices= unique(ki$indicator),
selected = ""
#selected = c(unique(ki$indicator)[1])
#multiple = T
)
ggplot(ki[ki$indicator=="Ehitus- Ehitustööde maht viimase 3 kuu jooksul",], aes(x=kpv, y=value, color=indicator)) +
geom_line() +
scale_x_date(date_breaks = "1 year" ,date_labels = "%Y") +
labs(y="Indikaatori väärtused", x="", color="Indikaator",
title="Konjunktuuriinstituudi andmed",
subtitle="http://www.ki.ee/baromeetrid/baromeetrid.htm", caption=Sys.Date())
})
#end of server
}
# Run the application
shinyApp(ui = ui, server = server)