いくつかの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
1mIPv4の場合は5秒。 👍🏼
均一性があるため、泡はばかげて小さくなります。この例では、泡を少し切り上げます。
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()
の使用を検討してください 、しかし、正直なところ、ジオマップにIPv4をプロットしないことを検討してください。私は生計を立てるためにインターネット規模の調査を行っていますが、正確さの主張にはまだ多くの要望があります。そのため、国レベルの帰属を下回ることはめったにありません(そして、「実際の」データに対して支払いを行います)。