当前位置: 首页 > news >正文

coffee销售数据集分析:基于时间趋势分析的实操练习

**文章说明:**对coffee销售数据集的简单分析练习(时间趋势分析练习),主要是为了强化利用python进行数据分析的实操能力。属于个人的练习文章。
**注:**这是我第一次使用md格式编辑博客文章,排版上还是不是很熟悉,害,我尽量弄好看点。

分析过程

import pandas as pd
import matplotlib.pyplot as plt# 设置中文字体,防止绘图时中文标题出现乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# 导入数据
data = pd.read_csv(r"C:\Users\31049\Desktop\电商数据\coffee.csv")# 查看数据情况
print(data.shape)
data.head()
(2623, 6)
datedatetimecash_typecardmoneycoffee_name
02024-03-012024-03-01 10:15:50.520cardANON-0000-0000-000138.7Latte
12024-03-012024-03-01 12:19:22.539cardANON-0000-0000-000238.7Hot Chocolate
22024-03-012024-03-01 12:20:18.089cardANON-0000-0000-000238.7Hot Chocolate
32024-03-012024-03-01 13:46:33.006cardANON-0000-0000-000328.9Americano
42024-03-012024-03-01 13:48:14.626cardANON-0000-0000-000438.7Latte
# 检查数据类型、检查是否有缺失值
print(data.info())# 输出缺失值数量
print('\n缺失值数量:')
print( data.isnull().sum())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2623 entries, 0 to 2622
Data columns (total 6 columns):#   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  0   date         2623 non-null   object 1   datetime     2623 non-null   object 2   cash_type    2623 non-null   object 3   card         2534 non-null   object 4   money        2623 non-null   float645   coffee_name  2623 non-null   object 
dtypes: float64(1), object(5)
memory usage: 123.1+ KB
None缺失值数量:
date            0
datetime        0
cash_type       0
card           89
money           0
coffee_name     0
dtype: int64

发现1: card列有89个缺失值,可能有些用户不是使用card支付,而是其他支付方式。(待验证)
发现2: date和datetime列的数据类型为object类型,需要转化为日期类型

# 转化为datetime日期格式
data['date'] = pd.to_datetime(data['date'])
data['datetime'] = pd.to_datetime(data['datetime'])
# 异常值检查,检查monet列是否有0值或负值
data['money'].describe()
结果:最小值大于0,因此无异常值。

一、付款方式分析:观察‘支付方式’的趋势

# 计算不同支付方式的数量以及占比。
ty = data['cash_type'].value_counts()# 可视化
plt.pie(ty, labels=ty.index, autopct=lambda pct: f'{int(pct/100*ty.sum())}, {pct:.1f}%')
plt.title('不同支付方式的数量以及占比')
plt.show()

在这里插入图片描述

结论:支付方式只有两种(cash和card),96%的用户选择使用“card”进行支付。也说明了card列的89个缺失值是合理的(因为89个订单数据显示cash现金支付)

分析用户选择的支付方式随时间的变化趋势:

from datetime import datetime# 提取月份
data['month'] = data['date'].dt.month# unstack()方法用于将行索引转为列,或者更准确地说,是将 DataFrame 中的层次化索引的某一层转换为列
payment_counts = data.groupby(['month', 'cash_type']).size().unstack(fill_value=0)
payment_counts.index = payment_counts.index.astype(str)# 查看结果
print(payment_counts)
cash_type  card  cash
month                
3           175    31
4           168    28
5           241    26
6           223     4
7           237     0
8           272     0
9           344     0
10          426     0
11          259     0
12          189     0

结果可视化:

# 创建一个图形容器、子图对象
fig, ax = plt.subplots(figsize=(8, 5))# 绘制cash-card订单数量的柱状图
ax.bar(payment_counts.index, payment_counts['cash'], label='cash现金', color='blue')
ax.bar(payment_counts.index, payment_counts['card'], bottom=payment_counts['cash'], label='card', color='skyblue')# 同一坐标系下绘制每月的cash现金数量占比的折线图
ax1 = ax.twinx()
ax1.set_ylim([0, 0.5])
cash_pct = (payment_counts['cash'] / (payment_counts['card'] + payment_counts['cash'])).round(2)
ax1.plot(payment_counts.index, cash_pct, label='cash占比', marker='^', color='r')
for i in range(len(payment_counts)):ax1.text(payment_counts.index[i], cash_pct.iloc[i], s=f'{cash_pct.iloc[i]}%')ax.legend(loc='upper left')
ax1.legend(loc='best')
plt.title('cash-card数量的堆积柱状图\n每月的cash现金数量占比', fontsize=15)
ax.set_xlabel('month月份')
ax.set_ylabel('数量')
plt.show()

在这里插入图片描述

结论:在3-6月,cash现金支付的订单数占比逐月下降,且之后几个月全部订单都是使用card卡支付的,呈现出无现金支付的趋势。

二、销售趋势分析:热销时间段(时间趋势)

# 定义设置时间段的函数,[0-6,6-8,8-12,12-14,14-18,18-21,21-0], 对应[凌晨、早晨、早上、中午、下午、晚上、深夜] 
def f(hour):if hour<6:return '凌晨'elif hour<8:return '早晨'elif hour<12:return '早上'elif hour<14:return '中午'elif hour<18:return '下午'elif hour<21:return '晚上'else:return '深夜'# 增加一列表示时间段
data['time'] = data['datetime'].dt.hour.apply(f)# 查看数据
data.head()
datedatetimecash_typecardmoneycoffee_namemonthtime
02024-03-012024-03-01 10:15:50.520cardANON-0000-0000-000138.7Latte3早上
12024-03-012024-03-01 12:19:22.539cardANON-0000-0000-000238.7Hot Chocolate3中午
22024-03-012024-03-01 12:20:18.089cardANON-0000-0000-000238.7Hot Chocolate3中午
32024-03-012024-03-01 13:46:33.006cardANON-0000-0000-000328.9Americano3中午
42024-03-012024-03-01 13:48:14.626cardANON-0000-0000-000438.7Latte3中午
# 计算不同时间段的订单数量占比
nums_time = data.groupby('time').size().sort_values()# 可视化
plt.pie(nums_time, labels=nums_time.index, autopct=lambda pct: f'{int(pct/100*nums_time.sum())}\n{pct:.1f}%', radius=1)
plt.title('不同时间段的订单数及其占比')
plt.show()

在这里插入图片描述

结论:店铺早上(8-12点)的订单数最多,占比31%;第二下午(14-18点)占比24%;第三是晚上(18-21点)占比18%。这3个时间段占比总和近75%

三、咖啡销量分析:某时间段最畅销的咖啡(最受欢迎)

# 按照['time', 'coffee_name']分组,计算每组包含的销量数据,并通过unstack()方法转化行层次化索引(['time', 'coffee_name'])的‘coffee’索引转为列
cof_time = data.groupby(['time', 'coffee_name']).size().unstack(fill_value=0)# 查看数据
cof_time
coffee_nameAmericanoAmericano with MilkCappuccinoCocoaCortadoEspressoHot ChocolateLatte
time
下午861249536433152160
中午6293451538181370
早上11422680381273234180
早晨71210322029
晚上399210330221063110
深夜197435171544469

分时间段进行可视化:

# 创建一个图形对象fig、包含1*6张子图的ax对象
fig, ax = plt.subplots(6, 1, figsize=(6, 30))# 绘制每个时间段的销量柱状图
for i in range(len(cof_time)):# cof_time的取每行数据,并排序,用于可视化d = cof_time.iloc[i].sort_values(ascending=False)ax[i].bar(d.index, d.values, color='skyblue')ax[i].tick_params(axis='x', rotation=45)   #tick_params()可以调整刻度线的位置、大小、颜色、旋转、刻度标签的对齐方式、字体大小等ax[i].set_title(f'{cof_time.index[i]}——热销的coffee')ax[i].set_ylabel('销量')ax[i].grid(axis='y', alpha=0.5)fig.tight_layout()
plt.show()

在这里插入图片描述

结论:每个时间段最受欢迎的coffee类参考上图。

# 文章到此结束,有问题可以一起交流,我们下期文章再见叭

相关文章:

coffee销售数据集分析:基于时间趋势分析的实操练习

**文章说明&#xff1a;**对coffee销售数据集的简单分析练习&#xff08;时间趋势分析练习&#xff09;&#xff0c;主要是为了强化利用python进行数据分析的实操能力。属于个人的练习文章。 **注&#xff1a;**这是我第一次使用md格式编辑博客文章&#xff0c;排版上还是不是很…...

【转帖】eclipse-24-09版本后,怎么还原原来版本的搜索功能

【1】原贴地址&#xff1a;eclipse - 怎么还原原来版本的搜索功能_eclipse打开类型搜索类功能失效-CSDN博客 https://blog.csdn.net/sinat_32238399/article/details/145113105 【2】原文如下&#xff1a; 更新eclipse-24-09版本后之后&#xff0c;新的搜索功能&#xff08;CT…...

Centos 修改历史读录( HISTSIZE)

history命令 -c #清空命令历史 -r #读历史文件附加到历史列表 -w #保存历史列表到指定的历史文件 命令历史相关环境变量 HISTSIZE #命令历史记录的条数 HISTFILE #指定历史文件&#xff0c;默认为~/.bash_history HISTFILESIZE #命令历史文件记录历史的条数 以上变量可以 exp…...

lwIP——4 网络接口

1.lwIP网络接口 网络接口&#xff08;网卡&#xff09;&#xff1a;个人理解是处理网络层和数据传输关系的接口&#xff08;tcp/ip协议栈中的网络接口层部分&#xff09;&#xff0c;直接与硬件平台打交道 lwIP协议栈支持多种不同的网络接口&#xff08;网卡&#xff09;&#…...

pytest自动化测试 - pytest夹具的基本概念

<< 返回目录 1 pytest自动化测试 - pytest夹具的基本概念 夹具可以为测试用例提供资源(测试数据)、执行预置条件、执行后置条件&#xff0c;夹具可以是函数、类或模块&#xff0c;使用pytest.fixture装饰器进行标记。 1.1 夹具的作用范围 夹具的作用范围&#xff1a; …...

FreeRtos的使用教程

定义&#xff1a; RTOS实时操作系统, (Real Time Operating System), 指的是当外界事件发生时, 能够有够快的响应速度,调度一切可利用的资源, 控制实时任务协调一致的运行。 特点&#xff1a; 支持多任务管理&#xff0c; 处理多个事件&#xff0c; 实现更复杂的逻辑。 与计算…...

yolov11 解读简记

1 文章详细介绍了YOLOv11的架构设计&#xff0c;包括以下几个关键组件&#xff1a; C3k2块&#xff1a;这是YOLOv11引入的一种新型卷积块&#xff0c;替代了之前版本中的C2f块。C3k2块通过使用两个较小的卷积核代替一个大的卷积核&#xff0c;提高了计算效率&#xff0c;同时保…...

实验二 数据库的附加/分离、导入/导出与备份/还原

实验二 数据库的附加/分离、导入/导出与备份/还原 一、实验目的 1、理解备份的基本概念&#xff0c;掌握各种备份数据库的方法。 2、掌握如何从备份中还原数据库。 3、掌握数据库中各种数据的导入/导出。 4、掌握数据库的附加与分离&#xff0c;理解数据库的附加与分离的作用。…...

Kafka常见问题之 `javax.management.InstanceAlreadyExistsException`

文章目录 Kafka常见问题之 javax.management.InstanceAlreadyExistsException1. 概述2. 常见原因3. 具体异常示例4. 解决方案4.1 确保单一 Kafka Producer 实例4.2 配置 Kafka Broker 和 Producer 使用唯一的 JMX 名称&#xff08;对于Producer重点检查 client.id&#xff09;4…...

性能测试丨JVM 性能数据采集

什么是JVM性能数据采集&#xff1f; JVM性能数据采集是指通过一些工具和技术采集与Java虚拟机相关的性能数据。这些数据包括但不限于内存使用、CPU使用、垃圾回收&#xff08;GC&#xff09;行为、线程活动等。合理地分析这些数据&#xff0c;可以帮助我们找出系统的瓶颈&…...

计算机图形学实验练习(实验1.2-4.1AND补充实验12)

实验1.2 OpenGL与着色器编程 1.理论知识 1.1 OpenGL的含义 OpenGL是一种应用程序编程接口(Application Programming Interface,API),它是一种可以对图形硬件设备特性进行访问的软件库。OpenGL最新的4.3版本包含了超过500个不同的命令,可以用于设置所需的对象、图像和操…...

JWT实现单点登录

文章目录 JWT实现单点登录JWT 简介存在问题及解决方案登录流程后端程序实现前端保存Tokenstore存放信息的缺点及解决 校验流程&#xff1a;为gateway增加登录校验拦截器 另一种单点登录方法&#xff1a;Token&#xff0b;Redis实现单点登录 JWT实现单点登录 登录流程&#xff…...

云计算的概念与特点:开启数字化时代的新篇章

在当今数字化时代,云计算(Cloud Computing)已经成为推动技术创新和业务转型的核心力量。无论是大型企业、中小型企业,还是个人用户,云计算都为其提供了高效、灵活和经济的解决方案。本文将深入探讨云计算的概念及其核心特点,帮助读者全面了解这一革命性技术。 © ivw…...

salesforce中如何获取一个profile的18位id

在 Salesforce 中&#xff0c;要获取一个 Profile 的 18 位 ID&#xff0c;可以通过以下几种方式实现&#xff1a; 方法 1&#xff1a;通过 Developer Console 登录 Salesforce。 点击右上角的 头像 或 设置齿轮&#xff0c;选择 “开发者控制台”&#xff08;Developer Conso…...

Vue 3 中的标签 ref 与 defineExpose:模板引用与组件暴露

在 Vue 3 中&#xff0c;ref 不仅可以用于创建响应式数据&#xff0c;还可以用于获取 DOM 节点或组件实例。通过 ref&#xff0c;我们可以直接访问模板中的元素或组件&#xff0c;并在需要时操作它们。此外&#xff0c;defineExpose 用于在 <script setup> 语法中显式暴露…...

FLTK - FLTK1.4.1 - demo - adjuster.exe

文章目录 FLTK - FLTK1.4.1 - demo - adjuster.exe概述笔记根据代码&#xff0c;用fluid重建一个adjuster.fl 备注 - fluid生成的代码作为参考代码好了修改后可用的代码END FLTK - FLTK1.4.1 - demo - adjuster.exe 概述 想过一遍 FLTK1.4.1的demo和测试工程&#xff0c;工程…...

单路由及双路由端口映射指南

远程登录总会遇到登陆不上的情况&#xff0c;可能是访问的大门没有打开哦&#xff0c;下面我们来看看具体是怎么回事&#xff1f; 当软件远程访问时&#xff0c;主机需要两个条件&#xff0c;一是有一个唯一的公网IP地址&#xff08;运营商提供&#xff09;&#xff0c;二是开…...

专为课堂打造:宏碁推出三款全新耐用型 Chromebook

IT之家 1 月 25 日消息&#xff0c;宏碁&#xff08;Acer&#xff09;昨日&#xff08;1 月 24 日&#xff09;发布公告&#xff0c;针对教育市场&#xff0c;推出 Chromebook Spin 512 (R857T)、Chromebook Spin 511 (R757T) 和 Chromebook 511 (C737) 三款产品&#xff0c;兼…...

云计算架构学习之LNMP架构部署、架构拆分、负载均衡-会话保持

一.LNMP架构部署 1.1. LNMP服务搭建 1.磁盘信息 2.内存 3.负载信息 4.Nginx你们公司都用来干嘛 5.文件句柄(文件描述符 打开文件最大数量) 6.你处理过系统中的漏洞吗 SSH漏洞 7.你写过什么shell脚本 8.监控通过什么告警 zabbix 具体监控哪些内容 9.mysql redis查询 你好H…...

Python案例--暂停与时间格式化

在编程中&#xff0c;时间的处理是一个常见的需求。无论是日志记录、任务调度还是数据时间戳的生成&#xff0c;正确地获取和格式化时间都至关重要。Python 提供了强大的时间处理模块&#xff0c;其中 time 模块是基础且广泛使用的工具之一。本文将通过一个简单的示例&#xff…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...