🌿

Rosalind バイオインフォマティクスプログラミング

2023/05/06に公開

はじめに

この記事はバイオインフォマティクス版競技プログラミングである、Rosalindについての記事です。生命科学系でプログラミングのスキルを上げたい人におすすめします。

Rosalind Home
About Rosalind Project

Rosalindとは

Rosalindは生命科学系の様々な問題を解くことで、バイオインフォマティクスに関するスキルを身につけることを目的としたプラットフォームです。

Learning bioinformatics usually requires solving computational problems of varying difficulty that are extracted from real challenges of molecular biology.

To make learning bioinformatics fun and easy, we have founded Rosalind, a platform for learning bioinformatics through problem solving.

Atcoderによく似ていて、問題文の制約に従って問題を解きプログラムの出力を提出します。
Atcoderとの違いは、生命科学系のドメイン知識も合わせて学べる点と、レーティングではなくレベル・バッジ・アチーブメントによって評価される点です。

Rosalind Locations

Rosalindには以下の5つのLocationsで構成されています。

Rosalind Locations
Rosalind Locations

Locations
  1. Python Village
    全6門構成で、全くプログラミングに触れたことのない人はここから取り掛かることが推奨されています。簡単なPythonに関する問題です。

  2. Bioinfomatics Stronghold
    全105問構成で、動的計画法やゲノムアセンブリなどのバイオインフォマティクス関連のアルゴリズム問題です。

  3. Bioinfomatics Armory
    全16問構成で、バイオインフォマティクスOSSツールを使用して、Strongholdと同様の問題を解きます。ブラウザベースもしくは複数OSと互換性のあるプログラムを利用するため環境依存の問題は起きないようになっています。

  4. Bioinfomatics Textbook Track
    全124問構成で、Bioinfomatics Algorithms(Phillip Compeau, PavelPevzner)という書籍の演習課題のようです。

  5. Algorithmic Heights
    全34問で、Algorithms(C. H. Papadimitriou , U. V. Vazirani)の演習課題となっています。

例題

解答の一例を紹介します。例題はTranscribing DNA into RNAです。

Transcribing DNA into RNA
An RNA string is a string formed from the alphabet containing 'A', 'C', 'G', and 'U'.

Given a DNA string t corresponding to a coding strand, its transcribed RNA string u is formed by replacing all occurrences of 'T' in t with 'U' in u.

Return: The transcribed RNA string of t.

上記が問題本文です。その下にDownload datasetボタンがあるのでクリックします。すると問題の入力となるテキストファイル (rosalind_xxx.txt) がダウンロードされます。

Rosalind Problem
Rosalind Problem "Transcribing DNA into RNA"

解答はコードではなく、プログラムの出力を提出します。出力をテキストファイルに書き出すか、ターミナルへの出力をコピペします。以下は解答例です。

rosalind_rna.py
# Open input file
with open('rosalind_rna.txt', 'r') as file:
    dna_string = file.read().strip()

# Transcribe DNA to RNA string
rna_string = dna_string.replace('T', 'U')

# Print output
print(rna_string)

解答の提出後、正解すれば他の人の回答例や、問題の解説を見ることができます。
解答に当たっては、どの言語を用いても問題ありません。チェックされるのは出力だけです。

Pythonが最適だとは思いますが、Mojoと呼ばれる言語も登場したようなので(ハイパフォーマンスでPythonライクな言語)、玄人の方はMojoで解いて見るのもありだと思います。

バッジとアチーブメント

Rosalindは問題を解くごとにLevelが上がる仕組みになっています。Atcoderのレーティングに相当します。上位100人のユーザーはこちらに掲載されます。
Rosalind Levels
Rosalind Levels

また、特定条件を満たすごとにBadgeとAchievementsを取得することができます。
Rosalind Badge
Rosalind Achievements
Rosalind Badge and Achievements

これらを取得することで特別な何かがあるわけではありませんが、モチベーションになるものは非常に大切です(特に初学者の場合)。

最後に

Rosalindは非常に多くの問題を掲載しています。中には情報系の人にとって簡単に思える問題もあるかもしれませんが、生命科学におけるドメイン知識を習得することができることがRosalindの最大の特徴です。また生命科学専攻の方にとっても、プログラミングの基本技術を身に付けつつ、それらの技術を様々なバイオインフォマティクス解析に活用することができます。

また他の人の解答も見ることができるので、より良い解法やコードを見つけることができます。より可読性の高いコードを書くことは、インフォマティクス解析において必ず役に立ちます。

特に初学者の方にはハードルが高いかもしれませんが、問題文のヒントや書籍、技術記事を参考に挑戦してみてください。

最後に、Rosalind Projectの起案者であるPhillip Compeau氏のホームページです。
https://compeau.cbd.cmu.edu/online-education/rosalind/

Discussion