岡田 昌史 使った分析入門 - media.toriaez.jp ·...
Transcript of 岡田 昌史 使った分析入門 - media.toriaez.jp ·...
タイトルのどこが間違っているか❖ 無料ではなく、「フリーソフトウェア」
❖ 有料のR、代表的にはMicrosoft R Openなどもあります
❖ 統計ソフトではなく、「統計解析環境」
❖ 統計解析だけではなく、データの前処理、視覚化、レポート作成まで含む統合環境です
❖ Rを使った分析入門ではなく、Rの紹介
❖ 「分析」まで講義でいくには少なくとも4コマぐらいは必要ですが、オンライン講義や公開されている資料や本などで十分自学自習可能です。
❖ 今日は、どんなことができるかを知ってもらって、使うきっかけになってもらえばと。
本日の内容❖ 自己紹介
❖ Rとは
❖ データサイエンスのためのプログラミング言語R
❖ Rの限界
❖ Web開発環境としてのR
❖ 文芸的プログラミングとReproducible Research
❖ 一旦まとめ
❖ 実際のRコードの紹介
自己紹介❖ 現職: 東京大学医学部附属病院, 大学病院医療情報ネット
ワーク研究センター(UMIN)
❖ 疫学と医療情報学を専門にしています.医学部出身なので,数学や統計学は専門的に勉強したことはありません.
❖ 疫学は統計学を用いて病気の原因を探っていく学問なので,統計が必要になり,Rバージョン0.99を動かしたのがRに関わるきっかけとなりました.
統計解析 と グラフィックスのための
フリーソフトウェア環境
http://www.r-project.org/
R is a free software environment for statistical computing and graphics.
R is a free software environment for statistical computing and graphics.
❖ R is environment
❖ 数値, 行列, 文字列からモデル, 関数まで一体として取り扱うことができるデータ構造
❖ さまざまなデータを取り扱う関数
❖ S言語に似たプログラミング言語
❖ 様々な出力形式を用いることができるプロット機能
生データを読み込み, クリーニングし, 対話的にモデルを開発して仮説を検証し,
レポートを作成する過程をすべてRの中だけで完結できる
R is a free software environment for statistical computing and graphics.
❖ R is free software
❖ GNU General Public Licenseによる「自由な」ソフトウェア
❖ 再配布の自由
❖ ソフトウェアの動作を調べ、それを改変する自由
❖ 改良したものを配布する自由
誰からでもコピーしてもらうことができ、内部動作を完全に検証でき、気に入らない部分があれば改良版を公開することもできる
Rを構成するもの❖ いわゆる“R”本体 — 初めてインストールして起動した時から使える機能
❖ 基本的な機能のみだが, 体系的に作られ, 重点的にテストされる
❖ 追加パッケージ
❖ 主に CRAN(Comprehensive R Archive Network) Webサイトからダウンロードして利用する, 分野・領域に特化した追加機能
❖ 誰でも投稿できる
R本体の機能(ベースパッケージ)❖ 確率分布, 古典的検定, 一般化線形モデル,時系列データ構造, クラスター分析,....
❖ 文字列検索, システムコマンドの実行, WebブラウザへのURL送信,....
❖ 数式の表示, PicTeX形式でのプロット出力, PostScript出力......
❖ 104種類のサンプルデータセット
❖ 主要開発メンバーが議論しながら作成しており、安定、信頼できる
パッケージ
❖ CRAN(Comprehensive R Archive Network)
❖ R本体とパッケージのダウンロードサイト
❖ 現在13345のパッケージが登録
❖ 各専門領域のユーザが作成・公開しているものが多く, 便利だが汎用的ではないものもある
パッケージでできること> library(NipponMap) > p <- JapanPrefMap(col='ivory') > dat <- foreign::read.dbf(system.file("shapes/jpn.dbf", package="NipponMap")) > symbols(p, circles=sqrt(df / (2 * pi )), fg="olivedrab4", bg="olivedrab1", add=TRUE, inches=F) >
CRAN Task View❖ 専門分野別のパッケージの選択ガイド。各々の専門家が執筆
❖ Bayesian : Bayesian Inference❖ ChemPhys : Chemometrics and Computational Physics❖ ClinicalTrials : Clinical Trial Design, Monitoring, and
Analysis❖ Cluster : Cluster Analysis & Finite Mixture Models❖ DifferentialEquations : Differential Equations❖ Distributions : Probability Distributions❖ Econometrics : Econometrics❖ Environmetrics : Analysis of Ecological and Environmental
Data❖ ExperimentalDesign : Design of Experiments (DoE) &
Analysis of Experimental Data❖ ExtremeValue : Extreme Value Analysis❖ Finance : Empirical Finance❖ FunctionalData : Functional Data Analysis❖ Genetics : Statistical Genetics❖ Graphics : Graphic Displays & Dynamic Graphics &
Graphic Devices & Visualization❖ HighPerformanceComputing : High-Performance and
Parallel Computing with R❖ MachineLearning : Machine Learning & Statistical Learning❖ MedicalImaging : Medical Image Analysis
❖ MetaAnalysis : Meta-Analysis❖ Multivariate : Multivariate Statistics❖ NaturalLanguageProcessing : Natural Language
Processing❖ NumericalMathematics : Numerical Mathematics❖ OfficialStatistics : Official Statistics & Survey Methodology❖ Optimization : Optimization and Mathematical
Programming❖ Pharmacokinetics : Analysis of Pharmacokinetic Data❖ Phylogenetics : Phylogenetics, Especially Comparative
Methods❖ Psychometrics : Psychometric Models and Methods❖ ReproducibleResearch : Reproducible Research❖ Robust : Robust Statistical Methods❖ SocialSciences : Statistics for the Social Sciences❖ Spatial : Analysis of Spatial Data❖ SpatioTemporal : Handling and Analyzing Spatio-Temporal
Data❖ Survival : Survival Analysis❖ TimeSeries : Time Series Analysis❖ WebTechnologies : Web Technologies and Services❖ gR : gRaphical Models in R
開発史❖ 1991年ごろ Ross Ihaka と Robert Gentlemanにより開発が始まる
❖ 1995年 GPLライセンス
❖ 1997年 Core Group発足
❖ 2000年 バージョン1.0.0
❖ 2002年 バージョン1.5.0
❖ 2004年 バージョン2.0.0
❖ 2005年 バージョン2.1.0 国際化対応
❖ 2013年 バージョン3.0.0
❖ 現在 バージョン3.5.1
GNU General Public License
❖ Linuxなどで有名な、 オープンソースライセンスの1つ.
❖ ~をしてはいけない, ではなく, ~をさまたげてはならない, というライセンス
❖ Rのユーザには, 以下のような自由が認められる
❖ Rのコピーを再配布する自由
❖ Rの動作(ソースコード)を調べる自由, それを改変する自由
❖ 自分が改良したRを広く配布する自由
自由なライセンスの効果
❖ すべての内部アルゴリズムを追跡可能
❖ バグの発見と修正の過程が透明
❖ 機能の追加が容易
❖ 良質で有用なバージョンは本体機能の一部として取り込まれうる(国際化機能など)
開発体制❖ GPLなので, 誰でも修正は可能
❖ パッケージは各作者が主に開発・修正
❖ 公式的なRリリースをコントロールしているチーム:
R Core Group
❖ Core Groupは公開メーリングリストで議論し, 開発途中のソースコードも公開
❖ バグおよび対処の一覧も公開・誰でも登録可能
R Core Group • Douglas Bates • John Chambers • Peter Dalgaard • Robert Gentleman • Kurt Hornik • Ross Ihaka • Tomas Kalibera • Michael Lawrence • Friedrich Leisch • Uwe Ligges • Thomas Lumley • Martin Maechler • Martin Morgan • Paul Murrell
• Martyn Plummer • Brian Ripley • Deepayan Sarkar • Duncan Temple Lang • Luke Tierney • Simon Urbanek
The R Foundation
❖ Rの著作権を持ち, Webサイトやドメイン(r-project.org)を持つNPO
The R Foundation for Statistical Computing
c/o Institut für Statistik und Wahrscheinlichkeitstheorie
Technische Universität Wien
Wiedner Hauptstraße 8-10/1071
1040 Vienna, Austria
Tel: (+43 1) 58801 10715
Fax: (+43 1) 58801 10798
Email: [email protected]
The R Consortium❖ 2015年に設立された,主にRを組み込んだり改造したソフトウェア製品を出しているベンダーによるコンソーシアム
❖ Rに関する開発プロジェクトに競争的資金提供も行う
❖ GPLライセンスは,R本体及びその派生版について,ソースコードを含めた再配布を要求するが,無改変のRを内部に組み込んだ製品を販売することはできる.
❖ Revolution Analytics社(現Microsoft)など,改変版のRをソースコードを公開しつつ販売している場合もある.
❖ コンソーシアムのメンバーも積極的に UseR! などの国際ユーザカンファレンスに参加するなど,フリーソフトウェアコミュニティと良い関係を築いている
Rはどのくらい普及しているか
❖ 2016年の時点で, 学術誌で利用されたソフトウェアとしてはSPSSに次いで2位
❖ データサイエンスの求人のスキルではSQL, Python,
Java, Hadoopについで5位
Robert A. Muenchen, The Popularity of Data Science Software, 6/19/2017.http://r4stats.com/articles/popularity/ より
パイプ演算子の登場
❖ パッケージにより,演算子も定義できる
❖ %>% という,Base Rには存在しない演算子を定義する
magrittr パッケージと,それを活用することでソースコードの可読性を大幅にあげる dplyrパッケージの登場(2014年)によって,解析前の「データの加工」処理のプログラムの書き方が大きく変わった
パイプ+dplyrdata(iris)
iris2 <- subset(iris, Sepal.Length > 5.0 & Species == "setosa")iris2$Petal.Area <- iris2$Petal.Length * iris2$Petal.Widthstr(iris2)
library(dplyr)
iris %>% filter(Sepal.Length > 5.0 & Species == "setosa") %>% mutate(Petal.Area = Petal.Length * Petal.Width) %>% str
ggplot2の登場❖ Rはグラフィックス描画システムが高度に抽象化されており,もともとコードを変更せずに,出力先を画面,画像,PDFに自在に変更できたり,グラフの座標系をそのまま位置指定に用いて凡例や注釈を加えたりすることができる
❖ デフォルトのbase graphicsに加え,従来もgrid, latticeなどのパッケージを使ったグラフィックスが使われてきたが,ggplot2が登場(2007年)して急速に普及した.
❖ データ+点+回帰直線+タイトル,というように,演算子”+”を使って重ね書きしていく記法でわかりやすく,デフォルトでも見た目が美しくなるように調整されている
ggplot2plot(Sepal.Length ~ Petal.Length, data=iris, col=as.numeric(iris$Species), pch=as.numeric(iris$Species), main="Sepal Length - Petal Length")
library(ggplot2)ggplot(data=iris, aes(x = Petal.Length, y = Sepal.Width)) + geom_point(aes(color=Species, shape=Species)) + ggtitle("Sepal Length - Petal Length")
Rstudioの登場❖ Rは基本的にはコマンドライン操作
❖ パッケージとして,R commander, RzなどのGUIを実装したものもあるが,あくまでも操作をGUIから実行するためのもので,「Rプログラミング」のためのものではなかった.
❖ 2011年に,「R言語のプログラムを書くための統合開発環境」としてRstudioが登場.
❖ このあたりから,Rの中心的な利用方法が「データはあらかじめどこかで作っておいて,解析を実行する」から,「データの加工,整理,抽出から解析,評価,レポート作成まで」に広がってくる.
tidyverse❖ dplyr, ggplot2の作者,Hadley Wickham(現Rstudio)が提唱する,いわば「プログラム処理しやすいデータの表現方法」と,そのためのパッケージ群
❖ これを積極的に取り入れてワークフローを構築すると,base Rとはかなり違う世界になるが,作業効率に優れ,大量のデータを取り扱う業務利用に向いている.
Rの限界❖ そもそも,Rはインタプリタ言語
❖ マルチスレッドもない
❖ 演算速度はBLAS/LAPACK依存
❖ 実行時には,全てのデータはオンメモリに保持される.
❖ baseでは型はdoubleまで
❖ まぁ,速くはないし,巨大なデータを扱えるわけでもい
メモリの限界突破❖ 64ビットOSが普及し,64ビット環境でコンパイルされたRが配布されるようになったので,あくまでもオンメモリ動作であるという筋の悪さはそのままだけれども,限界に達することはあまりなくなった
❖ オンメモリがとても無理なデータセットを扱う場合,biglmなど,外部データベースを用いるパッケージを使う
❖ 最近ではApache SparkにもRのインターフェースが備えられており,処理はSpark側だがデータの操作や基本的なモデリングはRのコードを大きく改変せずに実行できる
インタプリタの限界突破
❖ R 2.13ごろから,compiler パッケージが付属するようになり,バイトコンパイルでの性能向上を図れるようになった
❖ さらに速さが必要な場合には,Rcppパッケージを使ってC++コードをRソース中に埋め込んでおき,コンパイルされた関数を実行時に呼び出すことも可能
並列処理の限界突破❖ MPIライブラリを使うRmpiパッケージがあり,プロセスレベルで並列化させることはかなり容易にできた.
❖ R 2.14.0からparallelパッケージがデフォルトで付属されるようになり,プロセスレベルでの並列化はさらに容易になった
❖ Microsoftの改変版であるMicrosoft R OpenにはマルチスレッドのBLAS/LAPACKが含まれている
Shinyの登場❖ 2012年にリリース.RでWebアプリを作成する!パッケージ
by Rstudio
❖ server.Rとui.Rの2つのRコードを書くと,パラメータ選択やデータセット選択のインターフェース画面と,そこからの入力に反応してグラフや表を出力する画面を持ったシングルページWebアプリケーションがRの中で動く
❖ shiny-server ソフトウェアを利用すると,デーモンとしてサービスさせることも可能
Shinyアプリ
library(shiny)function(input, output) {output$distPlot <- renderPlot({ x <- faithful[, 2] # Old Faithful Geyser data bins <- seq(min(x), max(x), length.out = input$bins + 1) hist(x, breaks = bins, col = 'darkgray', border = 'white') }) }
library(shiny)fluidPage( titlePanel("Hello Shiny!"), sidebarLayout( sidebarPanel( sliderInput("bins",
"Number of bins:", min = 1, max = 50, value = 30) ), mainPanel( plotOutput("distPlot") ) ))
server.R ui.R
Rと文芸的プログラミング❖ Rユーザの国際カンファレンスであるUseR! 2016で,
Donald Knuth による講演 Literate Programming が行われた
❖ Rの原型には,2002年にWEBの実装であるSweaveが組み込まれており,Sweave()とStangle()関数によって1つの文書から実行可能なコードとTeX文書を両方生成できる.
knitr の登場❖ 2012年に,Sweaveの使いづらい点の多くを改良し,入力フォーマット, 出力フォーマット共に多くのフォーマットを利用できるようにした,knitrパッケージが登場
❖ WEB入力だけではなく,Markdown入力,HTML入力の中にRスクリプトを埋め込むことができた
❖ 出力もHTML, PDFなどに対応し,図表やRからの出力キャッシュの取り扱いも秀逸
R Markdown❖ knitrの中でも,特に簡便に書くことができる
Markdown記法を入力に使い,PDF/HTML/Word文書やHTMLプレゼンテーションを出力する機能を充実させた rmarkdown パッケージがRstudioと統合されている.
❖ TeXやWeaveからは少し離れてしまっているが,文芸的プログラミングの考え方が伝わっている
R Markdown2015年6月現在、データベース中に存在する症例数は`r nrow(ns.症例)`例であった。選択基準・除外基準に合致し、登録可能であった症例は `r nrow(ns.Subjects)` 例であった。このうち、同意が得られている症例は`r sum(!is.na(ns.Subjects$同意取得日))`例であった。このうち、割り付けが実施された症例は `r sum(!is.na(ns.Subjects$割付群))` 例であった。そのうち、単独群に割り付けられた症例数は `r nrow(subset(ns.Subjects, 割付群 == "単独群"))` 例であり、併用群に割り付けられた症例数は `r nrow(subset(ns.Subjects, 割付群 == "併用群"))`例であった。
文芸的プログラミング, Reproducible Research
Reproducible Research❖ knitrを使うと,解析の前処理でできたファイルをキャッシュに残しておけるので,一時ファイルを作成して保存する,という作業が必要なくなる
❖ データベースへの接続→データ抽出→外れ値の排除→変数導出等の加工→モデル構築→結果表,グラフの提示→最終データ保存 のような流れを1つ
のR markdownファイルで記述し,バージョン管理できる
❖ これにより,R markdownファイルと生データソースがあれば,誰でも解
析結果を再現することができる: Reproducible Research
❖ さらに Microsoft Rではパッケージ自体の特定バージョンをキャッシュして同時保存するなど,より厳密な再現性の確保の試みがなされている
Rを含むソフトウェア❖ R自体はフリーソフトウェアだが、ソースコードを公開するというライセンス条件を満たせば、Rを改造したバージョンを自社製品に含めることができる: Microsoft R Open
❖ Rを別にインストールしてもらうことを前提にして、Rに機能を付加するソフトウェアを開発することができる: Rstudio, R
AnalyticFlow, exploratory,
❖ R言語と互換性がある言語エンジンを自社開発して含めることは自由にできる:TIBCO Spotfire / TERR
R AnalyticFlow
• ef-prime社による、Rを用いてデータ処理ワークフローを開発するソフトウェア。無償で配布されている。
• https://r.analyticflow.com/ja/
R AnalyticFlowを使った、 EDC出力データからSDTMへの変換
• Rの関数・コードを、設定パラメータと合わせてブロックにまとめ、それを接続して処理フローを作る
• ブロックを作成する人はRの知識が必要だが、フローを組み立てる人はRを知らなくてもよい
まとめ - 自分にとってRとは❖ 統計解析とグラフィックスのためのフリーソフトウェア環境
❖ unix系OSを使っている人が,シェルスクリプトの延長のような感覚でプログラミングするときに一番しっくりくる言語
❖ 学生教育や医学研究には十分な性能だが,大規模データを高速に処理するようなときには最近はPython+numPyを使う人が多いかもしれない
❖ しかし,それなりにルーズにも書ける文法と柔軟な演算子オーバーライド,ポリモルフィズムなどを備えているので,コードは書きやすい…と思う.
❖ なんといっても1万を超えるパッケージによる万能性と安心感から,とりあえずなんでもRで書こう,という気にさせる