BioJava:CookbookFrench:Count:Frequency

Comment calculer la fréquence d’un Symbol dans une Sequence?

Une des classes les plus utiles de BioJava est la classe Distribution. Une Distribution est une carte associant un Symbol à sa fréquence dans une SymbolList. Les Distributions sont entrainées avec les Symbols observés en utilisant un DistributionTrainerContext. Un DistributionTrainerContext peut entrainé plusieurs Distributions enregistrées et peut traité n’importe quel Symbol provenant de n’importe quel Alphabet. Les Symbols ambiguës sont divisés parmi les AtomicSymbols qui constitue le BasisSymbol ambiguë.

Le programme suivant montre l’entrainement de trois Distributions avec des Sequences faites à partir de trois Alphabets différents.

```java import org.biojava.bio.seq.*; import org.biojava.bio.symbol.*; import org.biojava.bio.dist.*; import org.biojava.utils.*; import java.util.*;

public class Frequency {

 public static void main(String[] args) {
   try {
     //créer une SymbolList d'ADN
     SymbolList dna = DNATools.createDNA("atcgctagcgtyagcntatsggca");
     //créer une SymbolList d'ARN
     SymbolList rna = RNATools.createRNA("aucgcuaucccaggga");
     //créer une SymbolList de protéines
     SymbolList protein = ProteinTools.createProtein("asrvgchvhilmkapqrt");
     SymbolList[] sla = {dna, rna, protein};
     
     //obtenir un DistributionTrainerContext
     DistributionTrainerContext dtc = new SimpleDistributionTrainerContext();
     
     //créer trois Distributions
     Distribution dnaDist =
         DistributionFactory.DEFAULT.createDistribution(dna.getAlphabet());
     Distribution rnaDist =
         DistributionFactory.DEFAULT.createDistribution(rna.getAlphabet());
     Distribution proteinDist =
         DistributionFactory.DEFAULT.createDistribution(protein.getAlphabet());
     Distribution[] da = {dnaDist, rnaDist, proteinDist};
     
     //enregistrer les Distributions auprès du trainer
     dtc.registerDistribution(dnaDist);
     dtc.registerDistribution(rnaDist);
     dtc.registerDistribution(proteinDist);
     
     //pour chaque Sequence
     for (int i = 0; i < sla.length; i++) {
       //compter chaque Symbol dans la Distribution appropriŽe
       for(int j = 1; j <= sla[i].length(); j++){
         dtc.addCount(da[i], sla[i].symbolAt(j), 1.0);
       }
     }
     
     //former les Distributions
     dtc.train();
     
     //imprimer la valeur de chaque Distribution
     for (int i = 0; i < da.length; i++) {
       for (Iterator iter = ((FiniteAlphabet)da[i].getAlphabet()).iterator();
            iter.hasNext(); ) {
         Symbol sym = (Symbol)iter.next();
         System.out.println(sym.getName()+" : "+da[i].getWeight(sym));
       }
       System.out.println("\n");
     }
   }
   catch (Exception ex) {
     ex.printStackTrace();
   }
 }

} ```