Я немного умею складывать, но от вычитания у меня всегда кружится голова

Позднее Ctrl + ↑

Хорошие книги для изучающих R

Обновлено 24 ноя 2023.


Собрал ссылки на хорошие книги по R. Все на английском языке. Все бесплатно доступны в онлайне, но также можно купить бумажные издания.

Для доступа к некоторым книгам понадобится Ви-Пи-Эн.

Использование R

Advanced R. Второе издание.
The book is designed primarily for R users who want to improve their programming skills and understanding of the language. It should also be useful for programmers coming to R from other languages, as help you to understand why R works the way it does.

R for Data Science. Второе издание.
This book will teach you how to do data science with R: You’ll learn how to get your data into R, get it into the most useful structure, transform it and visualize.

Дендрограммы

Data Integration, Manipulation and Visualization of Phylogenetic Trees.
Рассказывает как строить дендрограммы и филогенетические деревья с помощью пакета ggtree. Есть глава, где говорится как прикрутить картинки к дендрограмме.

Статистическое моделирование

Tidy Modeling with R.
This book is a guide to using a collection of software in the R programming language for model building called tidymodels, and it has two main goals:

  • First and foremost, this book provides a practical introduction to how to use these specific R packages to create models. We focus on a dialect of R called the tidyverse that is designed with a consistent, human-centered philosophy, and demonstrate how the tidyverse and the tidymodels packages can be used to produce high quality statistical and machine learning models.
  • Second, this book will show you how to develop good methodology and statistical practices. Whenever possible, our software, documentation, and other materials attempt to prevent common pitfalls.

Визуализация

R Graphics Cookbook. Второе издание.
A practical guide that provides more than 150 recipes to help you generate high-quality graphs quickly, without having to comb through all the details of R’s graphing systems. Each recipe tackles a specific problem with a solution you can apply to your own project, and includes a discussion of how and why the recipe works.

ggplot2: Elegant Graphics for Data Analysis. Третье издание.
While this book gives some details on the basics of ggplot2, its primary focus is explaining the Grammar of Graphics that ggplot2 uses, and describing the full details. It is not a cookbook, and won’t necessarily help you create any specific graphic that you need. But it will help you understand the details of the underlying theory, giving you the power to tailor any plot specifically to your needs.

Статьи

«Кто за всех решил, что Python удобен для „гражданской“ аналитики?», — объясняет, почему R лучше Питона.

Провал первой попытки прослеживания путей перемещения протист

Профессор Плейшнер шел по улице. Проходя мимо явочной квартиры, он мельком взглянул на окно. Занавеска была отодвинута. На подоконнике стояло семнадцать утюгов и один цветок. «Явка провалена», — понял Плейшнер.


Это третья, аналитическая заметка из серии об анализе траектории движения протист.

В первой заметке объяснил, как с помощью ffmpeg осветлить видео снятое на фотоаппарат, соединенный с микроскопом.

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

Напомню, что видео необходимо для построения траекторий движения микроорганизмов.




Для решения задачи использую Трекмейт (TrackMate).

Трекмейт — это плагин к Фи-джи (Fiji), который предназначен для прослеживания, визуализации, редактирования и анализа траекторий движения объектов, снятых на видео. Интерфейс Трекмейта состоит из последовательности диалоговых окон, в которых необходимо выбрать алгоритмы обработки видеоизображений и указать параметры этих алгоритмов.


Мои попытки научить Трекмейт проследить траектории микроорганизмов провалились.




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

Пробовал пороговую сегментацию (tresholding detector) и методы сегментации по инвариантным точкам (invariant feature detectors): LoG (Laplassian of Gaussian, Лапласиан Гаусиана :), DoG (differences of Gaussians, разница Гаусианов), Hessian (детектор Гессе).

Пороговая сегментация нашла всего один объект, а алгоритмы сегментации по инвариантным точкам приняли за объект каждое пятнышко.

Детектор Гессе приметил каждое пятнышко

Другие доступные методы сегментации не попробовал.




Далее взял результаты сегментации изображения детектором Гессе и, путем интуитивно-случайного подбора параметров (не записал их значения), оставил выделенными только нужные организмы и несколько мусорных пятен.

Однако их траектории проследить не удалось.

Трекинг построил слишком короткие пути и не все относятся к протистам.

Много коротких, частично некорректных треков — это провал




Cделал следующие выводы:

  1. Необходимо хотя бы в общих чертах понимать, как работают алгоритмы сегментации и трекинга, как на них влияют параметры и когда их стоит применять, а когда нет.
  2. Качество видеоизображений следует еще более улучшить: повысить контраст между подвижными организмами и статичным фоном, фон сгладить или вообще удалить.
  3. Желательно автоматически создать маску, на которой организмы будут отмечены цветом, а фон будет белым.
  4. Следует попробовать иные способы сегментации или другие программы выделения треков.

Об этом расскажу в другой раз.




Всем прочитавшим — Лаплассиана Гауссинана :)

Комбинируем кадры движения протист в многослойные тифы

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


Это вторая техническая заметка из серии об анализе траектории движения протист. В ней поговорим, как объединить кадры видео в пакеты по сто кадров и сохранить их в многослойных тифах.

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


В конце заметки приведена ссылка на скрипт, который преобразует mov в многослойные tif

Последовательность действий

Буду использовать ИмеджМаджик и батч-скрипт Виндоус. (Вместо последнего можно взять Поверскрипт, для Линукса — баш, но это вы уже сами :).

Скрипт разделяет тифы на группы: 1...100, 100...200, 200...300, ... и объединяет файлы из каждой группы в многослойный тиф.

Последний тиф группы совпадает с первым тифов седующей группы: 1...100≡100...200≡200... Так сделано для того, чтобы потом программа смогла правильно соединить кусочки траекторий, выделенные в группах, в целые траектории.

Инициализируем вспомогательные переменные

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

  • frame_0001.tif, frame_0002.tif, frame_0003.tiff, ...

Укажем в батч-скрипте название каталога, префикс тиф-файлов и префикс многослойных тифов.

rem Инициализируем вспомогательные переменные
:initialization
    set tif_file_prefix=frame_
    set group_file_prefix=merged_
    set tifs_dir=tifs

Посчитаем число тифов

Мы не знаем, сколько файлов у нас есть. Поэтому воспользуемся советом и напишем скрипт:

rem Считает число тифов в заданном каталоге
:calc-tifs-number
    cd %tifs_dir%
    dir *.tif /A:-D /B 2>nul | find /c /v "" > tmp
    set /p tifs_numb=<tmp
    set /a tifs_numb+=0
    del tmp
    cd ..

Скрипт переходит в каталог с тифами, записанном в переменной tifs_dir, считает число тифов и запоминает его в файле tmp, загружает значение из этого файла в переменную tifs_numb и удаляет tmp-файл.

Подсчет и сохранение числа в файл выполняет команда

dir *.tif /A:-D /B 2>nul | find /c /v "" > tmp

где опция

*.tif выбирает только тиф-файлы;
/A:-D убирает из подсчета каталоги и оставляет только файлы;
/B выводит только названия файлов;
2>nul не выводит строки с ошибками;
| передает полученный список файлов следующей команде;
find /c /v "" считает число строк в списке файлов;
> tmp запоминает полученное число в файл tmp.

Прочие команды скрипта очевидны.

Вычисляем количество групп файлов и число файлов в последней группе


set /a num_groups=1+(%tifs_numb%-1)/100
set /a numb_in_last_group=(%tifs_numb%)%%100

Объединяем тифы каждой группы в один многослойный тиф

В Имеджмаджик есть утилита convert, которая с ключом -adjoin объединяет тифы в один многослойный.

convert 0001.tif 0002.tif ... 100.tif -adjoin merged_1-100.tif
convert 0100.tif 0101.tif ... 200.tif -adjoin merged_100-200.tif
...

Параметрами команды служат названия файлов. В первой группе у нас сто тифов, во всех остальных, кроме последней, сто один тиф, в последней — оставшиеся файлы.

Для формирования cписка файлов используем цикл, после завершения которого все тифы будут объединены в многослоные тифы.

set /a file_index=0
set /a group_index=0

cd %tifs_dir%
    rem Пробегаем по каждой группе
    for /l %%G in (1,1,%num_groups%) do call :loop_groups %%G
cd ..

echo All tifs have been merged into multilayered tifs
pause

goto :eof

Цикл вызывает подпрограмму :loop_groups, где и происходит слияние. Подпрограмма принимает номер группы, вычисляет для нее номера первого и последнего файла, формирует список файлов с этими номерами и, в итоге, объединяет их в многослойный тиф.


:loop_groups

rem Определям начальный и конечный номер файла в группе
set /a start_index=group_index*100

if %1 EQU %num_groups% (
    rem Это последняя группа
    set /a finish_index=start_index+%numb_in_last_group%
) else (
    rem Это не последняя группа
    set /a finish_index=start_index+100
)

if %start_index% EQU 0 set /a start_index=1


rem Формируем список файлов.
rem Для этого перебираем номера файлов от start_index до finish_index
rem и конструируем название файла с каждым номером в пп loop_files
set file_list=
for /l %%H in (%start_index%,1,%finish_index%) do call :loop_files %%H


rem Задаем имя результирующего многослойного тифа
set merged_file=%group_file_prefix%_%start_index%-%finish_index%.tif


rem Конвертируем
convert %file_list% -adjoin %merged_file%


rem Переходим к следующей группе
set /a group_index=group_index+1

goto :eof

Сам список файлов поэлементно строится в подпрограмме :loop_files. Она принимает номер файла, дополняет его нулями, добавляет к нему префикс и помещает в конец списка (строки).

:loop_files
rem Добавляет ведущие нули к индексу файла
set "file_index=0000%1"
set "file_index=%file_index:~-4%"

rem Дополняет файл префиксом
set file_name=%tif_file_prefix%_%file_index%.tif

rem Добавляет название файла в конец списка
set "file_list=%file_list%%file_name% "
	
goto :eof

Итоговый скрипт

Готовый батч-скрипт пробразует mov в многослойные tiff.

Он использует код из двух заметок и:

  • спрашивает название мув-файла с видео;
  • спрашивает, нужно ли осветлить видео;
  • спрашивает название каталога, куда следует поместить многослойные тифы;
  • спрашивает, нужно ли удалить тифы с отдельными кадрами после завершения работы.


Скачать скрипт mov-to-tifs

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


Для работы скрипта необходимо установить ImageMagick.


Вопросы, связанные с функционирование скрипта, задавайте в комментариях.

Улучшаем качество видео движения протист и нарезаем его на кадры

Это заметка из серии об анализе траектории движения протист. В ней поговорим, как улучшить качество видео и нарезать его на кадры.



Для фиксации движения протист используем фотоаппарат, соединенный с микроскопом. Несмотря на сильный свет, наш фотоаппарат снимает темное видео с низким контрастом.

Темное низкоконтрастное видео

Поэтому интересующие нас простейшие незначительно отличаются от фона.

Кадр исходного видео

Если в графическом редакторе автоматически улучшить контраст, получится хорошо.

Автоматическое осветление

Если подправить гистограмму, тоже выйдет неплохо.

Коррекция гистограммы улучшает заметность живых объектов и грязи на стекле; грязь мешает, но она неподвижна, поэтому после прослеживания траекторий, мы ее уберем

Очевидно, что использовать графический редактор для исправления всех кадров — нереально. Поэтому нагрузим работой компьютер: улучшим видео с помощью FFmpeg.

Улучшаем видео с помощью ffmpeg

Фотоаппарат записыват видео в формате mov (мув). FFmpeg осветлит его и покадрово сохранит в заданном каталоге.

Осветляем видео
Следующая команда читает исходный видеофайл input.mov и исправляет гистограмму каждого кадра так, чтобы черная точка сдвинулась до 64 (0,25~64/255), а белая — до 120 (0,47~120/255).

ffmpeg -i input.mov 
-vf "monochrome ,
     colorlevels=romin=0.25:rimax=0.47:gomin=0.25:gimax=0.47:bomin=0.25:bimax=0.47 ,
     smartblur=2.0:-0.7:-3.5:0.65:0.25:2.0"
output.avi

Опция -vf говорит, что мы применяем фильтры, влияющие на качество изображения.

  • Фильтр monochrome делает видео черно-белым.
  • Фильтр colorlevels выполняет коррекцию гистограммы. Его параметры:
    • r|g|b|omin задают уровень красной, зеленой и синей компоненты минимальной (черной) точки,
    • r|g|b|imax соответственно максимальной (белой);
    • значения компонент лежат в диапазоне [0; 1], что соответствует уровням [0; 255].
  • Фильтр smartblur немного шарпит границы — делает их более резкими.

Команда записывает результат в файл output.avi.

Чтобы фильтры обработали видео, выходной файл должен иметь иной формат, отличный от мув. В данном случае — это avi. Однако при конвертации в ави качество обработанного видео ухудшается. Поэтому поступим по иному.

Запишем каждый кадр обработанного видео в отдельный файл
Для этого заменим последнюю срочку команды на следующую:

-compression_algo lzw -pix_fmt rgb24 enhanced/frame_%04d.tif

Она сохранит каждый кадр обработанного видео в сжатом тиф-файле (-compression_algo lzw -pix_fmt rgb24) в каталоге enhanced. Тифы получат префикс frame_ и будут пронумерованы четырехзначным номером с ведущими нулями (%04d):

  • frame_0001.tif, frame_0002.tif, frame_0003.tif, ....

Вся команда выглядит так:

ffmpeg -i input.mov 
-vf "monochrome ,
     colorlevels=romin=0.25:rimax=0.47:gomin=0.25:gimax=0.47:bomin=0.25:bimax=0.47 ,
     smartblur=1.5:-0.35:-3.5:0.65:0.25:2.0"
-compression_algo lzw -pix_fmt rgb24 enhanced/frame_%04d.tif

Результат радует.

Осветленные кадры видео

Резюме

Чтобы осветлить видео и покадрово сохранить его в заданном каталоге, используйте приведенную команду ffmpeg.

В дальнейшем тифы понадобятся для формирования многослойных тифов, которые будут использованы для выделения треков протист.



На сегодня все.

Серия заметок об анализе траекторий движения протист


Последнее обновление 5 янв. 2024 года.

Планирую выпустить серию заметок про обработку видео с подвижными живыми микрообъектами. Мы хотим понять, как двигаются одноклеточные организмы (протисты) определенного вида при разных условиях, меняется ли что-то в их движении и что именно. Это наша задача.

Задача: определить, что меняется в движении протист при разных условиях

Решение задачи состоит из нескольких шагов: подготовки культуры, съемки видео, обработки видео, выделения траекторий движения, анализа траекторий, общего анализа результатов, интерпретации, выводов.


Оглавление серии

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


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


Немного о рутине

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


Необходимый софт

Для автоматизации рутины использую:

  • Пакетный файл Виндоус (батч-файл, bat-файл)
  • Баш (bash) Юникса для исполнения алгоритмов обработки видео и изображений;
  • FFmpeg для автоматической работы с видео;
  • ImageMagick для автоматической обработки изображений кадров;
  • Fiji для построения траекторий.
  • Эр для выделения объектов на кадрах и построения траекторий движения объектов.

Заметил, что многие естествоиспытатели просто не умеют нагружать компьютер работой. Одну из заметок посвящу инструментам автоматизации, облегчающим научную жизнь.


Занесите заметку в закладки, чтобы не потерять.


Подписывайте масштабные отрезки

Держите строй. Правила поведения на ВДНХ. 2020 год

Изучим обозначения масштаба на рисунках и фотографиях микроводорослей, случайно выбранных из статей 1950-2020-х годов.

Увеличено в × раз

Когда автор четко понимал, какого размера будет иллюстрация после печати, под ней писали, во сколько раз увеличен тот или иной объект.

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

У каждого рисунка свое увеличение. Koppen, 1975

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

Сейчас подобный способ обозначения масштаба — моветон.

Масштаб 10 мкм

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

Длины отрезков подписаны рядом. Florin, 1957. ПДФ

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

Много масштабных отрезков, но все имеют одинаковую длину — 10 мкм. Sterrenburg, 1991

Удобство чтения рисунка от этого сильно пострадало.

Потому что для определения масштаба приходится переводить взгляд с фотографии на легенду и там выискивать, какой масштаб соответствует фото с заданным номером, а затем — возвращаться назад.

У каждого рисунок свой отрезок и отдельная подпись в легенде. Benico et al., 2019

Когда масштабных отрезков много, они отличаются длинной и в их расположении нет порядка — поиск в легенде нужной длины превращается в мучение.

Легенда содержит шесть длин масштабных отрезков. Almeida et al., 2016
Здесь пять длин масштабов, но разобраться где-какая — очень сложно. Генкал и Ярушина, 2018

Не делайте так.

Пишите длину около масшабного отрезка

Авторы и редакции журналов, которые заботятся о читателе, подписывают длину рядом с отрезком.

Поступайте также.

Выводы

Масштабный отрезок — самое важное обозначение на изображениях микроорганизмов. Только он позволяет понять истинный размер бактерии, водоросли, клетки или простейшего. Поэтому длину масштабного отрезка читатель должен считывать мгновенно, сразу, с листа. Позаботьтесь о читателе — укажите размер рядом с отрезком.

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

Выровнять шеренги. Правила поведения на ВДНХ. 2020

Миникартинки Архипа

Архип — это билиотека опубликованных изображений диатомовых микроводорослей.


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

Сверху и снизу каждой миникартинки есть цветовые полосы и подписи.

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

Нижние полосы используются для объединения миникартинок в серии, извлеченные из одной и той же публикации. Под первой полосой, отличающейся от соседней слева, приведена аббревиатура этой публикации.

Название вида над и аббревиатура статьи под миникартинкой — это ссылки, которые приведут к разделам со всеми фотографиями вида или всеми фотографиями из статьи.

Некоторые авторы ошибаются в видовой идентификации и приводят названия видов, которые не соответствуют изображенному организму, либо их соответствие вызывает сомнения. Архип помечает такие видовые названия специальными символами: ! — значит вид указан неверно, ? — значит определение вида сомнительно.

Такие сомнительные определения найдены в статье Ryabushko et al. (2022) The epipsammon diatoms of Kruglaya Bay (the Black Sea). I. Centric, araphid and monoraphid.


3d-microalgae.org/arxip


Сделай сам

Повторное использование чужих приемов — это нормально

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

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

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

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

Депрессия. Из рецензии на книгу Домонкоса Сика «Социальные патологии современной цивилизации»

Рамон Касас. Юная декадентка. 1899.

Пишет Дмитрий Борисов.

Домонкос Сик определяет несколько условий, которые должны совпасть для формирования депрессии.

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

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

В-третьих, мир перестает восприниматься как место, где можно реализовать свои возможности, а всякая деятельность воспринимается как бесперспективная. Отказ от действия и акты прокрастинации еще больше укрепляют другие аспекты депрессии, «доказывая тщетность сопротивления». Изоляция от мира (в том числе, и телесная) способствует накоплению опыта «невозможности действовать».

Наконец, происходят телесные трансформации — превращение в «мертвое тело, существующее как объект». В этом случае человек теряет способность взаимообмена аффективными состояниями с другими. Речь об эмпатии, предполагающей эмоции, потенциально открытые для влияния со стороны других. [...] В депрессии же происходит принципиальное нарушение такой интертелесности, а именно — превращение живого тела, способного посредничать для себя и других, в мертвое, существующее как объект. Соответственно, и весь мир теряет свой «живой характер», становясь «мертвой материей».

Страдающий модерн. Дмитрий Борисов — о книге социолога Домонкоса Сика.

—-

Есть разные способы выхода их депрессии. Среди них, я рекомендую заниматься правильной йогой.

Пародии на «Офелию» Джона Милле

Увидел где-то в коментах ВК, как один товарищ запостил фоточку с голыми девицами.

Фотограф Оксана Лещенко

Между прочим в 2020 году это фото стало победителем раздела «100 лучших фотографий обнаженных» фотопремии 35awards.

Но меня заинтересовало иное. Я понял, что где-то видел что-то похожее. Оказалось — это пародия на «Офелию» Джона Милле.

Джон Милле. «Офелия». 1851-1852.

И оказалось, что такие пародии делают часто и много.

Выдача Яндекса по фразе «утопленницы среди кувшинок».

Так что прав был Экклезиаст:

  • Что было, то и будет; и что делалось, то и будет делаться, и нет ничего нового под солнцем.

Главное: получается, что победительницей престижной премии стала фотография, изображающая утоплениц?!

Архип — библиотека опубликованных изображений диатомовых микроводорослей

Архип — это таксономическая информационная система, предназначенная для дистанционного взаимодействия с опубликованными изображениями диатомовых водорослей.

3d-microalgae.org/arxip

Архип предоставляет фотообразцы видов диатомовых, необходимые для идентификации других диатомовых водорослей.

Работа с Архипом подразумевает просмотр и выбор фотографий, соответствующих заданному критерию. Это могут быть фотографии из выбранной статьи, или фотографии какого-то вида или представителей рода, или фотокопии таблиц с морфологическими признаками.

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

Архип ориентирован на работу с опубликованными фотографиями, которые являются частью научной публикации. Особенность таких изображений заключается в том, что они содержат уже идентифицированный организм, обнаруженный на некоторой территории в указанное время. То есть такие фотографии являются достаточно надежным образцом для идентификации организмов такого же вида или рода.

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

Для работы с Архипом необходим зарегистрироваться: указать электронную почту, имя, организацию и согласиться с правилами использования предоставленных материалов.

Правила работы с Архипом подразумевают, что вы согласны использовать фотографии только в научных, учебных и личных целях.

3d-microalgae.org/arxip

Архип рад всем таксономистам и систематикам, которые занимаются диатомовыми водорослями планктона и бентоса морей, рек, озер и океанов.

Система таксонов диатомовых микроводорослей в моих проектах

Панцирь диатомовой микроводоросли Pseudostaurosira cataractarum. Рис. 93, 94 из [Beauger et al., 2018]

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

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

На следующем уровне находятся два морфотаксона: центрические и пеннатные диатомовые: Centric и Pennate.

Они, в свою очередь, разделяются на морфотаксоны:

  • центрические однополюсные (Centic unipolar),
  • центрические двуполюсные (Centric bipolar),
  • пеннатные бесшовные (Pennate araphid),
  • пеннатные одношовные (Pennate monoraphid)
  • пеннатные двушовные (Pennate biraphid).

Роды диатомовых я отношу к одному из этих морфотаксонов. К родам отношу виды, вариететы и формы. Считаю, что вариететы и формы имеют ранг вида.

Получается следующая система:


  • Bacillariophyta
    • Centric
      • Centic unipolar
        • роды центрических однополюсных
      • Centric bipolar
        • роды центрических двуполюсных
  •  
    • Pennate
      • Pennate araphid
        • роды пеннатных бесшовных
      • Pennate monoraphid
        • роды пеннатных одношовных
      • Pennate biraphid
        • роды пеннатных двушовных

Я не использую промежуточные традиционные таксоны ранга семейства или класса, потому что:

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

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

P. S. Впредь буду ссылаться на эту заметку в статьях, где потребуется объяснить используемую систему высших таксонов диатомовых микроводорослей.

РНФ высказал свою позицию относительно учета публикаций

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

Российский научный фонд в своей деятельности всегда оперировал публикациями в ведущих рецензируемых российских и зарубежных научных изданиях. Уровень издания определяется качеством рецензирования публикаций, которое должно признаваться научным сообществом. Руководствуясь государственными программными документами, РНФ использовал для оценки общепринятые индексы — базы данных „Сеть науки“ (Web of Science Core Collection) и „Скопус“ (Scopus), при этом учитывая не только количественные, но и качественные показатели. Такой подход в целом обеспечивал достаточно высокое качество конкурсного отбора заявок и экспертизы отчетов по проектам.

В силу недавних событий РНФ отказался от использования показателей, привязанных к конкретным базам данных, и усилил роль экспертной оценки публикаций. Сейчас экспертным советам предстоит не только самостоятельно давать содержательную оценку научным результатам, но и оценивать качество публикаций и уровень научных изданий, в которых эти результаты обнародованы.

Экспертные советы РНФ придерживаются позиции, что накопленный опыт работы РНФ является хорошей основой для определения требований к периодическим научным изданиям, в которых должны быть размещены публикации. Даже сложившаяся ситуация, по мнению экспертных советов, не должна привести к снижению уровня представления результатов. Помимо общепринятых требований (периодичность, регулярность выпусков, наличие редколлегии, рецензирование материалов, содержание издания, следование стандартам оформления, индексация в одной или нескольких зарубежных библиографических базах и пр.) для соответствия требованиям РНФ научные издания, в которых представляются научные результаты, должны удовлетворять и следующему требованию — их уровень должен быть не ниже изданий, индексируемых в базах данных „Сеть науки“ (Web of Science Core Collection) и „Скопус“ (Scopus), а также Russian Science Citation Index (RSCI).

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

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

Оригинал на сайте РНФ

Ассоциативный массив в старых версиях Дельфи

В Королевстве Дельфи много лет назад Дмитрий Рябов предложил реализацию ассоциативных массивов.

«На практике часто возникает потребность сохранять и обрабатывать данные в массивах, осуществляя доступ к элементам не по индексу, а по ключу. Для этого используются ассоциативные массивы, которые есть, например, во многих скриптовых языках. В Delphi на уровне языка такая структура отсутствует. В качестве замены часто используются контейнерные классы TStringList, TParams и т. п., но они весьма неудобны в использовании и недостаточно функциональны. К тому же появляется необходимость заботиться об уничтожении экземпляра класса, что зачастую порождает лишние try..finally..end

В чем фишка реализации.

«Удобное использование, неплохая производительность, отсутствие небходимости принудительного уничтожения, нескольно представлений одного массива, использование ключей разных типов, наличие функций итератора, удобное использование многомерных массивов.»»

Я иногда ее использую в своих проектах и всегда опасаюсь, что текст с примерами будет окончательно потерян. Потому решил воспроизвести его здесь.


program Example;
{$APPTYPE CONSOLE}
uses
  Arrays;

procedure Main;
var
  I: IIntArray;
  S: IStrArray;
  V: IVarArray;
  M: IMltArray;

begin
  // создаём массив и получаем представление в целых числах
  I := CreateArray;

  // заполняем
  I['a'] := 5;
  I['b'] := 1;
  I['c'] := 4;
  I['d'] := 2;
  I['e'] := 3;

  // выводим
  WriteLn('Original array');
  I.First;
  while not I.Eof do
  begin
    WriteLn('[', I.CurrentKey, '] = ', I.CurrentValue);
    I.Next;
  end;

  // сортируем
  I.Sort;

  // наблюдаем результат
  WriteLn('Sorted array');
  I.First;
  while not I.Eof do
  begin
    WriteLn('[', I.CurrentKey, '] = ', I.CurrentValue);
    I.Next;
  end;

  // создаём строковое представление
  S := I.Instance;

  // наблюдаем результат
  WriteLn('Two views of one array');
  S.First;
  while not S.Eof do
  begin
    WriteLn('[', S.CurrentKey, '] + ''10'' = ', S.CurrentValue + '10');
    WriteLn('[', I.CurrentKey, '] + 10 = ', I.CurrentValue + 10);
    S.Next;
  end;

  // создаём вариантное представление
  V := S.Instance;
  V.Clear;
  V['integer'] := 10;
  V['string'] := '10';

  // наблюдаем результат
  WriteLn('Variant type conversion');
  V.First;
  while not V.Eof do
  begin
    WriteLn('[', V.CurrentKey, '] + 10 = ', V.CurrentValue + 10);
    WriteLn('[', V.CurrentKey, '] + ''10'' = ', V.CurrentValue + '10');
    V.Next;
  end;

  // используем ключи разных типов, но одного значения
  S.Clear;
  S[False] := 'boolean';
  S[0] := 'integer';
  S[0.0] := 'float';
  S['0'] := 'string';

  // наблюдаем результат
  WriteLn('Variant type keys ;)');
  S.First;
  while not S.Eof do
  begin
    WriteLn('[', S.CurrentKey, '] = ', S.CurrentValue);
    S.Next;
  end;

  // создаём ещё одно представление, на этот раз - многомерное
  M := V.Instance;
  M.Clear;

  // заполняем матрицу
  M['A']['a'].AsInteger := 1;
  M['A']['b'].AsInteger := 2;
  M['A']['c'].AsInteger := 3;
  M['B']['a'].AsInteger := 4;
  M['B']['b'].AsInteger := 5;
  M['B']['c'].AsInteger := 6;
  M['C']['a'].AsInteger := 7;
  M['C']['b'].AsInteger := 8;
  M['C']['c'].AsInteger := 9;

  // выводим матрицу
  WriteLn('Multidimensional array');
  M.First;
  while not M.Eof do
  begin
    M.CurrentValue.First;
    while not M.CurrentValue.Eof do
    begin
      WriteLn('[', M.CurrentKey, ',', M.CurrentValue.CurrentKey, '] = ',
        M.CurrentValue.CurrentValue.AsInteger);
      M.CurrentValue.Next;
    end;
    M.Next;
  end;

  // перед возвратом все созданные массивы автоматически удаляются
  WriteLn('Arrays is free');
end;

var
  L: Integer;
begin
  L := AllocMemSize;
  Main;
  // проверка утечки памяти
  WriteLn('Memory leak: ', AllocMemSize - L, ' bytes');
  ReadLn;
end.

Скачать исходники из Королевства

Посмотреть рекомендацию оссоциативного массива на Стакэксчендже .

Наблюдение 17. Корреляция, война и прививки

У меня создается впечатление, что есть хорошая положительная корреляция между людьми, которые (1) делают прививки, (2) призывают прекратить войну на Украине, (3) ругают Путина.

Примерно такая же, как между таксистами, которые жалуются на дорогой бензин и Путина, и не дают сдачу.

Есть повод задуматься.

Профиль в ВК

В ВК я публикую всяческие краткие заметки на разные темы или симпатичные кратинки, подсмотренные у прелестной Шакко.

Блогерши. На самом деле эта картина называется по другому, но я не помню как и, публикуя ее вот таким образом я нарушаю авторские права. А название «Блогерши» выбрано для иллюстрации этой заметки.

Если вы за мной регулярно скучаете, то вот

Мой профиль в ВК.

Давайте дружить.

Помогите решить задачу по физике о вытекании воды из дырявых кастрюль

Задача

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

Плотная — значит, что расстояние между отверстиями меньше диаметра. Достаточно далеко, наоборот, значит, что расстояние между отверстиями в несколько раз больше их диаметра.

Теперь я наливаю в обе кастрюли одинаковый объем воды.

Вопросы:

  1. Эта вода вытечет из обеих кастрюль за одинаковое время или нет?
  2. Если время будет разным, значит на скорость вытекания воды влияет расположения отверстий. Тогда каким физическим законом описывается эта зависимость?

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

Закон Пуазейля

На форуме dxdy подсказали, что возможно здесь работает закон Пуазейля:

lel0lel: Если отверстия рядом, то суммарное вязкое трение будет меньше, так как соседние слои также находятся в движении. Относительно неподвижен только периметр всего семейства. А если отверстия далеко, то периметр каждого отверстия испытывает трение. В общем, чем-то напоминает формулу Пуазёйля.

Кроме того, посоветовали подумать над вопросом:

lel0lel: Вот ещё подумайте над таким вопросом: через какую систему будет проходить больший объём жидкости при условии, что перепад давления одинаков — через N параллельных труб радиуса r или одну трубу радиуса rN?

Закон Пуазейля формулируется следующим образом:

Объем Q жидкости, протекшей за секунду через поперечное сечение трубки, прямо пропорционален разности давлений r и r0 у входа в трубку и на выходе из нее и четвертой степени диаметра d трубки и обратно пропорционален длине l трубки и коэффициенту вязкости m жидкости:

Отсюда очевидный вывод: чем больше диаметр трубки и меньше ее длина, тем больше воды протечет через трубу.

Новые вопросы

После этого у меня возникли новые вопросы:

  1. Как найти критическое значение расстояния между отверстиями, такое, что если расстояния между отверстиями меньше данного критического, то мы их можем спокойно заменить на одно большое?
  2. Наоборот, как это критическое расстояние будет связано с диаметром отверстий?
  3. Что почитать по этому поводу — может статья какая-то хорошая есть?

lel0lel опять подсказал, что:

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

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

Отверстия микроскопического размера

Мои «кастрюли» крайне малы — диаметром меньше миллиметра с отверстиями порядка одного микрона. Отсюда возник следующий вопрос:

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

И вот возможные объяснения:

sergey zhukov: Не знаю, если честно. По моему, все должно работать. Разве что вязкость жидкости на таких масштабах может оказаться несколько другой. Или же могут проявиться другие реологические свойства жидкости (отклонения от ньютоновой жидкости). Может, поверхностное натяжение как-то неожиданно проявится.

lel0lel: Конечно, свои ограничения формула имеет. Она получена для ламинарного течения, при условии, что длина трубы много больше участка, на котором создаётся параболический профиль скоростей.

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

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

Наконец sergey zhukov подсказал:

sergey zhukov: Есть похожая задача — гидравлическое сопротивление перфорированных решеток. Здесь, правда, рассматривается довольно узкий диапазон расстояний между отверстиями, который вряд ли простирается до области, где отверстия перестают влиять друг на друга.

Формула Пуазейля хороша для расчета ламинарных потоков в трубах без учета сопротивления входа и выхода.

И посоветовал такую последовательность приближений

N параллельных труб площадью S каждая против одной трубы площадью NS.

N дроссельных шайб сечением S против одной дроссельной шайбы сечением NS. Расчет сопротивления дроссельной шайбы стандартный.

N дроссельных шайб сечением S против одной дроссельной шайбы с решетчатым отверстием общим сечением ячеек NS.

Решетка из N отверстий сечением S против дроссельной шайбы с решетчатым отверстием общим сечением ячеек NS.

Я тоже думаю, что во всех случаях во втором варианте сопротивление будет меньше.

Вывод

Таким образом предварительный вывод таков:

  • Отверстия, расположенные близко друг к другу, будут пропускать воду быстрее.
  • Однако, можно ли, и при каких условиях, заменить их на одно отверстия — мне пока не ясно.

Буду благодарен за любые объяснения.

Переверстал программу юбилейной конференции ФИЦ ИнБЮМ

ФИЦ ИнБЮМ в честь своего стопятидесятилетия с 13 по 18 сентября 2021 проводит юбилейную конференцию.

Увидел программу конференции и понял, что она плохо сверстана. Объясню почему.

Не понятно где и когда будут выступления

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

Посмотрите на лист из программы. Он рассказывает о том, когда будут выступления и где они будут проходить? Нет, не рассказывает. Потому, что эта информация дана на предыдущем листе.

Что надо сделать. Поместить сведения о месте и времени выступления на этот же лист.

Названия докладов сливаются с авторами

Сейчас читатель может быстро прочитать ФИО выступающего — оно выделено жирным. Но чтобы увидеть название доклада, ему надо немного напрячься, так как «название закючено в кавычки и более никак не выделено». Чтобы прочитать всю страницу — надо напрячься сильнее. К концу последней страницы от такого чтения устаешь.

Что надо сделать. Выделить название доклада.

Дистанционные доклады не выделены

Точнее они выделены подписью «дистанционный доклад», которая идет за ФИО докладчика, а следом идет название доклада. Это еще больше усложняет чтение программы.

Что надо сделать. Выделить дистанционные доклады

Авторы отделены от доклада

Внизу страницы написаны авторы доклада, тогда как само название доклада дано на следующей странице, которую мы не видим. Так верстать нельзя.

Что надо сделать. Необходимо соединить авторов с докладом.

Невнимание к деталям

Заметил две ошибки:

  • Видовые названия не выделены курсивом.
  • Нет единства в написании одни и тех же аббревиатур: «к.б.н» и «к. б. н.»; «ИБ КарНЦ РАН» и «Институт Биологии КарНЦ РАН».

Что надо сделать. Следует придерживаться единообразия в верстке.


Ниже мой вариант листа программы.

Что я сделал:

  • Написал в левом-верхнем углу дату и место проведения секции.
  • Для названия доклада выделил отдельную строку, а авторов сместил левее. Теперь можно легко сверху-вниз скользить по фамилиям докладчиков и по названиям докладов.
  • Дистанционные доклады пометил значком вай-фая, который взял у Сереги Чикина.
  • Вровнял время перерывов и докладов по цифрам.
  • Немного ужал верстку.
  • Убрал висячих авторов на другую страницу.

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


Я учусь верстать. Если вам надо сверстать небольшой текст или постер, пишите: me@antonlyakh.ru

Прием программирования: Вовремя остановиться

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

Для того, чтобы код нельзя было больше выполнить, я внедряю в него оператор die().

Главное — вовремя остановиться.

Ранее Ctrl + ↓