2014-11-03 17 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