盆暗の学習記録

データサイエンスを中心として,日々学んだことの備忘録としていく予定です。初心者であり独学なので内容には誤りが含まれる可能性が大いにあります。

Rとe-statAPIで在庫循環図

「公的統計の読み方」をテーマにした一般教養科目を履修したところ,
景気判断の指標の一つである在庫循環図を書く機会があったのでメモします。

在庫循環図とは

  • 縦軸に鉱工業指数の在庫指数の前年比を、横軸に同生産指数の前年比をプロットしたもの
  • 通常,反時計回りに回りながら短期の景気循環を表す

f:id:nigimitama:20180505072058p:plain:w700

Rで実行

1. データの取得

2つの方法があります

  1. 経産省のサイトからダウンロードする
  2. e-stat APIからデータを取得する

私はe-statAPIを使いましたが,実は最終更新日が2017年の5月となっており,それ以降のデータはサイトからダウンロードするしかありません。

## 在庫循環図(鉱工業) ----------------------------------------------------
library(dplyr)

# e-stat
library(estatapi)
AppID <- "" # 自分のAPIのIDを入力

# 1. 統計を検索
#ResultData <- estat_getStatsList(appId = AppID, searchWord = "鉱工業生産・出荷・在庫指数")
#ResultData_df <- ResultData %>% as.data.frame()
#ResultData_df %>% head()

# 2. データの取得:0003181031 業種別/四半期、年、年度/原指数 付加価値額生産(平成22年=100.0) ----
#estat_getMetaInfo(appId = AppID, statsDataId = "0003181031")
output <- estat_getStatsData(appId = AppID,
                             statsDataId = "0003181031",
                             cdCat02 = "0001000" # 鉱工業
                             )

# 3. データの取得:0003181068 業種別/四半期、年、年度/原指数 在庫(期末)(平成22年=100.0) ----
#estat_getMetaInfo(appId = AppID, statsDataId = "0003181068")
stock <- estat_getStatsData(appId = AppID,
                            statsDataId = "0003181068",
                            cdCat02 = "0001000" # 鉱工業
                            )

# 4. merge ---------------------------------------------------------
df = data.frame(QE = output[20:56, c('統計項目A')][[1]],
                output = output[20:56, c('value')][[1]])
df = merge(df, 
           data.frame(QE = stock[20:56, c('統計項目A')][[1]],
                      stock = stock[20:56, c('value')][[1]])   )

# 5. 前年同期比を計算する。{(当期ー前年同期)/前年同期}----------
# 前年同期比関数
Year_on_year_rate <- function(x) {
  y <- NA
  for(i in 5:length(x)){
    y[i] = (x[i] - x[i-4])/x[i-4] # 四半期を使ったので-4
  }
  return(y)
}

# run
df <- data.frame(df,
                 output_r = Year_on_year_rate(df$output),
                 stock_r = Year_on_year_rate(df$stock)
                 )
df <- na.omit(df)

2. プロット

# 6. plot:2009Q1 ~ 2017Q1 ------------------------------------------------------
# デフォルトの関数でplot
plot(df$output_r, df$stock_r, type = 'l')
points(df$output_r, df$stock_r)

f:id:nigimitama:20180505064414p:plain:w700

# ggplotでplot
library(ggplot2)
windowsFonts(Yu = windowsFont("Yu Gothic UI")) #新しいフォントファミリーを定義

g <- ggplot(df, aes(x = output_r, y = stock_r)) +
  geom_point(color = "royalblue", alpha = 0.7, size = 2) +
  geom_path(color = "royalblue", alpha = 0.7)+  # geom_lineではなくpathを使う
  labs(x = "生産前年同期比(%)", y = "在庫前年同期比(%)",
       title = "在庫循環図(鉱工業)")+
  theme(text = element_text(family = 'Yu'))+ # 日本語フォント指定
  # 軸
  geom_vline(xintercept = 0)+
  geom_hline(yintercept = 0)+
  geom_abline(intercept = 0, slope = 1, lty = 2)+
  geom_abline(intercept = 0, slope = -1, lty = 2)+
  # データラベル
  geom_label(aes(label = QE, x = output_r, y = stock_r),
             alpha = 0.3, vjust = 0, color = "steelblue")
g

f:id:nigimitama:20180505064537p:plain:w700

# 7. plot:2014Q1 ~ 2017Q1 ------------------------------------------------------

g <- ggplot(df[21:33,], aes(x = output_r, y = stock_r)) +
  geom_point(color = "royalblue", alpha = 0.7, size = 2) +
  geom_path(color = "royalblue", alpha = 0.7)+  # geom_lineではなくpathを使う
  labs(x = "生産前年同期比(%)", y = "在庫前年同期比(%)",
       title = "在庫循環図(鉱工業)")+
  theme(text = element_text(family = 'Yu'))+ # 日本語フォント指定
  # 軸
  geom_vline(xintercept = 0)+
  geom_hline(yintercept = 0)+
  geom_abline(intercept = 0, slope = 1, lty = 2)+
  geom_abline(intercept = 0, slope = -1, lty = 2)+
  # データラベル
  geom_label(aes(label = QE, x = output_r, y = stock_r),
             alpha = 0.3, vjust = 0, color = "steelblue")
g

f:id:nigimitama:20180505072505p:plain:w700