kobe.r #15 - incanter チョットシッテル
TRANSCRIPT
Incanter チョットシッテル@tnoda_
Kobe.R #15
[2015-02-28 Sat]
Incanterを知っていますか? (N=100)
No
(100)
Incanterを知っていますか? (N=100)
No
(100)
円グラフなのはいけないと思います
しかも 3D 円グラフ!
_人人人人人人人人_> 3D pie chart < ̄YYYYYYYY ̄Incanter で 3D 円グラフを書く方法を知らない。
円グラフなのはいけないと思います
しかも 3D 円グラフ!
_人人人人人人人人_> 3D pie chart < ̄YYYYYYYY ̄
Incanter で 3D 円グラフを書く方法を知らない。
円グラフなのはいけないと思います
しかも 3D 円グラフ!
_人人人人人人人人_> 3D pie chart < ̄YYYYYYYY ̄Incanter で 3D 円グラフを書く方法を知らない。
Rソースコード
3D円グラフの書き方
1 install.packages("plotrix", dependencies = TRUE)2 library(plotrix)3 sls <- c(100)4 lbls <- c("No\n(100)")5 pie3D(sls , labels = lbls)
R終了のお知らせ本日の発表で R のはなしがでてくるのは、これが最後です。
Rソースコード
3D円グラフの書き方
1 install.packages("plotrix", dependencies = TRUE)2 library(plotrix)3 sls <- c(100)4 lbls <- c("No\n(100)")5 pie3D(sls , labels = lbls)
R終了のお知らせ本日の発表で R のはなしがでてくるのは、これが最後です。
Outline
Incanterの構成• プラットフォーム/ツール• R との比較
Incanterの使い方• インストール/環境構築• データの取扱い
Incanterの構成要素
!"#$%&'(
)#*&+,#'(#-
.,'/&0(+
123#-456
7&8+4+3
! 9#:4#-(+
Incanterの構成要素
!"#$%&'(
)#*&+,#'(#-
.,'/&0(+
123#-456
7&8+4+3
! 9#:4#-(+
!
!
!
.;.<<
=,+-+4#
Incanterの構成要素
!"#$%&'(
)#*&+,#'(#-
.,'/&0(+
123#-456
7&8+4+3
! 9#:4#-(+
!
!
!
.;.<<
=,+-+4#.0,>"+(
.0,>"+(
?@A
?4*4
Incanterとは
Incanterの本体は何かというと
• Clojure ライブラリ である。
Incanterを使うということは
• Clojure ライブラリ を使うということ、すなわち、• Clojure プログラミング をすることである。
Incanterとは
Incanterの本体は何かというと• Clojure ライブラリ である。
Incanterを使うということは
• Clojure ライブラリ を使うということ、すなわち、• Clojure プログラミング をすることである。
Incanterとは
Incanterの本体は何かというと• Clojure ライブラリ である。
Incanterを使うということは• Clojure ライブラリ を使うということ、すなわち、
• Clojure プログラミング をすることである。
Incanterとは
Incanterの本体は何かというと• Clojure ライブラリ である。
Incanterを使うということは• Clojure ライブラリ を使うということ、すなわち、• Clojure プログラミング をすることである。
Incanterの実体
!"#$%&'(
)#*&+,#'(#-
.,'/&0(+
123#-456
7&8+4+3
! 9#:4#-(+
!
!
!
.;.<<
=,+-+4#.0,>"+(
.0,>"+(
?@A
?4*4
Incanterの実体
!"#$%&'(
)#*&+,#'(#-
.,'/&0(+
123#-456
7&8+4+3
! 9#:4#-(+
!
!
!
.;.<<
=,+-+4# .0,>"+(
.0,>"+(
?@A
?4*49#:4#-(+
Clojureとはプログラミング言語、開発環境、エコシステム、・・・
!"#"$!%&'(')*+,-
.)/0123456768
60"2
9)/!123
9/:;*)32
<=>?
9/))3.@*/A
?*+2"27
9/A.1223A.7
?*+2"27
ClojureのコンパイラJavaとは異なる文法
• 前置記法• 表現力豊かなリテラル
型推論int a = 4;
マクロ• 強力な機能、力の源泉• 使いこなせば、プログラミングではなくプログラミング言語を操ることができる。
Clojureと Javaの文法の違い
Javaの Javaメソッド呼び出しobj.aMethod(arg0 , arg1 , ...);AClass.staticMethod(arg0 , arg1 , ...);
Clojureの Javaメソッド呼び出し(. method obj arg0 arg1 ...)(AClass/staticMethod arg0 arg1 ...)
Clojureの Clojure関数呼び出し(func arg0 arg1 ...)
マクロ(並)の例
ネストした式(reduce + (filter valid? (map f coll )))
• 見にくい。書きにくい。括弧多い。
スレッディングマクロ(組み込み)(->> coll
(map f)(filter valid?)(reduce +))
• dplyr %>% dplyr %>% dplyr
マクロ(並)の例
ネストした式(reduce + (filter valid? (map f coll )))
• 見にくい。書きにくい。括弧多い。
スレッディングマクロ(組み込み)(->> coll
(map f)(filter valid?)(reduce +))
• dplyr %>% dplyr %>% dplyr
マクロ(並)の例
ネストした式(reduce + (filter valid? (map f coll )))
• 見にくい。書きにくい。括弧多い。
スレッディングマクロ(組み込み)(->> coll
(map f)(filter valid?)(reduce +))
• dplyr %>% dplyr %>% dplyr
マクロ(並)の例
ネストした式(reduce + (filter valid? (map f coll )))
• 見にくい。書きにくい。括弧多い。
スレッディングマクロ(組み込み)(->> coll
(map f)(filter valid?)(reduce +))
• dplyr %>% dplyr %>% dplyr
ClojureあれこれREPL
> (+ 1 2)3
> (defn f [x] (cond (zero? x) 0 (= 1 x) 1 :else (+ (f (dec x)) (f (- x 2)))))
#’sandbox24497/f
> (f 11)89
コレクションライブラリスレッドセーフ、高速な永続コレクション
並行実行ライブラリ多コアマシンの性能を限界まで引き出す。
ClojureあれこれREPL
> (+ 1 2)3
> (defn f [x] (cond (zero? x) 0 (= 1 x) 1 :else (+ (f (dec x)) (f (- x 2)))))
#’sandbox24497/f
> (f 11)89
コレクションライブラリスレッドセーフ、高速な永続コレクション
並行実行ライブラリ多コアマシンの性能を限界まで引き出す。
ClojureあれこれREPL
> (+ 1 2)3
> (defn f [x] (cond (zero? x) 0 (= 1 x) 1 :else (+ (f (dec x)) (f (- x 2)))))
#’sandbox24497/f
> (f 11)89
コレクションライブラリスレッドセーフ、高速な永続コレクション
並行実行ライブラリ多コアマシンの性能を限界まで引き出す。
Incanterの総合力
!"#$%&'(
)#*&+,#'(#-
.,'/&0(+
123#-456
7&8+4+3
! 9#:4#-(+
!
!
!
.;.<<
=,+-+4# .0,>"+(
.0,>"+(
?@A
?4*49#:4#-(+
Workflow
!"#"
$%&'()*+,&# -&#,&#./#0%+ 1
.'),'%()22 3+"4/252
Workflow
!"#"
$%&'()*+,&# -&#,&#./#0%+ 1
.'),'%()22 3+"4/252
!"#"
$%&'()-&#,&#*+("+#)'674%8&')
Integration
!"#
$%#
&%' ()*++,
-,)./ -0+.1
Integration
!"#
$%#
&%' ()*++,
-,)./ -0+.1
234)305.
Checkpoint 1
Incanterとは• Clojure ライブラリ
Clojureとは
• Java + 強化ライブラリ (clojure-x.y.z.jar)• 文法, REPL, 高速永続コレクション, 並行実行, マクロ
Incanterの総合力• R + Python• Integration
Checkpoint 1
Incanterとは• Clojure ライブラリ
Clojureとは
• Java + 強化ライブラリ (clojure-x.y.z.jar)• 文法, REPL, 高速永続コレクション, 並行実行, マクロ
Incanterの総合力• R + Python• Integration
Checkpoint 1
Incanterとは• Clojure ライブラリ
Clojureとは
• Java + 強化ライブラリ (clojure-x.y.z.jar)• 文法, REPL, 高速永続コレクション, 並行実行, マクロ
Incanterの総合力• R + Python• Integration
Checkpoint 1
Incanterとは• Clojure ライブラリ
Clojureとは
• Java + 強化ライブラリ (clojure-x.y.z.jar)• 文法, REPL, 高速永続コレクション, 並行実行, マクロ
Incanterの総合力• R + Python• Integration
How to install Incanter (1/2)
Java
• パッケージ管理ツールでインストールするのが簡単• Debian 系 Linux$ sudo apt-get install openjdk-7-jdk
• Oracle のサイトからダウンロード• http://www.oracle.com/technetwork/java/javase/downloads/index.html
Clojure
• Leiningen をインストールする• 実体はシェルスクリプトなのでダウンロードするだけ$ curl -L -O https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein$ chmod +x lein
How to install Incanter (1/2)
Java
• パッケージ管理ツールでインストールするのが簡単• Debian 系 Linux$ sudo apt-get install openjdk-7-jdk
• Oracle のサイトからダウンロード• http://www.oracle.com/technetwork/java/javase/downloads/index.html
Clojure
• Leiningen をインストールする• 実体はシェルスクリプトなのでダウンロードするだけ$ curl -L -O https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein$ chmod +x lein
How to install Incanter (1/2)
Java
• パッケージ管理ツールでインストールするのが簡単• Debian 系 Linux$ sudo apt-get install openjdk-7-jdk
• Oracle のサイトからダウンロード• http://www.oracle.com/technetwork/java/javase/downloads/index.html
Clojure
• Leiningen をインストールする• 実体はシェルスクリプトなのでダウンロードするだけ$ curl -L -O https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein$ chmod +x lein
How to install Incanter (2/2)
Incanter
• 公式サイトのダウンロードリンク• http://incanter.org/downloads/
罠。インストール駄目、絶対より正確には
• とにかく古い• Leiningen が必要な Java/Clojure ライブラリを管理
• もちろん、その中に Incanter が含まれる• 明示的なインストール作業不要
How to install Incanter (2/2)
Incanter
• 公式サイトのダウンロードリンク• http://incanter.org/downloads/
罠。インストール駄目、絶対
より正確には• とにかく古い• Leiningen が必要な Java/Clojure ライブラリを管理
• もちろん、その中に Incanter が含まれる• 明示的なインストール作業不要
How to install Incanter (2/2)
Incanter
• 公式サイトのダウンロードリンク• http://incanter.org/downloads/
罠。インストール駄目、絶対より正確には
• とにかく古い• Leiningen が必要な Java/Clojure ライブラリを管理
• もちろん、その中に Incanter が含まれる• 明示的なインストール作業不要
Local Maven Repository
!"#
$%&%
'()*+,-
$%&%
'()*+,-
./)*0(+
'()*+,-
./)*0(+
'()*+,-
Incanter Project
Create a new Clojure project
$ lein new tnoda.kobexr.demo
コマンドラインから lein new プロジェクト名 で作成
Add Incanter to dependencies
プロジェクトファイルに [incanter "1.5.6"] を追加
(defproject tnoda.kobexr.demo "0.1.0-SNAPSHOT":description "FIXME: write description":url "http://example.com/FIXME":license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}:dependencies [[org.clojure/clojure "1.6.0"]
[incanter "1.5.6"][nz.ac.waikato.cms.weka/weka-dev "3.7.11"]])
Checkpoint 2Incanter のインストール
Java
• パッケージマネージャ (dpkg, Homebrew)• オラクルのサイトからダウンロード
Clojure
• Leiningen をインストール• 実体はシェルスクリプト。コピーするだけ。
Incanter
• インストールしてはいけない。• Leiningen にライブラリの管理を任せる。
Checkpoint 2Incanter のインストールJava
• パッケージマネージャ (dpkg, Homebrew)• オラクルのサイトからダウンロード
Clojure
• Leiningen をインストール• 実体はシェルスクリプト。コピーするだけ。
Incanter
• インストールしてはいけない。• Leiningen にライブラリの管理を任せる。
Checkpoint 2Incanter のインストールJava
• パッケージマネージャ (dpkg, Homebrew)• オラクルのサイトからダウンロード
Clojure
• Leiningen をインストール• 実体はシェルスクリプト。コピーするだけ。
Incanter
• インストールしてはいけない。• Leiningen にライブラリの管理を任せる。
Checkpoint 2Incanter のインストールJava
• パッケージマネージャ (dpkg, Homebrew)• オラクルのサイトからダウンロード
Clojure
• Leiningen をインストール• 実体はシェルスクリプト。コピーするだけ。
Incanter
• インストールしてはいけない。• Leiningen にライブラリの管理を任せる。
Getting started with Incanter
データフレーム(Incanter 用語では dataset)をつくるところから始めるのは R と同じ。
デフォルトのデータセットから
(ds/get-dataset :iris)
ファイルから
(i/read-dataset "http://example.com/data.csv":header true)
Emacs
Graphing
R-like
(def chart(c/scatter-plot ($ :Petal.Width iris)
($ :Petal.Length iris):title "Edgar␣Anderson ’s␣Iris␣Data"))
(i/view chart)
Clojure-way
(i/with-data iris(i/view(c/scatter-plot :Petal.Width :Petal.Length
:title "Edgar␣Anderson ’s␣Iris␣Data")))
Graphing (Mac OS X)
まとめ
データセットをつくるR でデータフレームつくるのと同じ
グラフィクス・統計解析R と同じような関数が用意されている
Incanterでできないものは?
_人人人人人人人人_> 3D pie chart < ̄YYYYYYYY ̄
まとめデータセットをつくるR でデータフレームつくるのと同じ
グラフィクス・統計解析R と同じような関数が用意されている
Incanterでできないものは?
_人人人人人人人人_> 3D pie chart < ̄YYYYYYYY ̄
まとめデータセットをつくるR でデータフレームつくるのと同じ
グラフィクス・統計解析R と同じような関数が用意されている
Incanterでできないものは?
_人人人人人人人人_> 3D pie chart < ̄YYYYYYYY ̄
まとめデータセットをつくるR でデータフレームつくるのと同じ
グラフィクス・統計解析R と同じような関数が用意されている
Incanterでできないものは?
_人人人人人人人人_> 3D pie chart < ̄YYYYYYYY ̄
まとめデータセットをつくるR でデータフレームつくるのと同じ
グラフィクス・統計解析R と同じような関数が用意されている
Incanterでできないものは?
_人人人人人人人人_> 3D pie chart < ̄YYYYYYYY ̄
Incanterの不可能を可能にする
問いR にできて Incanter にできないものを Incanter で実現するにはどうすればよいか?
答えIncanter と R をつないで、Incanter から R を使えるようにすればよい。
Example (Solution)
• Rserve• http://www.rforge.net/Rserve/
Incanterの不可能を可能にする
問いR にできて Incanter にできないものを Incanter で実現するにはどうすればよいか?
答えIncanter と R をつないで、Incanter から R を使えるようにすればよい。
Example (Solution)
• Rserve• http://www.rforge.net/Rserve/
Incanterの不可能を可能にする
問いR にできて Incanter にできないものを Incanter で実現するにはどうすればよいか?
答えIncanter と R をつないで、Incanter から R を使えるようにすればよい。
Example (Solution)
• Rserve• http://www.rforge.net/Rserve/
Incanterの不可能を可能にする
問いR にできて Incanter にできないものを Incanter で実現するにはどうすればよいか?
答えIncanter と R をつないで、Incanter から R を使えるようにすればよい。
Example (Solution)
• Rserve• http://www.rforge.net/Rserve/
Rserve
!"#$%#
!
&'()*$#
&'+#,-./0%01
2,30,-#$
Rserve/Clojure
(r/plot3d [100] :labels ["No\n(100)"])
No
(100)
Checkpoint 3
Incanterの利用• だいたい R と同じ。• データフレームを作るところから始める。
• Incanter ではデータセットと呼ぶ。
グラフィクス・統計解析• データフレームに対して処理を行う。• R と同じような関数が用意されている。
Rにしか無い機能は• Rserve で R を Incanter から使う
Checkpoint 3
Incanterの利用• だいたい R と同じ。• データフレームを作るところから始める。
• Incanter ではデータセットと呼ぶ。
グラフィクス・統計解析• データフレームに対して処理を行う。• R と同じような関数が用意されている。
Rにしか無い機能は• Rserve で R を Incanter から使う
Checkpoint 3
Incanterの利用• だいたい R と同じ。• データフレームを作るところから始める。
• Incanter ではデータセットと呼ぶ。
グラフィクス・統計解析• データフレームに対して処理を行う。• R と同じような関数が用意されている。
Rにしか無い機能は• Rserve で R を Incanter から使う
Checkpoint 3
Incanterの利用• だいたい R と同じ。• データフレームを作るところから始める。
• Incanter ではデータセットと呼ぶ。
グラフィクス・統計解析• データフレームに対して処理を行う。• R と同じような関数が用意されている。
Rにしか無い機能は• Rserve で R を Incanter から使う
Conclusion
Incanterとは
• R みたいに使える、• Clojure のライブラリ
Clojureとは
• Java• REPL, コンパイラ, 並行ライブラリ, マクロ• マルチコアの時代のプログラミング言語
Incanterで 3D円グラフを描くには• Rserve を使って R に描かせる。
Conclusion
Incanterとは• R みたいに使える、
• Clojure のライブラリ
Clojureとは
• Java• REPL, コンパイラ, 並行ライブラリ, マクロ• マルチコアの時代のプログラミング言語
Incanterで 3D円グラフを描くには• Rserve を使って R に描かせる。
Conclusion
Incanterとは• R みたいに使える、• Clojure のライブラリ
Clojureとは
• Java• REPL, コンパイラ, 並行ライブラリ, マクロ• マルチコアの時代のプログラミング言語
Incanterで 3D円グラフを描くには• Rserve を使って R に描かせる。
Conclusion
Incanterとは• R みたいに使える、• Clojure のライブラリ
Clojureとは
• Java• REPL, コンパイラ, 並行ライブラリ, マクロ• マルチコアの時代のプログラミング言語
Incanterで 3D円グラフを描くには• Rserve を使って R に描かせる。
Conclusion
Incanterとは• R みたいに使える、• Clojure のライブラリ
Clojureとは
• Java
• REPL, コンパイラ, 並行ライブラリ, マクロ• マルチコアの時代のプログラミング言語
Incanterで 3D円グラフを描くには• Rserve を使って R に描かせる。
Conclusion
Incanterとは• R みたいに使える、• Clojure のライブラリ
Clojureとは
• Java• REPL, コンパイラ, 並行ライブラリ, マクロ
• マルチコアの時代のプログラミング言語
Incanterで 3D円グラフを描くには• Rserve を使って R に描かせる。
Conclusion
Incanterとは• R みたいに使える、• Clojure のライブラリ
Clojureとは
• Java• REPL, コンパイラ, 並行ライブラリ, マクロ• マルチコアの時代のプログラミング言語
Incanterで 3D円グラフを描くには• Rserve を使って R に描かせる。
Conclusion
Incanterとは• R みたいに使える、• Clojure のライブラリ
Clojureとは
• Java• REPL, コンパイラ, 並行ライブラリ, マクロ• マルチコアの時代のプログラミング言語
Incanterで 3D円グラフを描くには• Rserve を使って R に描かせる。
Conclusion
Incanterとは• R みたいに使える、• Clojure のライブラリ
Clojureとは
• Java• REPL, コンパイラ, 並行ライブラリ, マクロ• マルチコアの時代のプログラミング言語
Incanterで 3D円グラフを描くには• Rserve を使って R に描かせる。