Vi kommer att generera några IP-adresser, geolokalisera tem och plotta dem:
library(iptools)
library(rgeolocate)
library(tidyverse)
Generera en miljon (alldeles för enhetligt fördelade) slumpmässiga IPv4-adresser:
ips <- ip_random(1000000)
Och geolokalisera dem:
system.time(
rgeolocate::maxmind(
ips, "~/Data/GeoLite2-City.mmdb", c("longitude", "latitude")
) -> xdf
)
## user system elapsed
## 5.016 0.131 5.217
5s för 1m IPv4s. 👍🏼
Nu på grund av enhetligheten kommer bubblorna att vara dumma små, så bara för det här exemplet kommer vi att avrunda dem lite:
xdf %>%
mutate(
longitude = (longitude %/% 5) * 5,
latitude = (latitude %/% 5) * 5
) %>%
count(longitude, latitude) -> pts
Och rita dem:
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")
Du kan se vad jag menar med "för enhetlig". Men du har "riktiga" IPv4:er, så du borde vara gtg.
Överväg att använda scale_size_area()
, men ärligt talat, överväg att inte plotta IPv4s på en geokarta alls. Jag gör internet-skala forskning för en levande och noggrannhet påståenden lämnar mycket övrigt att önska. Jag går sällan under tillskrivning på landsnivå av den anledningen (och vi betalar för "riktiga" data).