新しいサービス【AwesomeQR】

【自動化】PDFの表をExcelへ(Python)

3 min 45,724 views
rpa_sample

はじめに

今回は、最近、AI等(ディープラーニング)で注目を集めているプログラミング言語である「Python」の面白いライブラリを見つけたので、シェアしたいと思います。
Googleアカウントを持っている方であれば、無料で「Colaboratory」というツールが使用できますので、こちらを使って実装までやってみたいと思います。

ゴール

PDFにある表をExcel、もしくはCSVにして抽出する

準備

早速ですが、PDFファイルに以下の左図のような表があった場合、その表をコピーしてExcelにそのまま貼り付けると、以下の右図のようにおかしなことになった経験はありますか?

令和元年経済センサスー基礎調査 P6より
令和元年経済センサスー基礎調査 P6より
左の表をコピーして貼り付け
左の表をコピーして貼り付け

今回は、こちらの表を解消すべく、「Python」の「tabula」というライブラリを使っていきます。

さて、その前に、Pythonを使うために、エディタを用意しなくてはなりませんが、そこで今回はGoogleのColaboratoryというエディタを使っていきます。

こちらは簡単に説明すると、プログラミングを実行するエディタをcloud上で実行できるものとなり、特別ものをインストールしなくても、機械学習をするプログラミング言語がセットされていて、とても便利なエディタとなります。もちろん無料です。

他にも方法がたくさんあって、必要なものをいくつかダウンロードして、PC上にあるコマンドプロンプトから実行することも可能ですが、少々面倒なのと、条件によってはダウンロードがうまくいかない場合もあるので、今回は割愛します。

Colaboratoryの導入まで説明したいところですが、Googleアカウントを持っていれば、「Colaboratory」とググるとわかりやすい情報がたくさんありますので割愛します。

それと、今回、表があるPDFも必要なので、総務省統計局の「令和元年経済センサスー基礎調査」を使いたいと思います。
以下よりダウンロードできます。

実装

さて、Colaboratoryの準備はできましたか?

さっそく始めていきます。

  1. STEP

    tabulaのインストール

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

    pip install tabula-py

    「tabula」とは、PDFの表を読み込むライブラリです。

  2. STEP

    ライブラリのインポート

    次に、以下のコードを打ち、「pandas」「tabula」というライブラリをインポートしていきます。

    import pandas as pd
    import tabula

    pandasは表形式のものを扱うライブラリです。
    表の状態を確認したいので、いったんこちらもインポートします。
    詳細は割愛します。気になる方はググってください。

  3. STEP

    「tabula」でPDFを読み込み「pandas」でデータを表示

    次に、以下のコードを打ち、PDFを読み込んで、Colaboratory上で表の状態を確認していきましょう。

    dfs = tabula.read_pdf("/content/drive/My Drive/gaiyo.pdf", stream=True , pages = '8')
    for df in dfs:
        display(df)

     tabula.read_pdfについて、簡単に説明します。

    • “/content/drive/My Drive/gaiyo.pdf” Googleドライブ内にあるgaiyo.pdfというファイルを読み込む
    • stream=True 表にラインがない場合に使用(格子状になっている場合はlattice=True
    •  pages = ‘8’ 表があるページを指定(今回は8ページが対象。全ページの場合は”all”)

    詳細は、下記サイトを参照ください。

    さて、ここまで実行すると以下の図のようになるかと思います。

    Colaboratoryの画面
  4. STEP

    Excel/CSVデータへ

    さて、最後に以下のコードを打ち、Excel/CSVデータにしていきます。

    df.to_csv("/content/drive/My Drive/活動状態別事業所数_pandas.csv", index=None)
    df.to_excel("/content/drive/My Drive/活動状態別事業所数.xlsx", index=None) 

    上記は、pandasというライブラリ経由でCSV、Excelにしていますが、実は、tabulaで上記ステップ3つを一切気にせず、一気にCSVに変換できます。

    tabula.convert_into("/content/drive/My Drive/gaiyo.pdf", "/content/drive/My Drive/活動状態別事業所数_tabula.csv", stream=True , output_format="csv", pages='8')

    実は、1行だけで、読み込んでCSVに変換することができるんです。

    すごくないですか?

    これらを実行すると、ほんの数秒で指定のフォルダにExcel/CSVデータができあがります。

    Googleドライブのフォルダ

    CSVデータはUTF-8なので、Excelで開く際は環境によっては注意が必要です。

おわりに

いかがだったでしょうか?

実は、このファイルを開くと以下のようになります。

Excelの結果

そうです、完璧ではないんですね。

それでも、この後、例えば、B列でスペース区切り等すれば、それなりに使えるデータになるかと思います。

一行のプログラミング言語で上記になるなら、悪くないような気がします。

気になる方は、試してみてください!

関連記事