Голубь Скиннера
939 subscribers
39 photos
106 links
Дария и научные наблюдения

@dkleeva

taplink.cc/dkleeva
Download Telegram
​​На пути к культуре программирования
#programming

В ленный период новогодних праздников занимаюсь систематизацией данных и скриптов по своим проектам и вижу, как часто на ранних этапах своего погружения в обработку данных я использовала максимально неудобоваримые способы организации программного кода, которые затем негативно сказывались на последующих этапах работы. Например, бывали случаи, когда мне нужно было повторить весь анализ данных от начала до конца с небольшими изменениями. И внесение этих изменений занимало уйму времени просто потому, что изначально мой код держался на странном каркасе из "костылей" и неорганизованных сегментов, которые я создавала зачастую в аврале по принципу "Сейчас важнее всего быстрее посчитать, а что будет с этим кодом дальше – не так важно". Мои наблюдения показывают, что это довольно частая проблема среди тех, кто не обучался программированию per se, но был вынужден прибегать к нему в рамках научных проектов.

К счастью, сейчас я стала более сознательно относиться к своим скриптам, но совершенству нет предела. И довольно своевременно в нашем рабочем чате поделились ссылкой на ресурс, затрагивающий культуру создания и организации хорошего кода как раз в исследовательских целях. Этот цифровой справочник в доходчивой форме покрывает множество аспектов, например: создание упорядоченного кода, проверку кода на адекватность, ведение документации, использование GitHub и т. д.

До многих правил и принципов, указанных в справочнике, некоторые неизбежно доходят путём проб, ошибок и наступая на грабли, но всё равно полезно иметь доступ к системе критериев, с которой можно сверяться и дальше. Изучение всех материалов занимает не так много времени и может служить хорошим стартом для того, чтобы учиться писать хороший код, пригодный на всех стадиях проекта и, как вариант, для использования другими людьми.

P. S. На схожую тему – справочник по воспроизводимой науке о данных. Там есть соответствующие разделы по кодингу, а также в целом по организации исследовательских проектов.
​​PDF-отчёты в Python
#programming

В науке много данных и много способов их обработки. Чтобы определить, какой из методов обработки является оптимальным для текущей задачи, иногда приходится много раз менять различные параметры и смотреть на то, как это влияет на результат. Зачастую на начальных этапах обработки приходится смотреть отдельно на данные каждого участника эксперимента. На выходе получаются десятки и сотни графиков. Изучать их в питоновских тетрадках невозможно, сохранение в файлы по папкам тоже не облегчает ситуацию. Если же нужно посмотреть на графики вместе с коллегами, распространённой тактикой является перетаскивание графиков в презентации или в Notion для дальнейшего распространения. Вспоминается, как два года назад я и мой коллега за полчаса до совещания по проекту в две руки вставляли в Google-презентацию графики из наших скриптов, пытаясь сохранить при этом хоть какую-то структуру в материалах. 

В общем, последние несколько лет немалую часть времени, которую я могла бы посвятить осознанию результатов и их анализу, я занималась ручным составлением отчётов.

Решение лежало на поверхности. Пакет PyFPDF позволяет автоматически сохранять полученные в Python графики, текст и прочие данные в pdf-формате, используя всего несколько простых команд. Простой тьюториал можно найти здесь.
Избавление от ненужного
#programming #tools

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

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

К счастью, даже для моего хаотичного подхода находятся автоматизированные решения: в данном случае — тулбокс Autoflake. Теперь достаточно одного запроса, и в питоновском файле автоматически удалятся все ненужные импорты и неиспользуемые переменные.
Human Neocortical Neurosolver — от нейрона к сенсорам (почти)
#neuroimaging #programming #resources


Давно не пополняла коллекцию полезных тулбоксов. Несколько дней назад вышла новая версия библиотеки HNN (Human Neocortical Neurosolver) на Python (с описанием исходного программного обеспечения можно ознакомиться в этой публикации).

Ценность этой библиотеки в том, что в очень user-friendly формате она позволяет соотносить МЭГ/ЭЭГ данные с клеточной активностью нейронов, их порождающей. Работать можно, в частности, с вызванными потенциалами или осцилляторной активностью. На фоне оптимистичности подхода можно выделить два ограничения:

1. Фактически основной ингредиент тулбокса — это моделирование активности кортикальных источников в виде первичного тока с использованием биофизической модели нейронов. Соотнесение же с измерениями на МЭГ/ЭЭГ сенсорах осуществляется за счет сопоставления смоделированной активности кортикальных источников и той, которая была реконструирована на основе МЭГ/ЭЭГ с помощью методов решения обратной задачи. Решение обратной задачи в этом случае — отдельный изолированный шаг. О сложностях, которые его могут сопровождать, я писала в одном из предыдущих постов. Получается, что биофизическая модель описывает переход с микроуровня клеток на макроуровень кортикальных источников, но не на уровень сенсоров. Т. е. на выходе мы получаем сопоставление моделей “нейрон-диполь” и “сенсор-диполь”. Это очевидным образом может порождать искажения.
2. Сама используемая биофизическая модель опирается на архитектуру колонок пирамидальных нейронов неокортекса и не затрагивает иные возможные архитектуры. Впрочем, сами используемые параметры (пропорции возбуждения/торможения, специфичные для каждого слоя синаптические взаимодействия и характеристики спайковой активности) обеспечивают некоторые степени свободы.

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

На видео — пример симуляции вызванной активности. А по этой ссылке можно найти пример скрипта, который решает обратную задачу для соматосенсорной вызванной активности, наблюдаемой в МЭГ-данных, а затем моделирует сеть нейронов, репродуцирующую активность соответствующих источников.