Как разработать графический интерфейс для скриптов R > NetPeak - Независимость и осознанность
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.



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

Как открыть интернет-магазин и подготовить его к SEO-продвижению за один день

Как открыть интернет-магазин и подготовить его к SEO-продвижению за один день Открываем интернет-магазин за один день. Комплекс UniTheme от AlexBranding и Netpeak включает CMS CS-Cart, современный шаблон и 11 SEO-модулей...

23 05 2025 10:57:51

Геотаргетинг: 10 способов увеличить охват целевой аудитории

Геотаргетинг: 10 способов увеличить охват целевой аудитории Как увеличить охват целевой аудитории ресторана или магазина с помощью рекламы на мобильных и сверхточного геотаргетинга...

22 05 2025 13:28:44

Особенности продвижения проектов B2B и B2C

Особенности продвижения проектов B2B и B2C Сравнительная хаpaктеристика B2B и B2C. Как строятся отношения с клиентом, какой объем рынка, особенности сервиса, на чем делать акцент при создании контента. Подробнее....

21 05 2025 7:44:40

Личный кабинет клиента Netpeak 2.0

Личный кабинет клиента Netpeak 2.0 Личный кабинет на сайте: что нового во внешнем виде, внутренностях и отчетах, функционале и юзабилити, автоматизации работы с оплатами, интернет-представительстве клиента и для специалистов. Узнайте больше!...

20 05 2025 8:39:26

Как за два месяца увеличить количество установок приложения на 43% в AppStore — Кейс Uklon

Как за два месяца увеличить количество установок приложения на 43% в AppStore — Кейс Uklon В одной из самых «перегретых» ниш вышли в топ-5 по некоторым высокочастотным запросам. Узнать больше!...

19 05 2025 8:20:17

5 главных трендов в социальных сетях в 2022 году

5 главных трендов в социальных сетях в 2022 году Хотите раскрутить свои соцсети в 2022 году? Тогда уже сейчас нужно задуматься, что будете публиковать. В статье расскажем, какой контент будет в тренде в будущем году....

18 05 2025 17:48:53

Как настроить таргетированную рекламу в Instagram через рекламный кабинет Facebook

Как настроить таргетированную рекламу в Instagram через рекламный кабинет Facebook Руководство для всех, кто продает через Instagram: когда стоит воспользоваться рекламным кабинетом Facebook для настройки кампании в Instagram и как правильно запустить рекламу в Instagram через кабинет Facebook. Читайте дальше!...

17 05 2025 10:56:26

3 фишки про продвижение постов в Facebook

3 фишки про продвижение постов в Facebook Если маркетер хочет привлечь к бренд-контенту дополнительное внимание, стоит воспользоваться опцией Promote post....

16 05 2025 19:14:42

Как подключение CDP может увеличить доход от триггерных писем до 50% — кейс Office-Expert.kz

Как подключение CDP может увеличить доход от триггерных писем до 50% — кейс Office-Expert.kz Эффективность продвинутой сегментации стала заметна уже в первый месяц ее функционирования....

15 05 2025 20:44:28

Что такое вечные ссылки и как продвигать сайт с их помощью

Что такое вечные ссылки и как продвигать сайт с их помощью Ссылки называются вечными, потому что их внедряют один раз и навсегда, но это не значит, что такие ссылки однажды не удалят (что поведет к потере трафика). Узнать больше!...

14 05 2025 16:51:14

Как поменялись рекламные кампании во время карантина — что делать бизнесу

Как поменялись рекламные кампании во время карантина — что делать бизнесу Инсайты от специалистов агентства Netpeak о популярных тематиках, тенденциях, особенностях продвижения в карантин и кризис, новых правилах для контекстной рекламы и других способов продвижения. Чтобы узнать больше, читайте далее!...

13 05 2025 13:37:32

Как объединить несколько целей в одну кастомную конверсию Facebook с помощью Google Tag Manager

Как объединить несколько целей в одну кастомную конверсию Facebook с помощью Google Tag Manager Достаточно настроить соответствующим способом триггеры и теги. Мануал здесь....

12 05 2025 5:38:44

Продвинутый подход к работе с аудиториями Facebook

Продвинутый подход к работе с аудиториями Facebook В основе продвижения любых продуктов фигурирует ЦА и её потребности. Рассказываем, как с ней работать в разрезе Инстаграм и Facebook так, чтобы РК давала максимальный профит...

11 05 2025 11:23:58

Кейс «Секунда»: как получить больше 13 000 обращений в офлайн-магазины с помощью локальных кампаний Google

Кейс «Секунда»: как получить больше 13 000 обращений в офлайн-магазины с помощью локальных кампаний Google Как настроить и получить эффективную отдачу от Google Local Campaigns...

10 05 2025 22:15:35

SEO-продвижение сайта eda.ua — рост органического трафика на 331,5% за шесть месяцев

SEO-продвижение сайта eda.ua — рост органического трафика на 331,5% за шесть месяцев SEO-продвижение онлайн-сервиса доставки еды с новым сайтом. Цели продвижения, составление семантического ядра, формирование URL, поддомены, карточки товаров, тексты, внешняя оптимизация, дополнительные работы, а также полученные результаты...

09 05 2025 5:12:52

Рамиль Мухоряпов: «Мы стали драйвером развития электронной коммерции в Казахстане»

Рамиль Мухоряпов: «Мы стали драйвером развития электронной коммерции в Казахстане» История создания и развития холдинга «Choco Family» помогает понять масштабы онлайн-рынка Казахстана, найти точки роста для собственного бизнеса в Казнете. Каково быть пионером ecommerce в стране? Чем казахстанский рынок e­commerce отличается от Рунета и Уанета? Читать!...

08 05 2025 13:25:34

Сколько стоил клик в Google Ads в Казахстане во втором квартале 2020 года — исследование Netpeak

Сколько стоил клик в Google Ads в Казахстане во втором квартале 2020 года — исследование Netpeak Зная стоимость клика в вашей тематике или регионе, коэффициент конверсии на сайте, вы можете оценить объем необходимых в рекламу инвестиций и прогнозировать стоимость конверсии. Узнать больше!...

07 05 2025 6:38:22

SEO-продвижение интернет-магазина женской и детской одежды c ROMI 1428%

SEO-продвижение интернет-магазина женской и детской одежды c ROMI 1428% кейсы по seo интернет-магазина модной одежды в Болгарии: как мы сняли негативный эффект от Google Penguin и получили ROMI (возврат маркетинговых инвестиций) 1428%...

06 05 2025 5:31:21

Самые популярные термины контекстной рекламы — толковый словарь для чайников

Что такое контекстная реклама? Словарь терминов для чайников...

05 05 2025 19:28:51

SEO-продвижение интернет-магазина по продаже аксессуаров для путешествий: ROMI 743%

SEO-продвижение интернет-магазина по продаже аксессуаров для путешествий: ROMI 743% Результаты грамотного внедрения технического SEO-аудита...

04 05 2025 9:58:46

Чем http отличается от https

Чем http отличается от https Чем отличается протокол HTTPS от HTTP — криптошифрованием, обеспечивающим безопасность ресурса...

03 05 2025 1:18:48

Как ускорить сайт с помощью сервиса CDN — краш-тест Айри

Как ускорить сайт с помощью сервиса CDN — краш-тест Айри Как трафик CDN повлиял на систему интернет-магазина — палим кейсы...

02 05 2025 18:53:18

Как повысить CTR объявлений с помощью расширений

Как добиться 100% пользы от контекстных объявлений с помощью расширений...

01 05 2025 12:25:12

«Покажи свою работу»: Анастасия Здорикова, руководитель отдела маркетинга Netpeak Software

«Покажи свою работу»: Анастасия Здорикова, руководитель отдела маркетинга Netpeak Software Как научиться справляться со стрессом и находить в комaнду «тех самых» людей...

30 04 2025 1:49:31

Коммуникация брендов на карантине: хорошие примеры SMM и PR

Что постить предпринимателям в соцсетях. Несколько примеров уместной работы SMM- и PR-специалистов, которые прямо и четко помогают озвучить позицию бизнеса в период карантина. Узнайте больше, чем действовать правильно!...

29 04 2025 6:57:15

Как компании контролируют сотрудников в соцсетях. Три кейса

Как компании контролируют сотрудников в соцсетях. Три кейса К социальным сетям уже нельзя относиться, как к сугубо личному прострaнcтву?...

28 04 2025 23:37:51

10 онлайн способов улучшить контент

10 онлайн способов улучшить контент Как преодолеть онлайн писательский ступор, разобраться с рутиной и освободить время для экспериментов...

27 04 2025 21:35:42

Что такое CTA: как сформировать эффективный призыв к действию

Основная цель CTA — помочь посетителю принять решение о покупке, скачивании, регистрации или подписке...

26 04 2025 7:57:52

Что вы можете сделать со своим пресс-релизом

Что вы можете сделать со своим пресс-релизом Написание и распространение пресс-релизов концептуально устарело. Как привлечь аудиторию читателей СМИ без них?...

25 04 2025 7:57:47

Как получить 184% прироста трафика и увеличить долю поискового трафика в три раза в gaming-тематике — кейс Wowcarry

Как получить 184% прироста трафика и увеличить долю поискового трафика в три раза в gaming-тематике — кейс Wowcarry Доля органического трафика увеличилась с 14% до 44%, а небрендового — на 184%....

24 04 2025 10:54:20

Уроки Google ***ytics — как добавить новый сайт в Google ***ytics

Уроки Google ***ytics — как добавить новый сайт в Google ***ytics Как настроить Google ***ytics и как открыть вход другому пользователю: подробный урок....

23 04 2025 23:14:13

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

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

22 04 2025 7:44:30

Как продавать часы в интернете: методы и фишки

Как продавать часы в интернете: методы и фишки Инструменты интернет-маркетинга, которые вы не используете или используете не на сто процентов....

21 04 2025 0:52:28

Как составить и анализировать KPI для PR-менеджера

Как составить и анализировать KPI для PR-менеджера PR должен решать задачи бизнеса и для этого мало мониторить упоминания компании или бренда, нужно анализировать. С появлением соцсетей пиар изменился. Узнать больше!...

20 04 2025 13:43:53

Как увеличить продажи с помощью местных экспертов от Google — советы локальному бизнесу

Как увеличить продажи с помощью местных экспертов от Google — советы локальному бизнесу Информация для SEO- и PPC-специалистов, маркетологов и предпринимателей малого бизнеса...

19 04 2025 20:36:47

Контекстная реклама недвижимости на Кипре — в 5 раз больше лидов за 3 месяца

Контекстная реклама недвижимости на Кипре — в 5 раз больше лидов за 3 месяца Почему в высококонкурентных тематиках важно оптимизировать поведенческие показатели...

18 04 2025 12:28:15

Увеличиваем органический трафик — дооптимизация страниц сайта

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

17 04 2025 0:49:23

Что эффективнее: Google Реклама или Bing Ads

Что эффективнее: Google Реклама или Bing Ads Подробно о преимуществах и особенностях двух сервисов контекстной рекламы....

16 04 2025 14:29:35

10 мощных советов по маркетингу WordPress

Лучшие плагины WordPress для SEO и продвижения сайта в поисковой системе Google и 10 советов для WordPress, которые помогут вам продвигать свой сайт...

15 04 2025 14:46:11

Кейс по SMM в тематике «алкогольные напитки»: «Пригласи 10 друзей — получи бутылку шампанского»

Кейс по SMM в тематике «алкогольные напитки»: «Пригласи 10 друзей — получи бутылку шампанского» Оживший бар. О том, как один украинский бренд за полтора месяца получил более 4 000 фанов!...

14 04 2025 4:44:32

Не злите голодных людей — оптимизируйте сайт и рекламу с помощью специальной PPC-стратегии

Не злите голодных людей — оптимизируйте сайт и рекламу с помощью специальной PPC-стратегии Опыт, накопленный за более чем 10 лет работы в нише и упакованный в специальные предложения....

13 04 2025 6:39:56

Как привлечь на 174% больше звонков с помощью видеорекламы — кейс клиники лазерной косметологии Goldlaser.com.ua

Как привлечь на 174% больше звонков с помощью видеорекламы — кейс клиники лазерной косметологии Goldlaser.com.ua Клиникка использует лазеры и нуждается в продвижении. В специфических сферах привлечь потребителя впервые бывает сложнее и дороже, чем удержать его. Этот кейс о том, как повысить количество обращений новых клиентов с помощью видеорекламы...

12 04 2025 5:11:23

Сниппеты в выдаче Google –– что изменилось? Исследование Serpstat

Данные из контента страницы и основного заголовка h1 вместо метатега title. Что показало исследование Serpstat....

11 04 2025 12:15:44

Что такое консалтинг от Netpeak и почему он нужен инхаус-комaндам

Что такое консалтинг от Netpeak и почему он нужен инхаус-комaндам Где найти лидера для своей инхаус-комaнды маркетологов...

10 04 2025 21:31:57

Перенос сайта на новую CMS без потери позиций и трафика: как подготовить ТЗ программисту

Пошаговый чек-лист и описание действий SEO-специалиста на всех этапах переноса сайта на новую CMS....

09 04 2025 16:59:27

Как готовить баннеры для мобильной рекламы

Как готовить баннеры для мобильной рекламы Как сделать креативный мобильный баннер. Зачем нужны особенные баннеры для мобильных? Что делать с картинкой? Что делать с текстом? Что делать с другими рекламными форматами? Дополнительные элементы. Обо всем этом детально и спримерами...

08 04 2025 2:10:25

Сколько стоил клик в Google Ads и Facebook в Украине в первом квартале 2019 года

Сколько стоил клик в Google Ads и Facebook в Украине в первом квартале 2019 года Данные по 42,5 млн кликов в 25 тематиках и 391 городу...

07 04 2025 12:36:59

Как мы вошли в топ Product Hunt — четкая инструкция от Serpstat

Подробный алгоритм успешного питча на Product Hunt на примере Serpstat...

06 04 2025 4:14:19

Как установить пиксель Facebook и Instagram — отслеживаем целевые действия

Как установить пиксель Facebook и Instagram — отслеживаем целевые действия Пиксель Facebook — инструмент аналитики рекламной системы, который можно использовать и для Instagram....

05 04 2025 15:32:50

Как настроить автоматическое обновление отчетности из Google ***ytics, Google Search Console и Serpstat

Как настроить автоматическое обновление отчетности из Google ***ytics, Google Search Console и Serpstat SEO-dashboard для сбора данных в Google-таблицы и отправка отчетов по email. Решение, которое поможет заметить глобальные изменения в потоках трафика. Узнать больше!...

04 04 2025 22:13:19

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