Типизированный R
187 subscribers
10 photos
4 videos
15 links
Yet Another Programming Blog. Just better.

Про R, пространственный анализ, науку и жизнь в НИИ
Download Telegram
#intro

Привет, это Толя Цыпленков. Буду писать про науку, карьеру, программирование, книги, статьи, неудачи на работе и прочие интересности.

Все самое интересное — на гитхабе, так же иногда
на английском буду анонсировать в LinkedIn и Мастодон, а на русском — тут.
🤩10
#intro

Почему типизированный и что ждать в канале

Вообще "Типизированный R" — это каламбур, так как язык R славится своей динамической типизацией (типа "на словах ты целое число, а не деле строка"), и многими рассматривается только как статистический инструмент. Я хочу доказать обратное.

Мои интересы вертятся не только вокруг R, поэтому на канале еще будет про:
- геопространственный анализ #geospatial
- науку #science
- карьеру #career
- жизнь в Новой Зеландии #nz
🤩7
#rstats #python #geospatial

Кто является lingua franca пространственного анализа?

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

Полез проверять эту гипотезу и оказалось, что аналитики на этот счёт очень мало! Да, есть глобальные тренды языков программирования, но без конкретики по областям. Наткнулся на API StackExchange и проверил количество вопросов, отмеченных тегами R или Python на gis.stackexchange.com за последние 10 лет.

Удивительно, но R, как оказалось, лидировал вплоть до середины 2024 года. А сейчас оба языка достигли определённого равновесия. Хотя после релиза ChatGPT 3.5 осенью 2022 мне кажется, что на Stack Exchange вообще никто не заходит и все эти оценки не показательные.

➡️➡️➡️
😀 код и данные
Please open Telegram to view this post
VIEW IN TELEGRAM
9
This media is not supported in your browser
VIEW IN TELEGRAM
#rstats

Ода rig

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

Наверное, главная его особенность в возможности установки разных версий R, но для меня, преданного фаната Debian👩‍💻, его преимущество — отсутствие головой боли с установкой зависимостей, ключей и того, что версия r-base в apt все еще 4.2.2

Вы только посмотрите, как быстро он ставит свежий R 4.4.3 в одну короткую команду!

rig add 4.4.3


Запустить RStudio с определенной версией:

rig rstudio 3.5.3


Запустить RStudio с версией R, что прописана в файле renv.lock:

rig rstudio <renv-lockfile> 


На windows rig еще к тому же поможет вам установить нужный rtools (нужный установится по умолчанию, а вообще можно любой).

rig system rtools add


➡️➡️➡️
😀 r-lib/rig
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩7🤗2
#rstats #ggplot2

Фух, дописал заявку на грант R Consortium, отправил коллегам на ревью. Конечно пришлось помучаться с Quarto, так как шаблон написан в нем. Все-таки для меня этот инструмент для генерации .pdf/.docx пока еще очень неоднозначный. Дебаггинг шрифтов, размеров картинок, занимает уйму времени и каждый раз я задаю себе вопрос — стоит ли оно того?

Для составления диаграммы Ганта впервые воспользовался библиотекой {ganttrify}, и это что-то, что я могу рекомендовать! В принципе, даже с дефолтными параметрами получается неплохой результат. А на вход требуется всего лишь датафрейм с датами и названиями задач.

  ganttrify::ganttrify(
project = wbw_project,
spots = wbw_spots,
by_date = TRUE,
alpha_wp = 0,
exact_date = TRUE,
month_number_label = FALSE,
mark_quarters = TRUE,
project_start_date = "2025-05",
font_family = "Inter"
)


У них так же есть и веб версия, где можно сделать диаграмму из эксель, гугл шитс или csv — https://ganttrify.europeandatajournalism.eu/

➡️➡️➡️
😀 giocomai/ganttrify
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩10🤗1
#python #rstats

Относительно недавно reticulate обновился и теперь поддерживает менеджер окружений 👩‍💻 Python uv . Очень удобно теперь вызывать какие-то небольшие зависимости, которые в R не реализованы, или реализованы хуже¹. Необходимо лишь вызвать py_require() перед импортом библиотеки.

Например, есть классная библиотека phik, которая позволяет произвести корреляционный анализ не только для числовых, но и для категориальных данных. Очень хороший инструмент для первичного знакомства с датасетом, так как может выявить взаимосвязь, даже если она нелинейна (Baak et al, 2020). Чтобы сделать базовый EDA с R-объектами:

library(reticulate)

# объявляем зависимости Python
py_require("pandas")
py_require("phik")

# импортируем Py библиотеки как обычно
pd <- import("pandas")
phik <- import("phik")

# конвертируем R датафрейм в Py датафрейм
iris_py <- r_to_py(iris[, 3:5])

# делаем анализ
iris_py$phik_matrix() |>
py_to_r() |>
dplyr::as_tibble(rownames = "var")

> # A tibble: 3 × 4
> var Petal.Length Petal.Width Species
> <chr> <dbl> <dbl> <dbl>
> 1 Petal.Length 1 0.778 0.994
> 2 Petal.Width 0.778 1 0.951
> 3 Species 0.994 0.951 1


Помимо прочего, uv теперь можно использовать ещё и во время разработки R-пакетов. Классный примерvrtility, на мой взгляд, очень элегантно и бесшовно подтягивает numpy при загрузке. Больше не нужно мучиться с настройками conda и venv, которые были необходимы, когда, например, работаешь с rgee.

➡️➡️➡️
🔗¹ Более серьёзный анализ, конечно, лучше проводить, полноценно написав на Python и обмениваясь между R и Python через .parquet или другие форматы данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩7
#rstats #cran

Отличный способ прокачать свои R-скиллы — это начать контрибьютить в опен-сорс проекты (это касается любого ЯП). Как автор нескольких библиотек и расширений, я уверяю вас, что в большинстве своём разработчики будут только рады вашему вкладу (см. скрин).

Я обычно выбираю библиотеки, с которыми более или менее знаком, и либо нахожу баг, который требует исправления, либо беру issue на гитхаб, которое кажется посильным. Но сегодня увидел ресурс cranhaven.org — там есть постоянно обновляемый список пакетов CRAN ❤️, которые находятся под угрозой архивации. По-моему, это прекрасное место, чтобы начать. У многих проектов там есть проблемы всего лишь с документацией или с зависимостями в DESCRIPTION, поскольку CRAN недавно стал требовать указывать версию R ≥ 4.1, если используется встроенный пайп (ака |>).

Например, для repmis и treeClust требуется исправления ссылок в документации [1, 2], а в divvy немного поправить тесты [3]. Главное, чтобы R-CMD-Check был
Please open Telegram to view this post
VIEW IN TELEGRAM
🤗9
#nz #science #python

Ох, хороший мем на злобу дня («Это я возвращаюсь к R после рискованной попытки покорения Python»).

У моих коллег недавно вышла библиотека raster2dggs 🐍 с прекрасной задумкой — трансформация пространственных растров (спутниковых снимков, цифровых моделей рельефа и тд.) в дискретные глобальные сети (discrete global grid). На примере Uber H3 (гексагоны) они показали, как агрегируют и хранят данные в формате parquet. Занимают мало места, легко анализировать и еще иерархия ячеек присутствует, в общем, кайф. Так же вышла статья в Big Earth Data (Law & Ardo 2025), которая была выбрана редколлегией как лучшая статья месяца! С чем я их поздравляю и завидую))

Ну а дальше классическая ситуация большинства питон кода — он не запускается нигде кроме компьютера разработчиков 😋 Если у кого-то получится поставить версию с PyPI — дайте мне знать пожалуйста))) Я в итоге так и не смог ничего установить, только вспомнил подкаст Подлодки #336, там тоже прожаривали питон за это. Гость предложил фанатскую теорию, что докер стал популярным во многом из-за того, что это единственны способ запустить питон код на другом устройстве 🖥.

Хорошо, что в R есть CRAN ❤️. Он заставляет тебя написать тесты, доку и еще убедиться, что библиотека установиться из-под всех ОС и разных архитектур.

➡️➡️➡️
😀 manaakiwhenua/raster2dggs
Please open Telegram to view this post
VIEW IN TELEGRAM
🤗8🤩4😐2
Недавно вышел препринт статьи, написанной разработчиками самых популярных библиотек для геопространственного анализа на R, Python и Julia (Pebesma et al., 2025). Во введении есть классная диаграмма, которая показывает, насколько высокоуровневые либы похожи между собой на низком уровне. По сути, всё стоит на трёх китах: GDAL, GEOS, PROJ 👩‍💻👩‍💻

Пару мемов, чтобы подкрепить данный тезис 😋
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩14
Наука и данные
▫️ Refactoring code with flir - автоматическое исправление кода, целью которого служит улучшить его читаемость аналогично {lintr}
This media is not supported in your browser
VIEW IN TELEGRAM
flir кстати можно запустить в Positron при помощи расширения formalist. Выделил нужный кусок текста, нажал Ctrl+Shift+PFix all lints

Ну или по старинке манипулятором-указателем типа мышь 👆

➡️➡️➡️
😀 atsyplenkov/formalist
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩6
#science #ai

Последнее пару месяцев блоками работаю сразу над тремя статьями и постоянно рука тянется какую то гипотезу проверить в литературе. Разочаровавшись окончательно в Academic Pro Search от Perplexity, поймал себя, что я снова по старинке ищу статьи в Google Scholar. Само по себе это конечно не преступление, а, наоборот, классика проверенная временем, но очень уж времязатратная. Последний эпизод подкаста Podlodka вдохновил на использование Gemini 2.5 Pro для автоматизации всего.

Поигравшись с Gemini 2.5 Pro, придумал как с его помощью собрать базу научных статей, скачать им всем полный текст в формате PDF и загрузить в LLM с большим контекстным окном. По сути, это контролируемый аналог Deep Research от Perplexity , который позволит вам получить ответ на вопрос на любую тему. Да, не так быстро, но зато больше никаких статей от MDPI в источниках!

Подробный гайд опубликовал в Вастрик.Клубе, но если коротко, то через базу данных OpenAlex скачиваем интересующие нас статьи в формате .ris, конвертируем их в .json и загружаем в Google AI Studio 👓. Там устанавливаем температуру на ноль, выбираем Gemini 2.5 Pro и просим выбрать 50 наиболее релевантных статей. Скачиваем список в формате .bib, загружаем в Zotero и ищем полные тексты в формате PDF. Найденные PDF загружаем в NotebookLM 📔, где задаем интересующие вопросы.

➡️➡️➡️
✖️https://vas3k.club/post/28996
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩14🤗4😐1
This media is not supported in your browser
VIEW IN TELEGRAM
#science #rstats #ai

Мой любимый юзкейс Google AI Studio 👓 за последнюю неделю это попросить воспроизвести код из какой-то статьи или отчета.

Например, наша команда сейчас работает над разработкой противоэрозионных мер для регионов Новой Зеландии. И для этого нам нужно знать расположение каждого дерева с точностью до 50 см, особенно на пастбищах и лугах. Обычно определением растительности занимается наш Geoinformatics Team, они вместе с IT раскручивают сегментацию облаков точек LiDAR на наших HPC 🖥. Для этого они используют какой-то секретный форк manaakiwhenua/pycrown.

Мне сегодня очень срочно нужно было получить расположение всех деревьев на одном участке 30 км². Запрашивать код или просить сделать это за меня было бы слишком долго, я в итоге решил сделать все сам. За неимением доступа к форку pycrown, решил воспользоваться библиотекой lidaRtRee, с которой до этого никогда не работал. Но вот проблема, сегментация облаков точек LiDAR требует достаточно тонкой настройки кучи параметров, которых я конечно не знаю. Однако, есть отчет для региона Hawkes Bay, где коллеги эти все параметры должны были упоминать.

Вместо того, чтобы выискивать эти параметры в отчете, я пошел в Google AI Studio 👓, загрузил туда пдф отчета и документацию lidaRtRee в формате .md, выбрал Gemini 2.5 Pro, поставил температуру на ноль и попросил воспроизвести сегментацию. Егор Котов сделал классную библиотеку rdocdump, которая превращает любую документацию библиотеки R в структурированный маркдаун, как раз для таких целей! Ну собственно и все, даже простенький промпт дает отличный результат, который экономит кучу времени. Пара часов рабочая станция пошуршала и 120 000 деревьев оцифрованы 🏆

😒 Кажется канал надо переименовывать в "НИИшник"

➡️➡️➡️
😀 manaakiwhenua/pycrown
😀 e-kotov/rdocdump

# Perform the complete segmentation workflow
segments <- tree_segmentation(
dem = chm,

# --- Parameters for CHM smoothing ---
nl_filter = "Median",
nl_size = 11, # 3m filter size / 0.3m resolution = 10 pixels -> use 11 (must be odd)
sigma = 0, # No Gaussian smoothing mentioned

# --- Parameters for treetop detection ---
hmin = 3, # Minimum tree height of 3 metres
dmin = 2, # Minimum distance of 2 metres between treetops
dprop = 0 # No proportional distance mentioned
)
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩16
This media is not supported in your browser
VIEW IN TELEGRAM
#rstats #geos

Немного прикольных трудовых будней. Есть очень подробная речная сеть из более чем 43 000 полигонов для региона Greater Wellington (8200 км²) в формате шейпфайла (.shp) размером 560 Мб. Задача — обрезать речную сеть по границам региона и преобразовать её в растр с разрешением 1 м. Однако файл слишком большой, и известные мне инструменты не справляются ни с обрезкой, ни с конвертацией в растр. К сожалению, даже geos с его функциями на основе R-дерева не смог запуститься. А ведь geos чемпион по скорости пространственных операций в R 🏎

На помощь пришла журнализация изменений библиотеки geos. Оказывается, читать changelog полезно 😒. Там я узнал про функцию geos_hilbert_code, которая присваивает каждой геометрии в объекте код кривой Гилберта. В данной реализации это вариант DGGS (Discrete Global Grid). При малых уровнях он может служить классным инструментом пространственной кластеризации.

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

system.time(geos::geos_hilbert_code(rivers, level = 3))
#> user system elapsed
#> 0.321 0.000 0.321


Далее, с помощью wk и terra, я быстро нарезал всё на тайлы и растеризовал каждый по отдельности. В итоге на весь регион ушло меньше минуты компьюта и полдня на решение задачи 😎. Код в комментах.

P.S. как видите, тайлы перекрывают друг друга и совершенно разные по размеру. Это надо учитывать потом при составлении мозаики (склеивания растров обратно в один).

➡️➡️➡️
😀 paleolimbot/geos
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩12
This media is not supported in your browser
VIEW IN TELEGRAM
#rstats #python #julia #js

Выпустили обновление расширения pastum для VS Code, Positron, Cursor и других IDE на базе Code OSS. Созданное по принципу datapasta для RStudio, pastum позволяет вставлять таблицы из буфера обмена в среду разработки в формате датафрейма.

Текущая версия v0.3.0 поддерживает основные фреймворки ❤️, 👩‍💻, 👩‍💻, 🟣 и теперь Markdown !! Также добавлено распознавание CSV таблиц. То есть небольшие таблицы теперь можно просто скопировать и вставить прямо в R, вместо использования fread("data.csv").

Добавили много опций для конфигурации, которые позволяют настроить формат вставки под себя. Обязательно посмотрите на доступные опции в настройках @ext:atsyplenkov.pastum
Можно выбрать фреймворк по умолчанию, правила переименования названий столбцов, разделитель десятичных дробей и т.д.

Расширение доступно на VS Marketplace и Open VSX Registry. То как все работает подробно расписано на https://pastum.anatolii.nz/

➡️➡️➡️
😀 atsyplenkov/pastum
👩‍💻 atsyplenkov.pastum
📐 atsyplenkov.pastum
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩10🤗1
#science #nz

Сегодня узнал, что модель которую мы разрабатывали год назад 1) опубликовали на сайте регионального правительства; 2) несколько раз писали о ней в СМИ.

Пока что лучшая похвала за работу, которую я получал 😁

No model is perfect, but this one really is pretty good
🤩18🤗11
This media is not supported in your browser
VIEW IN TELEGRAM
#science

Вчера выступил на "Виноградовских чтениях 2025" в Санкт-Петербурге с докладом про коррекцию глобальных моделей стока на примере Анадыря.

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

Получилась интересная работа (слайды — тут), где при помощи Detrended Quantile Mapping откорректировали GloFAS-ERA5. Достаточно простой и эффективный метод, который, к сожалению, очень плохо реализован на R (скоро исправим 💪).

P.S. Кстати впервые делал слайды в Quarto, до сих пор не могу понять, стоит игра свеч или нет. На их создание потратил около 12 часов, хотя получилось очень простенько. То же самое в PowerPoint/Google Slides сделать можно было часа за два...

➡️➡️
https://atsyplenkov.github.io/glofas-presentation/
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩16🤗9