Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Previously, I posted a short post about recent detached single house prices in San Leandro and Hayward areas. I received a little more data (sales data from the past month), so I thought it would be a good time for an update. I’d like to investigate which way the housing market in these areas is moving.
First, I started by looking at prices across the past 6 months.
This is the highest level look, but it neglects many details (house size, # of sales, quality of home, neighborhood, etc.). I wanted to drill down one more level and look at cost per square foot (which should help us look across house sizes).
There is a lot more analysis to do, but I have wedding planning to do. Here is the code…
###### Settings
options(scipen=10)
setwd("C:/Blog/SFHousing")
library(RColorBrewer)
col.9<-brewer.pal(9,"Oranges")
###### Loading data
sl1<-read.csv("SanLeandro.csv")
sl2<-read.csv("SanLeandro2.csv")
hay1<-read.csv("Hayward.csv")
hay2<-read.csv("Hayward2.csv")
sl<-rbind(sl1,sl2)
hay<-rbind(hay1,hay2)
###### Formatting data
sl$Sold.Price<-as.numeric(gsub('[[:punct:]]','',sl$Sold.Price))
sl$List.Price<-as.numeric(gsub('[[:punct:]]','',sl$List.Price))
hay$Sold.Price<-as.numeric(gsub('[[:punct:]]','',hay$Sold.Price))
hay$List.Price<-as.numeric(gsub('[[:punct:]]','',hay$List.Price))
sl$Baths.Partial[is.na(sl$Baths.Partial)]<-0
sl$Baths2<-sl$Baths+sl$Baths.Partial*.5
sl<-sl[order(sl$Bedrooms,sl$Baths2),]
sl$Title<-paste0(sl$Bedrooms,"BD,",sl$Baths2,"BA")
# Remove house types only listed once
sl<-sl[sl$Title %in% names(table(sl$Title))[as.numeric(which(table(sl$Title)>1))],]
sllev<-unique(sl$Title)
sl$Title<-factor(sl$Title,levels=sllev)
hay$Baths.Partial[is.na(hay$Baths.Partial)]<-0
hay$Baths2<-hay$Baths+hay$Baths.Partial*.5
hay<-hay[order(hay$Bedrooms,hay$Baths2),]
hay$Title<-paste0(hay$Bedrooms,"BD,",hay$Baths2,"BA")
# Remove house types only listed once
hay<-hay[hay$Title %in% names(table(hay$Title))[as.numeric(which(table(hay$Title)>1))],]
haylev<-unique(hay$Title)
hay$Title<-factor(hay$Title,levels=haylev)
minmin<-floor(min(sl$Sold.Price)/50000)*50000
maxmax<-ceiling(max(sl$Sold.Price)/50000)*50000
par(mar=c(6,5,5,5))
boxplot(sl$Sold.Price~sl$Title,main="San Leandro - Sold Price",col="skyblue",ylim=c(minmin,maxmax),
yaxt="n")
axis(2,at=seq(minmin,maxmax,by=50000),labels=paste0("$",prettyNum(seq(minmin,maxmax,by=50000),big.mark=",")),las=2)
axis(4,at=seq(minmin,maxmax,by=50000),labels=paste0("$",prettyNum(seq(minmin,maxmax,by=50000),big.mark=",")),las=2)
for (i in seq(minmin,maxmax,by=25000))
{abline(h=i,lty=3,col="lightgray")}
minmin2<-floor(min(hay$Sold.Price)/50000)*50000
maxmax2<-ceiling(max(hay$Sold.Price)/50000)*50000
par(mar=c(6,5,5,5))
boxplot(hay$Sold.Price~hay$Title,main="Hayward - Sold Price",col="lightgreen",ylim=c(minmin,maxmax),
yaxt="n")
axis(2,at=seq(minmin,maxmax2,by=50000),labels=paste0("$",prettyNum(seq(minmin2,maxmax2,by=50000),big.mark=",")),las=2)
axis(4,at=seq(minmin,maxmax2,by=50000),labels=paste0("$",prettyNum(seq(minmin2,maxmax2,by=50000),big.mark=",")),las=2)
for (i in seq(minmin,maxmax2,by=25000))
{abline(h=i,lty=3,col="lightgray")}
###### Sale Price by Month
sl$Closing.Date<-as.Date(sl$Closing.Date,format="%m/%d/%Y")
hay$Closing.Date<-as.Date(hay$Closing.Date,format="%m/%d/%Y")
sl$MONTH<-substr(sl$Closing.Date,0,7)
hay$MONTH<-substr(hay$Closing.Date,0,7)
par(mar=c(6,5,5,5))
boxplot(sl$Sold.Price~sl$MONTH,col=col.9[4],main="San Leandro Sale Prices by Month",yaxt="n")
axis(2,at=seq(300000,450000,by=25000),labels=paste0("$",gsub(" ","",prettyNum(seq(300000,450000,by=25000),big.mark=","))),las=2)
axis(4,at=seq(300000,450000,by=25000),labels=paste0("$",gsub(" ","",prettyNum(seq(300000,450000,by=25000),big.mark=","))),las=2)
for (i in seq(300000,450000,by=25000))
{abline(h=i,lty=3,col="lightgray")}
par(mar=c(6,5,5,5))
boxplot(hay$Sold.Price~hay$MONTH,col=col.9[7],main="Hayward Sale Prices by Month",yaxt="n")
axis(2,at=seq(300000,450000,by=25000),labels=paste0("$",gsub(" ","",prettyNum(seq(300000,450000,by=25000),big.mark=","))),las=2)
axis(4,at=seq(300000,450000,by=25000),labels=paste0("$",gsub(" ","",prettyNum(seq(300000,450000,by=25000),big.mark=","))),las=2)
for (i in seq(300000,450000,by=25000))
{abline(h=i,lty=3,col="lightgray")}
###### Sale/sqft price by month
sl$PriceSQFT<-sl$List.Price/sl$Sq.Ft.Apx
hay$PriceSQFT<-hay$List.Price/hay$Sq.Ft.Apx
par(mar=c(6,5,5,5))
boxplot(sl$PriceSQFT~sl$MONTH,col=col.9[4],main="San Leandro Sale Prices by Month",yaxt="n")
axis(2,at=seq(150,500,by=25),labels=paste0("$",gsub(" ","",prettyNum(seq(150,500,by=25),big.mark=","))),las=2)
axis(4,at=seq(150,500,by=25),labels=paste0("$",gsub(" ","",prettyNum(seq(150,500,by=25),big.mark=","))),las=2)
for (i in seq(150,500,by=25))
{abline(h=i,lty=3,col="lightgray")}
par(mar=c(6,5,5,5))
boxplot(hay$PriceSQFT~hay$MONTH,col=col.9[7],main="Hayward Sale Prices by Month",yaxt="n")
axis(2,at=seq(150,500,by=25),labels=paste0("$",gsub(" ","",prettyNum(seq(150,500,by=25),big.mark=","))),las=2)
axis(4,at=seq(150,500,by=25),labels=paste0("$",gsub(" ","",prettyNum(seq(150,500,by=25),big.mark=","))),las=2)
for (i in seq(150,500,by=25))
{abline(h=i,lty=3,col="lightgray")}
###### Sale-List Price by Month
sl$CHANGE<-sl$Sold.Price-sl$List.Price
hay$CHANGE<-hay$Sold.Price-hay$List.Price
par(mar=c(6,5,5,5))
boxplot(sl$CHANGE~sl$MONTH,col=col.9[4],ylim=c(-50000,50000),
main="San Leandro Sale Price - List Price by Month",yaxt="n")
axis(2,at=seq(-50000,50000,by=10000),labels=paste0("$",gsub(" ","",prettyNum(seq(-50000,50000,by=10000),big.mark=","))),las=2)
axis(4,at=seq(-50000,50000,by=10000),labels=paste0("$",gsub(" ","",prettyNum(seq(-50000,50000,by=10000),big.mark=","))),las=2)
for (i in seq(-50000,50000,by=10000))
{abline(h=i,lty=3,col="lightgray")}
par(mar=c(6,5,5,5))
boxplot(hay$CHANGE~hay$MONTH,col=col.9[7],ylim=c(-50000,50000),
main="Hayward Sale Price - List Price by Month",yaxt="n")
axis(2,at=seq(-50000,50000,by=10000),labels=paste0("$",gsub(" ","",prettyNum(seq(-50000,50000,by=10000),big.mark=","))),las=2)
axis(4,at=seq(-50000,50000,by=10000),labels=paste0("$",gsub(" ","",prettyNum(seq(-50000,50000,by=10000),big.mark=","))),las=2)
for (i in seq(-50000,50000,by=10000))
{abline(h=i,lty=3,col="lightgray")}
###### Days on Market by Month
par(mar=c(6,5,5,5))
boxplot(sl$Days.On.Market~sl$MONTH,col=col.9[4],main="San Leandro DOM by Month",ylim=c(0,70),yaxt="n")
axis(2,at=seq(0,70,by=10),labels=seq(0,70,by=10),las=2)
axis(4,at=seq(0,70,by=10),labels=seq(0,70,by=10),las=2)
for (i in seq(0,70,by=10))
{abline(h=i,lty=3,col="lightgray")}
par(mar=c(6,5,5,5))
boxplot(hay$Days.On.Market~hay$MONTH,col=col.9[7],main="Hayward DOM by Month",ylim=c(0,70),yaxt="n")
axis(2,at=seq(0,70,by=10),labels=seq(0,70,by=10),las=2)
axis(4,at=seq(0,70,by=10),labels=seq(0,70,by=10),las=2)
for (i in seq(0,70,by=10))
{abline(h=i,lty=3,col="lightgray")}
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
