🎃

Dataverseを試す

2023/07/19に公開

概要

Dataverseを試す機会がありましたので、その備忘録です。以下のデモ環境を使用します。

https://demo.dataverse.org/

アカウント作成

Sign Upからアカウントを作成します。

Dataverseの作成

Dataverseを作成してみます。

以下のようなDataverseを作成しました。

https://demo.dataverse.org/dataverse/nakamura196

Datasetの作成

Add Dataから、データセットを作成します。

以下が登録画面です。

以下が登録結果の画面です。

URLは以下になっており、自動的に付与されるDOIをシステム内の識別子として利用しているようでした。

https://demo.dataverse.org/dataset.xhtml?persistentId=doi:10.70122/FK2/HBXQPZ

Whole Tale

Access Datasetボタンのオプションに、Whole Taleというものがありました。

アカウントを作成して、Compute EnvironmentをJupyter Notebookに設定してみます。

Acknowledge allボタンを押します。

結果、以下のようなJupyter Notebookの環境が作成されました。

Pythonを使って、ダウンロードした画像を表示してみます。

上記のように、データセットやソースコードに対する動作確認や検証もシームレスに実行できるようでした。

Widgets

以下の「Thumbnails + Widgets」を押してみます。

以下の「Widgets」タブを表示してみます。

上記のコードを埋め込んでみると、以下に示すように、データセットに関する情報を埋め込み表示することができました。

https://codepen.io/satoru196/pen/NWEMvEV?editors=1000

API

Pythonのライブラリを使ってみます。

https://pydataverse.readthedocs.io/en/latest/

ライブラリをインストールします。

!pip install pyDataverse

データのダウンロード

以下のページを参考にしました。

https://pydataverse.readthedocs.io/en/latest/user/basic-usage.html#download-and-save-a-dataset-to-disk

from pyDataverse.api import NativeApi, DataAccessApi
from pyDataverse.models import Dataverse

base_url = 'https://demo.dataverse.org'

api = NativeApi(base_url)
data_api = DataAccessApi(base_url)

DOI = "doi:10.70122/FK2/HBXQPZ"
dataset = api.get_dataset(DOI)

files_list = dataset.json()['data']['latestVersion']['files']

for file in files_list:
    filename = file["dataFile"]["filename"]
    file_id = file["dataFile"]["id"]
    print("File name {}, id {}".format(filename, file_id))

    response = data_api.get_datafile(file_id)
    with open(filename, "wb") as f:
        f.write(response.content)

データセットの作成(demo.dataverse.orgでは権限がありませんでした。)

demo.dataverse.orgでは権限がありませんでしたが、実施した内容をメモします。

以下を参考にしました。

https://pydataverse.readthedocs.io/en/latest/user/basic-usage.html#create-dataset

API Tokenを発行します。

サンプルデータをダウンロードします。

!wget https://raw.githubusercontent.com/gdcc/pyDataverse/master/tests/data/user-guide/dataset.json

データを確認します。

from pyDataverse.models import Dataset
from pyDataverse.utils import read_file
ds = Dataset()
ds_filename = "dataset.json"
ds.from_json(read_file(ds_filename))
ds.get()

以下のようなコードでデータセットの作成ができるようです。

from pyDataverse.api import NativeApi

BASE_URL = 'https://demo.dataverse.org'
API_TOKEN = "xxx-xxx-xxx-xxx"

DV_PARENT_ALIAS = "nakamura196"

api = NativeApi(BASE_URL, API_TOKEN)

resp = api.create_dataset(DV_PARENT_ALIAS, ds.json())
resp.json()

ただし、以下のエラーメッセージが返却されました。demo.dataverse.orgでは、権限がないようでした。

ApiAuthorizationError: ERROR: POST HTTP 401 - Authorization error https://demo.dataverse.org/api/v1/dataverses/pyDataverse_user-guide/datasets. MSG: User @nakamura196 is not permitted to perform requested action.

まとめ

Dataverseのほんの一部の機能しか試せていませんが、データセットの公開や利用に適した機能が数多く提供されている印象を持ちました。

Dataverseに関する調査などの参考になりましたら幸いです。

Discussion