2016-05-30 50 views
3

的緯度和經度值我收集了一些Twitter的數據這樣做:不能得到鳴叫

#connect to twitter API 
setup_twitter_oauth(consumer_key, consumer_secret, access_token, access_secret) 

#set radius and amount of requests 
N=200 # tweets to request from each query 
S=200 # radius in miles 

lats=c(38.9,40.7) 
lons=c(-77,-74) 

roger=do.call(rbind,lapply(1:length(lats), function(i) searchTwitter('Roger+Federer', 
                   lang="en",n=N,resultType="recent", 
                   geocode=paste (lats[i],lons[i],paste0(S,"mi"),sep=",")))) 

這個我做了後:

rogerlat=sapply(roger, function(x) as.numeric(x$getLatitude())) 
rogerlat=sapply(rogerlat, function(z) ifelse(length(z)==0,NA,z)) 

rogerlon=sapply(roger, function(x) as.numeric(x$getLongitude())) 
rogerlon=sapply(rogerlon, function(z) ifelse(length(z)==0,NA,z)) 

data=as.data.frame(cbind(lat=rogerlat,lon=rogerlon)) 

現在我想獲得所有的鳴叫有長和緯度值:

data=filter(data, !is.na(lat),!is.na(lon)) 
lonlat=select(data,lon,lat) 

但是現在我只能得到NA值....任何想法在這裏出了什麼問題?

+1

你可以'輸入'一些'羅傑'數據框(匿名,如有必要)。我們還能如何確保Twitter甚至提供了一些經緯值? – dww

回答

5

如前所述ChrissearchTwitter不會返回LAT-長的鳴叫。您可以通過進入twitteR文檔,它告訴我們,它返回一個status對象看到這一點。

狀態對象

向下滾動到狀態對象,你可以看到的信息,11個都包括在內,但LAT-長是不是其中之一。但是,我們並沒有完全丟失,因爲用戶的屏幕名稱被返回。

如果我們看一下用戶對象,我們可以看到,用戶的對象至少包括位置。

所以我能想到至少有兩個可能的解決方案,這取決於你的使用情況是什麼。

解決方案1:提取用戶的位置

# Search for recent Trump tweets # 
tweets <- searchTwitter('Trump', lang="en",n=N,resultType="recent", 
       geocode='38.9,-77,50mi') 

# If you want, convert tweets to a data frame # 
tweets.df <- twListToDF(tweets) 

# Look up the users # 
users <- lookupUsers(tweets.df$screenName) 

# Convert users to a dataframe, look at their location# 
users_df <- twListToDF(users) 

table(users_df[1:10, 'location']) 

             ❤ Texas ❤ ALT.SEATTLE.INTERNET.UR.FACE 
        2       1       1 
       Japan    Land of the Free     New Orleans 
        1       1       1 
    Springfield OR USA    United States       USA 
        1       1       1 

# Note that these will be the users' self-reported locations, 
# so potentially they are not that useful 

解決方案2:多次搜索,以有限的半徑

其他的解決辦法是進行一系列反覆搜索,增加您的緯度和小半徑的經度。這樣你可以相對確定用戶接近你指定的位置。

0

假設一些微博中下載,也有一些地理參考鳴叫和一些鳴叫沒有地理座標:

prod(dim(data)) > 1 & prod(dim(data)) != sum(is.na(data)) & any(is.na(data)) 
# TRUE 

讓我們來模擬你的經度/緯度點之間data爲簡單起見。

set.seed(123) 
data <- data.frame(lon=runif(200, -77, -74), lat=runif(200, 38.9, 40.7)) 
data[sample(1:200, 10),] <- NA 

可以通過刪除缺失數據的10行來選擇具有經度/緯度數據的行。

data2 <- data[-which(is.na(data[, 1])), c("lon", "lat")] 
nrow(data) - nrow(data2) 
# 10 

最後一行代替了代碼的最後兩行。但是,請注意,只有在遺漏的地理座標存儲爲NA時,此功能纔有效。

1

不一定是答案,但更多的觀察時間太長評論:

首先,你應該看看地理編碼的輸入數據的文件。使用twitteR

setup_twitter_oauth(consumer_key, consumer_secret, access_token, access_secret) 

#set radius and amount of requests 
N=200 # tweets to request from each query 
S=200 # radius in miles 

地理數據應該是這樣的(緯度,經度,半徑)被結構化:

geo <- '40,-75,200km' 

,然後使用名爲:

roger <- searchTwitter('Roger+Federer',lang="en",n=N,resultType="recent",geocode=geo) 

然後,我就改用twListtoDF過濾:

roger <- twListToDF(roger) 

現在給你一個16個色譜柱和200個觀察數據(上面設置)。

然後,您可以使用過濾:

setDT(roger) #from data.table 
roger[latitude > 38.9 & latitude < 40.7 & longitude > -77 & longitude < -74] 

這就是說(爲什麼這是一個觀察與答案) - 它看起來好像twitteR不返回緯度和經度(這是所有NA在我返回的數據) - 我認爲這是爲了保護個人用戶的位置。

也就是說,調整半徑確實會影響結果的數量,所以代碼可以以某種方式訪問​​地理數據。