91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Python進行同期群分析

發布時間:2023-03-25 15:40:55 來源:億速云 閱讀:101 作者:iii 欄目:開發技術

本篇內容主要講解“怎么使用Python進行同期群分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么使用Python進行同期群分析”吧!

同期群分析

同期群分析概念

同期群(Cohort)的字面意思(有共同特點或舉止類同的)一群人,比如不同性別,不同年齡。

同期群分析:比較的是相似群體隨時間的變化。

產品會隨著你的開發和測試而不斷迭代,這就導致在產品發布第一周就加入的用戶和后來才加入的用戶有著不同的體驗。比如,每個用戶都會經歷一個生命周期:從免費試用,到付費使用,最后停止使用。同時,在這期間里,你還在不停地對商業模式進行調整。于是,在產品上線第一個月就“吃螃蟹”的用戶勢必與四個月后才加入的用戶有著不同的上手體驗。這對用戶流失率會有什么影響?我們用同期群分析來尋找答案。

每一組用戶構成一個同期群,參與整個試驗過程。通過比較不同的同期群,你可以獲知:從總體上看,關鍵指標的表現是否越來越好了。

結合到用戶分析層面,比如不同月份獲取的用戶,不同渠道新增用戶,具備不同特征的用戶(比如微信里每天至少和10個以上朋友微信的用戶)。

同期群分析(Cohort Analysis),將這些具有不同特征的人群進行對比分析,以發現他們在時間維度下的行為差異。

因此,同期群分析主要用于以下2點:

  • 對比 不同 同期群群體同一體驗周期的數據指標,驗證產品迭代優化的效果

  • 對比 同一 同期群群體不同體驗周期(生命周期)的數據指標,發現長線體驗的問題

 我們在進行同期群分析的時候,大致可以劃分為2個流程:確定同期群分組邏輯和確定同期群分析的關鍵數據指標

  • 具有相似行為特征的群體

  • 具有相同時間周期的群體

例如:

  1. 按獲客月份(按周甚至按天分組)

  2. 按獲客渠道

  3. 按照用戶完成的特定行為,比如用戶訪問網站的次數或者購買次數來分類。

關于關鍵數據指標,需要是基于時間維度下的比如留存、營收、自傳播系數等等。

下面是以留存率作為指標的案例示例:

怎么使用Python進行同期群分析

下面是某電商的運營數據,我們將以該數據演示用python進行同期群分析。

同期群分析案例詳解:

數據是某電商用戶付費日志,日志字段包含日期、付費金額和用戶id,已脫敏處理。

數據讀取

import pandas as pd

df = pd.read_csv('日志.csv', encoding="gb18030")
df.head()

怎么使用Python進行同期群分析

分析方向

分組邏輯:

這里只按照用戶的初始購買月份進行分組,如果日志包含的分類字段更多(比如 渠道、性別或者年齡等),可以考慮更多種分組邏輯。

關鍵數據指標:

針對此份數據,至少有3個數據指標可以進行分析:

  1. 留存率

  2. 人均付款金額

  3. 人均購買次數

數據預處理

因為我們是按照月份進行分組,所以需要先將日期重采樣為月份:

df['購買月份'] = pd.to_datetime(df.日期).dt.to_period("M")
df.head()

怎么使用Python進行同期群分析

計算每個用戶在每個月的付費總額:

order = df.groupby(["uid", "購買月份"], as_index=False).agg(
    月付費總額=("付費金額","sum"),
    月付費次數=("uid","count"),
)
order.head()

怎么使用Python進行同期群分析

計算每個用戶的首單購買月份作為同期群分組,并將其對應到原始數據上:

order["首單月份"] = order.groupby("uid")['購買月份'].transform("min")
order.head()

怎么使用Python進行同期群分析

計算每條購買記錄的時間與首單購買時間的月份差,并重置月份差標簽:

order["標簽"] = (order.購買月份-order.首單月份).apply(lambda x:"同期群人數" if x.n==0 else f"+{x.n}月")
order.head()

怎么使用Python進行同期群分析

兩個月份均為時期類型,相減后得到object類型的列,而該列每個元素的類型是pandas._libs.tslibs.offsets.MonthEnd

MonthEnd類型具有屬性n能返回具體差值整數。

同期群分析

前面我們說了至少有3個數據指標可以進行分析:

  1. 留存率

  2. 人均付款金額

  3. 人均購買次數

從留存率角度進行同期群分析

通過數據透視表可以一次性計算所需的數據:

cohort_number = order.pivot_table(index="首單月份", columns="標簽",
                             values="uid", aggfunc="count",
                             fill_value=0).rename_axis(columns="留存率")
cohort_number

怎么使用Python進行同期群分析

注意:rename_axis(columns=None)用于刪除列標簽的軸名稱。rename_axis(columns=“留存率”)則設置軸名稱為留存率。

將 本月新增 列移動到第一列:

cohort_number.insert(0, "同期群人數", cohort_number.pop("同期群人數"))
cohort_number

怎么使用Python進行同期群分析

具體過程是先通過pop刪除該列,然后插入到0位置,并命名為指定的列名。

 在本次的分析中,留存率的具體計算方式為:+N月留存率=+N月付款用戶數/首月付款用戶數

cohort_number.iloc[:, 1:] = cohort_number.iloc[:, 1:].divide(cohort_number.本月新增, axis=0)
cohort_number

怎么使用Python進行同期群分析

以百分比形式顯示,并設置顏色:

out1 = (cohort_number.style
        .format("{:.2%}", subset=cohort_number.columns[1:])
        .bar(subset="同期群人數", color="green")
        .background_gradient("Reds", subset=cohort_number.columns[1:], high=1, axis=None)
        )
out1

怎么使用Python進行同期群分析

至此計算完畢。

從人均付款金額角度進行同期群分析

要從從人均付款金額角度考慮,需要考慮同期群基期這個整體。具體計算方式是先計算各月的付款總額,然后除以基期的總人數:

cohort_amount = order.pivot_table(index="首單月份", columns="標簽",
                                  values="月付費總額", aggfunc="sum",
                                  fill_value=0).rename_axis(columns="人均付款金額")
cohort_amount.insert(0, "首月人均付費", cohort_amount.pop("同期群人數"))
cohort_amount.insert(0, "同期群人數", cohort_number.同期群人數)
cohort_amount.iloc[:, 1:] = cohort_amount.iloc[:, 1:].divide(cohort_amount.同期群人數, axis=0)
out2 = (cohort_amount.style
        .format("{:.2f}", subset=cohort_amount.columns[1:])
        .background_gradient("Reds", subset=cohort_amount.columns[1:], axis=None)
        .bar(subset="同期群人數", color="green")
        )
out2

怎么使用Python進行同期群分析

可以看到,12月份的同期群首月新用戶人均消費為703.43元,然后逐月遞減,到+4月后這些用戶人均消費僅11.41元。而隨著版本的迭代發展,新增用戶的首月消費并沒有較大提升,且接下來的消費趨勢反而不如12月份。由此可見產品的發展受到了一定的瓶頸,需要思考增長營收的出路了。

一般來說, 通過同期群分析可以比較好指導我們后續更深入細致的數據分析,為產品優化提供參考。

從人均購買次數角度進行同期群分析

依然按照上面一樣的套路:

cohort_count = order.pivot_table(index="首單月份", columns="標簽",
                                 values="月付費次數", aggfunc="sum",
                                 fill_value=0).rename_axis(columns="人均購買次數")
cohort_count.insert(0, "首月人均頻次", cohort_count.pop("同期群人數"))
cohort_count.insert(0, "同期群人數", cohort_number.同期群人數)
cohort_count.iloc[:, 1:] = cohort_count.iloc[:,
                                             1:].divide(cohort_count.同期群人數, axis=0)
out3 = (cohort_count.style
        .format("{:.2f}", subset=cohort_count.columns[1:])
        .background_gradient("Reds", subset=cohort_count.columns[1:], axis=None)
        .bar(subset="同期群人數", color="green")
        )
out3

怎么使用Python進行同期群分析

可以得到類似上述一致的結論。

每月總體付費情況

下面我們看看每個月的總體消費情況:

order.groupby("購買月份").agg(
    付費人數=("uid", "count"),
    人均付款金額=("月付費總額", "mean"),
    月付費總額=("月付費總額", "sum")
)

怎么使用Python進行同期群分析

可以看到總體付費人數和付費金額都在逐月下降。

將結果導出網頁或截圖

對于Styler類型,我們可以調用render方法轉化為網頁源代碼,通過以下方式即可將其導入到一個網頁文件中:

with open("out.html", "w") as f:
    f.write(out1.render())
    f.write(out2.render())
    f.write(out3.render())

如果你的電腦安裝了谷歌游覽器,還可以安裝dataframe_image,將這個表格導出為圖片。

安裝:pip install dataframe_image

import dataframe_image as dfi

dfi.export(obj=out1, filename='留存率.jpg')
dfi.export(obj=out2, filename='人均付款金額.jpg')
dfi.export(obj=out3, filename='人均購買次數.jpg')

dfi.export的參數:

  • obj : 被導出的Datafream對象

  • filename : 文件保存位置

  • fontsize : 字體大小

  • max_rows : 最大行數

  • max_cols : 最大列數

  • table_conversion : 使用谷歌游覽器或原生’matplotlib’, 只要寫非’chrome’的值就會使用原生’matplotlib’

  • chrome_path : 指定谷歌游覽器位置

 整體完整代碼

import pandas as pd
import dataframe_image as dfi

df = pd.read_csv('日志.csv', encoding="gb18030")
df['購買月份'] = pd.to_datetime(df.日期).dt.to_period("M")
order = df.groupby(["uid", "購買月份"], as_index=False).agg(
    月付費總額=("付費金額", "sum"),
    月付費次數=("uid", "count"),
)
order["首單月份"] = order.groupby("uid")['購買月份'].transform("min")
order["標簽"] = (
    order.購買月份-order.首單月份).apply(lambda x: "同期群人數" if x.n == 0 else f"+{x.n}月")
cohort_number = order.pivot_table(index="首單月份", columns="標簽",
                                  values="uid", aggfunc="count",
                                  fill_value=0).rename_axis(columns="留存率")
cohort_number.insert(0, "同期群人數", cohort_number.pop("同期群人數"))
cohort_number.iloc[:, 1:] = cohort_number.iloc[:,1:].divide(cohort_number.同期群人數, axis=0)
out1 = (cohort_number.style
        .format("{:.2%}", subset=cohort_number.columns[1:])
        .bar(subset="同期群人數", color="green")
        .background_gradient("Reds", subset=cohort_number.columns[1:], high=1, axis=None)
        )
cohort_amount = order.pivot_table(index="首單月份", columns="標簽",
                                  values="月付費總額", aggfunc="sum",
                                  fill_value=0).rename_axis(columns="人均付款金額")
cohort_amount.insert(0, "首月人均付費", cohort_amount.pop("同期群人數"))
cohort_amount.insert(0, "同期群人數", cohort_number.同期群人數)
cohort_amount.iloc[:, 1:] = cohort_amount.iloc[:, 1:].divide(cohort_amount.同期群人數, axis=0)
out2 = (cohort_amount.style
        .format("{:.2f}", subset=cohort_amount.columns[1:])
        .background_gradient("Reds", subset=cohort_amount.columns[1:], axis=None)
        .bar(subset="同期群人數", color="green")
        )
cohort_count = order.pivot_table(index="首單月份", columns="標簽",
                                 values="月付費次數", aggfunc="sum",
                                 fill_value=0).rename_axis(columns="人均購買次數")
cohort_count.insert(0, "首月人均頻次", cohort_count.pop("同期群人數"))
cohort_count.insert(0, "同期群人數", cohort_number.同期群人數)
cohort_count.iloc[:, 1:] = cohort_count.iloc[:,
                                             1:].divide(cohort_count.同期群人數, axis=0)
out3 = (cohort_count.style
        .format("{:.2f}", subset=cohort_count.columns[1:])
        .background_gradient("Reds", subset=cohort_count.columns[1:], axis=None)
        .bar(subset="同期群人數", color="green")
        )
outs = [out1, out2, out3]
with open("out.html", "w") as f:
    for out in outs:
        f.write(out.render())
        display(out)

dfi.export(obj=out1, filename='留存率.jpg')
dfi.export(obj=out2, filename='人均付款金額.jpg')
dfi.export(obj=out3, filename='人均購買次數.jpg')

怎么使用Python進行同期群分析

到此,相信大家對“怎么使用Python進行同期群分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

璧山县| 滦南县| 东兰县| 博客| 德钦县| 云霄县| 陇西县| 太湖县| 尼木县| 蓝山县| 华容县| 诸城市| 娄烦县| 崇州市| 涞水县| 来宾市| 祁连县| 塘沽区| 蓬安县| 台南市| 门头沟区| 高唐县| 黔江区| 大埔区| 阳城县| 桦川县| 宁德市| 新邵县| 杭州市| 甘南县| 建湖县| 泰宁县| 湘潭市| 章丘市| 抚松县| 迁安市| 榆林市| 寿光市| 营口市| 阿合奇县| 永胜县|