2014年9月27日土曜日

時刻で支払額をプロット

前回は日付ごとに支払額をプロットしていましたが、今回は 時刻ごとにしました。一日に数回支払いがあった場合のプロットが重なっていたのが分かれます。
スクリプト
options(error=function()traceback(2))
d = read.csv("auWALLET_201409.csv", skip=17, fileEncoding="shift_jis", header=F, stringsAsFactors=F)
names(d) = c("id","timestamp","kind","shop","amount","balance","campaign","foreign_amount","rate","dummy_column")
d$time = as.POSIXlt(d$timestamp, tz="JST", "%Y/%m/%d %H:%M")
tick = c("2014/9/1", "2014/9/5", "2014/9/10", "2014/9/15", "2014/9/20", "2014/9/25", "2014/9/30")
ticklab = sub("^..../(.*)$", "\\1", tick)
tickpos = as.numeric(as.POSIXlt(tick, tz="JST", "%Y/%m/%d"))
d$paid = abs(as.integer(gsub(",","",d$amount)))
# 支払のみをフィルタ
dpaid = d[d$kind=="支払",]
png("paid09.png")
plot(dpaid$time, dpaid$paid, ylim=c(0, 2500), xaxt="n", xlab="time", ylab="paid amount(yen)", main="paid amount")
# カスタマイズしたx軸を書く
axis(1, at=tickpos, label=ticklab)
lines(dpaid$time, dpaid$paid, ylim=c(0, 2500))
abline(h=mean(dpaid$paid), col=2)
abline(h=mean(dpaid$paid)+sd(dpaid$paid), col=3)
dev.off()
結果

解説
png画像を出力
png(出力ファイル名) 
...
dev.off()
でpngからdev.offまでのプロットを画像ファイルとして出力できます。
軸のカスタマイズ
plotのxaxt="n"でx軸のtickを書かない設定にしておいて、axis関数を読んでx軸のtickを書いています。
感想
データをのせないと実行して試せないから面白くないよな....。

2014年9月14日日曜日

auWalletの明細をいじりつつR事始め

auから出ているクレジットカードみたいなプリペイドカード auWALLET。支払履歴がWebで確認できたり、CSVとしてダウンロードできるので、Rで支払額をプロットしてみました。 auWALLETのページから、支払明細のCSVファイルをダウンロードして以下のRスクリプトを実行すると日毎の支払額のプロットが表示されます。(ここでは9月分のファイル auWallet_201409.csv をプロット)
スクリプト
d = read.csv("auWallet_201409.csv", skip=17, fileEncoding="shift_jis", header=F, stringsAsFactors=F)
names(d) = c("id","timestamp","kind","shop","amount","balance","campaign","foreign_amount","rate","dummy_column")
d$date = as.Date(d$timestamp, "%Y/%m/%d %H:%M")
d$paid = abs(as.integer(gsub(",","",d$amount)))
# 支払のみをフィルタ
dpaid = d[d$kind=="支払",]
plot(dpaid$date, dpaid$paid, ylim=c(0, 2500))
lines(dpaid$date, dpaid$paid, ylim=c(0, 2500))
abline(h=mean(dpaid$paid), col=2)
abline(h=mean(dpaid$paid)+sd(dpaid$paid), col=3)
abline(h=mean(dpaid$paid)-sd(dpaid$paid), col=3)
結果

赤い線が平均、緑の線は平均から標準偏差を足し引きした金額です。
解説
CSVの不要な行の読み飛ばし
read.csvのskip引数で読み飛ばす行の数を指定できます。実は明細のヘッダになっている17行目も読み飛ばして、あとでカラム名をスクリプトでつけています。17行目のヘッダをそのまま使うとヘッダがずれからなんですが、なんでだろう。。。
Shift_JISを含むCSVの読み込み
read.csvのfileEndoding="shift_jis"
カンマがついた数値(金額)の読み込み
gsubを使ってカンマを削除するのがR流らしいです。
MacにRをbrewでインストール
RをMacにbrewでインストールするときにfortranのインストールでこける問題がありましたが、ここからバイナリ版のgfortranを入れました。(参考: homebrew install for gfortran fails for xcode 4.2)
感想
MacにRを入れて使うのはいろいろ面倒なことがある。Ubuntuで使うのが楽。
一日に数回使っているところのプロットは合計した方が良いなぁ。
日々、使った金額が見られるのでauWALLETいいかも。

2012年10月1日月曜日

AndroidのJUnitテストの結果をXMLとして出力 (→ Jenkinsで表示)

Android JUnit Testって、Eclipseで実行すると進捗の表示も結果の表示も分かりやすいのだけれど、antやコマンドラインから実行したときは、ログからテスト失敗時のスタックトレースを探して対処せねばならず分かりにくいです。また、Jenkinsでテスト実行時にテスト結果を表示出来ないのはもったいないです。

そんなわけで探してみたところ、Android JUnit results in Hudson にいいコードがのっていました。podplayerのテストであるpodtestで使っています。この方法ではテスト実行時に使用するInstrumentationTestRunner を置き換えなければならないのでちょっと注意が必要です。

  1. テストプロジェクトのAndroidManifest.xml のinstrumatation要素のandroid:nameを com.neenbedankt.android.test.InstrumentationTestRunnerに置き換える
  2. antから実行する場合、ant.propertiesに test.runner=com.neenbedankt.android.test.InstrumentationTestRunner という一行を加える。
  3. Eclipseから実行する場合、以前使っていたAndroid JUnit TestのRunの設定を削除する必要がある? (Projectの設定から Run/Debug setting)
JUnitを実行すると、結果のファイルが実施したターゲット(エミュレータ/実機)のテストプロジェクトのディレクトリ (podtestだと /data/data/com.mamewo.podtest0.tests/files/ ) に保存されるので、 adb pullして、JenkinsにJUnitの結果のファイルとして設定するとテスト結果が表示されます。

2012年7月25日水曜日

Android: 複数の値を持つ設定をお手軽に作る

「複数のWebサイトから好きなのを選ぶ」といった設定画面を作るのに、Webサイトごとに対応するPreferenceをつくってもいいのですが、設定画面のXMLが大きくなり、項目ごとに設定のキーを設定するため設定を取り扱うJavaのコードが煩雑になってしまいます。
ここ で紹介されている設定画面を使うと、簡単に複数の値を持つ設定を作れます。

  • 選択された値がセパレータで連結された文字列として返る
  • 設定のキーは1つにまとめられる
  • 設定項目の表示文字列、値文字列はリソースとしてarrays.xmlに定義できる
なかなか、便利。セパレータの定義で悩むことはありますが。。まらーむ で使用しています。
Preferenceをカスタマイズして新たな設定画面を作るサンプルとしても参考になるかも?

2012年7月3日火曜日

Macがとても遅いとき

ディスクユーティリティからハードディスクの検証、修復を行ったら解決しました。
まずは検証行ってみるのがいいのかも。Mac起動時に CommandとRを同時押しして起動すると、ディスクユーティリティ単体を使用出来るので、検証してみるのがおすすめです。

ちなみに僕のMacではファイルシステムに発生していた模様で、修復前はハードディスクの音が結構していて、backupdがCPUを食い、Safariが起動できないくらい遅くなってました。
ハードディスク使用率が高いのも問題だな。。。。

2012年6月14日木曜日

Robotium: 僕はロボット

なかなかのマシーンだ。(奥田民生)
というわけで、Robotiumの感想を書きます。
Robotium は、Androidのテストツールで、タッチ入力、Widget(Button, TextViewなど)の操作を行ってUIの試験を自動で行えます。まらーむでもリリース前などの試験に使用しています。試験している項目は以下のようなものです。
  • アラームのセットから起床後にとめるところまでの基本操作
    • TextViewの内容をassertで検証
    • 音やバイブレーションは人間が判定
  • 設定画面を開いてクラッシュしないことを確認
基本的な試験にしか今は使用していませんが、結構使えています。たて画面、横画面の両方テストしています。
自動試験を書くコツとしては
  • Widgetを取り出すのにSolo.getViewを使った方が良さそう
    • 例えば、XperiaでTime pickerが円柱状のオリジナルのものになっているのですが、Solo.getTimePickerでとれないことがあったような。。。。
  • 英語版のUIを試験した方が良さげ
    • メニューキーを押したときのメニューはSolo.clickOnMenuItem(String)とメニューのテキストで選択するのだけれども、濁点、半濁点が含まれるとうまく選べないことがあるような。。。
といった具合です。気力があれば詳細を調査しようと思います。すべてidで指定したいなぁ。。。
疑問なのが、PreferenceActivityの扱い方です。設定のキーか何かでPreferenceを取得したいのですが、今はindexで指定するAPIしかない模様。
あと、スクリーンキャプチャ機能が、、、、と思ったところで scirocco を発見したので、使ってみようと思っているところなのです。

2012年6月1日金曜日

まらーむデモビデオ

公開してみました。
Youtube
iPadで録画して、iMovieで編集。お手軽、だけどiMovieを初めて使うのでちょっと戸惑いました。「タイトル」というより「字幕」という文言にしたらいいのに。。。
ちょっと字幕が足りない部分があるので、差し替えるかも。
本当はしゃべったらいいんですけど、自分の中でOK出るまで何回かかるか不安なのでやめときます。