Experimentation with geospatial mapping
Recently I experimented with geospatial mapping techniques in R. I looked at both static and interactive maps. Embedding the media into a WordPress blog would be simple enough with a static map. The latter would require (for me) a new technique to retain the interactivity inside a blog post.
My web-site visitor log, combined with longitude and latitude data from MaxMind’s GeoLite2, offered a basis for analysis. Although less precise than the GeoIP2 database, this would be more than adequate for my purpose of getting to country and city level. I settled on the Leaflet package for visualisation given the interactivity and pleasing choice of aesthetics.
The results however were a little puzzling.
Whiling away the hours in Kansas
The concentration of page views in central London was of no immediate surprise as this was likely to be my site building, testing, and blogging. What did strike me as odd was the high concentration of page views in the centre of the US. More curious still, when I zoomed in on Kansas and found myself in the middle of the Cheney Reservoir.
I imagined someone drifting in the expanse of water with laptop, flask of coffee and box of sandwiches, whiling away the hours absorbed in my blog. Perhaps not. How could such a small number of blog pages generate in excess of 2,000 page views in less than two months?
Then I chanced upon a BBC news article from August 2016. When unable to locate IPs, MaxMind chose the geographical centre of the US as a default. This initially turned out to be a rented house in Kansas, which was rather unfortunate for the occupants, and brought upon them all kinds of unwanted attention.
MaxMind subsequently changed its default centre points to be the middle of bodies of water. And this solved another puzzle. Some of the page views in London appeared to be in the middle of the River Thames.
|purrr||map; map2_df; negate; possibly; set_names|
|dplyr||if_else; mutate; filter; arrange; case_when; tibble; as_tibble; desc; group_by; rename; select; summarise|
|stringr||str_c; str_detect; fixed; str_count; str_remove; str_remove_all|
|base||library; c; function; is.na; as.character; basename; conflicts; cumsum; getwd; list; search; sum|
|rebus||literal; lookahead; whole_word; ALPHA; lookbehind; one_or_more; or|
|leaflet||leaflet; addCircleMarkers; addLegend; addPolygons; addProviderTiles; colorFactor; highlightOptions; labelOptions; providerTileOptions; setView|
The code may be viewed here.