スキップしてメイン コンテンツに移動

投稿

11月, 2008の投稿を表示しています

!開催概要

12/16日に JSBi2008 会場にて第10回オープンバイオ研究会を開催します。JSBi2008の早期登録は12/1までなので、参加をご検討の方はお早めに。5000円違いますよ。

http://open-bio.jp/?meeting10


ライトニングトークとフリーディスカッションを加速するオープンスペースを開催いたします。 5分間
のライトニングトーク、話題やネタのある方、ディスカッション、ハックをしたい方はぜひお集まりく
ださい。ネットワークとコンセント、机、プロジェクタ、イーゼルパッド、ポストイット、サインペン
を準備してお待ち致します。また、この模様は Ustream.Tv で中継をおこないますので、リモートから
もご参加ください。

形式:ライトニングトーク+オープンスペース
日時:2008年12月16日(火) 09:30-12:00(変更になりました)JSBi2008 開催期間中に併催
場所:千里ライフサイエンスセンター 503会議室
Ustream.Tv チャンネル:

!結論

言及ありがとうございます。機会があれば参加して頂きたいです。
""専門書関連の翻訳には興味があります。ご入用の際はなんなりとお申し付けください。id:ichanさんらの翻訳プロジェクトにはしびれました。
http://d.hatena.ne.jp/tny/20081127/1227774832

ですが、少し翻訳についての考えが変わってきています。どこかで書こうと思っていたので、今回の機会を活かして書いてみます。

翻訳のメリットは「深くその本の内容を勉強できる」ことと「(その分野の)英語の勉強になる」ことです。しかし、翻訳は本の内容を理解する以上の作業があります。翻訳のデメリットを挙げてみます。

これがだめなだけで、Amazonのレビューあたりでぼろくそに言われます。これは原著の価値を下げ、自分の評判も落しますので慎重にならざるをえません。そのために翻訳家向けの文章や、日本語に関して論じている本を読みました。それはそれで楽しいのですが、本の内容を理解し、研究に役に立てるという本来の目的から離れてしまいます。しかも翻訳家にならない限り、英文を自然な日本語にするというスキルは、研究者としてはあまり価値がないと思います。そもそも普段、論文を読み書きするときには日本語が介在しないのですから。(日本語について論じている本で学んだことは日本語総説やグラントプロポーザルのときには役に立つと思います。)

余談: 翻訳の苦労を知っているので、翻訳の質に文句を言っている人をみると苦笑してしまいます。研究者なんて、本の内容についてはプロでも翻訳はずぶの素人ですよ、普通は。読める日本語になっていたらラッキーぐらいに思ったほうがいいと思う。それが嫌なら原著で読もうよ。

本のレイアウト、フォント、表紙デザイン、紙質、値段、和文索引作成、訳語の統一、文体の統一、句読点の統一など考えるや行うことがたくさんあります。単に輪読会をしているだけなら発生しない作業です。これは自分で本を書くときには役に立つ知識なので一概にデメリットとは言えません。

複数のひとで翻訳プロジェクトを進行させるためには作業ペースや、翻訳の質、タスクの割り当て、編集さんとの議論などさまざまなプロマネの技術が必要になります。僕らはそのために、連絡用ML、qwikを改造したオンライン翻訳環境、訳文・原文の全文検索、タスク管理システ…
テーブルヘッダをクリックするとページ遷移なしにソートできる。

http://gaexpr2.appspot.com/coexpression?keyword=100005_at

実装はDjango simplejson でJSON吐いて[[Yahoo! UI Library|http://developer.yahoo.com/yui/]]で sortable なテーブルを出力する流れ。

前にも書いたが GAE には djangoが含まれている。simplejson を使うには以下のように import するだけ。
from django.utils import simplejson
そしたら適当にデータをダンプして、
json = "coexpression = { data: " + simplejson.dumps(coexpression_genes, indent=4) + "};"
このJSON形式データを出力し、YUIのDataTableを使ってテーブルにする。
<<<


テンプレートの継承を使ってさらにロジックとHTMLを分離した

base.html (抜粋) として親テンプレートを作る。blockタグのところに子テンプレートで定義した内容が埋めこまれる。
<<<

{% block middle %}{% endblock %}



{% block right %}{% endblock %}

>>>
子テンプレート index.html は以下のようになる。
<<<
{% block middle %}

Search co-expression genes
Home
{% endblock %}

{% block right %}
Annotation

Affy ID: {{ affy_id }}
Gene Symbol: {{ gene_symbol }}
Gene Name: {{ gene_name }}
Entrez Gene: {{ entrezid }}

{% endblock %}
>>>

共発現遺伝子を検索できるようにした

http://gaexpr2.appspot.com/?search&keyword=100005_at のページ下部にある "Search co-expression genes" をクリックするだけ。テストデータ100遺伝子分のピアソンの積率相関係数をon the flyで計算してるが実用的な速度だ。4万5000遺伝子ぜんぶつっこんでどうなるかはまだ試してない。あとsort されてないけどそのあたりは JavaScript であとでやる、かもしれない。

ピアソンの相関係数は{{amazon "4873113644"}}にも出てきてたよね、確か。



コードを見たいひとは以下からどうぞ。

http://github.com/dritoshi/gaexpr2/tree/master

追記: sum() 関数があるのをしらずに for で足し算してた、恥ずかしい.../// ということでsum() とリスト内包で書き直した。

Django template languageを使ってHTMLを分離した

Google App APIはDjango template engineを含んでいるのでなにもインストールせずに使える。即興で作ったこともあり、HTMLとロジックが混ざっていて気持ちがわるかったので分離してみた。

http://docs.djangoproject.com/en/dev/topics/templates/

coexpression.htmlにテンプレートを作っておいて (抜粋)
<<<

Affymetrix IDGene SymbolCorrelation Coefficient
{% for gene in coexpression_genes %}

{{ gene.affy_id }}
{{ gene.gene_symbol }}
{{ gene.cor }}

{% endfor %}

>>>
coexpression class から以下のように呼ぶ。template_values を介して変数を渡している。dictionary を渡すと dot (.) と key で参照できるようになる。Rubyの動的メソッドっぽい。
<<<
template_values = {'coexpression_genes': coexpression_genes, 'keyword': keyword}
path = os.path.join(os.path.dirname(__file__), 'coexpression.html')
self.response.out.write(template.render(path, template_values))
>>>

ついでにCSSも拾ってきてデザインがかわいくなったよ。

コードを見たいひとは以下からどうぞ。

http://github.com/dritoshi/gaexpr2/tree/master

{{image 0, '画像の説明', nil, [730,555]}}

これ、このあと、どうすっかな?

息抜きで作り始めたが結構楽しい。今後はどんな感じにするかな。
#実験デザインの情報を設定ファイルに追い出して、データに対する汎用性を上げる。これがタフだが一番大事。
#流行りぎみののユーザサイドアノテーションに対応。これはすぐできそう。
#==テンプレートの継承を使って各ページに重複しているデザインの部分を分離する== 実装終了
#共発現をもうちょいましにする?
##そもそも全データで動くのか。
##memcache っておいしいの?
##じゃ最初からRあたりで計算して格納しておけばいいじゃない。それは言わないおやくそく><
##ほかの統計量を使えるようにする
##データポイントを選んで計算できるようにする
##もっとデータポイントが多いデータにかえなきゃな
##ソート、YUIあたりでやりたい
##共発現遺伝子の結果はクラフもリストされていてほしい。むしろヒートマップ。ヒートマップをGoogle Chart APIでは書きたくない><
#ウェブサービスっぽいの。Google っぽく発現量をatomとかで返すの。すぐできそう。
#地味にログ作成とか。これもすぐできそう。
#よそのweb service とかつかって annotation をがんばる
#ユーザ認証があったほうがうけるだろうな。すぐできそう。
#Pythonでユニットテスト書くにはどうすんの?
#GAEはどのぐらいで課金対象になるの?
#Python Tutorialを最後まで読む
#GAEに関する情報が自動的にはいってくるようにする
##==関連ブログ・ニュース・コミュニティを探す==
#Template Engineのfilter機能のところを網羅的に読む
#かっちょいい名前を考える。これ一番大事。名前重要

Google App EngineとChart APIを使って簡単な遺伝子発現データベースを作ってみた

追記: コードを整理してgithubにアップしました。http://github.com/dritoshi/gaexpr2/

徹夜のサンプリングの合間にプログラミングをすると、最後までテンションが下がらないライフハックを発見した。しかし寝ぼけた頭で、研究に使うプログラムは書きたくない。そこで前から hack してみたかった Google App Engine と Google Chart APIで遊んでみることにした。[[Google App Engine|http://code.google.com/appengine/]]はGoogleのサーバと開発環境を使ってウェブアプリを作るフレームワークみたいなもの。[[Google Chart API|http://code.google.com/apis/chart/]]はデータを渡すとグラフを返してくれるウェブサービス。

しょぼいが、Pythonを思い出しつつGAEとGCAを覚えつつサンプリングしつつ書いたのがこれ。

http://gaexpr2.appspot.com/search

データは以前書いた [[Ruby on Rails + Gruffを使って、11分で作る遺伝子発現データベース|http://itoshi.tv/d/?date=20060506]]で使ったDNA microarrayのデータを使っている。

Railsも便利だけど、サーバを自分で確保しないといけない。Google App Engine はサーバも提供してくれるし、Googleのリソースを使えるので規模が大きくなってもスケールするんだろうなぁ。Google Chart API も軸の取り扱いに癖があったり、エラーバーが描けなかったりするけど、依存関係が激しくなりがちなグラフ生成ライブラリをインストールする手間がまったくいらないというのは魅力的。

しかし、これだけ簡単だと気軽にデータベースを自作するウェット研究者が増えるんじゃないかな。

コードは以下の通り。あとでgithub.comにも上げておく。
<<<
import wsgiref.handlers

from google.appengine.ext import webapp
from google.appengine.ext import search
from google.appe…

Rでグラフをアニメーションさせてみたよ、に再生コントロールボタンを付ける

昨日紹介した Animation library はコントロールボタン付きのアニメも作れるので試してみた。

http://itoshi.tv/d/images/R_animation/index.htm

">"ボタンを押すと再生が始まる。

前回のソースコードの最後、
<<<
saveMovie(optim(c(5,10,2,18), resid), interval = 0.01, movietype = "gif", outdir = getwd())
>>>

<<<
ani.options(nmax=200, interval=0.1, title="Cosinor Analysis", outdir = getwd())
ani.start()
optim(c(5,10,2,18), resid)
ani.stop()
>>>
に置きかえるだけでHTMLとアニメ用の画像、再生のコントロールボタンを制御するJavaScriptが自動生成される。

GIFアニメーションじゃなくてFlashを出力する

前回はGIFアニメーションだったけどFlashにもできる。
SWF Toolsをインストール
<<<
sudo port install swftools
>>>
lameやらcmakeやらPythonやらがインストールされる。
前回のソース
<<<
saveMovie(optim(c(5,10,2,18), resid), interval = 0.01, movietype = "gif", outdir = getwd())
>>>

<<<
saveSWF( optim(c(5,10,2,18), resid), interval = 0.01, dev="png", outdir = getwd())
>>>
に直すだけ。

Rでグラフをアニメーションさせてみたよ

[[R News 2008年2号 (PDF)|http://cran.r-project.org/doc/Rnews/Rnews_2008-2.pdf]] や [[useR!2008での面白そうな発表をいくつか上げてみた|http://d.hatena.ne.jp/syou6162/20081004/1223092624]]で紹介されていたR の [[animation library|http://animation.yihui.name/]] を使ってみたよ。

まずは、非線形モデル y = mesor + a * cos(2*pi*(t-acrophase)/P) にN(0,0.5)のガウシアンノイズを加えたデータを用意し、これを測定されたデータと考える。そのデータに対して非線形回帰するために、Nelder-Mead法で目的関数sum( (y-yhat)^2 )を最大化する。いわゆる cosinor analysis ですね。その計算過程を各ステップごとにプロットし、animation libraryを使ってアニメ化する。

アニメーションの動きが激しくなるように、わざと初期値をおおげざにはずしてある。青が測定データで、緑が予測した回帰曲線。緑のほうの線が動いてみえるはず。収束間近ではあまり動かないのでしばらくみつめていると、ループしてまた初期値から計算しなおす。



{{image 0, 'cosinor analysis, cosin fitting', nil, [480,480]}}



コードは以下の通り。

<<<
library(animation)
t <- seq(0,48,1)
mesor <- 0
a <- 3
acrophase <- 12
P <- 24
y <- mesor + a * cos(2*pi*(t-acrophase)/P)
y.noise <- mesor + a * cos(2*pi*(t-acrophase)/P) + rnorm(length(t), mean=0, sd=1)

resid <- function(par) {
mesor <- par[1]
a <- par[2]
acrophase <- par[3]
P <- par[4]