Как запустить функцию article_pageviews сразу для нескольких статей википедии в R, сохранив вывод во фрейме данных? - PullRequest
0 голосов
/ 13 июля 2020

В настоящее время я пытаюсь собрать данные о просмотрах Википедии (сколько просмотров определенной статьи за определенный период времени) из Википедии, используя функцию article_pageviews из пакета pageviews. Кроме того, у меня есть фрейм данных, содержащий названия статей Википедии, из которых я sh извлекаю данные просмотра.

Мой фрейм данных, содержащий имена, выглядит следующим образом:

name        Variable1   Variable2
Henry V        .            .
Henry VI       .            . 
Henry VII      .            .
   .           .            .
   .           .            .
   .           .            .

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

Viewings <- article_pageviews(
  project = "en.wikipedia",
  article = "name of wikipedia article",
  platform = "all",
  user_type = "all",
  start = as.Date('2019-01-01'),
  end = as.Date('2020-01-01'),
  reformat = TRUE,
  granularity = "monthly"
  )

Выполнение этой строки кода дает таблицу с 12 наблюдениями (по 1 для каждого месяца), содержащую переменную views. Меня интересует сумма всех представлений для всех 12 наблюдений

sum(Viewings$views)

Мне было интересно, есть ли способ запустить функцию article_pageviews для имен страниц Википедии, которые я сохранил в моем фреймворке данных , все сразу и сохраните сумму (просмотры $ просмотры) для каждой статьи в фрейме данных. Единственной альтернативой было бы запускать функцию article_pageviews для каждой статьи Википедии отдельно, но было бы интересно узнать, есть ли способ автоматизировать этот процесс.

1 Ответ

0 голосов
/ 17 июля 2020

Вы можете позволить map_dbl из purrr использовать имена в вашем df в качестве входных и получать все просмотры страниц.

library(dplyr)
library(purrr)
library(pageviews)

df <- tibble(name = c('Henry V', 'Henry VI', 'Henry VII', 'sadfasdfasdf'))

Viewings <- df %>%
  mutate(
    views_total = map_dbl(name, .f = function(article){
      tryCatch({
        article_pageviews(
            project = "en.wikipedia",
            article = article,
            platform = "all",
            user_type = "all",
            start = as.Date('2019-01-01'),
            end = as.Date('2020-01-01'),
            reformat = TRUE,
            granularity = "monthly"
          ) %>%
          pull(views) %>%
          sum(na.rm=T)
        },
        error = function(e){return(NA_real_)}
      )
    })
  )

Приведенный выше код действительно покрывает возможность того, что определенная статья может ' t (например, 'sadfasdfasdf'), и в этом случае функция карты перехватывает полученную ошибку и вместо этого возвращает NA.

...