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

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.appengine.ext.webapp.util import run_wsgi_app

class MainPage(webapp.RequestHandler):
def get(self):

url = "http://chart.apis.google.com/chart?cht=lxy&chco=1E5692,3E9A3B&chs=200x125&chxt=x,y&chxl=0:|0|2|4|6|8|10|1:|2|4|6|8|10&chds=0,10,2,10,0,10,2,10&chd=t:"
self.response.headers['Content-Type'] = 'text/html'
self.response.out.write('')

# I use the webapp framework to retrieve the keyword
keyword = self.request.get('keyword')

if not keyword:
self.response.out.write("No keyword has been set")
else:
# Search the 'Expression' Entity based on our keyword
query = search.SearchableQuery('Expression')
query.Search(keyword)
for result in query.Run():
# Annotation
self.response.out.write('
')
self.response.out.write('Affy ID: %s\n' % result['affy_id'])
self.response.out.write('Gene Symbol: %s\n' % result['gene_symbol'])
self.response.out.write('Gene Name: %s\n' % result['gene_name'])
self.response.out.write('Entrez Gene: ' % result['entrezid'] + "%s\n" % result['entrezid'])
self.response.out.write('
')

# Graph (Using Google Chart API)
evector = ",".join([`result['evector_day' + suffix]` for suffix in ["0", "2", "4", "10"]])
ppargox = ",".join([`result['ppargox_day' + suffix]` for suffix in ["0", "2", "4", "10"]])
graph = url + "0,2,4,10|" + evector + "|0,2,4,10|" + ppargox
self.response.out.write('' % graph)

self.response.out.write('')
self.response.out.write('')

class IdSearchForm(webapp.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/html'
self.response.out.write("""


Gene Expression Database




Keyword:
(ex. 100005_at, Traf4)




Itoshi NIKAIDO, Ph. D., dritoshi at gmail dot com

""")


application = webapp.WSGIApplication(
[('/', MainPage),
('/search', IdSearchForm)],
debug=True)

def main():
run_wsgi_app(application)

if __name__ == "__main__":
main()
>>>

app.yaml
<<<
application: gaexpr2
version: 1
runtime: python
api_version: 1

handlers:
- url: /load
script: myloader.py
login: admin

- url: /.*
script: gaexpr2.py
>>>

myloader.py
<<<
from google.appengine.api import users
from google.appengine.ext import bulkload
from google.appengine.api import datastore_types
from google.appengine.ext import search

class ExpressionLoader(bulkload.Loader):
def __init__(self):
# Our 'Expression' entity contains a affyid string and an expression float data
bulkload.Loader.__init__(self, 'Expression',
[('affy_id', str),
('gene_symbol', str),
('entrezid', str),
('gene_name', str),
('evector_day0', float),
('evector_day2', float),
('evector_day4', float),
('evector_day10', float),
('ppargox_day0', float),
('ppargox_day2', float),
('ppargox_day4', float),
('ppargox_day10', float),
])

def HandleEntity(self, entity):
ent = search.SearchableEntity(entity)
return ent

if __name__ == '__main__':
bulkload.main(ExpressionLoader())
>>>

Google のAppサーバにプログラムをアップして、
/usr/local/google_appengine/appcfg.py update gaexpr2/
データをロードする。expressions.table.100.txtがデータ(45000ぐらいあるので最初の100行だけ)で、xxxの部分はGoogleにログインして http://gaexpr2.appspot.com/load を表示すると値が得られるのでそれを入れておくこと。
<<<
/usr/local/google_appengine/tools/bulkload_client.py --cookie='ACSID=xxx' --kind Expression --url http://gaexpr2.appspot.com/load --filename expressions.table.100.txt
>>>

コメント

このブログの人気の投稿

シーケンスアダプタ配列除去ツールまとめ

FASTQ/A file からシーケンスアダプター配列やプライマー配列を除くためのプログラムをまとめてみる。 まず、配列の除去には大別して2つの方向性がある。ひとつは、アダプター配列を含む「リード」を除いてしまう方法。もうひとつは除きたい配列をリードからトリムする方法である。後者のほうが有効リードが増えるメリットが、綺麗に除ききれない場合は、ゲノムへのマップ率が下がる。 気をつける点としては、アダプター/プライマーの reverse complement を検索するかどうか。paired end の際には大事になる。クオリティでトリムできるものや、Paired-end を考慮するものなどもある。アダプター/プライマー配列の文字列を引数として直接入力するものと、multi fasta 形式で指定できるももある。 From Evernote: シーケンスアダプタ配列除去ツールまとめ TagDust http://genome.gsc.riken.jp/osc/english/software/src/nexalign-1.3.5.tgz http://bioinformatics.oxfordjournals.org/content/25/21/2839.full インストール: curl -O http://genome.gsc.riken.jp/osc/english/software/src/tagdust.tgztar zxvf tagdust.tgz cd tagdust/ make sudo make install rehash 使いかた: tagdust adapter.fasta input.fastq -fdr 0.05 -o output.clean.fastq -a output.artifactual.fastq 解説: 入出力形式は fastq/a が使える。リード全体を除く。速い。アダプター配列を fasta 形式で入力できるのが地味に便利で、これに対応しているものがなかなかない。Muth–Manber algorithm (Approximate multiple

ChIP-seq の Peak calling tool を集めたよ

ほかにもあったら教えてください。プログラム/プロジェクト名がツールのプロジェクトサイトへのリンク。その論文タイトルは論文へのリンクになっています。 ツール名の50音順です。 CCCT -  A signal–noise model for significance analysis of ChIP-seq with negative control , chipdiff と同じグループ CisGenome -  CisGenome: An integrated software system for analyzing ChIP-chip and ChIP-seq data . ChromSig -  ChromaSig: a probabilistic approach to finding common chromatin signatures in the human genome. ChIPDiff -  An HMM approach to genome-wide identification of differential histone modification sites from ChIP-seq data ChIP-Seq Analysis Server FindPeaks -  FindPeaks 3.1: a tool for identifying areas of enrichment from massively parallel short-read sequencing technology. Version 4.0 is out. GLITR -  Extracting transcription factor targets from ChIP-Seq data HPeak -  HPeak: an HMM-based algorithm for defining read-enriched regions in ChIP-Seq data MACS -  Model-based Analysis of ChIP-Seq (MACS). PeakSeq -  PeakSeq enables systematic scoring of ChIP-seq experimen

大学の研究室でアカデミックプランが使えるICTツール

自分らでサーバ管理したくないので、SaaS系とローカルで動くソフトのみ。ローカルで動くソフトに関しては、Mac or Docker で動くもののみ。 無償 G Suite for Education  (ドキュメント共有、カレンダーなど) GitHub Education  (ソースコード管理) esa.io アカデミックプラン  (知識共有) Tableau  (データ可視化) Scrapbox  (知識共有) GROWI.cloud  (Wikiなど) 割引 Slack の教育支援プログラム  (ビジネスチャット) Dropbox Education  (ファイル共有、ドキュメント共有) Office 356  (オフィスソフト) Adobe Creative Cloud  (画像編集) AutoDesk for Education  (CADなど) これから申し込んでいくところなので、本当に使えるかはわかりせん。使えた使えないなどの情報やほかのツールでお勧めがあれば教えてもらえると嬉しいです。 アカデミアでなくても無料で使えるツールのうち、うちで使うであろうものは以下に列挙していく。 Google Colaboratory  (データ解析) Overleaf  (論文執筆) Rstudio  (開発, データ解析) VS code (開発)