हम कुछ 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
1m IPv4s के लिए 5s।
अब एकरूपता के कारण, बुलबुले छोटे छोटे होंगे, इसलिए इस उदाहरण के लिए हम उन्हें थोड़ा सा गोल कर देंगे:
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")
आप देख सकते हैं कि "बहुत वर्दी" के बारे में मेरा क्या मतलब है। लेकिन, आपके पास "असली" IPv4s हैं, इसलिए आपको gtg होना चाहिए।
scale_size_area()
का उपयोग करने पर विचार करें , लेकिन, ईमानदारी से, किसी भू-मानचित्र पर IPv4s की साजिश रचने पर विचार न करें। मैं जीवनयापन के लिए इंटरनेट-पैमाने पर शोध करता हूं और सटीकता के दावे वांछित होने के लिए बहुत कुछ छोड़ देते हैं। मैं शायद ही उस कारण से देश-स्तरीय एट्रिब्यूशन से नीचे जाता हूं (और हम "वास्तविक" डेटा के लिए भुगतान करते हैं)।