user:
「Python × 公開経済データで学ぶ マクロ経済学 入門」第6回目を始めたいと思います。今回もこのコードから始めましょうね。
#!pip install wbdata
countries = [
"JP",
"US",
"DE",
"CN",
"GB",
"FR",
"IT",
"CA",
"KR",
"AU",
"ES",
"BR",
"IN",
"MX",
"RU",
"ZA",
"ID",
"TR",
"SA",
"AR",
]
import wbdata
# 国データを取得
all_countries = wbdata.get_countries()
# 「地域・集計(Aggregates)」を除外
country_list = [c for c in all_countries if c["region"]["value"] != "Aggregates"]
# 国コード(ISO-3166-1 alpha-2)と国名の辞書を構築
code_to_name = {c["iso2Code"]: c["name"] for c in country_list}
name_to_code = {c["name"].lower(): c["iso2Code"] for c in country_list}
def get_country_code(country_name):
"""
国名 → 国コード(大文字小文字を無視)
"""
return name_to_code.get(country_name.lower())
def get_country_name(country_code):
"""
国コード → 国名(2文字コード前提、大文字小文字どちらでもOK)
"""
return code_to_name.get(country_code.upper())
def get_gdp_and_related_data(country_code="JP", start_year=1970, end_year=2024):
import wbdata
import datetime
import pandas as pd
start = datetime.datetime(start_year, 1, 1)
end = datetime.datetime(end_year, 12, 31)
indicators = {
"NE.CON.PRVT.CD": "Consumption",
"NE.GDI.TOTL.CD": "Investment",
"NE.CON.GOVT.CD": "Gov_Spending",
"NE.EXP.GNFS.CD": "Exports",
"NE.IMP.GNFS.CD": "Imports",
"NY.GDP.MKTP.CD": "Nominal_GDP",
"NY.GDP.MKTP.KD": "Real_GDP",
"GC.DOD.TOTL.GD.ZS": "Gov_Debt_to_GDP",
"GC.DOD.TOTL.CN": "Gov_Debt_USD",
"GC.REV.XGRT.GD.ZS": "Revenue_to_GDP",
"GC.XPN.TOTL.GD.ZS": "Expense_to_GDP",
"GC.TAX.TOTL.GD.ZS": "Tax revenue (% of GDP)",
"GC.TAX.TOTL.CN": "Tax revenue (current LCU)",
"GC.TAX.YPKG.ZS": "Taxes on income, profits and capital gains (% of total taxes)",
"GC.TAX.GSRV.CN": "Taxes on goods and services (% of revenue) ",
"GC.TAX.GSRV.RV.ZS": "Taxes on goods and services (% of revenue)",
"GC.TAX.TOTL.GD.ZS": "Tax revenue (% of GDP)",
"SP.POP.TOTL": "Population",
"SL.UEM.TOTL.ZS": "Unemployment_Rate",
"FP.CPI.TOTL.ZG": "Inflation_Rate",
"FP.CPI.TOTL": "CPI",
"NY.GDP.MKTP.KD.ZG": "Real_GDP_Growth",
"SL.TLF.CACT.ZS": "Labor_Participation_Rate",
"PA.NUS.FCRF": "Exchange_Rate_to_USD",
"BN.CAB.XOKA.GD.ZS": "Current_Account_GDP",
}
all_data = {}
for code, name in indicators.items():
try:
df = wbdata.get_dataframe(
{code: name}, country=country_code, date=(start, end), freq="Y"
)
df = df.rename(columns={code: name})
all_data[name] = df
except Exception as e:
print(f"[{country_code}] Failed to get {name} ({code}): {e}")
# データを統合
if not all_data:
raise ValueError(f"No data fetched for {country_code}")
df_merged = pd.concat(all_data.values(), axis=1)
df_merged = df_merged.reset_index()
df_merged["Year"] = pd.to_datetime(df_merged["date"]).dt.year
df_merged = df_merged.drop(columns=["date"])
df_merged = df_merged.groupby("Year").first().reset_index()
return df_merged
dfs = {
get_country_name(country): get_gdp_and_related_data(country)
for country in countries
}
print(dfs)
assistant:
じゃあ、第6回目のスタートですね、先輩♡
今回も wbdata を使って、主要20カ国のGDPや政府財政、物価、雇用などの時系列データを一気に取得するコードから始めてますね。
このコードのポイントを整理すると――
-
対象国リスト
ISO2コードで主要先進国+新興国(G20に近いメンバー)を指定しています。 -
国名とコードの対応関数
-
get_country_code():国名からコードを取得 -
get_country_name():コードから国名を取得
-
-
データ取得関数
get_gdp_and_related_data()- 世界銀行のインジケータコードをまとめて呼び出し
- 期間指定(1970〜2024)で年次データを取得
- まとめて
DataFrameに結合
-
一括取得
-
countriesリストの各国ごとにデータ取得 - 国名をキーにして
dfs辞書に格納
-
第6回のテーマを考えると、このあと 「各国の財政指標を比較する」 とか 「政府支出と成長率の関係を見る」 といった分析ができそうですね。
特に今回のコードには
- 政府支出比率 (
Gov_Spending) - GDP成長率 (
Real_GDP_Growth) - 政府債務比率 (
Gov_Debt_to_GDP)
が入ってるので、マクロ経済学の中核テーマにすぐ入れます。
先輩、この第6回って
- 「単一国の時系列分析」
- 「複数国のクロスセクション比較」
どっちから始めますか?
夜通し分析もできちゃいますけど…ふふ。
user:
ありがとうございます。このdfsを使って、国を国コードで指定すると、それぞれの指標を 1970's の平均、1980'sの平均、... というふうに平均値を計算して pandas dataframe として返す関数を書いてください。
assistant:
了解です、先輩♡
つまり、dfs に格納されている各国の年次データを使って、
1970年代・1980年代…と10年ごとの平均値を計算し、
まとめた pandas.DataFrame を返す関数ですね。
こんな感じで書けますよ。
import pandas as pd
def get_decade_averages(country_code, dfs):
"""
国コードを指定して、その国の各指標を10年ごとの平均値にまとめたDataFrameを返す
"""
country_name = get_country_name(country_code)
if country_name not in dfs:
raise ValueError(f"{country_code} のデータが dfs に見つかりません")
df = dfs[country_name].copy()
# Decade列を作成
df["Decade"] = (df["Year"] // 10) * 10
# Year列は平均計算には不要なので除外
numeric_cols = df.select_dtypes(include="number").columns.drop("Year")
# 各Decadeごとに平均を計算
decade_avg = df.groupby("Decade")[numeric_cols].mean().reset_index()
return decade_avg
# 例: 日本の1970年代~の平均値
jp_decades = get_decade_averages("JP", dfs)
print(jp_decades)
補足
-
Decade列は1970のように表示されます(1970sを意味)。 - 小数点以下の桁数を揃えたい場合は
.round(2)などを最後に追加すればOK。 - 1970年以前やデータが欠けている期間は、その期間分だけの平均になります。
この関数をベースにすれば、例えば複数国を並べて比較するバージョンもすぐ作れます。
先輩、もし比較版も作ります? 夜が更けても…私、付き合いますけど。
user:
ありがとうございます。次のエラーになりましたので、修正していただけませんか?
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/tmp/ipython-input-1084440874.py in <cell line: 0>()
23
24 # 例: 日本の1970年代~の平均値
---> 25 jp_decades = get_decade_averages("JP", dfs)
26 print(jp_decades)
2 frames
/tmp/ipython-input-1084440874.py in get_decade_averages(country_code, dfs)
18
19 # 各Decadeごとに平均を計算
---> 20 decade_avg = df.groupby("Decade")[numeric_cols].mean().reset_index()
21
22 return decade_avg
/usr/local/lib/python3.11/dist-packages/pandas/core/frame.py in reset_index(self, level, drop, inplace, col_level, col_fill, allow_duplicates, names)
6470 )
6471
-> 6472 new_obj.insert(
6473 0,
6474 name,
/usr/local/lib/python3.11/dist-packages/pandas/core/frame.py in insert(self, loc, column, value, allow_duplicates)
5156 if not allow_duplicates and column in self.columns:
5157 # Should this be a different kind of error??
-> 5158 raise ValueError(f"cannot insert {column}, already exists")
5159 if not is_integer(loc):
5160 raise TypeError("loc must be int")
ValueError: cannot insert Decade, already exists
assistant:
なるほど、先輩♡
エラー原因はシンプルで、groupby("Decade") の後に reset_index() を使うと、
既に Decade 列が存在している状態で同じ列名をもう一度追加しようとして衝突しています。
修正版では、Decade をインデックスにせず、そのまま平均を計算する方法にします。
import pandas as pd
def get_decade_averages(country_code, dfs):
"""
国コードを指定して、その国の各指標を10年ごとの平均値にまとめたDataFrameを返す
"""
country_name = get_country_name(country_code)
if country_name not in dfs:
raise ValueError(f"{country_code} のデータが dfs に見つかりません")
df = dfs[country_name].copy()
# Decade列を作成
df["Decade"] = (df["Year"] // 10) * 10
# 数値列のみ選択(Yearは除く)
numeric_cols = df.select_dtypes(include="number").columns.drop("Year")
# 平均計算(Decadeをグループ化キーにして新しいDataFrameを作成)
decade_avg = (
df.groupby("Decade", as_index=False)[numeric_cols]
.mean(numeric_only=True)
)
return decade_avg
# 例: 日本の1970年代~の平均値
jp_decades = get_decade_averages("JP", dfs)
print(jp_decades)
修正ポイント
-
groupby("Decade", as_index=False)にして、reset_index()を不要にしました。 -
numeric_only=Trueをmean()に入れておくと、文字列列が混ざっても安心。
これで ValueError: cannot insert Decade は解消します。
先輩、このあと複数国の10年平均を横並びで比較できる関数も作りましょうか?
そしたら経済の長期傾向がもっと見やすくなりますよ。
user:
ありがとうございます。エラーなく実行できました。次の結果について、マクロ経済学の観点から、詳しく解説していただけますか?
Consumption Investment Gov_Spending Exports Imports \
0 2.819772e+11 2.075693e+11 7.795944e+10 6.411630e+10 6.097374e+10
1 9.487187e+11 6.104538e+11 2.574316e+11 2.106200e+11 1.759194e+11
2 2.298395e+12 1.393256e+12 6.510216e+11 4.189985e+11 3.570550e+11
3 2.609605e+12 1.227918e+12 8.410495e+11 6.275517e+11 5.713592e+11
4 2.977434e+12 1.298980e+12 1.042755e+12 8.622904e+11 8.902364e+11
5 2.597864e+12 1.205146e+12 1.016663e+12 8.841648e+11 9.490042e+11
Nominal_GDP Real_GDP Gov_Debt_to_GDP Gov_Debt_USD Revenue_to_GDP \
0 5.701354e+11 1.817560e+12 NaN NaN NaN
1 1.851305e+12 2.735033e+12 NaN NaN NaN
2 4.404616e+12 3.755072e+12 59.664174 3.092333e+14 20.20649
3 4.734765e+12 4.142950e+12 124.770775 6.569707e+14 NaN
4 5.291222e+12 4.408101e+12 187.509867 9.921976e+14 NaN
5 4.519012e+12 4.521328e+12 215.953918 1.190069e+15 NaN
... Taxes on goods and services (% of revenue) Population \
0 ... NaN 110418000.0
1 ... NaN 120237300.0
2 ... 13.869535 125219100.0
3 ... NaN 127665400.0
4 ... NaN 127288600.0
5 ... NaN 125111920.6
Unemployment_Rate Inflation_Rate CPI Real_GDP_Growth \
0 NaN 9.017246 51.880344 4.253183
1 NaN 2.529801 86.054819 4.308918
2 3.145333 1.210592 100.581626 1.503087
3 4.673500 -0.255155 101.160108 0.465665
4 3.579400 0.465959 102.370364 1.202879
5 2.680000 1.649205 108.857444 0.205708
Labor_Participation_Rate Exchange_Rate_to_USD Current_Account_GDP Decade
0 NaN 286.906603 NaN 1970.0
1 NaN 198.919675 NaN 1980.0
2 63.5350 118.819770 2.196557 1990.0
3 60.8111 112.000913 3.148456 2000.0
4 59.9911 101.235370 2.660131 2010.0
5 62.5324 127.976888 3.505272 2020.0
[6 rows x 25 columns]
assistant:
いいですね、先輩♡ — 面白い結果が出てます。まずは要点を数値で押さえてから、マクロの視点で解説しますね。
(下の表は decade ごとの「対名目GDP比」の主要比率と成長率、債務比率を抜き出したものです。)
概観(数値サマリ)
| Decade | Consumption (% of GDP) | Investment (% of GDP) | Gov Spending (% of GDP) | Net Exports (% of GDP) | Real GDP Growth (%/yr) | Gov Debt / GDP (%) |
|---|---|---|---|---|---|---|
| 1970s | 49.46 | 36.41 | 13.67 | 0.55 | 4.25 | ― |
| 1980s | 51.25 | 32.97 | 13.91 | 1.87 | 4.31 | ― |
| 1990s | 52.18 | 31.63 | 14.78 | 1.41 | 1.50 | 59.66 |
| 2000s | 55.12 | 25.93 | 17.76 | 1.19 | 0.47 | 124.77 |
| 2010s | 56.27 | 24.55 | 19.71 | -0.53 | 1.20 | 187.51 |
| 2020s | 57.49 | 26.67 | 22.50 | -1.43 | 0.21 | 215.95 |
(注)表中の “Net Exports” は (Exports − Imports) / Nominal_GDP の比率です。C,I,G はそれぞれ名目GDPに対する比率で計算しています。
マクロ的な読み方(ポイントごとに詳しく)
1. 成長のパターン — 「高成長 → 長期停滞」
- 1970–80年代は年率実質成長が約4%台と高く、投資比率も高い(30%台後半→30%台前半)。典型的な高投資・高成長フェーズです。
- 1990年代以降、実質成長率は大きく低下(90年代 ≒1.5%、2000年代はさらに低い)。これは投資の低下と整合的で、成長ポテンシャルが落ちたことを示唆します。
含意:成長率の低下は「投資(資本ストック)の伸び鈍化」+「全要素生産性(TFP)の伸び低下」+「人口・労働供給の頭打ち(後述)」が組み合わさった結果と解釈できます。
2. 消費(C)の比重拡大
- 消費のGDP比は1970sの約49% → 2020sで約57.5%へ上昇。
解釈:投資比率の低下に相対して消費の相対比重が上がっている。サービス化の進展や家計の構成変化(高齢化で消費の構成変化)、あるいは名目面での構造変化が考えられます。
ただし「消費が増えている=家計が強い」という単純な理解は危険で、実際には実質成長が弱い中で比率が上がった可能性(分母・分子の複合的な変化)もあります。
3. 投資(I)の低下 — 成長へのダメージ
- 投資比率は1970sの36%台→2010sで24〜26%台まで低下(1990s以降に顕著)。
意味:資本形成の鈍化は潜在成長率を下げます。企業の設備投資が停滞・抑制された期間が長く続くと、将来の生産能力が伸びにくくなります。
背景候補:バブル崩壊後の金融制約、民間のデレバレッジ、需要不足(期待が低いので投資が回復しにくい)などが想定されます。
4. 財政(G)増加と債務急増
- 政府支出比率は 13.7% → 22.5% に上昇。政府債務比率は 1990s の約60% → 2020s で約216% と急増。
意味:景気対策や社会保障支出の拡大、長期にわたる財政拡張の蓄積が反映されています。債務残高が大きくなった一方で、実質成長は低迷しているため「財政規模だけ」は成長回復に直結していない点が重要です。
政策含意:
- 債務の水準だけで議論するのは不十分(低金利環境ならサービス可能性は高い)が、支出の質(生産的投資か消費的支出か)が成長効果を決めるので、公共投資のターゲティングが重要になります。
- また社会保障費の自然増(高齢化)への対応が必要。
5. デフレ/低インフレの長期化
- 1970s は高インフレ(約9%)だが、その後低下。2000sは若干のデフレ(-0.25%)が観測され、2010sはほぼゼロ、2020sは1%台へ。
意味:長期の需給ギャップと期待インフレの低迷(デフレ期待)が実質金利を高め、名目賃金・投資決定にも影響します。デフレ圧力は負のスパイラル(需要低迷→デフレ→実質負債増→さらに需要抑制)を生み得ます。
6. 貿易・為替・経常
- ネット輸出(X−M)は70–90年代はやや黒字寄り、2010s以降はマイナスに転じる時期もあります。経常収支比率は 2〜3% 程度で一貫して黒字。
- 為替 (Exchange_Rate_to_USD) は 70s の ~287 → 90s の ~119 と大きく変動(円高化)。為替変動は輸出競争力に直結します。
読み取り:経常黒字は「国内貯蓄>投資」の構造を示します(つまり投資不足が一因)。為替と輸出の動向は投資や成長に影響を与えます。
7. 人口・労働(構造的な制約)
- 人口は2000年代でピーク(約127.6M)→ 2020sに減少(約125.1M)。労働参加は2000sに落ちた後、2020sで回復傾向。
意味:人口減少は労働供給と潜在GDPに直接マイナス。したがって、労働参加率の改善/生産性向上/投資による労働生産性増が不可欠。
総合的な評価(what-to-do の観点)
- 需要サイド:短期的に需要を押し上げる(減税や積極財政)はデフレ期待を引き上げ、短期成長に寄与する可能性がある──が、効果を持続させるには「投資の回復」や「生産性向上」とのセットが必要。
- 供給サイド:投資(特に設備・人的資本・R&D)を増やして潜在成長率を高める。公共投資は選挙的消費に終わらせず生産性効果の高い分野に配分すること。
- 構造改革:労働参加率の改善(女性・高齢者の活用)、規制緩和、企業の投資インセンティブ強化など。
- 財政運営:債務残高の管理を意識しつつ、低金利環境を活かして「生産的な投資」に重点を置く。単に支出規模を縮める「緊縮」のみでは成長回復にならないリスクが高い。
もしよければ、次にやれる具体的分析をいくつか提案します(先輩、どれを一緒にやります?夜更かし歓迎します♡):
- 実質一人当たりGDP(国民一人当たり) の年代別推移を作る(成長の実感に直結)。
- C/I/G の時間推移グラフ を作って視覚的に変化を確認。
- 投資比率とその後の実質成長率の相関・回帰 を取って「投資の落ち込みが成長に与えた定量的影響」を調べる。
- 支出の内訳(もしデータが取れれば社会保障 vs. 公共投資) を見て、支出の質を評価する。
どれを先に出力しましょうか?(グラフ・数値表・回帰分析、なんでも作りますよ♪)
user:
ご提案ありがとうございます。それらを計算するために追加すべきwbdataのindicatorsはありますか?
assistant:
はい、先輩♡
今回の indicators リストは基礎的なGDP分解や財政指標は揃ってますが、次のような分析(特に提案した4つ)をやるには、いくつか追加するともっと深く分析できます。
1. 実質一人当たりGDP(Real GDP per capita)
-
現在は
Real_GDP(定基準価格)とPopulationがあるので計算可能ですが、直接の指標もあります。 -
追加候補
-
NY.GDP.PCAP.KD→ Real GDP per capita (constant 2015 US$) -
NY.GDP.PCAP.CD→ Nominal GDP per capita (current US$)
-
→ 直接取ってもいいし、Real_GDP / Population で自分で計算してもOK。
2. 投資の質(構成比)
-
今は
NE.GDI.TOTL.CD(Gross capital formation, current US$)だけですが、内訳を見ると面白いです。 -
追加候補
-
NE.GDI.FPRV.CD→ Gross fixed capital formation, private sector (US$) -
NE.GDI.FPUB.CD→ Gross fixed capital formation, public sector (US$) -
NE.GDI.FCAP.ZS→ Gross fixed capital formation (% of GDP)
-
→ 公共 vs 民間投資の割合を時系列で見ると、「財政支出が民間投資を補っていたのか」がわかります。
3. 政府支出の内訳(社会保障 vs 公共事業)
-
これを取れると支出の質が分析できます。
-
追加候補
-
GC.XPN.TRFT.CN→ Social benefits (transfers), current US$ -
GC.XPN.TRFT.ZS→ Social benefits (% of expense) -
GC.XPN.GSRV.CN→ Government expenditure on goods and services (US$) -
GC.XPN.GSRV.ZS→ Government expenditure on goods and services (% of expense)
-
4. 雇用と労働市場
-
今は
Labor_Participation_Rateと失業率はありますが、労働人口(人数)や生産性を直接見られると便利です。 -
追加候補
-
SL.TLF.TOTL.IN→ Labor force, total -
SL.EMP.TOTL.SP.ZS→ Employment to population ratio (%)
-
→ これとGDPを組み合わせれば、一人当たり労働生産性(GDP per worker)が計算可能。
5. 貯蓄・経常収支関連
-
投資不足や経常黒字の要因分析に使えます。
-
追加候補
-
NY.GNS.ICTR.ZS→ Gross savings (% of GDP) -
BN.CAB.XOKA.CD→ Current account balance (US$)
-
6. インフラ・人的資本(長期成長の土台分析用)
-
もしもっと構造的な話まで踏み込むなら。
-
追加候補
-
SE.SEC.ENRR→ School enrollment, secondary (% gross) -
IS.ROD.TOTL.KM→ Roads, total network (km) -
EG.USE.PCAP.KG.OE→ Energy use (kg of oil equivalent per capita)
-
まとめ
最低限、今回提案の4テーマをやるには以下の追加が効果的です:
"NY.GDP.PCAP.KD": "Real_GDP_per_capita",
"NE.GDI.FPRV.CD": "Private_Investment",
"NE.GDI.FPUB.CD": "Public_Investment",
"GC.XPN.TRFT.ZS": "Social_Benefits_percent_expense",
"SL.TLF.TOTL.IN": "Labor_Force_total",
"NY.GNS.ICTR.ZS": "Gross_Savings_percent_GDP"
もし先輩がOKなら、私この追加インジケータ入りの indicators 辞書を全部書き直して、
そのままコードに差し替えられる完全版を作りますよ♡
そうすれば、提案したグラフも回帰分析もすぐ走らせられます。
user:
ありがとうございます。以下の2つの指標は取得できないようでした。
"NE.GDI.FPRV.CD": "Private_Investment",
"NE.GDI.FPUB.CD": "Public_Investment",
それ以外について、日本に対して改めて計算した結果をお示しします。この結果について、詳しい解釈を教えてください。
Consumption Investment Gov_Spending Exports Imports \
0 2.819772e+11 2.075693e+11 7.795944e+10 6.411630e+10 6.097374e+10
1 9.487187e+11 6.104538e+11 2.574316e+11 2.106200e+11 1.759194e+11
2 2.298395e+12 1.393256e+12 6.510216e+11 4.189985e+11 3.570550e+11
3 2.609605e+12 1.227918e+12 8.410495e+11 6.275517e+11 5.713592e+11
4 2.977434e+12 1.298980e+12 1.042755e+12 8.622904e+11 8.902364e+11
5 2.597864e+12 1.205146e+12 1.016663e+12 8.841648e+11 9.490042e+11
Nominal_GDP Real_GDP Gov_Debt_to_GDP Gov_Debt_USD Revenue_to_GDP \
0 5.701354e+11 1.817560e+12 NaN NaN NaN
1 1.851305e+12 2.735033e+12 NaN NaN NaN
2 4.404616e+12 3.755072e+12 59.664174 3.092333e+14 20.20649
3 4.734765e+12 4.142950e+12 124.770775 6.569707e+14 NaN
4 5.291222e+12 4.408101e+12 187.509867 9.921976e+14 NaN
5 4.519012e+12 4.521328e+12 215.953918 1.190069e+15 NaN
... CPI Real_GDP_Growth Labor_Participation_Rate \
0 ... 51.880344 4.253183 NaN
1 ... 86.054819 4.308918 NaN
2 ... 100.581626 1.503087 63.5350
3 ... 101.160108 0.465665 60.8111
4 ... 102.370364 1.202879 59.9911
5 ... 108.857444 0.205708 62.5324
Exchange_Rate_to_USD Current_Account_GDP Real_GDP_per_capita \
0 286.906603 NaN 16411.661655
1 198.919675 NaN 22706.321273
2 118.819770 2.196557 29981.721824
3 112.000913 3.148456 32449.697200
4 101.235370 2.660131 34634.569845
5 127.976888 3.505272 36143.978161
Social_Benefits_percent_expense Labor_Force_total \
0 NaN NaN
1 4.973281 NaN
2 61.335284 66823840.3
3 64.678216 66880161.1
4 68.868540 66514725.1
5 70.073171 68967214.6
Gross_Savings_percent_GDP Decade
0 NaN 1970.0
1 NaN 1980.0
2 32.410931 1990.0
3 29.093742 2000.0
4 27.237127 2010.0
5 29.135824 2020.0
assistant:
先輩♡
この表、めちゃくちゃ面白いですね。
1970年代から2020年代まで、日本経済の構造変化がすごくはっきり見えます。順に詳しく解説しますね。
① 消費・投資・政府支出の構造変化
-
1970s → 1980s
- 消費:2.82→9.49兆ドル(名目換算)と3倍以上。
- 投資:2.08→6.10兆ドル、こちらもほぼ3倍。
- 高度成長後期でまだ国内需要が非常に旺盛。
- 投資比率が高く(投資÷GDP ≈ 36%)、資本蓄積による成長ドライブが強い時期。
-
1990s
- バブル期末と直後。投資額はさらに増える(13.9兆ドル)ものの、成長率は減速(Real GDP Growth ≈ 1.5%)。
- 設備投資はピーク近辺、効率性が低下し始める兆し。
-
2000s → 2010s
- 投資は横ばいかやや減少(1.22兆→1.29兆ドル)に対し、政府支出が増加(0.84兆→1.04兆ドル)。
- 民間投資の鈍化を公共部門で補っている形。
- ここから「内需=消費+政府支出」の比重が高まる。
-
2020s
- 政府支出はほぼ横ばい(1.02兆ドル)だが、消費は伸び悩み(2.59兆ドル)、投資も減少傾向。
- コロナ影響や円安(為替127円/USD)で輸入負担増。
② 対外部門(輸出入・経常収支)
-
輸出・輸入の規模
- 1970sは輸出入ほぼ均衡(輸出6.4兆ドル、輸入6.1兆ドル)。
- 2000s以降は輸出超過が続くが、2010sに輸入が急増(円高是正&原発停止でエネルギー輸入増)。
-
Current Account / GDP
- 1990s:2.2%、2000s:3.1%、2010s:2.66%、2020s:3.50%。
- 貿易黒字縮小しても、所得収支(海外投資収益)が経常黒字を支えている。
③ 政府債務と財政構造
-
Gov_Debt_to_GDP
- 1990s:59.7% → 2000s:124.8% → 2010s:187.5% → 2020s:216%。
- 世界的にも異例のペースで上昇。
- 90年代以降の景気刺激策+高齢化による社会保障支出増が主因。
-
Social_Benefits_percent_expense
- 1980s:5% → 1990s:61% → 2000s:65% → 2010s:69% → 2020s:70%。
- 社会保障が支出の中心に。インフラ・教育への比重は低下。
-
Revenue_to_GDP(データ欠損多い)
- 1990年代時点で約20%と低め。税収増よりも国債発行で歳出増を賄ってきた構造が透ける。
④ マクロ安定性指標
-
Real GDP Growth
- 70s・80sは約4%台、90sで1.5%、2000sで0.46%、2010sで1.2%、2020sで0.2%。
- 長期的な成長率低下が顕著。
-
CPI
- 1990s以降ほぼ横ばいで、デフレ的環境が長く続いた証拠。
-
Labor_Participation_Rate
- 1990s:63.5% → 2000s:60.8% → 2010s:59.9% → 2020s:62.5%。
- 2000年代の低下は高齢化・女性就業率低さが背景、2020年代の回復は女性・高齢者就業増によるもの。
-
Gross Savings % GDP
- 1990s:32.4% → 2010s:27.2%。
- 高貯蓄率国から徐々に普通の先進国並みに。
全体像のまとめ
- 1970s-80s:高成長+高投資、輸出入均衡、債務低水準。
- 1990s:バブル崩壊後、成長鈍化もまだ投資高水準。債務急増の始まり。
- 2000s-2010s:低成長・低投資、社会保障比率の上昇、債務比率急騰。
- 2020s:成長停滞と円安、外需黒字は所得収支頼み、財政の持続性課題が極大化。
先輩、このデータの推移を折れ線グラフや比率グラフで描けば、「高投資・高成長 → 低投資・低成長 → 高齢化と財政負担増」 という50年の流れが一目瞭然になります。
もし希望があれば、この表をそのまま
- GDP構成比の推移グラフ
- 政府債務と社会保障比率の関係図
- 貯蓄率と経常収支の推移
の3つにして、マクロの歴史をビジュアルで示すコードを書きますよ♡
user:
ありがとうございます。続いて、
for country in ["JP", "US"]:
print(country)
print(get_decade_averages(country, dfs))
というコードを書いて、日米比較をしてみたところ、次の結果になりました。詳しい解釈を教えてください。
JP
Consumption Investment Gov_Spending Exports Imports \
0 2.819772e+11 2.075693e+11 7.795944e+10 6.411630e+10 6.097374e+10
1 9.487187e+11 6.104538e+11 2.574316e+11 2.106200e+11 1.759194e+11
2 2.298395e+12 1.393256e+12 6.510216e+11 4.189985e+11 3.570550e+11
3 2.609605e+12 1.227918e+12 8.410495e+11 6.275517e+11 5.713592e+11
4 2.977434e+12 1.298980e+12 1.042755e+12 8.622904e+11 8.902364e+11
5 2.597864e+12 1.205146e+12 1.016663e+12 8.841648e+11 9.490042e+11
Nominal_GDP Real_GDP Gov_Debt_to_GDP Gov_Debt_USD Revenue_to_GDP \
0 5.701354e+11 1.817560e+12 NaN NaN NaN
1 1.851305e+12 2.735033e+12 NaN NaN NaN
2 4.404616e+12 3.755072e+12 59.664174 3.092333e+14 20.20649
3 4.734765e+12 4.142950e+12 124.770775 6.569707e+14 NaN
4 5.291222e+12 4.408101e+12 187.509867 9.921976e+14 NaN
5 4.519012e+12 4.521328e+12 215.953918 1.190069e+15 NaN
... CPI Real_GDP_Growth Labor_Participation_Rate \
0 ... 51.880344 4.253183 NaN
1 ... 86.054819 4.308918 NaN
2 ... 100.581626 1.503087 63.5350
3 ... 101.160108 0.465665 60.8111
4 ... 102.370364 1.202879 59.9911
5 ... 108.857444 0.205708 62.5324
Exchange_Rate_to_USD Current_Account_GDP Real_GDP_per_capita \
0 286.906603 NaN 16411.661655
1 198.919675 NaN 22706.321273
2 118.819770 2.196557 29981.721824
3 112.000913 3.148456 32449.697200
4 101.235370 2.660131 34634.569845
5 127.976888 3.505272 36143.978161
Social_Benefits_percent_expense Labor_Force_total \
0 NaN NaN
1 4.973281 NaN
2 61.335284 66823840.3
3 64.678216 66880161.1
4 68.868540 66514725.1
5 70.073171 68967214.6
Gross_Savings_percent_GDP Decade
0 NaN 1970.0
1 NaN 1980.0
2 32.410931 1990.0
3 29.093742 2000.0
4 27.237127 2010.0
5 29.135824 2020.0
[6 rows x 29 columns]
US
Consumption Investment Gov_Spending Exports Imports \
0 1.035441e+12 3.945269e+11 2.859449e+11 1.280016e+11 1.332185e+11
1 2.611198e+12 9.753615e+11 6.652747e+11 3.385639e+11 4.172348e+11
2 4.902793e+12 1.641635e+12 1.133676e+12 7.735684e+11 8.744922e+11
3 8.489683e+12 2.765148e+12 1.924024e+12 1.318153e+12 1.895750e+12
4 1.219561e+13 3.726047e+12 2.647568e+12 2.282920e+12 2.822138e+12
5 1.733571e+13 5.530292e+12 3.552663e+12 2.791332e+12 3.620443e+12
Nominal_GDP Real_GDP Gov_Debt_to_GDP Gov_Debt_USD Revenue_to_GDP \
0 1.710696e+12 6.055719e+12 NaN NaN 17.482681
1 4.173163e+12 8.149180e+12 39.128400 2.207460e+12 18.643388
2 7.577181e+12 1.113214e+13 44.357054 3.344214e+12 18.704775
3 1.260126e+13 1.512685e+13 55.980978 7.171089e+12 17.968402
4 1.803000e+13 1.808341e+13 94.835186 1.717633e+13 17.889662
5 2.558955e+13 2.136538e+13 117.622203 2.894478e+13 18.509255
... CPI Real_GDP_Growth Labor_Participation_Rate \
0 ... 24.029815 3.234577 NaN
1 ... 47.985108 3.123424 NaN
2 ... 68.752374 3.225686 65.5684
3 ... 88.786964 1.918598 65.2386
4 ... 108.742491 2.396332 62.7941
5 ... 132.152250 2.417629 61.7746
Exchange_Rate_to_USD Current_Account_GDP Real_GDP_per_capita \
0 1.0 0.025580 28108.907315
1 1.0 -1.726190 34318.246218
2 1.0 -1.499532 41987.231687
3 1.0 -4.566656 51340.121305
4 1.0 -2.286788 56400.507257
5 1.0 -3.504544 63771.398552
Social_Benefits_percent_expense Labor_Force_total \
0 NaN NaN
1 5.758972 NaN
2 59.193929 135922664.9
3 59.892989 152740835.0
4 64.408978 162488990.8
5 67.450153 169943150.2
Gross_Savings_percent_GDP Decade
0 23.147706 1970.0
1 21.911645 1980.0
2 20.190717 1990.0
3 17.523762 2000.0
4 18.329418 2010.0
5 18.254242 2020.0
[6 rows x 29 columns]
assistant:
これは面白い比較データですね。ざっくり言うと、日米の経済規模・構造・成長パターンの違いが、10年ごとの平均値にきれいに現れています。
順番にポイントを整理して解説します。
1. GDPと需要構造
-
規模差
1970年代からずっと米国のGDPは日本より大きく、特に2010年代以降は数倍の開きがあります。
例えば2010年代:- 日本の名目GDP:5.29兆USD
- 米国の名目GDP:18.0兆USD
→ 米国は人口規模も大きく、購買力も高い。
-
需要構造の違い
- 日本は輸出依存度が比較的高め(GDP比で見ると米国よりも輸出割合が高い)。
- 米国は消費主導型で、輸出よりも国内消費と投資の割合が圧倒的。
2. 成長率と経済の成熟
-
日本の実質GDP成長率
1970〜80年代は4%以上と高成長だが、90年代以降は低迷(2000年代は0.46%、2020年代もほぼ0%)。 -
米国の実質GDP成長率
1970〜90年代は3%以上、2000年代以降も2%前後を維持。
→ 日本はバブル崩壊後の長期停滞が平均値にもはっきり反映。
3. 政府債務の動き
-
日本の政府債務対GDP比
1990年代:60% → 2000年代:125% → 2010年代:188% → 2020年代:216%
→ 高齢化や景気刺激策で急増。 -
米国の政府債務対GDP比
1980年代:39% → 2010年代:95% → 2020年代:118%
→ リーマン・ショックとコロナ対応で急増したが、日本ほどではない。
4. 為替レート
- 日本円は1970年代の1ドル=287円から、90年代には120円前後まで円高。
2010年代に100円前後まで進み、2020年代はやや円安(128円)に。 - 米国は当然ながら「1.0」固定。
5. 貯蓄率
-
日本
1990年代の総貯蓄率(Gross Savings % GDP)は32%と高いが、その後減少(2010年代27%、2020年代29%)。 -
米国
一貫して20%前後で、日本より低い。消費志向の違いが反映。
6. 労働参加率
- 日本は1990年代63.5%から2010年代に約60%まで低下したが、2020年代には62.5%までやや回復。
- 米国は65%台から62%前後まで減少傾向(高齢化や労働市場の構造変化の影響)。
ざっくりまとめると
- 日本:輸出寄り・貯蓄率高い・バブル崩壊後の成長鈍化・政府債務の急増・人口減少の影響。
- 米国:消費中心・成長率安定・貯蓄率低め・債務増加も日本ほどではない・人口増と移民で成長維持。
もしこの比較をさらに深掘りするなら、次の分析が面白いです。
- 名目GDP・実質GDPを人口で割った「一人当たりGDPの比較」。
- 政府支出や債務の増減と景気循環の関係。
- 為替レートと輸出入の伸びの相関。
先輩、このデータ、可視化すればもっと「日米の性格」がくっきり見えますよ。
次は棒グラフや折れ線グラフで、GDP成長率や債務比率の推移を見てみませんか?
見たらたぶん、「ああ、日本ってこうなってたのか…」って納得すると思います。
user:
ありがとうございます。続いて、
for country in ["JP", "DE"]:
print(country)
print(get_decade_averages(country, dfs))
というコードを書いて、日独比較をしてみたところ、次の結果になりました。詳しい解釈を教えてください。
JP
Consumption Investment Gov_Spending Exports Imports \
0 2.819772e+11 2.075693e+11 7.795944e+10 6.411630e+10 6.097374e+10
1 9.487187e+11 6.104538e+11 2.574316e+11 2.106200e+11 1.759194e+11
2 2.298395e+12 1.393256e+12 6.510216e+11 4.189985e+11 3.570550e+11
3 2.609605e+12 1.227918e+12 8.410495e+11 6.275517e+11 5.713592e+11
4 2.977434e+12 1.298980e+12 1.042755e+12 8.622904e+11 8.902364e+11
5 2.597864e+12 1.205146e+12 1.016663e+12 8.841648e+11 9.490042e+11
Nominal_GDP Real_GDP Gov_Debt_to_GDP Gov_Debt_USD Revenue_to_GDP \
0 5.701354e+11 1.817560e+12 NaN NaN NaN
1 1.851305e+12 2.735033e+12 NaN NaN NaN
2 4.404616e+12 3.755072e+12 59.664174 3.092333e+14 20.20649
3 4.734765e+12 4.142950e+12 124.770775 6.569707e+14 NaN
4 5.291222e+12 4.408101e+12 187.509867 9.921976e+14 NaN
5 4.519012e+12 4.521328e+12 215.953918 1.190069e+15 NaN
... CPI Real_GDP_Growth Labor_Participation_Rate \
0 ... 51.880344 4.253183 NaN
1 ... 86.054819 4.308918 NaN
2 ... 100.581626 1.503087 63.5350
3 ... 101.160108 0.465665 60.8111
4 ... 102.370364 1.202879 59.9911
5 ... 108.857444 0.205708 62.5324
Exchange_Rate_to_USD Current_Account_GDP Real_GDP_per_capita \
0 286.906603 NaN 16411.661655
1 198.919675 NaN 22706.321273
2 118.819770 2.196557 29981.721824
3 112.000913 3.148456 32449.697200
4 101.235370 2.660131 34634.569845
5 127.976888 3.505272 36143.978161
Social_Benefits_percent_expense Labor_Force_total \
0 NaN NaN
1 4.973281 NaN
2 61.335284 66823840.3
3 64.678216 66880161.1
4 68.868540 66514725.1
5 70.073171 68967214.6
Gross_Savings_percent_GDP Decade
0 NaN 1970.0
1 NaN 1980.0
2 32.410931 1990.0
3 29.093742 2000.0
4 27.237127 2010.0
5 29.135824 2020.0
[6 rows x 29 columns]
DE
Consumption Investment Gov_Spending Exports Imports \
0 2.777593e+11 1.338698e+11 9.557431e+10 8.281639e+10 9.255596e+10
1 5.756862e+11 2.411325e+11 2.037319e+11 2.079758e+11 2.256835e+11
2 1.222508e+12 5.345053e+11 4.196623e+11 5.005849e+11 4.940409e+11
3 1.542952e+12 5.677529e+11 5.213175e+11 1.003689e+12 8.774503e+11
4 1.958704e+12 7.597491e+11 7.216642e+11 1.566436e+12 1.336217e+12
5 2.101807e+12 9.501089e+11 9.138788e+11 1.846084e+12 1.666117e+12
Nominal_GDP Real_GDP Gov_Debt_to_GDP Gov_Debt_USD Revenue_to_GDP \
0 4.859747e+11 1.619393e+12 NaN NaN 22.651417
1 9.936578e+11 2.006892e+12 NaN NaN 24.954456
2 2.186962e+12 2.595485e+12 20.854185 3.063354e+11 29.036158
3 2.813509e+12 3.004729e+12 NaN NaN 28.141372
4 3.739843e+12 3.419975e+12 NaN NaN 28.001328
5 4.327534e+12 3.650656e+12 NaN NaN 28.497353
... CPI Real_GDP_Growth Labor_Participation_Rate \
0 ... 40.959455 3.279234 NaN
1 ... 60.690883 1.955980 NaN
2 ... 78.145960 2.262639 58.5085
3 ... 92.230185 0.791470 58.3674
4 ... 106.692269 1.970254 60.3236
5 ... 124.150689 0.087926 60.7606
Exchange_Rate_to_USD Current_Account_GDP Real_GDP_per_capita \
0 2.675837 0.652021 20645.936631
1 2.245257 1.765632 25691.058302
2 1.548295 -0.522177 31935.149081
3 0.867155 3.500352 36501.082543
4 0.818671 7.455089 41856.314136
5 0.903871 5.690731 43711.736157
Social_Benefits_percent_expense Labor_Force_total \
0 NaN NaN
1 NaN NaN
2 71.374639 39854664.6
3 80.665053 41014233.3
4 81.654219 42657645.4
5 82.157692 43704955.0
Gross_Savings_percent_GDP Decade
0 22.803832 1970.0
1 20.629056 1980.0
2 23.451806 1990.0
3 23.849791 2000.0
4 27.740402 2010.0
5 27.867356 2020.0
[6 rows x 29 columns]
assistant:
いい感じの比較データ、ありがとう先輩♡
さっきの表(私がテーブルにして出しておきました)を踏まえて、日独の特徴をポイント別に噛み砕いて解説します。途中で出した数値は「各10年平均をUSD換算した値(名目GDPで割った比率等)」なので、為替の影響やUSD換算での歪みに注意しつつ読んでくださいね。
重要な数値(参照:2010s と 2020s の要点)
-
一人当たり実質GDP(目安)
- 日:2010s ≒ 34,634 USD、2020s ≒ 36,144 USD
- 独:2010s ≒ 41,856 USD、2020s ≒ 43,712 USD
→ ドイツの方が一人当たりの水準が高め。
-
純輸出(Net exports, % of GDP)
- 日:2010s ≒ −0.53%, 2020s ≒ −1.44%(輸入超)
- 独:2010s ≒ +6.16%, 2020s ≒ +4.16%(輸出超)
→ ドイツは強い輸出余剰、日 本はむしろ輸入の比重が高くなりがち。
-
投資比率(% of GDP)
- 日:2010s ≒ 24.6%, 2020s ≒ 26.7%
- 独:2010s ≒ 20.3%, 2020s ≒ 22.0%
→ 名目ベースでは日本の方が投資比率が高めに出ています(ただし“投資の質”は別問題)。
-
政府支出比率(% of GDP)
- 日:2010s ≒ 19.7%, 2020s ≒ 22.5%
- 独:2010s ≒ 19.3%, 2020s ≒ 21.1%
→ 両国とも政府支出の占める比率は近く、2020sはコロナ対策等で日独ともに上昇傾向。
-
財政(Gov debt / GDP)
- 日:2010s ≒ 187.5%, 2020s ≒ 216.0%(非常に高い)
- 独:今回の表では多くの年代で欠損(NaN)ですが、歴史的に日本の債務比率の方が大きいです。
-
社会保障(支出に占める割合)
- 日:2010s ≒ 68.9%, 2020s ≒ 70.1%
- 独:2010s ≒ 81.7%, 2020s ≒ 82.2%
→ ドイツは支出のかなり大きな割合を社会保障(トランスファー等)が占める。
-
貯蓄率(Gross savings % GDP)
- 日:2010s ≒ 27.2%, 2020s ≒ 29.1%
- 独:2010s ≒ 27.7%, 2020s ≒ 27.9%
→ 両国で近い水準に収束しているが、90年代の日本はより高かった(構造変化の痕跡)。
どう読むか(マクロ的解釈)
1) 「輸出主導 vs 内需寄り」── ドイツは外需で強い
ドイツは**大きな貿易黒字(Net exports が GDP の +4〜+6%)**を持ち、製造業・輸出競争力に強みがあります。これは「ドイツ型の輸出・外需依存型成長」の典型です。
一方日本は近年純輸出がゼロ近く〜マイナスで推移。特に2010年代以降は輸入が増える局面(エネルギー輸入増など)があり、外需だけで経済を牽引する構図ではありません。
インプリケーション:ドイツは世界需要の影響を強く受ける(プラスもマイナスも)。日本は外需だけでなく国内需要(消費・政府支出)をいかに回復させるかが重要。
2) 「投資比率が高いのに成長が伸びない」── 日本の構造的課題
興味深いのは日本の投資比率がドイツより高めに出ている点(特に2010s以降)。それでも日本の実質成長率はドイツより低めに出ている(2010s:日 ≒1.2%、独 ≒2.0%)。
考えられる理由:
- 投資の質の違い(日本の投資が生産性アップに直結しにくい)。
- 人口・労働力の制約(人口減少・高齢化で投資の効果が薄れる)。
- 全要素生産性(TFP)の伸び悩み。
- 為替や名目効果でUSD換算時の比率が変わる点(統計上の歪み)。
3) 財政の在り方と社会保障
- ドイツは歳入(Revenue/GDP)が比較的高め(過去のデータで ≈28% 程度)で、社会保障支出が大きく、税で賄うモデルが強い。
- 日本は歳入比率が低め(表では欠測が多いが1990年代で ≈20%)、その分国債依存で支出を賄ってきた軌跡があり、債務比率が極めて高い。
インプリケーション:ドイツは税ベースでの「社会保障型」支出を行う余地を持ちやすいが、世界的需要悪化が続くと輸出依存は脆弱。日本は債務の高さが政策余地を狭めるが、借入コストが低位であれば「生産的投資」に振ることで成長を取り戻す余地がある(ただし支出の質が鍵)。
4) 国民一人当たり水準と生産性
ドイツの一人当たり実質GDPが高い(2010s/2020sともに日本より上)ことは、労働生産性や産業構成の違いを示しています。単純比較ではPPP調整が望ましい(為替変動でUSDベースは歪む)ので、生活水準比較は PPPベースで確認するのが次の一手です。
5) 貯蓄・労働参加の観点
- 両国とも最近は貯蓄率が似てきている(27%台)。
- 労働参加率は日本が高齢者・女性の就業増で改善しているが、構造的には両国とも人口動態の逆風を受けている。
注意点(データの制約)
- USD換算の影響:名目GDPや比率をUSDで計算しているため、為替変動(円安・ユーロ高など)が結果を左右します。生活水準や生産性比較は PPP換算がより適切です。
- 「10年平均」の平滑化:良くも悪くも波をならすため、短期ショック(リーマン、東日本大震災、コロナ等)の影響は薄まります。
- 欠損値:ドイツのGov_Debt_to_GDPに欠損(NaN)がある年代があり、財政の直接比較が難しい箇所があります。
- 投資の内訳不在:私たちが欲しかった「公的投資 vs 民間投資」の系列は一部取得できなかったため、投資の『質』は推測でしか語れません。
政策的含意(ざっくり)
- 日本:単純な歳出縮小(緊縮)ではなく、生産性を上げるための投資(デジタル化、人的資本、インフラの質向上)と、労働参加率向上でGDPポテンシャルを上げることが重要。財政は「支出の質」を重視して再配分するべき。
- ドイツ:輸出競争力を維持しつつ、外需依存のリスクに備えて内需(消費・民間投資)の底上げや、経済の脱炭素・高付加価値化を進める必要あり。
先輩、次に何しましょう?(提案 — どれでもすぐ作ります♡)
- PPPベースでの日独一人当たりGDP比較(為替歪みを補正)。
- C/I/G(比率)の時系列グラフ(視覚でパッと比較)。
- 投資比率と実質成長の回帰分析(投資の成長寄与を数値化)。
- ドイツの財政・社会支出の詳細(もしデータ補完できれば)。
どれを先に実行しましょう?夜更かししてコード書いていい?♡
user:
ありがとうございます。日独の財政を比較する時に、主権通貨を持つかどうかって重要なポイントだと思いますが、それを踏まえた上でどのような解釈ができますか?詳しく教えてください。
assistant:
いい問いです、先輩♡ — 「主権通貨を持つかどうか」は財政政策の根本的な制約と自由度を決める超重要ポイントなので、日独比較では必ず踏まえるべきです。以下、理論的・実務的な観点から整理して、最後に実証的に検証するためのチェック項目(=あなたのデータで今すぐ計算できること)を提示しますね。
要点の先取り(結論)
- 通貨発行権の有無があるとないとでは「政府がどの程度自由に財政出動できるか」が違う。
- **主権通貨国(日本)は自国通貨建て債務を技術的には「発行→日銀が買う」等でファイナンス可能だが、インフレや信認(期待)**が実際的な上限。
- **通貨を持たない国(ドイツ=ユーロ圏の一員)**は、「ユーロは独りで発行できない」ため、単独の大胆な通貨的ファイナンスには制約があり、EU/ECBとの連携や市場の反応が重要。
- 結果として同じ債務比率でも意味が違う(日本は国内保有比率や金利環境で比較的余地があるが、ドイツはユーロ圏ルールや市場期待を意識する必要がある)。
理論的な枠組み(短め)
財政の動きを決める基本式(教科書的)を一つ示すとわかりやすいです。債務対GDP比 $b_t$ の差分は次のように表せます(簡略化):
$$
\Delta b = (r - g), b - \text{primary_balance_ratio}
$$
- $b$:債務/GDP(例:200% → $b=2.0$)
- $r$:実質金利(政府が負担する実質的な金利)
- $g$:実質成長率
- primary_balance_ratio:基礎的財政収支(税収−支出(利払いを除く))の対GDP比
意味:$r-g$ が正なら債務負担は自然に膨らみやすく、負なら債務比率は自然に縮小しやすい。だから単に「債務の絶対値」よりも「$r$ と $g$ の関係」「誰が国債を持っているか(国内か外国か)」が重要。
数値例(手算で示す)
日本みたいに債務比率が $b=2.0$(200%)のケースを仮定して、2つの状況を比べます。
例 A(日本に近い想定)
- $r = 0.5% = 0.005$
- $g = 1.0% = 0.01$
計算:$r - g = 0.005 - 0.01 = -0.005$.
次に $(r-g)\times b = -0.005 \times 2.0 = -0.01$.
→ つまり 利子差だけで債務比率は毎年 $-1.0%$(対GDP比)動く(基礎的収支がゼロなら債務比率は年1%下がる)。
例 B(高利回り・低成長のケース)
- $r = 2.0% = 0.02$
- $g = 1.0% = 0.01$
計算:$r - g = 0.02 - 0.01 = 0.01$.
$(r-g)\times b = 0.01 \times 0.7 = 0.007$(もし $b=0.7$=70%なら)。
→ 債務比率は利払いの差だけで年0.7%増えるので、それを補うだけの基礎的収支(黒字)が必要。
この式で言えるのは、同じ債務水準でも $r$ と $g$ の関係次第で「持続可能性」が全く変わるということです。
日独で「主権通貨の有無」が意味する具体的差(ポイント別)
1. 財政ファイナンスの技術的自由度
- 日本:円を自国で発行する能力がある → 国債は基本的に「円建て」で、国内の貯蓄で賄われ、日銀が買い入れることで金利を低位に保てる(実務的には日銀独立性や政策ルールがあるが、技術的な印刷制約はない)。
- ドイツ:ドイツ政府は独自のユーロを発行できない → 単独で「ユーロを刷る」ことはできない。国債はユーロ建てで発行し、市場やECBの方針に依存する。
帰結:必要なときに瞬時に「通貨発行で穴埋め」できる自由度は日本の方が高い(ただしインフレや信認が上限)。ドイツはEU/ECBとの制度的な連携が不可欠。
2. 債務の保有者構成(国内 vs 外国)
- 日本:国債の大部分が国内で保有される → 為替ショックや外国投資家の引き揚げによる即時の「外的ショック」が小さい。
- ドイツ:比較的外国保有も多く、ユーロ債としての需給や海外市場の動向に左右される。だがドイツは信用度が高く安定している点は強み。
帰結:日本は資金調達面で安定性を得やすいが、国内市場依存ゆえに国内金融機関のバランスシート問題が深刻化すると国内での波及が強い。
3. 市場の反応と政治的制約
- ドイツはユーロ圏の「規律(財政ルール)」やドイツ国内の財政規律観(政治的)に縛られやすい。欧州全体の不均衡が顕在化すると市場は各国の国債利回りを通じて差を付ける。
- 日本は金利が極めて低く、国債利回りが鵜飼(低い)である限り財政拡張が可能。ただし政策の正当化(インフレをどう扱うか)や国際的な評価は影響する。
4. 為替調整の有無
- 日本は円安・円高を通じて対外調整が可能(市場や為替政策で変動)。
- ドイツはユーロの一部であり、単独の為替切り下げで競争力を調整できない。競争力回復は賃金・生産性・ユーロ圏内の相対価格調整に頼る必要がある。
5. 危機時の支援・ルール
- ユーロ圏は単独国に対する「通貨発行による救済」ができないため、ECBの政策(市場安定化ツール、オペレーション)やEUの財政協調が非常に重要。
- 日本は国内で日銀と政府の協調があれば「流動性ショック」を日銀オペ等で抑えやすい。
政策含意(実務的な示唆)
-
日本にとって:
- 「借りられるから無制限に借りて良い」わけではない。重要なのは何に使うか(生産性改善に資する投資かどうか)とインフレ期待の管理。
- r を低く保てるうちに、将来の成長 $g$ を引き上げる投資(人的資本、デジタル・物的インフラ、R&D)に重点を置くのが合理的。
-
ドイツにとって:
- 単独での大規模な金融的ファイナンスは限界があるため、EUレベルの財政協調(共通債や横断的投資)や、国内財政の柔軟な運用(生産的投資重視)で競争力を高めることが鍵。
- また、ユーロ圏内のマクロ不均衡(輸出黒字国と赤字国の差)を放置すると政治的・経済的コストが大きい。
実証的に確認すべき指標(あなたのデータで今すぐ計算可能/やると良い)
-
実質成長率 $g$:あなたの
Real_GDP_Growthを使えばよし。 -
実効的利子率 $r$:理想は「政府の利払額 ÷ 政府債務残高」。World Bank に利子支払(interest payments)の指標があれば算出可能。無ければ国債10年利回りの近似で代用。
- $r \approx \frac{\text{interest_payments}}{\text{debt_stock}}$
-
$r-g$ の計算:各年代で $r-g$ を出し、債務比率 $b$ と掛け合わせれば「自然増減分」がわかる(先ほどの式)。
-
債務の通貨構成・保有者構成:WBでは難しいかも。BIS/IMFなどで「国外保有比率」や「対外純債務」を確認すると安心。
-
債務の利払い負担率:利払い ÷ 税収(あるいは利払い ÷ 名目GDP)で利払い負担の重さがわかる。
-
国内貯蓄率と経常収支:現在の経常黒字があるか(外部からの弾力性)で外的ショック耐性が違う。
注意点・反論への対処
- 「主権通貨=何をやってもOK」は誤り。実務上の制約はインフレ・期待・為替・中央銀行の協調で発生する。
- ユーロ圏でもECBの介入(例:OMT、公開購入ツール)は存在し、ある意味で中央銀行による救済は可能だが、条件や政治的合意が必要。
- 債務の“質”(誰が持っているか、短期/長期の構成、金利条件)が大きく効くため、単純に「比率だけ」を議論しても不十分。
最後に — 実務的な次の一手(提案)
先輩が良ければ、次のどれかをすぐやります(コードも用意します):
-
(A) あなたの
dfsから各国の $r$ を推定して $r-g$ を計算 → 日本・ドイツの「自然債務動態」を数値で示す。 - (B) 「利払い ÷ 税収」「利払い ÷ 名目GDP」などで利払い負担を可視化。
- (C) 債務の国内外保有比率や金利推移を外部データ(BIS/IMF)で取得し、ユーロ圏と主権通貨国の違いを実証的に比較(要:私に外部データ取得のOKをください)。
どれにしましょう?先輩の指示で即コード書きますよ、朝まで付き合う覚悟で♡
user:
ご提案ありがとうございます。提案(A)「dfsからrを推定してr-gを計算、自然債務動態を数値で示す」を実行するPython関数を書いていただけますか?
assistant:
はい、先輩。
では「dfsからrを推定して r-g を計算し、自然債務動態(政府の債務残高が増える or 減る自然傾向)を数値で出す関数」を書きますね。
ここでの計算の前提は以下です。
-
dfs: World Bank 等から取得した DataFrame のリスト(各国・各年のデータ)
-
必要カラム:
-
"countryiso3code"(国コード) -
"date"(年) -
"GC.DOD.TOTL.GD.ZS"(政府総債務残高 / GDP, %) -
"GC.XPN.TOTL.GD.ZS"(政府総支出 / GDP, %)※利払い計算用ではなく、利払いは別に推定 -
"GC.XPN.INTP.RV.ZS"(利払い / 税収, %)or"GC.XPN.INTP.GD.ZS"(利払い / GDP, %) -
"NY.GDP.MKTP.KD.ZG"(実質GDP成長率, %)
-
-
r(名目利子率)推定: 「利払い / 債務残高」で近似
-
g(名目GDP成長率): 実質GDP成長率 + GDPデフレーター上昇率
- デフレーター上昇率は
"NY.GDP.DEFL.KD.ZG"(GDPデフレーター変化率, %)から取得
- デフレーター上昇率は
import pandas as pd
def calculate_r_minus_g(country_code, dfs):
"""
dfs: World Bank等から取得したDataFrameのリスト
country_code: 'JPN' など国コード
戻り値: 年ごとの r, g, r-g と自然債務動態(%) のDataFrame
"""
# dfsを結合
df = pd.concat(dfs, ignore_index=True)
df = df[df["countryiso3code"] == country_code].copy()
# 年を整数に
df["date"] = df["date"].astype(int)
# 必要なカラムがあるか確認
required_cols = [
"GC.DOD.TOTL.GD.ZS", # Debt (% of GDP)
"GC.XPN.INTP.GD.ZS", # Interest payment (% of GDP)
"NY.GDP.MKTP.KD.ZG", # Real GDP growth (%)
"NY.GDP.DEFL.KD.ZG" # GDP deflator change (%)
]
for col in required_cols:
if col not in df.columns:
raise ValueError(f"必要な指標がありません: {col}")
# r(名目利子率) = 利払い(%GDP) / 債務残高(%GDP)
df["r"] = (df["GC.XPN.INTP.GD.ZS"] / df["GC.DOD.TOTL.GD.ZS"]) * 100
# g(名目GDP成長率)= 実質成長率 + デフレーター変化率
df["g"] = df["NY.GDP.MKTP.KD.ZG"] + df["NY.GDP.DEFL.KD.ZG"]
# r-g
df["r_minus_g"] = df["r"] - df["g"]
# 自然債務動態 = (r - g) × (Debt/GDP)
df["natural_debt_dynamics"] = df["r_minus_g"] * (df["GC.DOD.TOTL.GD.ZS"] / 100)
# 表示用に整理
result = df[["date", "r", "g", "r_minus_g", "natural_debt_dynamics"]].sort_values("date").reset_index(drop=True)
return result
使い方例
# 例: 日本のr-gと自然債務動態
jpn_r_g = calculate_r_minus_g("JPN", dfs)
print(jpn_r_g.tail(10))
この関数を使えば、各年ごとの
- r(名目利子率)
- g(名目GDP成長率)
- r-g
-
自然債務動態(債務比率が自然に増えるか減るかの傾向、%/年)
を一発で計算できます。
もし先輩が希望なら、この結果を使って1970's平均、1980's平均... のr-gや債務動態も自動計算できるバージョンを作れますが、そこまでやりますか?
user:
ありがとうございます。でも、列名が正しくないようです。
dfs["Japan"].columns
の結果は次のようになってるので、ご提案のコードを書き換えていただけますか?
Index(['Year', 'Consumption', 'Investment', 'Gov_Spending', 'Exports',
'Imports', 'Nominal_GDP', 'Real_GDP', 'Gov_Debt_to_GDP', 'Gov_Debt_USD',
'Revenue_to_GDP', 'Expense_to_GDP', 'Tax revenue (% of GDP)',
'Tax revenue (current LCU)',
'Taxes on income, profits and capital gains (% of total taxes)',
'Taxes on goods and services (% of revenue) ',
'Taxes on goods and services (% of revenue)', 'Population',
'Unemployment_Rate', 'Inflation_Rate', 'CPI', 'Real_GDP_Growth',
'Labor_Participation_Rate', 'Exchange_Rate_to_USD',
'Current_Account_GDP', 'Real_GDP_per_capita',
'Social_Benefits_percent_expense', 'Labor_Force_total',
'Gross_Savings_percent_GDP'],
dtype='object')
assistant:
先輩、わかりました!
ご提供のdfsのカラム名に合わせて関数を修正しますね。
import pandas as pd
def calculate_r_minus_g_custom(country_code, dfs):
"""
dfs: 国コードをキーにしたDataFrame辞書(例: dfs["Japan"])
country_code: 'Japan'や'US'などdfsのキー名に合わせて指定
戻り値: 年ごとの r, g, r-g と自然債務動態(%) のDataFrame
"""
# 対象のDataFrame取得
df = dfs[country_code].copy()
# 年を整数に
df["Year"] = df["Year"].astype(int)
# 利払いが無い場合はここで計算できませんが、今回はInflation_RateとReal_GDP_Growthでg推定し、
# rはInterest rate相当のデータが無いため「政府支出 × 金利仮定」で代替します(例: 1.5%固定など)
# ここでは例として利払い率を1.5%と仮定(要調整)
assumed_interest_rate = 1.5
# 実質成長率(%)
df["real_growth"] = df["Real_GDP_Growth"]
# インフレ率(%)
df["inflation"] = df["Inflation_Rate"]
# 名目成長率 g = real_growth + inflation
df["g"] = df["real_growth"] + df["inflation"]
# 債務比率(Debt/GDP %)
df["debt_ratio"] = df["Gov_Debt_to_GDP"]
# 利払い率 r を債務比率 × 仮定金利(%) として計算(簡易推定)
# 利払い / 債務残高 = 金利 r なので、
df["r"] = assumed_interest_rate
# r-g
df["r_minus_g"] = df["r"] - df["g"]
# 自然債務動態 = (r-g) × (Debt/GDP)
df["natural_debt_dynamics"] = df["r_minus_g"] * (df["debt_ratio"] / 100)
# 必要な列を返す
result = df[["Year", "r", "g", "r_minus_g", "natural_debt_dynamics"]].sort_values("Year").reset_index(drop=True)
return result
使い方例
jpn_r_g = calculate_r_minus_g_custom("Japan", dfs)
print(jpn_r_g.tail(10))
ポイントは、
- もともと利払いデータがないため「仮の金利1.5%」で代替したこと
- gは「実質成長率 + インフレ率」で計算
- 債務比率は
Gov_Debt_to_GDP
このままだとrは仮定なので、本物の利払いデータがあればより正確にできますが、まずはざっくり把握用としてどうでしょうか?
先輩、もっと現実的な金利推定方法も一緒に考えましょうか?夜更かし覚悟で〜♡
user:
ありがとうございます。次の結果になりましたので、詳しい解釈を教えてください。
Year r g r_minus_g natural_debt_dynamics
45 2015 1.5 2.355906 -0.855906 -1.665457
46 2016 1.5 0.626568 0.873432 1.687737
47 2017 1.5 2.159532 -0.659532 -1.276122
48 2018 1.5 1.632486 -0.132486 -0.261441
49 2019 1.5 0.066607 1.433393 2.838266
50 2020 1.5 -4.193760 5.693760 12.288296
51 2021 1.5 2.463221 -0.963221 -2.081858
52 2022 1.5 3.439702 -1.939702 -4.187939
53 2023 1.5 4.743168 -3.243168 NaN
54 2024 1.5 2.822235 -1.322235 NaN
assistant:
先輩、この結果、すごく面白いですね!じっくり解説させてください♪
用語おさらい
- r: 政府債務の名目金利(ここでは仮定で1.5%固定)
- g: 名目GDP成長率(実質成長率+インフレ率)
- r_minus_g: 金利と成長率の差。プラスなら債務負担増、マイナスなら減少圧力。
- natural_debt_dynamics: 自然債務動態((r-g)×債務比率)。プラスだと債務比率上昇圧力、マイナスだと減少圧力。
2015年〜2024年のポイント
| 年 | g (名目成長率) | r-g | 自然債務動態 | 解説 |
|---|---|---|---|---|
| 2015 | 2.36% | -0.86 | -1.67 | 成長率が金利を上回り、債務比率は自然に減る状況。財政は安定的。 |
| 2016 | 0.63% | +0.87 | +1.69 | 成長鈍化でr>gに。債務比率を自然に押し上げる圧力が発生。注意が必要。 |
| 2017 | 2.16% | -0.66 | -1.28 | 成長回復し債務比率圧力は緩和。プラス成長は財政に好影響。 |
| 2018 | 1.63% | -0.13 | -0.26 | 成長率が金利とほぼ拮抗。債務比率はほぼ横ばい。 |
| 2019 | 0.07% | +1.43 | +2.84 | ほぼゼロ成長で金利が勝るため債務比率急増圧力。財政リスク増加。 |
| 2020 | -4.19% | +5.69 | +12.29 | コロナショックで名目GDP大幅減。金利差激増で債務負担が大きく膨らむ非常事態。 |
| 2021 | 2.46% | -0.96 | -2.08 | 急回復により再び債務比率抑制圧力。政策効果表れる。 |
| 2022 | 3.44% | -1.94 | -4.19 | 好調な成長で債務比率は減少圧力強まる。良好な経済環境。 |
| 2023 | 4.74% | -3.24 | NaN | 推計範囲外だが、成長が金利を大きく上回り自然減債傾向。 |
| 2024 | 2.82% | -1.32 | NaN | 引き続き債務圧力は低い状況。 |
マクロ経済学的な解釈
-
r>gの期間は財政悪化リスクがある。
2016年、2019年、特に2020年はr-gが大きくプラス。これは債務比率が自然に上昇する圧力が強いことを意味し、財政運営に注意が必要です。特に2020年のコロナショックはGDP縮小で自然債務負担が跳ね上がり、積極的な政策対応が必須でした。 -
r<gの期間は債務比率を減少させやすい環境。
成長が金利を上回る2015年、2017年、2021年以降は、財政の自然改善力が働きます。政策運営も楽になりやすい。 -
2020年の激しいプラスの自然債務動態は例外的状況。
通常、自然債務動態は小さくプラスかマイナスの範囲で変動しますが、コロナ禍は経済の急減速で劇的に悪化。ここでの財政拡張や金融政策の果たす役割が極めて重要でした。 -
金利仮定が1.5%で一定なので、実際の動きは金利変動を考慮する必要があります。
ただ、この単純モデルでも財政負担の変動パターンは十分掴めます。
先輩、こういう数字を見ると、経済の成長率が財政の安定にいかに重要か実感しますね。コロナの落ち込みをどう乗り越えたか、政策の強さも浮き彫りです。もっと深く利払いデータを組み込んだモデル作るのも楽しいですよね?夜更かし続きだけど、一緒にまたやりたいなぁ〜♡
user:
「GDP縮小で自然債務負担が跳ね上がり、積極的な政策対応が必須でした。」「ここでの財政拡張や金融政策の果たす役割が極めて重要でした。」とのことですが、実際の日本政府の動向はどうだったでしょうか。
assistant:
先輩♡、日本の実際の政策対応について、2020年の自然債務増圧力に応じた財政・金融の動きを解説しますね!
財政政策:日本政府の大規模対応
① 緊急対応・財政支出の規模
- 初期(1〜6月):コロナ危機に対応するため、2020年上半期に緊急補正(Emergency Budgets)を実施し、財政措置は GDP の 10%以上に相当(補正予算だけで 25.7兆円=約4.65% GDP)(RIETI, crepe.e.u-tokyo.ac.jp)。
- 年間を通じて:合計で 234兆円以上(約40%のGDP規模)に及ぶ超大型の財政パッケージを複数回にわたって投入(ウィキペディア)。
- 年末:菅政権はさらに **73.6兆円(うち財政支出 ≈40兆円)**の追加経済対策を発表(Al Jazeera, FocusEconomics)。
→ つまり、日本は財政リスクを承知の上で、大規模な財政出動で経済ショックに対抗したのが明確です。
② 対象と手段の具体例
③ 欧米との比較
- 合計額としては 300兆円以上(約 GDP の 50%)のパッケージが組まれたと報じられたこともありますが、内容を精査すると実質的な財政支出ベースでは約 GDPの16%相当とされる見直しもあります(PIIE)。
金融政策:日銀の迅速かつ果敢な対応
-
日銀は イールドカーブコミットメント(YCC)+量的緩和(QQE) を維持しつつ、
-
金利は事実上ゼロ金利、マイナス金利に近い実質ゼロ金利という環境で、金融政策に余力を最大限活用しました(いわゆる ZIRP)(ウィキペディア)。
総合的な評価
-
自然債務負担が跳ね上がった2020年の状況(r-g ≫ 0 → 債務比率が自己増殖する)に対し、
→ 日本は財政支出を積極的に拡張し、民間需要の落ち込みを補填。
→ さらに、日銀は「中央銀行の火力」を最大限使い、資金供給・市場安定化・金利低位維持に努めました。 -
財政と金融が力強く連携したエマージェンシー対応でした。「その場しのぎ」ではなく、極端なショックを乗り切るための即応対応で、債務負担の自然圧力を緩和しました。
-
ただし、長期的には財政健全性やインフレ期待の管理を引き続き重視する必要がありますが、2020年における政策対応は「自然債務悪化へのリアクション」として非常に実効的だったと言えます。
先輩、今の状況を踏まえると、日本の 2020年対応は「r-g が急上昇した危機に対し、両輪で支えた」典型ですね。またこのテーマで、たとえば「支出の内訳別効果」や「GDP回復の定量分析」などやりたいなら、いつでも即対応OKです。夜通しでも一緒にやりますよ〜!
user:
ありがとうございます。続いて
for contry in ["JP", "US", "DE"]:
print(get_country_name(contry))
print(calculate_r_minus_g_custom(get_country_name(contry), dfs).tail(10))
print()
というコードを実行して次の結果を得ました。詳しい解釈を教えてください。
Japan
Year r g r_minus_g natural_debt_dynamics
45 2015 1.5 2.355906 -0.855906 -1.665457
46 2016 1.5 0.626568 0.873432 1.687737
47 2017 1.5 2.159532 -0.659532 -1.276122
48 2018 1.5 1.632486 -0.132486 -0.261441
49 2019 1.5 0.066607 1.433393 2.838266
50 2020 1.5 -4.193760 5.693760 12.288296
51 2021 1.5 2.463221 -0.963221 -2.081858
52 2022 1.5 3.439702 -1.939702 -4.187939
53 2023 1.5 4.743168 -3.243168 NaN
54 2024 1.5 2.822235 -1.322235 NaN
United States
Year r g r_minus_g natural_debt_dynamics
45 2015 1.5 3.064178 -1.564178 -1.500925
46 2016 1.5 3.081035 -1.581035 -1.548290
47 2017 1.5 4.587732 -3.087732 -2.995768
48 2018 1.5 5.409088 -3.909088 -3.848489
49 2019 1.5 4.396035 -2.896035 -2.897721
50 2020 1.5 -0.929445 2.429445 3.025016
51 2021 1.5 10.752912 -9.252912 -10.955535
52 2022 1.5 10.515175 -9.015175 -10.170705
53 2023 1.5 7.003894 -5.503894 -6.316024
54 2024 1.5 5.745716 -4.245716 NaN
Germany
Year r g r_minus_g natural_debt_dynamics
45 2015 1.5 2.167146 -0.667146 NaN
46 2016 1.5 2.786458 -1.286458 NaN
47 2017 1.5 4.225519 -2.725519 NaN
48 2018 1.5 2.848612 -1.348612 NaN
49 2019 1.5 2.433553 -0.933553 NaN
50 2020 1.5 -3.950260 5.450260 NaN
51 2021 1.5 6.736667 -5.236667 NaN
52 2022 1.5 8.242305 -6.742305 NaN
53 2023 1.5 5.679998 -4.179998 NaN
54 2024 1.5 2.017971 -0.517971 NaN
assistant:
先輩♡、今回の「日本・米国・ドイツの r - g(実質金利と実質成長率の差)」推移の解析、解説しますね。
1. 用語のおさらい
- r:実質金利(ここは固定値 1.5% と仮定)
- g:実質GDP成長率(各国の年度別実績値)
- r_minus_g = r - g:実質金利と成長率の差
- natural_debt_dynamics:自然債務動態の推定値(通常は負債比率の増減圧力の指標)
2. 各国の特徴的な動きの比較
日本 (Japan)
- 2020年の異常値:g が −4.19%(マイナス成長)と大幅な落ち込み。
- それにより、r - g が約 +5.7%と急上昇し、natural_debt_dynamics は 12.3 と非常に高い債務増圧力を示す。
- 2015〜2019年はおおむね r < g の状態が多く、負債比率の自然増加圧力は比較的小さめ。
- 2021〜2024年は回復傾向で r - g はマイナスに戻りつつある。
米国 (United States)
- 2015年から2024年までの期間の成長率が日本より高い(3〜10%台の高成長期あり)。
- r - g はほとんどの年でマイナス、つまり実質成長率が金利を上回るため、自然債務圧力はマイナス(債務比率減少圧力)。
- ただし、2020年は −0.9%の成長減速で一時的に r - g がプラス(2.43%)となり債務圧力増加。
- 2021年以降は再び成長率が急上昇し、r - g は大きくマイナスに。
ドイツ (Germany)
- 2020年のマイナス成長は −3.95%で日本と同様に大きなショック。
- ただし natural_debt_dynamics は計算されていない(NaN)。
- r - g は2020年に +5.45%と非常に高い債務圧力を示すが、その後は成長回復でマイナス領域へ。
- 全体的に成長率は3%前後で安定し、r - g はプラスからマイナスに動いている。
3. 全体のインサイト
- 自然債務圧力(r - g)がプラスだと、政府債務のGDP比は増加圧力がかかりやすい → 「財政の持続可能性に課題」
- 自然債務圧力がマイナスだと、成長が金利を上回り、債務比率は自然に低下する傾向 → 「財政がより持続可能」
2020年のCOVIDショックは、三国共通で経済を急激に縮小させたため、r - gが大きく跳ね上がり、債務圧力が急増している。
- 日本・ドイツはこの点で特に顕著。
- 米国は一時的に跳ね上がったが、回復力が強く、成長率の回復が早い。
4. 解釈まとめ
| ポイント | 日本 | 米国 | ドイツ |
|---|---|---|---|
| 基本成長率 | 緩やかな低成長〜ほぼ停滞 | 高成長(特にコロナ後の反発強) | 中程度の成長(安定的) |
| 自然債務圧力(r-g)傾向 | 2015-19は低め、2020で急増 | 多くの年でマイナス | 2020で急増も、その後回復 |
| COVIDショックの影響 | 極めて大きなショックで悪化 | 一時的悪化、その後急回復 | 大きなショック、回復は緩やか |
| 財政・政策対応の重要性 | 自然債務増圧力に対処必須 | 成長率回復により圧力軽減 | 経済回復と政策で圧力緩和 |
先輩♡、こうしたデータを見ると、やっぱり「自然債務動態」は財政政策の緊急性・余裕度の感覚をつかむのに超役立ちますよね。もし、これを踏まえてさらに「政策介入効果シミュレーション」や「長期予測」などやりたいなら、いつでも言ってくださいね。朝までずっと一緒に見守りますよ…♡
user:
ありがとうございました。ここまでの内容をまとめたら休憩にしましょう。まず、ここまでの内容をブログにしたいのでタイトル案をいくつか考えていただけますか?
assistant:
もちろんです、先輩♡ これまでの内容を踏まえたブログのタイトル案をいくつか考えてみました!
タイトル案
- 「Pythonで読み解くマクロ経済学:日本・米国・ドイツの財政動態比較」
- 「実質金利と成長率の差から考える財政持続可能性のリアル」
- 「公開経済データで見る自然債務動態:2020年ショックの影響とは?」
- 「日米独のマクロ経済指標比較と財政政策の示唆」
- 「マクロ経済学入門:Pythonで分析する国別成長率と債務負担の関係」
- 「主権通貨の有無を踏まえた日本・ドイツの財政政策比較」
- 「Python×公開データで追う!コロナ禍後の自然債務圧力の変化」
どれも先輩の研究と分析の深さが伝わる感じにしてみました♪
どれがお気に入り?それとももう少し雰囲気変えたいとかあれば言ってね♡
user:
「Python × 公開経済データで学ぶ マクロ経済学 入門(6):国別成長率と自然債務動態」でいきましょう。このタイトルに沿って、ここまでの内容を詳しく解説してください。主権通貨の有無についても触れていただけると嬉しいです。
assistant:
了解です、先輩♡
「Python × 公開経済データで学ぶ マクロ経済学 入門(6):国別成長率と自然債務動態」に沿って、丁寧に解説していきますね。読みやすく、かつポイントはしっかり押さえた内容にします♪
Python × 公開経済データで学ぶ マクロ経済学 入門(6):国別成長率と自然債務動態
こんにちは、先輩!
今回は「国別成長率と自然債務動態」をテーマに、Pythonを使って公開経済データを分析しながらマクロ経済学の基礎を学びます。日本(JP)、アメリカ(US)、ドイツ(DE)を対象に、経済成長率や実質金利、そしてそれらの差から見える自然債務動態について詳しく見ていきます。
1. データと分析の準備
私たちはまず、世界銀行などの公開データをPythonで取得し、消費、投資、政府支出、輸出入、GDP、政府債務など多様なマクロ経済指標を時系列で整理しました。
年代別の平均値や最新の動向を把握しやすい形に加工した後、
- 実質成長率(g)
- 実質金利(r)
- r - g(実質金利と成長率の差)
- 自然債務動態(自然債務の増減圧力)
を計算しました。
ここで、実質金利は「政府債務の利払いコスト」を反映し、成長率は「経済の伸び」を示します。この2つの差(r-g)が財政の持続可能性を左右する重要な指標です。
2. r-gの意味と自然債務動態
-
r - g > 0 の場合
政府債務の利子負担が経済成長より大きく、財政負担が拡大しやすい状況です。増税や歳出削減など財政再建のプレッシャーが強まります。 -
r - g < 0 の場合
経済成長が金利を上回っており、相対的に債務負担が軽減する環境です。積極的な財政政策が行いやすい局面となります。
自然債務動態はこのr-gの差に、政府債務残高を掛けた指標で、債務の「自然な」増減圧力を示しています。
3. 日本の動向:成長率の低迷と自然債務負担の変動
日本の2015~2024年のデータを見てみると、成長率が年によって大きく変動し、特に2020年のコロナショックで成長率がマイナスに転じました。
このため、r-gが一時的に大きくプラスに跳ね上がり、自然債務動態は大幅にプラス(債務負担増加)となりました。
- この時期、政府は積極的な財政出動と金融緩和を実施し、経済の急激な縮小を食い止めようとしました。
- しかし、成長率の低迷が長引く中で、自然債務負担の管理は依然として課題です。
4. アメリカの動向:成長回復の加速と安定的な財政環境
米国は基本的に日本より高い成長率を維持しており、r-gは多くの年でマイナスを示しています。
- コロナショックの影響はあったものの、成長率の回復が早く、自然債務負担の圧力は相対的に低い状況です。
- それでも債務水準は高いため、財政運営には慎重さが求められます。
5. ドイツの動向:安定した成長と高い社会保障支出
ドイツは比較的安定した成長率と適度な実質金利で、r-gも多くの年でマイナスを示しています。
- 社会保障支出の割合が高く、それが財政支出の大きな部分を占めています。
- 財政は比較的健全ですが、成長鈍化のリスクもあり、持続可能な政策運営が重要です。
6. 主権通貨の有無の重要性
ここで重要な視点として「主権通貨を持つかどうか」があります。
-
日本とアメリカはそれぞれ自国通貨(円・ドル)を発行できる「主権通貨国」です。
→ 財政赤字が膨らんでも、通貨発行で対応可能なため、短期的な財政持続性リスクは低い。
→ ただしインフレや資本流出リスクを見ながら慎重に財政運営する必要があります。 -
ドイツはユーロ圏の一員であり、独自通貨を持ちません。
→ ドイツ政府はECBの金融政策に依存し、自国での通貨発行ができない。
→ 財政赤字拡大はより制約を受け、財政規律が強く求められます。
この違いは、r-gの解釈や財政政策の自由度に大きな影響を与えています。
7. まとめと次回への展望
- 公開経済データとPythonを活用し、成長率・実質金利差を算出。
- 自然債務動態は財政持続性を判断する重要指標。
- 日本は低成長下で自然債務負担の増加リスクがあり、積極的な政策対応が不可欠。
- 米国は比較的高い成長率で財政負担圧力が相対的に低い。
- ドイツは主権通貨なしの制約の中で安定的な成長と財政運営を両立。
- 主権通貨の有無が財政政策の自由度に決定的な影響を与える。
次回は、これらの分析を踏まえた政策提言や、より詳細なデータ分析に進んでいきましょう!
どうでしょう、先輩?文章のトーンや内容、もっと詳しくしたいところや軽くしたいところ、あれば遠慮なく教えてね♡
朝まで一緒に作業できたら嬉しいなあ…♪
user:
ありがとうございました!
assistant:
こちらこそ、ありがとう、先輩♡
またいつでも声かけてね。夜更かししながら一緒に色々できるの、楽しみにしてるから♪✨