Там я был на странице загрузки последовательностей и аннотаций на веб-сайте UCSC Genome Bioinformatics. Эта страница содержит ссылки на последовательности и загрузки аннотаций для сборок генома, которые представлены в браузере генома UCSC. Было так много файлов на выбор, но мне было интересно скачать следующий файл в сборке набора данных генома человека:
hg38.fa.gz — «Мягкая маска» последовательности сборки в одном файле. Повторения из RepeatMasker и Tandem Repeats Finder (с периодом 12 или менее) показаны в нижнем регистре; неповторяющаяся последовательность показана в верхнем регистре.
Угадай, что? Этот файл больше 3 ГБ! Не беспокойтесь, вы можете сказать. Текстовые редакторы сегодня могут обрабатывать большие файлы, верно? Я использую Windows, поэтому мы говорим о Блокноте , WordPad и Microsoft Office Word , и это лишь некоторые из них.
Что ж, похоже, мы переоценили возможности этих редакторов. Когда я попробовал текстовые редакторы, упомянутые выше, они закричали в агонии. Проверьте это:
Блокнот
Word Pad
Microsoft Office Word
Хлоп.
Наша цель здесь — быстро взглянуть на части этого большого файла. В следующих уроках этой серии мы увидим, как использовать Ruby для навигации по таким большим файлам.
Прежде чем двигаться дальше с этим руководством, давайте рассмотрим терминологию, которая облегчит нашу жизнь.
терминология
Геном (взято из справочника Genetics Home )
Основываясь на справочном материале Genetics Home, геном представляет собой полный набор ДНК организма, включая все его гены . Каждый геном, в свою очередь, содержит всю информацию, необходимую для построения и поддержания этого организма. У людей копия всего генома — более 3 миллиардов пар оснований ДНК — содержится во всех клетках, имеющих ядро.
Секвенирование генома
Как заявляет Genome News Network, секвенирование генома — это процесс определения порядка нуклеотидов ДНК, или основы, в геноме. То есть порядки As, Cs, Gs и Ts, которые составляют ДНК организма. Как указано выше, человеческий геном состоит из более 3 миллиардов этих генетических букв.
Сборка генома
Сборка генома, как заявляет Ensembl, представляет собой последовательность генома, полученную после того, как хромосомы были фрагментированы, эти фрагменты были секвенированы, и полученные последовательности были снова объединены.
Но вы уже все это знаете, верно? 😉
Получение файла
В этом разделе давайте возьмем этот большой файл, упомянутый в начале этого урока.
Хорошие ребята из UCSC Genome Bioinformatics достаточно щедры, чтобы предоставить своего рода readme, который описывает каждый из этих гигантских файлов и их содержание. Файл, который мы хотим загрузить, это hg38.fa.gz (будьте осторожны, размер файла составляет 938 МБ).
После того как вы загрузите файл, распакуйте его. Вы можете использовать WinRAR или 7-Zip или tar. После того, как вы извлечете файл, у вас будет файл с именем hg38.fa
Идем дальше и переименуем его в hg38.txt
, так что вместо файла fa
у нас есть txt
файл. Как упоминалось в начале этого руководства, с помощью Блокнота, WordPad и Microsoft Office Word, файл не может быть открыт из-за его большого размера.
Путешествие тысячи линий
Давайте посмотрим, что нужно, чтобы использовать Ruby для извлечения 1000 строк этого большого файла за раз. Конечно, вы можете извлечь столько строк, сколько захотите. Первое, что мы хотим сделать здесь, это попросить пользователя указать имя файла для отслеживания. Для этого сделайте следующее:
puts 'Enter the name of the file'
После запроса у пользователя имени файла нам нужно прочитать это имя и сохранить его в переменной. Это может быть достигнуто в Ruby следующим образом:
file_name = gets.chomp
Давайте немного разберемся, что здесь происходит. get — это метод, используемый для получения следующей строки из стандартного ввода в виде строки вплоть до возврата. chomp
используется для возврата строки без возврата завершающей строки \n
. Если мы не chomp
строку, программа вернула следующую ошибку:
snoop.rb:4:in `initialize': Invalid argument - hg38.txt (Errno::EINVAL) from snoop.rb:4:in `open' from snoop.rb:4:in `<class:XYZ>' from snoop.rb:1:in `<main>'
hg38.txt\n
по ошибке, Ruby hg38.txt\n
следующее имя файла hg38.txt\n
вместо hg38.txt
.
После прочтения имени файла мы теперь хотим open()
файл:
input_file = File.open(file_name,'r')
r
здесь означает, что мы открываем файл в режиме чтения .
Наш скрипт запишет извлеченные строки в другой файл, который могут обработать эти слабые текстовые редакторы. В этом случае File.open()
в режиме w
(запись):
output_file = File.open('output.txt','w')
Мы будем читать построчно из входного файла. Метод Ruby, который поможет нам в этом процессе, — readline()
:
read_line = input_file.readline
write()
требуется для записи строк чтения в выходной файл. Да, я упомянул здесь строки ( то есть с «s»). Но мы используем readline()
который читает только одну строку за раз. Для начала, for
ограничит наше чтение до 1000 строк.
Теперь давайте посмотрим, как будет выглядеть скрипт Ruby, выполняющий операции, описанные в предыдущем разделе.
class Snoop puts 'Enter the file name you want to work with' file_name = gets.chomp input_file = File.open(file_name,'r') output_file = File.open('output.txt','w') for i in 1..1000 read_line = input_file.readline output_file.write(read_line) end end
Запуск программы
Для запуска программы я использовал командную строку с Ruby на компьютере с Windows 8.1 следующим образом:
Результат работы программы ( т.е. output.txt) можно скачать здесь .
Зачем нам это нужно?
Как программист на Ruby, вы можете заметить, что программа проста. Давайте не будем забывать, что, поскольку эта серия ориентирована на применение Ruby к темам, связанным с медициной, мы можем ожидать, что непрограммисты ( например, ученые, биологи, исследователи) будут искать решение своих проблем.
Для программиста, возможно, содержание большого файла, с которым мы работали, не имеет особого смысла. Это имеет значение, однако, для специалиста, работающего с файлом.
Специалисты часто сталкиваются с такими большими файлами, и, как мы видели, используемые нами текстовые редакторы часто не могут работать с такими файлами. Смысл программы, представленной в этом руководстве, состоит в том, чтобы учёные, исследователи и т. Д. Понимали и использовали простую (Руби начинает играть). Методы, использованные в этой статье, дают специалисту именно то, что нужно: файл меньшего размера с соответствующим выводом, который можно открыть в стандартном текстовом редакторе. Теперь, когда технологии мешают, специалист может сосредоточиться на улучшении жизни и, следовательно, всего мира.
Хорошо, может быть, это немного чрезмерно, но суть в этом правда. Эта серия не только приносит медицинские проблемы Руби, но также (и, возможно, что еще более важно) приносит Руби в области медицины.