1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rのデータセットを読み込むRubyのGemを作ったった

Last updated at Posted at 2019-01-23

タイトルの通りです。RubyからRのデータセットを読み込むGemを作りました。
R言語パッケージに含まれている約1,200のデータセットを利用することができます。
https://github.com/kojix2/rdatasets

Rのデータセットの元データはこちらです。
https://github.com/vincentarelbundock/Rdatasets

インストール

gem install rdatasets
  • 必要なもの
    • Daru データフレームオブジェクトを提供するライブラリ

使い方

iris(アヤメの計測データ)のデータセットを読み込む

require 'radatasets'

iris = RDatasets.load(:datasets, :iris)
iris = Daru::DataFrame.from_rdatasets(:datasets, :iris)

irisのデータが読み込まれ、Daru::DataFrameが作成されます。

=> #<Daru::DataFrame(150x5)>
            Sepal.Leng Sepal.Widt Petal.Leng Petal.Widt    Species
          1        5.1        3.5        1.4        0.2     setosa
          2        4.9          3        1.4        0.2     setosa
          3        4.7        3.2        1.3        0.2     setosa
          4        4.6        3.1        1.5        0.2     setosa
          5          5        3.6        1.4        0.2     setosa
          6        5.4        3.9        1.7        0.4     setosa
          7        4.6        3.4        1.4        0.3     setosa
          8          5        3.4        1.5        0.2     setosa
          9        4.4        2.9        1.4        0.2     setosa
         10        4.9        3.1        1.5        0.1     setosa
         11        5.4        3.7        1.5        0.2     setosa
         12        4.8        3.4        1.6        0.2     setosa
         13        4.8          3        1.4        0.1     setosa
         14        4.3          3        1.1        0.1     setosa
         15        5.8          4        1.2        0.2     setosa
        ...        ...        ...        ...        ...        ...

Jupyter Lab + IRuby では次のように表示されます。
iris.png

タイタニックのデータセットを読み込む

titanic = RDatasets.load :datasets, :Titanic
# => #<Daru::DataFrame(32x5)>
             Class      Sex      Age Survived     Freq
        1      1st     Male    Child       No        0
        2      2nd     Male    Child       No        0
        3      3rd     Male    Child       No       35
        4     Crew     Male    Child       No        0
        5      1st   Female    Child       No        0
        6      2nd   Female    Child       No        0
        7      3rd   Female    Child       No       17
        8     Crew   Female    Child       No        0
        9      1st     Male    Adult       No      118
       10      2nd     Male    Adult       No      154
       11      3rd     Male    Adult       No      387
       12     Crew     Male    Adult       No      670
       13      1st   Female    Adult       No        4
       14      2nd   Female    Adult       No       13
       15      3rd   Female    Adult       No       89
      ...      ...      ...      ...      ...      ...

一応メソッドチェーンでも呼び出せます。

iris = RDatasets.datasets.iris
titanic = RDatasets.datasets.Titanic

使用できるパッケージのリストを表示する

RDatasets.packages

# => [:boot, :carData, :cluster, :COUNT, :DAAG, :datasets, :drc, :Ecdat, :evir, :forecast, 
# :fpp2, :gamclass, :gap, :geepack, :ggplot2, :HistData, :HSAUR, :hwde, :ISLR, :KMsurv, 
# :lattice, :lme4, :lmec, :MASS, :mediation, :mi, :mosaicData, :multgee, :plm, :plyr, 
# :pscl, :psych, :quantreg, :reshape2, :robustbase, :rpart, :sandwich, :sem, :Stat2Data, 
# :survival, :texmex, :vcd, :Zelig]

あるパッケージで利用できるデータセットのリストを表示する

RDatasets.packages :survival

# => [:bladder, :cancer, :cgd, :colon, :flchain, :genfan, :heart, :kidney, :leukemia, 
# :logan, :lung, :mgus, :mgus2, :myeloid, :nwtco, :ovarian, :pbc, :rats, :retinopathy, 
# :rhDNase, :solder, :stanford2, :tobin, :transplant, :uspop2, :veteran]

# 打ち損じでデータの読み込みが失敗したときのために、load(package_name)でもデータセットのリストは表示できる
RDatasets.load :datasets, :hogehoge
# => エラー (No such file or directory
RDatasets.load :datasets
# => [:"ability.cov", :airmiles, :AirPassengers, :airquality, :anscombe ...以下略

全データセットのリストを取得する

RDatasets.df
# => Daru::DataFrame

Jupyter Lab + IRuby カーネルでは以下のように表示されます。
daru.png

特定のデータセットを検索することもできます。

RDatasets.search "diamond"     # 大文字、小文字は無視される
RDatasets.search /diamond/     # 正規表現

説明

 このGemはRubyからデータセットを簡単に読み込む方法がないので作成しました。JuliaからRのデータセットを読み込むパッケージの RDatasets.jl が便利そうだったので、これを真似して作りました。RのデータセットはVincentさんの作成したレポジトリのRのデータセットから移植しました。
 内部では data フォルダに格納してあるCSVファイルを Daru::DataFrame.from_csv で読み込むだけ、という簡単な仕組みです。RubyはGemの作成時にdataディレクトリをtar.gzに自動で圧縮してくれます。それでもgemのサイズは約23.6MBと少し大きめです。
 配布元よりRのデータセットのライセンスはGPL3と仮定されています。詳しくはリンクをご覧ください。

感謝

  • Vincent Arel-Bundock
    • Rのデータセットを収載したレポジトリ Rdatasets の作者。
  • John Myles White

貢献

 当方エンジニアではなく、ほとんど雰囲気で書いているため、よく見ると‥よく見なくても‥コードがおかしいところがあるかもしれません。そういう時はプルリクエストという形でやさしく教えてくれると助かります。しかし全体的にはそういった点を差し引いても便利なgemになっているのではないかな、と思います。あと全体的にRubyを使ったデータ解析の集合知がまだ足りなくて、ググっても求める結果がなかなか見つからないことが多いですね。だから rdatasets, Daru、SVMKit、NArray、IRubyなどを使用したら、ぜひ感想を自分のブログにでも書いてください。きっとあとから同じことをやろうとする人の役に立つと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?