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いいかも。