Graphing Statistical Daily Usage

Hi folks,
Now that we have official download capabilities in the v4 web app, I think it would be fun to share our graphs and analytics, as well as how they were created, as a chance to show innovation and share ideas. To start, I’ll volunteer my first graph with the new download data.

The following shows our daily usage and production of electricity over each hour of the day from a statistically aggregated perspective. The boxes represent the 1st quartile through 3rd quartile of usage, the line in the center the median usage, with the whiskers representing the roughly 2.7 sigma points on the distribution of usage/production. The dots are outliers beyond.

From this graph, one can see several interesting things:

  • Car charging is an easy to see outlier - any point above 10kWh is pretty much certain to include an EV charging session. One can also see that our two thirstiest EVs are set to start charging most of the time at 1am.
  • Solar production is very predictable, though seasonal here in northern California. Only a few cloudy outliers near zero. And yes - a few bad data points.
  • Time of Usage - in general, it looks like we’re doing OK on matching our usage to our Time of Usage rate plan. Solar is generally well-matched to our daytime usage, but we might be a good candidate for some level of battery storage to carry into the evening.

This graph was created straight from the downloaded hourly data in just a few lines of R using the readr and ggplot2 packages in RStudio.

library(readr)
library(ggplot2)

# Read in Sense download data
DownloadEnergy <- DownloadEnergy <- read_csv("~/Documents/Energy Analysis/1-hour data from Jan 01, 2018 to Jan 01, 2019.csv", col_types = cols(DateTime = col_datetime(format = "%m/%d/%y %H:%M")), skip = 1)
# Rename Solar Production so it's easy to use the word Total to select Usage and Solar
DownloadEnergy$Name[DownloadEnergy$Name == "Solar Production"] <- "Total Solar"
# Use DateTime as string
DownloadEnergy$DateTime <- as.character(DownloadEnergy$DateTime)
# Break out Time separately as string for easier graphing
DownloadEnergy$Time <- substr(DownloadEnergy$DateTime,12,21)
# Plot Total Usage and Solar to makes sure things make sense
ggplot(DownloadEnergy[grepl('Total', DownloadEnergy$Name),], aes(x=Time, y=abs(kWh),color=Name)) + geom_boxplot() + ggtitle("Energy Usage", subtitle = "") + xlab("Time of Day") + ylab("kWh") + theme_bw()

Conceptual view of the boxplot below, for those of you who have never seen one:

5 Likes