練習問題の解答例_2

差分

このページの2つのバージョン間の差分を表示します。


練習問題の解答例_2 [2019/07/15 02:46] (現在) – 作成 - 外部編集 127.0.0.1
行 1: 行 1:
 +解答例
  
 +ちなみにDRR017220.fastqに対してsimilarity 0.95以上でクラスタリングした結果は371個のOTUが出来ます。
 +
 +<code java>
 +package clustering;
 +
 +import java.io.BufferedReader;
 +import java.io.File;
 +import java.io.FileReader;
 +import java.io.StringReader;
 +import java.util.ArrayList;
 +
 +import neobio.alignment.BasicScoringScheme;
 +import neobio.alignment.PairwiseAlignment;
 +import neobio.alignment.ScoringScheme;
 +import neobio.alignment.SmithWaterman;
 +
 +public class Test {
 +
 + public static double getsim(String seq1, String seq2){
 + double result=0;
 + SmithWaterman sw = new SmithWaterman();
 +
 + int n=0;
 + try {
 + StringReader str1 = new StringReader(seq1);
 + StringReader str2 = new StringReader(seq2);
 + ScoringScheme arg3 = new BasicScoringScheme(1, -1, -1);
 + sw.setScoringScheme(arg3);
 + sw.loadSequences(str1, str2);
 + PairwiseAlignment arg4;
 + arg4 = sw.getPairwiseAlignment();
 + String match=arg4.getScoreTagLine();
 + for(int i=0;i<arg4.getScoreTagLine().length();i++){
 + if(match.substring(i,i+1).equals("|")){
 +    n++;
 + }
 + }
 + result=n/(double)match.length();
 + } catch (Exception e) {
 + e.printStackTrace();
 + }
 + return result;
 + }
 +
 + public static void main(String[] args) {
 + // TODO 自動生成されたメソッド・スタブ
 +
 +
 +    ArrayList<String> arrayName = new ArrayList<String>();
 +    ArrayList<String> arraySeq = new ArrayList<String>();
 +    int n=0;
 +    File file = new File("C:\\Users\\asakawa\\Desktop\\DRR017220.fastq");
 + try {
 + BufferedReader br = new BufferedReader(new FileReader(file));
 +     String str = br.readLine();
 +     while(str != null){
 +         n++;
 +         if(n%4==1){
 +         arrayName.add(str);
 +         }else if(n%4==2){
 +         arraySeq.add(str);
 +         }
 +
 +         str = br.readLine();
 +     }
 +     br.close();
 + } catch (Exception e) {
 + // TODO 自動生成された catch ブロック
 + e.printStackTrace();
 + }
 +    System.out.println(arraySeq.size()+"リード読み込み完了");
 +
 +   
 +    //1番目のリードに対して、similarityを計算
 +    System.out.println(arraySeq.get(0));
 +   
 +    for(int i=1;i<arraySeq.size();i++){
 +    if(getsim(arraySeq.get(0), arraySeq.get(i)) >= 0.95){
 +    System.out.println(arrayName.get(i)+": "+arraySeq.get(i));
 +    }
 +    }
 +
 +
 +    //クラスタリングを行う
 +    int otu=0; // OTUの数を保存する変数
 +    boolean[] clusteredFlag = new boolean[arraySeq.size()];
 +    for(int j=0; j<arraySeq.size(); j++){
 +        int matchCnt = 0; // 1つのOTU内のリード数をカウント
 +    if(clusteredFlag[j]==false){
 +    matchCnt++;
 +    otu++;
 +    clusteredFlag[j]=true;
 +    ArrayList<String> matchSeq = new ArrayList<String>();
 +    ArrayList<String> matchName = new ArrayList<String>();
 +    for(int i=j+1; i<arraySeq.size(); i++){
 +    if(clusteredFlag[i]==false){
 +    if(getsim(arraySeq.get(j),arraySeq.get(i))>=0.95){
 +    matchSeq.add(arraySeq.get(i));
 +    matchName.add(arrayName.get(i));
 +    matchCnt++;
 +    clusteredFlag[i]=true;
 +    }
 +    }
 +    }
 +    System.out.println("query: "+arrayName.get(j)+" "+arraySeq.get(j));
 +    for(int i=0; i<matchSeq.size(); i++){
 +    System.out.print(matchName.get(i)+" "+ matchSeq.get(i)+"\n");
 +    }
 +    System.out.println(matchCnt+" : "+otu);
 +    }
 +    }
 +
 + }
 +
 +}
 +</code>