#177 Pythonを用いて2014年(平成26年)大阪府産業連関表の中間投入額を推計
投稿#147より、2014年(平成26年)大阪府産業連関表の推計に取り組んでいます。
今回の投稿は、Pythonを用いての中間投入額の推計についてです。
(1)中間投入係数の推計
推計方法の確認
下式(変化率方式)により投入係数を求め、平成25年大阪府延長表の生産額を乗じた。下式(変化率方式)により投入係数を求め、平成25年大阪府延長表の生産額を乗じた。
$$
平成23年大阪府基本表の投入係数×\frac{平成25年全国延長表の投入係数}{平成23年全国基本表の投入係数}
$$
なお、中間投入額の推計方法については、RAS法、RECRAS法、変化率方式による推計と検証を行い、最も当てはまりが良かった変化率方式を採用した。なお、中間投入額の推計方法については、RAS法、RECRAS法、変化率方式による推計と検証を行い、最も当てはまりが良かった変化率方式を採用した。
大阪府総務部統計課「平成25年(2013年)大阪府産業連関表(延長表)報告書」より
平成26年全国延長表(基本分類)を部門統合
平成26年全国延長表(経済産業省)は統合小分類(190部門)での投入係数表が公表されていません。そこで、まずは平成26年全国延長表の統合小分類(190部門)での取引基本表を作成します。
平成26年全国延長表の基本分類での取引基本表を加工、つまり、基本分類を統合小分類に部門統合していきます。
最初にタテ(列方向)に部門統合した後、ヨコ(行方向)に部門統合していくことになります。
平成26年全国延長表のタテ(列方向)での部門統合
平成26年全国延長表をタテ(列方向)に部門統合を行うPythonのコードは、以下のようになります。
コード177-1
# H26全国延長表のタテ(列方向)での部門統合
# h26全国延長表基本分類のCSVファイルを読み込む
h26_japan_enl_all_df = pd.read_csv("h26全国延長表基本分類.csv")
# h26全国延長表基本分類のインデックスのコードを7桁の文字列に変換
h26_japan_enl_all_df = to_str_in_code(h26_japan_enl_all_df, 6)
# h26全国延長表列方向統合用CSVファイルを読み込む
h26_japan_enl_index_integrated_df = pd.read_csv("h26全国延長表列方向統合.csv")
# h26全国延長表列方向統合のインデックスのcodeを4桁の文字列に変換
h26_japan_enl_index_integrated_df = to_str_in_code(h26_japan_enl_index_integrated_df, 3)
for col in h26_japan_enl_index_integrated_df.columns:
h26_japan_enl_index_integrated_df[col] = 0
# タテ(列方向)で部門統合
for i in range(len(h26_japan_enl_index_integrated_df.columns)):
idx_int = h26_japan_enl_index_integrated_df.index
for j in range(len(idx_int)):
code4d = idx_int[j]
total = 0
idx_all = h26_japan_enl_all_df.index
for k in range(len(idx_all)):
code7d = idx_all[k]
if code7d.startswith(code4d):
total += h26_japan_enl_all_df.iat[k, i]
else:
continue
h26_japan_enl_index_integrated_df.iat[j, i] = total
平成26年全国延長表のヨコ(行方向)での部門統合
タテ(列方向)に続いて、平成26年全国延長表をヨコ(行方向)に部門統合を行うPythonのコードは、以下のようになります。
コード177-2
# H26全国延長表のヨコ(行方向)での部門統合
# h26全国延長表行方向統合用CSVファイルを読み込む
h26_japan_enl_all_integrated_df = pd.read_csv("H26全国延長表統合.csv")
# h26全国延長表行方向統合用のDataFrameのインデックスのcodeを4桁の文字列に変換
h26_japan_enl_all_integrated_df = to_str_in_code(h26_japan_enl_all_integrated_df, 3)
# ヨコ(行方向)で部門統合
for i in range(len(h26_japan_enl_all_integrated_df.index)):
col_int = h26_japan_enl_all_integrated_df.columns
for j in range(len(col_int)):
code4d = col_int[j]
total = 0
col_all = h26_japan_enl_index_integrated_df.columns
for k in range(len(col_all)):
code6d = col_all[k]
if code6d.startswith(code4d):
total += h26_japan_enl_index_integrated_df.iat[i, k]
else:
continue
h26_japan_enl_all_integrated_df.iat[i, j] = total
平成26年全国延長表の投入係数の推計(「自家輸送」部門は除く)
ここまでで、統合小分類(190部門)での平成26年全国延長表が作成できました。次は、中間投入係数を推計します。中間投入係数は、以下の算出式で推計します。
$$
各項目の中間投入係 = \frac{各項目の中間投入額}{各項目の全国生産額}
$$
中間投入係数を推計するPythonのコードは、以下のようになります。
コード177-3
# H26全国延長表中間投入係数を推計
# 推計結果を格納するDataFrameを作成
h26_japan_enl_mid_eff_df = h26_japan_enl_all_integrated_df.copy()
for col in h26_japan_enl_mid_eff_df.columns:
h26_japan_enl_mid_eff_df[col] = 0
# 中間投入係数を算出
for i in range(len(h26_japan_enl_mid_eff_df.columns)):
# 国内生産学を変数proに格納
pro = h26_japan_enl_all_integrated_df.iat[-1, i]
if pro == 0:
h26_japan_enl_mid_eff_df.iat[-1, i] = 0
continue
else:
for j in range(len(h26_japan_enl_mid_eff_df.index)):
h26_japan_enl_mid_eff_df.iat[j, i] = h26_japan_enl_all_integrated_df.iat[j, i] / pro
h26_japan_enl_mid_eff_df.iat[-1, i] = 1
「自家輸送」部門の投入係数について
平成26年全国延長表では、「5731 自家輸送(旅客自動車)」及び「5732 自家輸送(貨物自動車)」の特掲は行われていません。よって、上述のコードでは、「自家輸送」部門の中間投入係数を推計することができません。
したがって、本研究では、「自家輸送」部門において、平成26年全国延長表の投入係数は平成23年全国基本表の投入係数と比較して変化しないという仮定を置くことにします。
その仮定に基づくと、平成26年大阪府延長表の投入係数を推計する下式
$$
平成23年大阪府基本表の投入係数×\frac{平成25年全国延長表の投入係数}{平成23年全国基本表の投入係数}
$$
において、第2項の分子と分母が等しくなることから、「自家輸送」部門の平成26年大阪府延長表の投入係数は、平成23年大阪府基本表の投入係数と等しくなります。
よって、本研究では、「自家輸送」部門における平成26年大阪府延長表の投入係数は、平成23年大阪府基本表の投入係数と等しいと仮定することになります。
平成26年大阪府延長表の投入係数の推計
中間投入係数を推計する式(変化率方式)を再掲します。
$$
平成23年大阪府基本表の投入係数×\frac{平成25年全国延長表の投入係数}{平成23年全国基本表の投入係数}
$$
平成25年大阪府延長表の投入係数を推計するPythonのコードは、以下のようになります。
コード177-4
# H26大阪府IO表の投入係数を推計
# H23大阪府の投入係数表を読み込む
h23_mid_inj_df = pd.read_csv("平成23年大阪府産業連関表投入係数表.csv")
h23_mid_inj_df = to_str_in_code(h23_mid_inj_df, 3)
# H23全国基本表の投入係数表を読み込む
h23_japan_enl_mid_inj_df = pd.read_csv("平成23年全国延長産業連関表投入係数表.csv")
h23_japan_enl_mid_inj_df = to_str_in_code(h23_japan_enl_mid_inj_df, 3)
# H26大阪府投入係数を格納するDataFrameを作成
h26_mid_inj_df = h26_japan_enl_mid_eff_df.copy()
for col in h26_mid_inj_df.columns:
h26_mid_inj_df[col] = 0
h26_mid_inj_df
# H26大阪府投入係数を推計
for i in range(len(h23_mid_inj_df.columns)):
# 生産額の列の投入係数をproに格納
pro = h23_japan_enl_mid_inj_df.iat[-1, i]
if pro == 0:
continue
elif h26_mid_inj_df.columns[i] == "5731" or h26_mid_inj_df.columns[i] == "5732":
h26_mid_inj_df[h26_mid_inj_df.columns[i]] = h23_mid_inj_df[h26_mid_inj_df.columns[i]]
else:
for j in range(len(h26_mid_inj_df.index)):
if h23_mid_inj_df.iat[j, i] == 0:
h26_mid_inj_df.iat[j, i] = 0
continue
elif h26_mid_inj_df.index[j] == "5731" or h26_mid_inj_df.index[j] == "5732":
h26_mid_inj_df.iat[j, i] = h23_mid_inj_df.iat[j, i]
else:
h26_mid_inj_df.iat[j, i] = (h23_mid_inj_df.iat[j, i]
* h26_japan_enl_mid_eff_df.iat[j, i]
/ h23_japan_enl_mid_inj_df.iat[j, i]
)
h26_mid_inj_df
中間投入額を推計
先程推計した投入係数に、平成26年大阪府延長表の生産額を乗じることで、中間投入額を推計します。
中間投入額を推計するPythonのコードは、以下のようになります。
コード177-5
# H26大阪府IO表の中間投入額を推計
# H26大阪府IO表の中間投入額を格納するDataFrameを作成
h26_io_mid_inj_df = h26_mid_inj_df.copy()
# H26大阪府IO表の中間投入額を推計
for i in range(len(h26_io_mid_inj_df.columns)):
pro = h26_pro_df.iat[0, i]
for j in range(len(h26_io_mid_inj_df.index)):
if pro == 0:
h26_io_mid_inj_df.iat[j, i] = 0
else:
h26_io_mid_inj_df.iat[j, i] = pro * h26_mid_inj_df.iat[j, i]
(2)差額調整
差額調整の方法
列和が生産額と一致するよう、差額を中間投入額の列和に占める各内訳額の構成比により按分し、各内訳額に加えて調整した。
大阪府総務部統計課「平成25年(2013年)大阪府産業連関表(延長表)報告書」より
差額調整を行うPythonのコードは、以下のようになります。
コード177-6
# H26大阪府IO表の中間投入額における差額調整
# 差額調整後のデータを格納するDataFrameを作成
h26_adjusted_mid_df = h26_io_mid_inj_df.copy()
for col in h26_adjusted_mid_df.columns:
# 行"7900"以外の行の値を0にする
h26_adjusted_mid_df[col] = 0
# 行"7900"に府内生産額を代入
h26_adjusted_mid_df.loc["9700", col] = h26_io_mid_inj_df.loc["9700", col]
# 中間投入額の差額を調整する
for i in range(len(h26_adjusted_mid_df.columns)):
# 府内生産額をproに格納
pro = h26_io_mid_inj_df.iat[-1, i]
# 列和をtotalに格納
total = h26_io_mid_inj_df[h26_adjusted_mid_df.columns[i]].sum() - pro
# 差額diffを定義し、計算
diff = pro - total
for j in range(len(h26_adjusted_mid_df.index) - 1):
if pro == 0:
h26_adjusted_mid_df.iat[j, i] = 0
else:
# tmpに中間投入額を一時保存
tmp = h26_io_mid_inj_df.iat[j, i]
# 列和に占める各内訳額の構成比を算出し、ratioに格納
ratio = tmp / total
# 差額を構成比により按分し各内訳額に加えて、resultに格納
result = tmp + diff * ratio
# resultを代入
h26_adjusted_mid_df.iat[j, i] = result
自家輸送部門における行和と府内生産額との差額調整
自家輸送部門(5731及び5732)においては、行和(産出)と投入(行和)のバランスを調整します。
Pythonのコードは、以下のようになります。
コード177-7
# 自家輸送(5731, 5732)の行和を生産額と一致させる
self_trans_list = ["5731", "5732"]
for idx in self_trans_list:
pro = h26_pro_df.loc["production", idx] # 府内生産額
itotal = h26_adjusted_mid_df.loc[idx, :"6911"].sum() # 行和
diff = pro - itotal # 府内生産額t行和の差額
for col in h26_adjusted_mid_df.columns:
tmp = h26_adjusted_mid_df.loc[idx, col] # tmpに産出額を一時保存
ratio = tmp / itotal # 行和に占める各内訳額の構成比
result = tmp + diff * ratio # 差額を構成比により按分し各内訳額に加える
h26_adjusted_mid_df.loc[idx, col] = result