DataONE R Client の使い方メモ
=================================
DataONE は、米NSF の支援のもとで開発されている
研究データ分散リポジトリシステムである。
DataONE R Client は、オープンソース統計解析ソフト R 上から
DataONE に格納されているデータにアクセスするための R パッケージである。
以下の記述は FreeBSD 9.1-RELEASE 上で DataONE R Client 1.0.0 を
試験的に使用した時の備忘録である(2013年7月)。
感想
--------
* まだ完成度が低い。クライアント証明書の設定に openssl を使う必要があり、
それがマニュアルに記載されていないなど、
素人には初期設定すら不可能なレベル。
* 使い勝手が悪い。
* 現状では検索機能が貧弱な上、R から DataONE 上のパッケージの
ResourceMap ID が見えないので ONEMercury 上で検索する必要がある。
* 大きなテーブルだとターミナル画面上で全体を視認するのは難しい。
一旦エクセル等に読み込ませて全体像を把握したくなる。
* データのダウンロードも含めて一連のワークフローを R スクリプトにできる
のは利点かも。解析に使用したデータがどのデータだったのか分からなくなる
とかいう事故が防止出来る?
公式サイト等
----------------
`DataONE `_
`DataONE R Client `_
準備
---------
JDK をインストール::
# cd /usr/ports/java/openjdk7; make; make install
R のインストール::
# cd /usr/ports/math/R; make; make install
DataONE R Client のインストール
----------------------------------
環境変数の設定::
$ R CMD javareconf -e
$ export MAKE=gmake
.. export LD_LIBRARY_PATH=/usr/local/openjdk7/jre/lib/amd64/server
R パッケージのインストール。 R 上で::
> install.packages("dataonelibs")
> install.packages("dataone")
d1IdentifierSearch() は R コードにバグがあって動かない。
どうしても使いたければコードを修正してコマンドラインからインストールする。
クライアント証明書の入手
----------------------------
DataONE R Client を使用するには DataONE システムにログインするための
クライアント証明書が必要。
そのクライアント証明書は cilogin.org から入手する。
cilogin.org には google アカウントでログインできる。
* (もし google アカウントを持っていないなら)
google アカウントを作成する。
* ウェブブラウザで https://cilogin.org/?skin=DataONE にアクセスする。
* Identity Provider に Google を選び、 LOG ON ボタンを押す。
* Google の認証ページが出てくるので、Google アカウント情報を入力する
* クライアント証明書発行ページが表示される。
12文字以上のパスワードを入力すると証明書がダウンロード可能になる。
* ダウンロードした証明書は PKCS#12 形式になっているが、
DataONE R Client で使用するには pem 形式に変換する必要がある。
(DataONE R Client が利用している
暗号ライブラリ Bouncy Castle が pem 形式しか読めないため)
変換には openssl を使用する::
$ openssl pkcs12 -in P12FILE -nodes -out PEMFILE
* pem ファイルを掃除する。
DataONE R Client 1.0.0 に同梱の Bouncy Castle ver 1.46 は
pem ファイル内に余計なテキストがあると正常に動かない。
余計なテキストというのは::
Bag Attributes
localKeyID: xx xx xx xx xx xx xx xx xx xx
subject=/DC=org/DC=cilogon/C=US/O=Google/CN=xxxxx
issuer=/DC=org/DC=cilogon/C=US/O=CILogon/CN=CILogon OpenID CA 1
というような部分のこと。
* pem ファイルを配備する。/tmp/x509up_u{UID} がデフォルトの位置。::
$ cp PEMFILE /tmp/x509up_u`id -u`
* 証明書が読めるかどうか試す::
$ R
> library("dataone")
> cm <- CertificateManager()
> getCertExpires(cm)
証明書の有効期限が表示されたら正常。
.. 別解
最新の Bouncy Castle jar と入れ替えるとゴミ付き pem でも読める
削除 bcprov-jdk16-146.jar
追加 bcpkix-jdk15on-149.jar
追加 bcprov-jdk15on-149.jar
でも jar 入れ替えるより pem を編集する方が楽だよね
DataONE R Client の使い方
----------------------------
* D1Client インスタンス作成::
> d1c <- D1Client()
* DataONE R Client のデータ検索機能は貧弱でほとんど使い物にならないので、
ONEMercury でデータを探す。
`ONEMercury `_
検索結果画面上で、各エントリの download ボタンをクリックすると、
画面にそのパッケージの ResourceMap ID が表示される(resourceMap_* という文字列)ので、
ダウンロードしたいパッケージの ResourceMap ID をコピーしておく。
下図の赤丸部分に表示されているのが ResourceMap ID である。
.. image:: d1resourcemap.jpg
* パッケージをダウンロードする。::
> package1 <- getPackage(d1c, rmid)
ここで、 rmid はダウンロードしたいパッケージの ResourceMap ID である。
(メンバーノードによってはうまくダウンロードできないようだ。
台湾林試 (TFRI) のパッケージを取得しようとすると
認証エラーで途中で止まってしまう。)
* そのパッケージに含まれているオブジェクトの ID を取り出す。::
> data_ids <- getIdentifier(package1)
* データオブジェクトを取り出す。例えば 1番目のオブジェクトを取り出すには、::
> data_obj <- getMember(package1, data_ids[1])
* データオブジェクトからデータ内容を取り出す。::
> data <- getData(data_obj)
* 一時ファイルを使用してデータ内容を data.frame に変換する。::
> tf <- tempfile()
> writeLines(data, tf)
> dataframe1 <- read.csv(tf)
読み込みコマンドはデータのフォーマットに合わせて適切に選ぶこと。
(dataone パッケージには asDataFrame() という関数が定義されているが、
エラーが出て正常に動作しない。正常な動作では、EML メタデータを
自動的に解析して区切り文字を取得し、データファイルを自動的に
パースしてくれるようなのだが。)