【问题标题】:JSON to R for Data Mining用于数据挖掘的 JSON 到 R
【发布时间】:2012-12-30 00:31:23
【问题描述】:

我正在尝试使用 Topsy Otter api 抓取推文,因此我可以对其进行一些数据挖掘以用于我的论文。

到目前为止,我得到了:

library(RJSONIO)
library(RCurl)
tweet_data <- getURL("http://otter.topsy.com/search.json?q=PSN&mintime=1301634000&perpage=10&maxtime=1304226000&apikey=xxx")
fromJSON(tweet_data)

效果很好。然而,现在我想从这个文件中返回一些细节,'content' 和 'trackback_date'。我似乎无法弄清楚如何 - 我尝试将几个示例拼凑在一起,但无法提取我想要的内容。

这是我迄今为止尝试过的:

trackback_date <- lapply(tweet_data$result, function(x){x$trackback_date})

content <- lapply(tweet_data$result, function(x){x$content})

任何帮助将不胜感激,谢谢。

编辑 我也试过:

library("rjson")
# use rjson

tweet_data <- fromJSON(paste(readLines("http://otter.topsy.com/search.json?q=PSN&mintime=1301634000&perpage=10&maxtime=1304226000&apikey=xxx"), collapse=""))
# get a data from Topsy Otter API
# convert JSON data into R object using fromJSON()

trackback_date <- lapply(tweet_data$result, function(x){x$trackback_date})

content <- lapply(tweet_data$result, function(x){x$content})

【问题讨论】:

    标签: json r data-mining


    【解决方案1】:

    Topsy Otter API 响应的基本处理:

    library(RJSONIO)
    library(RCurl)
    tweet_data <- getURL("http://otter.topsy.com/search.json?q=PSN&mintime=1301634000&perpage=10&maxtime=1304226000&apikey=xxx")
    
    #
    # Addition to your code
    #
    tweets <- fromJSON(tweet_data)$response$list
    content <- sapply(tweets, function(x) x$content)
    trackback_date <- sapply(tweets, function(x) x$trackback_date)
    

    编辑:处理多个页面

    函数从指定的page获取100个项目:

    pagetweets <- function(page){
      url <- paste("http://otter.topsy.com/search.json?q=PSN&mintime=1301634000&page=",page,
                   "&perpage=100&maxtime=1304226000&apikey=xxx",
                   collapse="", sep="")
      tweet_data <- getURL(url)
      fromJSON(tweet_data)$response$list
    }
    

    现在我们可以将它应用到多个页面:

    tweets <- unlist(lapply(1:10, pagetweets), recursive=F)
    

    然后,瞧,这段代码:

    content <- sapply(tweets, function(x) x$content)
    trackback_date <- sapply(tweets, function(x) x$trackback_date)
    

    返回 1000 条记录。

    【讨论】:

    • 正确。谢谢你。你能解释一下这里发生了什么吗?
    • fromJSON 处理tweet_data 并返回带有两个元素的listrequestresponse。反过来,response 是一个包含八个元素的列表,其中我们对list 感兴趣。因此,fromJSON(tweet_data)$response$list 为我们提供了原始数据列表。然后我们用sapply提取它的元素。
    • 谢谢雷德蒙德。我该如何进行多次“获取”?即每个 geturl 返回 100 条推文,如果我想这样做 10 次以获得 1000 条推文,我将如何将它们全部添加到一个“tweet_data”中?
    • 好吧,你应该将基本例程放在返回推文列表的函数中,然后merge他们。
    • @Coffee,请参阅答案中的编辑
    猜你喜欢
    • 2012-05-01
    • 2011-06-16
    • 2011-02-07
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    相关资源
    最近更新 更多