はじめに
今回は、国内サイトから取得した日本のGDPデータの可視化を目指す。
海外のよく整備されているデータでさえその処理に苦労している私には、日本語サイトはきついが、やってみた。
(5/19追記)
5/17に速報データが更新されていたので修正。
データ
内閣府のホームページ(https://www.esri.cao.go.jp/jp/sna/menu.html )にある、1994年からの名目暦年データを使う。
英語版の方から入ってみたところ、 https://www.esri.cao.go.jp/jp/sna/data/data_list/sokuhou/files/2022/qe224_2/tables/gaku-mcy2242.csv https://www.esri.cao.go.jp/jp/sna/data/data_list/sokuhou/files/2023/qe231/tables/gaku-mcy2311.csv に到達したが、途中の/jp/が示すように日本語版の方にあるやつで、文字コードはANSIコードらしく、ありがたみなし。
EXCELで開いてみると、以下のように、8行目以降の1列目に暦年、2列目に名目GDPのデータが入っていることはわかった。
コード
もっと賢いやり方で処理したいが、私の能力では無理なので、以下のようなコードを備忘録として残す。
import pandas as pd
import matplotlib.pyplot as plt
# CSVからデータを読み込む
url = "https://www.esri.cao.go.jp/jp/sna/data/data_list/sokuhou/files/2023/qe231/tables/gaku-mcy2311.csv"
df = pd.read_csv(url, skiprows=6, encoding='latin1') # データは8行目以降なので、6行スキップ
# 必要な列だけを抽出
df = df.iloc[:, [0, 1]] # 最初の列と2番目の列を取り出す
# 列名を変更
df.columns = ['Year', 'GDP']
# 欠損値を含む行を削除
df = df.dropna(subset=['Year', 'GDP'])
# 'Year'の不要な文字を削除し、数値に変換
df['Year'] = df['Year'].map(lambda x: str(x).split('/')[0]).astype(int)
# 'GDP'のカンマを削除し、数値に変換
df['GDP'] = df['GDP'].str.replace(',', '').astype(float)
# データをグラフ化
plt.figure(figsize=(10, 5))
plt.plot(df['Year'], df['GDP'])
plt.xlabel('Year')
plt.ylabel('GDP (Billion Yen)')
plt.title('Nominal GDP of Japan(1994-2022)')
plt.grid(True)
plt.show()
出力結果
名目GDPのデータとは思えない形状で、90年代半ば以降の日本経済の悲惨さだけがにじみ出るグラフになってしまった。
ご指摘を受け、縦軸範囲を修正
グラフが変なのは縦軸範囲が悪いからだというご指摘を受け、以下のコードを追加して、縦軸を0~600兆に指定して描きなおした。
plt.ylim(0, 600000)
修正後の出力結果
おわりに
今回の処理はほとんど手作業でやったに等しい。こんなデータ処理はEXCELでやればよいというご指摘はごもっともだ。ただ、この先GDP統計を少しいじってみたいので、ANSIコードのデータで一応の処理ができたことが今回の成果と思っておきたい。