In this document we will explore the relationship between prices of properties and planning regions. Followed by exploration of the other two drivers of property prices: - (1) property types – apartment, condominiums, landed properties, and (2) tenure type – 99-year leasehold vs. freehold properties. Lastly, purchaser profiles will be examined to understand the market profile for properties of different tenure types.

Lets load the packages we need

packages = c('treemap', 'tidyverse','treemap','sf','tmap','readxl','knitr','ggplot2','scales')

for(p in packages){library
  if(!require(p, character.only = T)){
    install.packages(p)
  }
  library(p, character.only = T)
}

And extract the data we need

realis2018 <- read.csv("realis2018.csv")
head(realis2018)
##            Project.Name                          Address No..of.Units
## 1      SIMS URBAN OASIS            10 Sims Drive  #18-39            1
## 2        STARS OF KOVAN 984 Upper Serangoon Road  #16-19            1
## 3           LAKE GRANDE       8 Jurong Lake Link  #17-21            1
## 4           LAKE GRANDE       8 Jurong Lake Link  #01-21            1
## 5       SYMPHONY SUITES           3 Yishun Close  #04-07            1
## 6 ISLAND COUNTRY VILLAS        90 Old Upper Thomson Road            1
##   Area..sqm. Type.of.Area Transacted.Price.... Unit.Price....psm.
## 1        105       Strata              1522200              14497
## 2         89       Strata              1527000              17157
## 3         80       Strata              1201000              15013
## 4         76       Strata              1130000              14868
## 5         83       Strata               942000              11349
## 6        224         Land              2080000               9286
##   Unit.Price....psf. Sale.Date       Property.Type                 Tenure
## 1               1347  1-Jan-18         Condominium 99 Yrs From 29/07/2014
## 2               1594  1-Jan-18           Apartment 99 Yrs From 25/02/2015
## 3               1395  1-Jan-18         Condominium 99 Yrs From 09/06/2015
## 4               1381  1-Jan-18         Condominium 99 Yrs From 09/06/2015
## 5               1054  1-Jan-18         Condominium 99 Yrs From 10/06/2014
## 6                863  2-Jan-18 Semi-Detached House 99 Yrs From 28/08/1995
##   Type.of.Sale Purchaser.Address.Indicator Postal.District Postal.Sector
## 1     New Sale                         HDB              14            38
## 2     New Sale                     Private              19            53
## 3     New Sale                         HDB              22            64
## 4     New Sale                         N.A              22            64
## 5     New Sale                         N.A              27            76
## 6       Resale                     Private              20            57
##   Postal.Code   Planning.Region Planning.Area
## 1      387390    Central Region       Geylang
## 2      533854 North East Region       Hougang
## 3      648130       West Region   Jurong West
## 4      648130       West Region   Jurong West
## 5      768005      North Region        Yishun
## 6      574060 North East Region    Ang Mo Kio

Next, we rename the columns to something we can understand better

colnames <- c("Project.Name","Address","No.of.Units","Area.(sqm)","Type.Of.Area","Transacted.Price","Unit.Price.(psm)","Unit.Pricepsf","Sale.Date","Property.Type","Tenure","Type.Of.Sale","Purchaser.Address.Indicator","Postal.District","Postal.Sector","Postal.Code","Planning.Region","Planning.Area")

colnames(realis2018) <- colnames

head(realis2018)
##            Project.Name                          Address No.of.Units Area.(sqm)
## 1      SIMS URBAN OASIS            10 Sims Drive  #18-39           1        105
## 2        STARS OF KOVAN 984 Upper Serangoon Road  #16-19           1         89
## 3           LAKE GRANDE       8 Jurong Lake Link  #17-21           1         80
## 4           LAKE GRANDE       8 Jurong Lake Link  #01-21           1         76
## 5       SYMPHONY SUITES           3 Yishun Close  #04-07           1         83
## 6 ISLAND COUNTRY VILLAS        90 Old Upper Thomson Road           1        224
##   Type.Of.Area Transacted.Price Unit.Price.(psm) Unit.Pricepsf Sale.Date
## 1       Strata          1522200            14497          1347  1-Jan-18
## 2       Strata          1527000            17157          1594  1-Jan-18
## 3       Strata          1201000            15013          1395  1-Jan-18
## 4       Strata          1130000            14868          1381  1-Jan-18
## 5       Strata           942000            11349          1054  1-Jan-18
## 6         Land          2080000             9286           863  2-Jan-18
##         Property.Type                 Tenure Type.Of.Sale
## 1         Condominium 99 Yrs From 29/07/2014     New Sale
## 2           Apartment 99 Yrs From 25/02/2015     New Sale
## 3         Condominium 99 Yrs From 09/06/2015     New Sale
## 4         Condominium 99 Yrs From 09/06/2015     New Sale
## 5         Condominium 99 Yrs From 10/06/2014     New Sale
## 6 Semi-Detached House 99 Yrs From 28/08/1995       Resale
##   Purchaser.Address.Indicator Postal.District Postal.Sector Postal.Code
## 1                         HDB              14            38      387390
## 2                     Private              19            53      533854
## 3                         HDB              22            64      648130
## 4                         N.A              22            64      648130
## 5                         N.A              27            76      768005
## 6                     Private              20            57      574060
##     Planning.Region Planning.Area
## 1    Central Region       Geylang
## 2 North East Region       Hougang
## 3       West Region   Jurong West
## 4       West Region   Jurong West
## 5      North Region        Yishun
## 6 North East Region    Ang Mo Kio

In this section, we want to visualise property prices by Planning Region and Areas in Singapore, by Median Price per square foot. We will utilise a Treemap to aid our analysis.

Chart 1

treemapdata <- realis2018 %>%
  group_by(`Planning.Area`,Planning.Region) %>%
  summarize('Total.Transacted.Price' = sum(`Transacted.Price`, na.rm= TRUE),
            `Total.Unit.Sold` = sum(`No.of.Units`, na.rm = TRUE),
            `Median.PSF` = median(`Unit.Pricepsf`, na.rm = TRUE)
  )
## `summarise()` has grouped output by 'Planning.Area'. You can override using the `.groups` argument.
treemapdata
## # A tibble: 40 x 5
## # Groups:   Planning.Area [40]
##    Planning.Area Planning.Region  Total.Transacted.P~ Total.Unit.Sold Median.PSF
##    <chr>         <chr>                          <dbl>           <int>      <dbl>
##  1 Ang Mo Kio    North East Regi~           576521924             321      1011 
##  2 Bedok         East Region               3276941865            1859      1215 
##  3 Bishan        Central Region            1248466415             708      1619 
##  4 Bukit Batok   West Region                807164425             625      1062 
##  5 Bukit Merah   Central Region            1844146405             807      1774.
##  6 Bukit Panjang West Region                410592032             286      1077 
##  7 Bukit Timah   Central Region            5510806321            1593      1556 
##  8 Changi        East Region                 12709666               5       976 
##  9 Choa Chu Kang West Region                270549419             282       755 
## 10 Clementi      West Region               2469723595            1625      1338 
## # ... with 30 more rows
treemap(treemapdata,
        index = c("Planning.Region","Planning.Area"),
        vSize = "Total.Unit.Sold",
        vColor = "Median.PSF",
        type = "value",
        title = "No. of units transacted by Planning Region and Area",
        title.legend = "Median price per square foot") + scale_fill_brewer(palette = "Dark2") +                   scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0)) 

## NULL

Next, we plot a boxplot that describes the Unit Price ($psf) of the properties transacted vs tenure type, planning region, and property type. This chart will allow further understanding of the market for types of properties across the planning regions in Singapore, enabling comparisons between even the tenure types of the properties – which is one of the factors that could significantly affect property prices.

We first have to remove ENBLOCs as ENBLOC sales will inflate the number of units sold for that particular lease type.

Singapore has various lease types + 999 year leasehold + 99 year leasehold + freehold

We need to re-label lease types into just leasehold, or freehold

removeEnbloc <- filter (realis2018, str_detect(Address, "ENBLOC", negate = TRUE))
Tenure_Type <- ifelse(removeEnbloc$Tenure == "Freehold", "Freehold",
                      ifelse(substr(removeEnbloc$Tenure, 0, 3) == '999', 'Freehold', 'Leasehold'))

Now we plot the boxplot

Chart 2

Tenure_Box<-ggplot(removeEnbloc, aes(x=Planning.Region, y= Unit.Pricepsf, 
                                        weights(No.of.Units))) + 
                        geom_boxplot(aes(color = Tenure_Type)) +   
                        facet_wrap(~Property.Type) +   
                        xlab("Tenure") +           
                        ylab("Unit Price Per Square Foot")
                      
                      Tenure_Box + theme(legend.position="bottom", 
                                          legend.title=element_text(face = "bold"), 
                                          axis.text=element_text(angle=90, size=9))

Next we plot a boxplot that describes the transactions for freehold vs leasehold properties, across planning regions in Singapore, broken down into Purchaser Address: - (1) N/A, (2) HDB, and (3) ‘Private’ – buyers who already have an existing private property. The intent of this analysis is to observe any difference in purchasing patterns between buyers who have an existing private property vs those who do not have one.

Chart 3

realis_Data2 <- realis2018[-grep("ENBLOC",realis2018$Address),]
TenureType <- ifelse(realis_Data2$Tenure == "Freehold", "Freehold",
                                           ifelse(substr(realis2018$Tenure,0,3) == "999","Freehold","Leasehold"))

realis_Data2 <- cbind(realis_Data2, TenureType)
head(realis_Data2)                      
##            Project.Name                          Address No.of.Units Area.(sqm)
## 1      SIMS URBAN OASIS            10 Sims Drive  #18-39           1        105
## 2        STARS OF KOVAN 984 Upper Serangoon Road  #16-19           1         89
## 3           LAKE GRANDE       8 Jurong Lake Link  #17-21           1         80
## 4           LAKE GRANDE       8 Jurong Lake Link  #01-21           1         76
## 5       SYMPHONY SUITES           3 Yishun Close  #04-07           1         83
## 6 ISLAND COUNTRY VILLAS        90 Old Upper Thomson Road           1        224
##   Type.Of.Area Transacted.Price Unit.Price.(psm) Unit.Pricepsf Sale.Date
## 1       Strata          1522200            14497          1347  1-Jan-18
## 2       Strata          1527000            17157          1594  1-Jan-18
## 3       Strata          1201000            15013          1395  1-Jan-18
## 4       Strata          1130000            14868          1381  1-Jan-18
## 5       Strata           942000            11349          1054  1-Jan-18
## 6         Land          2080000             9286           863  2-Jan-18
##         Property.Type                 Tenure Type.Of.Sale
## 1         Condominium 99 Yrs From 29/07/2014     New Sale
## 2           Apartment 99 Yrs From 25/02/2015     New Sale
## 3         Condominium 99 Yrs From 09/06/2015     New Sale
## 4         Condominium 99 Yrs From 09/06/2015     New Sale
## 5         Condominium 99 Yrs From 10/06/2014     New Sale
## 6 Semi-Detached House 99 Yrs From 28/08/1995       Resale
##   Purchaser.Address.Indicator Postal.District Postal.Sector Postal.Code
## 1                         HDB              14            38      387390
## 2                     Private              19            53      533854
## 3                         HDB              22            64      648130
## 4                         N.A              22            64      648130
## 5                         N.A              27            76      768005
## 6                     Private              20            57      574060
##     Planning.Region Planning.Area TenureType
## 1    Central Region       Geylang  Leasehold
## 2 North East Region       Hougang  Leasehold
## 3       West Region   Jurong West  Leasehold
## 4       West Region   Jurong West  Leasehold
## 5      North Region        Yishun  Leasehold
## 6 North East Region    Ang Mo Kio  Leasehold
realis_Data2 %>%
  ggplot(aes(Planning.Region, No.of.Units, fill= TenureType)) +
  geom_col(position = 'stack') +
  xlab("Planning Region") +
  ylab("Total Number of Transactions") +
  facet_grid(~Purchaser.Address.Indicator) +
  labs(title = 'No. of Transactions by Planning Region and Purchaser Address')+
  theme(legend.position = "bottom", 
        legend.title = element_text(face = "bold"), 
        axis.text.x = element_text(size = 8))

Conclusion

Freehold properties in Central region were the most exclusive.

Based on the observations made with Chart 2, the median $psf of both leasehold and freehold in Central region (with exception of apartments) were higher than the other regions. This implies that demand for freehold properties far exceeded its supply in the Central region.

Additionally, freehold properties were observed to have a higher median $psf than leasehold properties, across all regions and property types.

Due to the large price difference between freehold and leasehold prices as shown in Chart 2, more people have purchased leasehold properties.

In Chart 3, the observation is that more leasehold properties were purchased in the Central region vis-à-vis freehold units in the East, North-East, North, West regions combined. This is consistent across all purchaser profiles –New, HDB, and Private Homeowners. This suggests that, more leasehold properties were purchased due to its relative affordability.

However, regardless of tenure type, median $psf or property types, it is observed that Central region was still more popular, this indicates that property location takes precedence over its tenure type.

People who purchased their 2nd property preferred leasehold properties, outside the Central region.

It is recognised that the geographical distribution of leasehold purchases differs amongst purchaser profiles. Leasehold properties in the North-East region were most popular amongst HDB Homeowners, whereas leasehold properties in the Central region were most popular amongst Private and New Homeowners.

This observation is consistent with the analysis from Chart 1, where the preference for housing in mature estates was observed. It can be said that families who purchased leasehold properties in mature estates want to closer to family for childcare support, better transport amenities as well as accessibility to schools. Another factor could also be due to the large variance between freehold vs leasehold, and the relative affordability of leasehold properties in the North-East and East regions.