2014-11-03 14 views
0

我想绘制Y轴上的Date和Y轴上的Revenue。我有大约16000个客户的数据,每周收入总计。该数据集看起来像下面的例子中数据集(除了我有大约100周,16000个客户数据):在单个图上绘制数千个观测值

CustNum Date Revenue 
1 2013-01-07 35 
1 2013-01-14 23 
1 2013-01-21 42 
1 2013-01-28 65 
2 2013-01-07 78 
2 2013-01-14 48 
2 2013-01-21 85 
2 2013-01-28 34 

我想用一条线绘制该数据在一个单一的情节上代表一个情节顾客。换句话说,情节将有超过16000行,每个客户每周显示Revenue

现在,我明白这个阴谋将是非常混乱的16000行,我想建议什么可能是一个更好的方式来绘制这个数据,所以它不是混乱。

我尝试下面的代码没有给我想要的结果:

p <- ggplot() + geom_line(data=res,aes(x=Date,y=Revenue,color=custnum)) 

这并没有给我多条线路为多个客户。

所以我基本上有两个问题:

  1. 什么能代表此数据更好的办法?

  2. 我们应该如何改进我的代码以在单个图上显示16000行? (我不关心这个问题很多,如果我能得到另一种方式来表示这个数据)

任何帮助,这将非常感激。

+0

你试图用你的情节传达什么信息?顾客之间有一种普遍的倾向?或者另一方面,变化很大?决定要显示什么,然后选择_how_来显示它。 – 2014-11-04 00:03:05

+0

在我绘制这些信息之后,我会试图证明某些营销活动会影响到所有客户的子集,我将在同一个图上进行子集展示。因此最终会显示营销活动的效果。 – Patthebug 2014-11-04 00:04:52

+0

也许'geom_line(data = res,aes(x = Date,y = Revenue,group = CustNum),alpha = 0.2)'? – 2014-11-04 00:05:16

回答

0

可能是你正在寻找这样的事情:

CustNum = c("1","1","1","1", 
      "2","2","2","2") 
Date = c("2013-01-07","2013-01-14","2013-01-21","2013-01-28", 
     "2013-01-07","2013-01-14","2013-01-21","2013-01-28") 
Revenue = c("35","23","42","65","78","48","85","34") 

df = as.data.frame(cbind(CustNum,Date,Revenue)) 

df$CustNum = as.factor(df$CustNum) 
df$Revenue = as.numeric(as.character(df$Revenue)) 

## create the factor variable 
df$Treatment = ifelse(df$CustNum == '1','campaign','no campaign') 

ggplot(df) + geom_point(aes(x=Date, y=Revenue, color=Treatment), size=5) + facet_wrap(~Treatment) 

结果:Plot

现在你可以想像做同样与您的所有数据点geom_boxplotgeom_errorbar切换geom_point。您也可以选择不刻面,只是绘制在一张图中,但您必须在geom中指定“闪避”选项以避免让boxplot堆叠在另一个上。

结果2:Plot2

1

这里是我的上述评论的方法的基础R轮廓。我用一个大矩阵来保存所有的数据。第一列是客户是否得到了治疗。后面的列是100周的每周收入。

首先,我会模拟一些数据,这有很多的时间噪音。

#First records are a stable pattern 
notreat<- matrix(c(rep(0,8000), 100+rnorm(8000*100,0,5)),nrow=8000) 
#second set of records get no treatment for 50 weeks  
treat<- matrix(c(rep(1,8000), 100+rnorm(8000*50,0,5)),nrow=8000) 
#then get the treatment for 50 weeks 
treat<-cbind(treat, 
      matrix(rnorm(50*8000,100+0.75*(0:50)),nrow=8000,ncol=50,byrow=TRUE)) 

m <- rbind(notreat, treat) 

#use a color palette with transparency to be able to discern the overall pattern. 
palette (c(rgb(.4,0,0,0.01),rgb(0,0,0.4,0.01))) 


#This will take several seconds to render 16000 lines 
matplot(t(m[,2:101]),col=1+m[,1],type="l") 

您可以让您的数据帧到我这里建使用类似unstack()reshape组装矩阵类型。

+0

我还没有将这个应用到我的数据,并以所需的格式重塑它,但这看起来非常像我想要的。我运行你的代码,输出是一个美丽的,很像水彩画。非常感谢您的帮助伴侣。 – Patthebug 2014-11-04 18:01:56

+0

我从flowdata.com的Nathan Yau中获得灵感。他有很多很好的R例子 – vpipkt 2014-11-04 18:10:14