решения для Python для управления графом зависимостей научных данных значениями спецификации

У меня есть проблема управления научных данных, которая кажется общей, но я не могу найти существующее решение или даже описание его, над которым я долго ломал голову. Я собираюсь начать майора, переписывают (Python), но я думал, что обдумывал в один прошлый раз существующие решения, таким образом, я могу фрагментировать свое собственное и возвратиться к биологии или по крайней мере выучить некоторый соответствующий язык для лучшего поиска с помощью Google.

Проблема: Я имею дорогой (часы ко дням для вычисления) и атрибуты данных большого (ГБ), которые обычно создаются как преобразования одного или нескольких других атрибутов данных. Я должен отслеживать точно, как эти данные создаются так, я могу снова использовать их, как введено для другого преобразования, если они соответствуют проблеме (созданный с правильными значениями спецификации), или создайте новые данные по мере необходимости. Хотя это не должно иметь значения, я обычно я запускаю с несколько неоднородной информации о молекулярной биологии 'с добавленной стоимостью', например, геномов с генами и белками, аннотируемыми другими процессами другими исследователями. Я должен объединить и сравнить эти данные для создания моих собственных выводов. Много промежуточных шагов часто требуются, и они могут быть дорогими. Кроме того, конечные результаты могут стать входом для дополнительных преобразований. Все эти преобразования могут быть сделаны несколькими способами: ограничение с различными исходными данными (например, использование различных организмов), при помощи различных значений параметров в тех же выводах, или при помощи различных моделей вывода, и т.д. Исследования часто изменяются и основываются на других незапланированными способами. Я должен знать, какие данные я имею (какие параметры или спецификации полностью определяют их), оба так, что я могу снова использовать их при необходимости, а также для общей научной целостности.

Мои усилия в целом: Я разрабатываю свои классы Python с проблемой описания в памяти. Все атрибуты данных, созданные объектом класса, описаны единственным набором значений параметров. Я называю эти параметры определения или спецификации 'def_specs' и этими def_specs с их значениями 'форма' данных atts. Все глобальное состояние параметра для процесса могло бы быть довольно большим (например, сто параметров), но данные atts обеспеченный любым классом требуют только небольшого количества их по крайней мере непосредственно. Цель состоит в том, чтобы проверить, являются ли ранее созданные данные atts соответствующими путем тестирования, если их форма является подмножеством глобального состояния параметра.

В классе легко найти необходимые def_specs, которые определяют форму путем исследования кода. Протирание возникает, когда модулю нужно внимание данных от другого модуля. Эти данные atts будут иметь свою собственную форму, возможно, переданную как args вызывающим объектом, но чаще фильтровали от глобального состояния параметра. Класс вызова должен быть увеличен с формой его зависимостей для поддержания полного описания его данных atts. В теории это могло быть сделано вручную путем исследования графа зависимостей, но этот график может стать глубоким, и существует много модулей, которые я постоянно изменяю и добавляю, и... Я слишком ленив и небрежен, чтобы сделать это вручную.

Так, программа динамично обнаруживает полную форму данных atts путем отслеживания вызовов к другим атрибутам классов и продвижения их формы назад до вызывающей стороны (сторон) через управляемый стек __get__ вызовы. Поскольку я переписываю, я нахожу, что должен строго управлять доступом атрибута к своим классам разработчика, чтобы препятствовать тому, чтобы произвольная информация влияла на данные atts. К счастью, Python делает это легким с дескрипторами.

Я храню форму данных atts в дб так, чтобы я мог запросить, существуют ли соответствующие данные (т.е. его форма подмножество текущего состояния параметра) уже. В моем переписывать я перемещаюсь от mysql через большой SQLAlchemy к объектному дб (ZODB или couchdb?), поскольку таблица для каждого класса должна быть изменена, когда дополнительный def_specs, обнаружены, который является болью, и потому что некоторые def_specs являются списками Python или dicts, которые являются болью для перевода в sql.

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

Если управление данными не может легко быть разделено от конструкции данных, я предполагаю, что маловероятно, что существует из готового решения, но тысячи определенных. Возможно, существует применимый шаблон? Я ценил бы любые намеки, как пойти о взгляде или лучшем описании проблемы. Мне это кажется общим вопросом, хотя управление глубоко разделенными на уровни данными, возможно, противоречит преобладающим ветрам сети.

8
задан ricopan 19 June 2010 в 19:34
поделиться

2 ответа

У меня нет для вас конкретных предложений, связанных с питоном, но вот несколько мыслей:

Вы сталкиваетесь с типичной проблемой в биоинформатике. Данные большие, разнородные и приходят в постоянно меняющихся форматах по мере внедрения новых технологий. Мой совет - не переусердствуйте с конвейерами, так как завтра они, скорее всего, изменятся. Выберите несколько четко определенных форматов файлов и как можно чаще преобразовывайте входящие данные в эти форматы. По моему опыту, также обычно лучше иметь слабосвязанные инструменты, которые хорошо справляются с одной задачей, чтобы вы могли быстро связать их вместе для различных анализов.

Вы также можете рассмотреть вариант передачи этого вопроса в стек биоинформатики по адресу http://biostar.stackexchange.com/

2
ответ дан 6 December 2019 в 00:05
поделиться

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

Я рекомендую вам попробовать PyTables , библиотеку Python для обработки файлов HDF5, которые представляют собой формат, используемый в астрономии и физике для хранения результатов больших вычислений и моделирования. Его можно использовать как базу данных, похожую на иерархию, а также у него есть эффективный способ маринования объектов Python. Кстати, автор pytables объяснил, что ZOdb был слишком медленным для того, что ему нужно было сделать, и я могу вам это подтвердить. Если вас интересует HDF5, есть еще одна библиотека, h5py .

В качестве инструмента для управления версиями различных вычислений вы можете попробовать sumatra , который является чем-то вроде расширения git / trac, но предназначен для моделирования.

Вы должны задать этот вопрос на Biostar, там вы найдете лучшие ответы.

2
ответ дан 6 December 2019 в 00:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: