Previous Entry Share Next Entry
Язык Python и биоинформатика
intheyear9595
Я решил изучать питон на практических задачах с переходом от простых, к алгоритмически более сложным. В этом мне помогает проект "Rosalind" - игровая среда для обучения биоинформатике на практических примерах (сходная с известным проектом "Euler"). Платформа разработана питерцами, сам проект и задания на английском. Задачи, которые приходится решать в "игровом" проекте максимально приближены к тем задачам, которые действительно составляют биоинформатику - это в основном обработка ДНК и РНК последовательностей, анализ, поиск и исправление ошибок секвенирования, классификация и т.п. Полный список доступных задач есть здесь. Рекомендую нажимать малозаметную серую надпись "click to expand" - там дана теория к задаче (и обстоятельно и популярно), сама же задача дается в формализованном виде, приближенном к обычному заданию по программированию.



Пользуясь случаем, рекомендую книгу "Эгоистичный ген" Ричарда Докинза. Говорят, это не самая интересная его книга, но это первая из его книг, за которую я ухватился, и не жалею об этом, посвящена она генетике, эволюции, дарвинизму (Докинз - последовательный неодарвинист), кин отбору, и в первую очередь эволюционному геноцентризму (естественный отбор на уровне генов, а не на уровне индивида или групп). После чтения первых 5-ти глав становится понятна и очевидна вся теория в тестовых заданиях "Розалинды", хотя первому изданию книги уже более 30 лет, и общая теория генетики в этой книге дана лишь в контексте теории "эгоистичного гена". Забавно, что теперь эта теория считается ортодоксальной, даже консервативной (тогда считалась - экстремальной).

Задачи в проекте "Rosalind" решаются легко. Я выбрал для себя нескоростной стиль решения, нацеливаясь на читаемость и поддерживаемость кода (т.к. я только обучаюсь языку и хочу сразу приобрести хорошие привычки). При желании можно увидеть на том же сайте примеры кода, написанные, на пример, на Ruby и представляющие из себя написанную в скоростном стиле мешанину лямбда-функций, решающие те же задачи, но за меньшее время, чем при вдумчивом кодинге на Python.

На решение любой задачи дается неограниченное время и попытки, но каждый индивидуально сгенерированный датасет валиден всего 5 минут, за это время ваша программа должна извлечь из него нужные данные и корректно привести их к требуемой форме.

Задачи в "Rosalind" зависимы, решив одну задачу можно решить 2-3 связанные (неполное дерево по ссылке), чтобы добраться до некоторых задач приходится решать все те, которые содержат в себе приобретение нужных навыков и элементы теории по генетике.

После решения десятка задач, я присмотрел себе одну из тех, что мне показались интересными - задача 28, которую на данный момент еще никто не решил. Я построил дерево зависимостей в блокноте (вообще, можно было использовать Пролог), и у меня получилось вот это:

решить:  7, 14, 11 (доступны мне сейчас)
затем:    15, 24
затем:    22, 26
затем:    27
наконец: 28 (искомое)

Порядок решения:  7, 14, 11, 15, 24, 22, 26, 27, 28.

Итого, чтобы решить приглянувшуюся задачу 28 мне нужно решить сначала 8-ть зависимых, тоже не самых простых. Неудивительно, что решивших 0, путь в общем графе один из самых длинных и зависимых. Возможно, дальше займусь прохождением этой ветки, но пока я рад тому, с какой скоростью мне удалось перейти от полного нубства к использованию классов и исключений на этом удобном, мощном и простом языке. Практические задачи по интересной теме - хорошее подспорье, и для меня лично проект Rosalind в плане интересности выгодно отличается от проекта Euler, который больше ориентирован на абстрактную Computer Science. Euler тоже нужно будет обязательно попробовать, но можно это сделать и после.


?

Log in

No account? Create an account