Rubyで表計算を扱う応用例としてアミノ酸のデータベースを作ってみた。
ファイル名: aminoacid.rb(送信の関係で全角でevalと書いているところは半角英数に直して使ってください。) data = <<END Alanine , Ala, A, nonpolar, neutral , 1.8 Arginine , Arg, R, polar , basic (strongly), -4.5 Asparagine , Asn, N, polar , neutral , -3.5 Aspartic acid, Asp, D, polar , acidic , -3.5 Cysteine , Cys, C, nonpolar, neutral , 2.5 Glutamic acid, Glu, E, polar , acidic , -3.5 Glutamine , Gln, Q, polar , neutral , -3.5 Glycine , Gly, G, nonpolar, neutral , -0.4 Histidine , His, H, polar , basic (weakly) , -3.2 Isoleucine , Ile, I, nonpolar, neutral , 4.5 Leucine , Leu, L, nonpolar, neutral , 3.8 Lysine , Lys, K, polar , basic , -3.9 Methionine , Met, M, nonpolar, neutral , 1.9 Phenylalanine, Phe, F, nonpolar, neutral , 2.8 Proline , Pro, P, nonpolar, neutral , -1.6 Serine , Ser, S, polar , neutral , -0.8 Threonine , Thr, T, polar , neutral , -0.7 Tryptophan , Trp, W, nonpolar, neutral , -0.9 Tyrosine , Tyr, Y, polar , neutral , -1.3 Valine , Val, V, nonpolar, neutral , 4.2 END table = data.split(/\n/).collect{|x| x.split(/,/)}. collect{|x| {:name=>x[0], :let3=>x[1], :let1=>x[2], :polarity=>x[3], :acidity=>x[4], :hydropathy=>x[5]} } class Array def dump(label = 'name let3 let1 polarity acidity hydropathy') format = 'print ' + label.split(/ /).collect{|x| 'x[:'+x+']'}.join('," ",') + ', "\n"' self.each{|x| eval format} end end loop do begin print "Amino Acids> " line = gets eval(line, TOPLEVEL_BINDING) rescue SyntaxError, LoadError, StandardError STDERR.puts "Warning: #$!" end end 使い方だが、ruby aminoacid.rb で実行すると、Amino Acids> というプロンプトが出るので、table.dump とするとアミノ酸のテーブルのデータがすべて表示される。 Amino Acid>table.dump dump メソッドにカラム名の引数をつけるとそのカラムのデータだけを表示する。 Amino Acids> table.dump('name let1') つぎのようにするとテーブルのカラム名を表示できる。 Amino Acids> puts table[0].keys sort メソッドを使うとカラムのデータでソートできる。 Amino Acids> table.sort{|x,y| x[:let1] <=> y[:let1]}.dump select メソッドで条件に合うデータだけを抽出できる。 Amino Acids> table.select{|x| x[:acidity] =~ /basic/}.dump 数値データも処理できる Amino Acids> table.select{|x| x[:hydropathy].to_i > 0}.dump プログラムを終了するときは、exit と入力する。 Amino Acid> exit コマンドといっても、Rubyの文をそのまま実行しているだけだが、SQLでできるたいていのことを、Enumerable モジュールの関数でやってのけることができる。Ruby をプログラムを記述するだけでなく、対話的に実行してデータの処理をするコマンドとして使うことができる。
by tnomura9
| 2008-09-12 00:19
| Ruby
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||