1.前置き
この春、新社会人になりました。来たる給料日が非常に楽しみです。
給料のことを気にしていると、手取りも気になってきます。
予想したおおよその手取りよりも実際の手取りが少なかったら、少し悲しむ気がしてきました。
そんな理由で、手取りを正確に計算することで、心の平穏の維持に備えようと考えました。
さて、手取りを計算するためには、社会保険料と税額を求める必要があります。
この内の社会保険料は、月収を標準報酬月額に変換して、その値にある保険料率を掛け算することで求められます。
本記事では、PythonでPDFから表の取得を行うことで、社会保険料の計算に必要な標準報酬月額の取得を目指してみました。
2.ライブラリのインストール
PythonでPDFから表を取得するための方法は、ざっと調べてみると二つありそうでした。
tabuler-pyライブラリもしくはcamelotライブラリを用いる方法です。
tabuler-pyは、ライブラリの中身はJavaで書かれているそうなので、PCにJava環境がないと動きません。
プログラミング環境は雑に作りたくないので、Java環境を作ってtabuler-pyを使うのは見送ることにして、今回はcamelotライブラリを使用しました。
camelotライブラリ自体は、
pip install camelot-py[cv]
でインストールできます(Anaconda利用者は、pipでなくcondaで管理)。
ただこのライブラリの利用には、Ghostscriptが必要ですので、インストールしておきましょう。
For Windows : https://www.ghostscript.com/download/gsdnld.html
For macOS : brew install tcl-tk ghostscript
3.PDFから表の取得
では、実際にcamelotを使って、PDFから表を取得しましょう。
今回は、厚生年金保険料計算のための標準報酬月額を調べるために、日本年金機構が出している保険料額表をサンプルとして取り上げてみます。
import camelot
table_nenkin = camelot.read_pdf('nenkinR3.pdf') #TableList
table_nenkin[0].df
PDFをnenkinR3.pdfという名前で保存して、camelot.read_pdfに引き渡すと、
PDF中の全ての表がDataFrameとして取得され、ページ上部の表から順にリストへ格納されます。
本PDFは表が一つしかなく、table_nenkin[0].dfで目的の表をデータフレームとして取得できます。
この表をJupyter環境で表示すると下図のようになるはずです。
簡単ですね!!
表取得は完了しましたので、当初の目的通りに、これを標準報酬月額の取得に応用してみましょう。
以下コードと実行結果。
import re
month_salary = 238000 # your salary
for i in range(3,35):
if i == 34:
standard_month_salary = int(re.sub(r"\D", "", table_nenkin[0].df[1][i]))
break
s = table_nenkin[0].df[2][i]
Range = s.split('\n')
Range_H = int(re.sub(r"\D", "", Range[2]))
if Range_H >= month_salary:
standard_month_salary = int(re.sub(r"\D", "", table_nenkin[0].df[1][i]))
break
print('標準報酬月額(円):', standard_month_salary)
標準報酬月額(円): 240000
4. 最後に
社会常識のお勉強ついでに、Pythonを用いてPDFから表の取得をする方法を調べてみました。camelotの使い勝手は良さそうです。