2019年1月28日月曜日

CLI - composite leading indicator - OECD


THIS ENTRY IS SUPERCEDED BY THIS PAGE.
THIS ENTRY SUPERCEDE THIS

1. preparation

# download csv from oecd(https://data.oecd.org/leadind/composite-leading-indicator-cli.htm) to "~/Downloads"
# use file name "CLI3.csv".
# this file contains multiple regions data. you have to specify its name.
# extract USA only entries
# execute commands below at "~/Download".
#
sed -n '/USA/p' CLI3.csv |awk -F, '{print $6"-01,"$7}'  |sed 's/\"//g' |awk 'BEGIN{print "DATE,DATA"}{print $0}' > usa.csv
# extract OECD entries and exclude OECDE
sed -n '/OECD[^E]/p' CLI3.csv |awk -F, '{print $6"-01,"$7}'  |sed 's/\"//g' |awk 'BEGIN{print "DATE,DATA"}{print $0}' > oecd.csv

2.drawing graph

# read data from csv.
#
cli_xts <- merge(as.xts(read.zoo(read.csv("~/Downloads/oecd.csv"))),as.xts(read.zoo(read.csv("~/Downloads/usa.c
sv"))),suffixes = c("oecd","usa"
))
#
#  set start date and end date
#
start_date <- as.Date("2014-07-01")
end_date <- as.Date("2018-11-01")
#
#
cli_xts$oecd[paste(start_date,end_date,sep="::")]
period_base <- paste(start_date,end_date,sep="::")
diff_mon <- 6
period_compare <- paste(as.Date(as.yearmon(mondate(as.Date(start_date))-diff_mon )),as.Date(as.yearmon(mondate(as.Date(end_date))-diff_mon )),sep="::")
paste("2018-01",end_date,sep="::")
paste("2017-07",as.Date(as.yearmon(mondate(as.Date(end_date))-diff_mon )),sep="::")

plot.default((cli_xts$oecd[period_base]   / as.vector(cli_xts$oecd[period_compare])-1)*100,cli_xts$oecd[period_base])
tmp <- par('usr')
plot.default((cli_xts$oecd[period_base] / as.vector(cli_xts$oecd[period_compare])-1)*100,cli_xts$oecd[period_base] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),type='b')
par(new=T)
#
code for CY2019 and after.
#
#
if(as.Date("2018-12-31") < end_date){
  # add line to data beyond "2019-01-01" when time has come.
  plot.default((cli_xts$oecd[paste("2019-01",end_date,sep="::")] / as.vector(cli_xts$oecd[paste("2018-07",as.Date(as.yearmon(mondate(as.Date(end_date))-diff_mon )),sep="::")])-1)*100,cli_xts$oecd[paste("2019-01",end_date,sep="::")] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=2,lwd=2)

  par(new=T)

  plot.default((cli_xts$oecd["2018-01::2018-12"] / as.vector(cli_xts$oecd["2017-07::2018-06"])-1)*100,cli_xts$oecd["2018-01::2018-12"], xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=6)

} else{

  plot.default((cli_xts$oecd[paste("2018-01",end_date,sep="::")] / as.vector(cli_xts$oecd[paste("2017-07",as.Date(as.yearmon(mondate(as.Date(end_date))-diff_mon )),sep="::")])-1)*100,cli_xts$oecd[paste("2018-01",end_date,sep="::")] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=2,lwd=2)
}

par(new=T)

plot.default((cli_xts$oecd["2017-01::2017-12"] / as.vector(cli_xts$oecd["2016-07::2017-06"])-1)*100,cli_xts$oecd["2017-01::2017-12"], xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=3)
par(new=T)
plot.default((cli_xts$oecd["2016-01::2016-12"] / as.vector(cli_xts$oecd["2015-07::2016-06"])-1)*100,cli_xts$oecd["2016-01::2016-12"], xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=4)
par(new=T)
plot.default((cli_xts$oecd["2015-01::2015-12"] / as.vector(cli_xts$oecd["2014-07::2015-06"])-1)*100,cli_xts$oecd["2015-01::2015-12"], xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=5
)
abli
ne(h=100)

abline(v=0)
legend("topleft", legend = "Light Blue: 2015\nBlue: 2016\nLime: 2017\nRed: 2018",bty='n')




捐納 - 中国の歴代王朝で行われた公的な売官制度

捐納

出典: フリー百科事典『ウィキペディア(Wikipedia)』

捐納(えんのう),または捐輸、捐例、貲選、開納とは、中国の歴代王朝で行われた公的な売官制度である。命令権者などに賄賂を私的に渡して非公式に行われる売官とは違い、天災や戦争、大規模な公共工事などで財政困難をきたした政府が公式な制度として定めている点に特徴がある。

明代以前
戦国時代には既に売官制度が存在していたことは、商君書の去強篇に「粟爵粟任則国富」、靳令篇に「民有余糧、使民以粟出官爵。官爵必以其力、則農不怠」という記述があることからも確認できる。

明清
正統年間より開始された捐納は明代を通して盛んに行われた。例えば、科挙の受験資格(通常はいくつもの試験が必要)を得るための「監捐」では各府県に設けられた府学・県学等の官立学校の生徒の資格を購うことができた。これを「例監」という。更には「貢捐」では国立大学にあたる国子監の学生身分である貢生の身分も買うことができた。これを「例貢」という。成化年の始定によれば、生員(各府県の学生)は米百石以上で国子監の学生身分を、軍籍にあるものは二百五十石で正九品の名誉官位を得られるが、更に五十石で最高正七品に至ることができた。明代初期に公布された賤商令により、商家出身者は科挙の受験資格を剥奪され、農民に比べても服装や住宅に厳しい制限があり、裕福な商人にとって金銭で官員に準ずる資格を得ることができる捐納は魅力的な制度だった。

read file and normalize data to adjust TZ. for 2019

THIS ENTRY SUPERCEDES 2018-10-06.

# read data as csv format and convert to xts to plot
#
Sys.setenv(TZ=Sys.timezone())

# Update below to check file.exists.
#
if(file.exists("~/~/Downloads/bp2018.csv")){
  bp2018 <- read.csv("~/Downloads/bp2018.csv")
  system("rm \"$HOME/Downloads/bp2018.csv\"")
}else{
  print("!!!FILE DOESN'T EXIST!!!!!")
}
#
# Update ends.
#
# bp2018.xts <- xts(bp2018[,c(-1,-2,-6)],as.POSIXct(paste(bp2018$Date,bp2018$Time,sep=" "),tz=Sys.timezone()),tz=Sys.timezone())
bp2018.xts <- xts(bp2018[,c(3,4,5)],as.POSIXct(paste(bp2018$Date,bp2018$Time,sep=" "),tz=Sys.timezone()),tz=Sys.timezone())
bp2019 <- read.csv("~/Downloads/bp - シート1.csv")
system("rm \"$HOME/Downloads/bp - シート1.csv\"")
bp2019.xts <- xts(bp2019[,c(3,4,5)],as.POSIXct(paste(bp2019$Date,bp2019$Time,sep=" "),tz=Sys.timezone()),tz=Sys.timezone())
bp.xts <- append(bp2018.xts,bp2019.xts)
# weekly average
apply.weekly(bp.xts[bp.xts$High > 95],mean)
#
#
# prepare data according to system timezone. "Asia/Tokyo" in most cases.
#
bp.day <- merge(as.xts(as.vector(bp.xts[,1]),as.Date(index(bp.xts),tz=tzone(bp.xts))),as.vector(bp.xts[,2]))
colnames(bp.day)[1] <- "high"
colnames(bp.day)[2] <- "low"
#
# prepare timezone 2 hours behind "Asia/Tokyo".
#
bp.bangkok <- merge(as.xts(as.vector(bp.xts[,1]),as.Date(index(bp.xts),tz="Asia/Bangkok")),as.vector(bp.xts[,2]))
colnames(bp.bangkok)[1] <- "high"
colnames(bp.bangkok)[2] <- "low"
apply.weekly(bp.bangkok,mean)


# read data as csv format and convert to xts to plot
#
Sys.setenv(TZ=Sys.timezone())
bp2018 <- read.csv("~/Downloads/bp2018.csv")
system("rm \"$HOME/Downloads/bp2018.csv\"")
# bp2018.xts <- xts(bp2018[,c(-1,-2,-6)],as.POSIXct(paste(bp2018$Date,bp2018$Time,sep=" "),tz=Sys.timezone()),tz=Sys.timezone())
bp2018.xts <- as.xts(bp2018[,c(3,4,5)],as.POSIXct(paste(bp2018$Date,bp2018$Time,sep=" "),tz=Sys.timezone()),tz=Sys.timezone())
bp2019 <- read.csv("~/Downloads/bp - シート1.csv")
system("rm \"$HOME/Downloads/bp - シート1.csv\"")
bp2019.xts <- xts(bp2019[,c(3,4,5)],as.POSIXct(paste(bp2019$Date,bp2019$Time,sep=" "),tz=Sys.timezone()),tz=Sys.timezone())
bp.xts <- append(bp2018.xts,bp2019.xts)
# weekly average
apply.weekly(bp.xts[bp.xts$High > 95],mean)
#
#
# prepare data according to system timezone. "Asia/Tokyo" in most cases.
#
bp.day <- merge(as.xts(as.vector(bp.xts[,1]),as.Date(index(bp.xts),tz=tzone(bp.xts))),as.vector(bp.xts[,2]))
colnames(bp.day)[1] <- "high"
colnames(bp.day)[2] <- "low"
#
# prepare timezone 2 hours behind "Asia/Tokyo".
#
bp.bangkok <- merge(as.xts(as.vector(bp.xts[,1]),as.Date(index(bp.xts),tz="Asia/Bangkok")),as.vector(bp.xts[,2]))
colnames(bp.bangkok)[1] <- "high"
colnames(bp.bangkok)[2] <- "low"
apply.weekly(bp.bangkok,mean)