5
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Python]PDFから表を抽出し、CSV/Excel保存・グラフ描画する方法 メモ

Last updated at Posted at 2021-07-15
  • Pythonライブラリtabula-pyを利用し、PDFから表を抽出し、CSVやExcel形式で保存する方法やグラフ描画する方法についてメモする※n番煎じ記事

事前準備

  • tabula-pyインストール

    pip install tabula-py
    

    ※Java1.8以上の環境で動作する
    ※その他pandasなどのライブラリも必要に応じてインストールする。

実装

  • 経済指標情報が記載されているPDFファイルから失業率の表を抽出。

  • 抽出結果をCSV,Excelファイルとして保存。

  • 抽出結果をグラフ化する。

  • test.py

import tabula
import pandas as pd
import matplotlib.pyplot as plt

# テストPDFデータ:主要経済指標/2.2 失業率
pdf_path = 'https://www.mofa.go.jp/mofaj/files/100053858.pdf'

# PDFから表をDataFrame型のListで抽出
# ※全頁の表を抽出したい場合は、pages='allを指定する
dfs = tabula.read_pdf(pdf_path, stream=True, pages=9)

### CSV保存 ###
dfs[0].to_csv('失業率.csv', index=None)

### Excel保存 ###
dfs[0].to_excel('失業率.xlsx', index=None)

### グラフ描画 ###
# 1. データ整形
# 日米独の2016~2020年のデータを英語表記にして抽出
target = dfs[0].iloc[0:5, 0:4].rename(columns={'Unnamed: 0': '',
                                               '': 'Japan',
                                               '': 'USA',
                                               '': 'Germany'}, index={0: '2016', 1: '2017',
                                                                       2: '2018', 3: '2019', 4: '2020'})
target = target.drop('', axis=1)
print(target)
# 2. グラフ描画
target.plot(marker="o")
plt.title('Unemployment Rate')
plt.xlabel('Year')
plt.ylabel('Rate')
plt.show()

実行

python test.py
      Japan  USA  Germany
2016    3.1  4.9      4.1
2017    2.8  4.4      3.8
2018    2.4  3.9      3.4
2019    2.4  3.7      3.1
2020    2.8  8.1      3.8

uer.png

参考情報

5
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?