ESM アジャイル事業部 開発者ブログ

永和システムマネジメント アジャイル事業部の開発者ブログです。

red-datasets の使い方と利用できるデータセットを調べてみた

この記事は、ESM Advent Calendar 2021 10日目の記事です。

adventar.org

はじめに

こんにちは、@wai_doi です。

今年開催された RubyKaigi Takeout 2021 で、@kou さんの 「Red Arrow - Ruby and Apache Arrow」 発表がありました。

rubykaigi.org

こちらの発表の中で、@kouさんが開発された red-data-tools/red-datasets という Gem が紹介されていました。

github.com

簡単に様々なジャンルのデータセットを Ruby から利用できる Gem です。発表中のデモでは、日本の郵便番号のデータセットをRubyで簡単に利用できており、すごく便利な Gem だなと感じました。そこで、郵便番号データの他にどのようなデータセットが red-datasets から利用できるのか気になったため、調べてみることにしました。

red-datasets の使い方

まずどのように利用するか確認します。

Gem をインストールします。このブログ執筆時点では v0.14 が最新です。

gem install red-datasets

次に実際に使ってみます。各データセットのクラスが Dataset クラスを継承しているため、同じ参照方法となっています。

例として、郵便番号データの Datasets::PostalCodeJapan を使ってみます。

クラスが enumerable を include しており、each メソッドを呼び出すと、インターネット上のオープンデータをzipなどでダウンロードする処理が行われます。

first を呼んで内部で each を呼ぶこともできます。

require "datasets"

dataset = Datasets::PostalCodeJapan.new

dataset.first # ここでダウンロード処理が入る

#=>
<struct Datasets::PostalCodeJapan::Record
 organization_code="01101",
 old_postal_code="060",
 postal_code="0600000",
 prefecture_reading="ホッカイドウ",
 city_reading="サッポロシチュウオウク",
 address_reading="イカニケイサイガナイバアイ",
 prefecture="北海道",
 city="札幌市中央区",
 address="以下に掲載がない場合",
 have_multiple_postal_codes=false,
 have_address_number_per_koaza=false,
 have_chome=false,
 postal_code_is_shared=false,
 changed=false,
 change_reason=nil>

どのデータセットのクラスも同じように利用できます。ただし、new メソッドに引数を必要とするものもあります。

ダウンロード先について

ダウンロード処理が走ると、ローカルにデータセットがダウンロードされます。例えば MacOS の場合、~/Library/Caches/red-datasets/ 以下に保存されます。

Dataset.clear_cache! を実行すると、ローカルにダウンロードしたファイルを消すことができます。

https://github.com/red-data-tools/red-datasets/blob/0.1.4/lib/datasets/dataset.rb

データセットの種類

red-datasets で利用できるデータセットは、機械学習に用いるデータセットとそれ以外に大まかに分けることができることがわかりました。

Datasetクラスを継承しているクラスを分類して列挙してみました。

機械学習で用いるデータセット

  • Datasets::Adult
  • Datasets::CIFAR
  • Datasets::Communities
  • Datasets::FashionMNIST
  • Datasets::Hepatities
  • Datasets::Iris
  • Datasets::LIBSVM
  • Datasets::MNIST
  • Datasets::Mushroom
  • Datasets::Penguins
  • Datasets::Rdatasets
  • Datasets::Seaborn
  • Datasets::Wine

それ以外のデータセット

  • Datasets::CLDRPlurals
  • Datasets::EStatJapan::StatsData
  • Datasets::PennTreebank
  • Datasets::PostalCodeJapan
  • Datasets::SudachiSynonymDictionary
  • Datasets::Wikipedia

この中から特に気になった 5 つのデータセットを紹介します。

Datasets::CLDRPlurals

英語や日本語などの言語ごとの、数の表し方のルール集のようなものです。 例えば英語だと、複数系になると末尾に s が付くことや、序数は 1st、2nd、3rd、4th..と表すことがルールとして書かれています。

unicode-org.github.io

Datasets::EStatJapan::StatsData

e-Stat という日本の統計データのサイトからデータを取ってきています。都市の人口など取得することができます。

www.e-stat.go.jp

内部では e-Stat の API を叩いています。 new に引数を渡す必要があるため、ドキュメント見るのがよいです。

https://www.rubydoc.info/gems/red-datasets/Datasets/EStatJapan/StatsData

Datasets::PostalCodeJapan

日本郵便が公開している、日本の郵便番号データです。

www.post.japanpost.jp

過去に仕事でこのデータをダウンロードして使ったことがあったため、意外と利用されるデータセットなのかなと思いました。

Datasets::SudachiSynonymDictionary

Sudachi という日本語形態素解析器で使われている同義語辞書です。自然言語処理で使えそうなデータだなと思いました。

github.com

Datasets::Wikipedia

言語を指定して、その言語のウィキペディアページをダンプすることができます。 ただしダウンロード処理にすごく時間がかかるため自分は途中で諦めました...。

dumps.wikimedia.org

まとめ

red-datasets の使い方と利用できるデータセットを調べてみました。 自分の知らなかったデータセットがいろいろあるため興味深かったです。どこかで利用できる機会があれば使ってみたいなと思いました。


最後に、株式会社永和システムマネジメントでは、Ruby とアジャイルソフトウェア開発を通じてコミュニティと共生しながら成長したいエンジニアを絶賛募集しています。

agile.esm.co.jp