【tabula】PythonでPDFのデータを抽出する方法【Java設定方法の説明あり】

今回はPythontabulaライブラリを用いてPDFのデータエクセルに変換する方法を紹介します。

PDF内のデータをエクセルにコピペしようとしても上手くできなかったり、欲しいデータ一式がエクセルではなくPDFのせいで扱いづらかったり、、、
そんな悩みは今回取り上げる方法で解消します!

PDFのデータを取り扱うのは無理だ!と信じ切っている人もまだまだ多いので、PDFのデータ処理を自動化できたら一目置かれること間違いなしです(笑)

※基本的なPythonの開発環境は構築されている前提で話を進めていきます。

①tabulaのインストール

まず、以下のコードを入力し、tabulaというライブラリをインストールします。

pip install tabula-py

②PDFデータの準備

ここでは題材として「これまでのワクチン総接種回数(都道府県別)」のPDFを準備します。

上記のような表データがPDF内に記載されています。
この表データを抽出しエクセルにすることが今回の目標です。

③Python実行

早速PDFのデータを取得してみます。
下記のようにコードを記入します。

import pandas as pd
import tabula

# lattice=True テーブルの罫線でセルを判定する
# pages = '1' ページ数を指定する
# 複数ページ(例えば3~5ページ)を指定する場合は pages = '3-5'
# 全てのページを指定する場合は pages = 'all'
# pandas.DataFrameのリストが関数の戻り値
dfs = tabula.read_pdf("kenbetsu-vaccination_data2.pdf", lattice=True, pages = '1') 
for df in dfs:
    display(df.head())

こんな簡単なのか!と意気揚々と実行すると、、、

JavaNotFoundError: `java` command is not found from this Python process.Please ensure Java is installed and PATH is set for `java`

上記のようなエラーが出て止まってしまう方が多いと思います。
このtabulaというライブラリはJavaで動くものですので、Javaのインストールも別途必要になるのです。

④Javaのインストール

Javaこちらからダウンロードできます。

自分の使用するOSに合わせてお好みの形式でダウンロードしてください。

ダウンロードしたら流れに身を任せてインストールします。

⑤環境変数の設定およびPATHの設定

環境変数JAVA_HOMEおよびPATHの設定を環境変数の設定画面で行います。

「コントロールパネル」→「システムとセキュリティ」→「システム」→「システムの詳細設定」→「環境変数」ボタンをクリック

「環境変数」ウインドウが開きます。

1. JAVA_HOMEの設定

変数のところにJAVA_HOMEの項目がない場合は「新規」ボタンをクリックして追加します。

ユーザー環境変数システム環境変数の2つがありますが、
ユーザー環境変数の方で設定を行うと現在 ログインしているユーザーだけに設定が反映されます。
一方、システム環境変数の方で設定した場合には全ユーザーで共通して設定が反映されます。また、システム環境変数を設定できるのは管理者だけです。
上記の点に注意して設定を進めてください。

「新しいシステム変数」ウインドウが表示されますので「変数名」「JAVA_HOME」を、「変数値」“C:\Program Files\Java\jdk-17.0.1(※自分がインストールしたディレクトリ)”と入力して「OK」をクリックして下さい。

2. Pathの新規追加

「変数」の中で「Path」と書かれたものを選択し「編集」ボタンをクリックして下さい。

「環境変数名の編集」ウインドウが表示されます。

「新規」ボタンをクリックし、“%JAVA_HOME%\bin”と入力して新しい項目を追加します。OKを繰り返し設定完了です。

⑤Python実行(二度目)

Javaのインストールと設定を終えてリベンジです。

一度開いたPython開発環境(Jupyter Notebookなど)は再起動しましょう。

import pandas as pd
import tabula

# lattice=True テーブルの罫線でセルを判定する
# pages = '1' ページ数を指定する
# 複数ページ(例えば3~5ページ)を指定する場合は pages = '3-5'
# 全てのページを指定する場合は pages = 'all'
# pandas.DataFrameのリストが関数の戻り値
dfs = tabula.read_pdf("kenbetsu-vaccination_data2.pdf", lattice=True, pages = '1')
for df in dfs:
    display(df.head())

実行すると下記のように出力されると思います。

良い感じです。

エクセルへ出力してみましょう。

df.to_excel("kenbetsu-vaccination_data2.xlsx", index=None)

目標通りPDFのデータをエクセル出力することができました!

xlsxファイルにしてしまえば更にデータ解析を進めたりデータベースにまとめたりと自由自在です。様々な可能性が広がりますね(^^)/

まとめ

PDFのデータPythontabulaライブラリを用いてエクセルに変換する方法を紹介しました。

javaのインストールや設定が必要で少々手間ですが、最初の一回だけでOKです。

PDFのデータを自在に取り扱えることで色々な可能性が広がると思います。一度は諦めていたPDFデータの集計、今回紹介した方法で是非トライしてみては如何でしょうか!?

※本記事に記載された方法を実行したことにより生じた損害などについては一切の責任を負いかねます。



スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする