Обложка канала

R4marketing | канал Алексея Селезнёва | Язык R. Страница 6

Автор канала Алексей Селезнёв, руководитель отдела аналитики в Netpeak, автор R пакетов: ryandexdirect, rfacebookstat и др. В канале публикуются статьи, доклады, новости, заметки по языку R.

  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​R на смартфоне Для тех, кто кодит в общественном транспорте, и не только. Приложение "R Programming Compiler" предназначено для разработки и запуска R кода на смартфонах под android. Ссылки: - Версия для Android - Версия для iOS #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Логистическая регрессия с помощью tidymodels Автор перевода: Владимир Костыря (@BabyAbby) В последнее время я публикую заметки, которые демонстрируют работу с пакетом tidymodels . Я разбираю как простые, так и более сложными модели. Сегодняшняя заметка подойдет тем, кто только начинает свое знакомство с пакетом tidymodels. Содержание: ● Знакомимся с данными ● Построение модели ● Оцениваем модель #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Кластерный анализ в R Кластерный анализ решает задачу разбиения множества на группы (кластеры) по принципу наибольшей однородности. Подобные задачи возникают во множестве сфер деятельности, в частности это реклама и маркетинг. Ситуация, когда нужно выделить группы клиентов, максимально «похожих» друг на друга или определить локации, в которых преобладают определённые предпочтения. Рассмотрю подобный пример и расскажу о способах решения вопроса средствами языка R. #статьи_по_R
  • Реклама

  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​А вы отлаживаете свой код с помощью print()? Наверняка ответом на этот вопрос будет - да. Мы все прекрасно знаем, что использование print() для отладки кода далеко от "лучших практик". Тем не менее используем этот приём, не смотря на то, что есть более продвинутые инструменты отладки, такие как browser() и debug(), потому, что он не требует каких то временных затрат. Ниже пример отладки с print():
     
    other_function <- function(x) x * 5 - 7
    
    more_calculations <- function() NULL
    
    some_advanced_function <- function(x) {
      print("Я тут")
      y <- other_function(x)
      print(y)
      more_calculations()
      print("Надеюсь дойти сюда!!!!")
    }
    В лучшем случае такая отладка выдаст следующую информацию в консоль:
     
    some_advanced_function(4)
    
    [1] "Я тут"
    [1] 13
    [1] "Надеюсь дойти сюда!!!!"
    Какие недостатки в print(): ● Всё, что он вам выведет в консоль - это значение переменной, или заданный текст, но мы не понимаем какое выражение дало этот результат, ● Также мы не увидим к какой строке кода в файле относится кокнетное сообщение. Т.к. мы не смотря ни на что используем этот приём, за то, что он не требует от нас дополнительных усилий, то есть смысл найти аналогичный по трудозатратам способ отладки, но при этом немного более функциональный. И такой способ нам предоставляет пакет icecream, который был разработан под вдохновением от одноимённого Python модуля. Какие преимущества даёт icecream(): ● Его основная функция - ic(), что уже само по себе является преимуществом, поскольку набрать ic() быстрее и проще чем print();3 ● ic() автоматически печатает выражение вместе со своим значением; ● ic() включает максимально точную информацию о файле и позиции в файле, если вы вызываете его без аргументов Давайте перепишем приведённый выше пример с помощью ic():
     
    library(icecream)
    
    other_function <- function(x) x * 5 - 7
    more_calculations <- function() NULL
    
    some_advanced_function <- function(x) {
      ic()
      y <- other_function(x)
      ic(y)
      more_calculations()
      ic()
    }
    
    some_advanced_function(4)
    Что мы изменили: 1. Функцию print() заменили на ic() 2. Вместо вызова print() с бесполезным текстом "HERE" и "I HOPE IT GETS THERE!!!!" мы вызываем ic() без дополнительных аргументов. Сохраним его в файле external.R и запустим командой source("~/external.R"):
     
    > source("~/33.R")
    ℹ️ ic| `some_advanced_function()` in ~/33.R:8:2
    ℹ️ ic| `y`: num 13
    ℹ️ ic| `some_advanced_function()` in ~/33.R:12:2
    Что изменилось в результате работы кода: 1. Теперь в консоли мы видим вместо "HERE" и "I HOPE IT GETS THERE!!!!" подробную информацию о том, в каком файле, на какой строке и какой функцией были выполнены эти вычисления. 2. При печати переменной y, помимо её значения мы видим имя самой переменной, и тип данных, которые она хранит. Отключаем вывод ic() Ещё одной проблемой при отладке через print() является то, что нам после процесса отладки необходимо убрать из кода все эти выводы сообщений, если процесс отладки был долгим, то наши принты могут в эмоциональном порыве покрыться нецензурными выражениями, и если вы потом такой код предоставите клиенту, который увидит в это а интерфейсе Shiny приложения или просто в выводе консоли, то может быть неловкая ситуация. В пакете icecream предусмотрен механизм подавления вывода команды ic(), и возобновления её вывода в консоль. - ic_disable() - отключает вывод функции ic() - ic_enable() - возобновляет работу ic() Какие преимущества мы получили: 1. Пишем меньше кода 2. Получаем больше информации для отладки 3. Можем отключать вывод доп информации в консоль, не удаляя из кода ic() Ссылки: - Данный пост является кратким пересказом статьи "Ice Cream for R Programmers" #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Использование троеточия в разработке функций Не редко среди аргументов функций вы можете встретить ..., в связке с другими именованными аргументами. Это специальный аргумент, который позволяет передавать функции произвольный набор аргументов. Это может быть полезно в следующих случаях: ● Когда точное количество аргументов заранее неизвестно, например при использовании функций lapply(), sum() и т.д.. ● Когда вы используете под капотом самописной функции какую то другую функцию, и хотите "прокинуть" в неё произвольный набор аргументов. Пример 1:
     
    i01 <- function(y, z) {
      list(y = y, z = z)
    }
    
    i02 <- function(x, ...) {
      i01(...)
    }
    
    str(i02(x = 1, y = 2, z = 3))
    #> List of 2
    #>  $ y: num 2
    #>  $ z: num 3
    Есть ещё одна, специальная форма обращения к аргументам, переданным в функцию через ..., обращение по номеру аргумента ..N. Пример 2:
     
    i03 <- function(...) {
      list(first = ..1, third = ..3)
    }
    str(i03(1, 2, 3))
    #> List of 2
    #>  $ first: num 1
    #>  $ third: num 3
    На практике такая форма использования троеточия встречается крайне редко. Также вы можете использовать list(...), для конвертации набора аргументов в список: Пример 3:
     
    i04 <- function(...) {
      list(...)
    }
    str(i04(a = 1, b = 2))
    #> List of 2
    #>  $ a: num 1
    #>  $ b: num 2
    Ссылки: - Информация для поста заимствована из главы 6.6. "... (dot-dot-dot)" книги "Advanced R". #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Tidymodels: аккуратное машинное обучение в R Автор перевода: Владимир Костыря (@BabyAbby) Последнее время пакет tidymodels активно развивается в направлении задач машинного обучения. Несколько лет назад Мак Кун разработал пакет caret, целью которого было создать единую платформу для моделей машинного обучения, существующих в R. Caret был прекрасен во многих отношениях, но далек от идеала. Но это был прекрасный старт. В связи с этим RStudio пригласила Макса Куна для разработки “аккуратной” версии данного пакета. В итоге, мы получили tidymodels. #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Как с помощью языка R передать данные из Facebook в Google BigQuery и строить на их основе отчёты в Google Data Studio Автор: Кирилл Ярмак Описание: В этой статье речь пойдет о том, как с помощью R можно с легкостью загружать данные из Facebook, приводить их к нужному виду и передавать в Google BigQuery, затем строя информативные отчеты в Data Studio. В целом, данный метод универсален для любого источника данных, который имеет свой API. Достаточно погрузившись в изучение R, вы сможете применять эти принципы для похожих задач, модифицируя и совершенствуя функционал. Содержание: ● Введение ● Подготовка ● Создание проекта в Google Cloud Platform ● Авторизация в Facebook ● Подключение необходимых пакетов в RStudio ● Настройка пользовательских параметров ● Подключение к Facebook API ● Загрузка данных из Facebook и их форматирование ● Подключение к GBQ API и загрузка данных ● Построение отчетов в Data Studio #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Комментирование объектов в R Недавно на глаза попалась функция comment() из базового R, о которой ранее я не знал. Данная функция позволяет добавлять и считывать специальный атрибут объекта - comment. Пример:
     
    x <- matrix(1:12, 3, 4)
    
    # добавляем атрибут комментария
    comment(x) <- c("This is my very important data from experiment #0234",
                    "Jun 5, 1998")
    # читаем комментарий
    comment(x)
    
    # смотрим список атрибутов
    attributes(x)
    #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Краткое руководство по строкам и регулярным выражениям в R Сейчас легко найти данные. Но вот найти высококачественные оказывается весьма проблематично. Одна из характерных черт низкопробных данных в том, что они запутаны и редко точны. Сколько бы мы, профессионалы в этой сфере, не говорили об алгоритмах и проверке моделей, большую часть времени занимает именно очистка данных. В этом смысле работа со строками требует несколько иного набора навыков, чем работа с теми же списками или data.frame. В текущей статье, как вы уже поняли, мы будем учиться максимально эффективно управлять строками. Начнем! Содержание: ● Вставка и разделение ● Общее число символов и разделение ● regexec() , gregexpr() и grep()sub() и gsub() ● Регулярные выражения (REGEX) ● Метасимволы ● Квантификаторы ● Метасимволы начала и завершения ● Плейсхолдер ● Последовательности ● Символьные классы ● Группировка и оператор ИЛИ ● Экранирование #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Как создать кастомный SEO дашборд с Serpstat для R Serpstat — платформа для управления SEO-задачами. Позволяет отслеживать позиции в поисковой выдачи, искать конкурентов по поисковой выдачи, проводить анализ обратных ссылок и так далее. Создание и обновление отчетов может занимать до 25% вашего еженедельного рабочего времени, если вы работаете с несколькими сайтами или проектами клиентов. Узнайте, как создать кастомный SEO дашборд и сэкономить одну неделю в месяц с помощью R-пакета serpstatr. Содержание: 1. Как использовать R-пакет Serpstat? 2. R оболочка для вашего дашборда 3. Как работать с полученными результатами? Графики и диаграммы 4. Заключение #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Настоящий Бермудский треугольник
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Поиск файлов по тексту в R В целом если вы работаете в RStudio, то данный функционал можно найти в меню Edit -> Find in files. Для интерактивного режима работы этого будет вполне достаточно. Так же в этом может помочь текстовый редактор, например Notedap++. Но, если вам необходимо программным путём найти R скрипт, или любой другой файл по содержанию в нём определённого текста то вам поможет пакет findInFiles. Понадобиться такой поиск может при разработке telegram бота, который будет искать по заданным паттернам файлы на сервере. Итак, единственной функцией, которая вам понадобится будет findInFiles(). В данной функции доступны следующие аргументы: ● ext - расширение файла, по которым будет проходить поиск, например "R" или "js". ● pattern - паттерн для поиска, т.е. поисковое выражение, по наличию которого будут найдены файлы. ● depth - глубина поиска по папкам, отрицательное число или NULL означает полный рекурсивный поиск, по всем вложенным в корневую папку папкам, 0 означает поиск только в корневой папке, 1 значит поиск в корневой папке и подпапках ● wholeWord - полное соответствие заданному шаблону ● ignoreCase - игнорировать регистр текста при поиске ● perl - является ли шаблон регулярным выражением Perl ● excludePattern - исключить из поиска файлы и папки, соответствующие этому шаблону ● excludeFoldersPattern - исключить из поиска папки, соответствующие этому шаблону ● root - путь к корневой папке поиска ● output - тип вывода информации, "viewer", "tibble" or "viewer+tibble". Пример:
     
    library(findInFiles)
    
    res <-findInFiles("R", "gs4_auth", output = "tibble")
    res
    # A tibble: 11 × 3
       file                              line code                                
       <chr>                            <int> <vctrs_vc>                          
     1 R/blaze_archive_proj_2020_2021.R    25 gs4_auth('[email protected]') 
     2 R/EDC_ppc.R                         12 gs4_auth('[email protected]') 
     3 R/EDC_ppc_kazakhstan.R              12 gs4_auth('[email protected]') 
     4 R/EDC_seo.R                         12 gs4_auth('[email protected]') 
     5 R/Efr_active_proj.R                 12 gs4_auth('[email protected]') 
     6 R/Efr_Churn.R                       12 gs4_auth('[email protected]') 
     7 R/facebook_expenses_2020_2021.R     12 gs4_auth('[email protected]') 
     8 R/netpeak_analysts.R                13 gs4_auth('[email protected]') 
     9 R/nlo_active_proj.R                 11 gs4_auth('[email protected]')
    10 R/Rose - Beauty proj.R              12 gs4_auth('[email protected]') 
    11 R/user_info_cities.R                12 gs4_auth('[email protected]') 
    
    
    #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    English for Developers - канал для тех, кто хочет учить технический английский. От создатателей популярного ит-канала Data analysis. 1. техническая лексика 2. опросы на английском 3. шутки на английском Подписывайтесь, проходите опросы, читайте полезные прогерские фразы на английском: english_forprogrammers. 1 канал вместо тысячи учебников и курсов
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Добавляем подграфики распределения данных по осям на ggplot2 Пакет ggside является расширением для ggplot2, и добавляет в него дополнительные геомы. Имена этих геомон начинаются с geom_xside* или geom_yside*. Список доступных геомов в версии 0.2.0: geom_*freqpoly - Боковые частотные полигоны ● geom_*sidebar - Боковые столбчатые диаграммы ● geom_*sidedensity - Боковые графики распределения плотности ● geom_*sideboxplot - Боковые ящики с усами ● geom_*sidehistogram - Боковые гистограммы ● geom_*sideline - Боковые линейные графики ● geom_*sidepoint - Боковые точечные диаграммы ● geom_*sidesegment - Боковые сегменты ● geom_*sideviolin - Боковые виолончельные диаграммы Все функции идут в двух вариантах, замените * на x или y, для отрисовки бокового графика рядом с соответствующей осью. Пример:
     
    ggplot(mpg, aes(displ, hwy, colour = class)) + 
      geom_point(size = 2) +
      geom_xsideboxplot(aes(y =class), orientation = "y") +
      scale_xsidey_discrete() + #In order to use xsideboxplot with a main panel that uses
      #continuous data, force y axis in xside panel to be discrete
      geom_ysidedensity(aes(x = after_stat(density)), position = "stack") +
      scale_ysidex_continuous(guide = guide_axis(angle = 90), minor_breaks = NULL) +
      theme(ggside.panel.scale = .3)
    Результат этого кода отображен на изображении к посту. Ссылки: - Пример кода взят из README. - Больше примеров можно найти в виньетке "ggside walkthrough" Смотрите также: - Видео урок Грамматика графики в R. Пакет ggplot2 - Обращаемся к ggplot2 на естественном языке #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Быстрое сравнение пары объектов в R Пакет waldo изначально был разработан для улучшения сообщений об ошибках в testthat::expect_equal(), но как оказалось функционал пакета оказался полезен сам по себе. Основная функция пакета waldo::compare() построена поверх базовой all.equal(), но имеет следующие преимущества: ● Сортирует найденные между объектами различия от наиболее важных, к наименее важным; ● Отображение значений атомарных векторов, которые на самом деле различаются; ● Имеет более продвинутый формат выводимых сообщений, выделяя цветом найденное различие. ● waldo выводит в сообщениях образец кода, с помощью которого вы можете получить найденные различия из сравниваемых объектов. К сожалению telegram не позволяет менять цвет текста, но пример вывода сообщений вы можете увидеть на изображении к этому посту. Ниже приведу пару примеров из README waldo.
     
    # сравнение векторов
    ## добавление нового элемента
    compare(c("a", "b", "c"), c("a", "b"))
    
    `old`: "a" "b" "c"
    `new`: "a" "b"    
    
    ## удаление элемента
    compare(c("a", "b"), c("a", "b", "c"))
    
    `old`: "a" "b"    
    `new`: "a" "b" "c"
    
    ## изменение элемента
    compare(c("a", "b", "c"), c("a", "B", "c"))
    
    `old`: "a" "b" "c"
    `new`: "a" "B" "c"
    
    # сравнение фреймов
    df1 <- data.frame(x = 1:3, y = 3:1)
    df2 <- tibble::tibble(rev(df1))
    compare(df1, df2)
    
    `class(old)`: "data.frame"                   
    `class(new)`: "tbl_df"     "tbl" "data.frame"
    
    `names(old)`: "x" "y"
    `names(new)`: "y" "x"
    
    
    #заметки_по_R
  • Реклама

  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Пример анализа географических данных по пожарам Автор: Евгений Матеров В статье продемонстрированы примеры работы с библиотекой osmdata для загрузки географических данных с OpenStreetMap и последующей визуализации на примерах, связанных со статистикой пожаров. Содержание: ● Исходные данные по пожарам ● Предварительная подготовка картографических данных ● Отрисовка карт и нанесение информации по пожарам ● Нанесение на карту данных по пожарам ● Плотность пожаров ● Нанесение на карту данных по времени прибытия ● Визуализация пожаров по площадям ● Заключение Смотрите также: - Видео урок "Работа с пространственными объектами с помощью пакета sp" - Курс "Введение в пространственный анализ и моделирование в R" #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Top постов за сентябрь 2022 По пересылкам: 1. ​​Курс от Microsoft "Создание моделей машинного обучения с помощью языка R и tidymodels" 2. ​​В учебник "Разработка telegram ботов на языке R" добавлена глава про упаковку бота в Docker контейнер 3. ​​Маркетинговые исследования в R с нуля 4. Использование машинного обучения для анализа временных рядов 5. Видео урок "R Studio. Урок 1. Создаем новый проект" По просмотрам: 1. ​​Маркетинговые исследования в R с нуля 2. Работа с YouTube Analytics API с помощью пакета rytstat 3. ​​Про графики UpSet 4. ​​Использование машинного обучения для анализа временных рядов 5. ​​А на какой стороне ты? Анализ смещения бросков относительно центра По реакциям: 1. Рабочий процесс анализа данных на Python, аналогичный процесс на R 2. ​​В учебник "Разработка telegram ботов на языке R" добавлена глава про упаковку бота в Docker контейнер 3. ​​Курс от Microsoft "Создание моделей машинного обучения с помощью языка R и tidymodels" 4. ​​Приветственное сообщение от имени животного (пятничное) 5. Парсим RRS с помощью R #top
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Работа с YouTube Reporting API с помощью пакета rytstat Опубликовал заключительный урок по работе с YouTube API с помощью пакета rytstat. Данный урок посвящён наиболее сложному YouTube Reporting API. Данный API, также как и YouTube Analytics API, позволяет запрашивать статистику по эффективности вашего канала и контента, но не для интерактивного анализа, а для реализации ежедневного сбора этих данных в собственное хранилище данных. Тайм коды: 00:00 Вступление 00:57 Назначение YouTube Reporting API 02:04 Как реализован процесс работы с YouTube Reporting API 03:25 Функции пакета rytstat для работы с YouTube Reporting API 04:20 Как запросить список доступных вам типов отчётов из YouTube Reporting API 05:23 Где искать информацию о том, какой набор полей содержат различные отчёты. 06:56 Как создать задание на генерацию отчётов 07:29 Как запросить список созданных заданий на генерацию отчётов 08:06 Как получить список сгенерированных заданием отчётов 08:30 Метаданные отчётов 09:01 Как получить данные конкретного отчёта 10:46 Лучшие практики использования YouTube Reporting API 14:43 Пример кода для отправки данных из YouTube Reporting API в базу данных 20:13 Постобработка данных отчётов, конвертация даты, и добавление метаданных о ресурсах 22:19 Визуализация отчётов из YouTube Reporting API 22:57 Скрипт ежедневного обновления данных в базу данных 26:44 Отличия YouTube Analytics API и YouTube Reporting API 27:37 Пороговые значения в отчётах YouTube Reporting API 28:58 Заключение Ссылки: - Видео урок - Код рассмотренный в уроке - Плейлист со всеми уроками по работе с rytstat #видео_уроки_по_R