大学の科研費の採択状況分析:KAKENデータベースを自動検索、自動ダウンロードする方法

KAKENSearchAllInstitutes.ipynbというスクリプトを作りました。Seleniumというモジュールを使って、KAKENデータベースのウェブサイトにアクセスして、検索クエリを入力し、検索結果をダウンロードできます。Seleniumは人間がブラウザを操作するかわりに自動でそれを行ってくれるので、「検索」や「ダウンロード」といったボタンを人間がクリックするのと同じ操作を自動でやってくれて、便利です。一つの大学の検索を終えたら、次の大学の検索も自動で引き続き行えます。

例えば人間がブラウザで検索した場合、

検索結果: 66件 / 研究機関: 東邦大学 AND 開始年度: 2024 TO 2030 AND 役割: 研究代表者

といった検索条件と検索結果が得られますが、これと同じものがpythonスクリプトを実行した結果として得られて、この66件の中身もcsvファイルとしてダウンロードすることができますので、あとからこのcsvファイルを開いて読むことで(それもpythonで自動化できる)、研究種目や研究課題、その他の情報が得られます。

全部の項目に値があるわけではありませんが、csvファイルの項目名(列の名前)は以下のようになっていました。

研究課題名 研究課題名 (英文) 研究課題/領域番号 研究期間 (年度) 研究代表者 研究分担者 連携研究者 研究協力者 特別研究員 外国人特別研究員 受入研究者 キーワード 研究分野 審査区分 研究種目 研究機関 応募区分 総配分額 総配分額 (直接経費) 総配分額 (間接経費) 各年度配分額 各年度配分額 (直接経費) 各年度配分額 (間接経費) 現在までの達成度 (区分コード) 現在までの達成度 (区分) 理由 研究開始時の研究の概要 研究概要 研究概要 (英文) 研究成果の概要 研究成果の概要 (英文) 研究実績の概要 現在までの達成度 (段落) 今後の研究の推進方策 次年度の研究費の使用計画 次年度使用額が生じた理由 次年度使用額の使用計画 自由記述の分野 評価記号 備考 国際共同研究 学会・シンポジウム開催 雑誌論文 雑誌論文 (国際共著) 雑誌論文 (査読あり) 雑誌論文 (オープンアクセス) 学会発表 学会発表 (国際学会) 学会発表 (招待講演) 図書 プレス/新聞発表 備考 (成果物) 産業財産権 産業財産権 (外国) 文献書誌

この情報があれば、科研費の金額なども知ることができるわけです。

 

名寄せの問題

このスクリプトを実行させる場合の難点は、正しい「研究機関」の名称が必要だという点です。大学によっては途中で名称が変わることがありますので、古い名前で最近の状況を検索しても、検索でひっかけてこれません。

名称が変更された大学に関しては、現在の呼称と旧称を合わせて検索クエリをつくるなどの工夫が必要になります。

また、「正しい名称」というのが曲者で、それはKAKENデータベースで「詳細検索」を選んで、「研究期間を参照」をクリックするとプルダウンメニューに一覧が表示されるわけですが、下の例をみると一貫性がないこともあってその複雑さがわかると思います。

大学名リストを読み込んで複数の大学を自動検索

複数の大学に関して検索を自動化したい場合には、その複数の大学のリストが必要になります。

  1. 日本の大学一覧(リスト)

検索を自動化してしまうと、検索クエリの失敗に自分で気づけない恐れがあるので、手動での検索結果と比べて、意図した通りの検索結果が得られているかを確認する作業が重要になります。

検索結果: 15,520件 / 研究機関: 慶應義塾大学

「キーワード検索」の入力窓に、慶應義塾大学、慶応大学、慶應大学などと入れて検索するとバラバラな結果が得られます。「研究機関」の入力窓に慶應義塾大学、慶応大学、慶應大学などと入れて検索すると、慶應義塾大学の場合にのみ検索されます。大学を調べるときには「キーワード検索」ではなく「研究機関」のほうに入力するというのが非常に大事です。

検索クエリの作り方

自動化するためのクエリを作る場合には、実際に手作業で、ウェブブラウザで「詳細検索」を選び、自分が検索したい条件を入れてみて、検索したときにできるurlを検索クエリとして利用できます。そして、pythonのスクリプトからSleniumによってそのurlにアクセスすれば、手作業で検索したのと同じ結果が得られるというわけです。

 

  1. KAKEN_Definition https://bitbucket.org/niijp/kaken_definition/src/master/
  2. KAKENクエリ構成パラメータ国立情報学研究所2017年5月

も参考になるのかもしれません。今の自分の場合は、APIを使っているわけではなくて、たんに人間がやるPC上の操作をSeleniumにやらせているだけです。

データ取得例

東邦医学会雑誌 第70巻 1号(p.1-36) 若手研究者を対象とした科研費研究種目の採択件数に基づく研究支援効果の検証(https://toho.repo.nii.ac.jp/records/2002630) で、このような方法で科研費のデータを取得して分析しました。

 

動作環境

自分はウインドウズPCにAnaconda3をインストールして、Jupyter notebook(ウェブブラウザでスクリプトの編集ができる環境)をつかってpythonのスクリプトを編集しています。いまどきは、自分がやりたいことをChatGPTに伝えるとChatGPTがそれを実現するPythonスクリプトを返してくれるので、ゼロからプログラミングをする必要は全くありません。実のところ自分がプログラムを書く必要がほとんどない状態です。すごい時代になったものだと思います。ただしときどき自分の意図とは異なる返事がChatGPTから返ってくることもあるので、それは要注意です。

OS: Windows 11
platform : win-64
Python version: 3.12.7
conda 24.9.2
selenium==4.27.1
タイトルとURLをコピーしました