Dentoo.LT #2で発表してきました。

発表内容は、 "APIを作ってみた"です。
イベント当日の朝、TOEICの受験会場に行く前に少し時間が出来たので、
その場の勢いで資料を作ってしまいました。

R Advent Calendar2012で紹介した内容なので、以前にブログで紹介しています。
Dentoo.LT #2が、参加登録ページです。
なんとDentoo.ltは、専用ページが用意されています。(http://dentoolt.net/)

次回は、4月に開催するとの事なので、楽しみにしてます。

geplotの裏側 (R Advent Calendar2012の続き)

google chart apiのようなものをR言語を利用して再現してみる(R Advent Calendar2012)
の話の続きです。

twitter上で、サーバサイドのコードも見たいという話が上がったので、公開します。
https://github.com/gepuro/geplot
に公開してあります。
綺麗なコードでは無いですが、単純な事しか行なっていないので、
pythonに詳しくない人でも、なんとか読めると思います。

ちなみに、

python geplot.py

で起動します。

使い方は、google chart apiのようなものをR言語を利用して再現してみる(R Advent Calendar2012)に書いてある通りです。

Flaskを使うと簡単にwebアプリケーションが作れて便利ですね。
apiも同様です。json形式でデータの受け渡しをすることもできます。

google chart apiのようなものをR言語を利用して再現してみる(R Advent Calendar2012)

R Advent Calendar2012、18日目です。
google chart apiは、パラメータを指定してリクエストを送るとpng画像としてグラフを作成してくれる。
例えば、

<img src="http://chart.apis.google.com/chart?chs=300x300&chd=t:10,20,30|40,50,60&cht=s">

のようにhtml内に記述すれば、

と表示してくれる。

これらは非常に便利なのだが、R言語を使う人ならば、
普段と同じような感覚で書けると幸せになれるのではないだろか?
と言う事で、作ってみました。

例えば、

<img src="http://api.gepuro.net/plot?x=10,20,30&y=40,50,60&grid=1&xlab=xziku&ylab=yziku&type=p" width=500 height=500>

というように書けば、

と表示してくれます。

現在、利用可能な引数として、

  • xlab (未指定では"x")
  • ylab (未指定では"y")
  • main (未指定では" ")
  • type (未指定では"p")
  • gird (未指定では"0", grid()を使用する場合は"1"にする)

です。
軸名などは、URLエンコードしてあげれば日本語も表示できます。

自分としては、後者のようにR言語らしくかけると楽に感じるし、
描けるグラフの種類も増えるので便利に思う。

内部的な話をすると、リクエストを受ける部分はpythonで書いてあり、
返り値としてR言語上で作成した画像ファイルを返すようにしています。

とりあえず、Rのコードを載せておきます。

#!/usr/bin/Rscript

config <- read.table("stdin", stringsAsFactors=FALSE, sep="\t")
filename <- config$V1
xlab <- config$V2
ylab <- config$V3
main <- config$V4
usegrid <- config$V5
type <- config$V6

dat <- read.csv(paste("./data/", filename, sep=""), header=FALSE)

png(file=paste("./graph/", filename, ".png", sep=""))
plot(dat$V1, dat$V2, xlab=xlab, ylab=ylab, main=main, type=type)
if( usegrid == 1 ){
  grid()
}
dev.off()

しばらく、このまま運用してみて、需要に応じて機能追加や仕様変更を行おうかと考えています。

共立出版のコーパスとテキストマイニングを頂きました

共著の方の一人から、本を頂きました。
この本は、様々な分野でテキストマイニングを用いた実例が多く掲載されており、実際に自分自身で実施する際に非常に参考になるかと思います。

目次は、次のようになっています。
1.コーパステキストマイニング
2.金融テキストマイニングの紹介
3.テキストマイニングを用いた医療専門職のクセの可視化およびその活用
4.自由記述によるアンケート調査からことばの地域差を探る
5.文章の書き手の特徴情報と書き手の識別
6.テキストの多様性をとらえる分類指標
7.テキストマイニングと付加的な情報によるニーズ分析支援
8.政治テキストの計量分析
9.ブランドマネジメントにおける自由回答データの活用競争
10.社会調査における計量テキスト分析の手順と実際
11.自然言語処理技術と機械学習手法を用いたテキストマイニング
12.社会心理学研究におけるテキストマイニング
13.類似テキストの異同を計る:新約聖書校訂本の比較研究
14.文章のジャンル判別に寄与する指標の研究
15.文章の難易度と語彙の関連性に関する考察

第5回 集合知プログラミング勉強会 で発表してきました。

僕の担当は、5章最適化の前半部分で、ランダムサーチ、ヒルクライム、疑似アニーリング、遺伝的アルゴリズムについて紹介しました。
以下が、その時に利用した資料です。

シェルスクリプトでお手軽並列処理

大規模な分散処理をする必要はなくても、並列処理を行なって手早く結果が欲しいケースがよくある。
そんな時にシェルスクリプトを使って、お手軽に並列処理をしてみるのが便利なのではないか。

パイプ処理を活用する。

$ cat hoge.csv | python a.py | python b.py > result.csv 

a.pyやb.pyを標準入出力でデータを受け渡しするようなプログラムを作成する。
例えば、

#!/usr/bin/python
# -*- coding:utf-8 -*-
import sys
for line in sys.stdin:
    row = line.split(",")
    print(",".join(row[0],row[1]))

このようにすることで、a.pyの処理中に、逐次的にb.pyのプログラムも実行することが出来る。

xargsで並列処理

$ cat data.csv | xargs -L 2 -P 4 python ./hoge.py
15
25
20
35
30

-Lで何行ずつ処理をするか指定し、-Pで何スレッドで処理するかを指定する。

data.csvは、次のようなものである。

1,2,3,4,5
2,3,4,5,6
3,4,5,6,7
4,5,6,7,8
5,6,7,8,9

また、hoge.pyは、次のように記述して、データを受け取る。

#!/usr/bin/python
# -*- coding:utf-8 -*-

import sys
for line in sys.argv[1:]:
    row = line.split(",")
    row = [int(w) for w in row]
    print(sum(row))


このようにして、短いコード数でも手軽に並列処理を行うことが出来る。