Математик среди биологов

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

Cайт со всеми родами диатомовых водорослей 1.0

Готова первая версия сайта со списком всех родов диатомовых водорослей.

micro-algae.ru/diatoms/all-genera

Сайт двуязычный. Имеет минималистичный дизайн.



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

  • макси: по отделам и семействам,
  • мини: по семействам,
  • роды: только роды без группировки.

Подменю дает возможность увидеть роды из всех подклассов, из одного выбранного подкласса (Bacillariophycidae, Coscinodiscophycidae, Fragilariophycidae), или роды с неопределенным систематическим положением (Undefined).

Это единственный сайт, который показывает сплошной список 1375 родов диатомовых водорослей.

Продолжение следует...


Пространные рассуждения о том, почему был выбраны именно такие ранги высших таксонов, приведены в ВК.

Все делается легко и просто, пока не доказано обратное

Никита Прокопов хорошо написал о простом и сложном.


Я предполагаю, что все делается легко и просто, пока не доказано обратное.

В половине случаев я прав. Сложные вещи, которых все боятся, часто оказываются довольно простыми! Маркдаун-парсер это сложно — а я пошел и написал. Роутер это сложно — а я пошел и написал. База данных это сложно — а я пошел и написал. Шрифт это сложно — а я пошел и сделал. UI-фреймворк это сложно — а пошел и до сих пор пишу и господи когда же это закончится сколько можно конца даже за горизонтом не видно. Ну и получаю я в итоге бесценный опыт, библиотеку, которая делает точно то что мне нужно, некоторое узнавание, ну и помогу кому бывает, не без этого.

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

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

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

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



Неустойчивость филогнетического дерева

Филогенетическое дерево, построенное по молекулярно-генетическим данным, неустойчиво.

Потому, что:

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

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


Об этом же пишет википедия:

[...] дерево, построенное на основе ограниченных данных (например, последовательности единственного гена или белка), требует скептического отношения к себе, потому что дерево, построенное на основе другого независимого источника данных, нередко будет отличаться от первого.

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

Эрудированность и ум

Как-то коллега заметила, что не знает смысла слова «смарти», значит она не умная.

Я парировал, что знания не есть ум.

Ум — это умение использовать имеющиеся знания и делать правильные выводы на их основе.

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

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

Будьте смарти.

Список родов диатомовых. 3/n

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

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

К счастью, у меня есть опыт проектирования структуры БД и создания таксономических информационных систем.

Таксономическая БД

Таксономическая база данных (ТБД) нужна для составления компьютерных списков таксонов, виртуальных коллекций, атласов и определителей. Это костяк любой таксономической информационной системы.

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

Более подробно о функциях и устройстве ТБД
можно почитать в заметке

и в статье 2018 года:

Примеры использования ТБД можно увидеть:

В ближайшее время помещу в ТБД список таксонов диатомовых и создам веб-страничку для доступа к ней.

Список родов диатомовых. 2/n

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

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

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

Номенклатура в JSON

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

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

Остается преобразовать полученные json-файлы в работоспособную базу.

JSON → Эксель

Данные о роде мы можем сохранить в виде строки текста, в которой значимые элементы отделены символом-разделителем. В качестве разделителя используем точку с запятой.

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

Но Эксель мы не сможем нормально использовать на сервере. Поэтому для доступа к данным в вебе потребуется настоящая СУБД.

Список родов диатомовых. 1/n

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

Статьи

Рода диатомовых перечислены в некоторых публикациях. Например, в каталоге родов диатомовых 1999 года

Fourtanier E. & Kociolek J.P. (1999) Catalogue of diatom genera.

Из которого вырос каталог названий диатомовых 2009 года, тех же авторов.

Fourtanier E. & Kociolek J.P. (2009) Catalogue of diatom names.

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

Базы данных

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

Почти все названия диатомовых хранят:

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

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

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

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

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

АПИ

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

К счастью Вормс — это открытая система. Он предоставляет АПИ для извлечения данных.

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

/AphiaRecordsByTaxonRankID/{ID} 
Get the AphiaRecords for a given taxonRankID (max 50)

Сейчас он возвращает только первые 50 названий (родов). Остальные остаются недоступными.

Разница между speed и velocity

Картинка сегенерирована Гигачатом

В русском языке скорость мы называем единственным термином — скорость.

В английском для обозначения скорости используются термины speed и velocity. Но их семантика различна.

Speed — это скалярная (числовая) величина, которая обозначает просто скорость движения.

Velocity — это векторная величина (вектор), которая обозначает как скорость, так и направление движения.

То есть когда мы говорим speed, то подразумеваем, что что-то просто двигалось с такой-то скоростью. А когда мы говорим velocity, то, помимо значения скорости, еще указываем направление движения.

Корректное определение прокрастинации

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

Белоснежка, нарисованная Франсуа Рока, пример правильно прокрастинирующей принцессы

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

Наблюдение 19. Жизнь без лекарств

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

Симлер К. Хэнсон Р. «Слон в голове. Скрытые мотивы в повсевдневной жизни.»


Классификация разделов математики Американского математического общества

Американское математическое общество (AMS) выработало стандарт для классификации разделов математики. Он регулярно обновляется.

https://mathscinet.ams.org/mathscinet/msc

Текущая версия стандарта MSC 2020 включает 97 разделов, подразделы которых перечислены на более, чем 200 страницах.

Приятного изучения.


Если вам понравилась заметка, то вы можете купить мне пироженку, задонатив в телетайп-канале «Математический рок-н-ролл».

Математический рок-н-ролл — регулярные заметки о необычной математике доступным языком

Фотограф Лукас Холас. Серия «Портреты животных».

Математический рок-н-ролл

За последние несколько месяцев я опубликовал более 30 классных популярных математических заметок для ВК канала «Ежик в матане». Но ленточное устройство ВК оставляет их активным сутки, иногда чуть больше, после чего они канут в Лету, то есть становятся практически недоступными. Это неудобно.

Чтобы избежать потери заметок, начинаю переносить их в Телетайп, в блог «Матеатический рок-н-ролл».


  1. Теперь посты будут всегда доступными, пока существует Телетайп)
  2. Блог в Телетайпе содержит уникальные заметки, посвященные необычной математике, описанной доступным языком.
  3. За заметки вы можете меня поблагодарить донатом. Это поможет написать новые посты.


Первый пост называется «Оценка средних и карьера Вики». Он содержит краткий обзор различных средних значений.

Это была моя самая первая заметка для «Ежика», благодаря которой стал одни из его пишущих редакторов.


Заходите. Будет интересно.

Математический рок-н-ролл


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

Целоисчисленная матрица — это матрица, все элементы которой являются целыми числами.

Определитель целоисчисленной матрицы — тоже целое число. (Очевидно же.)

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

Очевидно, что если множество возможных элементов матриц конечно, то и число возможных богемных матриц заданного размера тоже конечно.

Пусть мы ищем среди всех богемных матриц только те, определитель которых равен нулю. Ищем при помощи кода на Питоне. Определитель матрицы вычисляем так:

dt = np.linalg.det( a )

И вот тут возможна ошибка.

Если мы будем выбирать матрицы по условию dt==0, то получим неверный результат.

Using that test (dt==0) Python got the right number of [...] matrices when mdim=2 or mdim=3, but the test dt==0 failed a few times when mdim=4, and (after a long time computing) reported 15,015,617 singular matrices; the true number is 15,099,201. This is because np.linalg.det is computing the determinant from a numerical factoring (which introduces rational numbers and rounding error) and the roundoff error means that sometimes a zero determinant was not being reported as precisely zero.

Правильный результат получится если мы используем условие dt<0.5.

https://computational-discovery-on-jupyter.github.io/Computational-Discovery-on-Jupyter/Contents/bohemian-matrices.html#table-of-results

Rесурсы. Выбрать строки с одинаковыми индексами из data.table

Это техническая заметка-напоминалка о некоторых возможностях пакета data.table.

Задача

Есть несколько таблиц data.table с данными. Назовем их dt_meta, dt_x, dt_y, dt_area.

В каждой таблице есть колонка the_index.

Из таблицы dt_meta выбираю строки, удовлетворяющие критерию. Например, все строки, в которых значение the_length > 120:

dt_meta[the_length > 120]

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

Решение

Использую специальный символ .I

.I возвращает номера строк. Но у него есть особенности.


Код

dt_meta[the_length > 120, .I]

вернет последовательные номера строк в новой таблице: 1, 2, 3, ....


Код

dt_meta[, .I[the_length > 120]]

вернет номера строк в исходной таблице: 5, 9, 13, 63, ....


Для решения нужен второй вариант кода. Вот решение.

# Номера строк исходной таблицы, в которых the_length > 120
indexes <- dt_meta[, .I[the_length > 120]]
# Выбираю такие же строки из других таблиц
new_x <- dt_x[indexes]
new_y <- dt_y[indexes]
new_area <- dt_area[indexes]

Сцилла и Харибда в 1665 году

Из книги Афанасия Кирхера «Mundus Subterraneus».

Обратите внимание на прекрасный канал, вход в который перекрывает водоворот Харибда.

Вот эта же часть на спутниковой карте

Карта повернута вправо ~60°

Закорючка на месте, а вот суши у Сицилии прибавилось.

Эта часть Сицилии сейчас пронизана тоннелями. А может и на карте Кирхера показан тоннель, а не канал?

Карта Солнечной системы 1849 года

Между Солнцем и Венерой — планета Вулкан.

Между Марсом и Юпитером — четыре планеты: Веста, Юнона, Церера и Паллада.

Указана правильная длительность венерианский суток — 224 земных дня.
(Это в 1849 году, причем сейчас Венера покрыта плотной непроницаемой для оптики атмосферой!)


Подсказал тг «Эпоха недоверия».

Очень кратко о JSON Lines

jsonlines.org

Джисон-лайнс состоит из строк, разделенных символом новой строки \n.

Каждая строка является отдельным объектом джисон.

Джисон-лайнс можно обрабатывать построчно,
это основное достоинство формата.

jsonl — расширение файлов джисон-лайнс.


JSON

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

[
  {"id": 1, "position": [{"x": 17, "y": 256}], "status": "grow"},
  {"id": 2, "position": [{"x": 78, "y": 341}], "status": "sleep"},
  {"id": 3, "position": [{"x": 45, "y": 650}], "status": "moved"},
  ...
]

JSON Lines

Каждая строка — отдельный объект джисон; можем читать файл построчно.

{"id": 1, "position": [{"x": 17, "y": 256}], "status": "grow"},
{"id": 2, "position": [{"x": 78, "y": 341}], "status": "sleep"},
{"id": 3, "position": [{"x": 45, "y": 650}], "status": "moved"},
...

Карта названий Севастопольских бухт

Нашел у себя в запастниках карту с названиями Севастопольских бухт. Рисовал сам. К сожалению карта только в виде растра, вектор потерялся.

Если найду или сделаю вектор, поделюсь.

Справочник по УДК

Нашел неплохой справочник по УДК

https://perviy-vestnik.ru/udc/

Достоинство — динамический поиск: набрал текст — увидел результат.

Недостаток — УРЛ странички статичен, не меняется при переходе к разделу справочника, и не удобно скакать по разделам.



УРЛ все время такой:

  • /perviy-vestnik.ru/udc/

Хочется, чтобы было так:

  • /perviy-vestnik.ru/udc/004.6/ — и ты в разделе о «Данных».
  • /perviy-vestnik.ru/udc/004.94/ — и ты в разделе о «Компьютерном моделировании».
  • /perviy-vestnik.ru/udc/57.02/ — и ты в разделе «Биологические и этологические процессы: механизмы, взаимодействие с окружением».
Ранее Ctrl + ↓