Apache batikによるSVG→PNG/JPEGへの変換方法

動作確認OSは、Solaris 9である。

概要

BatikはJava技術に基づく、SVGフォーマットのイメージを、表示する、生成する、変換する、あるいは操作するといった様々な目的で利用する、アプリケーションのためのツールキットである。
ここでは、SVGファイルからPNG/JPEGファイルへのラスタライズのためのコマンドの使用方法、及び、JavaプログラムからのImage Transcoderの呼び出し方法について説明する。


インストールと問題点

インストール
アーカイブを展開して配備するだけ。ただし、Batikのzipファイルを解凍するのにunzipユーティリティを使用しないこと。これはディレクトリのアクセス権限を適切に設定しない。

/home/apache/tools/[任意のディレクトリ]
 
バイナリ版
  $ jar xvf batik-1.7beta1.zip
  $ mv batik-1.7 batik-1.7lib
  (ソース版と区別するために、ディレクトリ名をbatik-1.7libに変更)
 
ソース版
  $ jar xvf batik-src-1.7beta1.zip



ターミナルの問題
プログラムの実行はSolarisのコンソール、または、「Reflection X」のコンソール上から行う必要がある。例えば「Tera Term Pro」を使用すると、実行時に下記エラーが出る。

"Exception in thread "main" java.lang.InternalError: Can't connect to X11 window server using ': 0.0' as the value of the DISPLAY variable."

解決方法(2007/09/28追記)
javaプログラム実行時に下記のオプションを指定すること。これは、batikがGraphics2D(2Dグラフィックス用の標準Java API)にイメージの生成を要求しており、Graphics2DがX11サーバーを必要とすることに起因している。JDK 1.4以降では、java.awt.headlessプロパティにtrueをセットすることで、いわゆるheadless(画面を出さない)で実行できるようになる。

java -Djava.awt.headless=true



SVGファイルのヘッダー記述
SVGファイルのヘッダー記述は次の通り。ヘッダー部を追加するのは構わないが、記述不足だと変換できないことがあるので注意すること。

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">



使用方法

ラスタライズ(SVGPNG/JPEG)のコマンド
バイナリ版とソース版で方法が異なる。

  • バイナリ版の例題の実行

  • apacheユーザーの場合

    $ cd /home/apache/tools/batik-1.7lib
    $ java -Djava.awt.headless=true -jar batik-rasterizer.jar samples/GVT.svg
      ↓
    samples/GVT.png

    他のユーザーのディレクトリ上で行う場合

    /home/apache/tools/batik-1.7lib/samples/testsディレクトリ以下のファイルが必要なので、自分のディレクトリにコピーしておく

    $ cp -r /home/apache/tools/batik-1.7lib/samples/tests .
    $ java -Djava.awt.headless=true -jar /home/apache/tools/batik-1.7lib/batik-rasterizer.jar svgファイル
      ↓
    PNG/JPEGファイル

    java.lang.OutOfMemoryErrorが出るときは、Javaプログラム起動時のオプションで
    メモリサイズを指定すること。

    $ java -Djava.awt.headless=true -Xmn512m -Xmx1024m -Xms1024m -jar /home/apache/tools/batik-1.7lib/batik-rasterizer.jar svgファイル

  • ソース版の例題の実行


  • apacheユーザーの場合

    $ cd /home/apache/tools/batik-1.7
    $ chmod +x build.sh
    $ build.sh svgrasterizer samples/GVT.svg
      ↓
    samples/GVT.png



JavaプログラムからのImage Transcoderの呼び出し
下記サイトにチュートリアルが載っているが、そのままの方法ではうまくいかない。例題のソースを実行してもエラーが出るので、ソースの一部を変更した。イメージのサイズを変更する方法などについては、ドキュメントを参照のこと。

  • 環境変数CLASSPATHの設定

  • batik.jarファイルは、Javaプログラムの実行時に必要となる。 環境変数CLASSPATHの設定に、batik.jarの記述を追加する。

    .profileの場合
      CLASSPATH=.:〜
        :/home/apache/tools/batik-1.7lib/batik.jar
     
    .cshrcの場合
      setenv CLASSPATH .:〜
        :/home/apache/tools/batik-1.7lib/batik.jar

  • ライブラリのコンパイル


  • batik-1.7ディレクトリ下でbuild.sh compileを実行し、ライブラリをコンパイルしておく。ライブラリは、classes/orgディレクトリ下に作成される。Javaプログラムのコンパイル時に必要である。

    $ cd /home/apache/tools/batik-1.7
    $ build.sh compile
      ↓ライブラリ作成
    batik-1.7/classes/org/*

  • PNG変換プログラムの例題の実行

  • ソース
      /home/apache/tools/batik-1.7/sources-png/SaveAsPNG.java
        第1引数:SVGパス名
        第2引数:PNGパス名
    
    コンパイル
      $ cd /home/apache/tools/batik-1.7/sources-png
      $ ant
        ↓
      classファイルは、classesディレクトリ下に作成される
      classファイルは、実行用transディレクトリにコピーされる
    
    実行
      $ cd ../trans
      $ go.png
      (java -Djava.awt.headless=true SaveAsPNG /home/apache/public_html/trans/GVT.svg /home/apache/public_html/trans/GVT.png)

  • JPEG変換プログラムの例題の実行

  • ソース
      /home/apache/tools/batik-1.7/sources-png/SaveAsJPEG.java
        第1引数:SVGパス名
        第2引数:JPEGパス名
    
    コンパイル
      $ cd /home/apache/tools/batik-1.7/sources-jpg
      $ ant
        ↓
      classファイルは、classesディレクトリ下に作成される
      classファイルは、実行用transディレクトリにコピーされる
    
    実行
      $ cd ../trans
      $ go.jpg
      (java -Djava.awt.headless=true SaveAsJPEG /home/apache/public_html/trans/GVT.svg /home/apache/public_html/trans/GVT.jpg)

  • ソースプログラム


  • チュートリアルのコードのままでは、実行時にエラーが出るので、以下の点を変更した。
    TranscoderInput()の引数に、URIではなく、InputStreamを渡すようにする。

    //String svgURI = new File(args[0]).toURL().toString();
    //TranscoderInput input = new TranscoderInput(svgURI);
      ↓ 変更
    InputStream istream = new FileInputStream(args[0]);
    TranscoderInput input = new TranscoderInput(istream);

    また、サイズを指定しないと一部分しか変換されないことがあるので、addTranscodingHint()で幅、高さ、リージョンを指定する。
    ソースは以下の通り(JPEGの場合は、PNGTranscoderの代わりにJPEGTranscoderを使用すること)。

    import java.io.*;
    import java.awt.*;
    import org.apache.batik.transcoder.image.PNGTranscoder;
    import org.apache.batik.transcoder.TranscoderInput;
    import org.apache.batik.transcoder.TranscoderOutput;
    
    public class SaveAsPNG {
     
        public static void main(String[] args) throws Exception {
     
            // Create the transcoder input.
            //String svgURI = new File(args[0]).toURL().toString();
            //TranscoderInput input = new TranscoderInput(svgURI);
            //System.out.println(svgURI);
            InputStream istream = new FileInputStream(args[0]);
            TranscoderInput input = new TranscoderInput(istream);
     
            // Create the transcoder output.
            OutputStream ostream = new FileOutputStream(args[1]);
            TranscoderOutput output = new TranscoderOutput(ostream);
     
            // Create a PNG transcoder.
            PNGTranscoder t = new PNGTranscoder();
     
            // Set width and height.
            int width = Integer.parseInt(args[2]);
            int height = Integer.parseInt(args[3]);
            Rectangle rect = new Rectangle(0, 0, width, height);
            t.addTranscodingHint(PNGTranscoder.KEY_WIDTH, new Float(rect.width));
            t.addTranscodingHint(PNGTranscoder.KEY_HEIGHT, new Float(rect.height));
            // Set the region.
            t.addTranscodingHint(PNGTranscoder.KEY_AOI, rect);
     
            // Save the image.
            t.transcode(input, output);
     
            // Flush and close the stream.
            ostream.flush();
            ostream.close();
            System.exit(0);
        }
    }

RによるHeatmapグラフの作成

手順

距離関数Dist()で類似度を求め、hclust()でクラスタリングし、heatmap()のColv,Rowvオプションにdendrogram()を指定して出力する。
プログラム例

library(amap)
# Heatmapグラフ作成
#
# ファイルの読み込み
data <- read.table("test.txt", header=TRUE, row.names=1, sep="\t")
#
# PDFに出力する
pdf()
#
# 距離関数で類似度のアルゴリズムとしてCosine係数を使用する
# (method="pearson")は(1 - cosine)と同義である
d1<-Dist(data, method="pearson")
d2<-Dist(t(data), method="pearson")
#
# クラスタリングでAverage Linkageを使用する
c1<-hclust(d1, method="average")
c2<-hclust(d2, method="average")
#
# Heatmap PDFファイルの出力
heatmap(as.matrix(data),
        Colv=as.dendrogram(c2),Rowv=as.dendrogram(c1),
        scale="none", col=cm.colors(256),
        main="Cosine-Average", margin=c(8,10))
#
# デバイスを閉じる
dev.off()



関数の主な仕様

距離関数
距離関数にはamapライブラリのDist()と標準のdist()がある。標準のdist()は類似度を指定するmethodオプションにPearson's相関係数Cosine係数が無いので、Dist()を使用した方がよい。また、dist()は結果の距離行列が千倍程度(?)の値になる。
  • Dist()関数の使用例

  • Dist()は類似度をmethodオプションとして指定できる。

    library(amap)
    Dist(data,method="peason")

  • Dist()関数のmethodオプション文字列


  • methodオプションの名前はまぎらわしいので気をつけること。

    "correlation" : Pearson's相関係数。(1 - peason)の値。
    "pearson"     : Cosine係数。(1 - cosine)の値。
    "euclidean"   : ユークリッド距離
    "maximum"     : 最大距離
    "manhattan"   : マンハッタン(シティーブロック)距離
    "canberra"    : キャンベラ距離
    "binary"      : バイナリー距離

  • R Documentation


クラスタリング関数
  • hclust()関数の使用例

  • hclust()は階層的手法をmethodオプションとして指定できる。

    c1<-hclust(d1, method="average")

  • hclust()関数のmethodオプション文字列
  • "single"      : 単連結法  (Single Linkage)
    "complete"    : 完全連結法(Complete Linkage)
    "average"     : 群平均法  (Average Linkage)
    "ward"        : ウォード法(Ward's Minimum Variance)

  • R Documentation



ヒートマップ関数
  • heatmap()関数の使用例
  • heatmap(as.matrix(data),
            Colv=as.dendrogram(c2),Rowv=as.dendrogram(c1),
            scale="none", col=cm.colors(256),
            main="Cosine-Average", margin=c(8,10))

  • heatmap()関数のColv,Rowvとscaleオプション


  • Colv,Rowvオプションにdendrogram()の返り値を指定する。このオプションの指定が無い場合は、正方行列のデータからしかヒートマップを作成できない。縦、横のサイズが異なるデータにおいては、Colv,Rowvオプションの指定は必須である。
    scaleオプションには"none"を指定すること。
  • R Documentation

MATLABによるフィッシャーの正確確率検定

  • Fisher's exact test.
  • fisher_exact()関数(霧笛作成)を使用する。



引数

data  : データ値のベクトル(2 * 2)
          data = [a b; c d]
alpha : 有意水準
both  : 0 片側検定
        1 両側検定



返り値

h     : 0 帰無仮説は採択される → 2要因は独立でないとはいえない
        1 帰無仮説は棄却される → 2要因は独立ではない
p     : 生起確率



プログラム例

% ---------------------------------------------------------------
% フィッシャーの正確確率検定
% Fisher's exact test.
%
% Web教材「統計学自習ノート」より、
% フィッシャーの正確確率検定(直接確率)「例題」の計算。
% http://aoki2.si.gunma-u.ac.jp/lecture/Cross/Fisher.html
% ---------------------------------------------------------------
function exact_test()

    % p 生起確率
    % h : 0 帰無仮説は採択される → 2要因は独立でないとはいえない
    %   : 1 帰無仮説は棄却される → 2要因は独立ではない

    data = [13 4; 6 14];
    alpha = 0.01;           % 有意水準

    % 片側検定
    [h,p] = fisher_exact(data,alpha,0)    
    % 両側検定
    [h,p] = fisher_exact(data,alpha,1)
end



プログラム例−実行結果

>> exact_test

p =
   0.0059

h =
    1

p =
   0.0081

h =
    1



fisher_exact()関数の実装

  • fisher_exact.m
% ---------------------------------------------------------------
% フィッシャーの正確確率検定
% Fisher's exact test.
% 引数:
%   data  : データ値のベクトル(2 * 2)
%           data = [a b; c d]
%   alpha : 有意水準
%   both  : 0 片側検定
%           1 両側検定
% 返り値:
%   h     : 0 帰無仮説は採択される → 2要因は独立でないとはいえない
%           1 帰無仮説は棄却される → 2要因は独立ではない
%   allp  : 生起確率
% ---------------------------------------------------------------
function [h,allp] = fisher_exact(data, alpha, both)

    h = 0;
    allp = 0.0;
    % +---------------+--------+
    % |    a     b    | sum_ab |
    % |    c     d    | sum_cd |
    % +---------------+--------+
    % | sum_ac sum_bd |        |
    % +---------------+--------+
    a = data(1,1);
    b = data(1,2);
    c = data(2,1);
    d = data(2,2);
    sum_ab = a + b;
    sum_cd = c + d;
    sum_ac = a + c;
    sum_bd = b + d;

    % 実際の観測値の正確な生起確率を得る
    p0 = get_exact_p(a,b,c,d);
    s0 = a*d - b*c;

    % aは 0〜小さい方の合計値まで推移
    index = 0;
    if(sum_ab <= sum_ac)
        for a=0:sum_ab
            index = index + 1;
            b = sum_ab - a;
            c = sum_ac - a;
            d = sum_cd - c;
            % 正確な生起確率を得る
            p(index) = get_exact_p(a,b,c,d);
            s(index) = a*d - b*c;
        end
    else
        for a=0:sum_ac
            index = index + 1;
            b = sum_ab - a;
            c = sum_ac - a;
            d = sum_cd - c;
            % 正確な生起確率を得る
            p(index) = get_exact_p(a,b,c,d);
            s(index) = a*d - b*c;
        end
    end
    number = index;

    % 実際の観測値よりも極端な場合の生起確率の合計を求める
    for index=1:number
        % 片側検定では(sとs0が同符号でかつ | s | ≧ | s0 |)の生起確率の合計
        if(both == 0)
            sflag = 0;
            % 同符号なら sflag = 1
            if((s0 >= 0 && s(index) >= 0) || (s0 < 0 && s(index) < 0))
                sflag = 1;
            end
            if((sflag == 1) && (abs(s(index)) >= abs(s0)))
                allp = allp + p(index);
            end
        % 両側検定では(| s | ≧ | s0 |)の生起確率の合計
        else
            if(abs(s(index)) >= abs(s0))
                allp = allp + p(index);
            end
        end
    end

    % 生起確率が有意水準以下
    if(allp <= alpha)
        h = 1
    end
end

% ---------------------------------------------------------------
% 正確な生起確率を得る
% 引数:
%   a, b, c, d  : データ値(2 * 2)
% 返り値:
%   p           : 生起確率
% ---------------------------------------------------------------
function p = get_exact_p(a,b,c,d)

    % prod(1:n)は nの階乗の計算
    n = a + b + c + d;
    d1 = prod(1:a+b) * prod(1:c+d) * prod(1:a+c) * prod(1:b+d);
    d2 = prod(1:n) * prod(1:a) * prod(1:b) * prod(1:c) * prod(1:d);
    p = d1 / d2;
end

MATLABによるカイ二乗検定

  • Chi-square goodness-of-fit test.
  • chi2gof()関数を使用する。詳細は、ヘルプ参照。



主な引数

x          : データ値のベクトル
             多次元にする方法が不明。とりあえず、一次元で計算する。
             N = (行の数 * 列の数)
'ctrs'     : ビンの中央値ベクトル
'frequency': 観測値ベクトル
'expected' : 期待値ベクトル
'nparams'  : (N-1-正しい自由度)を指定すること
             正しい自由度は以下の式で求められる。
             正しい自由度 = (行の数-1) * (列の数-1)
             nparamsを設定しないとき、デフォルトの自由度は(N-1)となる。
             このギャップをnparamsで調整するとよい。
'alpha'    : 有意水準。デフォルトの有意水準は 0.05である。



返り値

h   : 0 帰無仮説は採択される → 差はない
      1 帰無仮説は棄却される → 差はないとは言えない
p   : 生起確率
st  : STATS構造体
      chi2stat  カイ二乗値
      df        自由度
      edges     ビンの境界ベクトル
      O         観測値(ビンごとのカウント)
      E         期待値(ビンごとのカウント)



プログラム例

% ---------------------------------------------------------------
% カイ二乗検定
% Chi-square goodness-of-fit test.
%
% Web独習教材「ハンバーガーショップで学ぶ楽しい統計学」より、
% カイ二乗検定の計算。
% http://kogolab.jp/elearn/hamburger/chap3/sec0.html
% ---------------------------------------------------------------
function chi2_test()

x = [0 1 2 3]; 
f = [435 165 265 135]; 
e = [420 180 280 120];

[h,p,st] = chi2gof(x,'ctrs',x,'frequency',f,'expected',e,...
    'nparams',2,'alpha',0.05)
end



プログラム例−実行結果

>> chi2_test

h =
    1

p =
    0.0346

st = 
    chi2stat: 4.4643
          df: 1
       edges: [-0.5000 0.5000 1.5000 2.5000 3.5000]
           O: [435 165 265 135]
           E: [420 180 280 120]

MATLABでファイルをインポートする方法

tab区切りtext fileのインポート

textscan()関数
テキストヘッダを含んだtab区切りtextファイルをインポートできる。文字列と数値が混在したデータを、セル配列に読み込める。

% テキストファイルからデータを読み込む。
% タブをデリミッタとし、ヘッダーラインを head_num行、読み飛ばす。

% ファイルオープン
fin  = fopen(file_in);
head_num = 1;
in_cell = textscan(fin,...
    '%s %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %d %s %s %s %s %s %s %s %s',...
    'delimiter', '\t', 'headerlines', head_num);
fclose(fin);
     :
% 同じデータタイプのセル配列を、単一行列に変換する場合(全ての行)
oneline_val = cell2mat(in_cell(1, 2:21));

% セルの個々のデータにアクセスする場合
nc = in_cell{field_no}(line_no);



dlmread()関数
テキストヘッダを含んだtab区切りtextファイルから、数値データをインポートできる。データ部(ファイルの一部の領域)に文字列が混在したデータは読み込めない。そうでなければ、この関数を使用した方が記述が簡単である。

% テキストファイルから数値データを読み込む。
% タブをデリミッタとし、(R行,C列)以降を読み込む。
% 左上を(0,0)とする。例えば、(0,2)なら1行3列目から。
% 読み込まれたデータのcolsは1列多い(?)ので、使用するときは気をつけること。

datas = dlmread(file_in, '\t', R, C);
[rows, cols] = size(datas);
for line_no = 1:rows
    values1 = datas(line_no,1:(end - 1));
        :
end

% テキストファイルから数値データを読み込む。
% タブをデリミッタとし、range = [R1 C1 R2 C2]の範囲を読み込む。
% 左上を(0,0)とする。(R1,C1)は左上、(R2,C2)は右下の座標。

datas = dlmread(file_in, '\t', range);



fgetl()関数
fgetl()関数を使用して、ファイルから1行ずつ読み込むことができる。ヘッダー部や列の先頭の文字列のみを読み込むときに便利である。

% ファイルオープン
fin = fopen(file_in);
% ヘッダー部読み込み
rem = fgetl(fin);

% トークンに分ける。ただし、この方法では1列多くなる。
% 列数が分かっている場合は、for k = 1:10 のように数を指定してループするとよい。
k = 1;
while true
    [title{k}, rem] = strtok(rem, '	');    % ' '内はタブ等のdelimiter
    if isempty(title{k}),  break;  end
    k = k + 1;
end

% データ部読み込み
line_no = 1;
while(1)
    tline = fgetl(fin);
    if ~ischar(tline), break, end
    [token, rem] = strtok(tline, '	');
    str1{line_no} = token(1:end);          % 1列目の文字列
    str2{line_no} = strtok(rem, '	');    % 2列目の文字列
    line_no = line_no + 1;
end
fclose(fin);



xls fileのインポート

xlsread()関数
EXCELで変換したxlsファイルを読み込むことができる。ただし、1行が256列以上のデータはEXCELで読み込めないので、使用できない。データを文字列や数値ごとに出力してくれるので便利である。

% xlsreadは、次の3項目を別々に出力する。
%   datas   : 数値データ
%   strs    : 文字列データ
%   rowData : 圧縮されていないセルの内容

[datas, strs, rowData] = xlsread(file_in);
[rows, cols] = size(datas);
for line_no = 1:rows
    id = datas(line_no,1);
end

PerlによるKEGGデータベースへのアクセス

環境変数の設定

環境変数HTTP_proxyを設定する。
ただし、環境変数は、言語により大文字・小文字の区別があるので注意すること。

  • HTTP_proxy - Perlの設定
  • http_proxy - BioRubyの設定
.cshrc
    setenv HTTP_proxy [プロキシのURI]

.bashrc
    export HTTP_proxy=[プロキシのURI]

.profile
    HTTP_proxy=[プロキシのURI]
    export HTTP_proxy



公式サイト



KEGGデータベースへのアクセス(KEGG API使用)

KEGG APIメソッド



KEGG APIの使用例
  • 大腸菌の b0002 遺伝子と最も相同性の高い遺伝子を、Smith-Waterman スコアの高い順に 5 個検索して表示するプログラム

  • Smith-Waterman.plの内容

    #!/usr/bin/env perl
      
    use SOAP::Lite;
      
    $wsdl = 'http://soap.genome.jp/KEGG.wsdl';
    $serv = SOAP::Lite -> service($wsdl);
      
    $start = 1;
    $max_results = 5;
      
    $top5 = $serv->get_best_neighbors_by_gene('eco:b0002', $start, $max_results);
      
    foreach $hit (@{$top5}) {
        print "$hit->{genes_id1}\t$hit->{genes_id2}\t$hit->{sw_score}\n";
    }

  • KEGG の SSDB データベースを使って KEGG の GENES に含まれている各生物種の中から最も相同性の高い遺伝子を探すプログラム


  • eco.plの内容

    #!/usr/bin/env perl
    
    use SOAP::Lite;
    
    $wsdl = 'http://soap.genome.jp/KEGG.wsdl';
    $results = SOAP::Lite
          -> service($wsdl)
          -> list_pathways("eco");
    
    foreach $path (@{$results}) {
        print "$path->{entry_id}\t$path->{definition}\n";
    }

BioRubyによるKEGGデータベースへのアクセス

環境変数の設定

環境変数SOAP_USE_PROXY, http_proxyを設定する。
ただし、環境変数は、言語により大文字・小文字の区別があるので注意すること。

  • http_proxy - BioRubyの設定
  • HTTP_proxy - Perlの設定
.cshrc
    setenv SOAP_USE_PROXY on
    setenv http_proxy [プロキシのURI]

.bashrc
    export SOAP_USE_PROXY=on
    export http_proxy=[プロキシのURI]

.profile
    SOAP_USE_PROXY=on
    export SOAP_USE_PROXY
    http_proxy=[プロキシのURI]
    export http_proxy



公式サイト



KEGGデータベースへのアクセス(KEGG API使用)



BioRubyの使用方法
BioRubyシェルを起動して、BioRubyコマンド(xxx)を実行する方法

% bioruby
bioruby> xxx

ファイル(xxx.rb)を編集して、rubyから実行する方法

% ruby xxx.rb



データベース情報(メタ情報)の取得
対象データベース : SSDB, PATHWAY, GENES, LIGAND

  • keggdbs / list_databases()

  • KEGG を提供しているゲノムネットで現在利用できるデータベースの一覧を出力する。

    例)リスト出力のBioRubyシェルコマンド

    bioruby> keggdbs

    例)リスト出力のプログラム list_databases.rbの内容

    #!/usr/bin/env ruby
    #require 'pp'
    require 'bio'
     
    serv = Bio::KEGG::API.new
     
    list = serv.list_databases()
    #pp list
    list.each do |elem|
        print elem.entry_id,"\t",elem.definition,"\n"
    end

  • keggorgs / list_organisms()

  • KEGG に含まれている生物種(org)のリスト



    例)リスト出力のBioRubyシェルコマンド

    結果はソートされる。
    
    bioruby> keggorgs

    例)リスト出力のプログラム list_organisms.rbの内容

    結果はソートされない。
    
    #!/usr/bin/env ruby
    #require 'pp'
    require 'bio'
     
    serv = Bio::KEGG::API.new
     
    list = serv.list_organisms()
    #pp list
    list.each do |elem|
        print elem.entry_id,"\t",elem.definition,"\n"
    end

  • keggpathways(org) / list_pathways(org)

  • KEGG に含まれている指定した生物(hsa)のパスウェイのリスト



    例)リスト出力のBioRubyシェルコマンド

    bioruby> keggpathways("hsa")

    例)リスト出力のプログラム list_pathways.rbの内容

    #!/usr/bin/env ruby
    #require 'pp'
    require 'bio'
     
    serv = Bio::KEGG::API.new
     
    list = serv.list_pathways("hsa")
    #pp list
    list.each do |elem|
        print elem.entry_id,"\t",elem.definition,"\n"
    end



DBGETシステムに対するメソッド
ゲノムネットのDBGETのコマンドをそのまま実行できる。コマンドとしても、rbファイル上でも、使用可能。
  • binfo(string)

  • 指定したデータベースのエントリ数や更新日など詳しい最新情報を返す。

    • 返り値は"\n"区切りstring



    例)BioRubyシェル上でのメソッドの実行

    結果をファイルに保存する。
    
    bioruby> str = binfo('pathway')
    bioruby> savefile "binfo.txt", str

    例)プログラムtest_binfo.rbの内容

    #!/usr/bin/env ruby
    require 'bio'
     
    serv = Bio::KEGG::API.new
    str = serv.binfo('')
    puts str

  • bfind(string)

  • データベースに対するキーワード検索することができる。データベース名とキーワード(100個以下)を指定する。

    • 返り値は"\n"区切りstring



    例)BioRubyシェル上でのメソッドの実行

    結果を画面に出力する。
    
    bioruby> str = bfind("gb E-cadherin human")
    bioruby> puts str

  • bget(string)

  • 指定したdb:entry_idのデータベースエントリを返す。コマンドラインオプションを文字列で渡す。一度に取得できるエントリの数は100個以下。

    • 返り値は"\n"区切りstring



    例)BioRubyシェル上でのメソッドの実行

    結果を画面に出力する。
    
    bioruby> str = bget("eco:b0002 bsu:BG10065 cpd:C00209")
    bioruby> puts str

  • btit(string)

  • 指定したentry_id(100個以下)に対応するdefinitionを返す。

    • 返り値は"\n"区切りstring definition "\n"



    例)BioRubyシェル上でのメソッドの実行

    結果を画面に出力する。
    
    bioruby> str = btit("hsa:1798 mmu:13478 dme:CG5287-PA cel:Y60A3A.14")
    bioruby> puts str

  • bconv(string)

  • 外部データベースのIDを、KEGGのIDに変換する。

    • 返り値は"\n"区切りstring prefix:ID "\t" KEGG_prefix:KEGG_ID "\n"



    対応データベース

        外部データベース  データベース名の prefix
        ----------------  -----------------------
        NCBI GI           ncbi-gi:
        NCBI GeneID       ncbi-geneid:
        GenBank           genbank:
        UniGene           unigene:
        UniProt           uniprot:
        OMIM              omim:

    例)プログラムtest_pconv.rbの内容

    #!/usr/bin/env ruby
    require 'bio'
     
    serv = Bio::KEGG::API.new
    str = serv.bconv("ncbi-gi:10047086 ncbi-geneid:14751")
    puts str



LinkDB
  • get_linkdb_by_entry(entry_id, db, start, max_results)

  • 指定したentry_idから直接または間接的にリンクされているエントリの経路を、dbで指定したデータベースにたどれるまで検索する。

    • 返り値はArrayOfLinkDBRelation



    例)プログラムget_linkdb_by_entry.rbの内容

    #!/usr/bin/env ruby
    #require 'pp'
    require 'bio'
     
    serv = Bio::KEGG::API.new
     
    list = serv.get_linkdb_by_entry('eco:b0002', 'pathway', 1, 10)
    #pp list
    list.each do |elem|
        print elem.entry_id1,"\t",elem.entry_id2,"\t",elem.type,"\t",elem.path,"\n"
    end



KEGG APIメソッド
データベース情報取得以外のKEGG APIのメソッドをBioRubyシェル上で実行するには、keggapiに続けて呼び出せばよい。

  • 利用可能なメソッドの一覧は、KEGG API Japanese manualを参照のこと。
  • 返り値の型とその内部構造は、ppコマンドで確認できる。



例)BioRubyシェル上でのメソッドの実行

結果を画面に出力する。

bioruby> list = keggapi.get_genes_by_pathway("path:hsa05210")
bioruby> pp list
bioruby> puts list



BioRuby Tips

FixnumのPublicメソッドの一覧出力

$ ruby -e 'p 1.type; p 1.methods'



メソッドの返り値のチェック方法
ppクラスを使用して、メソッドの返り値の型とその内部構造をチェックできる。



例)ppクラス使用例

test_pp.rbの内容

#!/usr/bin/env ruby
require 'pp'
require 'bio'
 
serv = Bio::KEGG::API.new
list = serv.get_elements_by_pathway('path:hsa05210')
pp list