我一直在研究一个R函数,你可以输入搜索文本、搜索站点数量和每个站点的半径。例如:twitterMap("#rstats",10,"10mi")
这是代码:
twitterMap <- function(searchtext,locations,radius){
require(ggplot2)
require(maps)
require(twitteR)
radius=radius
lat<-runif(n=locations,min=24.446667, max=49.384472)
long<-runif(n=locations,min=-124.733056, max=-66.949778)
coordinates<-as.data.frame(cbind(lat,long,radius))
coordinates$lat<-lat
coordinates$long<-long
for(i in 1:length(coordinates$lat)){
coordinates$search.twitter.entry[i]<-toString(c(coordinates$lat[i],
coordinates$long[i],radius))
}
coordinates$search.twitter.entry<-gsub(" ","", coordinates$search.twitter.entry ,
fixed=TRUE)
for(i in 1:length(coordinates$lat)){
coordinates$number.of.tweets[i]<-
length(searchTwitter(searchString=searchtext,n=1000,geocode=coordinates$search.twitter.entry[i]))
}
all_states <- map_data("state")
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
}
searchTwitter("dolphin",15,"10mi")
![示例地图](https://istack.dev59.com/816Qw.webp)
我遇到了一些大问题,不太确定如何处理。首先,按照现在的代码编写方式,代码会搜索15个随机生成的位置,这些位置是从美国东部最大经度到最大西部、从最北端到最南端的均匀分布中生成的。这将包括不在美国范围内的位置,比如在加拿大明尼苏达州湖的东边。我希望能有一个函数来随机检查生成的位置是否在美国范围内,如果不在,则将其丢弃。更重要的是,我想搜索数千个位置,但Twitter不支持这样的操作会出现420错误增强您的冷静
。因此,也许最好每隔几个小时搜索一次,并慢慢建立数据库并删除重复的推文。最后,如果你选择了一个非常受欢迎的主题,在R中会出现类似于Error in function (type, msg, asError = TRUE) :
transfer closed with 43756 bytes remaining to read
的错误。我有点不知道如何解决这个问题。
searchTwitter
使用。请参阅库文档?searchTwitter
。 - mindless.pandasearchTwitter
中提供地理编码和半径,但这并不会为每个拉取的推文生成地理编码。 - iantist