Rで内閣府のページから景気ウォッチャー指数のエクセルデータを取り出して、トレードステーション形式で保存するスクリプトを作りました。

エクセルのフォーマットが、特殊加工してあり、なかなか手ごわかったです。あまり、参考にする人もいないかもしれませんが、このスクリプトをホームページ更新後に実行すれば、30秒でトレードステーションに読み込めるようになりました。

季節調整値のダウンロード

library(gdata)
curl <- "https://www5.cao.go.jp/keizai3/watcher/watcher5.xls"
cdestfile <- "C:/Users/Downloads/A.xls"
download.file(curl,cdestfile,mode="wb")

library("readxl")
data <- read_excel("C:/Users/Downloads/A.xls", sheet = 1)
data

library(dplyr)
library(tidyverse)

data.result = filter(data, rowSums(is.na(data)) < ncol(data)-10)

names(data.result)[1] <- "year"
names(data.result)[2] <- "date"
names(data.result)[3] <- "open"

data.result = fill(data.result, "year")

data.result =  mutate(data.result, date = str_sub(date, start=-2, end=-1))

data.result =  mutate(data.result, date =  str_replace(date,  pattern="01", replacement="1/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="02", replacement="2/28"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="03", replacement="3/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="04", replacement="4/30"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="05", replacement="5/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="06", replacement="6/30"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="07", replacement="7/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="08", replacement="8/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="09", replacement="9/30"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="10", replacement="10/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="11", replacement="11/30"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="12", replacement="12/31"))

data.result =  mutate(data.result, year = str_sub(year, start=1, end=4))

data.result =  mutate(data.result, date = str_c(year,"/", date))

data.result = select(data.result, 2:3)

data.result =  mutate(data.result, high = (open))
data.result =  mutate(data.result, low = (open))
data.result =  mutate(data.result, close = (open))
data.result =  mutate(data.result, volume = 0)

data.result =  mutate(data.result, date =  str_replace(date,  pattern="2004/2/28", replacement="2004/2/29"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="2008/2/28", replacement="2008/2/29"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="2012/2/28", replacement="2012/2/29"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="2016/2/28", replacement="2016/2/29"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="2020/2/28", replacement="2020/2/29"))
data.result

write.csv(data.result, "D:/data/watch_gk.csv",, row.names=FALSE)


data <- read_excel("C:/Users/Downloads/A.xls", sheet = 2)

data.result = filter(data, rowSums(is.na(data)) < ncol(data)-10)

names(data.result)[1] <- "year"
names(data.result)[2] <- "date"
names(data.result)[3] <- "open"

data.result = fill(data.result, "year")

data.result =  mutate(data.result, date = str_sub(date, start=-2, end=-1))

data.result =  mutate(data.result, date =  str_replace(date,  pattern="01", replacement="1/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="02", replacement="2/28"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="03", replacement="3/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="04", replacement="4/30"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="05", replacement="5/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="06", replacement="6/30"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="07", replacement="7/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="08", replacement="8/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="09", replacement="9/30"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="10", replacement="10/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="11", replacement="11/30"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="12", replacement="12/31"))

data.result =  mutate(data.result, year = str_sub(year, start=1, end=4))

data.result =  mutate(data.result, date = str_c(year,"/", date))

data.result = select(data.result, 2:3)

data.result =  mutate(data.result, high = (open))
data.result =  mutate(data.result, low = (open))
data.result =  mutate(data.result, close = (open))
data.result =  mutate(data.result, volume = 0)

data.result =  mutate(data.result, date =  str_replace(date,  pattern="2004/2/28", replacement="2004/2/29"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="2008/2/28", replacement="2008/2/29"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="2012/2/28", replacement="2012/2/29"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="2016/2/28", replacement="2016/2/29"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="2020/2/28", replacement="2020/2/29"))
data.result

write.csv(data.result, "D:/data/watch_sk.csv",, row.names=FALSE)


原数値のダウンロード


library(gdata)
curl <- "https://www5.cao.go.jp/keizai3/watcher/watcher3.xls"
cdestfile <- "C:/Users/Downloads/A.xls"
download.file(curl,cdestfile,mode="wb")

library("readxl")
data <- read_excel("C:/Users/Downloads/A.xls", sheet = 1)
data

library(dplyr)
library(tidyverse)
data.result = filter(data, rowSums(is.na(data)) < ncol(data)-7)

names(data.result)[1] <- "year"
names(data.result)[2] <- "date"
names(data.result)[3] <- "open"

data.result = fill(data.result, "year")

#data.result =  mutate(data.result, date = str_sub(date, start=-2, end=-1))

data.result =  mutate(data.result, date =  str_replace(date,  pattern="1月", replacement="1/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="2月", replacement="2/28"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="3月", replacement="3/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="4月", replacement="4/30"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="5月", replacement="5/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="6月", replacement="6/30"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="7月", replacement="7/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="8月", replacement="8/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="9月", replacement="9/30"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="10月", replacement="10/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="11月", replacement="11/30"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="12月", replacement="12/31"))


data.result =  mutate(data.result, year = str_sub(year, start=1, end=4))

data.result =  mutate(data.result, date = str_c(year,"/", date))

data.result = select(data.result, 2:3)

data.result =  mutate(data.result, high = (open))
data.result =  mutate(data.result, low = (open))
data.result =  mutate(data.result, close = (open))
data.result =  mutate(data.result, volume = 0)

data.result =  mutate(data.result, date =  str_replace(date,  pattern="2004/2/28", replacement="2004/2/29"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="2008/2/28", replacement="2008/2/29"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="2012/2/28", replacement="2012/2/29"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="2016/2/28", replacement="2016/2/29"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="2020/2/28", replacement="2020/2/29"))

data.result = filter(data.result, rowSums(is.na(data.result)) < ncol(data.result)-1)

write.csv(data.result, "D:/data/watch_g.csv",, row.names=FALSE)


data <- read_excel("C:/Users/Downloads/A.xls", sheet = 2)

data.result = filter(data, rowSums(is.na(data)) < ncol(data)-7)

names(data.result)[1] <- "year"
names(data.result)[2] <- "date"
names(data.result)[3] <- "open"

data.result = fill(data.result, "year")

#data.result =  mutate(data.result, date = str_sub(date, start=-2, end=-1))

data.result =  mutate(data.result, date =  str_replace(date,  pattern="1月", replacement="1/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="2月", replacement="2/28"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="3月", replacement="3/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="4月", replacement="4/30"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="5月", replacement="5/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="6月", replacement="6/30"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="7月", replacement="7/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="8月", replacement="8/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="9月", replacement="9/30"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="10月", replacement="10/31"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="11月", replacement="11/30"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="12月", replacement="12/31"))


data.result =  mutate(data.result, year = str_sub(year, start=1, end=4))

data.result =  mutate(data.result, date = str_c(year,"/", date))

data.result = select(data.result, 2:3)

data.result =  mutate(data.result, high = (open))
data.result =  mutate(data.result, low = (open))
data.result =  mutate(data.result, close = (open))
data.result =  mutate(data.result, volume = 0)

data.result =  mutate(data.result, date =  str_replace(date,  pattern="2004/2/28", replacement="2004/2/29"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="2008/2/28", replacement="2008/2/29"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="2012/2/28", replacement="2012/2/29"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="2016/2/28", replacement="2016/2/29"))
data.result =  mutate(data.result, date =  str_replace(date,  pattern="2020/2/28", replacement="2020/2/29"))

data.result = filter(data.result, rowSums(is.na(data.result)) < ncol(data.result)-1)

data.result

write.csv(data.result, "D:/data/watch_s.csv",, row.names=FALSE)

読み込んだ結果

景気ウォッチャー投資法の成績をみると、やはりコロナショックはとらえられなかったようです。2月以降の下落で損失を出しています。

季節調整値

imageimage

原数値

imageimage


改良版コード

数字の置換部分を少しスマートにしてみました。日本語の場合は、全角数字の処理が一番困ります。


library(gdata)

library("readxl")

library(dplyr)

library(tidyverse)

curl <- "https://www5.cao.go.jp/keizai3/watcher/watcher5.xls"

cdestfile <- "C:/A.xls"

download.file(curl,cdestfile,mode="wb")

data <- read_excel("C:/A.xls", sheet = 1)

XX = filter(data, rowSums(is.na(data)) < ncol(data)-7)

names(XX)[1] <- "year"

names(XX)[2] <- "date"

names(XX)[3] <- "open"

XX = fill(XX, "year")

XX =  mutate(XX, date = str_sub(date, start=-2, end=-1))

XX =  mutate(XX, date = as.integer(date))

XX =  mutate(XX, date = as.character(date))

XX = mutate(XX, date = if_else((condition = date == 4|date == 6|date == 9|date == 11 ) , true = str_c(date, "/30"), false = if_else((condition = date == 2 ) , true = str_c(date, "/28"), false = str_c(date, "/31"))))

XX = mutate(XX, date = if_else((condition = (year == "2004年"|year == "2008年"|year == "2016年"|year == "2020年")&(date == "2/28") ) , true = "2/29", false = date ))

XX = mutate(XX, year =  str_replace(year,  pattern="年", replacement="/"))

XX = mutate(XX, date =  str_c( year,date ))

XX = select(XX, 2:3)

XX =  mutate(XX, high = open)

XX =  mutate(XX,low = open)

XX =  mutate(XX,close = open)

XX =  mutate(XX,volume = 0)

write.csv(XX, "D:/watch_gk.csv",, row.names=FALSE)


data <- read_excel("C:/A.xls", sheet = 2)

XX

XX = filter(data, rowSums(is.na(data)) < ncol(data)-7)

names(XX)[1] <- "year"

names(XX)[2] <- "date"

names(XX)[3] <- "open"

XX = fill(XX, "year")

XX =  mutate(XX, date = str_sub(date, start=-2, end=-1))

XX =  mutate(XX, date = as.integer(date))

XX =  mutate(XX, date = as.character(date))

XX = mutate(XX, date = if_else((condition = date == 4|date == 6|date == 9|date == 11 ) , true = str_c(date, "/30"), false = if_else((condition = date == 2 ) , true = str_c(date, "/28"), false = str_c(date, "/31"))))

XX = mutate(XX, date = if_else((condition = (year == "2004年"|year == "2008年"|year == "2016年"|year == "2020年")&(date == "2/28") ) , true = "2/29", false = date ))

XX = mutate(XX, year =  str_replace(year,  pattern="年", replacement="/"))

XX = mutate(XX, date =  str_c( year,date ))

XX = select(XX, 2:3)

XX =  mutate(XX, high = open)

XX =  mutate(XX,low = open)

XX =  mutate(XX,close = open)

XX =  mutate(XX,volume = 0)

write.csv(XX, "D:/watch_sk.csv",, row.names=FALSE)


curl <- "https://www5.cao.go.jp/keizai3/watcher/watcher3.xls"

cdestfile <- "C:/A.xls"

download.file(curl,cdestfile,mode="wb")

data <- read_excel("C:/A.xls", sheet = 1)

XX = filter(data, rowSums(is.na(data)) < ncol(data)-7)

names(XX)[1] <- "year"

names(XX)[2] <- "date"

names(XX)[3] <- "open"

XX = fill(XX, "year")

XX = mutate(XX, date =  str_replace(date,  pattern="月", replacement=""))

XX = mutate(XX, date =  str_replace(date,  pattern="1", replacement="1"))

XX = mutate(XX, date =  str_replace(date,  pattern="2", replacement="2"))

XX = mutate(XX, date =  str_replace(date,  pattern="3", replacement="3"))

XX = mutate(XX, date =  str_replace(date,  pattern="4", replacement="4"))

XX = mutate(XX, date =  str_replace(date,  pattern="5", replacement="5"))

XX = mutate(XX, date =  str_replace(date,  pattern="6", replacement="6"))

XX = mutate(XX, date =  str_replace(date,  pattern="7", replacement="7"))

XX = mutate(XX, date =  str_replace(date,  pattern="8", replacement="8"))

XX = mutate(XX, date =  str_replace(date,  pattern="9", replacement="9"))

XX = mutate(XX, date = if_else((condition = date == 4 |date == 6|date == 9|date == 11 ) , true = str_c(date, "/30"), false = if_else((condition = date == 2 ) , true = str_c(date, "/28"), false = str_c(date, "/31"))))

XX = mutate(XX, date = if_else((condition = (year == "2004年"|year == "2008年"|year == "2016年"|year == "2020年")&(date == "2/28") ) , true = "2/29", false = date ))

XX = mutate(XX, year =  str_replace(year,  pattern="年", replacement="/"))

XX = mutate(XX, date =  str_c( year,date ))

XX = select(XX, 2:3)

XX =  mutate(XX, high = open)

XX =  mutate(XX,low = open)

XX =  mutate(XX,close = open)

XX =  mutate(XX,volume = 0)

XX = filter(XX, rowSums(is.na(XX)) < ncol(XX)-1)

write.csv(XX, "D:/watch_g.csv",, row.names=FALSE)


data <- read_excel("C:/A.xls", sheet = 2)

XX = filter(data, rowSums(is.na(data)) < ncol(data)-7)

names(XX)[1] <- "year"

names(XX)[2] <- "date"

names(XX)[3] <- "open"

XX = fill(XX, "year")

XX = mutate(XX, date =  str_replace(date,  pattern="月", replacement=""))

XX = mutate(XX, date =  str_replace(date,  pattern="1", replacement="1"))

XX = mutate(XX, date =  str_replace(date,  pattern="2", replacement="2"))

XX = mutate(XX, date =  str_replace(date,  pattern="3", replacement="3"))

XX = mutate(XX, date =  str_replace(date,  pattern="4", replacement="4"))

XX = mutate(XX, date =  str_replace(date,  pattern="5", replacement="5"))

XX = mutate(XX, date =  str_replace(date,  pattern="6", replacement="6"))

XX = mutate(XX, date =  str_replace(date,  pattern="7", replacement="7"))

XX = mutate(XX, date =  str_replace(date,  pattern="8", replacement="8"))

XX = mutate(XX, date =  str_replace(date,  pattern="9", replacement="9"))

XX = mutate(XX, date = if_else((condition = date == 4|date == 6|date == 9|date == 11 ) , true = str_c(date, "/30"), false = if_else((condition = date == 2 ) , true = str_c(date, "/28"), false = str_c(date, "/31"))))

XX = mutate(XX, date = if_else((condition = (year == "2004年"|year == "2008年"|year == "2016年"|year == "2020年")&(date == "2/28") ) , true = "2/29", false = date ))

XX = mutate(XX, year =  str_replace(year,  pattern="年", replacement="/"))

XX = mutate(XX, date =  str_c( year,date ))

XX = select(XX, 2:3)

XX =  mutate(XX, high = open)

XX =  mutate(XX,low = open)

XX =  mutate(XX,close = open)

XX =  mutate(XX,volume = 0)

XX = filter(XX, rowSums(is.na(XX)) < ncol(XX)-1)

XX

write.csv(XX, "D:/watch_s.csv",, row.names=FALSE)