<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Excel、SQL、Python做數(shù)據(jù)分析有何不同?

          共 9741字,需瀏覽 20分鐘

           ·

          2020-12-20 08:44

          作者簡介
          HeoiJin:立志透過數(shù)據(jù)看清世界的產(chǎn)品策劃,專注爬蟲、數(shù)據(jù)分析、產(chǎn)品策劃領域。

          萬物皆營銷 | 資本永不眠 | 數(shù)據(jù)恒真理
          CSDN:https://me.csdn.net/weixin_40679090

          一、前言

          后互聯(lián)網(wǎng)時代,獲客拉新的成本越來越高,如何增加客戶的留存,提高客戶的復購次數(shù)、購買金額等變得十分重要,同期群分析便是當中非常重要的分析方法。

          關于同期群分析概念和思路的文章很多,但分享如何實現(xiàn)的文章非常罕見。因此,本文將簡單介紹同期群分析的概念,并用數(shù)據(jù)分析師的三板斧ESP(Excel、MySQL、Python)分別實現(xiàn)同期群分析。

          二、項目準備

          • Excel:
            • office或wps均可,office 2013后的版本更好
          • MySQL:
            • 版本:8.0(本次不涉及窗口函數(shù),其他版本亦可)
            • Navicat
          • Python:
            • 版本:3.7
            • IDE:pycharm
            • 庫:pandas、xlrt

          PS.

          • 因篇幅原因,可能會有未能詳細講解的過程
          • 完整源碼及數(shù)據(jù)集請移步至文末獲取

          三、同期群分析概念講解

          數(shù)據(jù)分析最終目標都是為了解決業(yè)務問題,任何分析方法都只是工具。因此在詳細講解如何實現(xiàn)之前,需要先明晰方法的含義是什么,能帶來什么收益,才能在合適的問題上選對分析方法。

          3.1 同期群分析含義

          同期群(Cohort)即相同時間內具有相似或特定屬性 、行為的群體。核心要素為時間+特定屬性,比如把00后出生的人劃分為一個群組。

          同期群分析指將用戶進行同期群劃分后,對比不同同期群用戶的相同指標。我們耳熟能詳?shù)牧舸媛示褪峭谌悍治龅钠渲幸环N,案例如下圖:

          同期群分析包含了3個重要元素:

          1. 客戶首次行為時間,這是我們劃分同期群的依據(jù)
          2. 時間維度,即上圖中+N月或者N日留存率中的N日
          3. 指標,注冊轉化率、付款轉化率、留存率等等

          3.2 意義

          同期群分析給到更加細致的衡量指標,幫助我們實時監(jiān)控真實的用戶行為、衡量用戶價值,并為營銷方案的優(yōu)化和改進提供支撐:

          • 橫向比較:觀察同一同期群在不同生命周期下的行為變化,推測相似群體的行為隨時間的變化

          • 縱向比較:觀察不同的同期群在同一個生命周期下的行為變化,驗證業(yè)務行為是否取得預期效果

          四、材料梳理

          4.1 數(shù)據(jù)情況梳理

          拿到數(shù)據(jù)的第一步,自然是了解數(shù)據(jù)的情況。針對本次同期群分析,我們可能需要用到的字段有:

          • 客戶昵稱
          • 付款時間:時間戳形式
          • 訂單狀態(tài):交易失敗/交易成功
          • 支付金額
          • 購買數(shù)量

          通過進一步計算,發(fā)現(xiàn)付款時間中缺失值所在行的訂單狀態(tài)均為“交易失敗”,那么下文分析都需要將訂單狀態(tài)為“交易失敗”的行全部剔除。

          4.2 分析方法確定

          針對此份數(shù)據(jù),有3個分析方向可以選擇:

          1. 留存率或付款率
          2. 人均付款金額
          3. 人均購買次數(shù)

          我們選擇其中最經(jīng)典,也是數(shù)分面試中最常考的留存率作為例子,需要用到的字段有:

          • 客戶昵稱
          • 付款時間
          • 訂單狀態(tài)

          相信各位對留存率都十分熟悉,不過多介紹。在本次的分析中,留存率的具體計算方式為:+N月留存率=(+N月付款用戶數(shù)/首月付款用戶數(shù))*100%

          注意:公式中的+N月存在歧義,會有兩種計算方法:

          1. 以自然月作為月份偏移的依據(jù):即所有首次行為在9月的用戶,只要10月有付款行為,都計算進+1月留存
          2. 以每30天作為月份偏移的依據(jù):即9月30日首次付款的用戶,在10月30日-11月29日之間有付款行為,才計算進+1月留存

          具體的差距會在Excel(用算法1)和MySQL(用算法2)兩種工具實現(xiàn)的結果中分別展示。沒有相關技術背景的看官老爺可直接對比最終的留存率結果。

          五、Excel實現(xiàn)

          Excel的實現(xiàn)方式是三個當中門檻最低的,只需要掌握數(shù)據(jù)透視表和一些基礎函數(shù),但過程相對繁雜。實現(xiàn)思路如下:

          實現(xiàn)思路一共分為4大部分:數(shù)據(jù)清洗 -> 計算首單時間 -> 計算首單時間與付款時間差 -> 利用透視表計算同期群留存量和留存率。其中由于部分版本的office和wps的數(shù)據(jù)透視表不支持非重復計數(shù),因此需要先計算各月中各用戶出現(xiàn)的次數(shù)。

          數(shù)據(jù)清洗部分只需要篩選+刪除便可完成,相信如此簡單的操作難不倒各位看官老爺們,那么我們便從第二部分開始詳細講解。

          5.1 計算每個客戶首單時間

          首先通過數(shù)據(jù)透視表求每一個用戶首次付款時間。數(shù)據(jù)透視表,說白了就是通過特定的條件進行分組,并對數(shù)據(jù)進行求和、求均值、求方差等聚合操作。在制作數(shù)據(jù)透視表時要注意以下幾點:

          1. 數(shù)據(jù)區(qū)域的第一行為標題欄(字段名稱)
          2. 標題欄不能出現(xiàn)空單元格,亦不要出現(xiàn)重復的標題名
          3. 數(shù)據(jù)中避免有合并單元格
          4. 不能出現(xiàn)非法日期

          5.1.1 創(chuàng)建透視表

          全選數(shù)據(jù)?->?插入?->?數(shù)據(jù)透視表?->?確定

          5.1.2 選擇分組字段和值字段

          將“客戶昵稱”拖進“行”,將付款時間拖進“值”,并將值字段設置中的匯總方式設置為最小值

          這里最小付款時間顯示為10位的時間戳,只要調整顯示格式便可轉為我們常見的xx年xx月xx日。

          5.1.3 將首單時間拼接到每個用戶所在行

          此步驟需要使用到vlookup函數(shù)進行匹配。VLOOKUP函數(shù)是一個縱向查找的函數(shù),包含4個參數(shù),具體語法為=VLOOKUP(查找的依據(jù),查找的區(qū)域,返回的值在查找區(qū)域中的列號,是否近似匹配)

          注意:

          1. 查找的位置如果要保持不變,要使用A:B或者1:15的形式鎖定匹配區(qū)域
          2. 參數(shù)[ 查找的位置 ]中,“!”號前為表的名稱
          3. 列號的計數(shù)是從1開始,且第一列必須是與查找依據(jù)對應的列
          4. 近似匹配參數(shù)中,0為否(即必須與查找依據(jù)一模一樣才匹配),1為是(即依據(jù)為“同期”時,可以匹配出“同期”、“同期群”或者“同期群分析”)
          =VLOOKUP(A2,首付時間透視表!A:B,2,0)

          利用VLOOKUP拼接之后,首單時間同樣顯示為10位的時間戳,設置單元格格式后即可顯示為上圖的形式。

          5.2 計算時間差

          5.2.1 對付款時間和首單時間進行降采樣

          如按算法2進行計算,可直接省略此步驟。

          可能有看官老爺對重采樣的概念并不是很清楚,簡單說下:

          • 將時間序列從一個頻率轉化為另外一個頻率的過程即重采樣
          • 常見的時間頻率由低到高依次為:年 -> 月 -> 日 -> 時 -> 分 -> 秒
          • 將高頻率轉為低頻率為降采樣,將低頻率轉為高頻率為升采樣

          在Excel當中可以使用分列或者時間相關函數(shù)(YEAR、MONTH、DAY等)方式來獲取到對應的時間頻率。我們使用YEAR和MONTH來對時間進行降采樣,注意與字符串連接一定要用“&”號。

          =YEAR(B2)&"/"&MONTH(B2)

          5.2.2 計算時間差

          此步驟中需要用到DATEDIF函數(shù),此公式常用于計算兩個日期之間的天數(shù)、月份、年數(shù)差,語法為:=DATEDIF(起始時間,結束時間,時間頻率),常用的時間頻率參數(shù)有['Y','M','D'],分別對應年月日

          =DATEDIF(E2,D2,"M")

          5.2.3 重置月份差標簽

          修改透視表的標簽并不方便,因此先重置月份差標簽,需要用到一個IF函數(shù)便可。具體語法:=IF(條件,符合條件時的操作,不符合條件時的操作)

          =IF(F2=0,"首月","+"&F2&"月")

          5.3 計算同期留存量和留存率

          如果是office 2013及之后的版本,以上的數(shù)據(jù)已經(jīng)足夠我們進行留存量的計算,可以直接跳過計算用戶出現(xiàn)次數(shù)環(huán)節(jié)。

          5.3.1 計算每月中每個用戶出現(xiàn)的次數(shù)

          這里利用COUNTIFS函數(shù),計算出“用戶昵稱”和“付款時間(重采樣)”均相同的次數(shù),并取其倒數(shù),讓當月無論該用戶出現(xiàn)多少次,最終都只會計算為一次。即假設用戶當月付款5次,倒數(shù)后權重變?yōu)?/5,求和后出現(xiàn)次數(shù)為1。

          COUNTIFS的語法為:=COUNTIFS(區(qū)域A,條件A,區(qū)域B,條件B,....)

          =COUNTIFS(A:A,A:A,D:D,D:D,E:E,E:E)

          =1/H2

          5.3.2 創(chuàng)建留存量數(shù)據(jù)透視表

          針對wps及office2013以前的版本,我們已經(jīng)計算了出現(xiàn)次數(shù)的倒數(shù),只需要仿照前文“計算每個用戶首單時間”的步驟創(chuàng)建數(shù)據(jù)透視表,以“首單時間重采樣”作為行,以“月份差標簽”作為列,以“出現(xiàn)次數(shù)(倒數(shù))”作為值,并修改值字段設置中的計算類型為求和即可。

          而office 2013及之后的版本,我們在插入數(shù)據(jù)透視表時,需要注意勾選“將此數(shù)據(jù)添加到數(shù)據(jù)模型”

          數(shù)據(jù)透視表

          同樣以“首單時間重采樣”作為行,以“月份差標簽”作為列,但不同的是,我們可以直接以“客戶昵稱”作為值,并在值字段設置當中,將計算類型設置為“非重復計數(shù)”。

          到此,我們留存量的透視圖便完成了,但格式看上去還是有點丑,我們手動拖動下行、列標簽的排序,最終獲得如下效果:

          5.3.3 計算留存率

          在值字段顯示方式當中并沒有找到我們想要的效果,因此我們在數(shù)據(jù)透視表下方選定一個區(qū)域,復制好行標簽和列標簽。通過公式“=C5/$B5”計算出留存率,并向右向下拖動公式便可完成

          注:

          • B5為2019年9月的首月留存量,C5為2019年9月的+1月留存量
          • 分母需要將B列鎖定,否則在向右拖動公式時,分母會依次變?yōu)镈5、E5

          完美符合我們預期的結果!Excel版本的實現(xiàn)就到這里便完成,接下來是門檻稍微高一點點的MySQL實現(xiàn)。

          六、MySQL實現(xiàn)

          MySQL的實現(xiàn)路徑與Excel的實現(xiàn)路徑非常相近,具體步驟為:

          1. 導入數(shù)據(jù)
          2. 清洗數(shù)據(jù):篩選訂單狀態(tài)為“交易成功”的行
          3. 獲取首單時間
          4. 求月份偏移:求出月份差,并對首付時間降采樣
          5. 計算留存量:通過首付時間和月份差進行分組,求唯一的用戶id數(shù)
          6. 求留存率

          6.1 導入數(shù)據(jù)

          目前的數(shù)據(jù)的保存格式為xlsx,我們需要先將數(shù)據(jù)導入到數(shù)據(jù)庫當中才能執(zhí)行查詢。第一步選擇一個庫,右鍵選擇導入向導。

          第二步選擇導入類型,我們直接選擇Excel文件即可。

          第三步為選擇數(shù)據(jù)源的路徑,我們找到對應的數(shù)據(jù)后,勾選需要導入的表。

          完成前文的操作之后便可以點擊“>>”跳轉至最后的步驟,當然中間還有幾個調整數(shù)據(jù)的步驟,但此次數(shù)據(jù)十分工整,不需要進行額外操作。

          到達下圖的界面,我們按照指引直接點擊“開始”即可,如導入成功,會在日志欄中顯示Finished successfully,如下圖所示。

          6.2 數(shù)據(jù)清洗

          照舊先篩選出訂單狀態(tài)為交易成功的行,并提取用戶昵稱、付款時間兩個字段。這里我們稍微修改了列名,把`用戶昵稱`修改成`c_id`,`付款時間`修改為`paytime`,`交易狀態(tài)`修改成了`status`。

          我們后續(xù)的查詢都是基于篩選后的數(shù)據(jù),因此這里新建一個表sheet2去存儲查詢結果。

          --?步驟一:篩選訂單狀態(tài)為”交易成功“的行,并輸出表sheet2:用戶昵稱[c_id]、付款時間[paytime]
          CREATE?table?sheet2?as
          SELECT?c_id,paytime
          FROM?sheet1
          WHERE?`status`='交易成功';

          6.3 計算首單時間

          此步驟只需要對用戶昵稱進行groupby,再求最小值即可,不多贅述。

          --?步驟二:找出每個用戶的首單時間
          SELECT?c_id,min(paytime)?f_time
          FROM?sheet2
          GROUP?BY?c_id;

          6.4 計算月份差,重采樣首付時間

          此步驟中會涉及到兩個重要的函數(shù):

          1. 與Excel類似,MySQL對時間戳重采樣也是用YEAR()、MONTH()等函數(shù)
          2. 用于計算日期差的TIMESTAMPDIFF,具體語法為TIMESTAMPDIFF(頻率,起始時間,結束時間)

          當然在計算月份差之前,需要以用戶名稱作為依據(jù),拼接用戶的首單時間。但由于數(shù)據(jù)量較大,拼接需要重復遍歷整個表很多遍,耗時很長。而當前查詢的結果并不是最終結果,我們只需要確保查詢語句沒有問題即可。因此我們引入分頁查詢(LIMIT語句)來限制查詢結果的行數(shù),從而提高查詢效率。

          --?步驟三:求出月份差,對首付時間進行重采樣
          SELECT?
          ?a.c_id,
          ?b.f_time,
          ?TIMESTAMPDIFF(MONTH,b.f_time,a.paytime)?m_diff,
          ?CONCAT(YEAR(b.f_time),"年",MONTH(b.f_time),"月")?y_m
          FROM?sheet2?a
          LEFT?JOIN?(
          ?SELECT?c_id,min(paytime)?f_time
          ?FROM?sheet2
          ?GROUP?BY?c_id
          --??LIMIT測試時用,為了提升效率
          ?LIMIT?0,7000
          )?b?on?a.c_id=b.c_id
          --?同樣是為了提升效率而使用
          WHERE?b.f_time?is?NOT?NULL;

          6.5 計算留存量

          我們只需要將前面的三個步驟作為子查詢,并以`首單時間`以及`月份差`作為條件對數(shù)據(jù)進行分組,用DISTINCT篩選出唯一的`用戶ID`即可求出我們所需的留存量。這里創(chuàng)建一個名為cohort的表儲存查詢結果。

          --?步驟四:通過首付時間和月份差進行分組,求出唯一的用戶id數(shù),并輸出為表[cohort]
          CREATE?table?cohort?as
          SELECT?c.y_m?"首付月份",c.m_diff"月份差",COUNT(DISTINCT?c.c_id)?"留存量"
          FROM?(
          SELECT?
          ?a.c_id,
          ?b.f_time,
          ?TIMESTAMPDIFF(MONTH,b.f_time,a.paytime)?m_diff,
          ?CONCAT(YEAR(b.f_time),"年",MONTH(b.f_time),"月")?y_m
          from?sheet2?a
          LEFT?JOIN?(
          ?SELECT?c_id,min(paytime)?f_time
          ?FROM?sheet2
          ?GROUP?BY?c_id
          )?b?on?a.c_id=b.c_id
          --?為了提升效率而使用
          WHERE?b.f_time?is?NOT?NULL
          )?c
          GROUP?BY?c.y_m,c.m_diff;

          查詢結果如下。相比于步驟三,我們這里刪除了用于分頁查詢的LIMIT語句,但依然保留了WHERE b.f_time is NOT NULL。這里的where語句并沒有篩選任何一行,但有無這一句的查詢效率相差非常大,分別為0.739s和125.649s。這里涉及到SQL優(yōu)化的問題,有機會以后專門整理一篇文章分享給各位。

          6.6 計算留存率

          我們有了留存量的表格,計算留存率便非常容易,只要讓每一期的留存率都除以首月的留存率即可。

          --?步驟五:計算留存率(基礎版)
          SELECT?c.`首付月份`,CONCAT(ROUND((c.`留存量`/m.`留存量`)*100,2),"%")?留存率
          FROM?cohort?c
          LEFT?JOIN?(
          ?SELECT?首付月份,留存量
          ?FROM?cohort
          ?where?`月份差`=0
          )?m?
          on?c.`首付月份`=m.`首付月份`;

          留存率結果如上圖,但結果并不利于觀察和分析,因此接下來的進階版將通過case when語句,加入億點細節(jié)來優(yōu)化下展示格式。

          --?步驟五:計算留存率(進階版)
          SELECT?
          ?n.`首付月份`,
          ?AVG(n.`留存量`)?"本月新增",
          ?CONCAT(sum(n.`+1月`),"%")?"+1月",
          ?CONCAT(sum(n.`+2月`),"%")?"+2月",
          ?CONCAT(sum(n.`+3月`),"%")?"+3月",
          ?CONCAT(sum(n.`+4月`),"%")?"+4月",
          ?CONCAT(sum(n.`+5月`),"%")?"+5月"
          FROM(
          ?#?一級子查詢:轉置表格,將月份差作為列名
          ?SELECT?
          ??a.`首付月份`,
          ??a.`留存量`,
          ??CASE?a.`月份差`?when?1?THEN?a.`留存率`?ELSE?0?END?"+1月",
          ??CASE?a.`月份差`?when?2?THEN?a.`留存率`?ELSE?0?END?"+2月",
          ??CASE?a.`月份差`?when?3?THEN?a.`留存率`?ELSE?0?END?"+3月",
          ??CASE?a.`月份差`?when?4?THEN?a.`留存率`?ELSE?0?END?"+4月",
          ??CASE?a.`月份差`?when?5?THEN?a.`留存率`?ELSE?0?END?"+5月"
          ?FROM(
          ??#?二級子查詢:計算留存率
          ??SELECT?a.`首付月份`,b.`留存量`,a.`月份差`,ROUND((a.`留存量`/b.`留存量`)*100,2)?留存率
          ??FROM?cohort?a
          ??LEFT?JOIN?(
          ???#?三級子查詢:查詢首月用戶量
          ???SELECT?`首付月份`,`留存量`
          ???FROM?cohort
          ???WHERE?cohort.`月份差`=0
          ?)?b
          ?on?a.`首付月份`=b.`首付月份`
          ?)?a
          )?n
          GROUP?BY?n.`首付月份`;

          正如“分析方法確定”環(huán)節(jié)中提及,Excel中通過自然月去劃分月份的偏移量,而MySQL中則直接將付款時間和首單時間相減。我們使用的TIMESTAMPDIFF函數(shù)的邏輯為結束日期的DAY參數(shù)大于等于起始日期的DAY參數(shù)時,月份差才會+N。即:

          • 起始日期為9月30日,終止日期大于等于10月30日時,月份差才不為0。
          • 起始日期為10月31日,終止日期大于等于12月1日時,月份差才不為0。
          • 起始日期為1月30或31日,終止日期大于等于3月1日時,月份差才不為0,平/閏年一樣。

          對比可知,算法1中留存率會出現(xiàn)小幅度的回升,但在算法2則隨時間增加而遞減。由此可知,不同的計算標準對結果影響非常大,可能會造成誤判,因此數(shù)據(jù)分析中確認標準非常重要

          七、Python實現(xiàn)

          作為壓軸,肯定是路子野、效率高、操作騷的Python。得益于pandas強大的分組功能及非常多的奇技淫巧,Python的實現(xiàn)相比于Excel或MySQL會更加簡單,但實現(xiàn)路徑會比較抽象,需要注入一點想象力。按慣例先盤實現(xiàn)思路:

          1. 數(shù)據(jù)清洗:刪除訂單狀態(tài)為”交易失敗“的行
          2. 拼接首單時間:計算每個用戶首單時間,并拼接為新的dataframe
          3. 求留存量:對數(shù)據(jù)分組,并求唯一的客戶昵稱數(shù)
          4. 求留存率:用首月留存量除整個留存量的dataframe

          7.1 數(shù)據(jù)清洗

          此步驟只需要調用drop函數(shù)即可完成刪除,難度不大,核心是找到訂單狀態(tài)為“交易失敗”的所在行的行索引。

          df.drop(index=df[df['訂單狀態(tài)']?==?'交易失敗'].index,?axis=1,?inplace=True)

          7.2 拼接首單時間

          調用分組聚合函數(shù)groupby以及數(shù)據(jù)拼接函數(shù)merge便能完成我們的需求,都是常規(guī)操作

          df_f?=?df.groupby(by='客戶昵稱')['付款時間'].min().to_frame(name='首單時間')
          df_f.reset_index(inplace=True)

          #?合并新的dataframe,包含客戶昵稱,付款時間,首單時間
          df_f?=?df[['客戶昵稱',?'付款時間']].merge(df_f)

          7.3 計算留存量

          接下來就是見證騷操作的時刻了。在pandas的分組聚合當中,對時間戳進行重采樣不要太簡單,只需要修改freq參數(shù)即可。核心思路:

          • 利用groupby函數(shù)對首單時間和付款時間進行分組,獲得復合索引的series
          • 利用pd.Grouper對首單時間和付款時間進行重采樣
          • 利用nunique函數(shù)求不重復值個數(shù)
          • 利用unstack函數(shù)將復合索引的series轉為dataframe
          #?通過首單時間及付款時間進行分組,獲得每個時間段的不重復客戶數(shù)量
          df_f?=?df_f.groupby(by=[pd.Grouper(key='首單時間',?freq='m'),?pd.Grouper(key='付款時間',?freq='m')])['客戶昵稱'].nunique()

          #?將復合索引的series轉置為dataframe
          df_f?=?df_f.unstack()

          獲得的結果如上圖。如果有看Excel或MySQL實現(xiàn)方式的看官可能有會有疑問,為什么python不用計算月份差而其他兩種需要。那是因為這種分組方式,首月用戶量都分布在表格的對角線上,在Excel的數(shù)據(jù)透視表或者MySQL當中,等差地移動單元格并不是一件容易的事,但對于Python來說,不過是一個for循環(huán)。

          for?i?in?range(len(df_f.index)):
          ?df_f.iloc[i]?=?df_f.iloc[i].shift(periods=-i)
          ??
          #?重置columns
          df_f.columns?=?['本月新增',?'+1月',?'+2月',?'+3月',?'+4月',?'+5月']

          shift函數(shù)常用于移動dataframe或series,具體參數(shù)如下:

          • axis:針對dataframe:{0:"向下移動" , 1:"向右移動"},針對series:向下移動
          • periods:移動的步長,當periods為負時,向上/左移動
          • fill_value:補充NaN的值

          得到如下結果

          7.4 計算留存率

          盡管pandas非常強大,但此步驟中,如通過df_f/df_f[‘首月’]計算,結果是全為NaN的dataframe。不過我們可以使用apply函數(shù)遍歷dataframe來實現(xiàn)。

          df_1?=?df_f.apply(count_per,?axis=0,?args=(df_f['本月新增'],))
          df_1['本月新增']=df_f['本月新增']

          def?count_per(s,?dx):
          ????a=[f'{i}%'?if?str(i)!='nan'?else?0?for?i?in?round((s?/?dx)?*?100,?2)]
          ????return?a

          作為pandas中最好用的函數(shù)之一,apply的詳細用法各位參考官方文檔即可,這里僅提三點注意事項:

          1. 在apply中調用的函數(shù)不需要加括號,僅提供函數(shù)名即可
          2. 向apply調用的函數(shù)傳遞變量,只需賦值給args,如果僅傳遞一個變量,要在變量后加上 “,”號
          3. 調用的函數(shù)當中第0個參數(shù)由self提供,從第一個變量開始才是args中的變量,即上面函數(shù)中,dx對應的是df_f['本月新增']

          獲得結果如下,完美完成任務:

          八、復盤總結

          先回顧下同期群分析的重點

          • 同期群分析指將用戶進行同期群劃分后,對比不同同期群組用戶的相同指標的分析方法
          • 同期群分析是產(chǎn)品數(shù)據(jù)分析的核心,能細致地監(jiān)控用戶行為,衡量用戶價值
          • 時間的劃分標準對分析結果影響很大,確定標準非常重要

          最后總結下本次ESP實現(xiàn)方式中分別涉及到的重要知識點

          工具重要知識點
          Excel- 數(shù)據(jù)透視表
          - VLOOKUP函數(shù)
          - 時間重采樣函數(shù):YEAR、MONTH
          - 時間差函數(shù):DATEDIF
          - 條件函數(shù):IF、COUNTIFS
          MySQL- 時間重采樣函數(shù):YEAR、MONTH
          - 時間差函數(shù):TIMESTAMPDIFF
          - 流程控制函數(shù):CASE WHEN
          Python- 分組api:pd.Grouper()
          - 不重復計數(shù):nunique()
          - 元素移動:shift()
          - apply()


          那么本次的分享到這里便結束了。至于同期群分析如何應用到實際業(yè)務問題中,我們留到下一篇商業(yè)分析實戰(zhàn)再詳細講解。如果寫出來的話,一定不會鴿,一定不會~鴿!

          我是HeoiJin,不要期待有下篇~


          我們的文章到此就結束啦,如果你喜歡今天的Python 實戰(zhàn)教程,請持續(xù)關注Python實用寶典。

          有任何問題,可以在公眾號后臺回復:加群,回答相應紅字驗證信息,進入互助群詢問。

          原創(chuàng)不易,希望你能在下面點個贊和在看支持我繼續(xù)創(chuàng)作,謝謝!

          點擊下方閱讀原文可獲得更好的閱讀體驗

          Python實用寶典?(pythondict.com)
          不只是一個寶典
          歡迎關注公眾號:Python實用寶典

          瀏覽 46
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中国老太卖婬视频播放 | 色色影音先锋 | 黄色毛片人妻内内射 | 亚洲靠逼视频免费看 | 精品三级视频 |