Advanced Biopython modules for motifs, population genetics, sequence utilities, restriction analysis, clustering, and GenomeDiagram visualization; use when you need extended bioinformatics analysis beyond basic sequence I/O and alignment.
58
68%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./scientific-skills/Data Analysis/biopython-advanced/SKILL.mdBio.motifs (counts, consensus, simple statistics).Bio.Restriction (enzyme lookup, cut site detection).Bio.SeqUtils (codon usage and related helpers).config/task_config.json as an intermediate artifact.python scripts/<task_name>.py.encoding="utf-8" for file I/O; JSON output uses ensure_ascii=False.Required:
Optional (for reporting/plotting):
The following examples are complete runnable scripts that follow the conventions:
config/task_config.jsonpython scripts/<task_name>.pyensure_ascii=False for JSON outputconfig/task_config.json
{
"task": "motif_stats",
"sequences": ["ATGCATGCATGC", "ATGCGTGCATGC", "ATGCATGTATGC"]
}scripts/motif_stats.py
import json
from Bio import motifs
from Bio.Seq import Seq
def main():
with open("config/task_config.json", "r", encoding="utf-8") as f:
cfg = json.load(f)
seqs = [Seq(s) for s in cfg["sequences"]]
m = motifs.create(seqs)
result = {
"alphabet": str(m.alphabet),
"length": m.length,
"counts": {k: dict(v) for k, v in m.counts.items()},
"consensus": str(m.consensus),
"degenerate_consensus": str(m.degenerate_consensus),
}
with open("outputs/motif_stats.json", "w", encoding="utf-8") as f:
json.dump(result, f, ensure_ascii=False, indent=2)
if __name__ == "__main__":
main()Run:
python scripts/motif_stats.pyconfig/task_config.json
{
"task": "restriction_sites",
"sequence": "GAATTCGCGGAATTC",
"enzymes": ["EcoRI", "BamHI"]
}scripts/restriction_sites.py
import json
from Bio.Seq import Seq
from Bio.Restriction import RestrictionBatch
def main():
with open("config/task_config.json", "r", encoding="utf-8") as f:
cfg = json.load(f)
seq = Seq(cfg["sequence"])
batch = RestrictionBatch(cfg["enzymes"])
analysis = batch.search(seq)
# Convert enzyme keys to strings for JSON serialization
result = {str(enzyme): positions for enzyme, positions in analysis.items()}
with open("outputs/restriction_sites.json", "w", encoding="utf-8") as f:
json.dump(result, f, ensure_ascii=False, indent=2)
if __name__ == "__main__":
main()Run:
python scripts/restriction_sites.pyconfig/task_config.json
{
"task": "codon_usage",
"cds": "ATGGCTGCTGCTGCTTAA"
}scripts/codon_usage.py
import json
from collections import Counter
def main():
with open("config/task_config.json", "r", encoding="utf-8") as f:
cfg = json.load(f)
cds = cfg["cds"].upper().replace(" ", "").replace("\n", "")
codons = [cds[i:i+3] for i in range(0, len(cds) - (len(cds) % 3), 3)]
counts = Counter(codons)
total = sum(counts.values()) or 1
result = {
"total_codons": total,
"codon_counts": dict(sorted(counts.items())),
"codon_frequencies": {k: v / total for k, v in sorted(counts.items())},
"note": "This example computes raw codon frequencies from the provided CDS. Validate CDS frame and stop codons for your use case."
}
with open("outputs/codon_usage.json", "w", encoding="utf-8") as f:
json.dump(result, f, ensure_ascii=False, indent=2)
if __name__ == "__main__":
main()Run:
python scripts/codon_usage.pyConfiguration-first execution
config/task_config.json to keep CLI invocation stable and reproducible.outputs/*.json.Motif statistics (Bio.motifs)
counts: per-position nucleotide countsconsensus and degenerate_consensus: derived consensus sequencesRestriction analysis (Bio.Restriction)
RestrictionBatch(enzymes).search(seq) returns cut positions per enzyme.Codon usage
Bio.Data.CodonTable as needed.I/O requirements
encoding="utf-8".json.dump(..., ensure_ascii=False) to preserve non-ASCII characters in outputs.Further reference
references/advanced.md for additional notes and module coverage (motifs/PopGen/SeqUtils/Restriction/Cluster, GenomeDiagram, CodonTable/SeqFeature/IUPACData).f5ef65b
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.