商業(yè)數(shù)據(jù)分析-用戶行為分析案例-桑吉圖- Python

最近為了更好的看出用戶訪問(wèn)APP的路徑蒸绩,我研究了桑吉圖衙四,網(wǎng)上雖然有很多文章,但是都只是片面的講解患亿,實(shí)戰(zhàn)過(guò)程有很多坑需要避免传蹈,所以押逼,我總結(jié)了畫(huà)桑吉圖的血淚經(jīng)驗(yàn),給大家分享惦界。下面先看看桑吉圖的效果吧:

圖片

通過(guò)上面的圖挑格,我們能很清楚的看到,大部分用戶是主動(dòng)訪問(wèn)某寶首頁(yè)沾歪,然后在首頁(yè)分別訪問(wèn)了聚劃算以及使用了搜索功能漂彤,在聚劃算之后又訪問(wèn)了直播、每日大牌灾搏,最后跳出了挫望。是不是很清晰?

訪問(wèn)路徑和數(shù)據(jù)都是虛擬的狂窑,為了做這個(gè)案例而已媳板,大家后面可以使用自己公司的數(shù)據(jù)。

什么是桑吉圖

扇基圖(Sankey diagram)蛉幸,即桑基能量分流圖丛晦,也叫赊热遥基能量平衡圖。它是一種特定類型的流程圖烫沙,右圖中延伸的分支的寬度對(duì)應(yīng)數(shù)據(jù)流量的大小若锁,通常應(yīng)用于能源、材料成分斧吐、金融等數(shù)據(jù)的可視化分析。因1898年Matthew Henry Phineas Riall Sankey繪制的“蒸汽機(jī)的能源效率圖”而聞名仲器,此后便以其名字命名為“擅郝剩基圖”

在互聯(lián)分析的主要意義是,其可以很清楚的看清楚用戶訪問(wèn)APP的路徑乏冀,可視化用戶訪問(wèn)和跳出的重要節(jié)點(diǎn)蝶糯。

如何畫(huà)桑吉圖

畫(huà)桑吉圖主要有以下幾步

第一步:數(shù)據(jù)源

我習(xí)慣是數(shù)據(jù)先處理成以下結(jié)構(gòu):


數(shù)據(jù)結(jié)構(gòu)

附上數(shù)據(jù)源代碼用作練習(xí):


# 導(dǎo)入包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pyecharts.charts import Sankey
from pyecharts import options as opts
import pyecharts

#數(shù)據(jù)源
df = pd.DataFrame({
'第一個(gè)頁(yè)面':  ['某寶首頁(yè)',  '某寶首頁(yè)',  '某寶首頁(yè)',  '某寶首頁(yè)',  '某寶首頁(yè)',  '某寶首頁(yè)',  '某寶首頁(yè)',  '某寶首頁(yè)',  '某寶首頁(yè)',  '某寶消息頁(yè)',  '某寶消息頁(yè)',  '某寶消息頁(yè)'],
'第二個(gè)頁(yè)面':  ['搜索',  '搜索',  '搜索',  '搜索',  '聚劃算',  '聚劃算',  '聚劃算',  '聚劃算',  '聚劃算',  '交易物流',  '交易物流',  '活動(dòng)優(yōu)惠'],
'第三個(gè)頁(yè)面':  ['歷史搜索',  '歷史搜索',  '搜索發(fā)現(xiàn)',  '搜索發(fā)現(xiàn)',  '每日大牌',  '每日大牌',  '直播',  '直播',  '直播',  '物流詳情',  '物流詳情',  '權(quán)益過(guò)期提醒'],
'第四個(gè)頁(yè)面':  ['搜索結(jié)果頁(yè)',  '跳出',  '搜索結(jié)果頁(yè)',  '跳出',  '物品詳情頁(yè)',  '跳出',  '觀看直播',  '跳出',  '我的頁(yè)面',  '某旗艦店',  '跳出',  '跳出'],
'用戶量-萬(wàn)':   [77,    706,    56,    981,    871,    348,    638,    698,    912,    651,    627,    380] 
 
})

第二步:定義節(jié)點(diǎn)

什么節(jié)點(diǎn)呢?其實(shí)就是所有用戶訪問(wèn)頁(yè)面的名稱辆沦,用戶從頁(yè)面A到頁(yè)面B昼捍,再到C。把所有頁(yè)面都列出來(lái)肢扯。(可以看出使用了unique(),進(jìn)行去重妒茬,這個(gè)地方需要注意,后面會(huì)說(shuō))
代碼:


nodes = []
for i in range(0,4):
    values = df.iloc[:,i].unique()
    for value in values:
        dic = {}
        dic['name'] = value
        nodes.append(dic)

結(jié)果:


nodes

第三步:定義邊和流量

什么是定義邊和流量呢蔚晨?其實(shí)就是把A到B和B到C具體的轉(zhuǎn)化量計(jì)算出來(lái)乍钻。
代碼一:代碼一的意義在于肛循,用戶訪問(wèn)路徑是復(fù)雜的,可能有10步如果银择,我們需要看前四步流轉(zhuǎn)情況的話多糠,就要先聚合前四步。


first = df.groupby(['第一個(gè)頁(yè)面','第二個(gè)頁(yè)面'])['用戶量-萬(wàn)'].sum().reset_index()
b = df.groupby(['第二個(gè)頁(yè)面','第三個(gè)頁(yè)面',])['用戶量-萬(wàn)'].sum().reset_index()
c = df.groupby(['第三個(gè)頁(yè)面','第四個(gè)頁(yè)面',])['用戶量-萬(wàn)'].sum().reset_index()

first.columns = ['source','target','value']
b.columns = ['source','target','value']
c.columns = ['source','target','value']

result = pd.concat([first,b,c])
result.head(10)

代碼二:
如果就是看所有頁(yè)面的話浩考,直接使用這個(gè)代碼就好夹孔。此時(shí)把result換成df就好了

linkes=[]
for i in result.values:
    dic={}
    dic['source']=i[0]
    dic['target']=i[1]
    dic['value']=i[2]
    linkes.append(dic)

結(jié)果:
從這個(gè)結(jié)果就能看到每一步的流轉(zhuǎn),source是上一個(gè)頁(yè)面析孽,target是下一個(gè)頁(yè)面搭伤,value是從上一個(gè)頁(yè)面到下一個(gè)頁(yè)面的用戶量,比如紅色框代表從消息頁(yè)到交易物流頁(yè)面的用戶量是1278

linkes

第四步:畫(huà)圖

代碼:
畫(huà)圖就直接使用下面代碼就可以了绿淋,我們解釋一下:

  • init_opts=opts.InitOpts(width="1300px", height="500px")闷畸,控制整個(gè)畫(huà)圖的大小,如果頁(yè)面比較多吞滞,那就需要比較大的畫(huà)圖區(qū)域佑菩,使用整個(gè)代碼進(jìn)行調(diào)參。
  • label_opts=opts.LabelOpts(position='right')裁赠,是頁(yè)面名稱的顯示位置殿漠,比如上面的1處聚劃算,目前顯示在右側(cè)佩捞。
  • node_gap=10,代表2處绞幌,聚劃算和搜索之間的間距,頁(yè)面少的時(shí)候一忱,可以調(diào)大間距莲蜘。
  • node_width = 35,代表3處,是搜索柱子的粗細(xì)帘营。
  • focus_node_adjacency ='allEdges'票渠。是鼠標(biāo)懸停上面顯示高亮,可以看看開(kāi)篇時(shí)候鼠標(biāo)的效果芬迄。


pic=(
    Sankey(init_opts=opts.InitOpts(width="1300px", height="500px"))
    .add(
        '',#圖例名稱
        nodes,#傳入節(jié)點(diǎn)數(shù)據(jù)
        linkes,#傳入邊和流量數(shù)據(jù)
        #設(shè)置透明度问顷、彎曲度、顏色
        linestyle_opt=opts.LineStyleOpts(opacity=0.3,curve=0.5,color='source'),
        #標(biāo)簽顯示位置
        label_opts=opts.LabelOpts(position='right'),
        #節(jié)點(diǎn)之間的距離
        node_gap=10,
        #orient="vertical",#查看垂直圖片的操作
        node_width = 35,
        
        # 少魇幔基圖中節(jié)點(diǎn)的對(duì)齊方式杜窄,默認(rèn)是雙端對(duì)齊,可以設(shè)置為左對(duì)齊或右對(duì)齊算途,對(duì)應(yīng)的值分別是:# left: 節(jié)點(diǎn)左對(duì)齊塞耕。# right: 節(jié)點(diǎn)右對(duì)齊。# justify: 節(jié)點(diǎn)雙端對(duì)齊嘴瓤。
        node_align = 'right',
        # 距離右側(cè)的距離
        #pos_right = "10%",
        # 距離左側(cè)的距離
       # pos_left = '1%',
        
        #鼠標(biāo)懸停時(shí)荷科,節(jié)點(diǎn)高亮
        focus_node_adjacency ='allEdges'
      
    )
    .set_global_opts(title_opts=opts.TitleOpts(title='用戶行為'))
)
pic.render('app_act.html')

注意點(diǎn)

  • 主要是需要注意一點(diǎn)是第二步定義節(jié)點(diǎn)時(shí)唯咬,使用的unique(),這個(gè)是去重所有的頁(yè)面,但是有個(gè)場(chǎng)景就不能滿足畏浆,并且是90%以上不滿足:
    • 比如用戶在第一個(gè)頁(yè)面訪問(wèn)之后就跳出了胆胰,那么為了保證數(shù)據(jù)結(jié)構(gòu),必須后面幾個(gè)頁(yè)面夠賦值跳出刻获。數(shù)據(jù)如下蜀涨,此時(shí)你使用上面的代碼是不能畫(huà)出圖。
      數(shù)據(jù)源2

      數(shù)據(jù)源代碼

df1 = pd.DataFrame({
'第一個(gè)頁(yè)面':  ['某寶首頁(yè)',  '某寶首頁(yè)',  '某寶消息頁(yè)',  '某寶消息頁(yè)'],
'第二個(gè)頁(yè)面':  ['搜索',  '跳出',  '交易物流',  '跳出'],
'第三個(gè)頁(yè)面':  ['歷史搜索',  '跳出',  '物流詳情',  '跳出'],
'第四個(gè)頁(yè)面':  ['搜索結(jié)果頁(yè)',  '跳出',  '跳出',  '跳出'],
'用戶量-萬(wàn)':   [145,    313,    699,    520] 
})

那么我們需要進(jìn)行處理:

for i in range(0,4):
     df.iloc[:,i] = df.iloc[:,i] + str(i)

結(jié)果:

然后就能使用后面的幾步:定義節(jié)點(diǎn)--定義邊和流量--畫(huà)圖蝎毡。


#定義節(jié)點(diǎn)
nodes = []
for i in range(0,4):
    values = df1.iloc[:,i].unique()
    for value in values:
        dic = {}
        dic['name'] = value
        nodes.append(dic)
    
            
#定義邊和流量  
first = df1.groupby(['第一個(gè)頁(yè)面','第二個(gè)頁(yè)面'])['用戶量-萬(wàn)'].sum().reset_index()
b = df1.groupby(['第二個(gè)頁(yè)面','第三個(gè)頁(yè)面',])['用戶量-萬(wàn)'].sum().reset_index()
c = df1.groupby(['第三個(gè)頁(yè)面','第四個(gè)頁(yè)面',])['用戶量-萬(wàn)'].sum().reset_index()

first.columns = ['source','target','value']
b.columns = ['source','target','value']
c.columns = ['source','target','value']

result = pd.concat([first,b,c])

linkes=[]
for i in result.values:
    dic={}
    dic['source']=i[0]
    dic['target']=i[1]
    dic['value']=i[2]
    linkes.append(dic)


#畫(huà)圖
pic=(
    Sankey(init_opts=opts.InitOpts(width="1300px", height="500px"))
    .add(
        '',#圖例名稱
        nodes,#傳入節(jié)點(diǎn)數(shù)據(jù)
        linkes,#傳入邊和流量數(shù)據(jù)
        #設(shè)置透明度厚柳、彎曲度、顏色
        linestyle_opt=opts.LineStyleOpts(opacity=0.3,curve=0.5,color='source'),
        #標(biāo)簽顯示位置
        label_opts=opts.LabelOpts(position='right'),
        #節(jié)點(diǎn)之間的距離
        node_gap=10,
        #orient="vertical",#查看垂直圖片的操作
        node_width = 35,
        
        # 摄灞基圖中節(jié)點(diǎn)的對(duì)齊方式别垮,默認(rèn)是雙端對(duì)齊,可以設(shè)置為左對(duì)齊或右對(duì)齊扎谎,對(duì)應(yīng)的值分別是:# left: 節(jié)點(diǎn)左對(duì)齊碳想。# right: 節(jié)點(diǎn)右對(duì)齊。# justify: 節(jié)點(diǎn)雙端對(duì)齊毁靶。
        node_align = 'right',
        # 距離右側(cè)的距離
        #pos_right = "10%",
        # 距離左側(cè)的距離
       # pos_left = '1%',
        
        #鼠標(biāo)懸停時(shí)胧奔,節(jié)點(diǎn)高亮
        focus_node_adjacency ='allEdges'
      
        
    
    )
    .set_global_opts(title_opts=opts.TitleOpts(title='用戶行為'))
)
pic.render('app_act.html')
  

結(jié)果:

結(jié)果

寫(xiě)在最后:
大家一定要使用上面的數(shù)據(jù)進(jìn)行訓(xùn)練,體會(huì)其中的坑预吆。龙填。。
大家一定要使用上面的數(shù)據(jù)進(jìn)行訓(xùn)練拐叉,體會(huì)其中的坑岩遗。。凤瘦。
大家一定要使用上面的數(shù)據(jù)進(jìn)行訓(xùn)練喘先,體會(huì)其中的坑。廷粒。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末红且,一起剝皮案震驚了整個(gè)濱河市坝茎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌暇番,老刑警劉巖嗤放,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異壁酬,居然都是意外死亡次酌,警方通過(guò)查閱死者的電腦和手機(jī)恨课,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)岳服,“玉大人剂公,你說(shuō)我怎么就攤上這事〉跛危” “怎么了纲辽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)璃搜。 經(jīng)常有香客問(wèn)我拖吼,道長(zhǎng),這世上最難降的妖魔是什么这吻? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任吊档,我火速辦了婚禮,結(jié)果婚禮上唾糯,老公的妹妹穿的比我還像新娘怠硼。我一直安慰自己,他們只是感情好趾断,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布拒名。 她就那樣靜靜地躺著,像睡著了一般芋酌。 火紅的嫁衣襯著肌膚如雪增显。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天脐帝,我揣著相機(jī)與錄音饭聚,去河邊找鬼。 笑死企量,一個(gè)胖子當(dāng)著我的面吹牛俄周,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播疚顷,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼旱易,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了腿堤?” 一聲冷哼從身側(cè)響起阀坏,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎笆檀,沒(méi)想到半個(gè)月后忌堂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酗洒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年士修,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了枷遂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡棋嘲,死狀恐怖酒唉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情封字,我是刑警寧澤黔州,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站阔籽,受9級(jí)特大地震影響流妻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜笆制,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一绅这、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧在辆,春花似錦证薇、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鸦概,卻和暖如春箩张,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窗市。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工先慷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人咨察。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓论熙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親摄狱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子脓诡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • ![Flask](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAW...
    極客學(xué)院Wiki閱讀 7,234評(píng)論 0 3
  • 不知不覺(jué)易趣客已經(jīng)在路上走了快一年了祝谚,感覺(jué)也該讓更多朋友認(rèn)識(shí)知道易趣客,所以就謝了這篇簡(jiǎn)介刊愚,已做創(chuàng)業(yè)記事。 易趣客...
    Physher閱讀 3,408評(píng)論 1 2
  • 雙胎妊娠有家族遺傳傾向踩验,隨母系遺傳鸥诽。有研究表明商玫,如果孕婦本人是雙胎之一,她生雙胎的機(jī)率為1/58牡借;若孕婦的父親或母...
    鄴水芙蓉hibiscus閱讀 3,695評(píng)論 0 2
  • 今天理好了行李拳昌,看到快要九點(diǎn)了,就很匆忙的洗頭洗澡钠龙,(心存一份念想炬藤,你總會(huì)打給我的??)然后把洗頭液當(dāng)成沐浴液了??,...
    bevil閱讀 2,768評(píng)論 1 1
  • 那年我們15碴里,像陽(yáng)光一樣溫暖的年紀(jì)沈矿。每天我都會(huì)騎自行車上學(xué),路過(guò)田野咬腋,工廠羹膳,醫(yī)院,村莊根竿,有微風(fēng)陵像,有陽(yáng)光,有綠...
    木偶說(shuō)愛(ài)你閱讀 2,520評(píng)論 0 3