sql >> Database >  >> RDS >> Mysql

Geolokalisatie van een groot aantal berichten op basis van IP-adressen. (880.000 rijen)

We zullen enkele IP-adressen genereren, geolokaliseren en ze plotten:

library(iptools)
library(rgeolocate)
library(tidyverse)

Genereer een miljoen (veel te uniform verdeelde) willekeurige IPv4-adressen:

ips <- ip_random(1000000)

En geolokaliseer ze:

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

5s voor 1m IPv4s.

Vanwege de uniformiteit zullen de bubbels stom klein zijn, dus alleen voor dit voorbeeld ronden we ze een beetje af:

xdf %>% 
  mutate(
    longitude = (longitude %/% 5) * 5,
    latitude = (latitude %/% 5) * 5
  ) %>%  
  count(longitude, latitude) -> pts

En plot ze:

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

Je kunt zien wat ik bedoel met "te uniform". Maar je hebt "echte" IPv4's, dus je zou gtg moeten zijn.

Overweeg het gebruik van scale_size_area() , maar eerlijk gezegd, overweeg om IPv4's helemaal niet op een geokaart te plotten. Ik doe onderzoek op internetschaal voor de kost en de nauwkeurigheidsclaims laten veel te wensen over. Om die reden ga ik zelden onder de attributie op landniveau (en we betalen voor 'echte' gegevens).




  1. Dagelijkse toegang beperken

  2. Alibaba Cloud

  3. Waarom is een UDF zo veel langzamer dan een subquery?

  4. Hoe print ik alle queries in Magento?