こんにちは。
IRuby + JupyterLab ユーザー限定ですが、Ruby + Plotly でバイオリンプロットを描くのはとても簡単です。
環境の準備が少し大変ですがどうぞ。
準備
大前提としてJupyter Lab + IRuby環境が導入されているものとします。IRubyの導入はところどころトラップがありますが、各種Webの情報を参照して、Github master から最新版のインストールすることをおすすめします。
https://github.com/SciRuby/iruby
-
plotly-extensionを導入します。
https://github.com/jupyterlab/jupyter-renderers/tree/master/packages/plotly-extension -
iruby-plotly をインストールします。
https://github.com/zach-capalbo/iruby-plotly
gem specific_install https://github.com/zach-capalbo/iruby-plotly
Irisデータセットを使ってバイオリンプロットを試す
Jupyter Labを起動します。
ここでは、拙作の rdatasets
Gemを使ってIrisデータセットを呼び出しています。
require 'rdatasets'
require 'iruby/plotly'
iris = RDatasets.datasets.iris
iris.head(5)
species = iris.Species.to_a.uniq
["setosa", "versicolor", "virginica"]
data = species.map do |sp|
sepal_length = iris.where(iris["Species"].eq sp)["Sepal.Length"].to_a
{y: sepal_length, type:"violin", name: sp}
end
ここで作られるdataは次のようなオブジェクトです。バイオリンプロットだけ試したい人は、こちらからどうぞ。
data = [{:y=>[5.1, 4.9, 4.7, 4.6, 5, 5.4, 4.6, 5, 4.4, 4.9, 5.4, 4.8, 4.8, 4.3, 5.8, 5.7, 5.4, 5.1, 5.7, 5.1, 5.4, 5.1, 4.6, 5.1, 4.8, 5, 5, 5.2, 5.2, 4.7, 4.8, 5.4, 5.2, 5.5, 4.9, 5, 5.5, 4.9, 4.4, 5.1, 5, 4.5, 4.4, 5, 5.1, 4.8, 5.1, 4.6, 5.3, 5],
:type=>"violin",
:name=>"setosa"},
{:y=>[7, 6.4, 6.9, 5.5, 6.5, 5.7, 6.3, 4.9, 6.6, 5.2, 5, 5.9, 6, 6.1, 5.6, 6.7, 5.6, 5.8, 6.2, 5.6, 5.9, 6.1, 6.3, 6.1, 6.4, 6.6, 6.8, 6.7, 6, 5.7, 5.5, 5.5, 5.8, 6, 5.4, 6, 6.7, 6.3, 5.6, 5.5, 5.5, 6.1, 5.8, 5, 5.6, 5.7, 5.7, 6.2, 5.1, 5.7],
:type=>"violin",
:name=>"versicolor"},
{:y=>[6.3, 5.8, 7.1, 6.3, 6.5, 7.6, 4.9, 7.3, 6.7, 7.2, 6.5, 6.4, 6.8, 5.7, 5.8, 6.4, 6.5, 7.7, 7.7, 6, 6.9, 5.6, 7.7, 6.3, 6.7, 7.2, 6.2, 6.1, 6.4, 7.2, 7.4, 7.9, 6.4, 6.3, 6.1, 7.7, 6.3, 6.4, 6, 6.9, 6.7, 6.9, 5.8, 6.8, 6.7, 6.7, 6.3, 6.5, 6.2, 5.9],
:type=>"violin",
:name=>"virginica"}]
IRuby.plot(
data,
title: "Rubyのバイオリンプロット",
width: 600, height: 600
)
おまけ ヒストグラム
data = species.map do |sp|
sepal_length = iris.where(iris["Species"].eq sp)["Sepal.Length"].to_a
{x: sepal_length, opacity: 0.6, type:"histogram", name: sp}
end
IRuby.plot(
data,
title: "Rubyのヒストグラム",
width: 600, height: 600, barmode: "overlay"
)
こんな感じで簡単にグラフを描くことができます。
この記事は以上です。