Visualizing Earth's Population via a Kernel Approach
Visualizing Earth's Population via a Kernel Approach
Visualization is a common way to convey complex information. Here, I use a kernel-based algorithm to draw population density along latitudinal and longitudinal axes.
Join the DZone community and get the full member experience.
Join For FreeThe Architect’s Guide to Big Data Application Performance. Get the Guide.
There was an interesting map on reddit this morning: a visualisation of latitude and longituge of where people live, on Earth.
So I tried to reproduce it. To compute the density, I used a kernel-based approach:
> library(maps)
> data("world.cities")
> X=world.cities[,c("lat","pop")]
> liss=function(x,h){
+ w=dnorm(x-X[,"lat"],0,h)
+ sum(X[,"pop"]*w)
+ }
> vx=seq(-80,80)
> vy=Vectorize(function(x) liss(x,1))(vx)
> vy=vy/max(vy)
> plot(world.cities$lon,world.cities$lat,)
> for(i in 1:length(vx))
+ abline(h=vx[i],col=rgb(1,0,0,vy[i]),lwd=2.7)
For the other axis, we use a miror technique, to ensure that -180 is close the +180
> Y=world.cities[,c("long","pop")]
> Ya=Y; Ya[,1]=Y[,1]-360
> Yb=Y; Yb[,1]=Y[,1]+360
> Y=rbind(Y,Ya,Yb)
> liss=function(y,h){
+ w=dnorm(y-Y[,"long"],0,h)
+ sum(Y[,"pop"]*w)
+ }
> vx=seq(-180,180)
> vy=Vectorize(function(x) liss(x,1))(vx)
> vy=vy/max(vy)
> plot(world.cities$lon,world.cities$lat,pch=19)
> for(i in 1:length(vx))
+ abline(v=vx[i],col=rgb(1,0,0,vy[i]),lwd=2.7)
Now we can add the two, on the same graph:
Learn how taking a DataOps approach will help you speed up processes and increase data quality by providing streamlined analytics pipelines via automation and testing. Learn More.
Published at DZone with permission of Arthur Charpentier , DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
{{ parent.title || parent.header.title}}
{{ parent.tldr }}
{{ parent.linkDescription }}
{{ parent.urlSource.name }}