电商会员门店消费数据分析
导包
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.无头苍蝇无流程 做事之前没有想…...
数字IC设计的未来:ChatGPT能否颠覆十大核心领域?
1. ChatGPT在数字IC设计中的定位 最近两年AI工具的发展确实让人眼前一亮,特别是ChatGPT这种大语言模型,在代码生成、技术问答方面展现出了惊人的能力。作为一名在数字IC设计领域摸爬滚打多年的工程师,我也第一时间测试了它在芯片设计各个环节…...
MCP3302/MCP3304 13位差分ADC驱动开发与硬件协同设计指南
1. MCP330X库深度解析:面向嵌入式工程师的13位差分ADC驱动开发指南MCP330X系列Arduino库是专为Microchip MCP3302与MCP3304高精度模数转换器设计的底层驱动框架。该库并非简单封装,而是基于对SPI协议时序、ADC采样原理及嵌入式资源约束的深刻理解所构建的…...
FC-CLIP实战:为什么说“卷积不死”?在开放词汇分割中冻结CLIP主干的深度解析与避坑指南
FC-CLIP技术解析:卷积架构在开放词汇分割中的不可替代性 当整个计算机视觉领域似乎都被Transformer架构席卷时,FC-CLIP论文却掷地有声地宣告"卷积不死"。这个看似反潮流的结论背后,隐藏着哪些被忽视的视觉归纳偏置?冻结…...
嵌入式开发关键技术演进与实战经验分享
1. 嵌入式开发的行业现状与核心挑战2023年的嵌入式开发领域呈现出明显的多元化发展趋势。作为一名从业超过十年的嵌入式工程师,我观察到这个行业正在经历从传统单机设备向智能化、网络化方向的快速转型。根据AspenCore最新发布的行业调查报告,目前超过30…...
ARCMAP实战:3分钟搞定面数据200米内点筛选(附反向选择技巧)
ARCMAP空间筛选实战:200米范围点数据高效提取与反向选择技巧 在地理信息系统(GIS)日常工作中,空间数据筛选是最基础却最频繁的操作之一。许多初学者面对"筛选某面要素200米范围内的点数据"这类需求时,往往会…...
从MIMO到相控阵:深入浅出聊聊RFSoC的MTS(多片同步)为啥是5G/雷达系统的核心
从MIMO到相控阵:深入浅出聊聊RFSoC的MTS(多片同步)为啥是5G/雷达系统的核心 在5G Massive MIMO基站的天线阵列背后,或是军用雷达的相控阵天线系统中,数以百计的射频收发通道需要像精密交响乐团般协同工作——任何微小的…...
FanControl深度指南:智能散热系统的架构解析与实战优化
FanControl深度指南:智能散热系统的架构解析与实战优化 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…...
【实用技巧】-Mac系列设备自定义鼠标指针颜色与动态效果指南
1. 为什么需要自定义鼠标指针? 作为一个用了十年Mac的老用户,我深知默认的白色指针在复杂界面中经常"消失"的烦恼。特别是做设计时,盯着色彩斑斓的PS画布,那个小箭头简直像在玩捉迷藏。更糟的是在演示场景,观…...
CVPR 2024人脸黑科技:3D头像重建如何用单张自拍搞定?附开源项目推荐
CVPR 2024单图3D头像重建技术实战:从算法原理到开源工具落地 当你在社交媒体上传自拍时,是否想过这张平面照片能瞬间转化为可360度旋转的数字化身?CVPR 2024最新研究成果正在让这个想象成为现实——无需专业设备,仅用普通手机拍摄…...
G-Helper深度解析:华硕笔记本轻量级性能控制工具实战指南
G-Helper深度解析:华硕笔记本轻量级性能控制工具实战指南 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix,…...
