Могу ли я скомбинировать pairwise_cor и pairwise_count, чтобы получить фи-коэффициент И количество вхождений для каждой пары слов?

Я новичок в R и использую widyr для интеллектуального анализа текста. Я успешно использовал методы, найденные здесь, чтобы получить список одновременно встречающихся слов в каждом разделе текста и их фи-коэффициент.

Код следующим образом:

word_cors <- review_words %>%
  group_by(word) %>%
  pairwise_cor(word, title, sort = TRUE) %>%
  filter(correlation > .15)

Я понимаю, что я также могу сгенерировать фрейм данных с одновременно встречающимися словами и количеством раз, когда они появляются, используя такой код:

word_pairs <- review_words %>%
  pairwise_count(word, title, sort = TRUE)

Что мне нужно, так это таблица, в которой есть и фи-коэффициент и количество вхождений для каждой пары слов. Я копался в pairwise_cor и pairwise_count, но до сих пор не могу понять, как их объединить. Если я правильно понимаю, соединения учитывают только один столбец для сопоставления, поэтому я не мог надежно использовать обычное соединение, поскольку может быть несколько пар, которые имеют одно и то же слово в столбце item1.

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

Вот полный код:

#Load packages
pacman::p_load(XML, dplyr, stringr, rvest, httr, xml2, tidytext, tidyverse, widyr)

#Load source material
prod_reviews_df <- read_csv("SOURCE SPREADSHEET.csv")

#Split into one word per row
review_words <- prod_reviews_df %>%
  unnest_tokens(word, comments, token = "words", format = "text", drop = FALSE) %>%
  anti_join(stop_words, by = c("word" = "word"))

#Find phi coefficient
word_cors <- review_words %>%
  group_by(word) %>%
  pairwise_cor(word, title, sort = TRUE) %>%
  filter(correlation > .15)

#Write data to CSV
write.csv(word_cors, "WORD CORRELATIONS.csv")

Я хочу добавить параметр pairwise_count, но он мне нужен вместе с коэффициентом фи.

Благодарю вас!


person ElizabethW    schedule 19.09.2017    source источник
comment
Я запутался, потому что вы используете разные данные для примеров, но вопрос звучал так, как будто вы хотели получить две статистики из одних и тех же данных. Не могли бы вы уточнить? Также соединения не ограничиваются одним столбцом, хотя я предполагаю, что это может зависеть от используемого вами пакета.   -  person Elin    schedule 20.09.2017
comment
Здравствуйте, Элин, извините за беспокойство. На самом деле я не использую функцию pairwise_count в своем коде, поэтому я просто скопировал и вставил пример pairwise_count из инструкций, которые использовал. Я хочу добавить его в свой код, но я хочу добавить его только как столбец, прикрепленный к парам слов и коэффициенту фи, который я получаю из функции pairwise_cor. Я не могу понять, как это сделать, и не смог найти никаких инструкций. Я отредактирую свой пост для ясности. Кроме того, соединения, на которые я смотрел, взяты из dplyr. Буду смотреть другие пакеты.   -  person ElizabethW    schedule 20.09.2017


Ответы (2)


Если вы начинаете использовать принципы аккуратных данных и инструменты tidyverse, я бы посоветовал ПРОДОЛЖАТЬ ВСЮ ПУТЬ :) и использовать dplyr для выполнения интересующих вас объединений. Вы можете использовать left_join для соединения вычислений из pairwise_cor() и pairwise_count(), и вы можете просто передавайте от одного к другому, если хотите.

library(dplyr)
library(tidytext)
library(janeaustenr)
library(widyr)

austen_section_words <- austen_books() %>%
  filter(book == "Pride & Prejudice") %>%
  mutate(section = row_number() %/% 10) %>%
  filter(section > 0) %>%
  unnest_tokens(word, text) %>%
  filter(!word %in% stop_words$word)

austen_section_words %>%
  group_by(word) %>%
  filter(n() >= 20) %>%
  pairwise_cor(word, section, sort = TRUE) %>%
  left_join(austen_section_words %>%
              pairwise_count(word, section, sort = TRUE),
            by = c("item1", "item2"))

#> # A tibble: 154,842 x 4
#>        item1     item2 correlation     n
#>        <chr>     <chr>       <dbl> <dbl>
#>  1    bourgh        de   0.9508501    29
#>  2        de    bourgh   0.9508501    29
#>  3    pounds  thousand   0.7005808    17
#>  4  thousand    pounds   0.7005808    17
#>  5   william       sir   0.6644719    31
#>  6       sir   william   0.6644719    31
#>  7 catherine      lady   0.6633048    82
#>  8      lady catherine   0.6633048    82
#>  9   forster   colonel   0.6220950    27
#> 10   colonel   forster   0.6220950    27
#> # ... with 154,832 more rows
person Julia Silge    schedule 21.09.2017

Я обнаружил и использовал слияние сегодня, и, похоже, он использовал оба соответствующих столбца для слияния данных. Я не уверен, как проверить точность, но я думаю, что это сработало.

person ElizabethW    schedule 20.09.2017