На пути к культуре программирования
#programming
В ленный период новогодних праздников занимаюсь систематизацией данных и скриптов по своим проектам и вижу, как часто на ранних этапах своего погружения в обработку данных я использовала максимально неудобоваримые способы организации программного кода, которые затем негативно сказывались на последующих этапах работы. Например, бывали случаи, когда мне нужно было повторить весь анализ данных от начала до конца с небольшими изменениями. И внесение этих изменений занимало уйму времени просто потому, что изначально мой код держался на странном каркасе из "костылей" и неорганизованных сегментов, которые я создавала зачастую в аврале по принципу "Сейчас важнее всего быстрее посчитать, а что будет с этим кодом дальше – не так важно". Мои наблюдения показывают, что это довольно частая проблема среди тех, кто не обучался программированию per se, но был вынужден прибегать к нему в рамках научных проектов.
К счастью, сейчас я стала более сознательно относиться к своим скриптам, но совершенству нет предела. И довольно своевременно в нашем рабочем чате поделились ссылкой на ресурс, затрагивающий культуру создания и организации хорошего кода как раз в исследовательских целях. Этот цифровой справочник в доходчивой форме покрывает множество аспектов, например: создание упорядоченного кода, проверку кода на адекватность, ведение документации, использование GitHub и т. д.
До многих правил и принципов, указанных в справочнике, некоторые неизбежно доходят путём проб, ошибок и наступая на грабли, но всё равно полезно иметь доступ к системе критериев, с которой можно сверяться и дальше. Изучение всех материалов занимает не так много времени и может служить хорошим стартом для того, чтобы учиться писать хороший код, пригодный на всех стадиях проекта и, как вариант, для использования другими людьми.
P. S. На схожую тему – справочник по воспроизводимой науке о данных. Там есть соответствующие разделы по кодингу, а также в целом по организации исследовательских проектов.
#programming
В ленный период новогодних праздников занимаюсь систематизацией данных и скриптов по своим проектам и вижу, как часто на ранних этапах своего погружения в обработку данных я использовала максимально неудобоваримые способы организации программного кода, которые затем негативно сказывались на последующих этапах работы. Например, бывали случаи, когда мне нужно было повторить весь анализ данных от начала до конца с небольшими изменениями. И внесение этих изменений занимало уйму времени просто потому, что изначально мой код держался на странном каркасе из "костылей" и неорганизованных сегментов, которые я создавала зачастую в аврале по принципу "Сейчас важнее всего быстрее посчитать, а что будет с этим кодом дальше – не так важно". Мои наблюдения показывают, что это довольно частая проблема среди тех, кто не обучался программированию per se, но был вынужден прибегать к нему в рамках научных проектов.
К счастью, сейчас я стала более сознательно относиться к своим скриптам, но совершенству нет предела. И довольно своевременно в нашем рабочем чате поделились ссылкой на ресурс, затрагивающий культуру создания и организации хорошего кода как раз в исследовательских целях. Этот цифровой справочник в доходчивой форме покрывает множество аспектов, например: создание упорядоченного кода, проверку кода на адекватность, ведение документации, использование GitHub и т. д.
До многих правил и принципов, указанных в справочнике, некоторые неизбежно доходят путём проб, ошибок и наступая на грабли, но всё равно полезно иметь доступ к системе критериев, с которой можно сверяться и дальше. Изучение всех материалов занимает не так много времени и может служить хорошим стартом для того, чтобы учиться писать хороший код, пригодный на всех стадиях проекта и, как вариант, для использования другими людьми.
P. S. На схожую тему – справочник по воспроизводимой науке о данных. Там есть соответствующие разделы по кодингу, а также в целом по организации исследовательских проектов.
PDF-отчёты в Python
#programming
В науке много данных и много способов их обработки. Чтобы определить, какой из методов обработки является оптимальным для текущей задачи, иногда приходится много раз менять различные параметры и смотреть на то, как это влияет на результат. Зачастую на начальных этапах обработки приходится смотреть отдельно на данные каждого участника эксперимента. На выходе получаются десятки и сотни графиков. Изучать их в питоновских тетрадках невозможно, сохранение в файлы по папкам тоже не облегчает ситуацию. Если же нужно посмотреть на графики вместе с коллегами, распространённой тактикой является перетаскивание графиков в презентации или в Notion для дальнейшего распространения. Вспоминается, как два года назад я и мой коллега за полчаса до совещания по проекту в две руки вставляли в Google-презентацию графики из наших скриптов, пытаясь сохранить при этом хоть какую-то структуру в материалах.
В общем, последние несколько лет немалую часть времени, которую я могла бы посвятить осознанию результатов и их анализу, я занималась ручным составлением отчётов.
Решение лежало на поверхности. Пакет PyFPDF позволяет автоматически сохранять полученные в Python графики, текст и прочие данные в pdf-формате, используя всего несколько простых команд. Простой тьюториал можно найти здесь.
#programming
В науке много данных и много способов их обработки. Чтобы определить, какой из методов обработки является оптимальным для текущей задачи, иногда приходится много раз менять различные параметры и смотреть на то, как это влияет на результат. Зачастую на начальных этапах обработки приходится смотреть отдельно на данные каждого участника эксперимента. На выходе получаются десятки и сотни графиков. Изучать их в питоновских тетрадках невозможно, сохранение в файлы по папкам тоже не облегчает ситуацию. Если же нужно посмотреть на графики вместе с коллегами, распространённой тактикой является перетаскивание графиков в презентации или в Notion для дальнейшего распространения. Вспоминается, как два года назад я и мой коллега за полчаса до совещания по проекту в две руки вставляли в Google-презентацию графики из наших скриптов, пытаясь сохранить при этом хоть какую-то структуру в материалах.
В общем, последние несколько лет немалую часть времени, которую я могла бы посвятить осознанию результатов и их анализу, я занималась ручным составлением отчётов.
Решение лежало на поверхности. Пакет PyFPDF позволяет автоматически сохранять полученные в Python графики, текст и прочие данные в pdf-формате, используя всего несколько простых команд. Простой тьюториал можно найти здесь.
Избавление от ненужного
#programming #tools
В последнее время я стараюсь как можно больше заниматься диссертацией и проверяю работу некоторых алгоритмов на разнообразных симуляциях мозговой активности. Сценарии симуляций множатся, я вхожу в раж, пробую разные параметры, и всё это приводит к тому, что мой код превращается в длинное полотно, некоторые фрагменты которого уже нерелевантны.
Поэтому сейчас решила вынести часть кода в модули и функции в соответствии с культурой программирования, которую я упоминала в одном из прошлых постов. На этом страдания не закончились, так как при создании модулей обнаружила большое число ненужных переменных и импортов неиспользуемых библиотек. Казалось бы, можно было бы просто не допускать их появления, но в моём случае красивый код и научное вдохновение редко сопутствуют друг другу.
К счастью, даже для моего хаотичного подхода находятся автоматизированные решения: в данном случае — тулбокс Autoflake. Теперь достаточно одного запроса, и в питоновском файле автоматически удалятся все ненужные импорты и неиспользуемые переменные.
#programming #tools
В последнее время я стараюсь как можно больше заниматься диссертацией и проверяю работу некоторых алгоритмов на разнообразных симуляциях мозговой активности. Сценарии симуляций множатся, я вхожу в раж, пробую разные параметры, и всё это приводит к тому, что мой код превращается в длинное полотно, некоторые фрагменты которого уже нерелевантны.
Поэтому сейчас решила вынести часть кода в модули и функции в соответствии с культурой программирования, которую я упоминала в одном из прошлых постов. На этом страдания не закончились, так как при создании модулей обнаружила большое число ненужных переменных и импортов неиспользуемых библиотек. Казалось бы, можно было бы просто не допускать их появления, но в моём случае красивый код и научное вдохновение редко сопутствуют друг другу.
К счастью, даже для моего хаотичного подхода находятся автоматизированные решения: в данном случае — тулбокс Autoflake. Теперь достаточно одного запроса, и в питоновском файле автоматически удалятся все ненужные импорты и неиспользуемые переменные.
Human Neocortical Neurosolver — от нейрона к сенсорам (почти)
#neuroimaging #programming #resources
Давно не пополняла коллекцию полезных тулбоксов. Несколько дней назад вышла новая версия библиотеки HNN (Human Neocortical Neurosolver) на Python (с описанием исходного программного обеспечения можно ознакомиться в этой публикации).
Ценность этой библиотеки в том, что в очень user-friendly формате она позволяет соотносить МЭГ/ЭЭГ данные с клеточной активностью нейронов, их порождающей. Работать можно, в частности, с вызванными потенциалами или осцилляторной активностью. На фоне оптимистичности подхода можно выделить два ограничения:
1. Фактически основной ингредиент тулбокса — это моделирование активности кортикальных источников в виде первичного тока с использованием биофизической модели нейронов. Соотнесение же с измерениями на МЭГ/ЭЭГ сенсорах осуществляется за счет сопоставления смоделированной активности кортикальных источников и той, которая была реконструирована на основе МЭГ/ЭЭГ с помощью методов решения обратной задачи. Решение обратной задачи в этом случае — отдельный изолированный шаг. О сложностях, которые его могут сопровождать, я писала в одном из предыдущих постов. Получается, что биофизическая модель описывает переход с микроуровня клеток на макроуровень кортикальных источников, но не на уровень сенсоров. Т. е. на выходе мы получаем сопоставление моделей “нейрон-диполь” и “сенсор-диполь”. Это очевидным образом может порождать искажения.
2. Сама используемая биофизическая модель опирается на архитектуру колонок пирамидальных нейронов неокортекса и не затрагивает иные возможные архитектуры. Впрочем, сами используемые параметры (пропорции возбуждения/торможения, специфичные для каждого слоя синаптические взаимодействия и характеристики спайковой активности) обеспечивают некоторые степени свободы.
Несмотря на текущие ограничения подхода, он открывает пространство для тестирования гипотез. В частности, с помощью HNN получилось сформировать предсказания об источниках спонтанных бета-осцилляций в неокортексе, которые затем были подтверждены на основе инвазивных данных мышей и обезьян.
На видео — пример симуляции вызванной активности. А по этой ссылке можно найти пример скрипта, который решает обратную задачу для соматосенсорной вызванной активности, наблюдаемой в МЭГ-данных, а затем моделирует сеть нейронов, репродуцирующую активность соответствующих источников.
#neuroimaging #programming #resources
Давно не пополняла коллекцию полезных тулбоксов. Несколько дней назад вышла новая версия библиотеки HNN (Human Neocortical Neurosolver) на Python (с описанием исходного программного обеспечения можно ознакомиться в этой публикации).
Ценность этой библиотеки в том, что в очень user-friendly формате она позволяет соотносить МЭГ/ЭЭГ данные с клеточной активностью нейронов, их порождающей. Работать можно, в частности, с вызванными потенциалами или осцилляторной активностью. На фоне оптимистичности подхода можно выделить два ограничения:
1. Фактически основной ингредиент тулбокса — это моделирование активности кортикальных источников в виде первичного тока с использованием биофизической модели нейронов. Соотнесение же с измерениями на МЭГ/ЭЭГ сенсорах осуществляется за счет сопоставления смоделированной активности кортикальных источников и той, которая была реконструирована на основе МЭГ/ЭЭГ с помощью методов решения обратной задачи. Решение обратной задачи в этом случае — отдельный изолированный шаг. О сложностях, которые его могут сопровождать, я писала в одном из предыдущих постов. Получается, что биофизическая модель описывает переход с микроуровня клеток на макроуровень кортикальных источников, но не на уровень сенсоров. Т. е. на выходе мы получаем сопоставление моделей “нейрон-диполь” и “сенсор-диполь”. Это очевидным образом может порождать искажения.
2. Сама используемая биофизическая модель опирается на архитектуру колонок пирамидальных нейронов неокортекса и не затрагивает иные возможные архитектуры. Впрочем, сами используемые параметры (пропорции возбуждения/торможения, специфичные для каждого слоя синаптические взаимодействия и характеристики спайковой активности) обеспечивают некоторые степени свободы.
Несмотря на текущие ограничения подхода, он открывает пространство для тестирования гипотез. В частности, с помощью HNN получилось сформировать предсказания об источниках спонтанных бета-осцилляций в неокортексе, которые затем были подтверждены на основе инвазивных данных мышей и обезьян.
На видео — пример симуляции вызванной активности. А по этой ссылке можно найти пример скрипта, который решает обратную задачу для соматосенсорной вызванной активности, наблюдаемой в МЭГ-данных, а затем моделирует сеть нейронов, репродуцирующую активность соответствующих источников.
YouTube
HNN Event Related Potential
Visualization of cortical activity underlying event related potentials as simulated by the Human Neocortical Neurosolver (HNN). Colors in the network correspond to membrane potential.
BIOMAG-2024. Не MNE Python единым
#neuroimaging #resources #programming
После вынужденного перерыва продолжаю серию постов по мотивам конференции BIOMAG. В этом посте представлен перечень инструментов, которые упоминались на конференции и могут пригодиться для анализа нейроданных, если вам не хватает стандартных средств (в частности, MNE Python и др.)
🔖 pyspi
Библиотека на Python, с помощью которой на основе многомерных временных рядов (например, ЭЭГ или фМРТ) можно вычислять многочисленные парные взаимодействия с использованием нескольких десятков метрик, начиная от обычных ковариаций и заканчивая различными видами энтропии.
🔖 HMM-MAR
Этот тулбокс пригодится, если вам нужно сегментировать многомерные нейроданные на квазистатичные состояния. Подход, который реализует этот инструмент, встраивается в логику обнаружения так называемых микросостояний ЭЭГ или МЭГ, но при этом позволяет строить модель с учётом осцилляторных характеристик сигнала и вероятностей перехода из одного состояния в другое.
🔖 GARDEL
Софт для автоматической сегментации и локализации инвазивных электродов стерео-ЭЭГ. Также возможно автоматически соотносить расположение электродов с анатомическими атласами.
🔖 DUNeuro
Библиотека на C++, позволяющая решать уравнения с частными производными для нейронаучных задач, в частности, для построения прямой модели МЭГ/ЭЭГ. Есть основания полагать, что прямая модель, полученная с помощью DUNeuro более точная и реалистичная, чем классические сферические модели или BEM-модель, используемые в MNE Python или Brainstorm. У библиотеки есть интеграция в стандартные пайплайны Python или MATLAB.
🔖 MNEflow
Питоновский пакет, дружелюбный относительно MNE Python, который можно использовать для применения алгоритмов глубокого обучения к МЭГ/ЭЭГ. Лично для меня ценно, что в пакете есть базовые средства, обеспечивающие интерпретируемость некоторых моделей.
🔖 HNN
Тулбокс для биофизического моделирования МЭГ/ЭЭГ. О нём я подробно писала ранее.
🔖 BESA
Проприетарное программное обеспечение для различных видов анализа нейроданных. С его помощью можно и локализовывать кортикальные источники, и оценивать функциональную связность, и проводить соответствующий статистический анализ. Также доступны отдельные пакеты для автоматического обнаружения межсудорожных разрядов или приступов в данных пациентов с эпилепсией.
#neuroimaging #resources #programming
После вынужденного перерыва продолжаю серию постов по мотивам конференции BIOMAG. В этом посте представлен перечень инструментов, которые упоминались на конференции и могут пригодиться для анализа нейроданных, если вам не хватает стандартных средств (в частности, MNE Python и др.)
Библиотека на Python, с помощью которой на основе многомерных временных рядов (например, ЭЭГ или фМРТ) можно вычислять многочисленные парные взаимодействия с использованием нескольких десятков метрик, начиная от обычных ковариаций и заканчивая различными видами энтропии.
Этот тулбокс пригодится, если вам нужно сегментировать многомерные нейроданные на квазистатичные состояния. Подход, который реализует этот инструмент, встраивается в логику обнаружения так называемых микросостояний ЭЭГ или МЭГ, но при этом позволяет строить модель с учётом осцилляторных характеристик сигнала и вероятностей перехода из одного состояния в другое.
Софт для автоматической сегментации и локализации инвазивных электродов стерео-ЭЭГ. Также возможно автоматически соотносить расположение электродов с анатомическими атласами.
Библиотека на C++, позволяющая решать уравнения с частными производными для нейронаучных задач, в частности, для построения прямой модели МЭГ/ЭЭГ. Есть основания полагать, что прямая модель, полученная с помощью DUNeuro более точная и реалистичная, чем классические сферические модели или BEM-модель, используемые в MNE Python или Brainstorm. У библиотеки есть интеграция в стандартные пайплайны Python или MATLAB.
Питоновский пакет, дружелюбный относительно MNE Python, который можно использовать для применения алгоритмов глубокого обучения к МЭГ/ЭЭГ. Лично для меня ценно, что в пакете есть базовые средства, обеспечивающие интерпретируемость некоторых моделей.
Тулбокс для биофизического моделирования МЭГ/ЭЭГ. О нём я подробно писала ранее.
Проприетарное программное обеспечение для различных видов анализа нейроданных. С его помощью можно и локализовывать кортикальные источники, и оценивать функциональную связность, и проводить соответствующий статистический анализ. Также доступны отдельные пакеты для автоматического обнаружения межсудорожных разрядов или приступов в данных пациентов с эпилепсией.
Please open Telegram to view this post
VIEW IN TELEGRAM