ちょっと話題の記事

Alteryxを使ってオンライン診療対応医療機関の一覧PDFをCSVファイルに加工する処理を自動化してみる

2020.04.27

こんにちは。
データアナリティクス事業本部プロダクト営業部プリセールススペシャリストの兼本です。

皆さん、弊社土肥の「オンライン診療対応医療機関の一覧PDFをExcelに変換、Google Mapに書き出してみた」という記事はもうご覧いただきましたでしょうか。

まだの方は是非ご覧ください!
誰かが公開したデータを用途に合わせて再構築したり、さらにそのデータから新しい何かを生み出せる社会っていいですね。

さて、上記記事内で、

この記事を公開後に同僚から「Alteryxを使ったら、もっと簡単になるんじゃないの?」との意見をもらいました。

というご指名をいただきましたので、早速やってみました。

Alteryxって何?という方はこちらをどうぞ。

PDFのダウンロード

こちらのサイトに新型コロナウイルス感染症の感染拡大を踏まえたオンライン診療の対応が可能な医療機関のリストが公開されています。

PDFの中身はこんな感じになっています。

こちらは東京のデータですが、表形式できれいにレイアウトされており、ページ単位でヘッダもあるので印刷して使うにはいいですね。
一方で、セル結合が多用されていたり、都道府県ごとにデータレイアウトが異なっているデータというのは、残念ながらデータを二次利用するには向いていません。

都道府県ごとに分かれているので47回リンクをクリックしてもいいのですが、更新のたびにクリックするのも手間なので、Webスクレイピングでまとめてダウンロードします。 ワークフローとしては、以下のようになります。

実施している処理は、

  • ダウンロードツールを使用して、一覧ページのHTMLを取得
  • 正規表現ツールを使用してPDFのリンクを取得
  • PDFファイルをダウンロードできるURLを生成して、ファイルをローカルに保存

という感じで、ここまではコーディングなしで実現しています。(正規表現はプログラムじゃないってことでお願いします。)

PDFのテーブルデータをCSV形式に変換

さて、ここからが本番です。
実はAlteryxはPDFファイルからのデータ読み込みを標準でサポートしていません。

でも安心してください。

Alteryxでは、Alteryx Galleryというサイトにコミュニティメンバーが作成した様々なツールが公開されています。またAlteryx Communityという情報共有サイトでメンバーたちがAlteryxに関する様々な議論をしています。

PDFファイルからのデータ読み込みについては、いくつかの方法があったのですが、今回私が選択したのは以下の手法です。

こちらはDavidMさんというAlteryx社のSales Engineerが投稿した方法で、CamelotというPythonライブラリを使用する方法です。

Alteryxでは、ビルトインのツールを使用するだけでなく、PythonやRで作成したプログラムをワークフローに組み込むことが可能です。これによって面倒なデータの前処理はツールで行い、複雑なコアロジックをPythonやRで実装するという役割分担が可能となります。

作成したフローはマクロ化したり、ツールとして公開することもできるため、複雑な処理を汎化してほかのAlteryxユーザと共有することも可能です。

今回は簡単なマクロを作成して、Pythonコードを埋め込んでいます。

以下はワークフローに組み込んだPythonのサンプルコードです。

from ayx import Package
from ayx import Alteryx

import camelot
import pandas as pd

input_df = Alteryx.read("#1")
input_df

path = str(input_df['path'].values[0])
tables = camelot.read_pdf(path, pages='all', flavor='lattice')

output_df=pd.DataFrame()

for table in tables:
    #print(table.df)
    output_df = output_df.append(table.df,  ignore_index = True, sort = False)

Alteryx.write(output_df,1)

このマクロを最初に作成したワークフローの後続処理として組み込みます。

Pythonツールで取得したデータは、まだ整然データ(Tidy Data)になっていないため、若干のデータ整形が必要ですが、それを加えるとワークフロー全体では以下のような処理になりました。

取得した各都道府県のデータに若干のの差があったため、その差を吸収するために途中で処理を3つに分岐しています。

  • 新潟県のデータは最初のフィールドにフィールド名が設定されていたのとCamelot経由で取得したデータのずれがあったため、独自の処理を作成しています。
  • 愛知県のデータは独自の詳細データが追記されていたのですが、他県との整合性のために今回は独自データを除外しています。

分岐したデータを再度ユニオン(縦に結合)して、CSVファイルに出力をします。
このワークフローを実行すれば、ワンクリックで以下のようなデータ整形済みのCSVファイルが完成します。

作業としては、最適なPythonライブラリを探すのに2時間、ワークフローの実装に1時間、ワークフローを実行するのに1時間の計4時間くらいで処理を実現することができました。
今はこの処理を作業用PCで実行していますが、このワークフローをAlteryx Serverにデプロイしてスケジュール実行すれば、定期的な更新を自動化することもできます。

ただし、今回作成したデータには、

  • レコードの最初のフィールドの定義があいまいで、作成した都道府県によって、全ページの通し番号、ページごとの連番、市町村名などの違いがある
  • 住所フィールドは都道府県も含むと注意書きがあるものの、実際には都道府県がない住所も含まれている

といった粗削りな部分が残っています。
今回はAlteryxでのデータ作成手順をご紹介する目的であるため、残課題への対処は行いませんが、実際にデータを利用するにあたっては、さらにデータを精査したうえで発生する課題を柔軟に素早く処理できることが重要です。

まとめ

いかがでしたか、今回はAlteryxを使用してPDFファイルのデータからCSVファイルを生成する処理をご紹介いたしました。

Alteryxを採用される多くの企業様では、大量の未整形データを抱えており、少数のデータアナリストだけではデータ分析業務が追い付かない状況です。
そのため、AlteryxのようなツールをPythonやRで実装済みの処理を活かしつつ、データ前処理にかかるコストを下げることを目標に据えた人材育成を進められています。

以上、最後まで読んでいただきありがとうございました。

Alteryxの導入なら、クラスメソッドにおまかせください

日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。

alteryx_960x400