【问题标题】:How to extract tweet geocode in twitteR package in R如何在 R 的 twitteR 包中提取推文地理编码
【发布时间】:2012-07-25 08:48:22
【问题描述】:

最近 Edwin Chen 发布了一张很棒的地图,显示了苏打水、汽水和可乐的区域使用情况,这些地图是根据地理编码推文创建的,这些推文涉及饮酒背景下的这些词。 http://blog.echen.me/2012/07/06/soda-vs-pop-with-twitter/

他提到他使用了由 Jeff Gentry 在 R 中创建的 twitteR 包。果然,很容易收集使用给定单词的推文并将它们放入数据框中:

require(twitteR)
require(plyr)
cat.tweets<-searchTwitter("cats",n=1000)
tweets.df = ldply(cat.tweets, function(t) t$toDataFrame() ) 

数据框 (tweets.df) 将包含每条推文的用户 ID、推文文本等,但似乎不包含地理编码。关于如何在 R 中获取它的任何想法?

【问题讨论】:

  • 您需要提供geocodesearchTwitter 使用。请参阅库文档?searchTwitter
  • 我看到您可以在searchTwitter 中提供地理编码和半径,但这不会为每条拉取的推文生成地理编码。
  • 但是您应该拥有您提供的地理编码,对吗?较小的半径可能会满足您的需求吗?
  • 好主意,我明白你的意思了。我基本上可以遍历给定地图上的点网格。感谢您的建议。
  • 当你让它工作时,你应该回答你自己的问题,这样其他人就可以看到你是如何做到的。我真的很喜欢你链接到的帖子,但他们没有发布任何代码。 =(

标签: r twitter geocode


【解决方案1】:

地理编码是指经度和纬度坐标吗? 如果是,以下命令对我有用。

cat.tweets = searchTwitter("cats",n=1000)
tweets.df = do.call("rbind",lapply(cat.tweets,as.data.frame))

来源:LINK

【讨论】:

    【解决方案2】:

    我一直在修改 R 函数,您可以输入搜索文本、搜索站点的数量以及每个站点周围的半径。例如twitterMap("#rstats",10,"10mi")这是代码:

    twitterMap <- function(searchtext,locations,radius){
    require(ggplot2)
    require(maps)
    require(twitteR)
    #radius from randomly chosen location
    radius=radius
    lat<-runif(n=locations,min=24.446667, max=49.384472)
    long<-runif(n=locations,min=-124.733056, max=-66.949778)
    #generate data fram with random longitude, latitude and chosen radius
    coordinates<-as.data.frame(cbind(lat,long,radius))
    coordinates$lat<-lat
    coordinates$long<-long
    #create a string of the lat, long, and radius for entry into searchTwitter()
    for(i in 1:length(coordinates$lat)){
    coordinates$search.twitter.entry[i]<-toString(c(coordinates$lat[i],
    coordinates$long[i],radius))
    }
    # take out spaces in the string
    coordinates$search.twitter.entry<-gsub(" ","", coordinates$search.twitter.entry ,
    fixed=TRUE)
    
    #Search twitter at each location, check how many tweets and put into dataframe
    for(i in 1:length(coordinates$lat)){
    coordinates$number.of.tweets[i]<-
     length(searchTwitter(searchString=searchtext,n=1000,geocode=coordinates$search.twitter.entry[i]))
    }
    #making the US map
    all_states <- map_data("state")
    #plot all points on the map
    p <- ggplot()
    p <- p + geom_polygon( data=all_states, aes(x=long, y=lat, group = group),colour="grey",     fill=NA )
    
    p<-p + geom_point( data=coordinates, aes(x=long, y=lat,color=number.of.tweets
                                         )) + scale_size(name="# of tweets")
    p
    }
    # Example
    searchTwitter("dolphin",15,"10mi")
    

    我遇到了一些我不知道如何处理的大问题。首先,代码搜索 15 个不同的随机生成位置,这些位置是从美国东部最大经度到西部最大经度、最北纬到最南纬度的均匀分布生成的。这将包括不在美国的地点,比如加拿大明尼苏达森林湖以东。我想要一个随机检查生成的位置是否在美国的函数,如果不是则丢弃它。更重要的是,我想搜索数千个地点,但 twitter 不喜欢这样并给了我一个420 error enhance your calm。所以也许最好每隔几个小时搜索一次,慢慢建立一个数据库,删除重复的推文。最后,如果一个人选择了一个远程流行的主题,R 会给出一个类似Error in function (type, msg, asError = TRUE) : transfer closed with 43756 bytes remaining to read 的错误。我对如何解决这个问题有点困惑。

    【讨论】:

    • 请继续努力......并在它弄清楚时发布......即使我需要它
    • 你能告诉我如何从searchTwitter 收集的推文中提取经度和纬度,那么你可以使用this
    • 我收到一条错误消息:在 doRppAPICall("search/tweets", n, params = params, retryOnRateLimit = retryOnRateLimit, : 请求了 15 条推文,但 API 只能返回 0
    【解决方案3】:

    这是一个玩具示例,假设您每次调用只能提取 100 条推文:

    require(twitteR)
    require(plyr)
    URL = paste('http://search.twitter.com/search.atom? 
          q=','&geocode=39.724089,-104.820557,3mi','&rpp=100&page=', page, sep='') #Aurora,CO with radii of 3mi
    XML = htmlTreeParse(URL, useInternal=TRUE)
    entry = getNodeSet(XML, "//entry")
    tweets = c()
    
    for (i in 1:99){ 
        t = unlist(xpathApply(entry[[i]], "//title", xmlValue))
        tweets = c(tweets,t)
    }
    

    这个解决方案可能不太优雅,但我能够获得给定特定地理编码的推文。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-29
      • 2018-05-05
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 2017-04-18
      • 2011-12-21
      • 2014-01-20
      相关资源
      最近更新 更多