пʼятницю, 2 березня 2012 р.

Географія послідовників в Twitter.


Сьогодні, з допомогою R, покажемо географічне положення послідовників та тих, за ким слідкую я, в twitter.  
Для цього використаємо пакети twitteR (для отримання даних),  dismo та XML для отримання географічних координат місцезнаходження та maps і geosphere для побудови карти.
Отримуємо список послідовників та тих, за ким я слідую:

tmp <- getUser("fire_fox")
followers <- tmp$getFollowers(n = NULL)
following = tmp$getFriends(n = NULL)
Знаходимо координати місцезнаходження кожного користувача з отриманих списків. Для кожного місця отримуємо широту та довготу(де це можливо). Для отримання широти/довготи використана функція geocode(), яка є обгорткою веб-сервісу геокодінгу Google:

userlocation <- geocode(tmp$location)
userLL <- userlocation[ , c("lon", "lat")]

followersLocation <- sapply(followers,function(x){location(x)})
followersLocation <- as.data.frame(do.call(rbind, followersLocation))
gcodesfollowers <- geocode(followersLocation$V1)
gcodesfollowers <- gcodesfollowers[!is.na(gcodesfollowers$lon), ]
unigcodesfollowers <- unique.data.frame(gcodesfollowers)
unigcodesfollowers <- unigcodesfollowers[, c("lon", "lat")]

followingLocation = sapply(following,function(x){location(x)})
followingLocation <- as.data.frame(do.call(rbind, followingLocation))
gcodesfollowing <- geocode(followingLocation$V1)
gcodesfollowing <- gcodesfollowing[!is.na(gcodesfollowing$lon), ]
unigcodesfollowing <- unique.data.frame(gcodesfollowing)
unigcodesfollowing <- unigcodesfollowing[, c("lon", "lat")]
Зображаємо на карті послідовників та тих, за ким слідую я:

par(mfrow=c(2,1),mar=rep(0,4))

map("world", col="#191919", fill=TRUE, bg="#000000", mar=rep(0,4))
mtext("@fire_fox Followers Map",col="white")

for (i in 1:nFollowers){
  inter <- gcIntermediate(userLL, c(unigcodesfollowers$lon[i], unigcodesfollowers$lat[i]), n=100, addStartEnd=TRUE)
  lines(inter, col = "white", lwd = 0.8)
}     

map("world", col="#191919", fill=TRUE, bg="#000000", mar=rep(0,4))
mtext("@fire_fox Following Map",col="white")

for (i in 1:nFollowing){
  inter <- gcIntermediate(userLL, c(unigcodesfollowing$lon[i], unigcodesfollowing$lat[i]), n=100, addStartEnd=TRUE)
  lines(inter, col = "white", lwd = 0.8)
}

mtext("created by @fire_fox",col="white", side = 1)
Ось і результат, де з'єднувальні лінії - найкоротші відстані між мною та користувачем. :

 Ще один із способів описаний у статті http://simplystatistics.tumblr.com/post/14568185310/an-r-function-to-map-your-twitter-followers.  Але,  при використанні описаної в статті функції,  відкидаються користувачі, у яких в полі "location" дані введені кирилицею.  У випадку мого екаунта це близько половини фолловерів. Тому вибір зроблено на користь пакета dismo, де є можливість використати геокодінг Google.

Немає коментарів:

Дописати коментар