Introduction

This is a collection of short scripts (recipes) to do some common things using brandseyer2. You should, for the most part, be able to copy and paste them in to an R file, change a few variables (like the account code and filter), and then run them.

Recipes

Finding topics for mentions

Sometimes you may want to get a clean data set of mentions, and the topics on them. This small script will write out a CSV giving, for each topic on a mention, a row with the mention ID, topic ID, and topic name. It reads all the mentions matching a filter, asking for only the mentions’ IDs and tags. Then, using topics(), it gets all the topic data for the mentions. Next, it uses dplyr::select() to choose only some interesting columns to keep. Finaly, it saves the data, using readr::write_csv().

The Recipe

library(brandseyer2)
library(dplyr, warn.conflicts = FALSE)            # For manipulating tables
library(readr)                                    # For writing CSVs

code <- "BEUB03AA"
filter <- "published inthelast week and brand isorchildof 46334"

mentions_with_topics <- account(code) %>%         # Get the account
  mentions(filter, select = c(id, tags)) %>%      # Ask for the mentions (but only their IDs and tags)
  topics() %>%                                    # From the mentions, get specific topics
  select(id, topic.id, name)                      # Select only some interesting columns


write_csv(mentions_with_topics, "topics.csv")

Outcomes

You can modify what columns you’d like kept in your CSV file by modifying the select line. And this is what some of the data looks like:

#> # A tibble: 2,475 x 3
#>    id          topic.id name                                              
#>    <chr>          <int> <chr>                                             
#>  1 46334-8933…    70331 Comparing (brands to brands) or comparing (brands…
#>  2 46334-8933…    69873 Ethics or reputation                              
#>  3 46334-8933…    71303 Transport experience                              
#>  4 46334-8933…    71359 Drivers                                           
#>  5 46334-8933…    69878 Accusations of unethical behavior                 
#>  6 46334-8933…    69873 Ethics or reputation                              
#>  7 46334-8933…    70331 Comparing (brands to brands) or comparing (brands…
#>  8 46334-8933…    69873 Ethics or reputation                              
#>  9 46334-8933…    70331 Comparing (brands to brands) or comparing (brands…
#> 10 46334-8933…    69873 Ethics or reputation                              
#> # ... with 2,465 more rows

Average number of topics per mention

This is an extension of the recipe for finding topics on a mention. It uses dplyr to calculate the average number of mentions on a topic.

The Recipe

library(brandseyer2)
library(dplyr)
library(readr)

code <- "BEUB03AA"
filter <- "published inthelast week and brand isorchildof 46334"

mentions_with_topics <- account(code) %>%         # Get the account
  mentions(filter, select = c(id, tags)) %>%      # Ask for the mentions (but only their IDs and tags)
  topics() %>%                                    # From the mentions, get specific topics
  select(id, topic.id, name)

topics_per_mention <- mentions_with_topics %>%   
  group_by(id) %>%                # For each mention
  summarise(count = n())          # Count the number of mentions

average_topics <- sum(topics_per_mention$count) / nrow(topics_per_mention)
message(glue::glue("The average number of topics per mention is {round(average_topics, 2)}"))

The outcome

The recipe prints out the average

#> The average number of topics per mention is 2.84

Find the parent of topics

BrandsEye topics can belong to more than one topic tree, and so can have more than one parent. When wanting to find the parent of a topic, you need to choose a topic tree to do this from. The easiest way to find topic trees is to use the topic_trees() function, like so:

library(brandseyer2)
library(dplyr)

account("TEST01AA") %>% 
  topic_trees() %>% 
  select(id, name)
#> # A tibble: 1 x 2
#>      id name          
#>   <int> <chr>         
#> 1  1001 Tree of Topics

The Recipe

library(brandseyer2)
library(dplyr)

account("TEST01AA") %>% 
  tags() %>% 
  with_tag_parents(1001) %>% 
  filter(namespace == 'topic') %>% 
  arrange(desc(is_parent), name)

The outcome

This produces a nicely sorted table of topics and parents, all in relation to the given topic tree. Notice that the topic tree itself won’t be in this table, since it is in its own topic_tree namespace.

#> # A tibble: 3 x 3
#> # Rowwise: 
#>      id name          parent
#>   <int> <chr>          <dbl>
#> 1    10 Parent topic    1001
#> 2    11 Child topic 1     10
#> 3    12 Child topic 2     10