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)

2018年11月19日月曜日

CLI - Composite Leading Indicator - OECD


REFER THIS ENTRY , INSTEAD.

# 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
#
#sample #1 for usa
#
cli_xts <- merge(as.xts(read.zoo(read.csv("~/Downloads/oecd.csv"))),as.xts(read.zoo(read.csv("~/Downloads/usa.csv"))),suffixes = c("oecd","usa"))

plot.default((cli_xts$usa["2014-07::2018-09"]   / as.vector(cli_xts$usa["2014-01::2018-03"])-1)*100,cli_xts$usa["2014-07::2018-09"])
tmp <- par('usr')
# plot.default((cli_xts$usa["2012-07::2018-09"] / as.vector(cli_xts$usa["2012-01::2018-02"])-1)*100,cli_xts$usa["2012-07::2018-09"] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]))
plot.default((cli_xts$usa["2014-07::2018-09"] / as.vector(cli_xts$usa["2014-01::2018-03"])-1)*100,cli_xts$usa["2014-07::2018-09"] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]))
par(new=T)
plot.default((cli_xts$usa["2018-01::2018-09"] / as.vector(cli_xts$usa["2017-07::2018-03"])-1)*100,cli_xts$usa["2018-01::2018-09"] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=2,lwd=2)
par(new=T)
plot.default((cli_xts$usa["2017-01::2017-12"] / as.vector(cli_xts$usa["2016-07::2017-06"])-1)*100,cli_xts$usa["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$usa["2016-01::2016-12"] / as.vector(cli_xts$usa["2015-07::2016-06"])-1)*100,cli_xts$usa["2016-01::2016-12"], xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=4)

#sample #2 for oecd all
plot.default((cli_xts$oecd["2014-07::2018-09"]   / as.vector(cli_xts$oecd["2014-01::2018-03"])-1)*100,cli_xts$oecd["2014-07::2018-09"])
tmp <- par('usr')
# plot.default((cli_xts$oecd["2012-07::2018-09"] / as.vector(cli_xts$oecd["2012-01::2018-02"])-1)*100,cli_xts$oecd["2012-07::2018-09"] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]))
plot.default((cli_xts$oecd["2014-07::2018-09"] / as.vector(cli_xts$oecd["2014-01::2018-03"])-1)*100,cli_xts$oecd["2014-07::2018-09"] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]))
par(new=T)
plot.default((cli_xts$oecd["2018-01::2018-09"] / as.vector(cli_xts$oecd["2017-07::2018-03"])-1)*100,cli_xts$oecd["2018-01::2018-09"] ,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)
#
# sample #3 for oecd with the extended period.
#
#
#
plot.default((cli_xts$oecd["2014-07::2018-09"]   / as.vector(cli_xts$oecd["2014-01::2018-03"])-1)*100,cli_xts$oecd["2014-07::2018-09"])
tmp <- par('usr')
# plot.default((cli_xts$oecd["2012-07::2018-09"] / as.vector(cli_xts$oecd["2012-01::2018-02"])-1)*100,cli_xts$oecd["2012-07::2018-09"] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]))
plot.default((cli_xts$oecd["2014-07::2018-09"] / as.vector(cli_xts$oecd["2014-01::2018-03"])-1)*100,cli_xts$oecd["2014-07::2018-09"] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),type='b')
par(new=T)
plot.default((cli_xts$oecd["2018-01::2018-09"] / as.vector(cli_xts$oecd["2017-07::2018-03"])-1)*100,cli_xts$oecd["2018-01::2018-09"] ,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)

The below is OECD.




2018年11月1日木曜日

Date Format Conversion mondate() index() format()





October 2018 was quite wild. Let us see the historical data on the other occasion. There were only 9 cases in 11 years, when the lowest price of the month is more than 11% lower than the open.

> to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1][to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1] < 0.89]
         GSPC.Low
 1 2008 0.8651744
 9 2008 0.8591352
10 2008 0.7213723
11 2008 0.7649871
 5 2010 0.8756500
 8 2011 0.8521960
 8 2015 0.8871556
 1 2016 0.8891620
10 2018 0.8897068

Use "as.mondate" to calculate one month after the examples.

> as.mondate(index(to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1][to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1] < 0.89])[-8])+1
mondate: timeunits="months"
[1] 2008-02-01 2008-10-02 2008-11-01 2008-12-02 2010-06-01 2011-09-01 2015-09-01 2018-11-01

use "format()" to normalize. "%Y-%m" should be the option.

> format(as.mondate(index(to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1][to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1] < 0.89])[-9])+1,"%y-%m")
[1] "08-02" "08-10" "08-11" "08-12" "10-06" "11-09" "15-09" "16-02"


> format(as.mondate(index(to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1][to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1] < 0.89])[-9])+1,"%Y-%m")
[1] "2008-02" "2008-10" "2008-11" "2008-12" "2010-06" "2011-09" "2015-09" "2016-02"

But index() returns yearmon calss and the direct coversion from yearmon to mondate triggers the warning message. If you don't like it, insert "as.Date()" between them.

警告メッセージ:
Attempting to convert class 'yearmon' to 'mondate' via 'as.Date' then 'as.numeric'. Check results!

> format(as.mondate(as.Date(index(to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1][to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1] < 0.89]) ))+1,"%Y-%m")[-9]
[1] "2008-02" "2008-10" "2008-11" "2008-12" "2010-06" "2011-09" "2015-09" "2016-02"

The result was disappointing. Hope, this month is exceptional.

> monthlyReturn(GSPC)[format(as.mondate(index(to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1][to.monthly(GSPC)[,3]/to.monthly(GSPC)[,1] < 0.89])[-9])+1,"%Y-%m")]
           monthly.returns
2008-02-29    -0.034761193
2008-10-31    -0.169424524
2008-11-28    -0.074849043
2008-12-31     0.007821577
2010-06-30    -0.053882442
2011-09-30    -0.071761988
2015-09-30    -0.026442832
2016-02-29    -0.004128360

you can do the similar calculation for monthlyReturn().

2018年10月27日土曜日

merge all data eps spline gpuc


merge all data

result.gpuc <- lm(apply.quarterly(SP5[k2k],mean)[,1] ~ PAq[k2k] * UCq[k2k] * G[k2k]*CSq[k2k] - UCq[k2k] -G[k2k] - PAq[k2k]*G[k2k] - UCq[k2k]*G[k2k]*CSq[k2k])
result.eps <- lm(apply.quarterly(SP5[,4][k2k],mean) ~ eps_year_xts[k2k]+apply.quarterly(PA[k2k],mean)+apply.quarterly(CS[k2k],mean)+apply.quarterly(UC[k2k],mean))
SP5.result <- merge(residuals(result.gpuc),predict(result.gpuc),residuals(result.eps),predict(result.eps))

GSPC.predict <- merge(to.monthly(GSPC)[substr(k2k,11,23)],last(spline(seq(1,length(SP5.result[,1]),1),as.vector(SP5.result[,2]),n=length(SP5.result[,1])*3+1)$y,n=length(to.monthly(GSPC)[,1][substr(k2k,11,23)])),last(spline(seq(1,length(SP5.result[,1]),1),as.vector(SP5.result[,4]),n=length(SP5.result[,1])*3+1)$y,n=length(to.monthly(GSPC)[,1][substr(k2k,11,23)])),suffixes=c('','spline','eps'))


plot(merge(GSPC.predict[,4],GSPC.predict[,7],GSPC.predict[,8],GSPC.predict[,4]-GSPC.predict[,7],GSPC.predict[,4]-GSPC.predict[,8]),main="GSPC.predict[,4] vs. GSPC.predict[,7]",grid.ticks.on='months')
tmp.legend <- "Black: actual \nRed: spline\nGreen: eps"
addLegend(legend.loc = "topleft", legend.names = tmp.legend,col=3)
tmp.addTA <- as.xts(rep(2800,length(index(GSPC.predict))),index(GSPC.predict))

addSeries(tmp.addTA,on=1,col=6,lwd=1)

2018年10月22日月曜日

SP5,eps,PAYEMS,UC,CS


> summary(lm(apply.quarterly(SP5[,4][k2k],mean) ~ eps_year_xts[k2k]+apply.quarterly(PA[k2k],mean)+apply.quarterly(CS[k2k],mean)+apply.quarterly(UC[k2k],mean)))

Call:
lm(formula = apply.quarterly(SP5[, 4][k2k], mean) ~ eps_year_xts[k2k] +
    apply.quarterly(PA[k2k], mean) + apply.quarterly(CS[k2k],
    mean) + apply.quarterly(UC[k2k], mean))

Residuals:
    Min      1Q  Median      3Q     Max
-178.63  -65.62   14.98   57.55  320.86

Coefficients:
                                 Estimate Std. Error t value Pr(>|t|) 
(Intercept)                    -8.791e+03  4.347e+02 -20.222  < 2e-16 ***
eps_year_xts[k2k]               7.243e+00  6.983e-01  10.373 1.01e-15 ***
apply.quarterly(PA[k2k], mean)  7.740e-02  3.649e-03  21.210  < 2e-16 ***
apply.quarterly(CS[k2k], mean) -4.994e+00  5.692e-01  -8.774 7.71e-13 ***
apply.quarterly(UC[k2k], mean)  1.304e-01  5.309e-02   2.456   0.0166 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 97.83 on 69 degrees of freedom
Multiple R-squared:   0.96, Adjusted R-squared:  0.9577
F-statistic: 413.8 on 4 and 69 DF,  p-value: < 2.2e-16

tmp <- predict(lm(apply.quarterly(SP5[,4][k2k],mean) ~ eps_year_xts[k2k]+apply.quarterly(PA[k2k],mean)+apply.quarterly(CS[k2k],mean)+apply.quarterly(UC[k2k],mean)))
GSPC.predict <- merge(GSPC.predict[,-8],last(spline(seq(1,74,1),tmp,n=220)$y,n=138),suffixes = c("","eps"))

2018年10月18日木曜日

Composite Leading Indicator - OECD

# download csv from oecd(https://data.oecd.org/leadind/composite-leading-indicator-cli.htm)
# store it in CLI3.csv
# this file contains multiple regions data. you have to specify the name of the region.
# extract USA only entries
# 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

cli_xts <- merge(as.xts(read.zoo(read.csv("~/Downloads/oecd.csv"))),as.xts(read.zoo(read.csv("~/Downloads/usa.csv"))),suffixes = c("oecd","usa"))

plot.default((cli_xts$usa["2012-07::2018-08"]   / as.vector(cli_xts$usa["2012-01::2018-02"])-1)*100,cli_xts$usa["2012-07::2018-08"])
tmp <- par('usr')
plot.default((cli_xts$usa["2012-07::2018-08"] / as.vector(cli_xts$usa["2012-01::2018-02"])-1)*100,cli_xts$usa["2012-07::2018-08"] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]))
plot.default((cli_xts$usa["2012-07::2018-08"] / as.vector(cli_xts$usa["2012-01::2018-02"])-1)*100,cli_xts$usa["2012-07::2018-08"] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]))
par(new=T)
plot.default((cli_xts$usa["2017-09::2018-08"] / as.vector(cli_xts$usa["2017-03::2018-02"])-1)*100,cli_xts$usa["2017-09::2018-08"] ,xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=2)
par(new=T)
plot.default((cli_xts$usa["2016-09::2017-08"] / as.vector(cli_xts$usa["2016-03::2017-02"])-1)*100,cli_xts$usa["2016-09::2017-08"], xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=3)
par(new=T)
plot.default((cli_xts$usa["2015-09::2016-08"] / as.vector(cli_xts$usa["2015-03::2016-02"])-1)*100,cli_xts$usa["2015-09::2016-08"], xlim=c( tmp[1],tmp[2]), ylim=c(tmp[3], tmp[4]),col=4)

2018年10月8日月曜日

macos mediawiki


ファイルの場所


ドキュメントルートは。

  /Library/WebServer/Documents/

wikiのルートは1.29.0ならこんな感じ。update.phpや LocalSettings.php もここで見つかる。

   /Library/WebServer/Documents/mediawiki-1.29.0

httpd.confは

  /etc/apache2/

OSのアップグレード時に先祖がえりしていることがあるので、忘れずに

   LoadModule php7_module libexec/apache2/libphp7.so

をコメントアウトすること。


アップグレードの注意

mediawikiのアップグレードをしたら、

 $ sudo php update.php

を忘れないこと。update.phpはmediawiki配布パッケージの直下にあるはず。実行はこんな感じで。

   sudo apachectl stop
   sudo php update.php
   sudo apachectl start

エラーが起きたら


LocalSettings.php の末尾に以下の3行を追加すること。エラー・メッセージが詳細になります。

   $wgShowExceptionDetails = true;
   $wgShowDBErrorBacktrace = true;
   $wgShowSQLErrors = true;



2018年10月6日土曜日

Hiroyuki Sawano - Best of "Epic BGM Music" 澤野弘之【Best 3 Hour Mix】HQ



https://www.youtube.com/watch?v=qAxg37wrVCE

( 0:00 ) 蔑、guy
( 2:49 ) This Is A Fight To Change The World ft. Mika Kobayashi
( 6:17 ) CR€SC∃NT ft. Naoshi Jimbow & Mika Kobayashi
( 8:55 ) Melancholia ft. David Whitaker & Aimee Blackschleger
( 13:01 ) No Naming Sense Type Five-Star Goku Uniform
( 18:11 ) raTEoREkiSImeAra
( 22:06 ) Important Event Highlight Type Twelve-Star Goku Uniform
( 23:59 ) KiryuG@kiLL
( 26:17 ) goriLLAjaL
( 28:15 ) KEKKAI ft. Mpi & Mika Kobayashi
( 33:56 ) RE:ARR.X
( 38:46 ) CODENAMEZ
( 43:56 ) NO.EX01
( 48:08 ) MKAlieZ ft. Mika Kobayashi <a0v>
( 51:45 ) α≠a ft. Mika Kobayashi
( 55:56 ) G-LOW-S→F.S.K.O
( 1:00:50 ) 1st-Mov. : E
( 1:05:47 ) z37b20a13t01t08le
( 1:08:53 ) The Second Movement: A-maimon
( 1:12:27 ) Genesi§
( 1:15:40 ) AcE & ArMs
( 1:20:54 ) [104EYES-29CA2]suite-2楽章
( 1:22:47 ) ətˈæk 0N tάɪtn + ətˈæk 0N tάɪtn <3Tv> ft. Mika Kobayashi
( 1:27:01 ) Shingeki st-hrn-egt20130629 Kyojin + TheWeightOfLives
( 1:30:50 ) EREN The Coordinate + ERENthe標 <MOVIEver.>
( 1:37:09 ) EMAymniam
( 1:40:34 ) E.M.A
( 1:44:20 ) YAMANAIAME ft. Mica Caldito / Mpi / Mika Kobayashi
( 1:48:44 ) 4GL4yu8RE:E + NeLLnaki9 + 高度8b6n + RE:3343 + 音:9RE:eita-zu
( 2:00:36 ) FANTASIA 1st Mov:[Open a title page] Reprogramming
( 2:05:41 ) 横浜-BIGMAN
( 2:07:22 ) MURDER CASE
( 2:10:43 ) BaNG!!
( 2:14:20 ) BOXX!!
( 2:17:42 ) LINK01BPM130KINPAKU
( 2:20:40 ) Dragon Demon <Scroll of the Unification of the Land>
( 2:26:27 ) The First Movement: Mephistopheles
( 2:27:38 ) BLUe-eXOSUiTe-toKYOto-One + BLUe-eXOSUiTe-toKYOto-Two
( 2:37:38 ) ymniam-orch ft. Mika Kobayshi
( 2:40:10 ) ThreeFiveNineFourε ft. Mika Kobayashi
( 2:44:12 ) The Brave ft. Yosh
( 2:47:46 ) Seek Your Fate
( 2:51:03 ) OH92&HrBrM
( 2:53:32 ) MOBILE SUIT <W-REC MIX>
( 2:57:38 ) JAILBREAK

read file and normalize data to adjust TZ.


THIS ENTRY IS OBSOLETE. PLEASE GO TO THIS PAGE

# read data as csv format and convert to xts to plot
#
Sys.setenv(TZ=Sys.timezone())
bp <- read.csv("~/Downloads/bp - シート1.csv")
system("rm \"$HOME/Downloads/bp - シート1.csv\"")
bp.xts <- xts(bp[,c(-1,-2,-6)],as.POSIXct(paste(bp$Date,bp$Time,sep=" "),tz=Sys.timezone()),tz=Sys.timezone())
# 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)

2018年9月20日木曜日

addTA,approx


Draw the line between given 2 positions on the candle chart.

my_draw_line_on_candle <- function(par_xts,start_val,start_date,end_val,end_date){
  len <- length(seq(as.Date(start_date),as.Date(end_date),by='weeks'))
  plot_data <- approx(seq(1,2,1),c(start_val,end_val),n=len,method='linear')$y
  tmp_xts <- as.xts(plot_data,seq(as.Date(start_date),as.Date(end_date),by='weeks'))
  addTA(tmp_xts,on=1,legend="slope")
}


> my_draw_line_on_candle(weekly_pf,2273486,"2018-01-26",2189051,"2018-09-19")
> my_draw_line_on_candle(weekly_pf,as.vector(first(weekly_pf)[,1]),index(first(weekly_pf)),2188051,"2018-09-19")
> my_draw_line_on_candle(weekly_pf,1160008,"2017-01-06",2163476,"2018-09-18")



> last(weekly_pf)[,4]/as.vector(first(weekly_pf)[,1])
              close
2018-09-19 3.450367
> length(index(weekly_pf))
[1] 247
> 3.450367**(1/247)
[1] 1.005027
> seq(1,247,1)
  [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27
<skip>
[244] 244 245 246 247
> 1.005027**seq(1,247,1)
  [1] 1.005027 1.010079 1.015157 1.020260 1.025389 1.030544 1.035724 1.040931 1.046163 1.051423 1.056708 1.062020
 <skip>
[241] 3.348365 3.365197 3.382114 3.399116 3.416203 3.433376 3.450636
> tmp <- as.xts(634440.2*1.005027**seq(1,247,1),index(weekly_pf))
> addTA(tmp,on=1,legend="powered")

my_draw_line_on_candle(weekly_pf,as.vector(first(weekly_pf)[,1]),index(first(weekly_pf)),last(weekly_pf)[,4],index(last(weekly_pf)[,4]))
tmp <- as.xts((as.vector((last(weekly_pf)[,4]/as.vector(first(weekly_pf)[,1]))**(1/length(index(weekly_pf))))**seq(1,length(index(weekly_pf)),1))*as.vector(first(weekly_pf)[,1]),index(weekly_pf))
addTA(tmp,on=1,legend="powered")
tmp <- as.xts((as.vector((1800000/as.vector(first(weekly_pf)[,1]))**(1/length(index(weekly_pf))))**seq(1,length(index(weekly_pf)),1))*as.vector(first(weekly_pf)[,1]),index(weekly_pf))

addTA(tmp,on=1,legend="")