美文网首页玩转大数据大数据呆鸟的Python数据分析
【数据可视化】Sankey图的制作(二)

【数据可视化】Sankey图的制作(二)

作者: 枫璃 | 来源:发表于2020-04-02 12:38 被阅读0次

上一章介绍了简单的两节点的Sankey图的制作(https://www.jianshu.com/p/d1ad468d79c8),本章介绍稍微复杂些的Sankey图的制作。

一、多节点Sankey图的制作

多节点的Sankey图的脚本和两节点的是一致的,差别主要在于要进行数据预处理。

比如上一章中二节点Sankey图的原始数据结构为:

(表1)

假如再增加一个维度,数据结构变成:

(表2)

这种数据在制作Sankey图之前,需要整合成表1中的结构,即把多3变量整合成2变量的结构,如该例子中、是把state+continent、land+state分别作为key进行汇总、然后做竖向合并,整合后的数据如下:

(表3)

当数据整合成表3的结构后,R和Python均能调用之前的脚本进行绘制了,绘制结果如下:

1.1 使用Python制作Sankey图

(图1)

这里需要留意的是,用Python绘制时,links的两个节点不能相同、否则会导致出错及绘图失败 。

1.2 使用R制作Sankey图

R的局限性:如果分类过多会导致显示异常,故这里仅挑选了美洲、亚欧做示例:

(图2)

二、用户行为(点击流)可视化

Sankey图的一大作用是对用户行为进行可视化,实际工作中常用于分析用户流失留存。

和多节点的Sanky图类似,这类图的绘制重点也是在数据的预处理,并且这类数据和之前介绍的有一个最明显的差别是,分类统计中各类别间是不分先后的,而用户行为是必须强调先后次序的,这个先后需要体现在原始数据中。

下面案例的数据是一个网站的新用户访问行为,日志记录了用户访问每个页面的时间、页面id,我们需要了解新用户的访问次序、以及用户在哪个步骤流失最多、并对其进行可视化展示。

数据预处理上,先对每个用户访问的页面次序进行处理:

用户1、当前页面id、该页面的访问排序、下一个页面id、下一页面的访问排序

用户2、当前页面id、该页面的访问排序、下一个页面id、下一页面的访问排序

……

然后统计汇总成:

当前页面id+访问排序、下一页面id+访问排序、访问用户数

将数据处理成这个形式后,就可以按照之前的方式制作点击流的可视化效果图了:

2.1 使用Python制作Sankey图

(图3)

将鼠标移到对应的links上,可以看到links的信息,如这个节点的含义为,第一个页面访问“注册成功-进入后台”、第二个页面跳转到“登录后首页”的用户数有8712个。

(图4)

2.2 使用R制作Sankey图

(图5)

制图代码:

library(networkD3)

#读入数据 (read.csv函数)

a1 = read.csv("E:\\hill2020\\Python相关\\sankey_click.csv",sep=',',header=TRUE)

#由于原始数据比较细,全部作图线多且乱、看不出规律,这里只取了频次200以上的作图,实操中可以根据数据情况做调整

a <- subset(a1,v>=200)

# 导入数据的起点终点是factor类型,需要将其转为chr,否则之后unique的是因子水平,不能进行合并。 

a$s=as.character(a$s)

a$t=as.character(a$t)

#开始绘图

#设置节点

Sankeylinks<-a

Sankeynodes<-data.frame(name=unique(c(Sankeylinks$s,Sankeylinks$t)))

Sankeynodes$index<-0:(nrow(Sankeynodes)-1)

#设置边

Sankeylinks<-merge(Sankeylinks,Sankeynodes,by.x="s",by.y="name")

Sankeylinks<-merge(Sankeylinks,Sankeynodes,by.x="t",by.y="name")

Sankeydata<-Sankeylinks[,c(4,5,3)]

names(Sankeydata)<-c("Source","Target","Value")

Sankeyname<-Sankeynodes[,1,drop=FALSE]

#输出结果图,最终是一个html文件

sankeyNetwork(Links=Sankeydata,Nodes=Sankeyname,Source="Source",Target="Target",Value="Value",NodeID="name",fontSize=12,nodeWidth=30)

相关文章

网友评论

    本文标题:【数据可视化】Sankey图的制作(二)

    本文链接:https://www.haomeiwen.com/subject/nhhzuhtx.html