R言語でRedmine APIのJSON出力を読んでみる


My Redmine

岩石です。
毎年のことですが、スギ花粉・ヒノキ花粉・黄砂と2月ごろから立て続けに浮遊物からの攻撃を受けています。
天候も安定してきて窓を開けると気持ちのよい季節になりましたが、この時期は警戒しながら外で活動しています。
猛暑は辛いですが、やはり夏が一番好きです!

今回はR言語でJSONデータの読み込みについてのお話です。

R言語のインストール

R言語については以前の記事で書いています。
解析素人がRとMeCabを使って形態素解析を始めてみました - ファーエンドテクノロジー株式会社

R言語およびR言語用IDEのRStudioのインストールについては以前の記事でもすこしだけ触れていますが、最も正規な(プロジェクトから提供されている)インストール方法としてはCRAN(The Comprehensive R Archive Network)のダウンロードリンクから落としてインストールすることになります。

私は使用する端末がすべてmacOSなので、最近はHomebrewでアプリケーションを管理することが多いです。
macOSをご利用でHomebrewを導入済みであれば

$ brew install r
$ brew install --cask rstudio

の2行の実行でRStudioが利用できるようになります。

Redmine APIを使ってデータを取得

JSONデータ実例としてRedmineのREST APIを使ってみましょう。

Redmine のREST APIについては以前利用・活用 Redmine API - ファーエンドテクノロジー株式会社で書いています。
拡張子のところをjsonとすることでJSON形式でのデータが取得できます。

取得の方法などについては過去の記事などをご参照ください。

この記事では視認性向上のために jq コマンドを使用することを紹介しました。
jqを使って改行やインデントをいれるだけでとても見やすくなり、またフィルターを使って欲しい情報を抽出することもできました。

しかしながらJSON独特の文字の並びはそのままですので開発系の方々には違和感ないと思うのですが、見にくいとお感じの方もいらっしゃると思います。
R言語を使うことで表の形式で表示したり、そのまま解析などに利用することが可能です。

例えばプロジェクト一覧を取得するのであれば、
https://<REDMINE URL>/projects.json?key=<API KEY>
にアクセスすることで取得ができます。

ブログ記事に会社のデータを載せるわけにはいきませんので、当方が代表として活動し昨年終了した勉強会のデータを使ってみます。
(Redmineでイベント開催のタスクなどを管理していました)

jsonliteを使用してデータ取得

R言語でJSONデータを取り扱う場合、一般的にはJSON用ライブラリのjsonliteライブラリを使用するようです。
初めて使用する際はインストールが必要です。

RStudioなどを使用して、

> install.packages("jsonlite") #初回のみ
> library("jsonlite")

これで使用できるようになります。

> site <- "https://<Redmine Site>/" # RedmineサイトのURLに置き換えてください
> apikey <- "<Redmine API KEY>" # RedmineのAPI KEYに置き換えてください
> projects_url <- paste(site, "projects.json?key=", apikey, sep="")
> redmine_projects <- fromJSON(projects_url)

これで取得できました。 redmine_projectsとタイプすると表のような形でプロジェクト一覧が表示できます。

今回は適したデータではないので出番がありませんが、解析などを行う場合R言語ではデータフレーム形式をよく使用します。JSONデータをデータフレーム形式に保存する場合は as.data.frame を使用します。

> df_projects <- as.data.frame(redmine_projects)

またCSVへの出力もできます。

> write.csv(df_projects, "/tmp/redmine_projects.csv")

超簡単!!

Redmine APIを使いたいけどJSON形式は困るという方には、閲覧や整形してCSV保存のためにR言語を使うという選択肢もありそうですね。

もちろんXMLもOK

JSONの取扱を紹介しましたが、もちろんXMLも対応しています。

実は今回の記事は最初メール認証のDMARCのレポートをR言語で読み取ることを書く予定でした。

しかしながら、

などの理由で見送りました。

キーワードだけ書き残します。R言語はこれからという方は参考にしてみてください。

> install.packages("XML") #初回のみ
> library("XML")
> data1 <- xmlParse("hogehoge.xml")
> getNodeSet(data1,"//record")
> getNodeSet(data1,"//source_ip")
> getNodeSet(data1,"/feedback/record")
> length(getNodeSet(data1,"/feedback/record"))
> xmlToDataFrame(getNodeSet(data1,"/feedback/record[1]"))
> xmlToDataFrame(getNodeSet(data1,"/feedback/record[1]/row"))
> xmlToDataFrame(getNodeSet(data1,"/feedback/record[1]/identifiers"))
> xmlToDataFrame(getNodeSet(data1,"/feedback/record[1]/auth_results"))
> xmlToDataFrame(getNodeSet(data1,"/feedback/record[1]/auth_results/dkim"))

DMARCレポート以外の他のXMLデータも同じように処理できると思います。
データフレーム形式に変換したら解析やCSV化などもJSONの場合と同様に処理できます。

最後に

R言語ではCSVも読み込んで同じように利用できます。
CSVを読み込むだけだと、「それExcelでいいんじゃね?」ってことになるのですが、他の形式のデータと組み合わせて解析に使えるとなると展開が広がりますね。

今回は解析の内容まで書けませんでした。
最近は国や自治体を中心にオープンデータに取り組まれて活用ができるようになりましたが、公開されるファイル形式がバラバラで戸惑うこともあります。
でもこれからはファイル形式の違いに悩まず、グラフ描写やデータ連携などR言語の特徴である解析に公開データを活かすことができそうですね。 (他の言語でもできるとは思いますが...)

【スタッフ募集中】
弊社ではAWSを活用したソリューションの企画・設計・構築・運用や、Ruby on Rails・JavaScriptフレームワークなどを使用したアプリケーション開発を行うスタッフを募集しています。採用情報の詳細
弊社での勤務に関心をお持ちの方は、知り合いの弊社社員・関係者を通じてご連絡ください。

My Redmine

こちらの記事もオススメです!
解析素人がRとMeCabを使って形態素解析を始めてみました
統計分析の学びとしてR言語を使い始めました。R言語は利用までのコストが低く、情報も多いのでお勧めです。
広報紙の作成から発行、配布までを誰でも簡単に行うには
Canvaなどのツールを使って誰でも広報紙を発行できる手順・方法を考えて取り組んでみました。
鍵の出し入れが大変なのでスマートロックを設置しました
賃貸アパートでも設置可能なスマートロックを見つけました。
HUAWEI Watch GT 4 を買って8年ぶりのスマートウォッチがある生活を始めて3週間
8年ぶりに買ったスマートウォッチ。三週間経過した現時点での生活の変化と活用状況です。
Web版VSCodeでRedmineのWasmを試した話
Web版VSCodeを使用してRedmineをWasm(WebAssembly)で動作させることを試しました。
ファーエンドテクノロジーからのお知らせ(2024/04/24更新)
入門Redmine 第6版 出版記念企画セミナー「Redmineのアクセス制御」【2024/5/30開催】
入門Redmine 第6版(2024年3月23日発売)の書籍から「Redmineのアクセス制御」について解説します。
My Redmine 初回ご契約で「入門Redmine 第6版」プレゼントのお知らせ
Redmineのクラウドサービス「My Redmine」を初めてご契約いただいたお客様にRedmine解説書「入門Redmine 第6版」を進呈いたします。
2024年度ブランドパートナーに島根県在住のモデル ユイさんを継続起用
ユイさん(モデルスタジオミューズ所属)をファーエンドテクノロジーの2024年度ブランドパートナーとして継続して起用します。
My Redmine スタンダードプランおよびAdminサポートデスクプランの料金改定のお知らせ【2024年4月ご利用分より】
2024年4月ご利用分より、My Redmine スタンダードプラン(民間企業・個人向け及び官公庁向け)とAdminサポートデスクプランの料金を改定いたします。
Redmineの最新情報をメールでお知らせする「Redmine News」配信中
新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け