今日の捨てコード

一対一対応のデータなら対応付けは簡単。しかし、実際の研究活動においてはそんなことばかりでなく、特定のIDに対応づくデータが複数あり、それをまとめて表示することが必要な場合はままある。例えば、特定の遺伝子にアノテートされた機能情報などがそれである。1つの遺伝子について機能情報が綺麗にまとまっていれば対応付けも楽なのだが、そんなことはない。

そこで以下のような捨てコードで、同一のIDにアノテートされた機能情報をまとめて人間が見やすい**かたちに整形する必要があったりする。入力とするデータはID順にsortされている必要はないが、重複があるとその分、出てきた結果が見づらくなるので [shell] sort -u go_annotation.txt > go_annotation-unique.txt [/shell] などとして重複を除いておくべき。

1007_s_at ATP binding 1007_s_at collagen binding 1007_s_at metal ion binding 1007_s_at protein binding

のような入力データを処理して

1007_s_at ATP binding / collagen binding / metal ion binding / protein binding

のように同じIDのものは一行にまとめてくれるようにするには以下のようなPerlスクリプトで実現可能である。 [perl] while() { chomp; my($id,$desc)=split(/t/); if(defined($descof{$id})) { $descof{$id} .= " / $desc"; } else { $descof{$id} = "$desc"; } } foreach my $id (keys %descof) { print "$idt$descof{$id}n"; } [/perl] whileのループ(1-9行目)で行ごとに処理し、chompのおまじない(2行目)の次に3行目でタブ区切りのデータをカラムごとに分割して変数に入力(1カラム目は$id、2カラム目は$desc)している。4-8行目の分岐処理がアノテーション情報をIDごとに連結していくパートで、初出の場合はそのまま(7行目)、既出の場合は先頭に' / 'を付けて連結する処理(5行目)となっている。9-11行目でIDごとに連結したIDとアノテーションの対応を出力している。

もちろん、この結果出てきたデータだけで何かができるわけでなく、その他のデータと合わせることでこの種のデータが研究者によるcurationの際に威力を発揮するということは言うまでもない。


Written by bonohu in misc on 金 24 1月 2014.