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

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)
    

    証明書の有効期限が表示されたら正常。

DataONE R Client の使い方

  • D1Client インスタンス作成:

    > d1c <- D1Client()
    
  • DataONE R Client のデータ検索機能は貧弱でほとんど使い物にならないので、 ONEMercury でデータを探す。

    検索結果画面上で、各エントリの download ボタンをクリックすると、 画面にそのパッケージの ResourceMap ID が表示される(resourceMap_* という文字列)ので、 ダウンロードしたいパッケージの ResourceMap ID をコピーしておく。

    下図の赤丸部分に表示されているのが ResourceMap ID である。

../../_images/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 メタデータを 自動的に解析して区切り文字を取得し、データファイルを自動的に パースしてくれるようなのだが。)