Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Ohp Seijoen H20 07 Arraylist

1,893 views

Published on

Published in: Education, Technology
  • Be the first to comment

Ohp Seijoen H20 07 Arraylist

  1. 1. データ解析の基礎 ArrayList と ファイルの入力 2008年8月,データ解析の基礎,加藤,瀬々,金子. 1
  2. 2. 転写因子reb1に結合する配列 配列 頻度 丸山&阿久津,2007 2008年8月,データ解析の基礎,加藤,瀬々,金子. 2
  3. 3. 頻度行列計算プログラム再考 Test09i.java public class Test09i { public static void main( String[] args ){ String[] seqs; double[][] freqmat; seqs = new String[]{quot;GTATAAAAAGCGGquot;,quot;CTATAAAAGGCCCquot;,quot;GTATAAAGGGGCGquot;, quot;GTATATAAGCGCGquot;,quot;CTATAAAGGGGCCquot;,quot;GTATAAAGGCGGGquot;}; freqmat = comp_freqmat( seqs ); pri_freqmat( freqmat ); } } これまではすべてデータはプログラムに書き込んできた データが大量になったときプログラムを書き換えるのは大変 ファイルから入力するように修正しよう そうすれば,プログラムを大きく書き換えなくても済む! 2008年8月,データ解析の基礎,加藤,瀬々,金子. 3
  4. 4. ファイルからの文字列の読み込みを考える 入力ファイル 配列が何本入っているか分からない GTATAAAAAGCGG たとえば, CTATAAAAGGCCC int k; GTATAAAGGGGCG String[] seqs; k=0; とりあえず GTATATAAGCGCG seqs = new String[10]; CTATAAAGGGGCC while (ファイルの終わりに到達していない){ GTATAAAGGCGGG seqs[k]に1行読み込む; : k++ : } とすると,11行目に達したら破綻する これまで扱ってきた配列は,固定長 可変長の配列が必要なとき → コンテナ ArrayList<T> が便利 2008年8月,データ解析の基礎,加藤,瀬々,金子. 4
  5. 5. ArrayList<T> のメソッド Test10a.java プロジェクト名: test10 new ArrayList<T>() import java.util.*; オブジェクトを生成する public class Test10a { public static void main( String[] args ){ int i; .add(T x) ArrayList<String> v; 要素xを追加する v = new ArrayList<String>(); v.add( quot;zeroquot; ); .size() v.add( quot;onequot; ); v.add( quot;twoquot; ); 要素数を返す for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); .get( int i ) } 第i要素を返す } } 画面 [0]=zero [1]=one [2]=two 2008年8月,データ解析の基礎,加藤,瀬々,金子. 5
  6. 6. 計算過程 Test10a.java プロジェクト名: test10 スタック import java.util.*; public class Test10a { public static void main( String[] args ){ int i; ArrayList<String> v; v = new ArrayList<String>(); v.add( quot;zeroquot; ); v.add( quot;onequot; ); v.add( quot;twoquot; ); ヒープ for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); } } } 画面 2008年8月,データ解析の基礎,加藤,瀬々,金子. 6
  7. 7. 計算過程 Test10a.java プロジェクト名: test10 スタック import java.util.*; public class Test10a { public static void main( String[] args ){ i v int i; ArrayList<String> v; v = new ArrayList<String>(); v.add( quot;zeroquot; ); v.add( quot;onequot; ); v.add( quot;twoquot; ); ヒープ for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); } } } 画面 2008年8月,データ解析の基礎,加藤,瀬々,金子. 7
  8. 8. 計算過程 Test10a.java プロジェクト名: test10 スタック import java.util.*; public class Test10a { public static void main( String[] args ){ i v int i; ArrayList<String> v; v = new ArrayList<String>(); v.add( quot;zeroquot; ); v.add( quot;onequot; ); v.add( quot;twoquot; ); ヒープ for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); } } } 画面 2008年8月,データ解析の基礎,加藤,瀬々,金子. 8
  9. 9. 計算過程 Test10a.java プロジェクト名: test10 スタック import java.util.*; public class Test10a { public static void main( String[] args ){ i v int i; ArrayList<String> v; v = new ArrayList<String>(); v.add( quot;zeroquot; ); v.add( quot;onequot; ); v.add( quot;twoquot; ); ヒープ for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); } } } 画面 quot;zeroquot; 2008年8月,データ解析の基礎,加藤,瀬々,金子. 9
  10. 10. 計算過程 Test10a.java プロジェクト名: test10 スタック import java.util.*; public class Test10a { public static void main( String[] args ){ i v int i; ArrayList<String> v; v = new ArrayList<String>(); v.add( quot;zeroquot; ); v.add( quot;onequot; ); v.add( quot;twoquot; ); ヒープ for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); } } } 画面 quot;zeroquot; “onequot; 2008年8月,データ解析の基礎,加藤,瀬々,金子. 10
  11. 11. 計算過程 Test10a.java プロジェクト名: test10 スタック import java.util.*; public class Test10a { public static void main( String[] args ){ i v int i; ArrayList<String> v; v = new ArrayList<String>(); v.add( quot;zeroquot; ); v.add( quot;onequot; ); v.add( quot;twoquot; ); ヒープ for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); } } } 画面 quot;zeroquot; “onequot; “twoquot; 実際にはArrayList<T>は内部には配列を持っており,初期状態で長さ10の 配列を持っている.よって,このように要素を入れるごとに配列を伸ばすよ 2008年8月,データ解析の基礎,加藤,瀬々,金子. うなことはしない. 11
  12. 12. 計算過程 Test10a.java プロジェクト名: test10 スタック import java.util.*; public class Test10a { public static void main( String[] args ){ i=0 v int i; ArrayList<String> v; v = new ArrayList<String>(); v.add( quot;zeroquot; ); v.add( quot;onequot; ); v.add( quot;twoquot; ); ヒープ for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); } } } 画面 quot;zeroquot; “onequot; “twoquot; 2008年8月,データ解析の基礎,加藤,瀬々,金子. 12
  13. 13. 計算過程 Test10a.java プロジェクト名: test10 スタック import java.util.*; public class Test10a { public static void main( String[] args ){ i=0 v int i; ArrayList<String> v; v = new ArrayList<String>(); v.add( quot;zeroquot; ); v.add( quot;onequot; ); v.add( quot;twoquot; ); ヒープ for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); } } } 画面 quot;zeroquot; “onequot; “twoquot; 2008年8月,データ解析の基礎,加藤,瀬々,金子. 13
  14. 14. 計算過程 Test10a.java プロジェクト名: test10 スタック import java.util.*; public class Test10a { public static void main( String[] args ){ i=0 v int i; ArrayList<String> v; v = new ArrayList<String>(); v.add( quot;zeroquot; ); v.add( quot;onequot; ); v.add( quot;twoquot; ); ヒープ for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); } } } 画面 quot;zeroquot; [0]=zero “onequot; “twoquot; 2008年8月,データ解析の基礎,加藤,瀬々,金子. 14
  15. 15. 計算過程 Test10a.java プロジェクト名: test10 スタック import java.util.*; public class Test10a { public static void main( String[] args ){ i=0 v int i; ArrayList<String> v; v = new ArrayList<String>(); v.add( quot;zeroquot; ); v.add( quot;onequot; ); v.add( quot;twoquot; ); ヒープ for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); } } } 画面 quot;zeroquot; [0]=zero “onequot; “twoquot; 2008年8月,データ解析の基礎,加藤,瀬々,金子. 15
  16. 16. 計算過程 Test10a.java プロジェクト名: test10 スタック import java.util.*; public class Test10a { public static void main( String[] args ){ i=1 v int i; ArrayList<String> v; v = new ArrayList<String>(); v.add( quot;zeroquot; ); v.add( quot;onequot; ); v.add( quot;twoquot; ); ヒープ for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); } } } 画面 quot;zeroquot; [0]=zero “onequot; “twoquot; 2008年8月,データ解析の基礎,加藤,瀬々,金子. 16
  17. 17. 計算過程 Test10a.java プロジェクト名: test10 スタック import java.util.*; public class Test10a { public static void main( String[] args ){ i=1 v int i; ArrayList<String> v; v = new ArrayList<String>(); v.add( quot;zeroquot; ); v.add( quot;onequot; ); v.add( quot;twoquot; ); ヒープ for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); } } } 画面 quot;zeroquot; [0]=zero “onequot; “twoquot; 2008年8月,データ解析の基礎,加藤,瀬々,金子. 17
  18. 18. 計算過程 Test10a.java プロジェクト名: test10 スタック import java.util.*; public class Test10a { public static void main( String[] args ){ i=1 v int i; ArrayList<String> v; v = new ArrayList<String>(); v.add( quot;zeroquot; ); v.add( quot;onequot; ); v.add( quot;twoquot; ); ヒープ for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); } } } 画面 quot;zeroquot; [0]=zero [1]=one “onequot; “twoquot; 2008年8月,データ解析の基礎,加藤,瀬々,金子. 18
  19. 19. 計算過程 Test10a.java プロジェクト名: test10 スタック import java.util.*; public class Test10a { public static void main( String[] args ){ i=2 v int i; ArrayList<String> v; v = new ArrayList<String>(); v.add( quot;zeroquot; ); v.add( quot;onequot; ); v.add( quot;twoquot; ); ヒープ for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); } } } 画面 quot;zeroquot; [0]=zero [1]=one “onequot; “twoquot; 2008年8月,データ解析の基礎,加藤,瀬々,金子. 19
  20. 20. ArrayList<T>の制限 ArrayList<T> のTは参照型のみ 基本データ型(intやdouble)はダメ ArrayList<String> はOK ArrayList<int> はダメ ArrayList<double> はダメ Tに基本データ型を使う手段は? → ラッパークラスを使おう 2008年8月,データ解析の基礎,加藤,瀬々,金子. 20
  21. 21. 基本データ型のラッパークラス 基本データ型 参照型 int Integer double Double 基本データ型の char Character ラッパークラス boolean Boolean スタック なし String Test10b.java public class Test10b { public static void main( String[] args ){ Integer a; int b; ヒープ a = 5; b = a; } } 基本データ型はプリミティブ型とも呼ばれる 2008年8月,データ解析の基礎,加藤,瀬々,金子. 21
  22. 22. 基本データ型のラッパークラス 基本データ型 参照型 int Integer double Double 基本データ型の char Character ラッパークラス boolean Boolean スタック なし String Test10b.java a b public class Test10b { public static void main( String[] args ){ Integer a; int b; ヒープ a = 5; b = a; } } 基本データ型はプリミティブ型とも呼ばれる 2008年8月,データ解析の基礎,加藤,瀬々,金子. 22
  23. 23. 基本データ型のラッパークラス 基本データ型 参照型 int Integer double Double 基本データ型の char Character ラッパークラス boolean Boolean スタック なし String Test10b.java a b public class Test10b { public static void main( String[] args ){ Integer a; int b; ヒープ a = 5; b = a; 5 } } 基本データ型はプリミティブ型とも呼ばれる 2008年8月,データ解析の基礎,加藤,瀬々,金子. 23
  24. 24. 基本データ型のラッパークラス 基本データ型 参照型 int Integer double Double 基本データ型の char Character ラッパークラス boolean Boolean スタック なし String Test10b.java a b=5 public class Test10b { public static void main( String[] args ){ Integer a; int b; ヒープ a = 5; b = a; 5 } } 基本データ型はプリミティブ型とも呼ばれる 2008年8月,データ解析の基礎,加藤,瀬々,金子. 24
  25. 25. ArrayList<T> のメソッド Test10c.java プロジェクト名: test10 new ArrayList<T>() import java.util.*; オブジェクトを生成する public class Test10c { public static void main( String[] args ){ int i; .add(T x) ArrayList<Double> v; 要素xを追加する v = new ArrayList<Double>(); v.add( 10.0 ); .size() v.add( 10.1 ); v.add( 10.2 ); 要素数を返す for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); .get( int i ) } 第i要素を返す } } 画面 [0]=10.0 [1]=10.1 [2]=10.2 2008年8月,データ解析の基礎,加藤,瀬々,金子. 25
  26. 26. 計算過程 Test10c.java プロジェクト名: test10 スタック import java.util.*; public class Test10c { public static void main( String[] args ){ i v int i; ArrayList<Double> v; v = new ArrayList<Double>(); v.add( 10.0 ); v.add( 10.1 ); v.add( 10.2 ); ヒープ for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); } } } 画面 2008年8月,データ解析の基礎,加藤,瀬々,金子. 26
  27. 27. 計算過程 Test10c.java プロジェクト名: test10 スタック import java.util.*; public class Test10c { public static void main( String[] args ){ i v int i; ArrayList<Double> v; v = new ArrayList<Double>(); v.add( 10.0 ); v.add( 10.1 ); v.add( 10.2 ); ヒープ for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); } } } 画面 2008年8月,データ解析の基礎,加藤,瀬々,金子. 27
  28. 28. 計算過程 Test10c.java プロジェクト名: test10 スタック import java.util.*; public class Test10c { public static void main( String[] args ){ i v int i; ArrayList<Double> v; v = new ArrayList<Double>(); v.add( 10.0 ); v.add( 10.1 ); v.add( 10.2 ); ヒープ for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); } } } 画面 10.0 2008年8月,データ解析の基礎,加藤,瀬々,金子. 28
  29. 29. 計算過程 Test10c.java プロジェクト名: test10 スタック import java.util.*; public class Test10c { public static void main( String[] args ){ i v int i; ArrayList<Double> v; v = new ArrayList<Double>(); v.add( 10.0 ); v.add( 10.1 ); v.add( 10.2 ); ヒープ for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); } } } 画面 10.0 10.1 2008年8月,データ解析の基礎,加藤,瀬々,金子. 29
  30. 30. 計算過程 Test10c.java プロジェクト名: test10 スタック import java.util.*; public class Test10c { public static void main( String[] args ){ i v int i; ArrayList<Double> v; v = new ArrayList<Double>(); v.add( 10.0 ); v.add( 10.1 ); v.add( 10.2 ); ヒープ for ( i = 0; i < v.size(); i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+v.get(i)); } } } 画面 10.0 10.1 10.2 2008年8月,データ解析の基礎,加藤,瀬々,金子. 30
  31. 31. 準備完了 基本データ型 参照型 int Integer double Double char Character boolean Boolean なし String ArrayList<T> のメソッド,Tは参照型のみ許される メソッド名 説明 new ArrayList<T>() ArrayList<T>の実体を生成する add(T x) 要素 x を追加する size() 要素数を返す get( int i ) 第 i 要素を返す 2008年8月,データ解析の基礎,加藤,瀬々,金子. 31
  32. 32. やりたいこと Test09i.java public class Test09i { public static void main( String[] args ){ String[] seqs; double[][] freqmat; seqs = new String[]{quot;GTATAAAAAGCGGquot;,quot;CTATAAAAGGCCCquot;,quot;GTATAAAGGGGCGquot;, quot;GTATATAAGCGCGquot;,quot;CTATAAAGGGGCCquot;,quot;GTATAAAGGCGGGquot;}; freqmat = comp_freqmat( seqs ); pri_freqmat( freqmat ); } } これまではすべてデータはプログラムに書き込んできた データが大量になったときプログラムを書き換えるのは大変 ファイルから入力するように修正しよう そうすれば,プログラムを大きく書き換えなくても済む! 2008年8月,データ解析の基礎,加藤,瀬々,金子. 32
  33. 33. ファイルからの入力 multiple-alignment.txt GTATAAAAAGCGG CTATAAAAGGCCC GTATAAAGGGGCG GTATATAAGCGCG CTATAAAGGGGCC GTATAAAGGCGGG : : このファイルを読み込んでみよう 2008年8月,データ解析の基礎,加藤,瀬々,金子. 33
  34. 34. ファイルからの入力 Test10c.java プロジェクト名: test10 import java.io.*; import java.util.*; public class Test10d { public static void main( String[] args ){ int i; String filename_in; String[] seqs; filename_in = quot;multiple-alignment.txtquot;; seqs = read_seqs( filename_in ); for ( i = 0; i < seqs.length; i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+seqs[i]); } } public static String[] read_seqs( String filename ){略} } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 34
  35. 35. ファイルからの入力 Test10d.java プロジェクト名: test10 import java.io.*; import java.util.*; ここでは詳細には解説しない public class Test10d { 定型の書き方だと考えてほしい public static void main( String[] args ){略} public static String[] read_seqs( String filename ){ BufferedReader br; String ln; ArrayList<String> seqs; ArrayList<String>の String[] ret; seqs = new ArrayList<String>(); 実体を生成する try { br = new BufferedReader( new FileReader(new File(filename)) ); while ( (ln = br.readLine()) != null ){ seqs.add( ln ); ファイルの終わりまで1行ずつ } } catch (IOException e){ 読み込み,seqsに追加していく System.out.println(e+quot;quot;); System.exit(1); } ret = seqs.toArray(new String[0]); return ret; ArrayList<String>を } } 配列 String[] 型に変換する 2008年8月,データ解析の基礎,加藤,瀬々,金子. 35
  36. 36. ファイルからの入力 Test10d.java プロジェクト名: test10 import java.io.*; import java.util.*; public class Test10d { public static void main( String[] args ){ int i; String filename_in; String[] seqs; filename_in = quot;multiple-alignment.txtquot;; seqs = read_seqs( filename_in ); for ( i = 0; i < seqs.length; i++ ){ System.out.println(quot;[quot;+i+quot;]=quot;+seqs[i]); } } public static String[] read_seqs( String filename ){略} } 標準出力 [0]=GTATAAAAAGCGG [1]=CTATAAAAGGCCC [2]=GTATAAAGGGGCG [3]=GTATATAAGCGCG [4]=CTATAAAGGGGCC [5]=GTATAAAGGCGGG 2008年8月,データ解析の基礎,加藤,瀬々,金子. 36
  37. 37. 練習10-d. Test10c.java プロジェクト名: test10 ファイル「multiple-alignment.txt」から配列集合を読み込み, 頻度行列を計算せよ 1. 演習のウェブページからファイルmultiple-alignment.txt をダウンロードする 2. プロジェクトのフォルダに入れる 3. Test10d.java を打ち込んで,実行する (1) まずは,プログラムを作って動作させよ (2) 数行複製してみて,入力される配列の本数が入力ファイルに応じて 変わることをデバッガで確認せよ 2008年8月,データ解析の基礎,加藤,瀬々,金子. 37
  38. 38. 練習10-e. Test10e.java プロジェクト名: test10 ファイル「multiple-alignment.txt」から配列集合を読み込み, 頻度行列を計算せよ 1. 演習のウェブページからファイルmultiple-alignment.txt をダウンロードする 2. プロジェクトのフォルダに入れる 3. Test09i.javaからソースコードをコピーして,Test10d.javaから メソッドread_seqs(String)をコピーして完成させる (1) 演習のウェブページからファイル「reb1-binding.txt」も ダウンロードして頻度行列を計算してみよう 2008年8月,データ解析の基礎,加藤,瀬々,金子. 38
  39. 39. 練習10-f. Test10f.java プロジェクト名: test10 ファイル「rhodopsin-mltaln.txt」から配列集合を読み込み, p-distance による距離行列を計算せよ 1. 演習のウェブページからファイルrhodopsin-mltaln.txt をダウンロードする 2. プロジェクトのフォルダに入れる 3. これまで作ってきたソースコードから利用できる部分は 貼り付けて,Test10f.javaを完成させ,動作させよ 2008年8月,データ解析の基礎,加藤,瀬々,金子. 39
  40. 40. 練習10-d.(2/2) reb1-binding.txt AATCTGTTTATTACCCGACATTCTTAA TATTTCTCTGTCACCCGGCCTCTATTT ACTTTCATCATTACCCGGATGATTCTC GACGCTGCTATAACCCGGCCTCCGAGG ACATTGGGCATTACCCGCAAACTAACC CGGGCGACAGCCCTCCGACGGAAGACT CCAATGGCCGCTACCCGCCTCTTCTTC GACGCGCCGCTCACCCGCACGGCAGAG TTATACCTTATTACCCGAAAGGCTTTT 2008年8月,データ解析の基礎,加藤,瀬々,金子. 40

×