Estimated Singapore Resident Population in Singapore in 2016

Any district that has population larger than 100K will be in red, else it will be in blue. The data is drawn using API from Data Gov.

## Getting data from Data Gov API (Estimated Singapore Resident Population in HDB Flats)
data <- GET(url = 'https://data.gov.sg', path= '/api/action/datastore_search?resource_id=b29c1af8-e11a-4e61-b813-933db9f69633&q=2016')
## Convert the content and parse from JSON to list
data <- fromJSON(rawToChar(data$content))
## Convert into tibble - dataframe,
## Select and filter only necessary columns and rows. 
## And, adding additional column indicating population above or below 100K using colours.
pop_df <- as_tibble(as.data.frame(data[["result"]]["records"]))
pop_df <- pop_df %>%
        select(records.town_or_estate, records.population) %>%
        rename(estate = records.town_or_estate, pop = records.population) %>%
        filter(estate != "Total") %>%
        mutate(pop=as.numeric(pop), col=ifelse(pop>100000, "red", "blue")) %>%
        arrange(estate)
pop_df %>%
  plot_ly(x = ~estate, y = ~pop, type = "bar") %>%
  layout(title = "Estimated SG Population in Singapore (2016)", 
         xaxis = list(title="Singapore Estates", tickangle=315), 
         yaxis = list(title ="Populations"))

And, the Singapore’s estates’ coordinates are extracted manually from Google Map.

## Adding Singapore's estates' coodinates from Google Map
estateLatLong <- data.frame(est = c(pop_df$estate),
  lat = c(1.381148, 1.327526, 1.354691, 1.354103, 1.277110, 1.358699, 
          1.329379, 1.291667, 1.384483, 1.323920, 1.321513, 1.364441, 1.330313,
          1.341228, 1.313998, 1.302475, 1.378757, 1.404279, 1.293249,
          1.452369, 1.393968, 1.362479, 1.346134, 1.336741, 1.441856, 1.415465),
  lng = c(103.844718, 103.923694, 103.839691, 103.755501, 103.819265, 103.775094,
           103.789478, 103.85, 103.750549, 103.759651, 103.888051, 103.889564, 103.736083,
           103.703178, 103.860187, 103.896764, 103.951289, 103.908010, 103.792790, 
           103.819158, 103.886634, 103.867214, 103.952967, 103.855900, 103.789122, 103.838902)
)
## Lastly, combine two tables together
estate <- bind_cols(pop_df, estateLatLong) %>%
        select(estate, pop, col, lat, lng)
kable(estate)


|estate          |    pop|col  |      lat|      lng|
|:---------------|------:|:----|--------:|--------:|
|Ang Mo Kio      | 145700|red  | 1.381148| 103.8447|
|Bedok           | 196400|red  | 1.327526| 103.9237|
|Bishan          |  64400|blue | 1.354691| 103.8397|
|Bukit Batok     | 111500|red  | 1.354103| 103.7555|
|Bukit Merah     | 144800|red  | 1.277110| 103.8193|
|Bukit Panjang   | 121700|red  | 1.358699| 103.7751|
|Bukit Timah     |   8400|blue | 1.329379| 103.7895|
|Central Area    |  30800|blue | 1.291667| 103.8500|
|Choa Chu Kang   | 167900|red  | 1.384483| 103.7505|
|Clementi        |  71900|blue | 1.323920| 103.7597|
|Geylang         |  90200|blue | 1.321513| 103.8881|
|Hougang         | 180500|red  | 1.364441| 103.8896|
|Jurong East     |  79600|blue | 1.330313| 103.7361|
|Jurong West     | 260600|red  | 1.341228| 103.7032|
|Kallang/Whampoa | 106500|red  | 1.313998| 103.8602|
|Marine Parade   |  22300|blue | 1.302475| 103.8968|
|Pasir Ris       | 110200|red  | 1.378757| 103.9513|
|Punggol         | 126300|red  | 1.404279| 103.9080|
|Queenstown      |  82800|blue | 1.293249| 103.7928|
|Sembawang       |  72500|blue | 1.452369| 103.8192|
|Sengkang        | 207900|red  | 1.393968| 103.8866|
|Serangoon       |  70100|blue | 1.362479| 103.8672|
|Tampines        | 234600|red  | 1.346134| 103.9530|
|Toa Payoh       | 107100|red  | 1.336741| 103.8559|
|Woodlands       | 241900|red  | 1.441856| 103.7891|
|Yishun          | 193300|red  | 1.415465| 103.8389|

Data Visualization

## Plotting the map with leaflet.
estate %>%
  leaflet(width = 900, height = 750) %>%
  addTiles() %>%
  addCircles(weight = 1, radius = sqrt(estate$pop)*5, color = estate$col, popup = paste(estate$estate, estate$pop, sep = "<br />")) %>%
  addLegend(labels = c("Above 100K population", "Below 100K population"), colors = c("red", "blue"))
LS0tCnRpdGxlOiAiRXN0aW1hdGVkIFNpbmdhcG9yZSBSZXNpZGVudCBQb3B1bGF0aW9uIGluIFNpbmdhcG9yZSBpbiAyMDE2IgphdXRob3I6ICJBbGV4IEhvIgpkYXRlOiAiOS8yNi8yMDE3IgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBodG1sX2RvY3VtZW50OiAKICAgIGtlZXBfbWQ6IHllcwotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpCmxpYnJhcnkoaHR0cikKbGlicmFyeShqc29ubGl0ZSkKbGlicmFyeShkcGx5cikKbGlicmFyeShsZWFmbGV0KQpsaWJyYXJ5KHBsb3RseSkKbGlicmFyeShrbml0cikKYGBgCgojIyBFc3RpbWF0ZWQgU2luZ2Fwb3JlIFJlc2lkZW50IFBvcHVsYXRpb24gaW4gU2luZ2Fwb3JlIGluIDIwMTYKQW55IGRpc3RyaWN0IHRoYXQgaGFzIHBvcHVsYXRpb24gbGFyZ2VyIHRoYW4gMTAwSyB3aWxsIGJlIGluIHJlZCwgZWxzZSBpdCB3aWxsIGJlIGluIGJsdWUuIFRoZSBkYXRhIGlzIGRyYXduIHVzaW5nIEFQSSBmcm9tIFtEYXRhIEdvdl0oaHR0cHM6Ly9kYXRhLmdvdi5zZy9kYXRhc2V0L2VzdGltYXRlZC1yZXNpZGVudC1wb3B1bGF0aW9uLWxpdmluZy1pbi1oZGItZmxhdHMpLiAKYGBge3IgcHJlcERhdGEsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQojIyBHZXR0aW5nIGRhdGEgZnJvbSBEYXRhIEdvdiBBUEkgKEVzdGltYXRlZCBTaW5nYXBvcmUgUmVzaWRlbnQgUG9wdWxhdGlvbiBpbiBIREIgRmxhdHMpCmRhdGEgPC0gR0VUKHVybCA9ICdodHRwczovL2RhdGEuZ292LnNnJywgcGF0aD0gJy9hcGkvYWN0aW9uL2RhdGFzdG9yZV9zZWFyY2g/cmVzb3VyY2VfaWQ9YjI5YzFhZjgtZTExYS00ZTYxLWI4MTMtOTMzZGI5ZjY5NjMzJnE9MjAxNicpCgojIyBDb252ZXJ0IHRoZSBjb250ZW50IGFuZCBwYXJzZSBmcm9tIEpTT04gdG8gbGlzdApkYXRhIDwtIGZyb21KU09OKHJhd1RvQ2hhcihkYXRhJGNvbnRlbnQpKQoKIyMgQ29udmVydCBpbnRvIHRpYmJsZSAtIGRhdGFmcmFtZSwKIyMgU2VsZWN0IGFuZCBmaWx0ZXIgb25seSBuZWNlc3NhcnkgY29sdW1ucyBhbmQgcm93cy4gCiMjIEFuZCwgYWRkaW5nIGFkZGl0aW9uYWwgY29sdW1uIGluZGljYXRpbmcgcG9wdWxhdGlvbiBhYm92ZSBvciBiZWxvdyAxMDBLIHVzaW5nIGNvbG91cnMuCnBvcF9kZiA8LSBhc190aWJibGUoYXMuZGF0YS5mcmFtZShkYXRhW1sicmVzdWx0Il1dWyJyZWNvcmRzIl0pKQpwb3BfZGYgPC0gcG9wX2RmICU+JQogICAgICAgIHNlbGVjdChyZWNvcmRzLnRvd25fb3JfZXN0YXRlLCByZWNvcmRzLnBvcHVsYXRpb24pICU+JQogICAgICAgIHJlbmFtZShlc3RhdGUgPSByZWNvcmRzLnRvd25fb3JfZXN0YXRlLCBwb3AgPSByZWNvcmRzLnBvcHVsYXRpb24pICU+JQogICAgICAgIGZpbHRlcihlc3RhdGUgIT0gIlRvdGFsIikgJT4lCiAgICAgICAgbXV0YXRlKHBvcD1hcy5udW1lcmljKHBvcCksIGNvbD1pZmVsc2UocG9wPjEwMDAwMCwgInJlZCIsICJibHVlIikpICU+JQogICAgICAgIGFycmFuZ2UoZXN0YXRlKQoKcG9wX2RmICU+JQogIHBsb3RfbHkoeCA9IH5lc3RhdGUsIHkgPSB+cG9wLCB0eXBlID0gImJhciIpICU+JQogIGxheW91dCh0aXRsZSA9ICJFc3RpbWF0ZWQgU0cgUG9wdWxhdGlvbiBpbiBTaW5nYXBvcmUgKDIwMTYpIiwgCiAgICAgICAgIHhheGlzID0gbGlzdCh0aXRsZT0iU2luZ2Fwb3JlIEVzdGF0ZXMiLCB0aWNrYW5nbGU9MzE1KSwgCiAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9IlBvcHVsYXRpb25zIikpCgpgYGAKCkFuZCwgdGhlIFNpbmdhcG9yZSdzIGVzdGF0ZXMnIGNvb3JkaW5hdGVzIGFyZSBleHRyYWN0ZWQgbWFudWFsbHkgZnJvbSBHb29nbGUgTWFwLgpgYGB7cn0KIyMgQWRkaW5nIFNpbmdhcG9yZSdzIGVzdGF0ZXMnIGNvb2RpbmF0ZXMgZnJvbSBHb29nbGUgTWFwCmVzdGF0ZUxhdExvbmcgPC0gZGF0YS5mcmFtZShlc3QgPSBjKHBvcF9kZiRlc3RhdGUpLAogIGxhdCA9IGMoMS4zODExNDgsIDEuMzI3NTI2LCAxLjM1NDY5MSwgMS4zNTQxMDMsIDEuMjc3MTEwLCAxLjM1ODY5OSwgCiAgICAgICAgICAxLjMyOTM3OSwgMS4yOTE2NjcsIDEuMzg0NDgzLCAxLjMyMzkyMCwgMS4zMjE1MTMsIDEuMzY0NDQxLCAxLjMzMDMxMywKICAgICAgICAgIDEuMzQxMjI4LCAxLjMxMzk5OCwgMS4zMDI0NzUsIDEuMzc4NzU3LCAxLjQwNDI3OSwgMS4yOTMyNDksCiAgICAgICAgICAxLjQ1MjM2OSwgMS4zOTM5NjgsIDEuMzYyNDc5LCAxLjM0NjEzNCwgMS4zMzY3NDEsIDEuNDQxODU2LCAxLjQxNTQ2NSksCiAgbG5nID0gYygxMDMuODQ0NzE4LCAxMDMuOTIzNjk0LCAxMDMuODM5NjkxLCAxMDMuNzU1NTAxLCAxMDMuODE5MjY1LCAxMDMuNzc1MDk0LAogICAgICAgICAgIDEwMy43ODk0NzgsIDEwMy44NSwgMTAzLjc1MDU0OSwgMTAzLjc1OTY1MSwgMTAzLjg4ODA1MSwgMTAzLjg4OTU2NCwgMTAzLjczNjA4MywKICAgICAgICAgICAxMDMuNzAzMTc4LCAxMDMuODYwMTg3LCAxMDMuODk2NzY0LCAxMDMuOTUxMjg5LCAxMDMuOTA4MDEwLCAxMDMuNzkyNzkwLCAKICAgICAgICAgICAxMDMuODE5MTU4LCAxMDMuODg2NjM0LCAxMDMuODY3MjE0LCAxMDMuOTUyOTY3LCAxMDMuODU1OTAwLCAxMDMuNzg5MTIyLCAxMDMuODM4OTAyKQopCgojIyBMYXN0bHksIGNvbWJpbmUgdHdvIHRhYmxlcyB0b2dldGhlcgplc3RhdGUgPC0gYmluZF9jb2xzKHBvcF9kZiwgZXN0YXRlTGF0TG9uZykgJT4lCiAgICAgICAgc2VsZWN0KGVzdGF0ZSwgcG9wLCBjb2wsIGxhdCwgbG5nKQprYWJsZShlc3RhdGUpCmBgYAoKIyMgRGF0YSBWaXN1YWxpemF0aW9uCmBgYHtyIGRhdGF2aXosIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQojIyBQbG90dGluZyB0aGUgbWFwIHdpdGggbGVhZmxldC4KZXN0YXRlICU+JQogIGxlYWZsZXQod2lkdGggPSA5MDAsIGhlaWdodCA9IDc1MCkgJT4lCiAgYWRkVGlsZXMoKSAlPiUKICBhZGRDaXJjbGVzKHdlaWdodCA9IDEsIHJhZGl1cyA9IHNxcnQoZXN0YXRlJHBvcCkqNSwgY29sb3IgPSBlc3RhdGUkY29sLCBwb3B1cCA9IHBhc3RlKGVzdGF0ZSRlc3RhdGUsIGVzdGF0ZSRwb3AsIHNlcCA9ICI8YnIgLz4iKSkgJT4lCiAgYWRkTGVnZW5kKGxhYmVscyA9IGMoIkFib3ZlIDEwMEsgcG9wdWxhdGlvbiIsICJCZWxvdyAxMDBLIHBvcHVsYXRpb24iKSwgY29sb3JzID0gYygicmVkIiwgImJsdWUiKSkKCmBgYA==