Site icon Блог Ringostat: статьи о маркетинге и аналитике

Как работать с Ringostat API на языке R

Хотите решать нестандартные задачи с Ringostat? Например, передавать данные о звонках в собственную CRM-систему. Или построить на основе данных о звонках рекомендательную систему, которая подскажет менеджерам, какие товары предложить клиенту. В таком случае вам придётся использовать не стандартный интерфейс Ringostat, а программный — то есть API. В этом вам поможет статья от Алексея Селезнева, главы отдела аналитики агентства Netpeak.

Алексей Селезнев, 
глава отдела аналитики агентства Netpeak

Я с 2014 года развиваю отдел аналитики в агентстве. А с 2016 изучаю язык программирования R — сейчас это мой основной рабочий инструмент. Для решения повседневных задач я написал более десятка пакетов, расширяющие базовый возможности языка. Также я активно популяризирую язык R среди русскоязычных аналитиков через публикации статей в медиа, включая Habr и Netpeak Journal. Выступаю на профильных конференциях  с докладами по применению языка R в интернет-маркетинге.

Разумеется, я интересуюсь продуктами, с которыми работает наше агентство. В том числе и Ringostat. Это платформа позволяет получить обширный объем данных о звонках. Предоставляет графический интерфейс для построения отчетов на базе собранной информации, даже имеет нативную интеграцию с Google Data Studio. На начальных этапах этого будет достаточно. Но рано или поздно вы столкнетесь с тем, что нужны дополнительные интеграции. 

В этой статье мы разберемся, как работать с Ringostat API с помощью готового пакета функций ringostat. Статья рассчитана на читателей, не знакомых с языком R и программированием.

Что такое язык R

R — это язык программирования, созданный специально для работы с данными. 

Изначально он был «потомком» языка S и довольно долго использовался исключительно для академических исследований. Но в 2000-х язык был подхвачен крупными корпорациями: Facebook, Google, AirBnb и многими другими. Сегодня R очень широко используется в решении бизнес-задач — в том числе и в интернет-маркетинге.

Популярность R получил во многом благодаря появлению огромного количества дополнительных пакетов: dplyr, data.table, ggplot2 и так далее. В основном репозитории хранения R пакетов — CRAN, на данный момент опубликовано более 15000 пакетов, которые упростят решение практически любой задачи.

Что такое R пакет, и как его установить

R пакет — это сгруппированный в один проект набор функций и данных. 

Каждый пакет содержит функции для решения конкретной задачи, например:

Также есть пакеты, которые помогут автоматизировать рутину и настроить сбор данных интернет маркетологам:

Это конечно далеко не исчерпывающий набор полезных пакетов. Пакет можно рассматривать как отдельное программное обеспечение. Поэтому любой дополнительный пакет изначально надо установить и при необходимости подключать в R сессии.

Устанавливаются пакеты в R командой install.packages(‘название пакета’). Для использования функционала пакета его необходимо подключить командой library(‘название пакета’>.

С чего начать изучение языка R

Синтаксис R ненамного сложнее формул Excel. Для того, чтобы немного снизить порог вхождения в язык я записал и выложил в публичный доступ видеокурс «Язык R для пользователей Excel».

Курс рассчитан на новичков, и позволит вам сделать первые шаги в изучении этого языка. В ходе прохождения курса вы научитесь основным операциям по манипуляции данными в R, и визуализации данных с помощью пакета ggplot2. К каждому уроку курса прилагаются тесты, с решением теоретических и практических задач.

Я думаю, этот курс будет вполне хорошим стартом в изучении R.

Как получить данные о звонках из Ringostat в R

Для начала скачайте и установите язык R и среду разработки RStudio. Ничего сложного в этом нет, но при необходимости вы можете посмотреть первый урок курса о котором я писал выше.

Теперь установим и подключим пакеты, которые мы будем использовать для лайфхака, описанного в статье:

install.packages(c('ringostat', 'dplyr', 'ggplot2', 'bigrquery'))

library(ringostat)
library(dplyr)
library(ggplot2)
library(bigrquery)

Теперь нам необходимо установить API-ключ. Получить его вы можете в веб интерфейсе Ringostat, перейдя в ИнтеграцияRingostat API.

Скопируйте ваш Auth-key и используйте его в коде:
# Ключ API
rs_auth('Ваш Auth-key')

Теперь мы можем запросить данные о звонках с помощью функции rs_get_call_data():

# Запрашиваем данные о звонках за последние 30 дней
calls <- rs_get_call_data(
  date_from = Sys.Date() - 31,
  date_to = Sys.Date(),
  fields = c("uniqueid",
            "calldate",
 
          "disposition",
            "category_mark",
            "billsec",
            "utm_source",
            "call_type")
)

Как видите, синтаксис напоминает формулы Excel, но вместо ячейки вы присваиваете значения объектам, через стрелку <-. В остальном вы так же пишите имя нужной функции, открываете круглые скобки и передаете значения в аргументы функции.

В функции rs_get_call_data() вам доступны следующие аргументы:

Итак, мы разобрались как запросить данные о звонках из своего аккаунта Ringostat в R, но что с ними дальше делать?

Как визуализировать данные о звонках в R

Тут нам на помощь приходит пакет ggplot2, это один из наиболее популярных пакетов на R. Но, перед тем как визуализировать данные, нам необходимо привести их к нужному виду, для этой цели мы будем использовать функции пакета dplyr.

Следующий пример кода позволяет построить линейный график о количестве звонков, с разбивкой по типу звонка.

# визуализируем к-во звонков по дням
calls %>%
  mutate(calldate = as.Date(calldate)) %>%     # оставляем только дату, убрав значение времени
  group_by(calldate, call_type) %>% # группируем данные по дате и типу звонка
  summarise(calls = n_distinct(uniqueid)) %>% # считаем к-во звонков
qplot(data = .,
      x = calldate, y = calls,
      group = call_type,
      colour = call_type,
      geom = c('line', 'point'), 
      main = 'Количество звонков по дням',
      xlab = 'Дата', ylab = 'К-во звонков')

Функции mutate(), group_by() и summarise() позволяют нам привести данные к нужному виду, а точнее:

Т. е. после применения этих трех функций у нас остаётся таблица с тремя столбцами: 

Далее функция qplot() строит график, принимая следующие аргументы:

Приведу еще один пример визуализации — построим график боксплот, так называемый «ящик с усами» или диаграмма размаха. Она будет отображать длительность входящих звонков с разбивкой на каналы их получения.

# длительность входящих звонков по источникам
calls %>%
  filter(call_type == 'in') %>%
qplot(
  data = .,
  x = utm_source, y = billsec,
  geom = c('boxplot'),
  fill = utm_source,

  main = 'Длительность звонка по источникам',
  xlab = 'Источник', ylab = 'Длительность разговора'
)

В этом примере мы изменили тип графика, используя аргумент geom. И отфильтровали данные по типу звонка, оставив только входящие звонки.

Пакет ggplot2 очень функциональный — продемонстрировать всю его мощь в одной вводной статье невозможно. Если хотите ознакомится с его возможностями более глубоко, рекомендую почитать книгу Сергея Мастицкого «Визуализация данных с помощью GGPLOT2».

Как записать данные о звонках в Google BigQuery

Мы уже научились запрашивать и визуализировать данные о звонках средствами языка R, теперь разберёмся с тем, как передать эти данные на хранение в одну из наиболее популярных облачных баз данных Google BigQuery. Для этой цели мы установили и подключили пакет bigrquery.

ВАЖНО: для записи данных в Google BigQuery у вас уже должен быть создать проект в Google Cloud. Если не знаете как его создать почитайте статью “Google BigQuery — зачем нужна облачная база данных”. В ней я подробно описал все подготовительные работы.

Итак, изначально для работы с Google BigQuery API надо пройти авторизацию. Для этого используйте функцию bq_auth(), указав свой Google-аккаунт.
bq_auth('me@gmail.com')

Далее, используя функции bq_table(), указываем в какой проект, набор данных и таблицу необходимо записать данные. А функция bq_table_upload() позволяет управлять параметрами записи.

# отправка данных в Google BigQuery
bq_table(project = "id проекта в BigQuery",
        dataset = "id набора данных в BigQuery",
        table   = "название таблицы в BigQuery") %>%
  bq_table_upload(values = calls,
                  create_disposition = "CREATE_IF_NEEDED",
                  write_disposition = "WRITE_APPEND")

Аргумент create_disposition позволяет указать, что делать если указанной таблицы нет в наборе данных. Мы указали CREATE_IF_NEEDED, что означает создать таблицу по необходимости. 

Аргумент write_disposition позволяет указать, что делать если заданная таблица уже существует и содержит данные:

Эта статья всего лишь небольшой экскурс в язык R и возможности по работе с API различных сервисов. На самом деле зачастую возможности ограничиваются лишь вашей фантазией.

Если вас заинтересовал язык R подписывайтесь на мой Telegram и YouTube-канал R4marketing.

Exit mobile version