Pandas08

Pandas01
Pandas02
Pandas03
Pandas04
Pandas05
Pandas06
Pandas07

文章目录

    • 内容回顾
    • 同期群分析
      • 1.1 同期群分析概念
      • 1.2 案例代码
    • 数据分析报告
    • 数据分析工作内容
    • 数据分析简历说明
    • 用户生命周期标签
      • 1 什么是生命周期标签
      • 2 如何计算生命周期标签

内容回顾

TGI 偏好分析

  • TGI 目标群体指数 目标群体在某个问题上的平均水平/整体平均水平 *100
  • 找合适产品投放(首次上市推广)的城市

评论文本分析

  • 非结构化数据(文本数据)的处理

    • 英文 跨境电商 亚马逊 shoppy 虾皮
      • 分词 → 词形还原 → 去停用词 → 统计词频 → 画词云图 (pyecharts)
      • nltk
    • 中文
      • 分词 →去停用词 → 统计词频 → 画词云图 (pyecharts)
      • jieba
    • 评论分类(好评/差评) 或者 差评进一步划分(物流/质量/客服) 见扩展资料 机器学习模型
  • 结构化数据的处理

    • 评论的数量, 评论的时间
    • 画图分析
      • 评论数量随时间的变化
      • 好评 中评 差评的比例

同期群分析

1.1 同期群分析概念

将用户按初始行为的发生时间划分为不同的群组,进而分析相似群组的行为如何随时间变化

使用场景: 对比不同月份用户的留存(复购)的情况

在这里插入图片描述

上表的百分比为留存率,留存率=某月复购用户数/对应期新增用户数量

同期群分析除了对比复购的情况, 指标也可以调整, 比如比较不同月份新增用户的客单价的变化情况

在这里插入图片描述

还可以用来比较不同渠道的质量

在这里插入图片描述

推广渠道

  • 线上
    • 微信, 微博, 抖音, 头条, 百度… 线上广告
    • 点广告跳转下载, 跳转小程序
  • 线下
    • 公交站, 地铁站, 公交车 实体广告
    • 地推团队, 带着广告和礼物 扫码下载送礼物
  • 下载的链接都会带着不同的id download.XXX.net/XXXX.apk?id=1e76827567615
  • 评估渠道质量
    • 量 (每月新增用户数量)
    • 留存率(同期群)
    • 价格

1.2 案例代码

通过销售数据计算每个月的新用户在后面月份的复购情况

加载数据

import pandas as pd
df = pd.read_excel('C:/Develop/深圳42/data/group_anlysis.xlsx')
df.info()
df.head()
df.describe()

提取年月信息

df['年月标签'] = df['付款时间'].str[:7] # 字符串截取, 获取年月字符串数据
df['年月标签'].value_counts().sort_index()

在这里插入图片描述

  • 每个月要知道当前月份的新增用户 如果我们有用户注册的表, 知道了用户的注册时间, 直接可以计算了
  • 在这里我们把用户的首次购买作为 新增的标志
  • 计算当前月份的新增用户, 在后面的月份是否有购买 有购买算复购

以2023年2月数据为例, 先算出一个月的数据来, 再for循环计算其它月份的

from pandas import DataFrame
month='2023-02'
sample:DataFrame=df.loc[df['年月标签']==month]

sample.shape
#%%
# 从2月的销售流水中去重得到所有2月的用户ID的唯一值
sample_unique = sample.drop_duplicates(subset=['用户ID'])
#%%
# 获取1月的数据
history_df = df.loc[df['年月标签']=='2023-01'] 
# 判断2月的用户是否在1月的用户数据中, 如果在数据中说明是1月的留存(复购)用户, 如果不在1月的用户数据中, 说明是2月的新增用户
sample_unique['用户ID'].isin(history_df['用户ID'])
#%%
# ~ 取反的符号  True →False  False →True
# 对在1月出现的ID范围内的数据取反 得到的就是不在这个范围的, 就是2月的新用户
sample_unique_new = sample_unique.loc[~(sample_unique['用户ID'].isin(history_df['用户ID']))]
#%%
# 二月的新增用户
sample_unique_new
#%%
month_list = df['年月标签'].unique().tolist()[2:]
result_list = []
for month in month_list:
    # 取出一个月的数据 
    next_month_df = df.loc[df['年月标签']==month]
    # 新增用户的ID 出现在后面月份的数据中, 说明是复购用户
    retention_users_df = sample_unique_new.loc[sample_unique_new['用户ID'].isin(next_month_df['用户ID'])]
    # 把复购用户数量保存在列表中
    result_list.append([month+'留存情况',retention_users_df.shape[0]])
#%%
result_list
#%%
result_list.insert(0,['2023年2月新增用户:',sample_unique_new.shape[0]])
#%%
result_list

zip方法说明 : zip拉锁的意思, 可以把两个列表拉到一起, 返回一个新的zip对象, 转换成列表以后, 列表的每一个元素是一个元组

list1 = [1,2,3,4,5]
list2= [6,7,8,9,10]
list(zip(list1,list2))

[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]

list1 = [5,6,7,8,9,10,11]
list2 = [1,2,3,4,5,6,7,8,9,10,11]
list(zip(list1,list2))

[(5, 1), (6, 2), (7, 3), (8, 4), (9, 5), (10, 6), (11, 7)]

for j,cnt in zip(list1,list2):
print(j,cnt)

5 1
6 2
7 3
8 4
9 5
10 6
11 7

遍历所有的月份计算每个月的新增用户和复购情况

month_list = df['年月标签'].unique().tolist() # 获取所有月份的列表
final_df = pd.DataFrame() # 准备一个空白的df 用来保存最终的结果
for i in range(len(month_list)-1): # 一共计算11个月
    # 准备一个空白的列表, 用来保存当前月份计算的结果
    count_list = [0]*len(month_list)
    # 外层循环的目的是为了找到每个月的新增用户
    # 先筛选当前月份的数据
    target_month_df = df.loc[df['年月标签']==month_list[i]]
    target_month_df.drop_duplicates(subset=['用户ID'],inplace = True)
    # 如果是第一个月, 不需要判断了,所有的用户都是新用户
    if i==0:
        new_users_df = target_month_df.copy()
    else:
        # 如果不是1月, 2月以后得数据, 需要先获取前面的所有月份的数据  month_list[:i]
        history_df = df.loc[df['年月标签'].isin(month_list[:i])]
        # 判断当前的用户是否在前面的月份出现过, 如果没有出现过 就留下来, 是当前月份的新用户
        new_users_df = target_month_df.loc[(target_month_df['用户ID'].isin(history_df['用户ID']))==False]
    
    # 把新用户的数量保存到列表的第一个元素中
    count_list[0]=new_users_df.shape[0]
    #print(count_list)
    # 内层循环, 用来计算新用户在后面月份的复购情况
    for j,cnt in zip(range(i+1,len(month_list)),range(1,len(month_list))):
        # j 用来循环后面的月份, 从i+1开始, i指向2月份, j就是3月份
        # cnt 用来记录结果的 不管是哪个月份都是从1开始, 第0个元素记录的是新增用户
        next_month_df = df.loc[df['年月标签']==month_list[j]]
        # new_users_df['用户ID'].isin(next_month_df['用户ID']) 是True/False组成的列表 sum求和 计算的是True的数量
        retention_count =(new_users_df['用户ID'].isin(next_month_df['用户ID'])).sum()
        # 保存结果到列表
        count_list[cnt] = retention_count
    # 如果不是第一个月, 需要和历史的月份进行判断, 如果在历史月份中出现过,就不是新用户
    # 要统计的是在前面的月份中,没有出现过的用户ID
    result=pd.DataFrame({month_list[i]:count_list}).T
    final_df = pd.concat([final_df,result])
final_df.columns = ['当月新增','+1月','+2月','+3月','+4月','+5月','+6月','+7月','+8月','+9月','+10月','+11月']

数据分析报告

报告的种类

  • 周期性: 周报, 月报, 日报

    • 月报,周报 打好了框架之后,修改内容就可以了
    • 先展示大盘的指标(比较重要的大家都比较关心的指标), 在分项展开
    • 电商 GMV画折线图 买了多少件, 多少用户消费了, 客单价, 进店的用户数, 转化率 , 动销率, 复购率 , 退货率, 好评率
  • 专题分析

    • 针对提升用户留存做专题
    • 针对618大促做的专题
    • 总分 先做总结, 然后再展开
  • 图文结合, 结论都要有数据的支持, 文字内容不要过多, 展示的图片以 直线图, 直方图, 柱状图, 饼图,散点图为主

    • 复杂的图形, 结合听众决定, 如果都是做数据的, 图形选择的范围可以宽一些
    • 听众并不都是专业人员, 就使用基本图形就可以了

数据分析工作内容

一 提数能力, 响应临时的数据需求

  • 如果有数仓团队, 数据团队比较完整, 数分提数, 计算临时需求是基于数仓同学的开发结果
  • 如果没有数仓团队, 数据团队规模比较小, 数据来源可能是各种系统, 进销存系统, CRM系统(客户关系管理)
  • 主要技能 SQL, Pandas, Excel

二 报告能力

  • 日报, 周报, 月报
  • 专题分析报告

三 专题分析能力

  • 使用不同的分析方法
    • 漏斗分析
    • 多维度拆解(下钻) 分组聚合
    • 当数据有波动的时候, 把时间维度拉长, 是不是周期性波动
    • 对比分析
    • TGI 目标群体指数
    • 同期群 留存 (渠道质量评估的重要指标)
  • 使用不同的运营模型
    • RFM
    • AIPL
    • AAAA
    • AAAAA
    • AARRR
    • 用户生命周期
  • 使用运营模型的时候, 数据分析的同学发挥的作用
    • 用户贴标签, 用标签来区分群体
    • 计算相关的指标, 形成报表, 用来考核模型使用的情况
  • 用户生命周期模型
    • 导入期
    • 成长期
    • 成熟期
    • 沉睡期
    • 流失期

四 指标波动的监控, 原因的分析

  • 周期性
  • 多维度拆解

五 AB测试

  • 中大厂 每天都在做很多AB测试
  • 小厂 关键的迭代可能会用, 或者不具备AB测试的能力

数据分析简历说明

在这里插入图片描述

写在简历上的一定都能说出来

  • 说不出来的不要写
  • 代码的细节不要出现在简历里

技术栈的问题

  • 不一定非得跟Pandas沾边
  • Pandas 处理Excel, 数据是从不同系统里导出来的
    • 进销存, CRM等等系统
    • 有不同的电商平台, 抖音, 淘宝, 天猫, 京东, 拼多多, 需要把所有的数据合到一起
    • 数据团队偏机器学习的, 后面是做数据挖掘, 模型训练的
  • 数据是Mysql Hadoop hive里存的 直接用SQL来计算, FineBI FineReport进行展示

漏斗分析

  • 举例说明如何用的
  • 监控各阶段转化率, 当转化率波动出现问题的时候, 及时的定位问题, 发现原因及时修改

专题分析(618大促专题)

个人职责

  • 活动前 制定目标
    • GMV/ 流量/ 转化/ 拉新(新增用户) / 投放预算 (CPC)
  • 活动中
    • 对关键指标进行监控, 如果有异常的波动及时发现并分析原因
  • 活动后
    • 对活动进行总结, 复盘出具分析报告
    • 活动是否达到了目标, 哪里做的好, 哪里做的不好

数据分析简历 项目的内容可以写

大促专题分析

  • 计算了关键的指标, 流量指标, 销售额的指标

  • 漏斗分析

    • 打开 → 购买流程
    • 计算各阶段的转化率
    • 打开→搜索, 搜索→详情, 详情→加购, 加购→下单, 下单→支付

RFM模型

  • 用户打标签
    • 分几个群体
  • 指定相关的指标, 对模型的落地情况进行监控
    • 不同群体人群数量波动情况
    • 关键群体的消费数据

用户生命周期标签

用户标签数据——用户生命周期类标签,如何计算

结合用户生命周期的专题分析可以有很多种

  • 流失用户的召回
    • 当前的流失率, 回流率
    • 对采用不同召回策略用户的数据进行监控
    • 回收数据进行对比
  • 形成期用户的促活

1 什么是生命周期标签

首先,什么是生命周期模型呢?

其实本质上,就是用户的一种分层、分类的方法论。是按照用户在产品中的阶段进行的划分,反映了用户从接触产品到离开产品的整个过程。从技术层面,可以理解成一个用户标签,标签值有新用户、成长期用户、流失用户等。

用户生命周期的概念,在用户增长系统中会用的比较多,后面会针对用户生命周期的应用、落地进行详细分享。这里进行概要的阐述。

通常来讲,用户的生命周期分为如下图的五个阶段:

在这里插入图片描述

  • 引入期:用户刚刚开始使用产品或者服务,初步建立起品牌的认知
  • 成长期:用户对产品服务开始逐渐信任,使用频次、深度不断加强
  • 成熟期:用户对平台的服务非常熟悉,可以无障碍地完成各种内容,使用的频次深度趋于稳定
  • 休眠期:用户逐步丧失对平台的兴趣,使用频率、热度越来越低
  • 流失期:用户完全不再使用该产品

生命周期模型能做啥呢?针对不同阶段的用户,可以进行精细化的运营、精准施策。

那如何判断一个用户是属于什么阶段呢?这个其实就是标签的计算逻辑了。

2 如何计算生命周期标签

核心问题来了,如何计算生命周期标签呢?

计算的方式有千千万,但总体上来讲,基本分了两类:一类是通过逻辑规则进行判断生命周期的阶段,一类是通过算法来进行判断。

(1)通过逻辑规则,判断生命周期阶段

先来一个示例图,这是一个用户生命周期的划分(和上面的例子比,更加细分了一下,但逻辑是一致的):

在这里插入图片描述

这里最主要的几个数据,包括:用户首单时间、有效订单量及发生时间、最近一单时间、购物频率的数据,就可以计算出比较系统的用户的生命周期。

这里设置了四个时间边界参数,分别是:形成边界、活跃边界、沉睡边界、流失边界。这四个是判断时间的主要参数。可以按照不同的业务特点进行灵活设置。

具体的计算逻辑上,可参考下面的逻辑全景图:

在这里插入图片描述

首先,找出全部历史有订单的用户,判断历史第一单是否在6个月以内;

  • 接下来,判断用户是否只下了1单,如果是的话,根据这单产生的时间,把用户划分为三个不同的形成阶段;
  • 如果用户下了两单及以上,根据用户最后一个订单的产生时间,把用户划分为三个不同的适应阶段;

如果用户第一单在6个月以前,那么判断用户的最后一单的产生时间。

  • 如果在1年以前,那么用户处于流失阶段;
  • 如果在6个月到1年之间,那么用户处于准流失阶段;
  • 如果在3个月到6个月之间,那么用户处于沉睡阶段。

最后根据用户近3个月与近6个月的购物频率对比,

  • 如果频率增加,那么用户处于成长阶段;
  • 频率不变,用户处于稳定阶段;
  • 频率减少,用户处于衰退阶段。

根据最后一单的产生时间

  • 如果在1个月内,那么用户的对应阶段分别为成长1、稳定1、衰退1;
  • 如果在1-3个月内,那么用户对应的阶段分别为成长2、稳定2、衰退2。

(2)通过算法,判断生命周期阶段

在算法层面,其实给用户计算生命周期,本质上就是进行用户分类的过程。

关于如何进行用户分类,算法就比较多了,比如可以使用朴素贝叶斯、SVN等。

条件取数

df.loc[]/df.iloc[]

df[df[‘字段’]==]

df.query(‘’)

分组聚合

  • df.groupby().agg()
  • df.groupby(分组字段)[聚合字段].聚合函数()
  • df.pivot_table(index,columns,values,aggfunc)

表连接

df.merge()

pd.concat()

分箱,分组

pd.cut()

df[‘字段’].apply(func)

基本数据处理

  • 去重 drop_duplicates()
  • 排序 sort_values() sort_index()
  • 去缺失值 dropna() fillna()
  • 统计函数 min() max() mean() sum() count() median()中位数 quantile() 分位数 std()标准差

加载数据的时候, 固定的套路

df = pd.read_XXX()

df.info()

df.head()

df.describe()

画图

  • 柱状图
  • 折线图
  • 直方图→ KDE图
  • 散点图→气泡图 →蜂巢图
  • 饼图
  • 热力图 相关性展示
  • 箱线图→ 提琴图
    • IQR= 3/4分位数-1/4分位数

若有错误与不足请指出,关注DPT一起进步吧!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/944249.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网页数据的解析提取之Beautiful Soup

前面博客介绍了正则表达式的相关用法,只是一旦正则表达式写得有问题,得到的结果就可能不是我们想要的了。而且每一个网页都有一定的特殊结构和层级关系,很多节点都用id或 class 作区分所以借助它们的结构和属性来提取不也可以吗? 本篇博客我…

电脑缺失sxs.dll文件要怎么解决?

一、文件丢失问题:以sxs.dll文件缺失为例 当你在运行某个程序时,如果系统提示“找不到sxs.dll文件”,这意味着你的系统中缺少了一个名为sxs.dll的动态链接库文件。sxs.dll文件通常与Microsoft的.NET Framework相关,是许多应用程序…

进军AI大模型-环境配置

语言环境配置 合法上网工具: 这个T子试试,一直稳定。走我链接免费用5天: https://wibnm.com/s/ywtc01/pvijpzy python版本: python3.12 Langchain: Introduction | 🦜️🔗 LangChain v0.3 9月16日升级的版本 pip3…

WebStorm的下载安装指南

下载 打开网站https://www.jetbrains.com/webstorm/download/#sectionwindows 或者直接网盘下载 通过网盘分享的文件:WebStorm-2024.3.1.1.exe 链接: https://pan.baidu.com/s/16JRZjleFYshLbVvZB49-FA?pwdn5hc 提取码: n5hc –来自百度网盘超级会员v6的分享 安…

Vue使用pages构建多页应用

经过上一篇文章,大家对单页应用配置的都有了一定的了解。相信大家应该对如何构建一个 Vue 单页应用项目已经有所收获和体会,在大部分实际场景中,我们都可以构建单页应用来进行项目的开发和迭代,然而对于项目复杂度过高或者页面模块…

springboot506基于Springboot的小区疫情购物系统录(论文+源码)_kaic

摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古…

复习打卡大数据篇——Hadoop MapReduce

目录 1. MapReduce基本介绍 2. MapReduce原理 1. MapReduce基本介绍 什么是MapReduce MapReduce是一个分布式运算程序的编程框架,核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在Hadoop集群上。 MapRed…

RK3506开发板:智能硬件领域的新选择,带来卓越性能与低功耗

在现代智能硬件开发中,选择一款性能稳定、功耗低的开发板是确保产品成功的关键。Rockchip最新推出的RK3506芯片,凭借其卓越的能效比、多功能扩展性和优秀的实时性能,已经成为智能家电、工业控制、手持终端等领域的热门选择。而基于RK3506的Ar…

Python学习(2):注释、数字、文本、列表

1 关于注释 Python 使用井号#作为单行注释的符号, 使用三个连续的单引号’’或者三个连续的双引号"""注释多行内容。 2 数字 2.1 基本运算 解释器像一个简单的计算器:你可以输入一个表达式,它将给出结果值。 表达式语法很直观…

加载Tokenizer和基础模型的解析及文件介绍:from_pretrained到底加载了什么?

加载Tokenizer和基础模型的解析及文件介绍 在使用Hugging Face的transformers库加载Tokenizer和基础模型时,涉及到许多文件的调用和解析。这篇博客将详细介绍这些文件的功能和它们在加载过程中的作用,同时结合代码片段进行解析。 下图是我本地下载好模…

Excel批量设置行高,Excel表格设置自动换行后打印显示不全,Excel表格设置最合适的行高后打印显示不全,完美解决方案!!!

文章目录 说个问题(很严重!!!)写个方案会Python看这里Python环境搭建不存在多行合并存在多行合并 不会Python看这里 说个问题(很严重!!!) 平时处理Excel表格…

goview——vue3+vite——数据大屏配置系统

低代码数据大屏配置系统: 数据来源是可以动态api配置的: 配置上面的api接口后,在数据过滤中进行数据格式的转化。 以上内容,来源于https://gitee.com/dromara/go-view/tree/master-fetch/ 后端代码如下,需要更改…

ADC相关算法以及热敏电阻测温

目录 前言 一、平均值滤波算法 二、快速排序算法的使用 三、中位值滤波算法 四、二分查找法 4.1 二分查找法查找某个元素是否存在 4.2 二分查找法查找接近目标数值的元素的下标 五、NTC热敏电阻实现测温 5.1 分层设计 5.2 软件流程图 ​编辑 5.3 API接口及数据结构 5…

计算机的错误计算(一百九十四)

摘要 用两个大模型计算 其中,一个大模型通过化简,得出正确结果 0;而另外一个在化简过程中出现错误,得出了错误结果。 例1. 计算 下面是一个大模型的推导化简过程。 以上为一个大模型的回答。 下面是另外一个大模型的回复。 点评…

任意文件包含漏洞原理解析及演示

原理 文件包含漏洞:即file inclusion,意思是文件包含,是指当服务器开启allow_url_include选项时,就可以通过PHP的某些特性函数(include(),require()和include_once(),requir_once())…

Linux系统之tree命令的基本使用

Linux系统之tree命令的基本使用 一、tree命令介绍二、tree工具安装三、tree命令帮助3.1 查询帮助信息3.2 tree命令帮助解释 四、tree命令的基本使用4.1 直接使用4.2 *限制显示的层级4.3 仅显示目录4.4 不显示隐藏文件4.5 显示文件大小4.6 彩色输出4.7 输出到文件4.8 输出不同格…

微信小程序性能优化、分包

性能优化是任何应用开发中的重要组成部分,尤其是在移动环境中。对于微信小程序而言,随着用户量的增加和应用功能的丰富,性能优化显得尤为关键。良好的性能不仅提升用户体验,还能增加用户留存率和应用的使用频率。我们将探讨如何在…

【星海随笔】删除ceph

cephadm shell ceph osd set noout ceph osd set norecover ceph osd set norebalance ceph osd set nobackfill ceph osd set nodown ceph osd set pause参考文献: https://blog.csdn.net/lyf0327/article/details/90294011 systemctl stop ceph-osd.targetyum re…

Unity游戏环境交互系统

概述 交互功能使用同一个按钮或按钮列表,在不同情况下显示不同的内容,按下执行不同的操作。 按选项个数分类 环境交互系统可分为两种,单选项交互,一般使用射线检测;多选项交互,一般使用范围检测。第一人…

DVWA安装

这里讲的很清楚,如果是win10的话可能会出现端口80占用的情况, 使用管理员身份运行 cmdnet stop http //停止系统http服务sc config http start disabled //禁用服务的自动启动,此处注意等号后面的空格不可少