Подпишись
на новые статьи

Просто введи свой e-mail:

Облако минус слов для Яндекс Директ

Аналогично скрипту на R для облака поисковых слов AdWords сделал и для Директа, но добавил больше интерактивности, благодаря  Shiny можно его открыть любым браузером и все изменения в настройках сразу изменяют данные на странице. 
Скрипт скачивает поисковые запросы по всем кампаниям в аккаунте за последние 30 дней. 
Можно выбрать кампанию, указать анализируемый период внутри 30 дней (по умолчанию стоит последние 7 дней). 

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

Таблицу можно отсортировать по столбцам, задать отображаемое число строк.

Так же можно воспользоваться поиском по таблице. Данные из таблицы можно сохранить в csv файл.

Для запуска скрипта нужно создать файл app.R в отдельной папке. 

Сам скрипт ниже. Укажите логин и токен API от нужного аккаунта.

#
# This is a Shiny web application. You can run the application by clicking
# the 'Run App' button above.
#
# Find out more about building applications with Shiny here:
#
# http://shiny.rstudio.com/
#
library(shiny)
library(ryandexdirect)
library(dplyr)
library(tidyr)
library(tm)
library(wordcloud2)
library(devtools)

#Для получения токена расскоментировать строку ниже
#myToken <- yadirGetToken()

#Полученный токен можно сохранить для постоянного использования

directLogin <- "Ваш_логин"

myToken <-"Ваш_токен"

directSearchQuery <- yadirGetReport(
ReportType = "SEARCH_QUERY_PERFORMANCE_REPORT",
DateRangeType = "LAST_30_DAYS",
DateFrom = NULL,
DateTo = NULL,
FieldNames = c("Date", "CampaignName", "AdGroupId", "AdGroupName", "Query", "Impressions", "Clicks","Cost","Conversions"),
FilterList = NULL,
IncludeVAT = "YES",
IncludeDiscount = "NO",
Login = directLogin,
Token = myToken)

#Преобразование типов в таблице
directSearchQuery$Impressions <- as.integer(as.character(directSearchQuery$Impressions))
directSearchQuery$Conversions <- as.integer(as.character(directSearchQuery$Conversions))
directSearchQuery$Conversions[is.na(directSearchQuery$Conversions)]<-0
directSearchQuery$Date <- as.Date(directSearchQuery$Date)

#Получаем все уникальные кампании из отчета
CampaignNames <- as.character( unique(directSearchQuery$CampaignName))



# Define UI for application that draws a histogram
ui <- fluidPage(

# Application title
titlePanel("Анализ ключевых слов без конверсий"),

fluidRow(
column(4,

selectInput("campany", "Рекламная кампания:",
choices=CampaignNames),
hr(),
dateRangeInput("dates",
"Временной диапазон",
start = Sys.Date()-8,
end = Sys.Date()-1,
min = Sys.Date()-31,
max = Sys.Date()-1,
language = "ru",
format = "dd-mm-yyyy"
),
sliderInput("freq",
"Минимальная частота:",
min = 1, max = 100, value = 5),
sliderInput("size",
"Зум (размер шрифта):",
min = 0.1, max = 20, value = 0.5, step = 0.1)

),
column(8,
wordcloud2Output("wordcloud")

)

),
fluidRow(
column(12,
hr(),
h2("Ститистика по каждому слову"),
tabsetPanel(
id = 'dataset',
tabPanel('Без конверсий', DT::dataTableOutput('wordsThisoutConversion')),
tabPanel('С конверсиями', DT::dataTableOutput('wordsThisConversion'))
),
hr(),
downloadButton('download', 'Скачать таблицу'),
hr()

)
)
)
# Define server logic
server <- function(input, output) {

#Таблица со словами с конверсией
ThisConversion <- reactive({


#Выбираем слова с конверсией и добавляем отдельные слова в новую колонку
wordsThisConversion <- directSearchQuery %>%
filter(Conversions!="0", CampaignName == input$campany, Date>=input$dates[1] & Date<=input$dates[2]) %>%
select (Query, Conversions) %>%
mutate(searchWord = strsplit(as.character(Query), " "))

#преобразуем таблицу если конверсий > 0, иначе будет ошибка в unnest()
if(length(wordsThisConversion$Conversions)!=0){
wordsThisConversion <- unnest(wordsThisConversion,searchWord)

wordsThisConversion <- wordsThisConversion %>%
group_by (searchWord) %>%
summarise(Conversion = sum(Conversions), Query = paste(Query, collapse = ', '))

#убираем из таблицы стоп слова
wordsThisConversion <- subset(wordsThisConversion, !(wordsThisConversion$searchWord %in% stopwords("russian")))
}
})


#Таблица со словами без конверсий
ThisoutConversion <- reactive({

#Выбираем слова без конверсий и добавляем отдельные слова в новую колонку
wordsThisoutConversion <- directSearchQuery %>%
filter(Conversions==0,CampaignName == input$campany, Date>=input$dates[1] & Date<=input$dates[2]) %>%
select (Query, Impressions) %>%
mutate(searchWord = strsplit(as.character(Query), " ")) %>%
unnest(searchWord) #преобразум таблицу


wordsThisoutConversion <- wordsThisoutConversion %>%
group_by (searchWord) %>%
summarise(Impressions = sum(Impressions), Query = paste(Query, collapse = ', '))

#убираем из таблицы стоп слова
wordsThisoutConversion <- subset(wordsThisoutConversion, !(wordsThisoutConversion$searchWord %in% stopwords("russian")))



#убираем из таблицы слова с конверсиями
wordsThisoutConversion <- subset(wordsThisoutConversion, !(wordsThisoutConversion$searchWord %in% ThisConversion()$searchWord))

wordsThisoutConversion <- wordsThisoutConversion %>%
filter(Impressions>=input$freq)


})

output$wordcloud <- renderWordcloud2({
#Выводим облако
wordcloud2(ThisoutConversion(), size = input$size, minRotation = 0, maxRotation = 0)
})

output$download <- downloadHandler("bad-words.csv",
content = function(file) {
write.csv(ThisoutConversion(), file)
},
contentType = "text/csv")

output$wordsThisoutConversion <- DT::renderDataTable({
DT::datatable(ThisoutConversion())
})

output$wordsThisConversion <- DT::renderDataTable({
DT::datatable(ThisConversion())
})

}
# Run the application
shinyApp(ui = ui, server = server)

 

Автор: Дата создания:

Комментарии (4)

  1. Максим М:
    июн 20, 2017 at 09:05

    Надо попробовать))
    Крутая штука!

    Ответить

  2. Дмитрий:
    июн 20, 2017 at 08:45

    Интересное решение, но почему то проблемы с кодировкой
    http://joxi.ru/Dr8j1D7HVXo426

    Ответить

    1. admin:
      сен 13, 2017 at 07:24

      Попробуйте изменить кодировку в браузере или открыть ссылку в другом

      Ответить

  3. Евген:
    дек 16, 2017 at 02:57

    Добрый день, работал с Вашим кодам, но получил вот такую ошибку как можно её исправить. http://prntscr.com/ho99nl

    Ответить







Разрешённые теги: <b><i><br>Добавить новый комментарий: