Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Geolocalização de um grande número de postagens com base em endereços IP. (880.000 linhas)


Vamos gerar alguns endereços IP, geolocalizá-los e plotá-los:
library(iptools)
library(rgeolocate)
library(tidyverse)

Gere um milhão de endereços IPv4 aleatórios (distribuídos de maneira muito uniforme):
ips <- ip_random(1000000)

E, geolocalize-os:
system.time(
  rgeolocate::maxmind(
    ips, "~/Data/GeoLite2-City.mmdb", c("longitude", "latitude")
  ) -> xdf
)
##    user  system elapsed 
##   5.016   0.131   5.217 

5s para 1m IPv4s. 👍🏼

Agora, devido à uniformidade, as bolhas serão estupidamente pequenas, então apenas para este exemplo vamos arredondar um pouco:
xdf %>% 
  mutate(
    longitude = (longitude %/% 5) * 5,
    latitude = (latitude %/% 5) * 5
  ) %>%  
  count(longitude, latitude) -> pts

E trace-os:
ggplot(pts) +
  geom_point(
    aes(longitude, latitude, size = n), 
    shape=21, fill = "steelblue", color = "white", stroke=0.25
  ) +
  ggalt::coord_proj("+proj=wintri") +
  ggthemes::theme_map() +
  theme(legend.justification = "center") +
  theme(legend.position = "bottom")



Você pode ver o que quero dizer com "muito uniforme". Mas, você tem IPv4s "reais", então você deve ser gtg.

Considere usar scale_size_area() , mas, honestamente, considere não plotar IPv4s em um mapa geográfico. Eu faço pesquisa em escala de internet para ganhar a vida e as alegações de precisão deixam muito a desejar. Raramente fico abaixo da atribuição em nível de país por esse motivo (e pagamos por dados "reais").