数据分析案例——电商平台数据集

数据来源于阿里云天池,为淘宝app平台在2014年11月18日-12月18日的数据。

数据处理

导入相关的包,设置seaborn的绘图风格:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()

使用open看一下数据形式:

filename = 'tianchi_mobile_recommend_train_user.csv'
with open(filename) as f:for _ in range(5):line = f.readline()line.strip()print(line)
user_id,item_id,behavior_type,user_geohash,item_category,time98047837,232431562,1,,4245,2014-12-06 0297726136,383583590,1,,5894,2014-12-09 2098607707,64749712,1,,2883,2014-12-18 1198662432,320593836,1,96nn52n,6562,2014-12-06 10

使用read_csv读取数据:

data = pd.read_csv(filename, sep=',')
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 12256906 entries, 0 to 12256905
Data columns (total 6 columns):#   Column         Dtype 
---  ------         ----- 0   user_id        int64 1   item_id        int64 2   behavior_type  int64 3   user_geohash   object4   item_category  int64 5   time           object
dtypes: int64(4), object(2)
memory usage: 561.1+ MB
data.head()

在这里插入图片描述
behavior_type的值替换为对应的行为:

# 将behavior列改变
behavior_mapping = {'1': 'click', '2': 'collect', '3': 'cart', '4': 'purchase'}
data['behavior_type'] = data['behavior_type'].astype(str).map(behavior_mapping)
data

在这里插入图片描述
检查是否有重复项,即同一时间、同一用户、同一商品、同一个行为:

# 检查重复项
duplicates = data.duplicated(subset=['user_id', 'item_id', 'time', 'behavior_type'])
duplicates[duplicates == True].sum()
6043527

去除重复项:

data = data.drop_duplicates(['user_id', 'item_id'], keep='first')
data

在这里插入图片描述

# 将time列转换成datatime类型
data['time'] = pd.to_datetime(data['time'])
data.loc[:, 'time'] = data['time'].dt.strftime('%m-%d')
data

在这里插入图片描述

每日pv统计

daily_pv = data[data['behavior_type'] == 'click'].groupby(data['time']).size()
daily_pv
time
11-18    141760
11-19    135782
11-20    132636
11-21    125752
11-22    136362
11-23    145400
11-24    141774
11-25    137280
11-26    134526
11-27    137784

每日uv统计

daily_uv = data[data['behavior_type'] == 'click'].groupby(data['time']).user_id.nunique()
daily_uv
time
11-18    6189
11-19    6206
11-20    6096
11-21    6026
11-22    5921
11-23    6115
11-24    6226
11-25    6062
11-26    6064
11-27    6089
11-28    5889
11-29    5944

将pv和uv绘图

fig = plt.figure(figsize=(12, 6))  # 增加图表宽度
ax1 = fig.add_subplot(2, 1, 1)  # 第一个坐标轴(2行1列的第一个)
ax2 = fig.add_subplot(2, 1, 2)  # 第二个坐标轴(2行1列的第二个)
# 在第一个坐标轴上绘制PV数据
ax1.plot(daily_pv.index, daily_pv.values, label='PV', color='blue')
ax1.tick_params(axis='x', rotation=45)# 在第二个坐标轴上绘制UV数据
ax2.plot(daily_uv.index, daily_uv.values, label='UV', color='green')
ax2.tick_params(axis='x', rotation=45)
fig.subplots_adjust(hspace=0.35)

在这里插入图片描述
结果分析:可以看出,pvuv是高度正相关的,在双十二左右都剧烈增加,出现井喷现象,说明了活动的热度。

每日用户的行为趋势

daily_behavior = data.groupby(['behavior_type', 'time']).user_id.nunique()
daily_behavior
behavior_type  time 
cart           11-18    102711-19     96911-20     99211-21     87111-22     927... 
purchase       12-14     36612-15     45312-16     42712-17     41712-18     415
Name: user_id, Length: 124, dtype: int64
plt.figure(figsize=(12, 6))
daily_behavior.unstack(0).plot()

在这里插入图片描述
可以看出双十二的时候,购买人数峰值高于收藏,说明很多人都是活动直接下单,活动力度很大,而日常情况下,加购物车>收藏>购买,人们更普遍的进行加购物车操作,收藏操作相对少一些。

漏斗模型:用户行为转换分析

from pyecharts.charts import Funnel
from pyecharts import options as opts
Funnel_behavior=data.groupby(['behavior_type'])['user_id'].nunique()
Funnel_behavior.rename('Count', inplace=True)
Funnel_behavior.drop(index='collect', inplace=True)
value = Funnel_behavior.values.tolist()
key = Funnel_behavior.index.tolist()
# 计算每个阶段的百分比
for i in range(0, len(value)):value[i] = value[i] / tmp * 100  # 以第一个阶段为基准计算百分比value[i] = "{:.2f}".format(value[i])  # 格式化为两位小数
# 创建 Funnel 图表实例
c = Funnel()# 使用 add 方法添加数据
c.add('',  # 系列名称list(zip(key, value)),  # 数据label_opts=opts.LabelOpts(is_show=True,  # 显示标签formatter='{b}: {d}%'  # 格式化标签显示为 "行为类型: 百分比%")
)# 设置全局配置,例如标题
c.set_global_opts(title_opts=opts.TitleOpts(title="用户行为转化漏斗"))
c.render_notebook()

在这里插入图片描述

可以看出,click人数的69.18%都进行了cart操作,57.81%都进行了purchase操作,说明加购物车到购买是比较容易的,因此要提高从点击转化为加购物车的转化率,这样购买人数也会提高。

周期内用户行为频率

data.loc[:, 'user_id1'] = data['user_id']
user_data = data.pivot_table('user_id', index='user_id1', columns='behavior_type', aggfunc='count')

根据click次数升序排列:

user_behavior = user_data.sort_values(by='click', ascending=False)

在这里插入图片描述
describe得到一些统计量:

user_behavior.describe()

在这里插入图片描述

# 包含缺失值的统计量
user_behavior.fillna(0).describe()

在这里插入图片描述
能够看出,平均购买次数近两次,收藏和购买行为用户占总用户的50%。

画出密度分布图:

sns.displot(user_behavior['purchase'], color='k', kind='kde')

在这里插入图片描述

跳失率和复购率

跳失率=只有点击行为的用户/总用户数

grouped_userid = data.groupby('user_id')
grouped_usertype = grouped_userid.behavior_type.value_counts().unstack(1)
users_click = grouped_usertype[grouped_usertype['click'] == grouped_usertype.sum(axis=1)]
onlyclick_rate = users_click.shape[0] / data['user_id'].nunique()
print("跳失率:{:.2f}%".format(onlyclick_rate*100))
跳失率:11.98%

复购率=购买2次及以上用户数/总购买用户数:

users_buytwo_rate = grouped_usertype[grouped_usertype['purchase'] >= 2].shape[0] / data[data['behavior_type'] == 'purchase'].user_id.nunique()
print("复购率:{:.2f}%".format(users_buytwo_rate*100))
复购率:60.73%

跳失率为11.98%,说明大部分用户在点击后都有其他的行为发生,说明内容比较吸引人,复购率60.73%说明有4成的人只买过一次,这可能和商品属性、售后服务等有关,这部分有提升空间。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Little Snitch for Mac(小飞贼防火墙软件)v5.7.6注册激活版

Little Snitch for Mac&#xff0c;也被称为“小飞贼”防火墙软件&#xff0c;是一款专为Mac用户设计的网络安全工具。以下是关于Little Snitch for Mac的一些主要特点&#xff1a; Little Snitch for Mac(小飞贼防火墙软件)v5.7.6注册激活版下载 强大的监控能力&#xff1a;Li…

leetcode-顺时针旋转矩阵-111

题目要求 思路 1.假设现在有一个矩阵 123 456 789 2.我们可以根据19这个对角线将数据进行交换&#xff0c;得到矩阵 147 258 369 3.然后将矩阵每一行的数据再翻转&#xff0c;得到矩阵 741 852 963 代码实现 class Solution { public:vector<vector<int> > rot…

Django自定义模板标签与过滤器

title: Django自定义模板标签与过滤器 date: 2024/5/17 18:00:02 updated: 2024/5/17 18:00:02 categories: 后端开发 tags: Django模版自定义标签过滤器开发模板语法Python后端前端集成Web组件 Django模板系统基础 1. Django模板语言概述 Django模板语言&#xff08;DTL&…

【译】MySQL复制入门: 探索不同类型的MySQL复制解决方案

原文地址&#xff1a;An Introduction to MySQL Replication: Exploring Different Types of MySQL Replication Solutions 在这篇博文中&#xff0c;我将深入介绍 MySQL 复制&#xff0c;回答它是什么、如何工作、它的优势和挑战&#xff0c;并回顾作为 MySQL 环境&#xff0…

【Qt】深入探索Qt主窗口与菜单栏:构建高效用户界面的实践指南

文章目录 前言1. 什么是Main Window?2. 详细了解一下其中的 菜单栏&#xff1a;2.1. 创建菜单栏2.2. 添加快捷键2.3. 添加子菜单2.4. 添加分割线2.5. 添加图标 3. 内存泄漏问题&#xff1a;总结 前言 在现代软件开发中&#xff0c;用户界面的设计对于提升用户体验至关重要。Q…

【雅特力AT32】串口UART、USART配置和使用方法,数组的阻塞发送函数编写,串口接收中断、回环、重定向

【雅特力AT32】串口UART、USART配置和使用方法&#xff0c;数组的阻塞发送函数编写&#xff0c;串口接收中断、回环、重定向 文章目录 串口配置阻塞发送函数接收中断和串口回环串口重定向附录&#xff1a;Cortex-M架构的SysTick系统定时器精准延时和MCU位带操作SysTick系统定时…

ARM|DSP+FPGA+NVIDIA AI摄像头定制

信迈拥有高性能的摄像头全栈能力&#xff1a;掌握车载模组光学设计能力&#xff0c;具有多名经验丰富光学设计专家&#xff1b;具备丰富的车载摄像模组硬件设计经验&#xff1b;掌握目前市面上大部分车载平台的ISP图像画质服务能力&#xff0c;能自主开发图像ISP和增强算法&…

第十二章 网络编程

第十二章 网络编程 网络协议概述 通信协议&#xff1a; 协议即规则&#xff0c;就好比汽车上路要遵守交通规则一样&#xff0c;为了使全世界不同类型的计算机都可以连接起来&#xff0c;所以制定了一套全球通用的通信协议——Internet协议。有了Internet协议&#xff0c;任何…

【mysql】【docker】mysql8-互为主从

&#x1f338;&#x1f338; Linux/docker-compose/mysql8 互为主从 优雅部署 &#x1f338;&#x1f338; 记录下两台Linux的mysql需要热备份&#xff0c;互为主从&#xff0c;后期加上keepalived实现高可用切换 参考博客&#xff1a;答 案 &#x1f338; 一、准备文件 这里…

图形学初识--直线插值算法

文章目录 为什么需要插值算法&#xff1f;插值算法是什么&#xff1f;有哪些常见的插值算法呢&#xff1f;1. 线性插值&#xff08;Linear Interpolation&#xff09;2. 多项式插值&#xff08;Polynomial Interpolation&#xff09;3. 样条插值&#xff08;Spline Interpolati…

Blazor 下支持 Azure AD 的多套登录方案

比如上图配置了两套不同的登录方案&#xff0c;各有自己的 TenantId 和 ClientId &#xff0c;要同时支持他们的登录&#xff08;其实在同一套 TenantId 和 ClientId 里面配置多个登录账户不就好了&#xff0c;但是......那套登录的管理是在客户自己的Azure AD账户管理下的&…

SpringBoot3 解决NoResourceFoundException: No static resource favicon.ico.异常

SpringBoot3 解决NoResourceFoundException: No static resource favicon.ico.异常 spring boot3项目中浏览器中访问报错找不到favicon.ico&#xff0c;虽然不影响使用&#xff0c;用api工具也可以忽略这个异常&#xff0c;但是防止浏览器访问时出现异常干扰日志&#xff0c;所…

oracle数据库解析过高分析

解析非常高&#xff0c;通过时间模型可以看到解析占比非常高 解析大致可以分为硬解析&#xff08; hard parse&#xff09;、软解析&#xff08; soft parse&#xff09;和软软解析&#xff08; soft soft parse&#xff09;。如&#xff0c;执行一条 SQL 的时候&#xff0c;如…

Google Find My Device:科技守护,安心无忧

在数字化的时代&#xff0c;我们的生活与各种智能设备紧密相连。而 Google Find My Device 便是一款为我们提供安心保障的实用工具。 一、Find My Decice Netword的定义 谷歌的Find My Device Netword旨在通过利用Android设备的众包网络的力量&#xff0c;帮助用户安全的定位所…

STM32F4_HAL控制GPIO输出——跑马灯实验

1、GPIO工作模式 1.1 端口输入数据寄存器&#xff08;IDR&#xff09; 1.2 端口输出数据寄存器&#xff08;ODR&#xff09; 1.3 端口置位/复位寄存器&#xff08;BSRR&#xff09; 为什么有了 ODR 寄存器&#xff0c;还要这个 BSRR 寄存器呢&#xff1f;我们先看看 BSRR 的寄…

23种设计模式(持续输出中)

一.设计模式的作用 设计模式是软件从业人员长期总结出来用于解决特定问题的通用性框架&#xff0c;它提高了代码的可维护性、可扩展性、可读性以及复用性。 二.设计模式 1.工厂模式 工厂模式提供了创建对象的接口&#xff0c;而无需制定创建对象的具体类&#xff0c;工厂类…

华为OD机试 - 剩余银饰的重量(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

【Python】 如何对对象列表进行排序,有点意思

在Python中&#xff0c;我们经常需要对对象列表进行排序&#xff0c;这可以通过多种方式实现。当对象是一个自定义类实例时&#xff0c;排序通常基于对象的一个或多个属性。Python提供了内置的sorted()函数和列表的sort()方法&#xff0c;它们都允许我们指定一个排序的关键字。…

iPhone彻底删除的照片怎么恢复?专业技巧助您解忧

在使用iPhone的过程中&#xff0c;我们可能会因为误操作或其他原因将一些重要的照片彻底删除。然而&#xff0c;即使照片被彻底删除&#xff0c;也并不意味着它们就永远消失了&#xff0c;它们只是被打上了“可覆盖的空间”的标签。 在照片被新数据覆盖之前&#xff0c;我们仍…

C语言学习【C控制语句:循环】

C语言学习【C控制语句&#xff1a;循环】 while循环 /* 根据用户键入的整数求和 */#include "stdio.h"int main(void) {long num;long sum 0L; /* 把sum初始化为0 */int status;printf("Please enter an integer to be summed");printf(&quo…