Scala+POIでExcelをいじる

xlsxにも対応しているらしいのだけど、今回は普通に。

import org.apache.poi.hssf.usermodel._
import java.io._

object PoiTest {
  def main(args: Array[String]) {
    val wb = new HSSFWorkbook
    val sheet = wb.createSheet("日本語OK")

    for (i <- 0 to 9) {
      val row = sheet.createRow(i)
      for(j <- 0 to 9 ) row.createCell(j).setCellValue(10*i+j)
    }

    val filename = "workbook.xls"
    val out = new FileOutputStream(filename)
    wb.write(out)
    out.close()
  }
}

for

forをまわすところを

for (i <- 0 to 9; j <- 0 to 9) {
  sheet.createRow(i).createCell(j).setCellValue(10*i+j)
}

とやると9,19,29...99という列しか入力されないのだけど、理由がわからん。

scala-mode

環境変数にclasspathを設定しててもscala-run-scalaでは読んでくれてないっぽい。そのため、端末からコンパイルして動かすためにmainメソッドを定義したけど、本当はEmacsからスクリプトっぽく対話チックにいじりたい。

ここ数年分の血圧データをggplot2で

自分の血圧のデータが3年くらい溜まっているので、収縮期血圧と測定日時のプロットをして、スムージングもしてみた。冬場は血圧が上昇する傾向にある。測定始める前は180超えて190近くあったから、かなり落ち着いた感じ。

library(ggplot2)
data <- read.csv("/Users/kzfm/mybp.csv",header=FALSE)
time <- strptime(data$V1, "%Y-%m-%d")
high <- data$V2
low  <- data$V3
mybp <- data.frame(time=time,high=high,low=low)
p <- qplot(data=mybp,time,high)
p +  stat_smooth() + stat_smooth(colour="green", method="lm", formula=y~poly(x,9), size=1,se=FALSE)

bp2010

2008年から2009年の頭のあたりで急激に落ちているのは環境要因ですな。そして、ああいう働き方は二度としないしできないだろうなぁ。

Pharmacokinetic-Pharmacodynamic Modeling and Simulation

非線形混合効果モデルをやり始めたら、やっぱ線形モデルから式を丁寧に追いかけないとだめだなと。

今日は風邪がひどくて布団でゴロゴロしながら、2章を読み直してた。

ProductName Pharmacokinetic-Pharmacodynamic Modeling and Simulation
Peter Bonate
Springer / ¥ 8,616 ()
在庫あり。

collinearrityと欠損値の扱いに結構ページを割いている。特に欠損値はICHのガイドライン等から言及してたり、臨床系のヒト向けの本だな。僕はここらへんの技術を探索研究に持ち込みたいので、欠損値の扱いとかあんまシビアに考えなくて良いかなと思っている(今は)。

サマリーに、非線形モデルを理解するためには線形モデルへの理解が必須だぜ(だから、2章に線形モデルを入れたで)というようなことが書いてあった。

Pharmacokinetic-Pharmacodynamic Modeling and Simulation 2章

今週は、chemoinformaticsとquantum chemistryとPKモデリングを並行して動かしてたら非常に疲れた。というか、今の僕に足りないのはDMPKの知識だな。

というわけで、簿記しながらPharmacokinetic-Pharmacodynamic Modeling and Simulation読むのも再開した。

ProductName Pharmacokinetic-Pharmacodynamic Modeling and Simulation
Peter Bonate
Springer / ¥ 8,616 ()
在庫あり。

2章は線形モデルで、3章は非線形モデル、4章はバリアンスモデルなので、さらっと読んで5章のケーススタディにとっとと進みたい。


あと、PKモデリングは僕の仕事なのか?みたいなことを言われたので、色々と考えてみたんだけど、QSPkRをやりたかったら、それは多分必須なので、触りくらいは覚えておかないといけないかなぁと思っている。

インフォマティクスも好きだけど、モデルを通して現実を理解しようとする行為もまた好きなので、そういう部分はあまり苦痛を感じないっちゅうのもあるかも。

逆に、ロジックを積み上げないというかディグダグみたいなプロジェクトは超苦手

ディグダグ

ニュー・スーパーマリオブラザーズ・Wii

娘と遊ぼうと買ってみたが、これはなかなかたのしい。

ProductName ニュー・スーパーマリオブラザーズ・Wii

任天堂 / ¥ 5,800 (2009-12-03)
在庫あり。

娘と遊んでいて気づいたのは、娘はwiiスポーツとかwiiフィットしかやったことがなくて、十字キー+ABっていうのは初めてなので、ジャンプしたいときにはコントローラー上に降ったり、進みたい方向に傾けたりしてしまう。十字キーとか2ボタンでジャンプとかはやりにくいうえに、同時に右手左手を操作するのも難しいようだ。

加速度センサーのほうが操作デバイスとしては自然なんだろうなーと思った。

「アサーティブ・コミュニケーション」を読んだ

アサーティブ期

ProductName アサーティブ・コミュニケーション―言いたいことを「言える」人になる
岩舩 展子,渋谷 武子
PHPエディターズグループ / ¥ 1,260 ()
在庫あり。

  • 私を主語にすればスッと伝わる
  • アサーティブな対応というのは必ずしも自分の伝えたいことを言うことではない

chemoinformaics in Scala

朝から、openbabelのjavaインターフェースを使えるようにしようといじっていたのだけど、java.lang.UnsatisfiedLinkErrorを解決することができないまま夕方になってしまった。

んーCDK使うことになるのかなぁと思ったがMXのほうが楽そうなので今回はこっちを使った。

import com.metamolecular.mx.calc.MassCalculator
import com.metamolecular.mx.io.daylight.SMILESReader

object MxTest {
  def main(args: Array[String]) {
    val calc = new MassCalculator
    for (mol <- args) {
      val mw = calc.findAveragedMass(SMILESReader.read(mol))
      println(mol + ": " + mw)
    }
  }
}

実行してみる

scalac mxtest.scala 
scala MxTest "CCC" "CO" "CNC"
CCC: 44.09562
CO: 32.04186
CNC: 45.08368

Liftを使って構造関係を扱えるWikiを作ってみたい。

ProductName Scalaスケーラブルプログラミング[コンセプト&コーディング] (Programming in Scala)
Martin Odersky,Lex Spoon、Bill Venners
インプレスジャパン / ¥ 4,830 ()
在庫あり。

Foundation / Breakage

zarifのやつが良かった。

ProductName Foundation(ファウンデーション)
ブレイキッジ,ブリアル,ニューアム・ジェネラルズ & デビッド・ロディガン,スクリーム,ルーツ・マヌーヴァ,ザリフ,ケモ,エリン
HYDRA RECORDS / Digital Soundboy / ¥ 2,079 (2010-03-06)
在庫あり。

Rbookの15章は混合効果モデル

最近気づいたので読んでた。

具体的な例なのでわかりやすい。

でも、この本は理論的な説明がないから数式とかは他の本で追わなあかんね。

QR分解とかLU分解とか

思うところあって(というか、非線形混合効果モデルの式がなかなか把握できないので)、線形代数のあたりを復習してみたりとか。

プログラミングのための線形代数はやっぱりいい本だなぁと思う。幾何的なイメージつかみやすいし、QR分解とかLU分解とかもわかりやすい

ProductName プログラミングのための線形代数
平岡 和幸,堀 玄
オーム社 / ¥ 3,150 ()
在庫あり。

以下、Rで。

LU分解

library(Matrix)
x <- Matrix(rnorm(9), 3, 3)
elu <- expand(lu(x))
elu$L
elu$U

QR分解

x <- matrix(rnorm(9), 3, 3)
y <- qr(x)
qr.Q(y)
qr.R(y)