GUI for read.table

【追記】そもそも起動しないバグを修正。ローカルで作ってた関数を移し忘れました…。

総制作時間6時間ぐらい?Gtk力の高まりを感じます。ぜんぜんテストしてないので、バグがあれば教えてください。バグというか、例外処理を入れてないのですぐエラー吐くと思いますが…それはご愛敬ということで。

f:id:phosphor_m:20130515010448p:plain

上がクラス定義、下が実行用スクリプト。必要パッケージはRGtk2のみ。そのうちRzにも取り込みます。

しかし命名規則がひどすぎて恥ずかしい…。

『心理学研究』に準拠したggplot2のtheme

息抜きにRzThemeEditorで作ってみたら,息抜きにならないぐらい一瞬でした。
ggplot2のテーマを手軽に作成・編集する(R Advent Calendar 2012) - はやしのブログ Rev.3
せっかくなので公開しておきます。
執筆・投稿の手引き」を見て作りましたが,正しさに責任は持ちません。

こんな感じです。

p <- ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width, 
    colour = Species))
p <- p + geom_point()
p <- p + scale_colour_grey()
p <- p + theme_JPR()
print(p)

f:id:phosphor_m:20121218151727p:plain

ggplot2のテーマを手軽に作成・編集する(R Advent Calendar 2012)

R Advent Calendar 2012の14日目です。

皆大好きggplot2ですが,多機能であるがゆえに使いこなすのはなかなか大変です。
特に見た目の調整については,そのままでもきれいなのであまり積極的にいじろうとは思わないのですが,ちょっと調整したいな,と思うと,どういじっていいのかわからず,そのたびに苦労してしまいます。
Ecxelはその点,図の編集が簡単にできていいですね。

しかしこのままExcel > Rという不等式を容認してしまってよいのでしょうか?いいはずがありません。

というわけでggplot2のテーマをGUIで作成・編集できる機能をRzにつけました。

f:id:phosphor_m:20121214204914p:plain

ggplot2のthemeの全要素に対応しています。それぞれの要素が何を表しているのかはggplot2のドキュメントを見てください。
theme. ggplot2 0.9.3
フォントを変更する場合は,フォントをRで使えるようにするスクリプトも同時に生成します。

インストール

まだテストしていないのでcranにはアップロードしていません。以下のスクリプトでインストールしてください。
cranからインストールできます。

** 依存パッケージのインストール
未インストールのパッケージをインストールしてください。

注意:最新のggplot2をインストールする場合は,plyrも最新にする必要があります。update.packages()を実行してください。

install.packages(c("memisc", "psych", "ggplot2", "RGtk2", "formatR", "Rz"))

使い方

RGtk2をインストールした場合は,library(Rz)を実行したときにGtk2+をインストールするためのダイアログが表示されるので,インストールしてください。Linuxの場合はgtk2-develが必要です。

library(Rz)
RzThemeEditor()

Rzの中からも起動できますが,RzThemeEditor()で単独で起動できます。

使い方は簡単です。一から作ってもいいですが,theme_greyやtheme_bwを編集していくのが手軽です。ドロップダウンから選択し,Loadボタンで読み込みます。
編集したテーマはプレビューで確認できます。4つのプレビューを用意してあります。
Outputを押すと,コンソールにスクリプトが出力されます。ApplyかOKを押すと,theme_rz()に上書きされます。
テーマをSaveすることもできます。SaveしたテーマはOpenで読み込めます。

ちなみにRz本体もかなりいじっているので,ぜひ遊んでみてください。そしてバグを見つけたら教えてください!

第三回Japan.R入門セッション『はじめての「R」』補足 #rstatsj #JapanR

『はじめての「R」』やってきました!

第三回Japan.Rで入門セッションを担当させていただきました。

Japan.R当日の様子は@bob3bob3さんがまとめてくれています。

で,入門セッションはというと,


こんな幕開けでしたが,最終的には30〜40人ぐらいのかたに来ていただいて無難に終えることができ,胸をなで下ろして午後の部を楽しんでいたのですが。

おや,slideshareにアップロードしたスライドに異変が…。



見たことのない数字が!

怖い!

そして現時点で約13000views,ついにはこんなメールまで届いてしまいました。
f:id:phosphor_m:20121203180213p:plain

こんなにたくさんの人に見ていただけるなんて予想だにしておらず,作者冥利に尽きるのですが,全く実感が湧かないというのが正直なところです。Rの入門資料はいまやウェブにごろごろ転がっている中で,私のものが特別優れているということはないので,ここ最近でどれほどデータ解析需要が盛り上がったのかということがうかがえますね。

「つまずかないR入門」

以下駄文です。本題のスライド補足はもう少し下にありますので,お急ぎの方は飛ばしてください。

さて,内容についてなのですが,中にも書いているとおり,Rを使う上で重要な部分をかなり省略しています。なぜならば,「つまずかないR入門」を方針としたからです。これは,一度成功体験をしてもらい,「Rって思ってたより難しくないな」と感じてもらうことが大事だという考えに基づいています。

いままでにRの入門講習を何度もやっているのですが,終わったあとの感想で必ず出てくるのは,「やっぱりRって難しいけどがんばります!」というものです。これは,難しい部分をどんなに噛み砕いて説明しても,必ず出てくる感想でした。

そこで考えたのが,「そもそも入門講習のやり方が根本的に間違っているのではないか」ということでした。これまでは,Rの使う上で必要になる必要最小限の内容をできるだけ分かりやすく伝えよう,と考えてやってきました。しかし,にもかかわらず「難しい」という感想が出るということは,必要最小限であっても,そもそも1時間や2時間でそれら全てを教えることは不可能なのではないか,と。

なので,この資料を読んで,いざRを使ってみよう,と思っても,十中八九つまずくと思います。そもそも必要最小限にも達していない内容なのです。しかし,入門講習で最初の一歩からつまずくのと,一度成功体験をしてからつまずくのとでは,モチベーションの維持に大きく違いがあると考えています。入門講習でいきなりつまずいてしまえば,「Rは難しい」というイメージが定着してしまいますし,帰ってから自分でやりなおそうという気はなかなか起きないでしょう。

さて,講習会後の感想を聞いたり読んだりしたかぎりでは,この試みはなかなか成功しているのではないかと思います。しかし,不十分な内容の講習会を行って投げっぱなしでは,ちょっと無責任かな,という気もしてきました。また,講習会中に口頭で入れた補足は,ウェブでスライドだけ読んでいただいた方には伝わらないというのも気になります。ということで,スライドに足りない内容をここで少し補足しようと思います。

スライドの補足

データの読み込み

概要はこちらの資料で。

関数を使ったデータの読み込み

今回はRStudioのGUIを使ってCSVを読み込みましたが,当然Rにはデータを読み込むための関数が用意されています。CSVを読み込むread.csv,タブ区切りテキストを読み込むreade.delim,より柔軟にテキストファイルを読み込めるreade.tableが代表的です。
R-Source
パッケージを使えばExcelのファイルを直接読み込むこともできますが,メリットはほとんどありません。csvに変換して読み込むか,下のスライドで紹介されているクリップボードからの読み込みを使いましょう(105ページ以降です)*1。特に後者はとても便利な機能です。

作業ディレクトリ

データを読み込む前に,作業ディレクトリ*2を設定しておきましょう。作業ディレクトリを設定すると,そのディレクトリにあるファイルを読み書きすることが出来るようになります。作業ディレクトリの設定には,setwd関数を使うか,GUIで設定します。
R-Source
RStudioでは,メニューバーからSession>Set Working Directory>Choose Directoryで設定できます。

パス

パスについては,上のスライドを見てください。setwdで作業ディレクトリを設定する場合や,作業ディレクトリの中にないファイルを読み書きするためには,パスを使って場所を指定する必要があります。スライドにない注意点として,Windowsでは円マーク(¥)がバックスラッシュの代わりになります(というか同一のものになっています)。Macではoption+¥でバックスラッシュを入力できます。どちらにしろややこしいので,パスの区切りにはスラッシュを使うことをおすすめします。

文字コード

文字コードについても,上のスライドを見てください。基本的には,文字コードの変換はテキストエディタで行うことをおすすめします。テキストエディタでは文字コードの変換でエラーになることはほとんどありませんが(特定の文字が化けることはありますがその程度です),Rでは間違えるとエラーになってしまい,混乱してしまいがちです。
やむをえずread.csv等で文字コードを指定して読み込む場合は,fileEncodingオプションを使います(foreignパッケージのread.spssのみreencodeというオプションですが,使い方は同じです)。注意点として,Shift_JISのファイルを読み込むときは,Shift_JISではなくCP932を指定します*3。実例を書くと,read.csv("サンプル.csv", fileEncoding="CP932")となります。

尺度の水準

統計学における変数には,尺度の水準というものがあります。簡単な例を挙げると,あるクラスの身体計測の結果データがあったとします。そこには,性別,身長,体重といった変数があります。ここで,身長や体重のクラス平均を求めることはできます。しかし,性別のクラス平均というものを求めることはできるでしょうか?当然できませんね。性別のような変数をカテゴリ変数(または質的変数)と呼びます。このような考え方を厳密に進めた結果として,統計学では変数を下のリンク先にあるような4つのタイプに分類し,それを尺度の水準と定義しました。
データの水準
この尺度の水準は,Rを使う上でも密接に関わってきます。R上では,名義尺度をfactorクラス,順序尺度をorderedクラス,間隔尺度と比例尺度をnumericクラスで表現しており,厳密な使い分けが必要になっています。クラスについての説明は,続きを読んでください。

クラス

今回の講習会ではRにおけるクラスの概念を完全に省略しました。しかしこれを避けていては絶対にRを使えるようにはなりません。簡単な説明は下の資料の6ページに,もう少し詳しい説明は7ページ以降にあります。エラー頻出地帯でもあるので,気合いを入れて学習してください。

あとがき

ここまでで,やっと必要最小限にたどり着いたといえるでしょう。ここからは,自分がどのようにRを使うかを考え,自分にとって必要なものを学んでいく,という段階になります。自分なりの使い方を身につけ,楽しいRライフを送ってください!

*1:これは@sakaueさんが去年のJapan.Rで行った入門セッションの資料で,非常に分かりやすく良質ですので,ファイル読み込みだけでなくぜひ全部読んでください。

*2:「ディレクトリ」は,「フォルダ」とだいたい同じ意味です。

*3:正確にいうと,Shift_JISということになっているファイルや文字コード設定は,実際には多くの場合CP932という似て非なる文字コードが使われています。テキストエディタなどはそのあたりをあいまいに扱っていますが,R等のプログラミング言語では扱いを誤るとエラーの原因になります。

Shinyで5分でできる株価チャートウェブアプリ

RにもWeb化の波が来てますね。

RStudio, IncがリリースしたShinyはRのみでサーバーも他言語も必要とせずウェブアプリを作成できる画期的なパッケージです。

概要はバタデ先生にお任せするとして,簡単なアプリを作ってみました。

 

ウェブアプリのスクリプトは,2つのファイルに分けて作成します。

1つめは,ui.Rという名前で作成します。

2つめは,server.Rという名前で作成します。

これらを1つのフォルダに保存します。ここではstockというフォルダを作って,そこに保存することにします。保存したら,Rを立ち上げ,stockのあるフォルダに作業環境を変更します。

 

まずはパッケージのインストール。

install.packages(c("RFinanceYJ", "quantmod"))
options(repos=c(RStudio="http://rstudio.org/_packages",
                   getOption("repos")))
install.packages("shiny")

あとは,起動するだけ!

library(shiny)
runApp("./stock")

ブラウザが立ち上がり,こんなページが表示されます。

f:id:phosphor_m:20121110132346p:plain

銘柄コード,期間などを変更すると,リアルタイムでチャートが更新されます。簡単すぎてびっくりですね!ちなみに株式に関しては全く無知なので僕には聞かないでください。実データのほうがおもしろいかな,というだけの動機で株価チャートにしました。

Rz開発状況(プロット機能書き直し,ケースの選択等)

ぼちぼち開発してます。

 

現実逃避したくなったときに一気にやる感じなのであまり効率が良くないのですが。

ggplot2 0.9.2に対応させようとしていたはずが,いつの間にかプロット周辺をほぼ完全に書き直していたり。

f:id:phosphor_m:20121010013604p:plain

プロット画面を切り離せるようになりました。インタラクティブにプロットを作り込む際に重宝します。UIもだいぶ整理しました。まだ汚いですが。

f:id:phosphor_m:20121010013829p:plain

さらに,待望のスクリプト出力機能。これで,ggplot2学習用としても使えるようになりました。このためにかなりプログラムを書き直したので,機能追加も容易になりました。初心者向けにわかりやすくしつつ,ggplot2の表現力を最大限引き出せるようにしたいですね。今後は,themeまわりを拡充しようかと思っています。

f:id:phosphor_m:20121010020025p:plain

あとは,ケースの選択機能をつけました。条件をsubsetに渡すだけなので,簡単にできました。このあたりのデータハンドリング機能は今後拡充予定です。まあ,気長に待ってください。

未実装な部分がちょこちょこあるので,CRANにはまだ上げられません。年内には,という感じです。

開発版は,githubおよびWindows用バイナリおよびソースを公開しているので,試してみてバグや要望を知らせていただけるととてもうれしいです。

Osaka.R休止します

趣味で始めた勉強会も,Rへの関心の高まりにともなってか,30人を超える人数が集まるようになり,順調といえば順調だったのですが。いろいろと思うところがあり,当面休止させていただきたいと思います。

深い理由があるわけではないのですが,不安定な生活や不定期のスケジュールの合間を縫って開催するのが,やや重荷になってきた,といったところです。現時点で首が回らなくなっているわけではないのですが,傷が深くなる前にどこを切るかと考えると,生活の中の優先順位で最下位にくるのはOsaka.Rだった,というだけの理由です。

本来知らない人とは会うのも話すのも嫌いかつ何事に対しても意欲のない意識の低い人間にもかかわらず,よく第7回まで続けられたな,というのが個人的な感想です。知らない人と話すのが大好きな意識の高い人間だったら,何も負担に感じずに続けていけたのだろうと思いますが。本来イベント事とは無縁の,教室の隅でなるべく存在感を薄くして本読んでるような人間です。

できれば後継者を見つけて引き継ぎたかったのですが…。というか今からでも誰か引き継いでいただけるとありがたいです。サイトの管理権限等お譲りいたします。