2023年7月13日木曜日

公開情報からのデータ作成

「特定非営利活動法人人間中心設計推進機構が認定している人間中心設計専門家資格って,いったいどんな会社の人が取得しているんだろう?」……ことの発端はそんな疑問である.事務局に問い合わせて聞いてみたら教えてくれるだろうか,などと学生と議論していたら,先生,ウェブサイトで公開されていますよ,という話になった.

いや,毎年,公開許諾を出してくださった合格者の皆様をリストアップして公開していることは知っていたのだが,まとめて紹介しているページの存在を迂闊にも知らなかった.人間中心設計専門家とスペシャリスト,それぞれの視覚について,次のページで一覧を閲覧できる.

専門家一覧は,初回から第14回合格者まで,14年ぶんの情報がそれぞれ1つの表として公開されている.スペシャリストは遅れて整備された資格のため,10年分である.


データの取得

さてここでデータをどうやって取得するか.BeautifulSoup使ってスクレイピングするか……と考えた.が,結論からいうと次の3行でスプレッドシートにまとめられる.3行あるが,実質,ワンライナー(1行プログラム)である.そのコードは次のとおり..

import pandas as pd
pd.concat(pd.read_html('https://www.hcdnet.org/certified/list_certified/')) \
.reset_index().drop(['index'], axis=1).to_excel('certified.xlsx')

このコードが何をやっているか,簡単に解説しよう.

import pandas as pd は,pandas ライブラリを pd として参照するよ,というおまじないである.実際の処理は次のコードに集約されている.

まず,pd.read_html() で対象のページに含まれる表の情報を取得する.返されるデータは,DataFrameのリストである.この場合はそのページに14枚の表が含まれるので,14個のDataFrameが作成される.そのDataFrameを,pd.concat() で1つに繋げる.一連のインデックスを振り直すために reset_index() し,旧インデックスの情報が index カラムとして残るのでそれを drop() で削除,最後に to_excel() でスプレッドシートに書き出す,という手順である.

できたシートを見てみたところ,無事,情報公開を許可してくださっている794名の専門家リスト(資格合格者)が得られた.コードのURL部分と出力ファイル名を変更して実施するだけで,スペシャリストも同様にリストアップできるはずである.

そのあとは……

なお,リスト化するのはこのようにとても簡単なのだが,その後の処理を進める前に,名寄せしなければならないのがとても面倒くさい.こんな作業こそ,AIでさらっとやってもらえないだろうかって感じ.

試しにChatGPTに「次のデータを名寄せしてください」ってデータをまるっと投げてみたら,そっくりそのままのデータが戻ってきた.だめじゃん orz

0 件のコメント:

コメントを投稿