电商会员门店消费数据分析
导包
import os
import sqlite3
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from IPython.display import display_htmlpd.set_option('max_colwidth',200)%matplotlib inline
前期准备
转义路径
# 获取Windows系统下的路径
win_path = r"\会员消费报表.xlsx"
win_path1 = r"\会员信息查询.xlsx"
win_path2 = r"\门店信息表.xlsx"
win_path3 = r"\全国销售订单数量表.xlsx"# 使用os.path进行转义
unix_path = os.path.normpath(win_path) # 或者 os.path.abspath(win_path)
unix_path1 = os.path.normpath(win_path1) # 或者 os.path.abspath(win_path)
unix_path2 = os.path.normpath(win_path2) # 或者 os.path.abspath(win_path)
unix_path3 = os.path.normpath(win_path3) # 或者 os.path.abspath(win_path)# 现在unix_path变量将是 'C:/Users/username/Documents/data.csv'
调整表格样式
html = f"""
<html>
<head><style>div{{background-color: rgba(224, 255, 255, 0.03); /* 包裹表格的 div 背景色 */}}th{{background-color: #79CDCD; /* 表头背景色 */color: black; /* 表头文字颜色 */}}</style>
</head>
</html>
"""
display_html(html, raw=True)
1.1读入表格
1.1.1会员消费表vip_consume
vip_consume = pd.read_excel(unix_path)
vip_consume.head(5)

1.1.2会员信息查询vip_info
vip_info = pd.read_excel(unix_path1)
vip_info.head(5)

1.1.3门店信息表shop_info
shop_info = pd.read_excel(unix_path2)
shop_info.head(5)

1.1.4全国销售订单数量表order_list
order_list = pd.read_excel(unix_path3)
order_list.head(5)

2数据预处理
2.1查看是否有缺失值、重复值
vip_consume.info()#无缺失值

2.2转换数据类型,在查找重复值时,有些可能识别不到
2.2.1对vip_consume
#转换日期
vip_consume['订单日期'] = vip_consume['订单日期'].astype("str")
vip_consume['订单日期'] = pd.to_datetime(vip_consume['订单日期'])#名称转化为字符串
vip_consume['卡号'] = vip_consume['卡号'].astype("str")
vip_consume['订单号'] = vip_consume['订单号'].astype("str")
vip_consume['订单类型'] = vip_consume['订单类型'].astype("str")
vip_consume['店铺代码'] = vip_consume['店铺代码'].astype("str")
vip_consume['款号'] = vip_consume['款号'].astype("str")vip_consume.info()

#验证每个元素是否转化为str
for card_id in vip_consume['卡号']:print(type(card_id))

#vip_consume.groupby('卡号').count()
dup = vip_consume.copy().duplicated(keep= 'first')
print(dup[dup == True])
print(len(dup[dup == True]))
vip_consume.copy()[dup]


vip_consume[vip_consume['卡号'] == "BL6093096660436300333" ]

vip_consume = vip_consume.drop_duplicates(keep='first')
print(len(vip_consume))

2.2.2对vip_info
vip_info.info()

#创建缺失率函数
def missing (df):"""计算每一列的缺失值及占比"""missing_number = df.isnull().sum().sort_values(ascending=False) # 每一列的缺失值求和后降序排序 missing_percent = (df.isnull().sum()/df.isnull().count()).sort_values(ascending=False) # 每一列缺失值占比missing_values = pd.concat([missing_number, missing_percent], axis=1, keys=['Missing_Number', 'Missing_Percent']) # 合并为一个DataFramereturn missing_values
missing(vip_info)

vip_info_origin = vip_info.copy()
#drop掉缺失率达到0.7以上的列
vip_info = vip_info_origin
vip_info = vip_info.drop(columns=['门店店员编码','城市', '省份'])
vip_info = vip_info.dropna(axis= 0, subset=['生日', '年齡'])
print(vip_info.isnull().sum())
print(len(vip_info))
vip_info

#去掉重复值
vip_info = vip_info.drop_duplicates(keep='first')
print(len(vip_info))

2.2.3对shop_info
shop_info.info()

#计算缺失率
missing(shop_info)

#备份
shop_info_origin = shop_info.copy()
#删除缺失值
shop_info = shop_info.dropna(axis = 0)
print(shop_info.isnull().sum())

#删除重复值
print(len(shop_info))
shop_info.drop_duplicates(keep= 'first')
print(len(shop_info))

2.2.4对orderlist
order_list.info()#无缺失值

order_list

#计算缺失率
missing(order_list)

#删除零值,零值可能是没有会员
order_list.dropna(axis = 0, inplace=True)
order_list['年'] = order_list['年月'].astype(str).str[:4]
order_list['月'] = order_list['年月'].astype(str).str[4:].astype(int).astype(str)
order_list

3表连接
a = vip_info.sample(3).to_html()
b = vip_consume.sample(3).to_html()
c = shop_info.sample(3).to_html()
d = order_list.sample(3).to_html()# 写规范点的格式,当然可以简单实现 html_str = f"<div>{a}</div><div>{b}</div><div>{c}</div><div>{d}</div>"
html_str = f"""
<html>
<head><style>.cen{{display: flex;flex-direction: column;align-items: center;}}.t{{font-size: 24px;font-weight: bold;}}</style>
</head>
<body><div class="cen"><span class="t">【会员消费表】</span><div>{a}</div><span class="t">【会员信息表】</span><div>{b}</div><span class="t">【门店信息表】</span><div>{c}</div><span class="t">【全国订单表】</span><div>{d}</div></div>
</body>
</html>
"""
display_html(html_str, raw=True)

3几种可能的表连接情况
3.1会员信息表+会员消费表
info_consume = pd.merge(vip_info,vip_consume,left_on = ['会员卡号'],right_on = ['卡号'], how = 'inner')
print(vip_info.shape,vip_consume.shape,info_consume.shape)
info_consume.head()

3.1.1订单数量根据时间的变化
有效订单数量、下单数量、退单数量、退单数量、退货率随时间的变化
pd.to_datetime(info_consume['订单日期'])

。。。。
#后续源码请点击下面链接:
https://mbd.pub/o/bread/Z52Umplt





#后续源码请点击下面链接:
https://mbd.pub/o/bread/Z52Umplt
相关文章:
电商会员门店消费数据分析
导包 import os import sqlite3 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from IPython.display import display_htmlpd.set_option(max_colwidth,200)%matplotlib inline前期准备 转义路径 # 获取Windows系统下的路…...
Vue.js 入门与进阶:打造高效的前端开发体验
Vue.js 是一款渐进式的 JavaScript 框架,凭借其轻量、易用、灵活的特点,已经成为了前端开发者的首选之一。从简单的交互到复杂的单页应用(SPA),Vue 为开发者提供了一套高效且易于上手的工具。在本文中,我们…...
Java包装类型的缓存
Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能。 Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据,Character 创建了数值在 [0,127] 范围的缓存数据,Boolean 直接返回 True or Fal…...
【蓝桥杯——物联网设计与开发】拓展模块4 - 脉冲模块
目录 一、脉冲模块 (1)资源介绍 🔅原理图 🔅采集原理 (2)STM32CubeMX 软件配置 (3)代码编写 (4)实验现象 二、脉冲模块接口函数封装 三、踩坑日记 &a…...
.NET平台用C#通过字节流动态操作Excel文件
在.NET开发中,通过字节流动态操作Excel文件提供了一种高效且灵活的方式处理数据。这种方法允许开发者直接在内存中创建、修改和保存Excel文档,无需依赖直接的文件储存、读取操作,从而提高了程序的性能和安全性。使用流技术处理Excel不仅简化了…...
SpringMVC详解
文章目录 1 什么是MVC 1.1 MVC设计思想1.2 Spring MVC 2 SpringMVC快速入门3 SpringMVC处理请求 3.1 请求分类及处理方式 3.1.1 静态请求3.1.2 动态请求 3.2 处理静态请求 3.2.1 处理html文件请求3.2.2 处理图片等请求 3.3 处理动态请求 3.3.1 注解说明3.3.2 示例 3.4 常见问题…...
springboot、spring、springmvc有哪些注解
Spring Boot 常用注解 虽然Spring Boot本身并没有引入大量新的注解,但它基于Spring框架,并整合了多种技术和库,使得开发者可以更方便地使用Spring框架的功能。在Spring Boot项目中,常用的注解主要来自于Spring框架本身。 Sprin…...
Apache Commons ThreadUtils 的使用与优化
Apache Commons ThreadUtils 的使用与优化 1. 问题背景 在 Java 系统中,跨系统接口调用通常需要高并发支持,尤其是线程池的合理配置至关重要。如果线程池使用不当,可能导致性能下降,线程等待或过载。 当前问题 使用了 Apache …...
重温设计模式--5、职责链模式
文章目录 职责链模式的详细介绍C 代码示例C示例代码2 职责链模式的详细介绍 定义与概念 职责链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它旨在将请求的发送者和多个接收者解耦,让多个对象都有机会处理请求&am…...
下午四点半
客户的员工竟然背着公司开发报表系统,是在密谋什么大事吗? 之前去线下给客户的员工培训,当时我就对这个小姑娘印象很深刻,因为她后面加了我们的技术人员,问了很多问题,不同于从来没有用过低代码平台的人&a…...
嵌入式单片机中Flash存储器控制与实现
第一:嵌入式单片机内部Flash概述 1.存储器的概念 存储器指的是若干个存储单元的集合,每个存储单元都可以存储若干个二进制数,为了方便的操作存储单元,就为每个存储单元都分配了地址,就可以通过寻址来访问存储单元。由于计算机的处理的数据量较大,并且运算速度都很快,就…...
loki failed to flush
loki 报错 levelerror ts2024-12-27T08:13:10.450140686Z callerflush.go:143 org_idfake msg"failed to flush" err"failed to flush chunks: store put chunk: open /data/loki/chunks/ZmFrZS85ODBmM2U3NzliODg2MjY1OjE5M2VhNDVkYTc4OjE5M2VhNDVlNDdkOjVmMjA…...
微信小程序打印生产环境日志
微信小程序打印生产环境日志 新建一个log.js文件,写入以下代码: let log wx.getRealtimeLogManager ? wx.getRealtimeLogManager() : nullmodule.exports {debug() {if (!log) returnlog.debug.apply(log, arguments)},info() {if (!log) returnlog.i…...
利用 deepin-IDE 的 AI 能力,我实现了文件加密扩展
经过多轮迭代,deepin 文件管理器(dde-file-manager)的扩展功能已经趋于稳定,看到越来越丰富的文管新功能,作为一名技术爱好者,也想自己动手写个插件扩展一下文管的功能。 我选择的开发工具是 deepin-IDE&a…...
JPA 基本查询(五)
JPA 查询Exists示例 JPA教程 - JPA 查询Exists示例 如果子查询返回任何行,则EXISTS条件返回true。 以下代码显示如何在JPQL中使用带有子查询的EXISTS运算符。 List l em.createQuery("SELECT e FROM Professor e WHERE EXISTS " "(SELECT p FROM …...
hiprint结合vue2项目实现静默打印详细使用步骤
代码地址是:vue-plugin-hiprint: hiprint for Vue2/Vue3 ⚡打印、打印设计、可视化设计器、报表设计、元素编辑、可视化打印编辑 本地安装包地址:electron-hiprint 发行版 - Gitee.com 1、先安装hipint安装包在本地 2、项目运行npm(socket.…...
项目报 OutOfMemoryError 、GC overhead limit exceeded 问题排查以及解决思路实战
项目报 OutOfMemoryError、GC overhead limit exceeded 问题排查以及解决思路实战 前言: 问题现象描述: 1,生产环境有个定时任务,没有初始化告警数据【告警数据量为1000多个】 2,其他定时任务执行正常 3,查…...
【计算机-显示屏灰阶测试】
硬计算机-显示屏灰阶测试 ■ 对比度■ 清晰度■ 灰度色阶(色带)■ 对比率■■ ■ 对比度 在一个性能良好的显示器上,您可观察到每种颜色的标尺都可分为从 1 至 32、大致上等宽但不同亮度的色带。即使是在刻度1处的色带也应该隐约可见。 一个…...
CSS系列(40)-- Container Queries详解
前端技术探索系列:CSS Container Queries详解 📦 致读者:探索组件响应式的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS Container Queries,这个强大的组件级响应式特性。 基础概念 🚀 容…...
工作生活做事慢效率低原因及解决方案
时间和效率管理具体版(初阶)(一) 工作&生活做事慢效率低原因及解决方案 一、效率慢的原因(动物解析法(编者自创)) 打败你的可能是生活的小事 1.无头苍蝇无流程 做事之前没有想…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
