Видео: Личные кейсы использования ChatGPT в рутинных рабочих задачах
Друзья, я выпустил новый видеоурок, где делюсь своим опытом использования ChatGPT 4 в работе аналитика данных. В этом видео вы узнаете о моих успешных и не очень успешных кейсах применения ChatGPT для генерации кода на R и M, а также какие сложности возникли при переводе Python кода в R.
Что вас ждет в видео:
● Обзор пользовательских GPT для аналитиков данных
● Успешные примеры генерации R и M кода для различных задач
● Опыт автоматизации задач с помощью ChatGPT
● Пример неудачной попытки перевода кода с Python на R
Тайм-коды:
00:00 Вступление
01:08 Пользовательские GTP для аналитика данных
07:31 Успешный кейс №1: Генерация R кода для запроса курсов валют
13:33 Успешный кейс №2: Генерация кода на языке M для генерации справочников в Power Query
20:05 Успешный кейс №3: Генерация R кода для отправки HTTP запроса по скриншоту из Postman
24:56 Неуспешный кейс: Перевод Python кода в R
28:33 Заключение
В комментариях делитесь своими кейсами использования в работе ChatGPT.
Ссылки:
● Статья с конспектом к видео уроку
● Видео на YouTube
#видео_уроки_по_R
Друзья, я выпустил новый видеоурок, где делюсь своим опытом использования ChatGPT 4 в работе аналитика данных. В этом видео вы узнаете о моих успешных и не очень успешных кейсах применения ChatGPT для генерации кода на R и M, а также какие сложности возникли при переводе Python кода в R.
Что вас ждет в видео:
● Обзор пользовательских GPT для аналитиков данных
● Успешные примеры генерации R и M кода для различных задач
● Опыт автоматизации задач с помощью ChatGPT
● Пример неудачной попытки перевода кода с Python на R
Тайм-коды:
00:00 Вступление
01:08 Пользовательские GTP для аналитика данных
07:31 Успешный кейс №1: Генерация R кода для запроса курсов валют
13:33 Успешный кейс №2: Генерация кода на языке M для генерации справочников в Power Query
20:05 Успешный кейс №3: Генерация R кода для отправки HTTP запроса по скриншоту из Postman
24:56 Неуспешный кейс: Перевод Python кода в R
28:33 Заключение
В комментариях делитесь своими кейсами использования в работе ChatGPT.
Ссылки:
● Статья с конспектом к видео уроку
● Видео на YouTube
#видео_уроки_по_R
YouTube
ChatGPT для аналитика данных. Успешные и не успешные кейсы использования в работе.
В этом видео я делюсь своим опытом использования ChatGPT 4 в работе аналитика данных. С мая 2024 года ChatGPT 4 стал доступен бесплатно, хоть и с ограниченным доступом, что позволяет нам исследовать его потенциал без дополнительных затрат.
Я расскажу о нескольких…
Я расскажу о нескольких…
👍23🔥10👏4
Новое видео на YouTube: Как настроить запуск R скриптов по расписанию с помощью GitHub Action
В новом видеоуроке я погружаюсь в мир непрерывной интеграции и развёртывания (CI/CD), а также расскажу, как автоматизировать запуск скриптов с помощью GitHub Actions. Я покажу способ, который позволяет настроить расписание запуска ваших скриптов без необходимости аренды серверов.
Что вы узнаете из видео:
● Основы CI/CD и их роль в автоматизации.
● Настройка рабочего процесса с GitHub Actions.
● Конфигурация YAML файлов для управления рабочими процессами.
● Настройка автоматического запуска скриптов по расписанию.
Тайм-коды:
00:00 Вступление
00:49 CI/CD: Непрерывная интеграция и непрерывное развёртывание
01:45 Что такое GitHub Actions
02:30 Обзор рабочего процесса
03:05 Создание репозитория на GitHub
05:11 Добавляем в репозиторий R-скрипт
08:03 Настройка GitHub Actions
09:47 Конфигурация YAML файла, описывающего рабочий процесс
10:10 Настройка расписания запуска в YAML файле
12:17 Разбираем все команды в YAML файле рабочего процесса
19:01 Создание переменных среды в GitHub репозитории
20:26 Отправляем проект на GitHub
20:52 Запускаем GitHub Action
22:46 Заключение
Если видео окажется полезным и наберёт много откликов то в будущем запишу такое же видео про GitLab.
Ссылки:
● Видео урок
● Статья с конспектом к уроку
#видео_уроки_по_R
В новом видеоуроке я погружаюсь в мир непрерывной интеграции и развёртывания (CI/CD), а также расскажу, как автоматизировать запуск скриптов с помощью GitHub Actions. Я покажу способ, который позволяет настроить расписание запуска ваших скриптов без необходимости аренды серверов.
Что вы узнаете из видео:
● Основы CI/CD и их роль в автоматизации.
● Настройка рабочего процесса с GitHub Actions.
● Конфигурация YAML файлов для управления рабочими процессами.
● Настройка автоматического запуска скриптов по расписанию.
Тайм-коды:
00:00 Вступление
00:49 CI/CD: Непрерывная интеграция и непрерывное развёртывание
01:45 Что такое GitHub Actions
02:30 Обзор рабочего процесса
03:05 Создание репозитория на GitHub
05:11 Добавляем в репозиторий R-скрипт
08:03 Настройка GitHub Actions
09:47 Конфигурация YAML файла, описывающего рабочий процесс
10:10 Настройка расписания запуска в YAML файле
12:17 Разбираем все команды в YAML файле рабочего процесса
19:01 Создание переменных среды в GitHub репозитории
20:26 Отправляем проект на GitHub
20:52 Запускаем GitHub Action
22:46 Заключение
Если видео окажется полезным и наберёт много откликов то в будущем запишу такое же видео про GitLab.
Ссылки:
● Видео урок
● Статья с конспектом к уроку
#видео_уроки_по_R
YouTube
Запуск R скриптов по расписанию с помощью GitHub Actions
В этом видео уроке мы подробно рассмотрим концепцию CI/CD, то есть непрерывной интеграции и непрерывного развёртывания. Мы узнаем, как настроить автоматический запуск ваших скриптов по расписанию с помощью сервиса GitHub Actions, что позволяет обходиться…
🔥31👍5
Сравнение Chat GPT с Claude AI в рабочих кейсах дата аналитика
Друзья, ChatGPT однозначно является одной из наиболее мощных и популярных LLM (Large Language Model), но это не единственный инструмент в данной категории. Недавно я рассказал о том, как использую персонализированные ChatGPT в своей работе, и поделился четырьмя рабочими кейсами в видео.
В этот раз я решил сравнить ответы кастомных ChatGPT 4 из моего видео с тем, что предложила другая LLM — Claude AI (3.5 Sonnet). Результат оказался для меня неожиданным.
Забегая наперёд, скажу, что Claude AI — условно бесплатная нейросеть.
Ниже приведено сравнение всех четырёх кейсов, о которых я рассказывал в своём видео.
==================================
Кейс #1: Генерация кода для получение курса валют
Промпт:
Результат:
Claude AI предложил больше вариантов реализации. Самый первый вариант с использованием пакета
✅Лучший ответ дал Claude AI.
==================================
Кейс #2: Генерация справочников из столбцов таблиц в Power BI
Промпт:
Результат:
Claude AI сразу дал готовый работающий код, не смотря на некоторую неточность в промпте, предложенный код достаточно было просто скопировать и вставить в Power BI, при этом дал мне 4 отдельных блока кода для каждого справочника. ChatGPT после исправления неточности в промпте дал один код генерирующий массив справочников, и далее его потребовалось немного дорабатывать для генерации каждого отдельного справочника.
✅Лучший ответ дал Claude AI.
==================================
Кейс #3: Написание запроса к API по скриншоту из Postman
Промпт:
Результат:
Claude AI справился с задачей с первой попытки, сразу сгенерировав корректный код. ChatGPT потребовалось несколько итераций и мои подсказки.
✅Лучший ответ дал Claude AI.
Кейс #4: Перевод кода Python на R
Промпт:
Результат:
С задачей не справился ни Claude AI, ни ChatGPT, но Claude AI объяснил, что в R нет реализации метода BlowFish и что за пару итераций он не смог его реализовать.
==================================
Вывод:
Пока по моим тестам Claude AI показал себя даже лучше чем кастомные ChatGPT, так что не стоит зацикливаться только на какой то одной LLM, тестируйте разные на своих задачах, проверяйте какая модель даёт более точные ответы, какая работает быстрее.
Пока что меня приятно удивил Claude AI.
Друзья, ChatGPT однозначно является одной из наиболее мощных и популярных LLM (Large Language Model), но это не единственный инструмент в данной категории. Недавно я рассказал о том, как использую персонализированные ChatGPT в своей работе, и поделился четырьмя рабочими кейсами в видео.
В этот раз я решил сравнить ответы кастомных ChatGPT 4 из моего видео с тем, что предложила другая LLM — Claude AI (3.5 Sonnet). Результат оказался для меня неожиданным.
Забегая наперёд, скажу, что Claude AI — условно бесплатная нейросеть.
Ниже приведено сравнение всех четырёх кейсов, о которых я рассказывал в своём видео.
==================================
Кейс #1: Генерация кода для получение курса валют
Промпт:
Мне ежедневно надо получать с помощью языка курсы валют и получать курс относительно USD, при чём список этих валют может изменяться, напиши мне несколько вариантов кода для этого, сначала с помощью определённых пакетов, потом с помощью каких нибудь бесплатных API. Давай для примера возьмём такие валютные пары: KZT, UAH, BGN, GBP, нужен их курс относительно USD. На выходе я хочу получить таблицу date — дата курса, curfrom — из какой валюты конвертируем, curto — в какую валюту тут всегда будет USD, curbid — значение курса валюты.
Результат:
Claude AI предложил больше вариантов реализации. Самый первый вариант с использованием пакета
quantmod был полностью корректным, в отличие от ChatGPT, который возвращал обратный курс.✅Лучший ответ дал Claude AI.
==================================
Кейс #2: Генерация справочников из столбцов таблиц в Power BI
Промпт:
При разработке модели данных в Power BI у меня было 2 таблицы, одна с плановыми показателями, другая с фактическими. Обе таблицы содержали 4 одинаковых параметра, по которых их надо было связать. Но т.к. могли попадаться сегменты отсутствующие либо в фактической таблице, либо в плановой, мне необходимо было сначала вертикально объединить эти таблицы, потом по очереди взять уникальные значения из 4 столбцов, и создать на их основе 4 справочника.
Результат:
Claude AI сразу дал готовый работающий код, не смотря на некоторую неточность в промпте, предложенный код достаточно было просто скопировать и вставить в Power BI, при этом дал мне 4 отдельных блока кода для каждого справочника. ChatGPT после исправления неточности в промпте дал один код генерирующий массив справочников, и далее его потребовалось немного дорабатывать для генерации каждого отдельного справочника.
✅Лучший ответ дал Claude AI.
==================================
Кейс #3: Написание запроса к API по скриншоту из Postman
Промпт:
Я тебе скину скрин из Postman, напиши мне пример кода на R с пакетом httr2 что бы воспроизвести такой запрос, но учитывай что массив taskIds может быть переменной длинны, и содержать от 1 до 50 элементов, т.е. нужен универсальный подход, просто прописать taskIds[0] taskIds[1] неполучится.
Результат:
Claude AI справился с задачей с первой попытки, сразу сгенерировав корректный код. ChatGPT потребовалось несколько итераций и мои подсказки.
✅Лучший ответ дал Claude AI.
Кейс #4: Перевод кода Python на R
Промпт:
Я тебе ниже дам код написанный на языке Python, мне надо что бы ты переписал этот код на язык R с использованием R6 классов. Этот код принимает на вход зашифрованные данные, в основе шифрования лежит метод BlowFish, но не чистый а доработанный, и созданный там класс принимает ещё ключ шифрования и возвращает уже расшифрованные данные. Вот код, перепиши его на R:
Результат:
С задачей не справился ни Claude AI, ни ChatGPT, но Claude AI объяснил, что в R нет реализации метода BlowFish и что за пару итераций он не смог его реализовать.
==================================
Вывод:
Пока по моим тестам Claude AI показал себя даже лучше чем кастомные ChatGPT, так что не стоит зацикливаться только на какой то одной LLM, тестируйте разные на своих задачах, проверяйте какая модель даёт более точные ответы, какая работает быстрее.
Пока что меня приятно удивил Claude AI.
👍20🔥10❤4👎1💯1
Преобразовываем речь в текст с помощью R и Google Speech-to-Text API
Привет, друзья! Сегодня я расскажу вам, как создать функцию на R, которая преобразует речь из MP3, Wav или OGG (голосовые сообщения в телеге) файла в текст. Это особенно полезно для расшифровки аудиозаписей, подкастов или голосовых заметок.
Google Speech-to-Text API является условно бесплатным, т.е. бесплатно вы можете в месяц с помощью этого сервиса преобразовать час аудио в текст.
Давайте пройдемся по всему процессу шаг за шагом.
1️⃣ Настройка проекта Google Cloud
Прежде чем начать кодить, нам нужно настроить проект в Google Cloud:
1. Зайдите на console.cloud.google.com и создайте новый проект.
2. Включите API Speech-to-Text в разделе "APIs & Services".
3. Создайте учетные данные (Service Account Key) для доступа к API:
3.1. Перейдите в "APIs & Services" > "Credentials"
3.2. Нажмите "Create Credentials" > "Service Account Key"
3.3. Выберите роль "Project" > "Owner"
3.4. Скачайте JSON файл с ключом
2️⃣ Установка необходимых пакетов R
3️⃣ Код функции
Вот функция, которая делает всю магию:
4️⃣ Использование функции
В результате получим следующее:
Ниже два небольших файла, один в mp3, второй в ogg формате, для тестов.
#заметки_по_R
Привет, друзья! Сегодня я расскажу вам, как создать функцию на R, которая преобразует речь из MP3, Wav или OGG (голосовые сообщения в телеге) файла в текст. Это особенно полезно для расшифровки аудиозаписей, подкастов или голосовых заметок.
Google Speech-to-Text API является условно бесплатным, т.е. бесплатно вы можете в месяц с помощью этого сервиса преобразовать час аудио в текст.
Давайте пройдемся по всему процессу шаг за шагом.
1️⃣ Настройка проекта Google Cloud
Прежде чем начать кодить, нам нужно настроить проект в Google Cloud:
1. Зайдите на console.cloud.google.com и создайте новый проект.
2. Включите API Speech-to-Text в разделе "APIs & Services".
3. Создайте учетные данные (Service Account Key) для доступа к API:
3.1. Перейдите в "APIs & Services" > "Credentials"
3.2. Нажмите "Create Credentials" > "Service Account Key"
3.3. Выберите роль "Project" > "Owner"
3.4. Скачайте JSON файл с ключом
2️⃣ Установка необходимых пакетов R
install.packages(c("tuneR", "seewave", "googledrive", "googleAuthR", "googleLanguageR", "av"))3️⃣ Код функции
Вот функция, которая делает всю магию:
library(tuneR)
library(seewave)
library(googledrive)
library(googleAuthR)
library(googleLanguageR)
library(av)
speech_to_text_from_audio <- function(audio_file_path) {
# Определяем расширение файла
file_ext <- tolower(tools::file_ext(audio_file_path))
# Создаем временный WAV файл
temp_wav_file <- tempfile(fileext = ".wav")
# Обработка в зависимости от типа файла
if (file_ext == "mp3") {
audio <- readMP3(audio_file_path)
} else if (file_ext == "wav") {
audio <- readWave(audio_file_path)
} else if (file_ext == "ogg") {
# Конвертируем OGG в WAV
av_audio_convert(audio_file_path, temp_wav_file)
audio <- readWave(temp_wav_file)
} else {
stop("Неподдерживаемый формат файла. Поддерживаются только MP3, WAV и OGG.")
}
# Если аудио стерео, конвертируем в моно
if (audio@stereo) {
audio <- mono(audio, "both")
}
# Изменяем частоту дискретизации на 16000 Гц, только если текущая частота отличается
if (audio@samp.rate != 16000) {
audio_resampled <- resamp(audio, g = 16000, output = "Wave")
} else {
audio_resampled <- audio
}
# Записываем обработанное аудио во временный WAV файл
writeWave(audio_resampled, temp_wav_file)
# Выполняем распознавание речи
result <- tryCatch({
gl_speech(temp_wav_file,
languageCode = "ru-RU",
sampleRateHertz = 16000)$transcript
}, error = function(e) {
return(paste("Ошибка при распознавании речи:", e$message))
})
# Удаляем временный WAV файл
file.remove(temp_wav_file)
# Возвращаем результат
return(result$transcript)
}
4️⃣ Использование функции
# Пример использования:
# Не забудьте аутентифицироваться перед использованием функции
gl_auth("path/to/your/google_cloud_credentials.json")
# Теперь вы можете использовать функцию так:
mp3_file <- "path/to/your/voice.mp3"
ogg_file <- "path/to/your/voice.ogg"
transcript_mp3 <- speech_to_text_from_audio(mp3_file)
transcript_ogg <- speech_to_text_from_audio(ogg_file)
В результате получим следующее:
> transcript_mp3
[1] "небольшая текстовая начитка для преобразования речи в текст с помощью языка R"
Ниже два небольших файла, один в mp3, второй в ogg формате, для тестов.
#заметки_по_R
🔥14⚡2❤1👍1
Обновления в книге по созданию Telegram-ботов!
Привет, друзья! Рад сообщить вам о свежих обновлениях в моей книге. Вот что нового:
● Новая обложка: Книга обзавелась новым дизайном.
● Глава 1: В раздел [Создаём бота, и отправляем с его помощью сообщения в Telegram] добавлен новый раздел [Настраиваем запуск расписания отправки сообщения с помощью GitHub Actions]. Теперь вы узнаете, как автоматизировать отправку сообщений с помощью мощных инструментов CI/CD.
● Глава 2: В раздел [Добавляем боту поддержку команд и фильтры сообщений, класс Updater] добавлен новый раздел [Обработка голосовых сообщений. Переводим голосовое сообщение в текст]. Мы рассмотрим, как преобразовать голосовые сообщения в текст и приведём пример бота, выполняющего эту задачу.
● Глава 2: Также добавлен новый раздел [Бот для сбора статистики из Telegram чатов]. Вы научитесь создавать бота, который собирает и анализирует статистику из чатов, что может быть полезно для анализа активности и взаимодействия.
● Предисловие и заключение: К книге добавлены новые предисловие и заключение, чтобы дать вам лучшее представление о содержании и итогах работы.
● Обновления в каждой главе: Предисловия и заключения в каждой главе переписаны для лучшего понимания материала и плавного перехода между темами.
В данный момент я работаю над новой главой книги, и буду рад поделиться с вами новыми подробностями, как только они будут готовы.
#онлайн_книги_по_R
Привет, друзья! Рад сообщить вам о свежих обновлениях в моей книге. Вот что нового:
● Новая обложка: Книга обзавелась новым дизайном.
● Глава 1: В раздел [Создаём бота, и отправляем с его помощью сообщения в Telegram] добавлен новый раздел [Настраиваем запуск расписания отправки сообщения с помощью GitHub Actions]. Теперь вы узнаете, как автоматизировать отправку сообщений с помощью мощных инструментов CI/CD.
● Глава 2: В раздел [Добавляем боту поддержку команд и фильтры сообщений, класс Updater] добавлен новый раздел [Обработка голосовых сообщений. Переводим голосовое сообщение в текст]. Мы рассмотрим, как преобразовать голосовые сообщения в текст и приведём пример бота, выполняющего эту задачу.
● Глава 2: Также добавлен новый раздел [Бот для сбора статистики из Telegram чатов]. Вы научитесь создавать бота, который собирает и анализирует статистику из чатов, что может быть полезно для анализа активности и взаимодействия.
● Предисловие и заключение: К книге добавлены новые предисловие и заключение, чтобы дать вам лучшее представление о содержании и итогах работы.
● Обновления в каждой главе: Предисловия и заключения в каждой главе переписаны для лучшего понимания материала и плавного перехода между темами.
В данный момент я работаю над новой главой книги, и буду рад поделиться с вами новыми подробностями, как только они будут готовы.
#онлайн_книги_по_R
👍19🔥14
Как настроить запуск R скриптов по расписанию в Google Cloud Run
Продолжаем изучать тему удалённой автоматизации запуска ваших скриптов. В этом видео мы погружаемся в мир Google Cloud Run и разбираемся с тем, как автоматизировать запуск R скриптов по расписанию. Мы подробно разберём каждый шаг — от настройки облачной платформы до создания Docker образа и его публикации. Итог — условно бесплатная автоматизированная система для выполнения скриптов без постоянного вмешательства.
Что вы узнаете из видео:
● Какой софт понадобится для настройки и запуска скриптов.
● Что такое Google Cloud Run и как он поможет автоматизировать задачи.
● Как настроить проект в Google Cloud для работы с R скриптами.
● Как создать Docker образ и развернуть его в облаке.
● Как настроить регулярный запуск скрипта с помощью триггеров.
Тайм-коды:
00:00 Введение
00:32 Какой софт нам понадобится
01:01 Что такое Google Cloud Run
02:25 Обзор рабочего процесса
03:26 Создание и настройка проекта в Google Cloud
05:36 Обзор R скрипта, который мы будет запускать по расписанию
07:07 Создание Dockerfile
09:54 Локальная сборка Docker образа и запуск контейнера
11:51 Инициализация проекта Google Cloud с Google Cloud SDK Shell
13:43 Отправка Docker образа в Google Container Registry
14:33 Создание Job в Google Cloud Run
16:07 Создание триггера для запуска скрипта по расписанию
18:31 Заключение
Полезные ссылки, которые я упоминаю в видео:
● Как создать Telegram бота и получить токен
● Как упаковать Telegram бота в Docker
● Курс по разработке Telegram ботов на R
Не забывайте подписываться на YouTube канал!
#видео_уроки_по_R
Продолжаем изучать тему удалённой автоматизации запуска ваших скриптов. В этом видео мы погружаемся в мир Google Cloud Run и разбираемся с тем, как автоматизировать запуск R скриптов по расписанию. Мы подробно разберём каждый шаг — от настройки облачной платформы до создания Docker образа и его публикации. Итог — условно бесплатная автоматизированная система для выполнения скриптов без постоянного вмешательства.
Что вы узнаете из видео:
● Какой софт понадобится для настройки и запуска скриптов.
● Что такое Google Cloud Run и как он поможет автоматизировать задачи.
● Как настроить проект в Google Cloud для работы с R скриптами.
● Как создать Docker образ и развернуть его в облаке.
● Как настроить регулярный запуск скрипта с помощью триггеров.
Тайм-коды:
00:00 Введение
00:32 Какой софт нам понадобится
01:01 Что такое Google Cloud Run
02:25 Обзор рабочего процесса
03:26 Создание и настройка проекта в Google Cloud
05:36 Обзор R скрипта, который мы будет запускать по расписанию
07:07 Создание Dockerfile
09:54 Локальная сборка Docker образа и запуск контейнера
11:51 Инициализация проекта Google Cloud с Google Cloud SDK Shell
13:43 Отправка Docker образа в Google Container Registry
14:33 Создание Job в Google Cloud Run
16:07 Создание триггера для запуска скрипта по расписанию
18:31 Заключение
Полезные ссылки, которые я упоминаю в видео:
● Как создать Telegram бота и получить токен
● Как упаковать Telegram бота в Docker
● Курс по разработке Telegram ботов на R
Не забывайте подписываться на YouTube канал!
#видео_уроки_по_R
YouTube
Как настроить запуск R скриптов по расписанию с помощью Google Cloude Run Job
В этом видео мы погружаемся в мир Google Cloud Run и покажем, как автоматизировать запуск ваших R скриптов по расписанию. Мы подробно разберём каждый шаг процесса, от настройки облачной платформы до создания Docker образа и его публикации. В результате вы…
👍20🔥7❤2
Новый урок на YouTube: Развёртывание Telegram-бота в Google Cloud Run!
Привет, друзья!
Не так давно я рассказывал о том, что работаю над новой главой книги по разработке telegram ботов на R. Так вот, мы на финишной прямой нашего пути по созданию Telegram-ботов, и я рад представить вам новый видеоурок, в котором мы освоим важный шаг — развертывание бота в облаке с помощью Google Cloud Run!
В этом видео вы узнаете:
● Что такое Google Cloud Run и как он поможет вашему боту
● Как настроить и развернуть бота в облаке
● Основы технологии Webhook и Docker
● Пошаговое руководство по созданию, сборке и запуску Docker образа
Тайм-коды:
00:00 Вступление
00:37 Какой софт нам потребуется
01:25 Что такое Google Cloud Run
02:45 Обзор рабочего процесса
04:30 Код бота
05:20 Технология Webhook
10:44 Обзор Dockerfile
14:33 Локальная сборка Docker образа
17:35 Настройка проекта в Google Cloud
19:45 Инициализация Google Cloud SDK
22:10 Тегирование и пушинг Docker образа
23:04 Первый запуск бота
24:14 Корректировка WEBHOOK_URL
25:33 Пересборка и пушинг Docker образа
27:03 Развёртывание в Google Cloud Run
27:14 Проверка бота
28:10 Заключение
Ссылки:
● Видео урок
#видео_уроки_по_R
Привет, друзья!
Не так давно я рассказывал о том, что работаю над новой главой книги по разработке telegram ботов на R. Так вот, мы на финишной прямой нашего пути по созданию Telegram-ботов, и я рад представить вам новый видеоурок, в котором мы освоим важный шаг — развертывание бота в облаке с помощью Google Cloud Run!
В этом видео вы узнаете:
● Что такое Google Cloud Run и как он поможет вашему боту
● Как настроить и развернуть бота в облаке
● Основы технологии Webhook и Docker
● Пошаговое руководство по созданию, сборке и запуску Docker образа
Тайм-коды:
00:00 Вступление
00:37 Какой софт нам потребуется
01:25 Что такое Google Cloud Run
02:45 Обзор рабочего процесса
04:30 Код бота
05:20 Технология Webhook
10:44 Обзор Dockerfile
14:33 Локальная сборка Docker образа
17:35 Настройка проекта в Google Cloud
19:45 Инициализация Google Cloud SDK
22:10 Тегирование и пушинг Docker образа
23:04 Первый запуск бота
24:14 Корректировка WEBHOOK_URL
25:33 Пересборка и пушинг Docker образа
27:03 Развёртывание в Google Cloud Run
27:14 Проверка бота
28:10 Заключение
Ссылки:
● Видео урок
#видео_уроки_по_R
YouTube
Разворачиваем Telegram бота в Google Cloud Run
В этом видео мы завершаем наш путь в создании Telegram бота и переходим к важному этапу – публикации и запуску бота в облаке! Сегодня мы будем использовать мощный инструмент Google Cloud Run, чтобы обеспечить бесперебойную работу нашего бота на облачной платформе.…
🔥14👍6🌚1
Новый видеоурок: Развертывание Telegram-бота на Heroku
В этом видео мы погружаемся в развертывание Telegram-бота на платформе Heroku. Я покажу, как использовать Heroku CLI для развертывания бота без необходимости работы с Docker. Подробно разберем все шаги, начиная от подготовки проекта и заканчивая настройкой переменных среды и тестированием бота.
В этом видео вы узнаете:
● Как подготовить ваш проект для развертывания на Heroku.
● Как использовать Heroku CLI для создания и управления приложениями.
● Как настроить переменные среды для вашего бота.
● Как отправить данные на Heroku, запустить бота и проверить его работу.
Тайм-коды:
00:00 – Вступление
00:30 – Что такое Heroku
00:52 – Какой софт понадобится
01:14 – Обзор рабочего процесса
02:25 – Файлы, необходимые для развертывания бота на Heroku
03:31 – Рассмотрение кода бота для Heroku
05:20 – Что такое Webhook
08:00 – Описание зависимостей и файл init.R
08:48 – Создание Profile
09:43 – Создание app.json
11:09 – Авторизация в Heroku CLI
12:33 – Создание приложения в Heroku
13:10 – Создание переменных среды в приложении
14:55 – Установка buildpack для развертывания
16:18 – Отправка данных в Heroku и запуск бота
17:44 – Тестирование бота в Telegram
18:15 – Заключение
Ссылки:
● Видео
● Файлы проекта
● Учебник по разработке telegram ботов
#видео_уроки_по_R
В этом видео мы погружаемся в развертывание Telegram-бота на платформе Heroku. Я покажу, как использовать Heroku CLI для развертывания бота без необходимости работы с Docker. Подробно разберем все шаги, начиная от подготовки проекта и заканчивая настройкой переменных среды и тестированием бота.
В этом видео вы узнаете:
● Как подготовить ваш проект для развертывания на Heroku.
● Как использовать Heroku CLI для создания и управления приложениями.
● Как настроить переменные среды для вашего бота.
● Как отправить данные на Heroku, запустить бота и проверить его работу.
Тайм-коды:
00:00 – Вступление
00:30 – Что такое Heroku
00:52 – Какой софт понадобится
01:14 – Обзор рабочего процесса
02:25 – Файлы, необходимые для развертывания бота на Heroku
03:31 – Рассмотрение кода бота для Heroku
05:20 – Что такое Webhook
08:00 – Описание зависимостей и файл init.R
08:48 – Создание Profile
09:43 – Создание app.json
11:09 – Авторизация в Heroku CLI
12:33 – Создание приложения в Heroku
13:10 – Создание переменных среды в приложении
14:55 – Установка buildpack для развертывания
16:18 – Отправка данных в Heroku и запуск бота
17:44 – Тестирование бота в Telegram
18:15 – Заключение
Ссылки:
● Видео
● Файлы проекта
● Учебник по разработке telegram ботов
#видео_уроки_по_R
YouTube
Разворачиваем Telegram бота на платформе Heroku
Описание:
В этом видео мы продолжаем исследование облачных платформ для запуска Telegram-ботов и сосредоточимся на Heroku. В отличие от предыдущего урока, где мы использовали Google Cloud Run и Docker, в этот раз мы будем работать без Docker, используя только…
В этом видео мы продолжаем исследование облачных платформ для запуска Telegram-ботов и сосредоточимся на Heroku. В отличие от предыдущего урока, где мы использовали Google Cloud Run и Docker, в этот раз мы будем работать без Docker, используя только…
🔥16👍6
Новая глава в учебнике "Разработка Telegram ботов на языке R"
Не так давно я говорил о том, что работаю над новой главой учебника, и предыдущие 3 видео как раз были её дополнением.
В учебник добавлена 9 глава "Разворачиваем telegram бота в облачных сервисах", из которой вы узнаете:
● О том что такое Google Cloud Run и Heroku.
● Как запустить бота или настроить запуск своих скриптов по расписанию в упомянутых выше платформах.
● О преимуществах и недостатках каждой из платформ.
Содержание главы:
1. Google Cloud Run
1.1 Условные обозначения
1.2 Введение в Google Cloude Run
1.3 Как настроить запуск скрипта по расписанию с помощью Google Cloude Run Job
1.4 Разворачиваем Telegram бота в Google Cloud Run Service
2. Heroku
2.1 Разворачиваем telegram бота на Heroku
2.2 Как настроить запуск R скрипта по расписанию в Heroku
3. Какую из описанных облачных платформ выбрать
3.1 Преимущества Heroku
3.2 Преимущества Google Cloud Run
3.3 Итог
4. Заключение
#онлайн_книги_по_R
Не так давно я говорил о том, что работаю над новой главой учебника, и предыдущие 3 видео как раз были её дополнением.
В учебник добавлена 9 глава "Разворачиваем telegram бота в облачных сервисах", из которой вы узнаете:
● О том что такое Google Cloud Run и Heroku.
● Как запустить бота или настроить запуск своих скриптов по расписанию в упомянутых выше платформах.
● О преимуществах и недостатках каждой из платформ.
Содержание главы:
1. Google Cloud Run
1.1 Условные обозначения
1.2 Введение в Google Cloude Run
1.3 Как настроить запуск скрипта по расписанию с помощью Google Cloude Run Job
1.4 Разворачиваем Telegram бота в Google Cloud Run Service
2. Heroku
2.1 Разворачиваем telegram бота на Heroku
2.2 Как настроить запуск R скрипта по расписанию в Heroku
3. Какую из описанных облачных платформ выбрать
3.1 Преимущества Heroku
3.2 Преимущества Google Cloud Run
3.3 Итог
4. Заключение
#онлайн_книги_по_R
👍12🔥6❤1
Судя по всему Хедли взялся за разработку пакета-обёртки над API различных LLM моделей, т.е. ChatGPT и иже с ним.
Пока в довольно лаконичном README к пакету
Для работы с пакетом необходимо получить API ключ, и сохранить его в переменную среды
Далее пример к одной из основных функций пакета:
Так что ждём подробностей и релизов, ссылка на репозиторий пакета на GitHub.
#релизы_и_новости_по_R
Пока в довольно лаконичном README к пакету
elmer пишется следующее:Цель elmer — предоставить удобную для пользователя оболочку для наиболее распространенных API-интерфейсов для вызова llm. Основные цели разработки включают поддержку потоковой передачи и упрощение регистрации и вызова функций R.
Для работы с пакетом необходимо получить API ключ, и сохранить его в переменную среды
OPENAI_API_KEY, (usethis::use_renviron()).Далее пример к одной из основных функций пакета:
chat <- new_chat()
chat$chat("What is the difference between a tibble and a data frame? Answer briefly")
chat$chat("Please summarise into a very concise bulleted list.", stream = FALSE)
chat$chat("Even more concise!!!", stream = FALSE)
chat$chat("Even more concise! Use emoji to save characters", stream = FALSE)
chat <- new_chat()
chat$add_tool(rnorm)
chat$chat("Give me five numbers from a random normal distribution. Briefly explain your work.")
Так что ждём подробностей и релизов, ссылка на репозиторий пакета на GitHub.
#релизы_и_новости_по_R
🔥18👍4
Округление в R
Вчера мы столкнулись с расхождением в расчёте LT на одних и тех же данных в Power BI и R. После некоторого ресёрча я понял, что разница была в округлении. Функция
Впервые для себя я узнал, что функция
Банковское округление:
● Числа с десятичной частью .5 округляются до ближайшего чётного целого числа.
● Например, 2.5 округляется до 2, а 3.5 округляется до 4.
Математическое округление:
● Числа с десятичной частью .5 всегда округляются вверх.
● Например, 2.5 округляется до 3, а 3.5 тоже округляется до 4.
То есть если вы через
Как оказалось, в базовом R вообще нет функции для математического округления. Поэтому если вдруг вам понадобится где-то использовать математическое округление, которое мы с вами учили в школе, придётся писать собственную функцию. Ниже приведена функция, которая математическим способом округляет дробные числа до целого:
Если вы хотите иметь возможность указать количество разрядов после запятой, то используйте эту функцию:
#заметки_по_R
Вчера мы столкнулись с расхождением в расчёте LT на одних и тех же данных в Power BI и R. После некоторого ресёрча я понял, что разница была в округлении. Функция
round() в R округлила число 6.5 до 6, а Power BI - до 7.Впервые для себя я узнал, что функция
round() использует не привычный нам математический способ округления, а так называемый банковский. Вот в чём их отличия:Банковское округление:
● Числа с десятичной частью .5 округляются до ближайшего чётного целого числа.
● Например, 2.5 округляется до 2, а 3.5 округляется до 4.
Математическое округление:
● Числа с десятичной частью .5 всегда округляются вверх.
● Например, 2.5 округляется до 3, а 3.5 тоже округляется до 4.
То есть если вы через
round() попробуете округлить числа 2.5, 4.5, 6.5, то получите соответственно 2, 4, 6, а не ожидаемые 3, 5, 7.Как оказалось, в базовом R вообще нет функции для математического округления. Поэтому если вдруг вам понадобится где-то использовать математическое округление, которое мы с вами учили в школе, придётся писать собственную функцию. Ниже приведена функция, которая математическим способом округляет дробные числа до целого:
round_math <- function(x) {
sign(x) * floor(abs(x) + 0.5)
}Если вы хотите иметь возможность указать количество разрядов после запятой, то используйте эту функцию:
custom_round <- function(x, digits = 0) {
posneg <- sign(x) # Определяем знак числа
z <- abs(x) * 10^digits
z <- z + 0.5 # Добавляем 0.5 для округления вверх
z <- floor(z)
return(posneg * z / 10^digits)
}#заметки_по_R
👍27🔥11🤯6😱4👀3
Динамическая вставка таблиц в RMarkdown
Допустим у вас есть большой дата фрейм, в котором есть один, или несколько столбцов, позволяющий разбить данные на какие то категории по отдельным таблицам, например по отделу, региону, или другому признаку. Далее в RMarkdown вам необходимо каждую подтаблицу напечатать отдельно, при этом количество этих категорий может меняться, ниже я покажу один из способов сделать это.
Изначально вам необходимо с помощью функции
Теперь для того, что бы каждую подтаблицу вывести в RMarkdown как отдельную таблицу необходимо пройтись по списку подтаблиц, например с помощью функции
Ниже небольшой пример кода, как это можно сделать:
Этот код делает следующее:
1. Разбивает таблицу
2. Использует
3. Создает HTML-таблицу для каждой подтаблицы с помощью
4. Добавляет стили с
5. Выводит каждую таблицу в документ с помощью
6. Добавляет пустые строки между таблицами для лучшей читаемости.
Надеюсь, этот подход будет полезен в вашей работе с RMarkdown. Если у вас возникнут вопросы или вы захотите поделиться своими методами работы с данными, пишите в комментариях!
#заметки_по_R
Допустим у вас есть большой дата фрейм, в котором есть один, или несколько столбцов, позволяющий разбить данные на какие то категории по отдельным таблицам, например по отделу, региону, или другому признаку. Далее в RMarkdown вам необходимо каждую подтаблицу напечатать отдельно, при этом количество этих категорий может меняться, ниже я покажу один из способов сделать это.
Изначально вам необходимо с помощью функции
split() разбить основную таблицу, на подтаблицы, о том как это сделать я уже рассказывал. Теперь для того, что бы каждую подтаблицу вывести в RMarkdown как отдельную таблицу необходимо пройтись по списку подтаблиц, например с помощью функции
purrr:walk(), и вывести по очереди их на печать. Ниже небольшой пример кода, как это можно сделать:
library(knitr)
library(kableExtra)
library(purrr)
# разбиваем большую таблицу на список подтаблиц
df_list <- split(df, df$type)
# печатаем по очереди каждую из подтаблиц
purrr::walk(names(df_list), ~{
cat(
knitr::kable(df_list[[.x]], caption = paste("Таблица для типа:", .x), format = "html") %>%
kableExtra::kable_styling(full_width = FALSE) %>%
as.character()
)
cat("\n\n") # Добавляем пустые строки между таблицами
})
Этот код делает следующее:
1. Разбивает таблицу
df на список подтаблиц;2. Использует
purrr::walk() для итерации по именам подтаблиц в нашем списке;3. Создает HTML-таблицу для каждой подтаблицы с помощью
kable();4. Добавляет стили с
kable_styling()5. Выводит каждую таблицу в документ с помощью
cat()6. Добавляет пустые строки между таблицами для лучшей читаемости.
Надеюсь, этот подход будет полезен в вашей работе с RMarkdown. Если у вас возникнут вопросы или вы захотите поделиться своими методами работы с данными, пишите в комментариях!
#заметки_по_R
👍22
Работа с динамическими именами столбцов в dplyr: sym(), syms() и оператор !!
Часто при работе с данными в R возникает необходимость обращаться к столбцам таблицы по их именам, которые могут передаваться как строки. Это может быть полезно, если имена столбцов не известны заранее или задаются динамически в функциях. В
Проблема:
Обычно в dplyr мы обращаемся к столбцам напрямую, как показано ниже:
Но что, если имена столбцов будут передаваться в виде строк, например через аргументы функции? Простое использование строк в
Решение: sym() и оператор !!
Функция
В этой функции:
Оператор
Работа с несколькими столбцами: syms()
Если вам нужно работать сразу с несколькими столбцами, то для преобразования списка строк в символы можно использовать функцию syms().
Здесь:
————————————
Использование функций
О подобных примерах рассказано в виньетке "Программирование с dplyr".
#заметки_по_R
Часто при работе с данными в R возникает необходимость обращаться к столбцам таблицы по их именам, которые могут передаваться как строки. Это может быть полезно, если имена столбцов не известны заранее или задаются динамически в функциях. В
dplyr для таких задач существует механизм tidy evaluation, и одними из ключевых инструментов являются функции sym(), syms() и оператор !!.Проблема:
Обычно в dplyr мы обращаемся к столбцам напрямую, как показано ниже:
library(dplyr)
data <- tibble(
Area = c('IT', 'Finance', NA),
Date = as.Date(c('2023-01-01', NA, '2023-03-15'))
)
# Фильтруем строки, где нет пропусков в столбцах 'Area' и 'Date'
filtered_data <- data %>%
filter(!is.na(Area), !is.na(Date))
Но что, если имена столбцов будут передаваться в виде строк, например через аргументы функции? Простое использование строк в
filter() не сработает.Решение: sym() и оператор !!
Функция
sym() преобразует строку в символ (символ — это объект, который может быть интерпретирован как имя переменной), а оператор !! используется для развертывания этого символа в выражении. Давайте рассмотрим, как это работает:library(dplyr)
# Функция для фильтрации данных на основе имен столбцов, переданных как строки
filter_data <- function(data, col_name1, col_name2) {
col1 <- sym(col_name1)
col2 <- sym(col_name2)
data %>%
filter(!is.na(!!col1), !is.na(!!col2))
}
# Пример данных
data <- tibble(
Area = c('IT', 'Finance', NA),
Date = as.Date(c('2023-01-01', NA, '2023-03-15'))
)
# Фильтруем данные, используя имена столбцов как строки
filtered_data <- filter_data(data, 'Area', 'Date')
print(filtered_data)
В этой функции:
sym(col_name1) и sym(col_name2) преобразуют строки в символы, которые затем могут использоваться в dplyr::filter().Оператор
!! разворачивает символ в выражении, позволяя использовать его как имя переменной в функции filter().Работа с несколькими столбцами: syms()
Если вам нужно работать сразу с несколькими столбцами, то для преобразования списка строк в символы можно использовать функцию syms().
library(dplyr)
# Функция для фильтрации нескольких столбцов
filter_multiple <- function(data, col_names) {
cols <- syms(col_names)
data %>%
filter(across(all_of(col_names), ~ !is.na(.)))
}
# Пример данных
data <- tibble(
Area = c('IT', 'Finance', NA),
Date = as.Date(c('2023-01-01', NA, '2023-03-15')),
Amount = c(1000, 2000, NA)
)
# Фильтруем строки, где нет пропусков в нескольких столбцах
filtered_data <- filter_multiple(data, c('Area', 'Date', 'Amount'))
print(filtered_data)
Здесь:
syms(col_names) преобразует вектор строк в список символов.across() вместе с all_of() позволяет удобно применить фильтр ко всем указанным столбцам.————————————
Использование функций
sym(), syms() и оператора !! — это мощный инструмент для написания гибкого и динамического кода в R. Он особенно полезен при работе с большими данными и пакетами вроде dplyr, когда имена столбцов не известны заранее или приходят из пользовательского ввода.О подобных примерах рассказано в виньетке "Программирование с dplyr".
#заметки_по_R
❤18👍6
Релиз patchwork 1.3.0
Вышла версия
Также доступны более продвинутые возможности для компоновки графиков и таблиц. Например, можно использовать сложный макет с элементами разного размера:
Это позволяет гибко управлять макетом визуализации, комбинируя таблицы и графики разных типов.
Ссылки:
● Подробнее можно прочитать в оригинальной статье на Tidyverse Blog.
● Также ранее я уже рассказывал о пакете
#новости_и_релизы_по_R
Вышла версия
patchwork 1.3.0, которая привнесла интересные возможности для работы с таблицами в графических композициях. Теперь можно легко интегрировать таблицы gt с графиками, используя функции wrap_elements() и wrap_table(). Пример простого графика с таблицей:library(patchwork)
library(ggplot2)
library(gt)
p1 <- ggplot(airquality) +
geom_line(aes(x = Day, y = Temp, colour = month.name[Month])) +
labs(colour = "Month")
aq <- airquality[sample(nrow(airquality), 10), ]
p1 + wrap_table(aq, space = "free_y")
Также доступны более продвинутые возможности для компоновки графиков и таблиц. Например, можно использовать сложный макет с элементами разного размера:
p1 <- ggplot(mtcars) +
geom_point(aes(mpg, disp)) +
ggtitle('Scatter plot')
p2 <- ggplot(mtcars) +
geom_bar(aes(factor(cyl))) +
ggtitle('Bar plot')
layout <- c(
area(t = 1, l = 1, b = 2, r = 2),
area(t = 1, l = 3, b = 2, r = 3)
)
p1 + p2 + plot_layout(design = layout)
Это позволяет гибко управлять макетом визуализации, комбинируя таблицы и графики разных типов.
Ссылки:
● Подробнее можно прочитать в оригинальной статье на Tidyverse Blog.
● Также ранее я уже рассказывал о пакете
patchwork в посте "Как расположить несколько ggplot2 графиков на одном изображении".#новости_и_релизы_по_R
👍13❤4🔥4
R4marketing 6 лет
Ровно 6 лет назад, 1 ноября 2018 года, я анонсировал в Facebook запуск этого канала. Это было время, когда Telegram только набирал популярность как платформа для профессионального контента, и я решил создать пространство, где буду делиться знаниями и какими то заметками по языку R.
На данный момент в канале опубликовано 1256 постов, очень долгое время я держал темп в 1 пост каждый будний день, и не сбавлял его даже в периоды отпусков. Хотя сейчас темп публикаций уже не "пост каждый будний день", как было изначально, но я по-прежнему стараюсь делиться только действительно ценным контентом, который поможет вам в работе и профессиональном росте.
Спасибо каждому из вас за то, что остаётесь со мной все эти годы! Ваши комментарии, обратная связь и дискуссии делают этот канал живым и помогают развиваться всем нам.
Ровно 6 лет назад, 1 ноября 2018 года, я анонсировал в Facebook запуск этого канала. Это было время, когда Telegram только набирал популярность как платформа для профессионального контента, и я решил создать пространство, где буду делиться знаниями и какими то заметками по языку R.
На данный момент в канале опубликовано 1256 постов, очень долгое время я держал темп в 1 пост каждый будний день, и не сбавлял его даже в периоды отпусков. Хотя сейчас темп публикаций уже не "пост каждый будний день", как было изначально, но я по-прежнему стараюсь делиться только действительно ценным контентом, который поможет вам в работе и профессиональном росте.
Спасибо каждому из вас за то, что остаётесь со мной все эти годы! Ваши комментарии, обратная связь и дискуссии делают этот канал живым и помогают развиваться всем нам.
❤69👍39🔥5🎉4
S7 0.2.0: Новый стандарт ООП в R
S7 — это гибкий и мощный инструмент для объектно-ориентированного программирования в R, предлагающий строгость S4 и простоту S3. Новая версия 0.2.0 усиливает производительность, вводит улучшенную совместимость с S3 и добавляет гибкие валидаторы. Проектирование и реализация S7 были совместными усилиями рабочей группы из R Consortium , включая представителей R-Core, Bioconductor, tidyverse/Posit, ROpenSci и более широкого сообщества R. В будущем разработчики планируют интеграцию S7 в базовый R.
Установите пакет, чтобы попробовать новый подход к ООП:
Основные возможности S7
1. Создание классов
S7 позволяет определять классы с четкими типами свойств. Для обеспечения корректности данных можно использовать валидаторы.
Пример:
2. Создание методов
Методы создаются через обобщенные функции (
Пример:
3. Совместимость с S3
S7 интегрируется с S3-методами, что облегчает переход на новую систему. Например, можно использовать существующие S3-классы как базовые.
4. Наследование классов
Создание иерархий классов позволяет расширять возможности базового класса.
Пример:
Производительность и планы на будущее
S7 разработан с учетом высокой производительности: проверки свойств реализованы на уровне C, что делает его подходящим для обработки больших объемов данных. В будущем планируется включить поддержку S7-классов в базовый R, что сделает их стандартом.
Почему стоит использовать S7?
Простота: Создание классов и методов не сложнее, чем в S3.
Надежность: Строгая типизация предотвращает ошибки.
Универсальность: Подходит для создания библиотек, построения API и работы с данными.
Ссылки:
● S7 0.2.0 (eng)
Так же про ООП в R
● ООП в языке R (часть 1): S3 классы
● ООП в языке R (часть 2): R6 классы
#новости_и_релизы_по_R
S7 — это гибкий и мощный инструмент для объектно-ориентированного программирования в R, предлагающий строгость S4 и простоту S3. Новая версия 0.2.0 усиливает производительность, вводит улучшенную совместимость с S3 и добавляет гибкие валидаторы. Проектирование и реализация S7 были совместными усилиями рабочей группы из R Consortium , включая представителей R-Core, Bioconductor, tidyverse/Posit, ROpenSci и более широкого сообщества R. В будущем разработчики планируют интеграцию S7 в базовый R.
Установите пакет, чтобы попробовать новый подход к ООП:
install.packages("S7")Основные возможности S7
1. Создание классов
S7 позволяет определять классы с четкими типами свойств. Для обеспечения корректности данных можно использовать валидаторы.
Пример:
Range <- new_class("Range",
properties = list(
start = class_double,
end = class_double
),
validator = function(self) {
if (length(self@start) != 1) {
"@start must be length 1"
} else if (length(self@end) != 1) {
"@end must be length 1"
} else if (self@end < self@start) {
"@end must be greater than or equal to @start"
}
}
)
# Создаем корректный объект
valid_range <- new_object(Range, start = 1, end = 10)
print(valid_range)
# Проверка с некорректными данными
tryCatch(
new_object(Range, start = 10, end = 5),
error = function(e) message("Ошибка: ", e$message)
)2. Создание методов
Методы создаются через обобщенные функции (
new_generic()). Это упрощает настройку поведения для различных классов.Пример:
greeting <- new_generic("greeting", function(x) NULL)
method(greeting, Range) <- function(x) {
paste("Диапазон начинается с", x@start, "и заканчивается", x@end)
}
greeting(valid_range) # Диапазон начинается с 1 и заканчивается 103. Совместимость с S3
S7 интегрируется с S3-методами, что облегчает переход на новую систему. Например, можно использовать существующие S3-классы как базовые.
4. Наследование классов
Создание иерархий классов позволяет расширять возможности базового класса.
Пример:
Employee <- new_class("Employee", parent = Range, properties = list(
name = class_character
))
worker <- Employee(start = 9, end = 18, name = "Jane")
print(worker)Производительность и планы на будущее
S7 разработан с учетом высокой производительности: проверки свойств реализованы на уровне C, что делает его подходящим для обработки больших объемов данных. В будущем планируется включить поддержку S7-классов в базовый R, что сделает их стандартом.
Почему стоит использовать S7?
Простота: Создание классов и методов не сложнее, чем в S3.
Надежность: Строгая типизация предотвращает ошибки.
Универсальность: Подходит для создания библиотек, построения API и работы с данными.
Ссылки:
● S7 0.2.0 (eng)
Так же про ООП в R
● ООП в языке R (часть 1): S3 классы
● ООП в языке R (часть 2): R6 классы
#новости_и_релизы_по_R
👍22🤯5❤1🔥1
Мобильные приложения с R: революция благодаря webR
Мир R и мобильных технологий стал на шаг ближе с выходом
Что такое webR и в чем его уникальность?
Ключевые особенности
● Нет необходимости в R-сервере.
● Полноценная работа с R-кодом в мобильной среде.
● Возможность использовать стандартные функции R для анализа данных и визуализации.
● Эта технология изменяет представление о том, где и как можно применять R, делая его доступным для разработчиков мобильных приложений.
Почему это важно?
До появления
● Ограниченная функциональность: отсутствие доступа к API устройства, таких как камера, вибрация, или геолокация.
● Нет автономности: такие приложения требовали постоянного подключения к серверу.
● Сложности с установкой: их нельзя было загрузить из App Store или Google Play.
● Устанавливаются через магазины приложений.
● Работают офлайн.
● Интегрируют функции смартфона.
Пример реализации: Игра на основе R
ThinkR представили рабочий прототип — мобильное приложение с интеграцией R-кода. Это игра, где пользователи угадывают, к какому пакету R принадлежит случайная функция.
Как работает приложение:
● Оно выбирает три случайных пакета из установленных.
● Генерирует функцию из одного из них.
● Пользователь угадывает, к какому пакету она относится.
Функционал включает:
● Локальное хранение данных о попытках пользователя в SQLite.
● Визуализацию прогресса на графиках.
● Поддержку вибрации, автономного режима и других мобильных API.
Этот проект демонстрирует не только возможности webR, но и задает направление для будущих приложений.
Что дальше?
Разработчики ThinkR работают над выпуском приложения в App Store и Google Play. Этот проект — шаг к тому, чтобы сделать R универсальным инструментом, доступным не только для серверных решений, но и для мобильной разработки.
Если вы хотите быть в курсе новостей, посетите официальный сайт ThinkR, где можно подписаться на уведомления о выходе приложения.
————————————
#новости_и_релизы_по_R
Мир R и мобильных технологий стал на шаг ближе с выходом
webR — WebAssembly-компиляции R. Эта технология позволяет запускать R-код прямо в JavaScript-средах, открывая новые возможности для создания мобильных приложений. В этом посте разбираем, как это работает и что это значит для разработчиков.Что такое webR и в чем его уникальность?
webR — это специальная версия R, адаптированная для работы в WebAssembly. Если раньше R использовался преимущественно для серверных приложений (например, через Shiny), то теперь его можно внедрять прямо в браузеры и мобильные устройства.Ключевые особенности
webR:● Нет необходимости в R-сервере.
● Полноценная работа с R-кодом в мобильной среде.
● Возможность использовать стандартные функции R для анализа данных и визуализации.
● Эта технология изменяет представление о том, где и как можно применять R, делая его доступным для разработчиков мобильных приложений.
Почему это важно?
До появления
webR мобильные приложения, использующие R, в основном реализовывались через Shiny и shinyMobile. Однако такие решения имели ряд ограничений:● Ограниченная функциональность: отсутствие доступа к API устройства, таких как камера, вибрация, или геолокация.
● Нет автономности: такие приложения требовали постоянного подключения к серверу.
● Сложности с установкой: их нельзя было загрузить из App Store или Google Play.
webR решает эти проблемы, позволяя создавать настоящие нативные мобильные приложения, которые:● Устанавливаются через магазины приложений.
● Работают офлайн.
● Интегрируют функции смартфона.
Пример реализации: Игра на основе R
ThinkR представили рабочий прототип — мобильное приложение с интеграцией R-кода. Это игра, где пользователи угадывают, к какому пакету R принадлежит случайная функция.
Как работает приложение:
● Оно выбирает три случайных пакета из установленных.
● Генерирует функцию из одного из них.
● Пользователь угадывает, к какому пакету она относится.
Функционал включает:
● Локальное хранение данных о попытках пользователя в SQLite.
● Визуализацию прогресса на графиках.
● Поддержку вибрации, автономного режима и других мобильных API.
Этот проект демонстрирует не только возможности webR, но и задает направление для будущих приложений.
Что дальше?
Разработчики ThinkR работают над выпуском приложения в App Store и Google Play. Этот проект — шаг к тому, чтобы сделать R универсальным инструментом, доступным не только для серверных решений, но и для мобильной разработки.
Если вы хотите быть в курсе новостей, посетите официальный сайт ThinkR, где можно подписаться на уведомления о выходе приложения.
————————————
webR — это революционная технология, которая может значительно изменить подход к созданию приложений. Это важный шаг для популяризации R за пределами традиционных областей его применения.#новости_и_релизы_по_R
🔥24👍11
Оптимизация функций в R: переосмысление аргументов с S7
Функции с множеством аргументов могут быть трудными для использования и сопровождения. Чтобы решить эту проблему, можно использовать подход с объектами опций (options objects), применяя возможности системы S7 (новая реализация ООП в R о которой мы недавно говорили). Рассмотрим пример, как можно переработать функцию readr::read_csv().
Проблема: слишком много параметров
Функция
● Сократить количество аргументов в функции.
● Улучшить читаемость и поддерживаемость кода.
● Обеспечить строгую типизацию параметров.
Шаг 1: Создание свойств с помощью new_property()
Для начала определим свойства, которые будут использоваться в нашем объекте опций. Например, свойство для параметра `locale:
Этот код задает значения по умолчанию и проверяет, что все элементы
Подобным образом мы можем создать объекты опций для большинства других аргументов:
●
●
●
●
●
●
●
●
●
●
●
●
●
Шаг 2: Создание класса с помощью new_class()
Теперь создадим класс для объекта опций, который объединяет все свойства, включая
Такой подход позволяет гибко задавать опции с использованием строгой типизации.
Шаг 3: Переопределение функции read_csv()
После создания объекта опций можно переопределить функцию read_csv() для работы с новым подходом:
Вместо передачи множества опциональных аргументов пользователь может передать объект
————————————
Использование объектов опций с
Ссылки:
● В основе поста лежит статья "S7 & Options objects"
#заметки_по_R
Функции с множеством аргументов могут быть трудными для использования и сопровождения. Чтобы решить эту проблему, можно использовать подход с объектами опций (options objects), применяя возможности системы S7 (новая реализация ООП в R о которой мы недавно говорили). Рассмотрим пример, как можно переработать функцию readr::read_csv().
Проблема: слишком много параметров
Функция
readr::read_csv() имеет более 20 аргументов, многие из которых редко используются, например, locale, skip, na. Перенос менее востребованных настроек в объект опций позволяет:● Сократить количество аргументов в функции.
● Улучшить читаемость и поддерживаемость кода.
● Обеспечить строгую типизацию параметров.
Шаг 1: Создание свойств с помощью new_property()
Для начала определим свойства, которые будут использоваться в нашем объекте опций. Например, свойство для параметра `locale:
library(S7)
.locale <- new_property(
class_list,
default = readr::default_locale(),
validator = function(value) {
dnames <- value$date_names
invalid <- !rlang::is_character(dnames$mon, n = 12) ||
!rlang::is_character(dnames$mon_ab, n = 12) ||
!rlang::is_character(dnames$day, n = 7) ||
!rlang::is_character(dnames$day_ab, n = 7) ||
!rlang::is_character(dnames$am_pm, n = 2) || !rlang::is_scalar_character(value$date_format) || !rlang::is_scalar_character(value$time_format) || !rlang::is_scalar_character(value$decimal_mark) || !rlang::is_scalar_character(value$grouping_mark) || !rlang::is_scalar_character(value$tz) || !rlang::is_scalar_character(value$encoding)
if (invalid) {
"expected `locale` object"
}
}
)
Этот код задает значения по умолчанию и проверяет, что все элементы
locale имеют правильный тип.Подобным образом мы можем создать объекты опций для большинства других аргументов:
●
na●
quote●
comment●
trim_ws●
skip●
n_max●
guess_max●
name_repair●
num_threads●
progress●
show_col_types●
skip_empty_rows●
lazyШаг 2: Создание класса с помощью new_class()
Теперь создадим класс для объекта опций, который объединяет все свойства, включая
locale, na, trim_ws и другие:class_readr_opts <- new_class(
"readr_opts",
properties = list(
locale = .locale,
na = .na,
quote = .quote,
comment = .comment,
trim_ws = .trim_ws,
skip = .skip,
n_max = .n_max,
guess_max = .guess_max,
name_repair = .name_repair,
num_threads = .num_threads,
progress = .progress,
show_col_types = .show_col_types,
skip_empty_rows = .skip_empty_rows,
lazy = .lazy
)
)
opts <- class_readr_opts()
opts
Такой подход позволяет гибко задавать опции с использованием строгой типизации.
Шаг 3: Переопределение функции read_csv()
После создания объекта опций можно переопределить функцию read_csv() для работы с новым подходом:
read_csv <- function(
file,
col_names = TRUE,
col_types = NULL,
col_select = NULL,
id = NULL,
options = class_readr_opts()
) {
# function logic
}
Вместо передачи множества опциональных аргументов пользователь может передать объект
options, упростив вызов и настройку функции.————————————
Использование объектов опций с
S7 позволяет уменьшить сложность функций, сделать их более читаемыми и строго типизированными. Такой подход особенно полезен при разработке библиотек и сложных API.Ссылки:
● В основе поста лежит статья "S7 & Options objects"
#заметки_по_R
🔥10👍6❤2
Elmer: Универсальный инструмент для работы с LLM через R
Ранее я уже рассказывал о пакете
1. Что такое Elmer?
● Мульти-провайдерная поддержка, на данный момент реализована поддержка:
● Anthropic’s Claude:
● AWS Bedrock:
● Azure OpenAI:
● Databricks:
● GitHub model marketplace:
● Google Gemini:
● Groq:
● Ollama: chat_ollama()`.
● OpenAI: `chat_openai()`.
● perplexity.ai: `chat_perplexity()`.
● Snowflake Cortex: `chat_cortex()`.
Кстати, создатели `elmer` утверждают, что для генерации кода по их мнению лучше всего себя проявляет Anthropic’s Claude, т.е. Claude.ai, и я по этому поводу тоже уже своими наблюдениями делился.
● Гибкость в настройках промптов и диалогов.
● Извлечение структурированных данных из текста.
● Поддержка асинхронных вызовов для повышения производительности.
Эти функции делают Elmer мощным инструментом для анализа данных, автоматизации задач и разработки приложений.
2. Установка
Установите
3. Управление диалогами
Чат-объекты в
4. Программные возможности
4.1. Интерактивный режим: Используйте R-консоль для живого общения:
4.2. Программный режим: Создайте сценарий, возвращающий результаты для дальнейшей обработки:
4.3. Асинхронные вызовы: Используйте асинхронный API для ускорения обработки больших объемов данных.
5. Извлечение структурированных данных
● Анализ отзывов клиентов.
● Извлечение рецептов и их структурирование.
● Геокодирование адресов.
Пример:
6. Работа с токенами
Один запрос к модели GPT-4o mini может стоить от $0.15 за миллион токенов, что делает использование API доступным для экспериментов.
7. Рекомендации по промптам
Правильный дизайн промптов — ключ к качественным ответам. Например:
● Укажите системные инструкции для кастомизации:
● Используйте промпты для автоматизации, например, создания документации на основе README вашего пакета.
8. Кейсы использования
Elmer отлично подходит для:
● Создания чат-ботов для поддержки пользователей.
● Прототипирования инструментов: автоматизация анализа данных и отчетности.
● Кастомизации работы LLM под специфические задачи.
————————————
Пока что
#новости_и_релизы_по_R
Ранее я уже рассказывал о пакете
Elmer, который позволяет взаимодействовать с большими языковыми моделями (LLM) прямо из R. Сегодня мы углубимся в детали его функционала и возможностей, чтобы вы могли максимально эффективно использовать этот инструмент.1. Что такое Elmer?
Elmer — это пакет из экосистемы tidyverse, созданный для удобного использования LLM API. Его основные преимущества:● Мульти-провайдерная поддержка, на данный момент реализована поддержка:
● Anthropic’s Claude:
chat_claude().● AWS Bedrock:
chat_bedrock().● Azure OpenAI:
chat_azure().● Databricks:
chat_databricks().● GitHub model marketplace:
chat_github().● Google Gemini:
chat_gemini().● Groq:
chat_groq().● Ollama: chat_ollama()`.
● OpenAI: `chat_openai()`.
● perplexity.ai: `chat_perplexity()`.
● Snowflake Cortex: `chat_cortex()`.
Кстати, создатели `elmer` утверждают, что для генерации кода по их мнению лучше всего себя проявляет Anthropic’s Claude, т.е. Claude.ai, и я по этому поводу тоже уже своими наблюдениями делился.
● Гибкость в настройках промптов и диалогов.
● Извлечение структурированных данных из текста.
● Поддержка асинхронных вызовов для повышения производительности.
Эти функции делают Elmer мощным инструментом для анализа данных, автоматизации задач и разработки приложений.
2. Установка
Установите
elmer с помощью:pak::pak("tidyverse/elmer")3. Управление диалогами
Чат-объекты в
elmer сохраняют историю, что упрощает многозадачные сценарии:chat <- chat_openai(model = "gpt-4o-mini")
chat$chat("Кто создал R?")
#> "R был создан Россом Ихакой и Робертом Джентлменом."
4. Программные возможности
elmer поддерживает несколько способов взаимодействия с LLM:4.1. Интерактивный режим: Используйте R-консоль для живого общения:
live_console(chat)
4.2. Программный режим: Создайте сценарий, возвращающий результаты для дальнейшей обработки:
my_function <- function() {
chat <- chat_openai(model = "gpt-4o-mini")
chat$chat("Что такое функциональное программирование?")
}4.3. Асинхронные вызовы: Используйте асинхронный API для ускорения обработки больших объемов данных.
5. Извлечение структурированных данных
elmer позволяет преобразовывать текст в удобный формат для анализа:● Анализ отзывов клиентов.
● Извлечение рецептов и их структурирование.
● Геокодирование адресов.
Пример:
chat$chat("Выдели ключевые слова из текста")6. Работа с токенами
elmer помогает отслеживать использование токенов для оптимизации затрат:chat$chat("Кто создал R?")
chat
token_usage()Один запрос к модели GPT-4o mini может стоить от $0.15 за миллион токенов, что делает использование API доступным для экспериментов.
7. Рекомендации по промптам
Правильный дизайн промптов — ключ к качественным ответам. Например:
● Укажите системные инструкции для кастомизации:
chat <- chat_openai(system_prompt = "Отвечай всегда кратко и на русском языке.")
● Используйте промпты для автоматизации, например, создания документации на основе README вашего пакета.
8. Кейсы использования
Elmer отлично подходит для:
● Создания чат-ботов для поддержки пользователей.
● Прототипирования инструментов: автоматизация анализа данных и отчетности.
● Кастомизации работы LLM под специфические задачи.
————————————
elmer открывает новые горизонты для работы с LLM в R. Это не только инструмент для экспериментов, но и мощное средство для интеграции ИИ в ваши проекты. Узнайте больше из официальной документации.Пока что
elmer по прежнему находится в активной стадии разработки, текущая версия 0.0.0.9000, но будем следить за этим процессом, и в ближайшее время буду ещё делиться информацией об этом проекте.#новости_и_релизы_по_R
🔥16👍10❤5