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

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

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

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

    Видео урок: Получаем и отправляем данные через httr2 в R Автор: Дмитрий Володин (@volodin_dd) На занятии вы узнаете: Как получать данные практически из любых источников в сети с помощью библиотеки httr2. А также отправлять данные и команды по сети. собирать сложные HTTP запросы из простых блоков Смотрите так же: - Работа с API на языке R, введение в пакет httr2 - Оборачиваем API с помощью httr2 #видео_уроки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Основы создания веб-страниц, блогов и интерактивных книг в Quarto Автор: Евгений Матеров В ходе митапа мы рассмотрим: 1. как создавать статьи, блоги и интерактивные книги в Quarto 2. адаптацию документов к языковым соответствиям (локализацию документов) 3. публикацию документов в сети Интернет 4. структуру документов Quarto на основе заготовок 5. оформление библиографии 6. основы работы с Git при работе с Quarto-документами #видео_уроки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Новое повсюду или статистические тесты эквивалентности Автор: Артём Черёмухин (@acheremuhin) Классические статистические тесты – это, как правило, тесты, проверяющие гипотезу о равенстве (медианы определенному значению, средних в двух независимых группах, дисперсии во многих зависимых группах, коэффициента корреляции нулю и т.д.). Однако уже более как 30 лет существует альтернативный подход, разработанный в ходе исследований по психологии – тесты эквивалентности. Он основан на идее, например, что некоторое отличающееся от нуля значение корреляции все равно может считаться незначимым для конкретной решаемой задачи. В R за реализацию тестов подобного типа отвечает пакет negligible. Рассмотрим поэтапно разные практические задачи, добавим к каждой щепотку теории и расчетов. Содержание: 1. Тесты корреляции на основе эквивалентности (для нормально распределенных величин) 2. Тест эквивалентности пропорций (тест 2 на 2) 3. Тест на наличие влияния третьей переменной на корреляцию между двумя другими 4. Тест эквивалентности дисперсий в независимых выборках 5. Тест на незначимость разницы средних значений в зависимых группах 6. Тест эквивалентности на незначимости влияния предиктора в модели регрессии 7. Тест об эквивалентности двух коэффициентов корреляции в группах 8. Тест на незначимость разницы средних значений в независимых группах #статьи_по_R
  • Реклама

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

    До компанії Ringostat шукаємо Personal Assistant, котрий допоможе прискорити розвиток нашого бізнесу :) Твої скіли: ~ ти чіткий і організований. НІКОЛИ нічого не забуваєш, щоб не забути — записуєш; ~ ти можеш легко створити Google Sheets/Excel таблицю, зрозуміло і чітко її оформити. І використати нескладні формули для підрахунків; ~ англійська — реальний Upper-Intermediate. Що ми будемо очікувати від тебе? ~ підготовка аналітики (регулярної і по запиту); ~ систематизація, формалізація і підтримка деяких процесів і регламентів; ~ пошук послуг, рішень, інструментів з підготовкою порівняльних таблиць. Що ми пропонуємо? ~ фіксовану ставку за підсумками співбесіди; ~ можливість працювати віддалено; ~ оплачувану відпустку (24 дні), лікарняні; ~ можливість навчання та розвитку: досвід та допомога наших співробітників, допомога в професійній адаптації та навчання куратора протягом усього випробувального терміну. Якщо зацікавило — мерщій 👉 за посиланням.
  • R4marketing | канал Алексея Селезнёва | Язык R

    Первый митап по Quarto: "Обзор Quarto и начало работы" Автор: Евгений Матеров Из первого митапа ы узнаете, что такое Quarto, как установить и начать работу с Quarto. Кроме того, будет кратко рассмотрена структура документов Quarto, возможности для интернет-публикации и полезные материалы по Quarto. #видео_уроки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Среда разработки R в Jupyter Notebooks внутри докер-контейнера для VS Code Автор: Антон Бочаров (@bo44arov) Многие из вас знают, что для того, чтобы начать работать с R и Jupyter Notebooks, вам необходимо локально настроить множество вещей, таких как язык R, Anaconda, Git и т. д. Есть еще вариант использования облачных сервисов, таких как Google Colab, но он также имеет определенные ограничения. В этом посте я хочу показать вам еще один способ настройки вашей локальной среды и использования VS Code Jupyter Notebooks. #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Плейлист с видео уроками "Изучение R с нуля" Содержание: 1. R c нуля, установка языка програмирования R и среды RStudio. 2. RStudio первое знакомство со средой. 3. R сохранение файла R, работа с отчетами и MarckDown 4. Основные вычисления в R и логика програмирования 5. Числовые вектора в R, основные операции с ними 6. Типы данных в R 7. Структуры данных R 8. Проверка условий в R 9. Условные конструкции в R 10. Циклы в R 11. Практика Циклы R 12. Практика, функции в R 13. Чтение и запись файлов в R 14. Обновление R через RStudio 15. Работа с библиотекой tidyverse 16. Titanic, Kaggle Группировка и аргегирование данных на R 17. Визуализация данных R, первые шаги 18. GGplot2 в R, основы графики 19. Построение Dashboard в R c использованием библиотеки Shiny. Первое знакомство. 20. Построение Dashboard в R c использованием библиотеки Shiny Первое знакомство ЧАСТЬ 2 21. Dashboard в R Hабота с таблицами в Shiny 22. Постороение простого dashboard на R #видео_уроки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Запуск R кода по расписанию Автор: Дмитрий Володин (@volodin_dd) Эта статья нацелена на начинающих аналитиков данных (не обязательно на R). Также она может быть полезна и опытным аналитикам. Особенно если плохо с коммуникацией с разработчиками и инфраструктурщиками (или их просто нет у вас в компании). Я пересказываю свой опыт, но кажется, он будет весьма полезен читателям. Содержание: 1. Простые способы 2. Развитие cron 3. Контейнеризация 4. Airflow 5. Заключение #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    tidyr 1.3.0: новые аргументы too_few и too_many Недавно я рассказал о том, что в tidyr 1.3.0 завезли новое семейство функций separate_*(). Так вот, это семейство функций получило 2 новых, очень полезных аргумента: ● too_few - Что делать, если значение разделится на слишком маленькое к-во частей? - "error" - вызвать ошибку (дефолтное значение). - "debug" - добавляет дополнительные столбцы к выходным данным, чтобы помочь вам найти и решить основную проблему: - x_ok - показывает, можно ли разделить столбец, как вы просили - x_pieces - сообщает вам фактическое количество частей - x_remainder - показывает вам все, что осталось после разделения. - "align_start" - добавляет NA в конце до нужной длины. - "align_end" - (только для separate_wider_delim()) добавляя NA в начале, чтобы заполнить до нужной длины. ● too_many - Что делать, если значение разделится на слишком большое к-во частей? - "error" - вызвать ошибку (дефолтное значение). - "debug" - добавляет дополнительные столбцы к выходным данным, чтобы помочь вам найти и решить основную проблему - "drop" - отбрасывает лишние части. - "merge" - (только для separate_wider_delim() )объединит дополнительные части. Пример:
    library(tidyr)
    
    # тестовые данные
    df <- tibble(
      id = 1:3,
      x = c("a", "a-b", "a-b-c")
    )
    
    # запускаем процесс отладки
    df |> separate_wider_delim(
      x, 
      delim = "-", 
      names = c("x", "y"),
      too_few = "debug",
      too_many = "debug"
    )
    
    # A tibble: 3 × 6
         id x     y     x_ok  x_pieces x_remainder
      <int> <chr> <chr> <lgl>    <int> <chr>      
    1     1 a     NA    FALSE        1 ""         
    2     2 a-b   b     TRUE         2 ""         
    3     3 a-b-c b     FALSE        3 "-c"    
    
    
    Итак, мы запросили разделение столбца x на 2 новых столбца x и y, но после разбиения через - у нас получается, что в первой строке будет всего один элемент, а в третей 3. Соответственно x_ok выводит FALSE для 1ой и 3ей строк,
    x_pieces
    показывается конечное количество частей, соответственно 1-2-3, а в столбце
    x_remainder
    мы видим лишнюю часть третей строки, которая останется после разбиения, с используемыми нами параметрами. Информацию из дополнительных столбцов можно использовать либо для того, что бы исправить проблему. либо для того что бы изменить параметры разделения столбца. Давайте попробуем изменить значения аргументов too_few и too_many так, что бы в случае когда частей недостаточно (строка 1), то мы добавим NA значение для достижения необходимого к-ва частей (too_few="align_start"), а когда частей больше, чем указанное нами к-во столбцов (стока 3), удалим лишние (too_many = "drop"). df |> separate_wider_delim( x, delim = "-", names = c("a", "b"), too_few = "align_start", too_many = "drop" )
    # A tibble: 3 × 3
         id a     b    
      <int> <chr> <chr>
    1     1 a     NA   
    2     2 a     b    
    3     3 a     b  
    
    
    Ссылки: - Текст является частичным переводом статьи "tidyr 1.3.0" #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Новое семейство функций separate_*() в tidyr 1.3.0 Новое семейство функций пришло на смену функций extract(), separate(), и separate_rows(). Новые функции имеют более согласованные имена, аргументы, производительность и в целом обеспечивают новый подход к решению проблемы разделения одной текстовой ячейки на части. Функции для разбиения текста на новые столбцы: separate_wider_delim() - Разделить с помощью разделителя (ex separate(sep = string)) ● separate_wider_position() - Разделить по положению (ex separate(sep = integer vector)) ● separate_wider_regex() - Разделить с помощью регулярного выражения (ex extract()) Функции для разбиения текста на новые строки: separate_longer_delim() - Разделить с помощью разделителя (ex separate_rows()) ● separate_longer_position() - Разделить по положению (ранее аналога не было ) Пример: Для примера мы будет использовать набор данных о переписи населения, получить этот набор можно с помощью пакета tidycensus.
    # тестовые данные
    vt_census <- tidycensus::get_decennial(
      geography = "block",
      state = "VT",
      county = "Washington",
      variables = "P1_001N",
      year = 2020
    )
    
    
    Столбец GEOID состоит из 4ёх компонентов: 2-значного идентификатора штата, 3-значного идентификатора округа, 6-значного идентификатора участка и 4-значного идентификатора квартала. Зная это мы можем разделить этот столбец на отдельные столбцы по позиции:
    # разбиваем столбец GEOID на 4 компонента по позиции
    vt_census |>
      select(GEOID) |> 
      separate_wider_position(
        GEOID,
        widths = c(state = 2, county = 3, tract = 6, block = 4)
      )
    
    
    Столбец name содержит туже информацию но в текстовом виде, где каждый компонент разделен запятой. разделить данный столбец можно двумя способами, самый простой - использовать separate_wider_delim().
    # разбиваем столбец names на компоненты по разделителю
    vt_census |>
      select(NAME) |> 
      separate_wider_delim(
        NAME,
        delim = ", ",
        names = c("block", "block_group", "tract", "county", "state")
      )
    
    
    Столбец name мы разбили, но там осталось много лишней, ненужной информации, в каждой ячейке дублируются слова (Block, Block Group, Census Tract и т.д.). Этого можно избежать, если использовать не разбиение по разделителю, а извлечение с помощью регулярных выражений и функцию separate_wider_regex():
    # избавляемся от мусора с помощью разбивки через регулярные выражения
    vt_census |>
      select(NAME) |> 
      separate_wider_regex(
        NAME,
        patterns = c(
          "Block ", block = "\\d+", ", ",
          "Block Group ", block_group = "\\d+", ", ",
          "Census Tract ", tract = "\\d+.\\d+", ", ",
          county = "[^,]+", ", ",
          state = ".*"
        )
      )
    
    
    Все приведённые выше примеры были направлены на использование wider функций, т.е. значение одного столбца разделяли на несколько новых столбцов, но иногда нам необходимо из значений одной ячейки получить несколько новых строк, разбив её каким то методом.
    # тестовые данные
    df_delim <- tibble(
      id = 1:3,
      x = c("a", "a-b", "a-b-c")
    )
    
    df <- tibble(
      id = 1:3, 
      x = c("ab", "def", "")
    )
    
    # разбивка на строки по разделителю
    df |> separate_longer_delim(x, delim = "-")
    # разбивка на строки по позиции
    df %>% separate_longer_position(x, 1)
    
    
    Ссылки: - Текст является частичным переводом статьи "tidyr 1.3.0" #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    3000 подписчиков и 100K просмотров на YouTube канале Друзья, на прошлой неделе мой Youtube канал перешагнул рубеж в 3000 подписчиков и 100К просмотров. Кто на него ещё не подписан, переходите по ссылке и подписывайтесь. Всем спасибо!
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Спросим у Google, насколько наша встреча была предначертана судьбой Друзья, в честь дня Святого Валентина сегодня у нас романтически-научная статья с большим количеством примеров кода на R. С праздником вас! Автор оригинала: Channon Perry Когда я познакомилась со своим бойфрендом, я иногда ощущала небольшое сожаление от того, что у нас не было умилительной киношной истории встречи, несмотря на то, что мы пять лет жили в одном и том же городе и учились в одном университете. Наша история не уникальна для многих пар в 2020 году: на спаде между двумя волнами COVID мы начали общаться онлайн, в приложении для знакомств Bumble. Я подумала, что благодаря истории местоположений Google, втихомолку отслеживающей данные GPS, можно было бы найти ответ на вопрос о том, насколько судьбоносно пересекались наши дорожки до встречи. Насколько близко мы были к тому, чтобы воспроизвести романтическую сцену «среди десятков людей они нашли глазами друг друга»? Содержание: 1. Введение 2. Исходные данные 3. Извлечение 4. Преобразование 4.1. Задаём параметры 4.1.1. Предельное расстояние 4.1.2. Предельное время 5. Загрузка 6. Анализ 6.1. Объединяем записи 6.2. Качество и полнота данных 6.2.1. Полнота данных 6.2.2. Состав записей по источнику 6.2.3. Точность источников 6.2. Насколько близко мы были? 6.2.1. Насколько близко мы были? 6.3. Насколько близко по времени друг к другу мы находились в этих местах пересечений? 6.4. Находим наименьшие промежутки времени в тех же местоположениях 7. Ответ 7.1. Множество историй наших почти-встреч 8. Полезные ресурсы #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Средняя зарплата специалистов работающих в области Data Science составляет 3000$-4000$. Тем не менее на рынке сейчас большая нехватка крутых специалистов! Присоединяйся к нам чтобы узнать все про Data Science! Здесь вы найдете: — Переведенные статьи; — Полезные видео; — Интересные опросы; — Профессиональный юмор; Полезности канала: - Что такое data science? Руководство для начинающих - Как начать карьеру в data science без профильного образования - Кто есть кто в команде data science: путеводитель по профессии - 6 правил по обеспечению качества данных машинного обучения Присоединяйтесь, давайте расти как профессионалы вместе 😉 Подписаться 👉👉👉 @data_science_wiki
  • R4marketing | канал Алексея Селезнёва | Язык R

    Вебинар: Слои в ggplot2 Автор: Дмитрий Володин Длительность: 01:57 Описание: Вы узнаете: как строить графики в R с помощью библиотеки ggplot2 слой за слоем. Познакомитесь с разными типами визуализаций, фасетированием и многим другим. #видео_уроки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Пакет для поиска пакетов на CRAN Пакет packagefinder предназначен для поиска пакетов на CRAN. Поиск осуществляется по имени, заголовку и описанию пакета. Аргумент display позволяет отображать результаты поиска пакета в консоли "console", или области просмотра в HTML формате "browser". Пример поиска пакетов: Например, для поиска пакетов по мета регрессии можно использовать следующую команду. findPackage(c("meta", "regression"), "and", display = 'console') Поиск пакетов по пользовательскому набору полей: Функция exploreFields() позволяет искать пакету по указанному запросу указав пользовательский набор полей (свойств) пакета, по умолчанию осуществляется поиск по полям, аналогичным функции findPackage(), т.е. c("Name", "Description", "LongDescription"). Например, найти пакеты, в разработке которых каким то образом участвовал Хедли можно следующим образом: exploreFields("Hadley", c("Maintainer", "Authors@R", "Author"), "or", "like") Просмотр детальной информации о пакете: Для просмотра более детальной информации о каком либо пакете используйте функцию packageDetails(). packageDetails("ggplot2") Просмотр новых пакетов на CRAN: Так же вы можете получить список новых пакетов, добавленных в CRAN за указанное количество предыдущих дней. whatsNew(last.days = 3) Так же пакет packagefinder предоставляет аддон для RStudio. Смотрите так же: - Как понять к какому пакету относится функция Ссылки: - Шпаргалка по пакету packagefinder - README #заметки_по_R
  • Реклама

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

    <b>Превращаем временной ряд в светофор Автор: Илья Шутов (@iMissile) Менеджеры в большинстве компаний хотят примерно одного и того же. Чтобы сложные вещи объяснялись простым языком, а все можно было свести к спидометрам, градусникам и светофорам. Аллегория вполне понятная, пытаться объяснять что-либо — в 99% случаев процедура бессмысленная и энергозатратная. Поэтому ниже пример, как двумя экранами кода можно быстренько превратить временные ряды, которые почти всегда встречаются в больших количествах, в светофор. #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

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

    Манипуляция данными с помощью SQL запросов в R В целом я не особо приветствую использования SQL, внутри / вместо R, т.к. функционал самого R гораздо богаче. Тем не менее знать о такой возможности стоит. Ранее для манипуляции данными с помощью SQL запросов зачастую использовали пакет sqldf, который последний раз обновлялся ещё в далёком 2017 году. На смену устаревшему пакету пришел новый - tidyquery. Данный пакет содержит всего 2 функции: ● query() - реализует манипуляцию данными с помощью SQL запросов ● show_dplyr() - транслирует ваш SQL запрос в dplyr код Пример манипуляции данными с помощью query():
    library(tidyquery)
    library(nycflights13)
    library(dplyr)
    
    query(
    " SELECT origin, dest,
        COUNT(flight) AS num_flts,
        round(SUM(seats)) AS num_seats,
        round(AVG(arr_delay)) AS avg_delay
      FROM flights f LEFT OUTER JOIN planes p
        ON f.tailnum = p.tailnum
      WHERE distance BETWEEN 200 AND 300
        AND air_time IS NOT NULL
      GROUP BY origin, dest
      HAVING num_flts > 3000
      ORDER BY num_seats DESC, avg_delay ASC
      LIMIT 2;"
    )
    
    #> # A tibble: 2 × 5
    #>   origin dest  num_flts num_seats avg_delay
    #>   <chr>  <chr>    <int>     <dbl>     <dbl>
    #> 1 LGA    DCA       4468    712643         6
    #> 2 EWR    BOS       5247    611192         5
    
    
    Если в запросе вы используете всего одну таблицу, то можно передать её в качестве первого аргумента функции query(), и в тексте запроса опустить блок FROM.
    airports %>%
      query("SELECT name, lat, lon ORDER BY lat DESC LIMIT 5")
    
    
    
    Пример трансляции SQL запроса в dplyr код с помощью show_dplyr():
    show_dplyr(
    " SELECT manufacturer, 
        COUNT(*) AS num_planes
      FROM planes
      WHERE engine = 'Turbo-fan'
      GROUP BY manufacturer
      ORDER BY num_planes DESC;"
    )
    
    #> planes %>%
    #>   filter(engine == "Turbo-fan") %>%
    #>   group_by(manufacturer) %>%
    #>   summarise(num_planes = dplyr::n()) %>%
    #>   ungroup() %>%
    #>   arrange(dplyr::desc(num_planes))
    
    
    Ссылки: - примеры кода взяты из README #заметки_по_R