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

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

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

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

    Совет на 2023 год — изучите DevOps инструменты. DevOps специалисты на сегодня являются самими высокооплачиваемыми и востребованными на ит-рынке. А для того, чтобы научиться за несколько месяцев, а не лет — держите в подписках канал DevOPs. Там на пальцах рассказывают что учить, на что забить и что актуально в 2023 году. С этим каналом вы пройдете путь от "гугл - что такое Docker" до богатого DevOps специалиста. Начните свой 2023 год продуктивно — школа DevOps.
  • R4marketing | канал Алексея Селезнёва | Язык R

    Как использовать таблицы из Google Drive на R Автор: Андрей Щербаченко (@andreysmka) Подробная статья о том как с помощью пакета googledrive работать с API Google Диска. Содержание: 1. Установка 2. Использование 2.1. Загрузить googledrive 2.2. Соглашения о пакете 2.3. Быстрая демонстрация 2.4. Определить файлы 2.5. Загрузить файлы 2.6. Делиться файлами 2.7. Публикация файлов 2.8. Скачать файлы 2.9. Очистить #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Ящик с усами или boxplot в R studio Автор: Андрей Щербаченко (@andreysmka) Что такое блокплощадка в программировании на R? Блок-график в R, также известный как блок-график и график усов, представляет собой графическое представление, которое позволяет суммировать основные характеристики данных (положение, дисперсия, асимметрия, …) и определить наличие выбросов. В этом уроке мы рассмотрим, как создать базовый прямоугольник R. #статьи_по_R
  • Реклама

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

    Видео урок "Релиз dplyr 1.1.0" В конце января ожидается релиз dplyr 1.1.0, но все основные функции и доработки, которые войдут в этот релиз уже доступны в dev версии. В связи с чем я записал видео обзор нововведений по мотивам статьи "dplyr 1.1.0 is coming soon". Тайм коды: 00:00 Вступление 00:40 Список основных изменений dplyr 1.1.0 01:31 Аргумент .by 04:53 Неэквивалентные соединения (non-equal join) 12:21 Ускоренный arrange() 13:07 Функция reframe() 15:43 Заключение Данный урок был включен в курс "Введение в dplyr 1.0.0". #видео_уроки_по_R
    Обзор релиза dplyr 1.1.0: аргумент .by, неравные join, ускорение arrange() и функция reframe()

    В данном видео мы разберём изменения предстоящие в релизе dplyr 1.1.0 Видео снято по статье: https://www.tidyverse.org/blog/2022/11/dplyr-1-1-0-is-coming-soon/ Тайм коды: 00:00 Вступление 00:40 Список основных изменений dplyr 1.1.0 01:31 Аргумент .by 04:53 Неэквивалентные соединения (non-equal join) 12:21 Ускоренный arrange() 13:07 Функция reframe() 15:43 Заключение |===========================================| Поддержать канал: Вы можете поддержать канал любой произвольной суммой , собранные средства пойдут на закупку оборудования, которое поможет повысить качество контента. https://secure.wayforpay.com/payment/R4marketing |===========================================| Автор: Алексей Селезнёв Telegram канал: https://t.me/R4marketing

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

    <b>Трюки ggplot2 - Подписи Автор: Кибальников Дмитрий (@Kb_Dm) В этой заметке я разберу структуру и динамику инфляции цен на Оливье и Шубу, попутно рассказав как можно работать с подписями для графиков ggplot2, а именно: ● Способы избежать наползания подписей друг на друга ● Работа с подписями-формулами Содержание: 1. С новым 2023 годом 2. Визуализация рецептов 2.1. Перевернуть координаты 2.2. Добавить уровни 2.3. Повернуть подпись 2.4. Автоматический перенос 3. Подготовка данных 4. Графики салатов 5. Шпаргалка по подписям-формулам 6. Салатное заключение Другие статьи этой серии: Трюки ggplot2 - легенда Неопределённость и бизнес Трюки ggplot2 - распределения Трюки ggplot2: агрегирование #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Создание анимированной пузырьковой диаграммы Ханса Рослинга на языке R Описание: В самом начале обучения программированию я попробовал создать с нуля на языке R пузырьковую диаграмму Ханса Рослинга Gapminder, ставшую знаменитой благодаря его лекциям и выступлениям на TED. В процессе работы у меня возникло несколько вопросов. ● Смогу ли я создать диаграмму с помощью экономических данных, взятых у Всемирного банка, без необходимости использовать локальные файлы данных или пакетные данные, которые могут оказаться неактуальными? ● Получится ли создать нечто, близкое к подлинной диаграмме Рослинга? ● Можно ли сделать это посредством одной команды на языке R? Я нашел ответы на каждый из этих вопросов и понял, что получил ценный практический опыт в сфере работы с анимированной графикой, а также познакомился с пакетом wbstats в R. Поэтому я решил поделиться своими знаниями с другими. #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ggplot2: Перенос строк в длинных подписях осей Далеко не всегда подписи значений оси легко помещаются на график при дефолтных настройках темы в ggplot2. Если ваши подписи накладываются друг на друга (самый левый пример на изображении к посту) то у вас есть несколько вариантов их исправить: 1. Добавить перенос строки в длинные подписи; 2. Изменить угол наклона текста подписи Пример:
    library(ggplot2)
    
    # тестовые данные
    df = data.frame(x = c("label", "long label", "very, very long label"), 
                    y = c(10, 15, 20))
    
    # дефолтные настройки
    ggplot(df, aes(x, y)) + 
      xlab("") + ylab("Number of Participants") +
      geom_bar(stat = "identity") 
    
    
    Добавить перенос строк можно с помощью функции str_wrap() из пакета stringr. Данная функция принимает строку, и количество символов ,которое должно помещаться в одну строку, далее добавляется в нужных местах подписи перенос строки. Добавить эту функции в ggplot2 можно в сочетании с функцией scale_x_discrete().На изображении к посту результат этой функции по центру.
    library(stringr)
    
    # перенос троки
    ggplot(df, aes(x, y)) + 
      xlab("") + ylab("Number of Participants") +
      geom_bar(stat = "identity") +
      scale_x_discrete(labels = function(x) str_wrap(x, width = 10))
    
    
    Изменить угол наклона (на изображении к посту самый правый график) можно добавив слой theme(), и настроив наклон на 90 градусов (angle = 90), сделать горизонтальное центрирование к оси X (hjust = 1), b и вертикальное (vjust = 0.5).
    # изменяем угол наклона текста подписей
    p3 <- ggplot(df, aes(x, y)) + 
      xlab("") + ylab("Number of Participants") +
      geom_bar(stat = "identity") +
      theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5))
    
    
    Смотрите так же: - Как исправить перекрывающие друг друга текстовые метки в ggplot2 #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Сортировка элементов в интерфейсе Shiny приложения Пакет sortable позволяет добавить в интерфейс вашего приложения возможность сортировки элементов (пример сортировки вы видите на изображении к посту). Для сортировки элементов, их предварительно необходимо объединить в один блог с помощью тега div:
    tags$div(
        id = "all_plots",
        column(
          width = 6,
          wellPanel(
            plotOutput("scatter")
          )
        ),
        column(
          width = 6,
          wellPanel(
            plotOutput("bill_length")
          )
        ),
        column(
          width = 6,
          wellPanel(
            plotOutput("bill_depth")
          )
        ),
        column(
          width = 6,
          wellPanel(
            plotOutput("penguin_count")
          )
        )
      )
    
    
    Далее добавить в код пользовательского интерфейса вашего приложения функцию sortable_js(), и указать id блока div, элементы которого вы будете сортировать.
    sortable_js("element_id")
    
    
    Ссылки: Весь код приложения, которое используется в посте в качестве примера #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Как агрегировать в R (R Studio) – aggregate() Автор: Андрей Щербаченко (@andreysmka) Описание: В R вы можете использовать aggregate функцию для вычисления сводной статистики для подмножеств данных. Эта функция очень похожа на tapply функцию, но вы также можете ввести формулу или объект временного ряда, и, кроме того, результат имеет класс data.frame. В этом руководстве вы узнаете, как использовать агрегатную функцию R с несколькими примерами для агрегирования строк по коэффициенту группировки. Содержание: 1. Функция aggregate() в R 2. Агрегированное среднее значение в R по группе 3. Количество агрегатов 4. Агрегированный квантиль 5. Агрегировать по нескольким столбцам в R #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Построение изохрон (isochrone) в R с использованием leaflet Автор: Максим Рожков Видео урок о построении изохронов в R. Изохроны - линии на географической карте, схеме, соединяющие точки с одновременным наступлением какого-л, природного явления (напр., грозы, вскрытия рек и т. п.). #видео_уроки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Генерация<b> QR кодов с помощью R Пакет qrcode позволяет вам генерировать QR коды. На данный момент qrcode поддерживает 3 типа кодирования: ● numeric data: (числовой, поддеживает цифры 0-9); ● alphanumeric data: (альфачисловой, поддерживает цифры 0-9, буквы верхнего регистра A-Z,9 спецсимволов: пробел,$ % * + — / :); ● byte data: (битовый, по умолчанию ISO/IEC 8859-1); Тип кодирования Кандзи (упаковывается в 13 бит) в данный момент не поддерживается. Пакет позволяет выводить сгенерированный QR код в консоль, или в область построения графика. Пример:
    library(qrcode)
    code <- qr_code("QR CODE")
    print(code)
    
    ##               
    ##  ▗▄▄▄  ▗▗▄▄▄  
    ##  ▐▗▄▐ ▐▟▐▗▄▐  
    ##  ▐▐█▐▐▞▐▐▐█▐  
    ##  ▐▄▄▟▗▚▚▐▄▄▟  
    ##  ▗▖ ▄▖ ▖ ▗▖   
    ##  ▝▄▜▄▌▘▜▚▛▚█  
    ##  ▐▜█▚▀▐██▙▙▞  
    ##  ▗▄▄▄▐▄▞▖▗▟▄  
    ##  ▐▗▄▐▝▖▖▞▗▟▘  
    ##  ▐▐█▐ ▞█▛▄▐▄  
    ##  ▐▄▄▟▐▘▜▀▐▜▝  
    ##               
    ##               
    ## 
    ## use plot() for a better quality image
    
    plot(code)
    
    
    #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Галерея (карусель) визуальных элементов в интерфейсе Shiny приложения Продолжаем декабрьский марафон заметок по полезным пакетам, направленных на улучшение пользовательского интерфейса Shiny приложений. В этой заметке мы разберёмся с тем, как добавить в пользовательский интерфейс приложения карусель (пример смотрите на изображении к посту). Карусель - это специальное окно, которое позволяет пользователю перемещаться между визуализациями с помощью кнопок далее и назад. Добавить карусель можно с помощью пакета shinyglide. Компонент shinyglide создаётся с помощью функции glide(), далее в этот компонент добавляются экраны с помощью вложенных функций screen(). Пример ниже демонстрирует как можно добавить серию экранов в карусель:
    library(shiny)
    library(shinyglide)
    
    ui <- fixedPage(style = "max-width: 500px;",
      titlePanel("Simple shinyglide app"),
    
      glide(
        height = "350px",
        screen(
          p("This is a very simple shinyglide application."),
          p("Please click on Next to go to the next screen.")
        ),
        screen(
          p("Please choose a value."),
          numericInput("n", "n", value = 10, min = 10)
        ),
        screen(
          p("And here is the result."),
          plotOutput("plot")
        )
      )
    )
    
    
    server <- function(input, output, session) {
    
      output$plot <- renderPlot({
        hist(
          rnorm(input$n),
          main = paste("n =", input$n),
          xlab = ""
        )
      })
    
    }
    
    shinyApp(ui, server)
    
    
    Пакет shinyglide также позволяет добавить условие, которое должно быть выполнено перед тем, как пользователю станет доступен переход на следующий жкран карусели. Реализуется это с помощью аргумента next_condition функции screen(). Этот приём можно использовать, например, при разработке тестов. Ссылки: - Ссылка на приложение, представленное к изображению к посту - Ссылка на документацию пакета #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Построение графиков в R / Plot() Автор: Андрей Щербаченко (@andreysmka) Описание: Самой основной графической функцией в R является plot функция. Эта функция имеет несколько аргументов для настройки конечного графика: добавление заголовка, изменение меток осей, настройка цветов или изменение типов линий, среди прочего. В этом уроке вы узнаете, как строить в R и как полностью настроить результирующий график. #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Как добавить кнопку "копировать в буфер обмена" в интерфейс Shiny приложения Если ваше приложение генерирует какой то текст, который необходимо скопировать в буфер обмена, например какой нибудь код, или URL, то для удобства копирования можно добавить в интерфейс приложения кнопку "Копировать в буфер обмена". Сделать это можно с помощью пакета rclipboard и функции rclipButton(). Данная функция копирует в буфер обмена текст, который передан в её аргумент clipText. Но, для активации функции копирования включите функцию rclipboardSetup() в пользовательский интерфейс вашего приложения. Пример:
    # in the UI
    rclipboardSetup(),
    uiOutput("clip_button")
    
    # in the server
    renderUI({
      rclipButton(
        "clip_button",
        "Copy to clipboard",
        clipText = "Text to be copied",
        icon = icon("clipboard")
      )
    })
    
    
    Можно ещё немного улучшить этот интерфейс. Дело в том, что в приведённом выше примере при клике по кнопке "Copy to clipboard" визуально ничего не происходит. Но мы можем добавить всплывающую подсказку с помощью пакета tippy. Добавить всплывающую подсказку можно вызвав функцию tippy_this() в пользовательском интерфейсе, указав при этом идентификатор пользовательского элемента. В нашем примере идентификатором кнопки копирования в буфер обмена является clip_button. Пример:
    # in the UI
    tippy_this(
      "clip_button",
      tooltip = "String copied!",
      trigger = "click"
    )
    
    
    Ссылки: - Посмотреть целиком код приложения, который использован в качестве примера - README пакета rclipboard #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Язык R Studio + BigQuery: основы работы для аналитики | Ч.2 Автор: Андрей Щербаченко (@andreysmka) Описание: В этом видео мы расскажем вам об основах использования R для анализа данных, в том числе о том, как подключиться к BigQuery и начать работать с вашими данными. Итак, являетесь ли вы аналитиком данных, новичком в R или опытным пользователем, это видео - отличное введение в этот мощный инструмент! #видео_уроки_по_R
  • Реклама

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

    Как быстро привести JSON структуру к табличному виду в R Эту тему я уже затрагивал в 10 уроке курса "Язык R для пользователей Excel", но для общих случаев есть более простой метод, чем рассмотренный в уроке. Пакет tidyjson предоставляет ряд функций - глаголов, наподобие dplyr, которые позволяют легко работать с JSON структурами, в том числе и быстро приводить сложные, вложенные конструкции в табличный вид. Для приведения JSON в таблицу используйте функцию spread_all(). Пример:
    library(tidyjson)
    library(dplyr)
    
    # Тестовый набор данных JSON структур
    people <- c('{"age": 32, "name": {"first": "Bob",   "last": "Smith"}}',
                '{"age": 54, "name": {"first": "Susan", "last": "Doe"}}',
                '{"age": 18, "name": {"first": "Ann",   "last": "Jones"}}')
    
    # Приводим в табличный вид
    people %>% spread_all
    #> # A tbl_json: 3 x 5 tibble with a "JSON" attribute
    #>   ..JSON                  document.id   age name.first name.last
    #>   <chr>                         <int> <dbl> <chr>      <chr>    
    #> 1 "{\"age\":32,\"name..."           1    32 Bob        Smith    
    #> 2 "{\"age\":54,\"name..."           2    54 Susan      Doe      
    #> 3 "{\"age\":18,\"name..."           3    18 Ann        Jones
    
    
    
    При чём функция spread_all() принимает на вход вектор JSON структур, т.е.она векторизирована. #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Исправление многострочных заголовков в R Пример таблицы с многострочном заголовке приведён на изображении к этому посту. Такого рода данные, содержащие многострочные заголовку не редко встречаются при чтении данных из электронных таблиц, или например PDF файлов. Функция mash_colnames() из пакета unheadr позволяет в одну строку кода, привести многострочные заголовки к нормальному виду, объединив их с помощью указанного разделителя. Пример: library(unheadr) # Генерируем таблицу # с многострочными заголовками rodents <- tibble::tribble( ~critter, ~tail, ~whisker, ~mass, NA, "length", "length", "grams", NA, "mm", "mm", NA, "rat", "71", "12", "91", "mouse", "58", "8", "47", "vole", "12", "5", "43" ) Входящие данные выглядят следующим образом: # A tibble: 5 × 4 critter tail whisker mass <chr> <chr> <chr> <chr> 1 NA length length grams 2 NA mm mm NA 3 rat 71 12 91 4 mouse 58 8 47 5 vole 12 5 43 Теперь используем функцию mash_colnames():
    # объединяем многострочные заголовки из первых двух строк
    rodents |> 
      mash_colnames(n_name_rows = 2)
    
    
    Результат выглядит так (на сматрфоне возможно будет не очень понятно):
    # A tibble: 3 × 4
      critter tail_length_mm whisker_length_mm mass_grams
      <chr>   <chr>          <chr>             <chr>     
    1 rat     71             12                91        
    2 mouse   58             8                 47        
    3 vole    12             5                 43  
    
    
    Аргументы функции
    mash_colnames
    (): df - таблица, имена столбцов которой надо объединить n_name_rows - К-во строк, которое необходимо свернуть в заголовок keep_names - Надо ли включать текущие имена столбцов, в составные имена столбцов на выходе sliding_headers - Заполнить столбцы без названия, именами слева направо, более подробно можете посмотреть в примерах к функции, или статье, на которую я дам ссылку в конце поста. sep - Разделитель, через который будут объединяться имена столбцов Ссылки: ● Материл заимствован из статьи "Fixing broken and irregular column headers" #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Кастомизируем экран загрузки Shiny приложения Ранее я рассказывал про пакет shinycssloaders, который позволяет анимировать процесс загрузки отдельных визуальных элементов. Но, иногда сама бизнес логика приложения требует некоторых временных затрат, например ваше приложение обращается по API за данными, далее ждёт ответ, обрабатывает его, и потом уже отображает результат. В таком случае будет полезно настроить окно загрузки приложения, оповещая пользователя о том, какой процесс расчётов в данный момент выполняется. Создать такое окно загрузки можно с помощью пакета waiter. Процесс добавления пользовательского экрана загрузки состоит из трёх шагов: 1. Включите useWaiterв() свой пользовательский интерфейс.
    ui = fluidPage(
      useWaiter(),
      titlePanel("{waiter}"),
      h2("Locations of the ISS in the last 10 mins"),
      wellPanel(
        leafletOutput("iss_location")
      ),
      fluidRow(
        column(
          width = 12,
          actionButton(
            "refresh",
            "Refresh App",
            icon = icon("sync")
          ),
          align = "center"
        )
    
      )
    )
    
    
    
    2. Добавьте в нужных частях серверной части фукцию waiter_show(). 3. Закройте экран ожидания функцией waiter_hide(). server = function(input, output, session) { observeEvent(input$refresh, { waiter_show( html = HTML(paste(spin_fading_circles(), br(), h4("Retrieving data from API..."))) ) all_positions = map_dfr(get_timestamps(), get_10_positions) waiter_show( html = HTML(paste(spin_fading_circles(), br(), h4("Creating map..."))) ) output$iss_location = renderLeaflet({ m = leaflet(all_positions) m = addTiles(m) m = addMarkers(m, lng = ~iss_longs, lat = ~iss_lats, popup = "Position of the International Space Station") }) waiter_hide() }, ignoreNULL = FALSE ) } Пример работы приведённого кода виден на изображении к посту. Ссылки: - Полный пример кода приложения, приведённого на изображении к посту - Документация к пакету waiter #заметки_по_R