この記事は、ESM Advent Calendar 2021 10日目の記事です。
はじめに
こんにちは、@wai_doi です。
今年開催された RubyKaigi Takeout 2021 で、@kou さんの 「Red Arrow - Ruby and Apache Arrow」 発表がありました。
こちらの発表の中で、@kouさんが開発された red-data-tools/red-datasets
という Gem が紹介されていました。
簡単に様々なジャンルのデータセットを 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..と表すことがルールとして書かれています。
Datasets::EStatJapan::StatsData
e-Stat という日本の統計データのサイトからデータを取ってきています。都市の人口など取得することができます。
内部では e-Stat の API を叩いています。
new
に引数を渡す必要があるため、ドキュメント見るのがよいです。
https://www.rubydoc.info/gems/red-datasets/Datasets/EStatJapan/StatsData
Datasets::PostalCodeJapan
日本郵便が公開している、日本の郵便番号データです。
過去に仕事でこのデータをダウンロードして使ったことがあったため、意外と利用されるデータセットなのかなと思いました。
Datasets::SudachiSynonymDictionary
Sudachi という日本語形態素解析器で使われている同義語辞書です。自然言語処理で使えそうなデータだなと思いました。
Datasets::Wikipedia
言語を指定して、その言語のウィキペディアページをダンプすることができます。 ただしダウンロード処理にすごく時間がかかるため自分は途中で諦めました...。
まとめ
red-datasets の使い方と利用できるデータセットを調べてみました。 自分の知らなかったデータセットがいろいろあるため興味深かったです。どこかで利用できる機会があれば使ってみたいなと思いました。
最後に、株式会社永和システムマネジメントでは、Ruby とアジャイルソフトウェア開発を通じてコミュニティと共生しながら成長したいエンジニアを絶賛募集しています。