2012-07-26 5 views
11

Recientemente, Edwin Chen publicó un excelente mapa del uso regional de soda vs pop versus coque creado a partir de tweets geocodificados que utilizan esas palabras en el contexto de la bebida. http://blog.echen.me/2012/07/06/soda-vs-pop-with-twitter/Cómo extraer tweet geocode en el paquete twitteR en R

Menciona que él utilizó el paquete de Twitter creado por Jeff Gentry en R. Efectivamente, es fácil reunir los tweets que utilizan una palabra dada y ponerlos en una trama de datos:

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

la trama de datos (tweets.df) contendrá la identificación del usuario, el texto de tweet, etc. para cada tweet, pero no parece contener el geocodificador. ¿Alguna idea sobre cómo conseguirlo en R?

+0

es necesario proporcionar un '' geocode' para searchTwitter' de usar. Consulte la documentación de la biblioteca '? SearchTwitter'. –

+1

Veo que puede proporcionar un código geográfico y un radio en 'searchTwitter' pero eso no produce un geocodificador para cada tweet extraído. – iantist

+0

pero tendría el código geográfico que suministró, ¿verdad? con un radio más pequeño podría darle lo que necesita? –

Respuesta

2

Aquí está un ejemplo de juguete, dado que se puede extraer sólo 100 tweets por llamada:

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

Esta solución podría no ser demasiado elegante, pero yo era capaz de obtener los tweets prestarse especial de codificación geográfica.

3

He estado jugando con una función R, ingrese el texto de búsqueda, el número de sitios de búsqueda y el radio alrededor de cada sitio. Por ejemplo twitterMap("#rstats",10,"10mi") aquí está el código:

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

Hay algunos grandes problemas que he encontrado que no estoy seguro de cómo hacer frente a. En primer lugar, tal como está escrito, el código busca 15 ubicaciones diferentes generadas aleatoriamente, estas ubicaciones se generan a partir de una distribución uniforme desde la longitud máxima este en los EE. UU. Hasta el máximo oeste, y la latitud más al norte hasta el extremo sur. Esto incluirá ubicaciones que no están en los Estados Unidos, por ejemplo, al este del lago de los bosques de Minnesota en Canadá. Me gustaría tener una función que verifique al azar si la ubicación generada está en EE. UU. Y descartarla si no lo está. Más importante aún, me gustaría buscar miles de ubicaciones, pero a Twitter no le gusta eso y me da un 420 error enhance your calm. Entonces, quizás sea mejor buscar cada pocas horas y construir lentamente una base de datos y eliminar los tweets duplicados. Finalmente, si uno elige un tema remotamente popular, R da un error como Error in function (type, msg, asError = TRUE) : transfer closed with 43756 bytes remaining to read. Estoy un poco desconcertado sobre cómo solucionar este problema.

+0

por favor trabaje en él ... .y publica cuando esté resuelto ... incluso lo necesito – juggernaut1996

+0

¿Puede decirme cómo extraer la longitud y la latitud de los tweets que se basan en 'searchTwitter', entonces puede usar [this] (http: //www.mapbox.com) – juggernaut1996

+0

Recibo un mensaje de error: En doRppAPICall ("search/tweets", n, params = params, retryOnRateLimit = retryOnRateLimit,: se solicitaron 15 tweets pero la API solo puede devolver 0 – Selrac

4

¿El geocodificador significa coordenada de longitud y latitud? En caso afirmativo, los siguientes comandos funcionan para mí.

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

Fuente: LINK

+0

Eso es genial parece que funciona ... Gracias. – beroe

Cuestiones relacionadas