2017-10-09 47 views
1

我试图绘制出人们在参与我们的营销内容时所采用的路径。基于路径频率的线条比例颜色

我对所有的营销互动数据(链接点击等),他们的“销售渠道”,他们的“接合位置”

啮合位置有以下几种:第一触摸[他们曾经与参与第一次我们],领导创造[当他们填写表格并给我们足够的信息],机会创造[在创造机会之前发生的接触],并且封闭赢得[在他们签署和购买之前发生的接触]

我实际上成功地映射了路径,但是问题出在14通道和100k +个体路径上,结果图表非常不可读。

由于这个原因,我想根据整个路径的出现频率来缩放线条的颜色。

这是格式i的具有数据:

______________________________ 
| id | channel | position | 
| 1 | direct | FT  | 
| 1 | SEM  | LC  | 
| 1 | email  | OC  | 
| 1 | video  | CW  | 
| 2 | SEM  | FT  | 
| 2 | Video  | LC  | 
| 2 | Event  | OC  | 
| 2 | Email  | CW  | 
______________________________ 

所以想要有图形已经Y轴是位置,X轴是信道,然后缩放每个单独的路径的颜色(由ID标识)取决于整个路径的频率。所以我不想让它告诉我什么是LC最常见的FT,然后是最常见的LC到OC等 - 我希望它显示最常见的完整路径。

这里是一个什么样的数据看起来像我当前的代码示例:

map picture

这是使用此代码创建:

ggplot(tblp, aes(x=position, y=channel, group=id)) + 
geom_line(alpha=.01, size=.5) 

所以现在我需要做的就是图根据整个路径的频率来改变色阶的方法。这是否需要不同的数据帧设置?

任何帮助表示赞赏。

回答

2

您的数据目前的结构使路径上的每个点都是一行;要衡量路径的频率,您需要重新整理数据,以便每个整个路径都是一行,然后将摘要数据加回到当前数据格式id。通过tidyr::spread和一些dplyr操作,这项操作变得非常简单。


library(tidyverse) 

tb <- tribble(~id, ~channel, ~position 
       , 1, "direct", "FT" 
       , 1, "SEM", "LC" 
       , 1, "email", "OC" 
       , 1, "video", "CW" 
       , 2, "SEM", "FT" 
       , 2, "Video", "LC" 
       , 2, "Event", "OC" 
       , 2, "Email", "CW" 
       , 3, "SEM", "FT" 
       , 3, "Video", "LC" 
       , 3, "Event", "OC" 
       , 3, "Email", "CW") 

spread_tb <- tb %>% spread(position, channel) 

spread_tb 
#> # A tibble: 3 x 5 
#>  id CW  FT LC OC 
#> * <dbl> <chr> <chr> <chr> <chr> 
#> 1  1 video direct SEM email 
#> 2  2 Email SEM Video Event 
#> 3  3 Email SEM Video Event 

to_plot <- 
    spread_tb %>% 
    group_by(FT, CW, LC, OC) %>% 
    summarise(n = n()) %>% 
    ungroup() %>% 
    right_join(spread_tb, by = c("FT", "CW", "LC", "OC")) %>% 
    select(n, id) %>% 
    right_join(tb, by = 'id') 

to_plot 
#> # A tibble: 12 x 4 
#>  n id channel position 
#> <int> <dbl> <chr> <chr> 
#> 1  1  1 direct  FT 
#> 2  1  1  SEM  LC 
#> 3  1  1 email  OC 
#> 4  1  1 video  CW 
#> 5  2  2  SEM  FT 
#> 6  2  2 Video  LC 
#> 7  2  2 Event  OC 
#> 8  2  2 Email  CW 
#> 9  2  3  SEM  FT 
#> 10  2  3 Video  LC 
#> 11  2  3 Event  OC 
#> 12  2  3 Email  CW 

ggplot(to_plot, aes(x=position, y=channel, group=id, color = n)) + 
    geom_line() 

+0

传奇!我会给这个镜头并报告 - 看起来应该是我需要的! –

+0

有没有办法改变频率上的不透明度? –

+0

添加阿尔法你的审美映射;从上面的代码中,'aes(...,alpha = n)' – zlipp