January 31, 2022

Getting to Yes

Getting to Yes

Let’s have a brief look at Getting to Yes.

What are the most common words?

library(tidyverse)
library(tidytext)
library(wordcloud)
load("data/SharedGTY.RData")
GTY.WM <- Getting.To.Yes.TDF %>% 
    unnest_tokens(word, text)
tidy_book <- GTY.WM %>%
    anti_join(stop_words)
# The barplot
tidy_book %>%
   count(word, sort = TRUE) %>%
   filter(n > 50) %>%
   mutate(word = reorder(word, n)) %>%
   ggplot(aes(word, n)) +
   geom_col() +
   xlab(NULL) +
   coord_flip()

A Wordcloud?

# Make the wordcloud
tidy_book %>%
   count(word) %>%
   with(wordcloud(word, n, max.words = 100))

# Stems in lieu of words

Networks of Words

# Networks of words
library(igraph)
library(ggraph)
library(widyr)
count_bigrams <- function(dataset) {
  dataset %>%
    unnest_tokens(bigram, text, token = "ngrams", n = 2) %>%
    separate(bigram, c("word1", "word2"), sep = " ") %>%
    filter(!word1 %in% stop_words$word,
           !word2 %in% stop_words$word) %>%
    count(word1, word2, sort = TRUE)
}
word_cooccurences <- count_bigrams(Getting.To.Yes.TDF)
set.seed(2016)
word_cooccurences %>%
  filter(n >= 10) %>%
  graph_from_data_frame() %>%
  ggraph(layout = "fr") +
  geom_edge_link(aes(edge_alpha = n, edge_width = n)) +
  geom_node_point(color = "plum4", size = 5) +
  geom_node_text(aes(label = name), vjust = 1.8) +
  ggtitle(expression(paste("Word Network in", 
                           italic("Getting to Yes")))) +
  theme_void()

Other ways to plot them.

## More complicated breaks: pairs
GTY.PM <- Getting.To.Yes.TDF %>% 
  unnest_tokens(ngram, text, token = "ngrams", n = 2)
bigrams_separated <- GTY.PM %>%
  separate(ngram, c("word1", "word2"), sep = " ")

bigrams_filtered <- bigrams_separated %>%
  filter(!word1 %in% stop_words$word) %>%
  filter(!word2 %in% stop_words$word)

# new bigram counts:
bigram_counts <- bigrams_filtered %>% 
  count(word1, word2, sort = TRUE)

bigrams_united <- bigrams_filtered %>%
  unite(bigram, word1, word2, sep = " ")

my.df <- data.frame(table(bigrams_united$bigram))
my.df <- my.df[order(my.df$Freq, decreasing=TRUE),]
my.df <- my.df[c(2:100),]
head(my.df)
##                        Var1 Freq
## 2727  positional bargaining   44
## 2841 principled negotiation   36
## 2398     objective criteria   30
## 451             bottom line   25
## 3014        reach agreement   20
## 2264      negotiating power   16
bigram_counts
## # A tibble: 4,089 × 3
##    word1       word2           n
##    <chr>       <chr>       <int>
##  1 <NA>        <NA>          215
##  2 positional  bargaining     44
##  3 principled  negotiation    36
##  4 objective   criteria       30
##  5 bottom      line           25
##  6 reach       agreement      20
##  7 negotiating power          16
##  8 negotiation power          14
##  9 inventing   options        13
## 10 mutual      gain           11
## # … with 4,079 more rows
library(wordcloud2)
wordcloud2(my.df, color="random-light", backgroundColor = "black", size = 0.4)