pdfからデータを抽出して日本の輸出相手国トップ10をグラフ化

pdfからデータを抽出して、世界に冠たる輸出大国日本の輸出貿易額をPythonを使ってグラフ化してみる。

スポンサーリンク

pdfからデータを抽出する

先ず、このサイトから貿易輸出額のデータの詰まったpdfをダウンロードしてからtabula-pyを使って以下のようにしてpdfからデータを取り出す。

import tabula

df = tabula.read_pdf("y4.pdf",
             output_format='dataframe',
             pages = '3',
             encoding='utf-8',
             java_options=None,
             pandas_options=None,
             multiple_tables=False)
# Read pdf into DataFrame
#tabula.convert_into("y4.pdf", "output.csv", output_format="csv", pages='1',encoding='')
df.head(10)
2011年 2012年 2013年 2014年 2015年 2016年 2017年 2018年
0 総額 655,465億円 637,476億円 697,742億円 730,930億円 756,139億円 700,358億円 782,865億円 814,788億円
1 NaN 中国 中国 米国 米国 米国 米国 米国 中国
2 1 NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN 129,022億円 (19.7%) 115,091億円 (18.1%) 129,282億円 (18.5%) 136,493億円 (18.7%) 152,246億円 (20.1%) 141,429億円 (20.2%) 151,135億円 (19.3%) 158,977億円 (19.5%)
4 NaN 米国 米国 中国 中国 中国 中国 中国 米国
5 2 NaN NaN NaN NaN NaN NaN NaN NaN
6 NaN 100,177億円 (15.3%) 111,884億円 (17.6%) 126,252億円 (18.1%) 133,815億円 (18.3%) 132,234億円 (17.5%) 123,614億円 (17.7%) 148,897億円 (19.0%) 154,702億円 (19.0%)
7 NaN 韓国 韓国 韓国 韓国 韓国 韓国 韓国 韓国
8 3 NaN NaN NaN NaN NaN NaN NaN NaN
9 NaN 52,691億円 (8.0%) 49,113億円 (7.7%) 55,118億円 (7.9%) 54,559億円 (7.5%) 53,266億円 (7.0%) 50,204億円 (7.2%) 59,752億円 (7.6%) 57,926億円 (7.1%)
for i, col in enumerate(df.columns):
    df.iloc[:, i] = df.iloc[:, i].str.replace(',', '')
df.dropna(thresh=3,inplace=True)
df.reset_index(drop=True, inplace=True)
df = df.drop(['年'],axis=1)
df.head()
2011年 2012年 2013年 2014年 2015年 2016年 2017年 2018年
0 655465億円 637476億円 697742億円 730930億円 756139億円 700358億円 782865億円 814788億円
1 中国 中国 米国 米国 米国 米国 米国 中国
2 129022億円 (19.7%) 115091億円 (18.1%) 129282億円 (18.5%) 136493億円 (18.7%) 152246億円 (20.1%) 141429億円 (20.2%) 151135億円 (19.3%) 158977億円 (19.5%)
3 米国 米国 中国 中国 中国 中国 中国 米国
4 100177億円 (15.3%) 111884億円 (17.6%) 126252億円 (18.1%) 133815億円 (18.3%) 132234億円 (17.5%) 123614億円 (17.7%) 148897億円 (19.0%) 154702億円 (19.0%)
import tabula

df1 = tabula.read_pdf("y4.pdf",
             output_format='dataframe',
             pages = '2',
             encoding='utf-8',
             java_options=None,
             pandas_options=None,
             multiple_tables=False)

df1.head()
2003年 2004年 2005年 2006年 2007年 2008年 2009年 2010年
0 総額 545,484億円 611,700億円 656,565億円 752,462億円 839,314億円 810,181億円 541,706億円 673,996億円
1 NaN 米国 米国 米国 米国 米国 米国 中国 中国
2 1 NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN 134,122億円 (24.6%) 137,307億円 (22.4%) 148,055億円 (22.5%) 169,336億円 (22.5%) 168,962億円 (20.1%) 142,143億円 (17.5%) 102,356億円 (18.9%) 130,856億円 (19.4%)
4 NaN 中国 中国 中国 中国 中国 中国 米国 米国
5 2 NaN NaN NaN NaN NaN NaN NaN NaN
6 NaN 66,355億円 (12.2%) 79,942億円 (13.1%) 88,369億円 (13.5%) 107,937億円 (14.3%) 128,390億円 (15.3%) 129,499億円 (16.0%) 87,334億円 (16.1%) 103,740億円 (15.4%)
7 NaN 韓国 韓国 韓国 韓国 韓国 韓国 韓国 韓国
8 3 NaN NaN NaN NaN NaN NaN NaN NaN
9 NaN 40,225億円 (7.4%) 47,851億円 (7.8%) 51,460億円 (7.8%) 58,489億円 (7.8%) 63,840億円 (7.6%) 61,683億円 (7.6%) 44,097億円 (8.1%) 54,602億円 (8.1%)
for i, col in enumerate(df1.columns):
    df1.iloc[:, i] = df1.iloc[:, i].str.replace(',', '')
df1.dropna(thresh=3,inplace=True)
df1.reset_index(drop=True, inplace=True)
df1 = df1.drop(['年'],axis=1)
df1.head()
2003年 2004年 2005年 2006年 2007年 2008年 2009年 2010年
0 545484億円 611700億円 656565億円 752462億円 839314億円 810181億円 541706億円 673996億円
1 米国 米国 米国 米国 米国 米国 中国 中国
2 134122億円 (24.6%) 137307億円 (22.4%) 148055億円 (22.5%) 169336億円 (22.5%) 168962億円 (20.1%) 142143億円 (17.5%) 102356億円 (18.9%) 130856億円 (19.4%)
3 中国 中国 中国 中国 中国 中国 米国 米国
4 66355億円 (12.2%) 79942億円 (13.1%) 88369億円 (13.5%) 107937億円 (14.3%) 128390億円 (15.3%) 129499億円 (16.0%) 87334億円 (16.1%) 103740億円 (15.4%)
import tabula

df2 = tabula.read_pdf("y4.pdf",
             output_format='dataframe',
             pages = '1',
             encoding='utf-8',
             java_options=None,
             pandas_options=None,
             multiple_tables=False)

df2.head()
1995年 1996年 1997年 1998年 1999年 2000年 2001年 2002年
0 総額 415,309億円 447,313億円 509,380億円 506,450億円 475,476億円 516,542億円 489,792億円 521,090億円
1 NaN 米国 米国 米国 米国 米国 米国 米国 米国
2 1 NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN 113,330億円 (27.3%) 121,771億円 (27.2%) 141,689億円 (27.8%) 154,700億円 (30.5%) 146,053億円 (30.7%) 153,559億円 (29.7%) 147,111億円 (30.0%) 148,733億円 (28.5%)
4 NaN 韓国 韓国 台湾 台湾 台湾 台湾 中国 中国
for i, col in enumerate(df2.columns):
    df2.iloc[:, i] = df2.iloc[:, i].str.replace(',', '')
df2.dropna(thresh=3,inplace=True)
df2.reset_index(drop=True, inplace=True)
df2.head()
1995年 1996年 1997年 1998年 1999年 2000年 2001年 2002年
0 総額 415309億円 447313億円 509380億円 506450億円 475476億円 516542億円 489792億円 521090億円
1 NaN 米国 米国 米国 米国 米国 米国 米国 米国
2 NaN 113330億円 (27.3%) 121771億円 (27.2%) 141689億円 (27.8%) 154700億円 (30.5%) 146053億円 (30.7%) 153559億円 (29.7%) 147111億円 (30.0%) 148733億円 (28.5%)
3 NaN 韓国 韓国 台湾 台湾 台湾 台湾 中国 中国
4 NaN 29278億円 (7.0%) 31923億円 (7.1%) 33352億円 (6.5%) 33404億円 (6.6%) 32763億円 (6.9%) 38740億円 (7.5%) 37637億円 (7.7%) 49798億円 (9.6%)
df3 = pd.concat([df2, df1, df], axis=1)
df3.head()
1995年 1996年 1997年 1998年 1999年 2000年 2001年 2002年 2003年 2009年 2010年 2011年 2012年 2013年 2014年 2015年 2016年 2017年 2018年
0 総額 415309億円 447313億円 509380億円 506450億円 475476億円 516542億円 489792億円 521090億円 545484億円 541706億円 673996億円 655465億円 637476億円 697742億円 730930億円 756139億円 700358億円 782865億円 814788億円
1 NaN 米国 米国 米国 米国 米国 米国 米国 米国 米国 中国 中国 中国 中国 米国 米国 米国 米国 米国 中国
2 NaN 113330億円 (27.3%) 121771億円 (27.2%) 141689億円 (27.8%) 154700億円 (30.5%) 146053億円 (30.7%) 153559億円 (29.7%) 147111億円 (30.0%) 148733億円 (28.5%) 134122億円 (24.6%) 102356億円 (18.9%) 130856億円 (19.4%) 129022億円 (19.7%) 115091億円 (18.1%) 129282億円 (18.5%) 136493億円 (18.7%) 152246億円 (20.1%) 141429億円 (20.2%) 151135億円 (19.3%) 158977億円 (19.5%)
3 NaN 韓国 韓国 台湾 台湾 台湾 台湾 中国 中国 中国 米国 米国 米国 米国 中国 中国 中国 中国 中国 米国
4 NaN 29278億円 (7.0%) 31923億円 (7.1%) 33352億円 (6.5%) 33404億円 (6.6%) 32763億円 (6.9%) 38740億円 (7.5%) 37637億円 (7.7%) 49798億円 (9.6%) 66355億円 (12.2%) 87334億円 (16.1%) 103740億円 (15.4%) 100177億円 (15.3%) 111884億円 (17.6%) 126252億円 (18.1%) 133815億円 (18.3%) 132234億円 (17.5%) 123614億円 (17.7%) 148897億円 (19.0%) 154702億円 (19.0%)

5 rows × 25 columns

for i, col in enumerate(df3.columns):
    df3.iloc[:, i] = df3.iloc[:, i].str.replace(r"\(.*\)","")
df3.head()
1995年 1996年 1997年 1998年 1999年 2000年 2001年 2002年 2003年 2009年 2010年 2011年 2012年 2013年 2014年 2015年 2016年 2017年 2018年
0 総額 415309億円 447313億円 509380億円 506450億円 475476億円 516542億円 489792億円 521090億円 545484億円 541706億円 673996億円 655465億円 637476億円 697742億円 730930億円 756139億円 700358億円 782865億円 814788億円
1 NaN 米国 米国 米国 米国 米国 米国 米国 米国 米国 中国 中国 中国 中国 米国 米国 米国 米国 米国 中国
2 NaN 113330億円 121771億円 141689億円 154700億円 146053億円 153559億円 147111億円 148733億円 134122億円 102356億円 130856億円 129022億円 115091億円 129282億円 136493億円 152246億円 141429億円 151135億円 158977億円
3 NaN 韓国 韓国 台湾 台湾 台湾 台湾 中国 中国 中国 米国 米国 米国 米国 中国 中国 中国 中国 中国 米国
4 NaN 29278億円 31923億円 33352億円 33404億円 32763億円 38740億円 37637億円 49798億円 66355億円 87334億円 103740億円 100177億円 111884億円 126252億円 133815億円 132234億円 123614億円 148897億円 154702億円

5 rows × 25 columns

for i, col in enumerate(df3.columns):
    df3.iloc[:, i] = df3.iloc[:, i].str.replace('億円', '')
df3.head()
1995年 1996年 1997年 1998年 1999年 2000年 2001年 2002年 2003年 2009年 2010年 2011年 2012年 2013年 2014年 2015年 2016年 2017年 2018年
0 総額 415309 447313 509380 506450 475476 516542 489792 521090 545484 541706 673996 655465 637476 697742 730930 756139 700358 782865 814788
1 NaN 米国 米国 米国 米国 米国 米国 米国 米国 米国 中国 中国 中国 中国 米国 米国 米国 米国 米国 中国
2 NaN 113330 121771 141689 154700 146053 153559 147111 148733 134122 102356 130856 129022 115091 129282 136493 152246 141429 151135 158977
3 NaN 韓国 韓国 台湾 台湾 台湾 台湾 中国 中国 中国 米国 米国 米国 米国 中国 中国 中国 中国 中国 米国
4 NaN 29278 31923 33352 33404 32763 38740 37637 49798 66355 87334 103740 100177 111884 126252 133815 132234 123614 148897 154702

5 rows × 25 columns

df4 = df3[1:21][0:][::2].drop(['年'],axis=1)
df5 = df3[1:21][1:][::2].drop(['年'],axis=1)
a=[]
c=[]
for i, col in enumerate(df4.columns):
    b=list(df4.iloc[:, i].values)
    a.append(b)
for i, col in enumerate(df5.columns):
    d=list(df5.iloc[:, i].values)
    c.append(d)
e=[]
for i in range(24):
    f=list(zip(a[i],c[i]))
    e.append(f)
df7=pd.DataFrame(e[0])
df7.columns = ['Country', 'trade_value']
df7
Country trade_value
0 米国 113330
1 韓国 29278
2 台湾 27096
3 香港 25996
4 シンガポール 21576
5 中国 20620
6 ドイツ 19080
7 タイ 18499
8 マレーシア 15731
9 英国 13233
df7.dtypes
Country        object
trade_value    object
dtype: object
df7["trade_value"] = pd.to_numeric(df7["trade_value"])
df7.dtypes
Country        object
trade_value     int64
dtype: object

データをプロットする

試験的に1995年のデータをプロットしてみる。

from matplotlib.pyplot import *
from matplotlib.font_manager import FontProperties
from matplotlib import rcParams

rcParams["font.size"] = "22"
fp = FontProperties(fname='/usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf', size=54)
rcParams['font.family'] = fp.get_name()

fig, ax = subplots(figsize=(20,12))
df7.plot(ax=ax,x='Country',kind='barh',)
xticks(np.arange(0, 14e4, 1e4),
           ['{}兆'.format(int(x / 1e4)) if x > 0 else 0 for x in np.arange(0, 14e4, 1e4)])
ax.legend(["輸出額"],loc='lower right', prop={'size': 26})
for i in ax.patches:
    ax.text(i.get_width()+1e3,i.get_y()+.38,\
      str(round((i.get_width()),1)),fontsize=22,fontname='Arial',color='dimgrey',fontweight='bold')
ax.invert_yaxis()
df3[:1]
1995年 1996年 1997年 1998年 1999年 2000年 2001年 2002年 2003年 2009年 2010年 2011年 2012年 2013年 2014年 2015年 2016年 2017年 2018年
0 総額 415309 447313 509380 506450 475476 516542 489792 521090 545484 541706 673996 655465 637476 697742 730930 756139 700358 782865 814788

1 rows × 25 columns

1995年の輸出額総額が41兆5309億円なので、米国への輸出額は日本の輸出総額の27.3%だった。

df8=[]
for i in range(24):
    m=pd.DataFrame(e[i])
    m.columns = ['Country', 'trade_value']
    m["trade_value"] = pd.to_numeric(m["trade_value"])
    df8.append(m)
df8[20].dtypes
Country        object
trade_value     int64
dtype: object
fig, ax = subplots(figsize=(20,12))
df8[23].plot(ax=ax,x='Country',kind='barh',)
xticks(np.arange(0, 19e4, 1e4),
           ['{}兆'.format(int(x / 1e4)) if x > 0 else 0 for x in np.arange(0, 19e4, 1e4)])
ax.legend(["輸出額"],loc='lower right', prop={'size': 26})
for i in ax.patches:
    ax.text(i.get_width()+1e3,i.get_y()+.38,\
      str(round((i.get_width()),1)),fontsize=22,fontname='Arial',color='dimgrey',fontweight='bold')
ax.invert_yaxis()

2018年になると中国が最大の輸出相手国になっている。1995年には2兆円程度だった輸出額が去年は約16兆円まで膨れ上がっている。台湾、香港、中国の中華経済圏だけで、日本の総輸出額の3割を占める24兆4000億円である。外需の中国依存が鮮明化しているだけではなく、内需も中国人観光客に支えられている部分があるので、まさに中国様様である。