24042012 drum'n'bass
今日聴いてたHospital Podcast 172のNetsky – Come Aliveのところで、
これはダブステップじゃなくてドラムステップだぜ。BPMはドラムンベースの半分だしな
と言っていて、やっと違いを理解した。確かにAmitとRoxyはヤバイすね。それからDrumstepはつなげやすいのでよいですね。
なにが言いたいかというと、logisticsを買うとイイよ!と。
24042012 drum'n'bass
今日聴いてたHospital Podcast 172のNetsky – Come Aliveのところで、
これはダブステップじゃなくてドラムステップだぜ。BPMはドラムンベースの半分だしな
と言っていて、やっと違いを理解した。確かにAmitとRoxyはヤバイすね。それからDrumstepはつなげやすいのでよいですね。
なにが言いたいかというと、logisticsを買うとイイよ!と。
普段は仮想の空間(ケミカルスペース)とか多変量の解析ばかりしていて、リアルな地理情報を扱うようなエリアマーケティング的なところにはタッチしたことはなかったんだが、フジブログにインスパイアされてGISにも手を出し始めた。
やっぱ身近な話題は面白いね。データは政府統計のH12年国勢調査(小地域)をつかった。
library(maptools) library(RColorBrewer) library(classInt) f <- readShapePoly("h12ka22210.shp") pop <- f$JINKO / f$AREA * 1000 colors <- brewer.pal(9, "YlOrRd") brks<-classIntervals(pop, n=10, style="quantile") brks<- brks$brks plot(f, col=colors[findInterval(pop, brks,all.inside=TRUE)], axes=F)
密度はf$JINKO / f$AREA * 1000で計算しているので単位面積あたりの人口ということになりますね。フジブログでは単純に人数をカウントしてるだけですが、実際には地域の何%が流出入したかをかんがえるべきかなと思います(予算配分的には人数でカウントするのが好ましいのかもしれないが)。

既にデータは国が出してんだからこういうのを小学校とか中学校のカリキュラムに取り入れれば、算数、地理、歴史の教育になっていいと思うんだけどなぁ。Rもオープンソースだしね。
24042012 life
古典の部類
このバスでどこに行くべきかは分からない。しかし、分かっていることもある。適切な人がバスに乗り、適切な人がそれぞれふさわしい席につき、不適切な人がバスから降りれば、素晴らしい場所に行く方法を決められるはずだ
日本の難しさは、一度乗ったバスからは簡単には降ろせないということですな。
本書は、偉大な企業になるためにはどういう資質が必要かという観点で書いてあるが、内容は偉大な組織、偉大な個人に使えそうな考え方であるので、そういう読み方をしても面白い。
なぜグラフを描くのかと問われれば要約統計量を見やすい形で表現したいからであり、ヒトの目という不完全なデバイスを通してデータを認識するためにはグラフとよばれる表現手段を介したほうが効率が良いからである。
と考えるならば、分析のためにグラフを描くという行為は統計解析と切り離せないものであり、画像を描くためだけのライブラリを選択することはあまりよろしいことではないと思う。
そして望ましくは、適切に前処理されたマトリックスから望むグラフが作られるべきであり、グラフを描くためにデータを(ハッシュなんかに)加工するというのはあまりいいやり方とは言えないんじゃないかなぁと思っている。
これが、Rでグラフを描く大きな理由。データの前処理はRでやることはほとんどなくて、大体はperl,pythonを使うので、rpy2は重宝する。
import rpy2.robjects.lib.ggplot2 as ggplot2 from rpy2.robjects import r from rpy2.robjects.packages import importr base = importr('base') datasets = importr('datasets') mtcars = datasets.mtcars pp = ggplot2.ggplot(mtcars) + \ ggplot2.aes_string(x='wt', y='mpg', col='factor(cyl)') + \ ggplot2.geom_point() + \ ggplot2.geom_smooth(ggplot2.aes_string(group='cyl'), method='lm') #pp.plot() r['ggsave'](file="mypng.png", plot=pp) #r['dev.off']()
これで、重量(x)と燃費(y)のプロットに対して、気筒毎に回帰直線と信頼区間を描くことができる。

分析手法をテンプレート化して自動的にレポートを出力したい時にはプログラミングできる手段があるといいのでrpy2は良いライブラリだと思う。
22042012 Emacs
キーバインドにもデザインのセンスが必要だなぁとしみじみ
僕はCtrl+Tabにあてました(Ctrl-tはdmacroにあててるので)。
(global-set-key (kbd "<C-tab>") 'other-window-or-split)
22042012 work
金メダルのチームを銀、銅メダルのチームと比較して抜きん出た特徴を明らかにする。既に古典に近いが色褪せないのが古典のいいところですね。
ビジョナリー・カンパニーをつくるための概念を要約するとこんな感じ
21042012 R
ggplot2のためにRを覚えてもいいと思う。一度覚えてしまえば使い回しの効く技術だと思うんだけどなぁ。
グラフィックス描画のための文法をRで実装したのがggplot2らしい。
20042012 Python
jQuery Mobile用のHTMLをPyJadeで書いているんだけど、いちいちファイルを修正するたびに手でコマンド打つのもめんどくさくなったので、ファイルの更新を検知して自動的にコンパイルするようにしてみた。
import jinja2 import time import sys import watchdog.events import watchdog.observers env = jinja2.Environment(extensions=['pyjade.ext.jinja.PyJadeExtension']) env.loader = jinja2.FileSystemLoader('.') class JadeHandler(watchdog.events.FileSystemEventHandler): def __init__(self, file): self.file = file html = file self.html = html.replace('.jade', '') + '.html' def on_modified(self, event): if event.src_path.endswith(self.file): template = env.get_template(self.file) with open(self.html, 'w') as f: f.write(template.render().encode('utf-8')) print "file modified (re-compiled)" def main(): file = sys.argv[1] event_handler = JadeHandler(file) observer = watchdog.observers.Observer() observer.schedule(event_handler, path=".") observer.start() try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join() if __name__ == "__main__": main()
これでなかなか快適にはなったんだけど、jadeで書いてみて思うのはdata-属性多すぎで見栄えが悪い。いっそdata-は@に置換してしまったらどうだろうかと。
div(@theme='a', @role='footer', @position="fixed") div(@role="navbar") ul li: a(href="#", @icon="home") Home li: a(href="#", @icon="search") Search li: a(href="#info", @icon="info") Info
これでいけそうなカンジがするので、Jinjaにテンプレートを読ませる前に@をdata-に置換する処理をかましておけば、jqm用のHTMLを快適に書けそうだ。
20042012 life
ポケモンタイピングDSのBluetoothキーボードがさらにお安く!なっていたので買ってしまった。
早速娘がハマっている。
もともと、職場でスマホにつなげるキーボードがほしくてBSKBB01WHを狙っていたのだけど。
iBUFFALO Bluetooth2.0 無線キーボード パンタグラフ 83キー [PC,PS3,iPhone4S,iPad2]対応 ホワイト BSKBB01WH子どもがポケモンタイピングに飽きたら職場に持っていって使おうっと。
19042012 coffeescript
spineのソースコードでわからないとこがあって、なんで@をnewしてんの?っていう。
class Test constructor: (@name)-> @test:(name) -> new @ name test1 = new Test 'xxx' test2 = Test.test('yyy') console.log test1 console.log test2
new @ nameはTestクラスのコンストラクタ関数を指しているという理解をした。