■ 応用

2013年12月25日

● 日銀短観を取り込む

日銀ではいくつかの統計データを一括でダウンロード可能にしています。
その中の短観のデータをPowerFolderで取り込むと様々な切り口でデータを見ることができます。

短観データの取込

短観データは日銀のホームページから取得します。
今回は以下のURLからダウンロードしました。
http://www.stat-search.boj.or.jp/info/dload.html
短観はこのページの下の方にあります。

ダウンロードしたファイルはZIP形式で圧縮されており、解凍するとCSV形式のファイルが出現します。
ダウンロードしたファイルの仕様は「ファイル形式仕様」に説明があります。
  • レコード:可変長
  • 文字コード:JIS
  • ファイル形式:テキスト
  • 区切り文字(デリミタ):カンマ
フィールドは4つで次のような説明があります。

フィールド フィールド名 データ
データ長
バイト数
内容
1 データコード 文字 1〜40 半角英数字。検索機能上のコードと一部同じです(注)。
2 期種 文字 1〜2 Q:四半期
FH:年度半期
FY:年度
3 データ時期 文字 4〜6 四半期:YYYYQQ
年度半期:YYYYHH
年度:YYYY
4 計数部分 文字 1〜15 バイト数には「-」(負符号)を含め、「.」(小数点)は含まない。
数値以外のデータは、NA:秘匿値、オーバーフロー値、計算不可、ND:欠損値。

フィールドは4つですが、「データコード解説」の説明によれば、1番目のデータコードが情報を組み合わせたものになっており、主要な部分は次のようになっています。
  • 集計区分
  • 業種コード
  • 項目コード
  • 計算形態
  • 期種
  • 実績予測
  • 企業規模
  • 詳細区分
これらの説明によれば、短観データの文字コードはJISである一方、PowerFolderの文字コードはシフトJISですが、実際のデータの中身を見ると半角の英数字だけなので、そのままPowerFolderに取り込みます。

PowerFolderのカラム

PowerFolderに取り込む時のカラムはCSVの4つのフィールドに加えて、データコードを分解したもの、分解したものが表す内容、も用意することとし、次のようにします。

1 データコード CSVのフィールド1
2 期種 CSVのフィールド2
3 データ時期 CSVのフィールド3
4 計数部分 CSVのフィールド4
5 集計区分 データコードから抽出
6 業種コード データコードから抽出
7 項目コード データコードから抽出
8 計算形態 データコードから抽出
9 期種A データコードから抽出(CSVのフィールド2と名前が同じにならないようにした)
10 実績予測 データコードから抽出
11 企業規模 データコードから抽出
12 詳細区分 データコードから抽出
13 集計区分内容 集計区分の表す内容 - 単純集計、母集団推計
14 業種コード内容 業種コードの表す内容 - 全産業、製造業、繊維、等
15 項目コード内容 項目コードの表す内容 - 金融機関借入金、CP、等
16 項目コード項目群 項目コードに対応する項目群 - 四半期項目、判断項目、等
17 計算形態内容 計算形態の表す内容 - 実績、比率等、有効回答社数、等
18 期種A内容 期種Aの表す内容 - 四半期、年度半期、年度
19 実績予測内容 実績予測の表す内容 - 実績、最近、先行き、等
20
企業規模内容 企業規模の表す内容 - 全規模合計、大企業、中堅企業、中小企業
21 詳細区分内容 詳細区分の表す内容 - 選択肢1、2、3、等

PowerFolder取り込み時の処理

短観のCSVファイルのデータコードを分解し、各部の内容を求める処理は、PowerFolderのCSV取込時の処理で行うこととします。
具体的には、PowerFolderの「CSV取込」画面で「処理」タブの「取込時処理」に処理を記述します。

CSV取込画面


処理の内容は次の通りです。

setvalue("短観.集計区分", substring(短観.データコード,5,1))
setvalue("短観.業種コード", substring(短観.データコード,6,4))
setvalue("短観.項目コード", substring(短観.データコード,10,3))
setvalue("短観.計算形態", substring(短観.データコード,13,1))
setvalue("短観.期種A", substring(短観.データコード,14,2))
setvalue("短観.実績予測", substring(短観.データコード,16,1))
setvalue("短観.企業規模", substring(短観.データコード,17,1))
setvalue("短観.詳細区分", substring(短観.データコード,20,1))

setvalue("短観.集計区分内容",
  if(短観.集計区分='F',"単純集計",
  if(短観.集計区分='G',"母集団推計",
  "ERROR"))
)
setvalue("短観.業種コード内容",
  if(短観.業種コード="0000","全産業",
  if(短観.業種コード="1000","製造業",
  if(短観.業種コード="1020","繊維",
  if(短観.業種コード="1030","木材・木製品",
  if(短観.業種コード="1050","紙・パルプ",
  if(短観.業種コード="1060","化学",
  if(短観.業種コード="1070","石油・石炭製品",
  if(短観.業種コード="1100","窯業・土石製品",
  if(短観.業種コード="1110","鉄鋼",
  if(短観.業種コード="1120","非鉄金属",
  if(短観.業種コード="1010","食料品",
  if(短観.業種コード="1130","金属製品",
  if(短観.業種コード="1149","はん用・生産用・業務用機械",
  if(短観.業種コード="1141","はん用機械",
  if(短観.業種コード="1142","生産用機械",
  if(短観.業種コード="1143","業務用機械",
  if(短観.業種コード="1150","電気機械",
  if(短観.業種コード="1160","輸送用機械",
  if(短観.業種コード="1180","自動車",
  if(短観.業種コード="1185","造船・重機、その他輸送用機械",
  if(短観.業種コード="1500","その他製造業",
  if(短観.業種コード="3030","素材業種",
  if(短観.業種コード="3040","加工業種",
  if(短観.業種コード="2000","非製造業",
  if(短観.業種コード="2011","建設",
  if(短観.業種コード="2019","不動産・物品賃貸",
  if(短観.業種コード="2012","不動産",
  if(短観.業種コード="2090","物品賃貸",
  if(短観.業種コード="2020","卸売・小売",
  if(短観.業種コード="2021","卸売",
  if(短観.業種コード="2024","小売",
  if(短観.業種コード="2040","運輸・郵便",
  if(短観.業種コード="2059","情報通信",
  if(短観.業種コード="2050","通信",
  if(短観.業種コード="2051","情報サービス",
  if(短観.業種コード="2052","その他情報通信",
  if(短観.業種コード="2060","電気・ガス",
  if(短観.業種コード="2081","対事業所サービス",
  if(短観.業種コード="2082","対個人サービス",
  if(短観.業種コード="2100","宿泊・飲食サービス",
  if(短観.業種コード="2500","鉱業・採石業・砂利採取業",
  if(短観.業種コード="5000","金融機関",
  if(短観.業種コード="5100","銀行業",
  if(短観.業種コード="5200","信用金庫・系統金融機関等",
  if(短観.業種コード="5400","金融商品取引業",
  if(短観.業種コード="5500","保険業",
  if(短観.業種コード="5600","貸金業等",
  if(短観.業種コード="0001","全産業(含む金融機関)",
  if(短観.業種コード="2001","非製造業(含む金融機関)",
  if(短観.業種コード="1140","一般機械",
  if(短観.業種コード="1200","精密機械",
  if(短観.業種コード="2010","建設・不動産",
  if(短観.業種コード="2080","サービス",
  "ERROR")))))))))))))))))))))))))))))))))))))))))))))))))))))
)
setvalue("短観.項目コード内容",
  if(短観.項目コード="011","金融機関借入金",
  if(短観.項目コード="012","CP",
  if(短観.項目コード="014","社債",
  if(短観.項目コード="016","現金・預金",
  if(短観.項目コード="017","短期所有有価証券",
  if(短観.項目コード="018","投資有価証券",
  if(短観.項目コード="019","雇用者数",
  if(短観.項目コード="020","パート",
  if(短観.項目コード="021","負債計",
  if(短観.項目コード="022","資産計",
  if(短観.項目コード="054","手元流動性残高",
  if(短観.項目コード="811","手元流動性比率",
  if(短観.項目コード="828","パート比率",
  if(短観.項目コード="616","有利子負債残高",
  if(短観.項目コード="617","手元流動性水準",
  if(短観.項目コード="618","雇用者数",
  if(短観.項目コード="601","業況",
  if(短観.項目コード="602","国内での製商品・サービス需給",
  if(短観.項目コード="603","海外での製商品需給",
  if(短観.項目コード="604","製商品在庫水準",
  if(短観.項目コード="605","製商品の流通在庫水準",
  if(短観.項目コード="607","生産・営業用設備",
  if(短観.項目コード="608","雇用人員",
  if(短観.項目コード="609","資金繰り",
  if(短観.項目コード="612","金融機関の貸出態度",
  if(短観.項目コード="613","借入金利水準",
  if(短観.項目コード="614","販売価格",
  if(短観.項目コード="615","仕入価格",
  if(短観.項目コード="619","CP発行環境",
  if(短観.項目コード="102","売上高",
  if(短観.項目コード="104","輸出額",
  if(短観.項目コード="108","土地投資額",
  if(短観.項目コード="109","設備投資額",
  if(短観.項目コード="112","ソフトウェア投資額",
  if(短観.項目コード="150","想定為替レート",
  if(短観.項目コード="151","内需額",
  if(短観.項目コード="162","ソフトウェアを含む設備投資額(除く土地投資額)",
  if(短観.項目コード="302","材料費",
  if(短観.項目コード="303","人件費",
  if(短観.項目コード="304","減価償却費",
  if(短観.項目コード="305","営業利益",
  if(短観.項目コード="306","金融収益",
  if(短観.項目コード="307","金融費用",
  if(短観.項目コード="308","経常利益",
  if(短観.項目コード="309","当期純利益",
  if(短観.項目コード="354","欠損社数",
  if(短観.項目コード="355","経常利益好転悪化社数",
  if(短観.項目コード="871","売上高経常利益率",
  if(短観.項目コード="401","新卒採用者数",
  if(短観.項目コード="110","リース資産(設備投資額の内訳)",
  if(短観.項目コード="111","リース用物件の購入額",
  if(短観.項目コード="113","リース資産(ソフトウェア投資額の内訳)",
  if(短観.項目コード="114","リース用ソフトウェアの購入額",
  "ERROR")))))))))))))))))))))))))))))))))))))))))))))))))))))
)
setvalue("短観.項目コード項目群",
  if(短観.項目コード="011","四半期項目",
  if(短観.項目コード="012","四半期項目",
  if(短観.項目コード="014","四半期項目",
  if(短観.項目コード="016","四半期項目",
  if(短観.項目コード="017","四半期項目",
  if(短観.項目コード="018","四半期項目",
  if(短観.項目コード="019","四半期項目",
  if(短観.項目コード="020","四半期項目",
  if(短観.項目コード="021","四半期項目",
  if(短観.項目コード="022","四半期項目",
  if(短観.項目コード="054","四半期項目",
  if(短観.項目コード="811","四半期項目",
  if(短観.項目コード="828","四半期項目",
  if(短観.項目コード="616","先行き予測に関する判断",
  if(短観.項目コード="617","先行き予測に関する判断",
  if(短観.項目コード="618","先行き予測に関する判断",
  if(短観.項目コード="601","判断項目",
  if(短観.項目コード="602","判断項目",
  if(短観.項目コード="603","判断項目",
  if(短観.項目コード="604","判断項目",
  if(短観.項目コード="605","判断項目",
  if(短観.項目コード="607","判断項目",
  if(短観.項目コード="608","判断項目",
  if(短観.項目コード="609","判断項目",
  if(短観.項目コード="612","判断項目",
  if(短観.項目コード="613","判断項目",
  if(短観.項目コード="614","判断項目",
  if(短観.項目コード="615","判断項目",
  if(短観.項目コード="619","判断項目",
  if(短観.項目コード="102","年度計画(事業計画)",
  if(短観.項目コード="104","年度計画(事業計画)",
  if(短観.項目コード="108","年度計画(事業計画)",
  if(短観.項目コード="109","年度計画(事業計画)",
  if(短観.項目コード="112","年度計画(事業計画)",
  if(短観.項目コード="150","年度計画(事業計画)",
  if(短観.項目コード="151","年度計画(事業計画)",
  if(短観.項目コード="162","年度計画(事業計画)",
  if(短観.項目コード="302","年度計画(損益)",
  if(短観.項目コード="303","年度計画(損益)",
  if(短観.項目コード="304","年度計画(損益)",
  if(短観.項目コード="305","年度計画(損益)",
  if(短観.項目コード="306","年度計画(損益)",
  if(短観.項目コード="307","年度計画(損益)",
  if(短観.項目コード="308","年度計画(損益)",
  if(短観.項目コード="309","年度計画(損益)",
  if(短観.項目コード="354","年度計画(損益)",
  if(短観.項目コード="355","年度計画(損益)",
  if(短観.項目コード="871","年度計画(損益)",
  if(短観.項目コード="401","新卒採用状況",
  if(短観.項目コード="110","年度計画(事業計画)",
  if(短観.項目コード="111","年度計画(事業計画)",
  if(短観.項目コード="113","年度計画(事業計画)",
  if(短観.項目コード="114","年度計画(事業計画)",
  "ERROR")))))))))))))))))))))))))))))))))))))))))))))))))))))
)
setvalue("短観.計算形態内容",
  if(短観.計算形態='A',"実額、比率等(集計値)",
  if(短観.計算形態='B',"有効回答社数",
  if(短観.計算形態='C',"前年同期比(集計値)",
  if(短観.計算形態='F',"選択肢別社数構成比",
  if(短観.計算形態='G',"D.I.",
  if(短観.計算形態='2',"修正率(集計値)",
  "ERROR"))))))
)
setvalue("短観.期種A内容",
  if(短観.期種A='CQ',"四半期",
  if(短観.期種A='FH',"年度半期",
  if(短観.期種A='FY',"年度",
  "ERROR")))
)
setvalue("短観.実績予測内容",
  if(likecmp(短観.項目コード項目群,"四半期%"),
    // 四半期項目の場合
    if(短観.実績予測 = "0", "実績", "ERROR"),
  if(likecmp(短観.項目コード項目群,"判断%") OR likecmp(短観.項目コード項目群,"%判断"),
    // 判断項目の場合
    if(短観.実績予測 = "0", "最近",if(短観.実績予測 = "1", "先行き","ERROR")),
  if(likecmp(短観.項目コード項目群,"年度計画%"),
    // 年度計画項目の場合
    if(短観.実績予測 = "0", "実績",
    if(短観.実績予測 = "1", "実績見込",
    if(短観.実績予測 = "2", "12月予測",
    if(短観.実績予測 = "3", "9月予測",
    if(短観.実績予測 = "4", "6月予測",
    if(短観.実績予測 = "5", "3月予測",
    "ERROR")))))),
    // 労働項目(その他)の場合
    if(短観.実績予測 = "0", "実績",
    if(短観.実績予測 = "1", "実績見込",
    if(短観.実績予測 = "2", "予測3",
    if(短観.実績予測 = "3", "予測2",
    if(短観.実績予測 = "4", "予測1",
    "ERROR")))))
  "ERROR")))
)
setvalue("短観.企業規模内容",
  if(短観.企業規模="0","全規模合計",
  if(短観.企業規模="1","大企業",
  if(短観.企業規模="2","中堅企業",
  if(短観.企業規模="3","中小企業",
  "ERROR"))))
)
setvalue("短観.詳細区分内容",
  if(短観.詳細区分="0","通常項目",
  if((likecmp(短観.項目コード項目群,"判断%") OR likecmp(短観.項目コード項目群,"%判断")) AND 短観.計算形態="F",
    if(短観.詳細区分="1","選択肢1",
    if(短観.詳細区分="2","選択肢2",
    if(短観.詳細区分="3","選択肢3",
    "ERROR"))),
  if(短観.項目コード="355",
    if(短観.詳細区分="1","増益",
    if(短観.詳細区分="2","黒字転換",
    if(短観.詳細区分="3","赤字縮小",
    if(短観.詳細区分="4","好転",
    if(短観.詳細区分="5","減益",
    if(短観.詳細区分="6","赤字転落",
    if(短観.詳細区分="7","赤字拡大",
    if(短観.詳細区分="8","悪化",
    if(短観.詳細区分="9","不変",
    "ERROR")))))))))
  "ERROR")))
)

"setvalue()"や"substring()"はPowerFolderの組込み関数で、マニュアルの「Y 式と組込み関数」をご覧下さい。

CSV取込時の動作は、まずCSVファイルから1行をメモリ上に読み込み、メモリ上のデータを対象として処理を実行します。
従って組込み関数 setvalue() はメモリ上のデータに対して値をセットすることになります。
処理を実行して、メモリ上のデータの必要なフィールドの値を埋めた後、PowerFolderのDBにデータを追加します。

短観データの取込

日銀のサイトより最終更新日付が2013年12月17日の短観データをダウンロードして取り込みました。
データ件数は、829,891件、時間は、データコードの分解や内容の変換に時間がかかり、約2時間程でした。
取込時間はPCの処理能力に大きく左右されます。
参考までに、使用したPCのパフォーマンス情報は次の通りです。

PCのパフォーマンス

どのように見るか?

日銀のサイトの「時系列同型データ検索サイト」の「主要指標グラフ」ページにおいて、グラフの系列をメニュー検索から追加する時の項目選択の仕方を参考にして、次のような順番でデータの項目を見ていくことにします。
  1. 項目コード項目群
  2. 計算形態内容
  3. 項目コード内容
  4. 業種コード内容
  5. 企業規模内容
  6. 実績予測内容
PowerFolderでは、列挙フォルダを使うと項目の内容がフォルダとして展開されるので、フォルダを順次選んでいくことで目的のデータにたどり着けます。
実際の動作は以下のようになります。


この動作例はWinkで作成しました。

HTML形式の集計表を作る

PowerFolderでは集計表や任意の文字列を配置したページをHTML形式で出力することができます。
以下に例を挙げておきます。

日銀短観 - 判断項目:D.I. 【項目、業種、企業規模 のカラム順】

日銀短観 - 判断項目:D.I. 【業種、項目、企業規模 のカラム順】

日銀短観 - 判断項目:D.I. 【企業規模、項目、業種 のカラム順】

業況判断DI の変化

業況判断DIの値は 「業況が良いの%」 から 「悪いの%」  を引いたものです。
これを調査時期順に並べ増減を比較し景気の判断の参考にします。
PowerFolderには「変化の集計」があり、これを使うと増減のパーセンテージや連続して増減した回数で変化を集計することができます。
実際の動作は以下のようになります。


この動作例はWinkで作成しました。

変化の傾向で検索する

「変化の集計」で連続した増減のパーセンテージや回数が得れる事を説明しました。
また、PowerFolderでは集計した値を検索条件として結果を絞り込むことができます。
2つを組合せることも可能ですので「変化の集計」の増減のパーセンテージや回数を検索条件とすることができます。
  1. D.I.の集計表を作る
  2. 集計の拡張カラムで組込み関数「増減比率()」や「増減回数()」を使い集計のカラムに値をセットする
  3. 表示書式では、関連付いた表のカラムを参照するように集計表のカラムが参照できるので、表示書式に増減比率や増減回数を求めた集計表のカラムを持ってくる
  4. 検索フォルダを作成し検索条件図で表示書式に持ってきた集計表のカラムを対象として条件を設定する
例えば、増減回数が負のものを条件とすることで減少傾向にあるものを検索できます。
減少傾向のものを検索

検索条件の全体は次の通りです。
検索条件

参考までに「3回以上増加」、「増加」、「減少」の3表を載せたHTMLをリンクします。

日銀短観 - 判断項目:D.I.:業況:最近