如何在 R 中一次对多个维基百科文章 运行 article_pageviews 函数,将输出保存在数据框中?

How to run the article_pageviews function on multiple wikipedia articles at once in R, saving the output in a data frame?

我目前正在尝试使用 pageviews 包中的 article_pageviews 函数从维基百科收集维基百科查看数据(某篇文章在给定时间范围内的查看次数)。我还有一个数据框,其中包含我希望从中提取查看数据的维基百科文章的名称。

我的包含名称的数据框如下所示:

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"
  )

运行 这行代码产生一个 table,其中包含变量 views 的 12 个观测值(每个月 1 个)。我对所有 12 个观察的所有视图的总和感兴趣

sum(Viewings$views)

我想知道是否有办法 运行 我保存在我的数据框中的维基百科页面名称上的 article_pageviews 函数,一次全部并保存总和(Viewings$views)对于数据框中的每篇文章。唯一的选择是 运行 每个维基百科文章上的 article_pageviews 函数,但很想知道是否有一种方法可以自动执行此过程。

您可以让 purrr 中的 map_dbl 使用您 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_)}
      )
    })
  )

以上代码确实涵盖了无法找到某篇文章的可能性(例如'sadfasdfasdf'),在这种情况下,map 函数会捕获由此产生的错误,而不是 returns NA.