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.