Tag: R

DVC Day 29: Almost There!

(This Post is part of my 30 day Data Visualization Challenge – you can follow along using the ‘challenge’ tag!)

Here we have the final graph that I presented to the rest of my colleagues in discussing the difference between our chat durations with Paid customers vs. our Business customers.

Screen Shot 2015-05-11 at 3.51.39 PM Thoughts:

– This is more effective than the box-and-whisker graph because it illustrates that while Paid and Business chats may have roughly the same median duration, the breakdown of the chat duration field is not the same – note how the Business chats bump out on the longer end. Very interesting.
– Note also that the duration piece has been changed to a log scale – this is to handle some of those huge outliers.

Code:

> library(ggplot2)
> mydata = read.csv(“~/olark_april_2015.csv”)
> q = ggplot(mydata,aes(log(chat_duration))) 
> q + geom_density(aes(fill=factor(group_title, labels=c("Business","Paid")) , alpha=1/4)) + ylab("% of Total Chats")

DVC Day 28: Enhance!

(This Post is part of my 30 day Data Visualization Challenge – you can follow along using the ‘challenge’ tag!)

 

 

Following the highly smushed boxes of yesterday, my next step was to limit our y-axis only to the lower end, where the vast majority of our data points were:

Screen Shot 2015-05-11 at 4.02.23 PM

 

Thoughts:
– Now we can see that our Business folks (on the left) and our larger cohort of all Paid users (on the right), have roughly the same median chat duration.
– In the interest of curiosity, though, it seems like this deserves more consideration, especially with the monster number of outliers. Box-and-whisker graphs are also not largely well understood, so bringing this before a broad audience wouldn’t work well if the goal is to communicate a difference (or lack of difference) in an effective way.

Code:

> library(ggplot2)
> mydata = read.csv(“~/olark_april_2015.csv”)
> p = ggplot(mydata, aes(group_title, chat_duration)) 
> p + geom_boxplot() + scale_y_continuous(limits=c(0,5000))

DVC Day 27: Practical Applications

(This Post is part of my 30 day Data Visualization Challenge – you can follow along using the ‘challenge’ tag!)

As we finish out the 30 days, I’ll actually be using an example of work that I did to test a hypothesis at Automattic. We currently provide live chat support to two cohorts of our customers, the folks who purchase WordPress.com Business, and our customers who have purchased any upgrade at all (mostly domains and WordPress.com Premium). There has been a longstanding assumption that our live chats with Business customers were longer in duration – they have access to Ecommerce options, as well as no-cost access to our entire library of Premium Themes.

So, I ported our live chat data out of Olark and into R, and threw together a box plot:

Screen Shot 2015-05-11 at 4.02.00 PM

Thoughts:
– If this looks wrong somehow, that’s because it is: our box is so small as to be flattened. All we really see are the massive upward outliers.
– This clearly does not do anything to help us decide which style of chat tends to be longer in duration – our Business folks are on the left here, and our Paid customers are on the right.
– Clearly the next step is figuring out how to change this display so we can see what those boxes look like in a zoomed-in view.

Code:

> library(ggplot2)
> mydata = read.csv(“~/olark_april_2015.csv”)
> p = ggplot(mydata, aes(group_title, chat_duration)) 
> p + geom_boxplot()

DVC Day 26: Final Stretch!

(This Post is part of my 30 day Data Visualization Challenge – you can follow along using the ‘challenge’ tag!)

I’ve been noodling a bit more with manipulating variables before visualization – that is, a gem’s volume is X +Y + Z, but they exist as separate columns in the actual data set. When we look at the relationship between a gem’s volume and its measured clarity:

Screen Shot 2015-05-10 at 1.11.52 PM

Thoughts:
– It’s surprising to see so many regular bumps across clarities – it may be that this is related to the similar structure around carat weight, that folks prefer a cleaner, easier to understand number, which results in a little fudging around volumes.
– I wonder what the significance of this is? Is there some other relationship between volume and clarity?

Code:

> library(ggplot2)
> qplot(x+y+z, data=diamonds, binwidth=.07, color=clarity, geom="density", alpha=I(.25)) + scale_x_continuous(limits=c(10,25)) + theme_bw()

DVC Day 25: Depth vs. Price/Carat

(This Post is part of my 30 day Data Visualization Challenge – you can follow along using the ‘challenge’ tag!)

When we take a closer look at this data, adding a bit more complexity – here, price per carat rather than simply carat weight – helps us to see that even as the lower clarities become larger, their price per carat stays consistently low. It’s also interesting to see that there appears to be no relationship at all between price/carat and a stone’s depth.

Screen Shot 2015-05-09 at 5.16.36 PM

Thoughts:
– The violin plot is added on top to help alleviate some of the dot density issues with such a large data set.
– Five days to go! Really this time 🙂

Code:

> p=ggplot(diamonds, aes(depth, price/carat))
> p + geom_point(color="gray", alpha=1/2) + facet_grid(.~clarity) + theme_bw() + geom_violin(color="blue", alpha=1/2)