2012年9月11日から15日に掛けての作業メモを整理したものです

#contents

* FlyBaseの文献情報を手掛りにしてコンストラクトの記述などを取得する [#g3f73829]

FlyBaseにある文献の情報のページ(FBrf*******.html)には、
abstract などように文献には当然ある情報に加え、
その論文で使われた遺伝子、allele、コンストラクト、挿入の情報も、
整理され、掲出されています。

そこで、文献にあるコンストラクトや挿入の情報を取得するための
作業をしたので、記録を残します。
今回は、コンストラクトがどのようなものか、つまり、コンストラクトに
使われた allele がどのようなものかが、業務で必要になり行った作業です。

 文献情報
 ↓
 コンストラクトや挿入情報
 ↓
 コンストラクトのページから使われた allele 情報を抽出

が基本戦略です。

★ FlyBase の [[precomputed files>http://flybase.org/static_pages/docs/datafiles.html]] では得られない情報。
かといって、FlyBaseの全情報を取得してデータベースを構築するのは
手間が掛かりすぎ。
そこで、htmlファイルとしてデータを取得し、
必要な情報を抽出することにした。
2012年9月22日追記

* 文献情報取得 [#gc0dad87]
** FlyBaseより fbrf_pmid_fb_2012_05.tsv を取得 [#uf12a8dd]
** 文献情報取得 [#gc0dad87]
*** FlyBaseより fbrf_pmid_fb_2012_05.tsv を取得 [#uf12a8dd]

Files → Current Release からダウンロード~
具体的にはココ:http://flybase.org/static_pages/downloads/bulkdata7.html


** FBrfファイル(文献)の取得 [#qae5392b]
*** FBrfファイル(文献)の取得 [#qae5392b]

fbrf_pmid_fb_2012_05.tsv から 「FBrf******」とあるものを取り出し加工

runreference_all.sh: 56526 行

 wget http://flybase.org/reports/FBrf0003114.html
 wget http://flybase.org/reports/FBrf0011208.html
 wget http://flybase.org/reports/FBrf0012780.html
 ...


 $ cd FBrf
 $ sh runreference_all.sh

2度止まったので、3階に分けて実行(詳細省略)。~
すべてが取得できたわけではないようだ。~
56,495 files~
sh fileでは、56,526 取得のつもりだった。

*コンストラクト、挿入情報の取得 [#d8cd0dba]
** FBrfファイルから、FBti、FBtpの情報を抽出 [#a9297d10]
**コンストラクト、挿入情報の取得 [#d8cd0dba]
*** FBrfファイルから、FBti、FBtpの情報を抽出 [#a9297d10]

- FBti: 挿入の情報
- FBtp: コンストラクトの情報

 $ cd ..
 $ grep FBti ./FBrf/* > grep_ti.txt
 $ grep FBtp ./FBrf/* > grep_tp.txt

FBfr と FBti、因子 の対応にエディタを使って編集する(タブ区切り)

grep_ti.txt: 37069 行

LEFT:
,FBrf0037054.html,FBti0014771.html,I{}w<sup>IR1</sup>
,FBrf0037612.html,FBti0002823.html,3S18{}w<sup>a4</sup>
,FBrf0037612.html,FBti0002388.html,copia{}w<sup>a</sup>
,...,,

grep_tp.txt: 71224 行

LEFT:
,FBrf0038720.html,FBtp0000035.html,P{6.1}
,FBrf0038720.html,FBtp0000036.html,P{ry1}
,FBrf0038720.html,FBtp0000037.html,P{ry3}
,...,,

** FBtiファイル(挿入)の取得 [#r9802807]
*** FBtiファイル(挿入)の取得 [#r9802807]

FBti を取得するために、grep_ti.txt を加工し .sh ファイルを作成~
FBti*******.html が取得できていないものがあるので、少なくなっている。

runti_temp.sh: 37055行
 wget http://flybase.org/reports/FBti0014771.html
 wget http://flybase.org/reports/FBti0002823.html
 wget http://flybase.org/reports/FBti0002388.html
 ...

複数の文献で同一の挿入が扱われることがある~
FBtiファイルはひとつ取得すればよい~
そこで、重複を除く~
shファイルを作る前のFBtiファイル名から重複を除いてももちろん可
(作業手順はほとんど同じ)

unique.pl
 #!perl
 
 open(IFILE, $ARGV[0]);
 @myline = <IFILE>;
 
 # http://ameblo.jp/debugme/entry-10505621785.html
 
 my %hash   = map { $_, 1 } @myline;
 my @unique = keys %hash;
 
 print @unique;

 $ perl unique.pl runti_temp.sh > runti.sh 

runti.sh: 20373 行
 wget http://flybase.org/reports/FBti0003892.html
 wget http://flybase.org/reports/FBti0014868.html
 wget http://flybase.org/reports/FBti0114075.html
 ...

 $ cp runti.sh ./FBti
 $ cd FBti
 $ sh runti.sh

ファイル数: 20373 

 $ cd ..
 $ grep FBtp ./FBti/* | grep -v ".png" > grep_ti2tp.txt

FBti と 因子 の対応にエディタを使って編集する

grepが複数拾って来たので、重複を除く

 $ perl unique.pl grep_ti2tp.txt > grep_ti2tp_uniq.txt

ソートしてFBtiの順にしておく

grep_ti2tp_uniq.txt: 18869行

LEFT:
,FBti0000040.html,FBtp0000078.html,P{hsneo}
,FBti0000046.html,FBtp0000078.html,P{hsneo}
,FBti0000124.html,FBtp0000242.html,P{?2-3} ← デルタが文字化け
,...,,

** FBtpファイル(コンストラクト)の取得 [#ica8b31c]
*** FBtpファイル(コンストラクト)の取得 [#ica8b31c]
grep_ti2tp_uniq.txt と grep_tp.txt から
FBtp*******.html
だけを抜き出し、重複を取り除き(上のperlプログラムを使って)、
wget でページを取得するshファイルを作る

runtp.sh: 33605行
 wget http://flybase.org/reports/FBtp0000001.html
 wget http://flybase.org/reports/FBtp0000002.html
 wget http://flybase.org/reports/FBtp0000003.html
 ...

 $ cp runtp.sh ./FBtp
 $ cd FBtp
 $ sh runtp.sh

1度止まったので、2度に分けて実行(詳細省略)

33604 files

*コンストラクトのファイルから必要な記述を取得、編集 [#n8c0c826]
** FBtpファイルに記述のある「FlyBaseに登録されている系統の数」を取り出す [#r3f5488f]
**コンストラクトのファイルから必要な記述を取得、編集 [#n8c0c826]
*** FBtpファイルに記述のある「FlyBaseに登録されている系統の数」を取り出す [#r3f5488f]

「Stocks Listed in FlyBase」とある表示の下の1行下(改行された下の行)に
系統数が記述されている~
また、「Stocks」との語はここしかない~
そこで、「Stocks」を含む行ともう1行取得し、「Stocks」を含む行を捨てる

 $ grep -A 1 Stocks ./FBtp/* | grep -v Stocks | grep -v "\-\-" > tp_num_stocks.txt

33654 行

FBtp と 系統数の対応にエディタを使って編集、念のためソートしておく

tp_num_stocks.txt: 33654 行

LEFT:
,FBtp0000001.html,0
,FBtp0000002.html,0
,FBtp0000003.html,0
,...,

** コンストラクトの説明を取り出す [#z0471232]
*** コンストラクトの説明を取り出す [#z0471232]

FBtp*******.html ファイルの中の記述で、Component Alles の中(下)の 
Molecular data の内容を取り出す~
因子の説明が書いてあるのはここ~
人間が読むにはこれが適切だと思う~
ひとつのファイルの中に情報がひとつとは限らないので、取り出した後
まとめる必要がある

Molecular data と書いてある3行下に記述がある
(grep で余分に5行ずつ取って来ている)~
その記述は「[空白]<div class="twocol_c_item_one">」に続く

 $ grep -A 4 "Molecular data" ./FBtp/* | grep "twocol_c_item_one" > grep_tp_Molecular_data.txt

FBtp と 系統数の対応にエディタを使って編集、念のためソートしておく

grep_tp_Molecular_data.txt: 45544 行

LEFT:
,FBtp0000002.html,Construct: 2.1kb SalI-BglII fragment including most of the <a href="/search/simple/symbol/Cp18">Cp18</a> transcription unit.
,FBtp0000002.html,Construct: 8.1kb SalI fragment that contains <a href="/search/simple/symbol/ry">ry</a><sup>+</sup> function.
,FBtp0000003.html,Construct: Included in 2.7kb genomic BamHI-SalI fragment.
,...,

FBtp*******.html ファイルに2つ以上の Molecular data があるものをまとめる~
htmlのタグを残したままので、ふたつ以上つなげるときには、<br>タグを挟むことにした

merge_md.pl
 #!perl
 
 open(IFILE, $ARGV[0]);
 $num=0;
 
 # 各行をそれぞれ配列に入れる
 while(<IFILE>){
     chop;
     split /[\t]/;
 
     $fbtp[$num] = $_[0];
     $moldata[$num] = $_[1];
 
     $num++;
 }
 
 $total = $num;
 
 # ひとつ下の行とFBtp*******.htmlが同じならば、ひとつ下のMolecular data
 # にまとめてしまう
 # 上側のFBtp*******.html(の情報) は取る(""を代入する)
 # ひとつのファイルにはMolecular dataはたくさんないので、10個まで見るだ
 # けにする(スピードアップのため)
 
 for($num1=0; $num1<$total; $num1++){
     for($num2=($num1+1); $num2<($num1+10); $num2++){
 	if( !($fbtp[$num1] cmp $fbtp[$num2])){
 	    $moldata[$num2] = $moldata[$num1] . "<br>" . $moldata[$num2];
 	    $fbtp[$num1] = "";
 	}
     }
 }
 
 # FBtp*******.html が書いてあるものだけ出力する
 for($num1=0; $num1<$total; $num1++){
     if( $fbtp[$num1] cmp "" ){
 	print $fbtp[$num1]; 
 	print "\t";
 	print $moldata[$num1];
 	print "\n";
     }
 }

 $ perl merge_md.pl grep_tp_Molecular_data.txt > tp_Molecular_data.txt

tp_Molecular_data.txt: 32485 行

LEFT:
,FBtp0000002.html,Construct: 2.1kb SalI-BglII fragment including most of the <a href="/search/simple/symbol/Cp18">Cp18</a> transcription unit.&color(orange){<br>};Construct: 8.1kb SalI fragment that contains <a href="/search/simple/symbol/ry">ry</a><sup>+</sup> function.
,FBtp0000003.html,Construct: 2.7kb BamHI-SalI fragment including <a href="/search/simple/symbol/Cp18">Cp18</a>-<a href="/search/simple/symbol/Cp15">Cp15</a> transcription units.&color(orange){<br>};Construct: 8.1kb SalI fragment that contains <a href="/search/simple/symbol/ry">ry</a><sup>+</sup> function.<br>Construct: Included in 2.7kb genomic BamHI-SalI fragment.
,FBtp0000004.html,Construct: 7.2kb HindIII fragment that contains <a href="/search/simple/symbol/ry">ry</a><sup>+</sup> function.
,...,

*データのまとめ [#t4ce9510]
** 役者が揃ったので、データをひとつにまとめる [#t5632716]
**データのまとめ [#t4ce9510]
*** 役者が揃ったので、データをひとつにまとめる [#t5632716]

挿入のデータ(FBti)がreferenceにあったものは、Molecular dataを得るため
に FBtp (コンストラクト)を得たが、コンストラクトのデータがreferenceに
あったものはFbti(挿入)を得ていない~
また、名前は、コンストラクトと挿入と両方が参照できるとよい

そこで、grep_ti.txt と grep_ti2tp_uniq.txt から
 FBtr[tab]FBtp[tab]Name_tp[tab]FBti[tab]Name_ti
となったファイルを作る

merge_ti_tp.pl
 #!perl
 
 open(REFTIFILE, "grep_ti.txt");
 open(TI2TPFILE, "grep_ti2tp_uniq.txt");
 
 $num=0;
 
 # 各行をそれぞれ配列に入れる
 while(<REFTIFILE>){
     chop;
     split /[\t]/;
 
     $fbrf[$num] = $_[0];
     $fbti[$num] = $_[1];
     $nameti[$num] = $_[2];
 
     $num++;
 }
 
 $total = $num;
 
 while(<TI2TPFILE>){
     chop;
     split /[\t]/;
 
     $hashti2tp{$_[0]} = ($_[1] . "\t" . $_[2]);
 }
 
 for($num=0; $num<$total; $num++){
     print $fbrf[$num];
     print "\t";
     # FBtp*******.html がないと hash が空白を返すので\tを補う必要がある
     # そうしないと、桁がずれてしまう
     if( $hashti2tp{$fbti[$num]} ne ''){
 	print $hashti2tp{$fbti[$num]};
     } else {
 	print "\t";
     }
     print "\t";
     print $fbti[$num];
     print "\t";
     print $nameti[$num];
     print "\n";
 }

 $ perl merge_ti_tp.pl > merged_ti_tp.txt


merged_ti_tp.txt: 37069 行

LEFT:
,FBrf0037054.html,,,FBti0014771.html, I{}w<sup>IR1</sup>
,FBrf0037612.html,,,FBti0002823.html,3S18{}w<sup>a4</sup>
,FBrf0037612.html,,,FBti0002388.html,copia{}w<sup>a</sup>
,...(中略)...,,,,
,FBrf0038720.html,FBtp0000036.html,P{ry1},FBti0001356.html,P{ry1}10DE
,FBrf0038720.html,FBtp0000036.html,P{ry1},FBti0001357.html,P{ry1}23B
,FBrf0038720.html,FBtp0000036.html,P{ry1},FBti0001359.html,P{ry1}79E
,...,,,,

grep_tp.txt と merged_ti_tp.txtをひとつのファイルにする

 $ cat grep_tp.txt merged_ti_tp.txt > ref_tp_ti.txt

ref_tp_ti.txt: 108293 行

LEFT:
,FBrf0038720.html,FBtp0000035.html,P{6.1},,
,FBrf0038720.html,FBtp0000036.html,P{ry1},,
,FBrf0038720.html,FBtp0000037.html,P{ry3},,
,...(中略)...,,,,
,FBrf0037054.html,,,FBti0014771.html,I{}w<sup>IR1</sup>
,FBrf0037612.html,,,FBti0002823.html,3S18{}w<sup>a4</sup>
,FBrf0037612.html,,,FBti0002388.html,copia{}w<sup>a</sup>
,FBrf0037612.html,,,FBti0002387.html,FB{}w<sup>DZL</sup>
,FBrf0037612.html,,,FBti0002389.html,roo{}w<sup>bf</sup>
,FBrf0037612.html,,,FBti0002390.html,roo{}w<sup>sp1</sup>
,FBrf0038659.html,,,FBti0014154.html,HMS-Beagle{}Lcp3<sup>n1</sup>
,FBrf0038720.html,FBtp0000036.html,P{ry1},FBti0001356.html,P{ry1}10DE
,FBrf0038720.html,FBtp0000036.html,P{ry1},FBti0001357.html,P{ry1}23B
,FBrf0038720.html,FBtp0000036.html,P{ry1},FBti0001359.html,P{ry1}79E
,...,,,,

このファイルにストックの数、Molecular data を追加する

merge_all.pl
 #!perl
 
 open(REFTPTI, "ref_tp_ti.txt");
 open(MOLDAT, "tp_Molecular_data.txt");
 open(NUMSTOCKS, "tp_num_stocks.txt");
 
 $num=0;
 
 # 各行をそれぞれ配列に入れる
 while(<REFTPTI>){
     chop;
     split /[\t]/;
 
     # データがない場合に備え、初期化しておく
     $fbrf[$num] = "";
     $fbtp[$num] = "";
     $nametp[$num] = "";
     $fbti[$num] = "";
     $nameti[$num] = "";
 
 
     $fbrf[$num] = $_[0];
     $fbtp[$num] = $_[1];
     $nametp[$num] = $_[2];
     $fbti[$num] = $_[3];
     $nameti[$num] = $_[4];
 
     $num++;
 }
 
 $total = $num;
 
 while(<MOLDAT>){
     chop;
     split /[\t]/;
 
     $hashmoldat{$_[0]} = $_[1];
 }
 
 while(<NUMSTOCKS>){
     chop;
     split /[\t]/;
 
     $hashnumstocks{$_[0]} = $_[1];
 }
 
 # 見出し
 print "FBrf";
 print "\t";
 print "FBtp";
 print "\t";
 print "Name_tp";
 print "\t";
 print "FBti";
 print "\t";
 print "Name_ti";
 print "\t";
 print "Stocks";
 print "\t";
 print "Molecular_data";
 print "\n";
 
 
 for($num=0; $num<$total; $num++){
 
     print $fbrf[$num];
     print "\t";
     print $fbtp[$num];
     print "\t";
     print $nametp[$num];
     print "\t";
     print $fbti[$num];
     print "\t";
     print $nameti[$num];
     print "\t";
     print $hashnumstocks{$fbtp[$num]};
     print "\t";
     print $hashmoldat{$fbtp[$num]};
     print "\n";
 }

 $ perl merge_all.pl > ref_tp_ti_st_md.txt

ref_tp_ti_st_md.txt: 108293 行(見出し含む)

LEFT:
,FBrf,FBtp,Name_tp,FBti,Name_ti,Stocks,Molecular_data
,FBrf0038720.html,FBtp0000035.html,P{6.1},,,0,
,FBrf0038720.html,FBtp0000036.html,P{ry1},,,1,Construct: 8.1kb SalI fragment that contains <a href="/search/simple/symbol/ry">ry</a><sup>+</sup> function.<br>Included within an 8.2kb genomic SalI fragment.
,FBrf0038720.html,FBtp0000037.html,P{ry3},,,0,Construct: 8.1kb SalI fragment that contains <a href="/search/simple/symbol/ry">ry</a><sup>+</sup> function.<br>Included within an 8.2kb genomic SalI fragment.
,FBrf0038720.html,FBtp0000167.html,P{S11.4},,,0,Construct: 3.8kb SalI genomic fragment containing the <a href="/search/simple/symbol/Cp15">Cp15</a> and <a href="/search/simple/symbol/Cp18">Cp18</a> transcripts.<br>Construct: 3.8kb SalI genomic fragment containing the <a href="/search/simple/symbol/Cp15">Cp15</a> and <a href="/search/simple/symbol/Cp18">Cp18</a> transcripts.
,FBrf0038720.html,FBtp0000168.html,P{?25.1},,,0,Fragment containing a complete 2.9kb <a href="/search/simple/symbol/P-element">P-element</a>.
,FBrf0038720.html,FBtp0000166.html,P{?25.7},,,0,Fragment containing a complete 2.9kb <a href="/search/simple/symbol/P-element">P-element</a>.
,FBrf0038996.html,FBtp0000169.html,P{?12.20},,,0,Construct: 2.9kb fragment encompassing full length <a href="/search/simple/symbol/P-element">P-element</a>.
,FBrf0038996.html,FBtp0000168.html,P{?25.1},,,0,Fragment containing a complete 2.9kb <a href="/search/simple/symbol/P-element">P-element</a>.
,FBrf0038998.html,FBtp0000217.html,P{Ddc1/4},,,,
,...,,,,,,
(「?」はShift-JISでは文字化けするのでここでは書き替えた)

 $ sort ref_tp_ti_st_md.txt > ref_tp_ti_st_md_sorted.txt

ref_tp_ti_st_md_sorted.txt: 108293 行(見出し含む)

LEFT:
,FBrf,FBtp,Name_tp,FBti,Name_ti,Stocks,Molecular_data
,FBrf0037054.html,,,FBti0014771.html,I{}w<sup>IR1</sup>,,
,FBrf0037612.html,,,FBti0002387.html,FB{}w<sup>DZL</sup>,,
,FBrf0037612.html,,,FBti0002388.html,copia{}w<sup>a</sup>,,
,FBrf0037612.html,,,FBti0002389.html,roo{}w<sup>bf</sup>,,
,FBrf0037612.html,,,FBti0002390.html,roo{}w<sup>sp1</sup>,,
,FBrf0037612.html,,,FBti0002823.html,3S18{}w<sup>a4</sup>,,
,FBrf0038659.html,,,FBti0014154.html,HMS-Beagle{}Lcp3<sup>n1</sup>,,
,FBrf0038720.html,FBtp0000035.html,P{6.1},,,0,
,FBrf0038720.html,FBtp0000036.html,P{ry1},,,1,Construct: 8.1kb SalI fragment that contains <a href="/search/simple/symbol/ry">ry</a><sup>+</sup> function.<br>Included within an 8.2kb genomic SalI fragment.
,FBrf0038720.html,FBtp0000036.html,P{ry1},FBti0000963.html,P{ry1}R404.2,1,Construct: 8.1kb SalI fragment that contains <a href="/search/simple/symbol/ry">ry</a><sup>+</sup> function.<br>Included within an 8.2kb genomic SalI fragment.
,FBrf0038720.html,FBtp0000036.html,P{ry1},FBti0001356.html,P{ry1}10DE,1,Construct: 8.1kb SalI fragment that contains <a href="/search/simple/symbol/ry">ry</a><sup>+</sup> function.<br>Included within an 8.2kb genomic SalI fragment.
,...,,,,,,

一応の完成だが、ファイルが大きくて見づらい……
エクセル2007ならそのまま扱えるので、まいっか

|Today:&counter(today);|Yesterday:&counter(yesterday);|Total:&counter(); since 16 September 2012|

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS