NetPeak Biz Tech    


Как разработать графический интерфейс для скриптов R

Как разработать графический интерфейс для скриптов R

< >

Хотите, чтобы ваши R-скрипты могли запускать пользователи без навыков программирования? Создайте понятное десктопное приложение.

Язык R предназначен преимущественно для Back End программирования, но на нем можно разработать довольно удобный графический интерфейс. В этой статье я расскажу, какие графические элементы вы можете построить с помощью пакета «gWidgets2», и поделюсь несколькими примерами интерфейса, разработанного в R.

Установка нужных пакетов

Основным пакетом, который мы рассмотрим будет «gWidgets2», который по сути является переписанным «gWidgets».

Но для построения интерфейсов вам понадобится установить несколько пакетов:

  1. Сначала установить одну из базовых графических библиотек: RGtk2, tcltk или Qt.
  2. Далее — пакет gWidgets2
  3. После чего необходимо установить один или несколько пакетов — это интерфейсы к базовым графическим пакетам: «gWidgets2RGtk2», «gWidgets2tcltk», «gWidgets2Qt».

Наиболее простым графическим интерфейсом является tcltk, поэтому мы установим его, и связанные с ним пакеты.

install.packages(\\\'tcltk\\\')
install.packages(\\\'gWidgets2\\\')
install.packages(\\\'gWidgets2tcltk\\\')

Какие элементы интерфейса доступны?

В пакете «gWidgets2» много графических элементов интерфейса — рассмотрим основные.

1. Диалоговое окно — «gwindow» и «gbasicdialog»

Основной и главный контейнер для всех графических элементов интерфейса.

Если вы планируете в дальнейшем запускать разработанный интерфейс с помощью BAT или EXE-файла, рекомендую в качестве главного контейнера использовать «gbasicdialog». При запуске из BAT-файла, элемент интерфейса «gwindow» строится и мгновенно закрывается, не дождавшись действий пользователя.

Все же существует способ, который позволит вам запускать интерфейс с помощью BAT-файла, даже если он построен через «gwindow». Сразу после завершения кода графического интерфейса воспользуетесь комaндой «Sys.sleep(300)», и окно не будет закрываться.

В «gbasicdialog» так же есть один небольшой баг, для закрытия обычного, или диалогового окна вам необходимо использовать функцию dispose(). Но из-за ошибки допущенной в пакете данная функция возвращает ошибку при попытке закрыть «gbasicdialog». Для закрытия диалогового окна вызывайте метод dispose_window() самого диалогового окна, вместо вызова функции dispose(), смотрите пример ниже:

# создаём окно
my_win <- gbasicdialog(\"My Window\",visible  = T, do.buttons=FALSE)

# добавляем кнопку для закрытия окна
gbutton(\"Cancel\", container = my_win,handler = function(h,...) {
  my_win()
})

Синтаксис:

gwindow(title = \"Window\", visible = TRUE, name=title, width = NULL,
height= NULL, parent=NULL, handler = NULL, action = NULL, ...,
toolkit = guiToolkit())
gbasicdialog(title = \"Dialog\", widget, parent=NULL,
do.buttons=TRUE,handler = NULL, action=NULL...,
toolkit=guiToolkit())

Основные аргументы:

  • title — заголовок диалогового окна;
  • visible — видимость диалогового окна, принимает значение «FALSE» или «TRUE». Можно отключить видимость построения окна и всех его элементов и включить после того, как окно будет полностью сформировано с помощью функции visible.
  • handler — обработчик событий, в котором вы прописываете анонимную функцию, запускающуюся при активации элемента. Обязательные аргументы данной функции — function(h,...).

2. Кнопка — «gbutton»

Функция «gbutton» создает кнопку в указанном контейнере.

Синтаксис:

gbutton(text = \"\", border=TRUE, handler = NULL, action = NULL,
container = NULL,   ..., toolkit = guiToolkit())

Основные аргументы:

  • text — текст кнопки;
  • handler — обработчик событий, в котором вы прописываете анонимную функцию, запускающуюся при активации элемента. Обязательные аргументы данной функции — function(h,...) ;
  • container — контейнер, в котором размещается кнопка.

Пример использования:

obj <- gbutton(\"Hello world\", container = gwindow())

3. Ярлык — «glabel»

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

Синтаксис:

glabel(text = \"\", markup = FALSE, editable = FALSE, handler =
NULL,action = NULL, container = NULL, ..., toolkit = guiToolkit())

Основные аргументы:

  • text — текст ярлыка;
  • handler — обработчик событий, в котором вы прописываете анонимную функцию, запускающуюся при активации элемента. Обязательные аргументы данной функции — function(h,...) ;
  • container — контейнер, в который будет помещен ярлык.

Пример использования:

obj <- glabel(\"Hello world\", container = gwindow())

4. Текстовое поле — «gedit»

В диалоговом окне появится текстовое поле, в которое пользователь может ввести свои данные.

Синтаксис:

gedit(text = \"\", width = 25, coerce.with = NULL,
initial.msg=\"\",handler = NULL, action = NULL, container = NULL, ...,
toolkit = guiToolkit())

Основные аргументы:

  • text — текст ярлыка.
  • handler — обработчик событий, в котором вы прописываете анонимную функцию, запускающуюся при активации элемента. Обязательные аргументы данной функции — function(h,...).
  • container — контейнер для текстового поля.

Пример использования:

obj <- gedit(\"Hello world\", container = gwindow())

5. Список с возможностью выбора одного элемента — «gradio»

Список, в котором можно отметить галочкой один элемент.

Синтаксис:

gradio(items, selected = 1, horizontal = FALSE, handler= NULL,action
= NULL, container = NULL, ..., toolkit = guiToolkit())

Основные аргументы:

  • items — вектор значений, возможных для выбора;
  • selected — числовое значение номера элемента, который будет выбран по умолчанию;
  • horizontal — ориентация списка (TRUE — горизонтальная, FALSE — вертикальная) ;
  • handler — обработчик событий, в котором вы прописываете анонимную функцию, запускающуюся при активации элемента. Обязательные аргументы данной функции — function(h,...) ;
  • container — контейнер, в котором размещается список.

Пример использования:

obj <- gradio(c(\"hello\",\"world\"), container=gwindow())

6. Выпадающий список «gcombobox»

Выпадающий список — более компактная альтернатива списку, с возможностью выбора одного элемента.

Синтаксис:

gcombobox(items, selected = 1, editable = FALSE, coerce.with=NULL,
handler = NULL,   action = NULL, container = NULL, ..., toolkit =
guiToolkit())

Основные аргументы:

  • items — вектор значений, возможных для выбора;
  • selected — числовое значение номера элемента, который будет выбран по умолчанию;
  • handler — обработчик событий, в котором вы прописываете анонимную функцию, запускающуюся при активации элемента. Обязательные аргументы данной функции — function(h,...) ;
  • container — контейнер для размещения выпадающего списка.

Пример использования:

obj <- gcombobox(c(\"hello\",\"world\"), container=gwindow())

7. Список с возможностью выбора нескольких элементов — «gcheckboxgroup»

Пакет «gcheckboxgroup» дает возможность пользователю отметить галочками любое количество элементов из списка.

Синтаксис:

gcheckboxgroup(items, checked = FALSE,  horizontal = FALSE,
use.table=FALSE,   handler = NULL, action = NULL, container = NULL,
..., toolkit = guiToolkit())

Основные аргументы:

  • items — вектор значений, возможных для выбора;
  • horizontal — ориентация списка (TRUE — горизонтальная, FALSE — вертикальная) ;
  • handler — обработчик событий, в котором вы прописываете анонимную функцию, запускающуюся при активации элемента. Обязательные аргументы функции — function(h,...) ;
  • container — контейнер для размещения списка.

Пример использования:

obj <- gcheckboxgroup(c(\"hello\",\"world\"), container=gwindow()

8. Календарь — «gcalendar»

С помощью этого элемента удобно выбирать дату.

Синтаксис:

gcalendar(text = \"\", format = \"%Y-%m-%d\", handler=NULL,action=NULL,
container = NULL, ..., toolkit = guiToolkit())

Основные аргументы:

  • text — дата по умолчанию;
  • format — формат в котором будет задана дата;
  • handler — обработчик событий, в котором вы прописываете анонимную функцию, запускающуюся при активации элемента. Обязательные аргументы данной функции — function(h,...) ;
  • container — контейнер, в котором размещается календарь.

Пример использования:

obj <- gcalendar(text = as.character(Sys.Date()),container=gwindow())

9. Выбор папки или файла — «gfile»

Этот элемент выводит на экран диалоговое окно для открытия или сохранения файлов и папок.

Синтаксис:

gfile(text = \"\", type = c(\"open\", \"save\", \"selectdir\"),
initialfilename = NULL,   filter = list(\"All files\" = list(patterns = c(\"*\")), \"R files\" =   list(patterns =
c(\"*.R\",\"*.Rdata\")),
\"text files\" = list(mime.types = c(\"text/plain\"))       ),
multi=FALSE, handler = NULL, action = NULL, ..., toolkit =
guiToolkit())

Основные аргументы:

  • text — заголовок диалогового окна, открывающегося для выбора файла или папки;
  • type — тип диалогового окна, принимает значение «open» (получить путь к файлу), «save» (сохранить объект в виде файла) и «selectdir» (получить путь к папке) ;
  • handler — обработчик событий, в котором вы прописываете анонимную функцию, запускающуюся при активации элемента. Обязательные аргументы данной функции — function(h,...).

Пример использования:

obj <- gbutton(\"Select file\", container=gwindow(), handler =
function(h,...) {gfile(text = \"Select file\", type = \"selectdir\")})

Как разработать простой графический интерфейс?

Рассмотрим, как можно применять основные элементы пакета. Для примера создадим текстовое поле с возможностью ввести свое имя и кнопку, при нажатии на которую появится приветственное сообщение.

  1. В качестве основного контейнера выберем «gwindow».
main_window <- gwindow(title = \"My main windows\")

Функция «gwindow(title = \"My main windows\")» создаст главное диалоговое окно, которое вам предстоит наполнить графическими элементами.

  1. Сначала добавим текстовый ярлык, чтобы объяснить пользователям, какие данные нужно ввести в этом поле.

Для создания ярлыка используйте функцию «glable(\"Enter your name\", container = main_window)». Первый аргумент отвечает за текст ярлыка. Аргумент container указывает контейнер, в котором будет отображаться ярлык — мы указали «main_window », так как именно в этот объект сохранили созданное на первом шаге диалоговое окно.

  1. Последний элемент диалогового окна — кнопка «Hello!».

Кнопка создается с помощью функции «gbutton(\"Hello!\", container = main_window, handler = function(h,...)». Первый аргумент отвечает за текст кнопки, второй — указывает контейнер, в котором отобразится кнопка. Аргумент «handler» обpaбатывает событие, а значит в нем нужно описать функцию, которая выполнится при нажатии кнопки:

function(h,...){ gmessage(paste0(\"Hello \",svalue(username),\"!\"))}

Функция выводит на экран сообщение, созданное с помощью функции «gmessage». Чтобы в сообщении появилось имя, заданное пользователем в текстовом поле, я использую функцию «svalue» — она в качестве аргумента принимает объект, значение которого вы хотите получить.

  1. В результате у вас получится такой код:
#Создаем диалоговое окно
main_window <- gwindow(title = \"My main windows\")
#Добавляем подпись к текстовому полю
glable(\"Enter your name\", container = main_window)

#Добавляем текстовое поле
username <- gedit(\"User name\", container = main_window)

#Добавляем кнопку
gbutton(\"Hello!\", container = main_window, handler = function(h,...){
#Описываем действия которые будут выполнены при нажатие на кнопку
gmessage(paste0(\"Hello \", svalue(username),\"!\"))})

Запустите код в R-консоли или R Studio, и сформируется диалоговое окно.

В текстовом поле можно ввести свое имя и нажать кнопку «Hello!», после чего появится приветственное сообщение.

Пример сложного графического интерфейса, разработанного в R

Пользуясь пакетом «gWidgets2», можно создавать и достаточно сложные интерфейсы.

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

Скрипт для создания вышеприведенного интерфейса:

library(gWidgets)
library(gWidgetstcltk)
library(lubridate)
options(guiToolkit=\"tcltk\")

#переходим в рабочую директорию
setwd(\"C:/ppc_bi\")


#Период
currentDate <-Sys.Date()
eopm <- currentDate - days(day(currentDate))
sopm <- currentDate - days(day(currentDate))
sopm <- sopm - days(day(sopm) - 1)


#Строим диалоговое окно
win <- gbasicdialog(\"BI Data Uploader System v 1.0\",visible =
F,do.buttons=FALSE)

#Выбор рабочей папки
dirgroup <- gframe(\"Work directory\",container = win,horizontal = T)
workdirblock <- gedit(\"C:/ppc_bi\", container = dirgroup)
gbutton(\"Choice\", container = dirgroup,handler = function(h,...) {
workdir <<- gfile(\"Select directory\",type=\"selectdir\")
svalue(workdirblock) <- workdir 
setwd(svalue(workdirblock))})

#Группируем учетные данные
cred_group <- ggroup(container = win)

#Учетные данные MySQL
mysqlgr <- gframe(\"MySQL credentials\",container = cred_group,horizontal = F)glabel(\"Host:\",container = mysqlgr)
host <- gedit(\"\", container = mysqlgr)
glabel(\"User:\",container = mysqlgr)
user <- gedit(\"\", container = mysqlgr)
glabel(\"Pass:\",container = mysqlgr)
pass <- gedit(\"\", container = mysqlgr)

#Учетные данные Google
gagroup <- gframe(\"Google credentials\",container = cred_group,horizontal = F)
glabel(\"Clientid:\",container = gagroup)
clientid <- gedit(\"\", container = gagroup)
glabel(\"Client secret:\",container = gagroup)
clientsecret <- gedit(\"\", container = gagroup)
glabel(\"Adwords API token:\",container = gagroup)
adwords_api_token <- gedit(\"\", container = gagroup)

#ID докса - справочника проектов
doxgroup <- gframe(\"Project dictionary document key\",container = win)
doxid <- gedit(\"\", container = doxgroup, width = 50)

#Установка отчетного периода
grperiod <- gframe(\"Period\",container = win,horizontal = F)
glabel(\"From: \",container = grperiod)
date_from <- gcalendar(text = as.character(sopm), format = \"%Y-%m-%d\",  container = grperiod)
glabel(\"To: \",container = grperiod)
date_to   <- gcalendar(text = as.character(eopm), format = \"%Y-%m-%d\",  container = grperiod)

#Выбор скриптов которые необходимо запустить
grscripts <- gframe(\"Scripts\",container = win,horizontal = T)
scripts <- gcheckboxgroup(c(\"AdWords\",\"Facebook\",\"Direct\",\"QualityScore\",\"LostProfit\",\"Summary\"), container=grscripts)

#Кнопка Start
gbutton(\"Start\", container = win,handler = function(h,...) { dispose(win) for(scrnum in svalue(scripts)){   scriptName <- paste0(scrnum, \".R\")   source(scriptName) }})

#Кнопка Cancel
gbutton(\"Cancel\", container = win,handler = function(h,...) { win()})

#Включаем окно
visible(win, set = T)

Выводы

С помощью пакета «gWidgets2» вы сможете организовывать R-скрипты в виде десктопных приложений с понятным интерфейсом.

Доступны такие графические элементы:

  1. Диалоговое окно, в котором будут содержаться все последующие элементы интерфейса.
  2. Кнопка с текстовой надписью и функцией, которая будет выполнятся при нажатии.
  3. Текстовый блок, с помощью которого вы сможете объяснить назначение определенных составляющих интерфейса.
  4. Текстовое поле для ввода данных.
  5. Списки с возможностью выбора одного или нескольких элементов.
  6. Выпадающий список, который позволяет более компактно разместить перечень доступных элементов.
  7. Календарь для удобного выбора дат и периодов.
  8. Диалоговое окно для выбора папки или файла.

Перечисленных элементов достаточно для создания интерфейсов, которые упростят работу со скриптами на языке R.

Если вы используете язык R в работе, или планируете его изучить подписывайтесь на мой Telegram и YouTube канал R4marketing, в котором собрано много полезных, русскоязычных материалов по изучению R.



Комментарии:

Как работает Google Marketing Platform — подробная инструкция

Как работает Google Marketing Platform — подробная инструкция Нужно ли начинать работу с Google Marketing Platform, и если да, то на каком этапе развития бизнеса?...

19 07 2026 9:27:45

24 способа эффективно использовать поисковые операторы Google

24 способа эффективно использовать поисковые операторы Google Как операторы поисковых запросов Google помогают при продвижении сайта и анализе конкурентов....

18 07 2026 15:56:10

10 ошибок молодого бизнеса в Instagram

10 ошибок молодого бизнеса в Instagram Как не нужно делать, запуская свой профиль и таргетированную рекламу в Instagram...

17 07 2026 21:22:30

Самые «нелепые» идеи успешных стартапов

Самые «нелепые» идеи успешных стартапов 2 любопытные истории и 8 успешных стартапов, которые вас удивят....

16 07 2026 20:26:45

Восемь советов успешного запуска рекламной кампании в myTarget

Восемь советов успешного запуска рекламной кампании в myTarget Делимся фишками, которые облегчат работу как новичкам, так и специалистам....

15 07 2026 9:46:21

Новая реальность: боты принимают на работу и ходят на свидания

Новая реальность: боты принимают на работу и ходят на свидания История свидания двух ботов как иллюстрация развития искусственного интеллекта...

14 07 2026 4:39:52

7 признаков хорошего отдела по работе с клиентами

7 признаков хорошего отдела по работе с клиентами Структура того, чем обладают сотрудники департаментов работы с клиентами лучших компаний....

13 07 2026 5:48:42

Как увеличить CTR и open rate в email-рассылках: получаем больше переходов на сайт

Как увеличить CTR и open rate в email-рассылках: получаем больше переходов на сайт Делимся советами по оптимизации рассылок. Важны новые форматы писем, предварительное тестирование, смена тем письма, ярче CTA. Все это в сочетании с понятностью и искренностью не заставит ждать хороший CTR...

12 07 2026 15:10:16

myTarget: 10 фишек для продвижения мобильных приложений

myTarget: 10 фишек для продвижения мобильных приложений Look-alike аудитории, таргетинг на участников групп, ограничение стоимости установки и другие вкусные фишки myTarget...

11 07 2026 1:58:40

Почти идеальный способ настроить междоменное отслеживание

Самые точные данные статистики, которые вы получите с помощью Google Tag Manager....

10 07 2026 20:57:15

Поведенческая экономика и три принципа мотивации человека

Поведенческая экономика и три принципа мотивации человека Как правильно мотивировать и демотивировать себя — теория и кейсы. Как бросить курить, начать бегать и наконец-то приступить к изучению английского. Читать!...

09 07 2026 22:53:22

Типы рекламных кампаний в Facebook и Instagram

Гайд по типам рекламы в соцсетях для SMM-, PPC-специалистов, блогеров и владельцев бизнеса в зависимости от целей, которые вы ставите перед продвижением. С конкретными рекомендациями и примерами. Узнать больше!...

08 07 2026 12:16:25

Текстовая релевантность: как проверить и исправить. Инструкция для новичков

Текстовая релевантность: как проверить и исправить. Инструкция для новичков Как проверить качество текста от копирайтера. Составляем техническое задания для копирайтера, проверяем уникальность, наличие ключевых слов, использование LSI, проводим семантический анализ текста....

07 07 2026 9:40:41

Как собрать аудиторию подписчиков YouTube с 0 до 10 000 за год — кейс канала магазина для любителей рыбалки

Как собрать аудиторию подписчиков YouTube с 0 до 10 000 за год — кейс канала магазина для любителей рыбалки Кейс продвижения YouTube-канала магазина товаров для рыбалки...

06 07 2026 5:49:35

Очистка Twitter от ботов и спаммеров

Очистка Twitter от ботов и спаммеров Чтобы раскрутить себя в Твиттер иногда нужно чистить списки фолловеров и это намного проще, чем кажется :)...

05 07 2026 2:39:56

Кейс по контекстной рекламе портала-каталога организаций: как оптимизация целевых страниц повлияла на поведенческие факторы

Кейс по контекстной рекламе портала-каталога организаций: как оптимизация целевых страниц повлияла на поведенческие факторы Портал-каталог организаций и его продвижение. В этом кейсе мы детальнее остановимся на выгодах для проекта от синергии усилий клиента и агентских специалистов по контекстной рекламе...

04 07 2026 15:46:31

13 пpaктически применимых фишек для интернет-магазинов — круглый стол 8P 2017

Как создать популярный и удобный магазин в интернете, какой должна быть его раскрутка и многое другое, прозвучавшее на круглом столе 8P 2017...

03 07 2026 6:39:23

Кейс по рекламе в прайс-агрегаторах в тематике «бытовая техника»: ROMI 817%

Кейс по рекламе в прайс-агрегаторах в тематике «бытовая техника»: ROMI 817% Пример удачной рекламы. История о том, как маленький региональный магазин может получать хорошую прибыль с прайс-агрегаторов...

02 07 2026 13:17:27

Epic vs Apple — первый раунд битвы

Epic vs Apple — первый раунд битвы Следим за развитием событий и анализируем решение суда. Читать дальше!...

01 07 2026 21:20:57

Инфлюенс-маркетинг — как дружить и сотрудничать с блогерами, чтобы всем было хорошо. Опыт Kacho Group

Главная цель инфлюенс-маркетинга — теплый и близкий контакт с аудиторией. Клиентам нравится ассоциировать продукты с живыми, знакомыми им людьми — пускай и только по интернету. Читать дальше....

30 06 2026 19:56:50

Кейс: как спасти проект и увеличить органический трафик на 109% за 6 месяцев

Кейс: как спасти проект и увеличить органический трафик на 109% за 6 месяцев Как улучшить видимость сайта после оптимизаторов-староверов — кейс в тематике «световое и звуковое оборудование»....

29 06 2026 7:45:27

Как быстро и без страданий сделать главную страницу сайта — MVP-подход

Как быстро и без страданий сделать главную страницу сайта — MVP-подход По-настоящему работающих идей не так много, поэтому не стоит бояться творчески заимствовать лучшие наработки и адаптировать их....

28 06 2026 7:49:34

Как переселить стартап в Кpaков: советы от Ярослава Легенчука

Как переселить стартап в Кpaков: советы от Ярослава Легенчука Ярослав Легенчук поделился историей успешного «переезда» площадки IT-продукта из Рунета в страны ЕС...

27 06 2026 2:17:55

Что такое URL — как создать корректный адрес сайта

Что такое URL — как создать корректный адрес сайта Понятные людям и роботам URL. Это уникальный набор символов, который дает возможность идентифицировать всевозможные ресурсы в интернете (страницы сайтов, файлы, изображения, видео и так далее). Чтобы узнать больше, читайте далее!...

26 06 2026 7:11:38

Sitemap.xml или карта сайта — руководство для новичков

Sitemap.xml или карта сайта — руководство для новичков Подробно рассказываем, как создать, внедрить и проверить XML-карту сайта....

25 06 2026 3:40:31

Дополнение Google ***ytics для Google Taблиц — подробное руководство

Стартовый урок о том, как настроить визуализацию данных из Google ***ytics с помощью Google Spreadsheets...

24 06 2026 7:20:31

Как настроить вычисляемые показатели в Google ***ytics

Как настроить вычисляемые показатели в Google ***ytics Для эффективной оценки работы кампаний не обойтись без вычисляемых показателей. Они экономят время PPC-специалиста и позволяют правильно анализировать рекламные кампании....

23 06 2026 10:23:10

Как собрать данные из Google Search Console и построить отчетность с помощью Python и Google BigQuery

Как сохранить статистику переходов из органики Google, а также автоматизировать отчетность: подробное руководство для технического специалиста....

22 06 2026 3:33:46

Как добавить товары на Яндекс.Маркет — руководство для интернет-магазинов

Как добавить товары на Яндекс.Маркет — руководство для интернет-магазинов Требования к интернет-магазину, мануал по регистрации, что может пойти не так...

21 06 2026 18:37:45

Какие посты заходят и почему торг уместен — итоги продвижения телеграм-канала «Артём Бородатюк» за 2021 год

Какие посты заходят и почему торг уместен — итоги продвижения телеграм-канала «Артём Бородатюк» за 2021 год Делимся итогами продвижения телеграм-канала «Артём Бородатюк» за 2021 год...

20 06 2026 14:30:52

Как настроить максимально объективную веб-аналитику и отладить работу отдела контекстной рекламы? Мануал не для чайников

Как настроить максимально объективную веб-аналитику и отладить работу отдела контекстной рекламы? Мануал не для чайников Почему бизнесу нужно настраивать мультикaнaльную модель атрибуции на основе воронки продаж и как это сделать....

19 06 2026 10:27:19

Как настроить ретаргетинг для рекламы в Instagram и Facebook

Как настроить ретаргетинг для рекламы в Instagram и Facebook Понятная инструкция для SMM-специалистов для тех, кто экспериментирует с настройками аудиторий в рекламных кампаниях. Вы увидите, как настраивать ремаркетинг на примере Facebook. Существует 10 типов индивидуализированных аудиторий в Facebook, разберем три...

18 06 2026 19:39:12

Как быстро перенести кампании в Facebook из одного аккаунта в другой

Экспорт/импорт с помощью Excel-файла или таблиц Google позволит скопировать и перенести кампании, группы объявлений и объявления в Facebook вместе с креативами, текстами, ссылками и utm-метками...

17 06 2026 13:43:48

Результаты рейтинга зарплат специалистов в сфере интернет-маркетинга за первое полугодие 2018

Результаты рейтинга зарплат специалистов в сфере интернет-маркетинга за первое полугодие 2018 SEO-специалисты в Киеве получают в два раза больше, чем жители других городов Украины. Middle лидирует среди должностей как PPC, так и SEO-специалистов. Самая высокооплачиваемая должность — Head of PPC $1900. Узнать больше!...

16 06 2026 18:10:46

Особенности доменов второго уровня

Ликбез по важным понятиям, без которых нельзя начинать бизнес в интернете. Что такое домены второго и третьего уровня, чем они отличаются. Узнать больше!...

15 06 2026 3:13:22

Как с помощью Google Tag Manager отследить отправку формы на сайте

Отслеживание конверсий: покупка, подписка на рассылку, отправка контактных данных и другое....

14 06 2026 10:56:56

Гeймификация: игровые сценарии для развития бизнеса

Гeймификация: игровые сценарии для развития бизнеса О том, как сделать сайты интереснее и эффективнее. Гeймификация — применение игровых сценариев и элементов вне игровых контекстов. Это не про создание игр, это про поиск решений, которые помогут сделать любую работу интереснее. Читайте дальше!...

13 06 2026 17:35:44

Итоги Всемирного дня шопинга: рост продаж в 11 раз в Украине и самые популярные товары

Итоги Всемирного дня шопинга: рост продаж в 11 раз в Украине и самые популярные товары Впереди ещё черная пятница и новогодние праздники. И успех массовых распродаж можно повторить....

12 06 2026 6:12:24

Какую стратегию использовать для продвижения интернет-магазина

Какую стратегию использовать для продвижения интернет-магазина Что нужно делать на старте работ с интернет-магазином и как минимизировать риски для бизнеса онлайн, используя такие инструмента как SEO, PPC и Email-маркетинг — советы от эксперта. Читать дальше!...

11 06 2026 23:59:38

Удаленная работа после пандемии — трудности Apple и Google

Удаленная работа после пандемии — трудности Apple и Google Последствия удаленки на уровне крупного бизнеса. Как сотрудники и топ-менеджмент не могут договориться. Спopные вопросы, ответы на которые ещё предстоит найти. Узнать больше....

10 06 2026 6:36:44

Мониторинг ошибок 404 с помощью специальных отчетов в Google ***ytics

Мониторинг ошибок 404 с помощью специальных отчетов в Google ***ytics Простой способ отслеживания как внутренних, так и внешних битых ссылок. Узнать больше!...

09 06 2026 17:40:21

Как отслеживать изменения на сайте с оповещениями по email

Как отслеживать изменения на сайте с оповещениями по email Как делать мгновенный мониторинг изменений на сайтах? Марина Демьяненко предложила простое решение вопроса с помощью Kimono и таблиц Google....

08 06 2026 10:17:42

14 неочевидных и пpaктически применимых фишек — круглый стол 8P 2020

Лучшие фишки от спикеров конференции 8P 2020. В конце каждой конференции спикеры 8P собираются за круглым столом, чтобы поделиться пpaктически применимыми советами, которые можно внедрить в свой проект и сразу почувствовать отдачу...

07 06 2026 16:19:49

Что такое инсайт или дизайн для жизни Филиппа Старка

Что такое инсайт или дизайн для жизни Филиппа Старка О промдизайне, инсайтах, испытаниях для дизайнеров по мотивам BBC-шоу «Дизайн для жизни» с Филиппом Старком....

06 06 2026 5:59:31

Что такое водяной знак и как его используют

Необходимый элемент для защиты контента от копирования и в то же время — шанс стать популярным автором. Тем не менее, от водяных знаков отказываются. Узнать больше!...

05 06 2026 19:43:14

«Чёрная пятница» для интернет-магазинов США и Рунета

«Чёрная пятница» для интернет-магазинов США и Рунета Игроков интернета России, Уанета и Казнета зарубежные сайты coблaзняют семизначными результатами продаж во время «черной пятницы» и «киберпонедельника»....

04 06 2026 18:51:25

Как загрузить статистику рекламных кампаний из API Facebook с помощью языка R

Как загрузить статистику рекламных кампаний из API Facebook с помощью языка R Хотите качественно руководить рекламной кампанией в Facebook? Как подключиться к API Facebook и получение статистики в R — рассказывает Алексей Селезнев....

03 06 2026 14:36:13

Анализ сезонности на примере ниши доставки цветов

Анализ сезонности на примере ниши доставки цветов Занимайтесь оптимизацией определенной категории товаров за полгода до скачка спроса....

02 06 2026 20:14:58

Синдром самозванца. Откуда берется и как с ним можно справиться

Синдром самозванца. Откуда берется и как с ним можно справиться Все успешные люди немного сомневаются в своих достижениях и рефлексируют о большом количестве ошибок. Не ок, когда сомнения затягивают и разрушают самооценку, создают постоянное напряжение. Давайте разбираться с синдромом самозванца....

01 06 2026 1:49:22

Long-tail SEO — как продвигаться по низкочастотным запросам и зачем это нужно

Long-tail SEO — как продвигаться по низкочастотным запросам и зачем это нужно Относящиеся к низкочастотным long-tail запросы при правильном подходе могут стать эффективным инструментом для увеличения трафика. Рассказываем почему, а главное — как....

31 05 2026 21:20:53

Еще:
понять и запомнить -1 :: понять и запомнить -2 :: понять и запомнить -3 :: понять и запомнить -4 :: понять и запомнить -5 :: понять и запомнить -6 :: понять и запомнить -7 ::