Ще генерираме някои IP адреси, ще геолокираме темата и ще ги начертаем:
library(iptools)
library(rgeolocate)
library(tidyverse)
Генерирайте милион (твърде равномерно разпределени) произволни IPv4 адреси:
ips <- ip_random(1000000)
И геолокирайте ги:
system.time(
rgeolocate::maxmind(
ips, "~/Data/GeoLite2-City.mmdb", c("longitude", "latitude")
) -> xdf
)
## user system elapsed
## 5.016 0.131 5.217
5s за 1м IPv4s. 👍🏼
Сега поради еднородността мехурчетата ще бъдат глупаво малки, така че само за този пример ще ги закръглим малко нагоре:
xdf %>%
mutate(
longitude = (longitude %/% 5) * 5,
latitude = (latitude %/% 5) * 5
) %>%
count(longitude, latitude) -> pts
И начертайте ги:
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")
Можете да видите какво имам предвид с "твърде еднакво". Но имате "истински" IPv4, така че трябва да сте gtg.
Помислете за използването на scale_size_area()
, но, честно казано, помислете изобщо да не начертавате IPv4s на географска карта. Правя проучвания в интернет, за да си изкарвам прехраната и твърденията за точност оставят много да се желае. Поради тази причина рядко отивам под приписването на ниво държава (и плащаме за „истински“ данни).