2012-07-26 31 views
11

Gần đây, Edwin Chen đã đăng một bản đồ tuyệt vời về việc sử dụng soda vs pop vs coke được tạo từ các tweet được mã hóa địa lý để giải thích những từ đó trong ngữ cảnh uống rượu. http://blog.echen.me/2012/07/06/soda-vs-pop-with-twitter/Làm thế nào để trích xuất mã địa lý tweet trong gói twitteR trong R

Ông nói rằng ông đã sử dụng gói Twitter tạo ra bởi Jeff Gentry trong R. Chắc chắn, nó rất dễ dàng để thu thập các tweet rằng sử dụng một từ nhất định và đặt chúng trong một dataframe:

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

các dataframe (tweets.df) sẽ chứa id người dùng, văn bản tweet, v.v. cho mỗi tweet, nhưng dường như không chứa mã địa lý. Bất kỳ ý tưởng về làm thế nào để có được nó trong R?

+0

Bạn cần cung cấp một 'geocode' cho 'searchTwitter' để sử dụng. Xem tài liệu thư viện '? SearchTwitter'. –

+1

Tôi thấy rằng bạn có thể cung cấp mã địa lý và bán kính vào 'searchTwitter' nhưng điều đó không tạo ra mã địa lý cho mỗi tweet được kéo. – iantist

+0

nhưng bạn sẽ có mã địa lý mà bạn cung cấp, đúng không? với một bán kính nhỏ hơn có thể cung cấp cho bạn những gì bạn cần? –

Trả lời

2

Dưới đây là một ví dụ đồ chơi, cho rằng bạn có thể giải nén chỉ 100 tweets mỗi cuộc gọi:

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

Giải pháp này có thể không được quá tao nhã, nhưng tôi đã có thể để có được tweets được đặc biệt geocode.

3

Tôi đang dò tìm xung quanh với chức năng R, bạn nhập vào văn bản tìm kiếm, số lượng trang web tìm kiếm và bán kính xung quanh mỗi trang web. Ví dụ twitterMap("#rstats",10,"10mi") đây là các mã:

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

example map

Có một số vấn đề lớn, tôi đã gặp mà tôi không chắc chắn làm thế nào để đối phó với. Đầu tiên, khi viết mã tìm kiếm 15 vị trí được tạo ngẫu nhiên khác nhau, các vị trí này được tạo ra từ phân bố đồng đều từ kinh độ tối đa ở phía đông ở Hoa Kỳ đến phía tây tối đa và vĩ độ xa nhất về phía bắc đến phía nam xa nhất. Điều này sẽ bao gồm các địa điểm không ở Hoa Kỳ, nói ngay phía đông hồ của rừng minnesota ở Canada. Tôi muốn một hàm kiểm tra ngẫu nhiên để xem vị trí đã tạo có ở Hoa Kỳ hay không và loại bỏ nó nếu không. Quan trọng hơn, tôi muốn tìm kiếm hàng ngàn địa điểm, nhưng twitter không thích điều đó và cho tôi một số 420 error enhance your calm. Vì vậy, có lẽ tốt nhất là nên tìm kiếm vài giờ một lần và từ từ xây dựng một cơ sở dữ liệu và xóa các tweet trùng lặp. Cuối cùng, nếu chọn một chủ đề phổ biến từ xa, R sẽ đưa ra lỗi như Error in function (type, msg, asError = TRUE) : transfer closed with 43756 bytes remaining to read. Tôi có chút băn khoăn về cách giải quyết vấn đề này.

+0

xin vui lòng làm việc trên nó ... .và đăng khi nó được tìm ra ... ngay cả tôi cần nó – juggernaut1996

+0

bạn có thể cho tôi biết làm thế nào để trích xuất kinh độ và vĩ độ từ các tweet được harversted từ 'searchTwitter' sau đó có thể là bạn có thể sử dụng [this] (http: //www.mapbox.com) – juggernaut1996

+0

Tôi nhận được thông báo lỗi: Trong doRppAPICall ("tìm kiếm/tweets", n, params = params, retryOnRateLimit = retryOnRateLimit,: 15 tweet được yêu cầu nhưng API chỉ có thể trả về 0 – Selrac

4

Geocode có phải là toạ độ kinh độ và vĩ độ không? Nếu có, các lệnh sau hoạt động cho tôi.

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

Nguồn: LINK

+0

Điều đó thật tuyệt vời dường như làm việc ... Cảm ơn. – beroe

Các vấn đề liên quan