Chúng tôi sẽ tạo một số địa chỉ IP, tem định vị địa lý và vẽ biểu đồ cho chúng:
thư việnlibrary(iptools)
library(rgeolocate)
library(tidyverse)
Tạo một triệu địa chỉ IPv4 ngẫu nhiên (theo cách được phân phối quá đồng đều):
ips <- ip_random(1000000)
Và, xác định vị trí địa lý của chúng:
system.time(
rgeolocate::maxmind(
ips, "~/Data/GeoLite2-City.mmdb", c("longitude", "latitude")
) -> xdf
)
## user system elapsed
## 5.016 0.131 5.217
5s cho 1m IPv4s. 👍🏼
Bây giờ do tính đồng nhất, các bong bóng sẽ nhỏ một cách ngu ngốc, vì vậy chỉ với ví dụ này, chúng tôi sẽ làm tròn chúng lên một chút:
xdf %>%
mutate(
longitude = (longitude %/% 5) * 5,
latitude = (latitude %/% 5) * 5
) %>%
count(longitude, latitude) -> pts
Và, lập biểu đồ cho chúng:
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")
Bạn có thể thấy ý tôi là abt "quá đồng đều". Tuy nhiên, bạn có IPv4 "thực", vì vậy bạn phải là gtg.
Cân nhắc sử dụng scale_size_area()
, nhưng thành thật mà nói, hãy cân nhắc không vẽ các IPv4 trên bản đồ địa lý. Tôi thực hiện nghiên cứu trên quy mô internet để kiếm sống và những tuyên bố về độ chính xác để lại nhiều điều đáng mong đợi. Tôi hiếm khi đi dưới phân bổ cấp quốc gia vì lý do đó (và chúng tôi trả tiền cho dữ liệu "thực").