第2回入門機械学習読書会は5/25@富士です

第2回は富士の吉原でやります。

今回は大きい部屋が埋まっていたため定員が少なめなのでご注意ください。

グルメ的にも移動的にもちょうどホットな話題が多いので、観光がてら参加するのもいいでしょう。

1237541908

おやつは杉山フルーツの生ゼリーを用意しようかと思っています。

package_installer.R

入門機械学習のサンプルコードについているインストーラは依存関係のあるパッケージも入れたりソースからインストールするようになっているのでエディタでinstall.packages関数をちょいといじるといいかもしれません。

for(p in cran.packages) {
    if(!suppressWarnings(require(p, character.only = TRUE, quietly = TRUE))) {
        cat(paste(p, "missing, will attempt to install\n"))
        install.packages(p)
    }
    else {
        cat(paste(p, "installed OK\n"))
    }
}

最近の菜園生活

ちょこちょこ手入れしている。

エントリにしておかないと「いつ種を蒔いていつ芽が出たか」という記録がなくなるので、次の年にいつまくかのフィードバックがなくなるので困る。

これように別のウェブサービスをつくるべきかも

4/6

ジャガイモの芽がでたのと、エンドウの花が咲いた。

1367100186 1367100188

4/14

右はカリフラワー

1367100189 1367100191

4/20

1367100192

4/27

空芯菜とモロヘイヤの種をまいた。ズッキーニは芽が出た

1367100194 1367100195

室内で育てていたオクラとゴーヤはひょろひょろになってしまった。

1367100197 1367100198

今日のドラムンベース(130428)

Rainy City Musicから始まりRainy City Musicで終わるんやーって組んだんだけど、最後のほうでグダった。

Rainy City Music / Dub Phizix
Waveform / Phace & Misanthrop
Thorn / BTK
Kingpin (Calyx & Teebee Remix) / Friction & Skream feat Scrufizzer P Money & Riko Dan
Ignition (TR Tactics Remix) / Optiv & BTK feat Ryme Tyme
Beyond Our Dreams / J Majik & Wickaman
Hey Brother / Nu Elementz & Ruffstuff
Quartz Controlled / June Miller & Mindmapper
Roxy / Nymfo & State Of Mind
Run / Spinline
Pacman (Ram Trilogy Remix) / Ed Rush & Optical
The Unspoken / Technimatic
Dribble VIP / Muffler
This Is My World (Icicle Remix) / Jade
Midnight Nation / Optiv
Riptide / Optiv & BTK
Right Here / Ulterior Motive
Everything Is Everything / Utah Jazz & Alex Reece
Let It Be (DJ Marky & SPY Remix) / Artificial Intelligence feat Steo
Stand Alone / Artificial Intelligence
Guardian / SpectraSoul
Epic / Mikal
From Autumn To Ashes / June Miller
Blackout / Hive
Drop It (Optiv Remix) / BTK
The Kindred / Ed Rush & Optical
Arcadia / Ed Rush
Epic / Mikal
ni ten ichi ryu / teebee
Run It Like The President (feat. T Man) / Dub Phizix & Skeptical
Rainy City Music / Dub Phizix

第一回入門機械学習読書会終了

皆様お疲れ様でした。

今回初めてCCCを使いました。廃校になった小学校を転用した施設ですが、机と椅子はノスタルジーあふれるものではなかったですね。

1367095761

2章の途中までやりましたので、次回は残りと3章を演る予定にしています。5/18といいましたが、Nginxとバッティングするのはよくないので次の週(5/25)にやる予定で調整します。多分富士になるので早めの昼に来て、つけナポリタンとかがんもいっちなんかを攻めるといいです。

それから、今回は懇親会をいれなかったので、次回からはいつものように設定していこうと思っています。 ちなみにアナウンスとか調整はgoogle groupsのMLを使っているのでこっちにも参加して頂ければと思います。

RとOpenCV(画像認識)

みなさんここらへんに興味があるみたいなのでちょっと調べておきました。

本も出版されているようです。

ProductName デジタル画像処理 (Rで学ぶデータサイエンス 11)
勝木 健雄
共立出版 / 3885円 ( 2011-11-23 )


ggplot2のtilde(~)

ggplot2のfacet_wrapで~Speciesとやっててtildeなによ?みたいな話が出たんだけど、いまいちよくわかってなかったので、調べてみたが層別したグラフを並べるための記法のようですね。

lapply

自前実装したヒトがいるのでそっちを参照。

高階関数がわからないのであればunderscore.jsのmapの実装は

_.map = _.collect = function(obj, iterator, context) {
var results = [];
if (obj == null) return results;
if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
each(obj, function(value, index, list) {
  results.push(iterator.call(context, value, index, list));
});
return results;
};

Haskellだったら再帰ですね。

map :: (a -> b) -> [a] -> [b]
map _ []     = []
map f (x:xs) = f x : map f xs

で、あらためて該当するコードを読めばよいでしょう

get.location <- function(l) {
  split.location <- tryCatch(strsplit(l,",")[[1]], error= function(e) return(c(NA, NA)))
  clean.location <- gsub("^ ", "", split.location)
  if(length(clean.location) > 2) {
    return(c(NA, NA))
  } else {
    return(clean.location)
  }
}
city.state <- lapply(ufo$Location, get.location)

Windows版のRStudioが不安定

Windows版のRStudioがよく落ちていたようですが、一応素のRでもこんなかんじでテキストエディタが使えるみたいなので、次回は試すといいかもしれません。

明日は入門機械学習読書会です

ちょっとggplot2の説明のための資料を足してた。

ggplot2を使えば、こんな感じのいい感じのプロットがさくっと書ける。種毎にプロットを分けてそれぞれ線形回帰直線を引いてます。

library(ggplot2)
g <- ggplot(data=iris, aes_string(x='Sepal.Length', y='Sepal.Width', color='Petal.Length'))
g + geom_point() + facet_wrap(~Species) + geom_smooth(method='lm')

plot

興味があれば一緒に勉強しませんか?

50Mbyteを超えるmobiをKindleで読むにはUSBで送ればいいだけだった

O'ReillyでData Pointsを購入したんだが、ファイルサイズが50Mbyteを超えてるせいでNexus7でsend to kindleができなくて困った。

調べたらUSB経由でファイルを送ればいいだけだった。

1366968322

最近飲んだ日本酒

最近、黒字に金かよ〜とジャケ買いした白瀑の山本がすこぶる美味かった。

1366884496 1366884497

美味かったので、飲み終わったあとに白瀑の赤いラベルの純米酒を続けて購入して飲んでしまった(こっちも美味かったが、山本飲んだ後だったので、、、)。

そして今週はいわせさんで購入した紀土の特純のしぼりたて(生酒)を飲んでる。生酒だからフレッシュだけど、やや酸が強いというか攻めてくる。これは紀土全般に言えるかな。

1366884499

Zabbixでweb監視

Zabbixのweb監視はトリガーの設定がちょっと面倒くさい。hostに紐付けなきゃいけないけど、なぜそうしないといけないの?っていう。まぁ歴史的経緯の賜物なんだろうなぁということはすぐ分かったけど、コンフィグにwebの項目があるのにトリガーのとこにはないのは気持ち悪い。

webの監視も、webアプリだけ監視したい場合があってそういう時どうすんの?なんて悩むわけだけど、お決まりのやり方は本に書いてなかったので、tweetしたら色々教えてもらった(感謝)。

  1. webを提供しているホストに紐付ける
  2. Zabbixサーバーに集約する
  3. 集約用専用ダミーホストをつくる

死活監視をしているサーバーでwebアプリを運用している場合は1でよいとして、webアプリだけの場合は2か3かな。2の場合はネットワークの死活と紐付けられるので、複合型トリガーを作るには便利で、3の場合はトリガー作成の際、余計なアイテムが出てこないというメリット・デメリットがあるそうです。

自分の環境に応じて選択すればよいと思う。

「「経理・財務」これでわかった!」というわけではない

著者の「経理・財務」感を語っている本って感じだった。「お金」よりも「人間」が大事というスタンス

決算書に載らない財産で、一番大きいのは人間です

ProductName 「経理・財務」これでわかった! (PHPビジネス新書)
金児 昭
PHP研究所 / 840円 ( 2008-11-19 )


入門機械学習の1章のUFOデータをpandasで集計した

区切り文字の数が変だったり、日付がおかしい(19950000みたいなの)場合はpandasの場合は容赦なくコケる(しかもエラー内容がわからなかったりする)。

Rの場合しれっとスキップするのでさくさく感はあるのだけど、どのデータ落としたのか注意していないとわからないので、自分の場合はまずは綺麗なデータにするということをきちっとやるほうが、自分でデータをネグったという認識ができて後々悩まなくてよいかなと思っている。

実行結果。pandasのmulti indexは便利ですね。

In [2]: execfile("ml1.py")

In [3]: d.head()
Out[3]: 
                     DateOccurred  DateReported  Location  YEAR  MONTH
Location YEAR MONTH                                                   
AB       2004 3                 1             1         1     1      1
         2005 4                 1             1         1     1      1
         2010 7                 1             1         1     1      1
AK       1990 1                 1             1         1     1      1
              3                 1             1         1     1      1

この先がよくわからないんだけどdate_rangeかなんかで月ごとのSeriesを作ってからjoinすればいいのかなぁ。

コード。最初に汚い行(tabの数がおかしい、日付の表現が変)というデータを捨ててpandasに読み込めるようにしてからpandasで処理しています。

import pandas as pd
from datetime import datetime
from numpy import nan
import re

re_date = re.compile("\d{4}[01]\d[0123]\d")

with open("ufo.tsv", "w") as w:
    with open("ufo_awesome.tsv") as f:
        for l in f:
            s = l.split("\t")
            if len(s) == 6:
                if re_date.match(s[0]) and re_date.match(s[1]):
                    if int(s[0][4:6]) > 0 and int(s[0][6:8]) > 0:
                        w.write(l)

def get_loc_code(loc):
    l = loc.split()
    if len(l) == 2 and len(l[1]) == 2:
        return l[1].upper()
    else:
        return nan

d = pd.read_table("ufo.tsv",
                  header=None,
                  names=["DateOccurred", "DateReported",
                           "Location", "ShortDescription",
                           "Duration", "LongDescription"
                         ],
                  parse_dates=["DateOccurred", "DateReported"],
                  date_parser=lambda x: datetime.strptime(x, '%Y%m%d')
                  )
d = d.drop(["LongDescription", "ShortDescription", "Duration"], axis=1)
d.Location = d.Location.apply(get_loc_code)
d = d.dropna()
d = d[d.DateOccurred > datetime(1990, 01, 01)]
d["YEAR"] = d.DateOccurred.apply(lambda x: x.year)
d["MONTH"] = d.DateOccurred.apply(lambda x: x.month)
d = d.groupby(["Location", "YEAR", "MONTH"]).count()

ProductName 入門 機械学習
Drew Conway
オライリージャパン / 3360円 ( 2012-12-22 )