BioJava:CookbookPortuguese:Count:Frequency
From BioJava
Como eu calculo a frequencia de um simbolo em uma Sequence?
Uma das classes mais úteis no BioJava é a classe Distribution. Esta classe é um mapa de frequencias referentes aos simbolos. As distribuições são calculadas com base nos simbolos observados utilizando-se a classe DistributionTrainerContext. Esta classe, por sua vez, pode treinar diversas distribuições registradas no contexto compreendendo os simbolos de qualquer alfabeto.
O programa a seguir demonstra o treinamento de 3 (tres) Distribuições com sequencias de 3 (tres) alfabetos diferentes.
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 { //Cria uma SymbolList de DNA SymbolList dna = DNATools.createDNA("atcgctagcgtyagcntatsggca"); //Cria uma SymbolList de RNA SymbolList rna = RNATools.createRNA("aucgcuaucccaggga"); //Cria uma SymbolList de Proteina SymbolList protein = ProteinTools.createProtein("asrvgchvhilmkapqrt"); SymbolList[] sla = {dna, rna, protein}; //instancia a classe DistributionTrainerContext DistributionTrainerContext dtc = new SimpleDistributionTrainerContext(); //Cria 3 (tres) 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}; //registra as Distributions no treinador dtc.registerDistribution(dnaDist); dtc.registerDistribution(rnaDist); dtc.registerDistribution(proteinDist); //para cada Sequence for (int i = 0; i < sla.length; i++) { //conte cada Symbol na sua Distribution apropriada for(int j = 1; j <= sla[i].length(); j++){ dtc.addCount(da[i], sla[i].symbolAt(j), 1.0); } } //treine as Distributions dtc.train(); //imprime os pesos de cada 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(); } } }

