yuu_nkjm blog
2013-02-01(Fri) [長年日記] 編集
[R言語] 統計処理言語Rによるグラフの重ね描き
別サイトに掲載していた記事を再掲載.2008-09-29に書いた様だ.
はじめに
シミュレーションの結果のグラフをひたすら描画させることを目的としてR言語を使ってみました.後輩に作業内容を伝えるために書いている文書を公開.プログラム書いてから,日が経ってしまったので,なかなか思い出せない….
やりたいこと
- ./result/id/ディレクトリの下にある,CSVファイルにsimWriterという関数を適用する.
- 色分けしたグラフを重ね書きする.
一括処理をする
一括処理のコード全体
resultDir = "./result/" ids <- list.files(resultDir); <strong>#(1)</strong> for (id in ids) { <strong>#(2)</strong> directoryName <- paste(resultDir, id, "/csv", sep=""); <strong>#(3)</strong> files <- list.files(directoryName, pattern=".csv"); <strong>#(4)</strong> for(file in files){ fileBase <- sub('(.*).[^.]*', "1", file); <strong>#(5)</strong> try(simWriter(resultDir, id, fileBase)); <strong>#(6)</strong> } }
(1) result以下のディレクトリ階層は以下のようになっている.idsにA01,A02,A03が入る.
./result/ │ ├─ A01 ─csv─┬──000.csv ├─ A02 ├──001.csv ├─ A03 ├──002.csv
(2) シェルスクリプトチックなループ.
(3) paste関数は与えられた文字列を結合する関数.sepの値が結合部に挿入される.空にしたい時は""と書く.
(4) list.file関数により,対象ディレクトリ以下のpatternにマッチするファイル名を取り出す.
(5) 正規表現を使った文字列操作.sub関数により拡張子を取り除いた文字列を生成.
(6) try関数を用いることで,エラーがあっても停止せずに継続できる.
グラフの重ね描き
simWriter <- (resultDir, id, fileBase) dataFileName <- paste("resultDir", "hoge", sep="") orgDataFileName <- paste("resultDir", "fuga", sep="") resultTable<- read.table (dataFileName, header = T, sep="t", skip=2); <strong>#(1)</strong> subjectTable<- read.table (orgDataFileName, header=T, sep="t"); drawSimResult(resultTable); drawOrgData(subjectTable); dev.off(); }
(1) データの読み込み.セパレータはタブ.dataFileNameの先頭2行には人間が識別する用のデータが入っているのでスキップ.
drawSimResult <- function(resultTable){ plot(resultTable$kilo, resultTable$speed, type ="p", pch=15, col="blue", ylim=c(5,135), xlim=c(0.7,10.3), xlab = "", ylab = ""); #(1) }
(1) 散布図を書く.x軸がresultTableのkilo列,y軸がresultTableのspeed列.線は引かず点だけ.点の形は■(15番),色は青(16進数のカラーコードでもいける),x軸の描画範囲は0.7~10.3,Y軸の描画範囲は,5~135.x軸ラベル,y軸ラベルは無し.
drawOrgData <- function(subjectTable){ par(new = T); <strong>#(1)</strong> plot(subjectTable$KILO, subjectTable$SPEED, type ="p", pch=15, col="#FFE4B5", ylim=c(5,135), xlim=c(0.7,10.3), xlab = "", ylab = ""); }
(1) グラフの上書きをするコマンド(par(new = T)).
データファイルの中身
dataFileNameの中身はこんな感じ.
人間が読み取る データが二行 kilotspeed 1t100 2t110
orgDatFileNameの中身はこんな感じ.
KILOtSPEED 1t100 2t110
もう少し色々やった出来上がり図
参考ページ
2013-01-24(Thu) [長年日記] 編集
[レビュー][book] 独習Javaサーバサイド編 第2版 - しっかりとしたJSP&サーブレットの入門書
「本書は、JavaによるWebアプリケーション開発の入門書です。」と紹介されている.確かに,本書は入門書だとは思うが,「三日で分かる…」といった軽い入門書ではなく,JSP&サーブレットに関連する周辺技術まで丁寧に説明したしっかりとした入門書だと思う.
この本は,JSP&サーブレットの知識だけでなく,Webアプリケーション開発に関わる周辺の仕組み(HTTP通信や,クッキー,セッションなど)の知識も得たいという人に向いている.特に,Javaの経験とWebアプリケーション開発の経験が1-2年ある人が,改めてしっかり勉強する時に良いのではないか.それより経験が少ない人には,ややハードルが高いかもしれないので,買う前に確認されたい.
欲を言えば,Spring,Struts,Wicket,PlayなどのJavaで書かれたWebアプリケーションフレームワークと本書で説明されている技術(JSP&サーブレット)がどのような関係にあるかについて,コラムだけでなくもう少し解説が欲しかった.
# 翔泳社よりレビュー用の書籍を献本して頂きました.ありがとうございました.
2013-01-18(Fri) [長年日記] 編集
[TeX] TeXの文書中にソースコードを記載する
TeXの文書中で,ソースコードを記載したいことがあった.verbatimを使いたかったんだけど,デフォルトの見た目が気にくわない.verbatim環境と他の環境との組み合わせ - Tools & Tips に,verbatim環境のフォントサイズや行間を調整する方法が書かれていたので,使わせて頂いた.
こんな感じでコマンドを定義.
\usepackage{ascmac} \usepackage{fancybox} \newenvironment{cmd} { \VerbatimEnvironment \begin{screen} \footnotesize \def\baselinestretch{.75} \begin{Verbatim} } { \end{Verbatim} \end{screen} }
使う時はこう.
\begin{figure}[t] \begin{cmd} (define (human-player-model-of-first-player self env exec msg) (wait-message-from-player self env exec Provider decide-providing-val) .... \end{cmd} \caption{example} \label{fig:example} \end{figure}