タイトルの通りです。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 では次のように表示されます。
タイタニックのデータセットを読み込む
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 カーネルでは以下のように表示されます。
特定のデータセットを検索することもできます。
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
- RDatasets.jl の作者。
貢献
当方エンジニアではなく、ほとんど雰囲気で書いているため、よく見ると‥よく見なくても‥コードがおかしいところがあるかもしれません。そういう時はプルリクエスト
という形でやさしく教えてくれると助かります。しかし全体的にはそういった点を差し引いても便利なgemになっているのではないかな、と思います。あと全体的にRubyを使ったデータ解析の集合知がまだ足りなくて、ググっても求める結果がなかなか見つからないことが多いですね。だから rdatasets, Daru、SVMKit、NArray、IRubyなどを使用したら、ぜひ感想を自分のブログ
にでも書いてください。きっとあとから同じことをやろうとする人の役に立つと思います。