Python用户消费行为分析实例

2023-11-08

本文借鉴于知乎用户秦路的专栏https://zhuanlan.zhihu.com/p/27910430,这里只是自己理解基础上加以扩充和整理修改,丰富细节。

由于手头用户消费数据的缺失我们这次采用专栏的数据进行实战。原数据在此:链接: https://pan.baidu.com/s/1IMd1ZOm2sTQSu-JKBAfy2A 提取码: dg38

#首先还是常规的导入库和读取文件
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
#设定绘图风格
plt.style.use('ggplot') 
#由于原数据没有列名,我们手动传入列名列表,并以任意空格为分隔符号
columns = ['user_id', 'order_dt', 'order_products', 
'order_amount']
df =pd.read_table(r'/Users/herenyi/Downloads/
CDNOW_master.txt', names = columns, sep = '\s+')
#查看下读取后的数据集概况
df.head()
df.describe()
df.info()

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

从上可知,这是一个关于用户购买某项东西的消费记录,主要有用户ID,购买时
间,订单个数和订单金额四项,平均每笔订单消费金额为35美金,标准差为36美
金,中位数为25,也就是说平均数大于中位数,也就是正偏分布,大多数用户消费
金额集中在小额,小部分用户贡献大额消费,符合消费类数据的二八分布。由于没
有空缺数据,可以不用清理直接开始分析,同时我们注意到日期数据是整数型,需
要转换成时间格式。

#加入两个时间新列
df['order_date'] = pd.to_datetime(df.order_dt, format ='%Y%m%d')
df['month'] = df.order_date.values.astype('datetime64[M]')
df.head()

在这里插入图片描述
pd.to_datetime可以将特定的字符串或者数字转换成时间格式,其中的format参数表
示输出的格式,%Y匹配四位数年份,%m匹配月份,%d匹配日期。若想输出year-
month-day这形式,则是%Y-%m-%d。

astype也可以将时间格式进行转换,比如[M]转化成月份。我们将月份作为消费行为
的主要事件窗口,选择哪种时间窗口取决于消费频率。

#按用户ID进行分组
user_grouped = df.groupby('user_id').sum()
user_grouped.head()
user_grouped.describe()

在这里插入图片描述
由于原表只按订单来记录,按用户分组下看下数据集概述,毕竟我们这是用户消费
行为分析。从用户角度看,每位用户平均购买7张CD,最多的用户购买了1033张,
属于狂热用户了。用户的平均消费金额100元,标准差是240,中位数是3张,说明
是长尾分布,存在小部分购买多张碟的高消费用户。下面我们就开始按月度来进行
分析。

#导入中文
from matplotlib.font_manager import FontProperties
chinese = FontProperties(fname = r'/Users/Shared/Epic Games/Fortnite/Engine/Content/Slate/Fonts/DroidSansFallback.ttf')
ax = df.groupby('month').order_amount.sum().plot()
ax.set_xlabel('月份', fontproperties=chinese) 
ax.set_ylabel('消费金额(美元)', fontproperties=chinese) 
ax.set_title('不同月份的用户消费金额', fontproperties=chinese) 

ax = df.groupby('month').order_amount.sum().plot()
ax.set_xlabel('月份', fontproperties=chinese) 
ax.set_ylabel('CD碟数(张)', fontproperties=chinese) 
ax.set_title('不同月份的用户购买张数', fontproperties=chinese) 

在这里插入图片描述
在这里插入图片描述
由图片可知,无论是消费金额还是CD碟数都呈现相同的趋势,而且前三月数据都呈
现出异常状态,由于我们不知道原数据到底从何获得,只能做出这三个月有促销活
动,抑或是这是新开的店之类的,前三个月大多都是新人之类的假设,我们不得而
知,继续往下看。

ax = df.groupby('user_id').sum().plot.scatter('order_amount', 'order_products')
ax.set_xlabel('消费金额', fontproperties=chinese) 
ax.set_ylabel('CD碟数(张)', fontproperties=chinese) 
ax.set_title('每个用户消费金额与购买个数的关系', fontproperties=chinese)

在这里插入图片描述
这是用户的消费金额与购买数量的关系。可以看到,因为是cd网站的消费记录,产
品价格没有太大区间差别,每个用户的消费金额跟购买数量呈现一定的线性关系。
为了更好的观察,我们尝试用直方图来呈现数据.

plt.figure(figsize = (12,4))
plt.subplot(121)
ax = df.grou
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python用户消费行为分析实例 的相关文章

  • docker部署fisco bcos区块链浏览器

    首先你要搭建一个myql数据库 理论上mariadb也支持 并创建一个数据库 再建个账号给区块链浏览器使用 如 CREATE DATABASE fisco CHARACTER SET utf8mb4 COLLATE utf8mb4 bin

随机推荐

  • [Excel VBA]如何自动关闭MsgBox?

    本文译至 http itpro nikkeibp co jp atcl column 15 090100207 090700150 VBA的MsgBox函数 直到用户点击按钮前都会继续显示 经过指定时间后自动关闭的MsgBox 可以使用Wi
  • 中高级程序员需求技能

    初级 中级 1 团队精神和协作能力 把它作为基本素质 并不是不重要 恰恰相反 这是程序员应该具备的最基本的 也是最重要的安身立命之本 把高水平程序员说成独行侠的都是在呓语 任何个人的力量都是有限的 即便如linus这样的天才 也需要通过组成
  • Unity发送Post请求

    using System Collections using System Text using UnityEngine using UnityEngine Networking public class PostMsg MonoBehav
  • CSDN竞赛第34期题解

    CSDN竞赛第34期题解 1 题目名称 最优利润值 你在读的经营课程上 老师布置了一道作业 在一家公司的日常运营中 是会对一些商品的价格走势根据一些经验和数据 进行预估 并据此进行决策 例如 假设某商品每天的价格都有可能变动 我们要做的就是
  • 从URL取值传给后端

    从URL传值给后端 http 127 0 0 1 8080 blog content html id 8 点击浏览文章详情 跳转至详情页面 从 url 中拿出文章 id 传给后端 首先拿到url 然后判断是否有值 从问号后面取值 param
  • 【Qt-11】http通信(Get同步收发)

    Qt 9 HTTP请求 post方式 WXG1011的博客 CSDN博客 QT 6 QWebApp服务器搭建及使用 qtwebapp WXG1011的博客 CSDN博客 写在前面 在上面两篇博文的基础上 继续迭代功能 上面两篇博客已实现QW
  • 谈Delphi编程中资源文件的应用

    一 初级应用篇 资源文件一般为扩展名为res的文件 在VC中资源文件用得非常普遍 但Delphi在其联机帮助中对资源文件没作什么介绍 其实利用其自带的资源编译工具BRCC32 EXE 一般位于 Delphi BIN目录下 我们完全可以做出跟
  • StringBuilder和StringBuffer&String的区别,以及它的基本用法

    StringBuilder在java5中引入 算的上是一个StringBuffer的一个用于单线程的版本 StringBuilder用于拼接字符串 用法跟StringBuffer差不多 都是创建一个字符缓存区 不用像String一样每增加一
  • JVM Tenured space is exhausted

    使用Android Studio命令gradlew assembleRelease打包apk 遇到了JVM Tenured space is exhausted的错误 网上查询后原因是JVM分配内存不足 需要在项目下的grade prope
  • 期货和股票的区别在哪里

    期货和股票的区别在哪里 股票与期货有什么区别 1 概念不同 股票是股份公司发行的所有权凭证 是各个股东作为持股凭证的一种有价证券 而期货属于一种标准化可交易合约 一种到期必须执行的合约 2 交易场所不同 股票是需要在证券交易所进行交易的 例
  • Netty实战(一)Nett的概念及体系结构

    Nett的概念及体系结构 第一章 Java网络编程 1 1 Java NIO 1 2 选择器 第二章 Netty是什么 2 1 Netty简介 2 2 Netty的特性 2 2 1 设计 2 2 2 易于使用 2 2 3 性能 2 2 4
  • 读取文件最后N行

    转自 http www zuidaima com share 1550463669226496 htm 指定行数 可以获取到从这行到文件尾的所有行 分享自大熊 源文件 读取最后10行结果 代码下载地址 http www zuidaima c
  • C++的智能指针unique_ptr、shared_ptr和weak_ptr

    C 的智能指针是一种特殊的指针类型 它能够自动管理内存资源 避免常见的内存泄漏和多次释放等问题 C 11引入了三种主要的智能指针 unique ptr shared ptr和weak ptr 目录 unique ptr shared ptr
  • 双线性插值算法的详细总结

    原文出处 http blog csdn net xjz18298268521 article details 51220576 最近在做视频拼接的项目 里面用到了图像的单应性矩阵变换 在最后的图像重映射 由于目标图像的坐标是非整数的 所以需
  • pcie设备之驱动加载udev事件详解

    打卡打卡 udev 自内核2 6之后取代devfs udev配置 usr lib udev rules d etc udev rules d 如何触发udev事件 kobject uevent函数 pcie scan扫描函数 初始化pcie
  • python在linux系统下的编辑编译运行

    PYTHON在linux系统下的编辑编译 新建一个脚本文件 编写程序 运行程序 若安装了如spyder这样的编辑器 若是很简单的代码 新建一个脚本文件 gedit xxx py 新建py格式文件 编写程序 运行程序 在当前目录下 输入pyt
  • 【论文学习】FD-MonbileNet: IMPROVED MOBILENET WITH A FAST DOWNSAMPLING STRATEGY

    原文链接 https arxiv org abs 1802 03750 作者介绍了一种高效且在有限运算量限制上十分准确的网络 Fast Downsampling MobileNet FD MobileNet 其中心思想是在MobileNet
  • 中国钢铁产业产量分析与市场需求状况研究报告2022版

    中国钢铁产业产量分析与市场需求状况研究报告2022版 修订日期 2021年12月 搜索鸿晟信合研究院查看官网更多内容 第一章 产业转移的内涵及模式概述 1 1 产业转移的概念界定 1 1 1 产业转移的定义 1 1 2 产业转移的分类 1
  • mysql 连续打卡_MySQL查询连续打卡信息?

    最近多次看到用SQL查询连续打卡信息问题 自己也实践一波 抛开问题本身 也是对MySQL窗口函数和自定义变量用法的一种练习 01 建表 所用数据库为MySQL8 0 简单而不失一般性 建立一个仅有记录id 用户id 日期和打卡标记共4个字段
  • Python用户消费行为分析实例

    本文借鉴于知乎用户秦路的专栏https zhuanlan zhihu com p 27910430 这里只是自己理解基础上加以扩充和整理修改 丰富细节 由于手头用户消费数据的缺失我们这次采用专栏的数据进行实战 原数据在此 链接 https