新零售销售数据可视化实战:从数据清洗到pyecharts交互图教案

发布时间:2026/9/27 2:50:54

新零售销售数据可视化实战:从数据清洗到pyecharts交互图教案 简介这份教案面向大数据技术类相关专业师生聚焦新零售智能销售数据的可视化实战帮助读者打通从数据获取、清洗规约到交互式图形绘制与工程分析报告撰写的完整链路。资源包内含1个PDF文件约120KB内容为第7章教案文档涵盖教学目标、材料清单、引导性与探究性问题设计、重点难点梳理及理论实验教学过程可直接用于备课或自学参考。目前已有3537人学习下载热度较高。读者可从中获得新零售智能销售设备市场背景与项目分析流程的讲解掌握使用Python读取CSV、JSON等格式数据及清洗异常值、缺失值的方法学会借助pyecharts绘制销售趋势图、库存占比饼图与用户画像分析图并了解如何系统组织分析思路、呈现分析结果、提炼业务洞察并撰写有说服力的工程分析报告适合希望提升数据素养与可视化实战能力的学习者。1. 新零售销售数据可视化一份能直接照着讲的教案长什么样带大数据方向实训课的老师大概都有过这种体验教材上的案例数据太干净学生照着敲完代码跑出图下课就忘真扔给他一份带缺失值、字段名乱七八糟的销售流水立刻卡在pd.read_csv那一步。这份《Python数据可视化实战》第 7 章教案选的是一个更接近真实场景的题目——某公司在广东省投放的新零售智能销售设备流水从读数据、洗数据、规约数据一路做到 pyecharts 交互图最后落到一份工程分析报告。它解决的不是怎么画一张折线图而是一条完整的分析链路怎么走通。适合两类人一是要备这 8 学时课的讲师二是想拿一个端到端案例练手的自学者。整章按 8 学时设计理论 28 学时体系里占一章实验环节拆成 8 个具体任务颗粒度足够细。2. 数据读取与清洗从原始流水到能画图的 DataFrame2.1 先搞清楚这份数据长什么样教案里没有给出完整字段清单但按新零售智能销售设备的典型埋点结构一份销售流水通常包含设备编号、商品大类生鲜/一般商品、商品名称、销售时间、销售金额、促销标记、会员/顾客 ID。常见做法是先读进来用info()和head()摸一遍底别急着写清洗逻辑。这一步的意义在于你得先知道哪些列是数值、哪些是字符串、哪些时间字段是脏的后面规约才有依据。import pandas as pd import numpy as np # 读原始销售流水注意编码新零售系统导出的 CSV 常见 gbk df pd.read_csv(sales_raw.csv, encodinggbk) # 先看结构别急着清洗 print(df.info()) print(df.head()) print(df.isnull().sum()) # 每列缺失值数量 print(df[商品大类].value_counts()) # 大类分布确认有没有脏分类encoding参数是第一个坑很多设备导出的中文 CSV 默认 gbk用 utf-8 读会直接抛UnicodeDecodeError。isnull().sum()给出每列缺失规模是决定删还是填的依据。value_counts()用来发现生鲜和生鲜类这种同义不同写的脏分类这类问题不处理后面按大类聚合会凭空多出几类。2.2 清洗缺失值、异常值、重复记录三件事教案把清洗列为重点实验环节也单列了数据的预处理与规约。清洗不是无脑dropna()得按字段性质分开处理。销售金额缺失的记录通常直接删因为金额是核心指标填了反而误导商品大类缺失可以按商品名称反查补全时间字段缺失的记录要单独看可能是设备时钟异常。# 1. 删除销售金额缺失的行——核心指标不能瞎填 df df.dropna(subset[销售金额]) # 2. 商品大类缺失用商品名称映射补全 category_map {苹果: 生鲜, 白菜: 生鲜, 纸巾: 一般商品} df[商品大类] df[商品大类].fillna(df[商品名称].map(category_map)) # 3. 异常值销售金额为负或超过合理上限的按业务规则剔除 df df[(df[销售金额] 0) (df[销售金额] 10000)] # 4. 去重同一设备同一时间同一商品的重复上报 df df.drop_duplicates(subset[设备编号, 销售时间, 商品名称]) # 5. 时间字段统一转 datetime方便后面按月聚合 df[销售时间] pd.to_datetime(df[销售时间], errorscoerce) df df.dropna(subset[销售时间])每一步都有业务含义金额为负可能是退货记录混进来了超过 10000 的单笔销售在智能零售设备场景下大概率是异常上报。errorscoerce让无法解析的时间变成 NaT 而不是直接报错再统一删掉比逐条 try-except 干净。去重的 subset 选三个字段是因为同一笔交易可能被设备重复上报但不同商品在同一时刻成交是正常的。2.3 规约把明细流水压成能分析的粒度规约的目的教案里写得很清楚——把大量复杂数据简化成易分析的形式。原始流水是每笔交易一行但你要画的是每天各大类销售金额每月大类占比促销与非促销周环比这些都需要先聚合。规约不是丢数据是换粒度。# 按天 大类聚合销售金额供折线图和饼图使用 daily df.groupby([df[销售时间].dt.date, 商品大类])[销售金额].sum().reset_index() daily.columns [日期, 商品大类, 销售金额] # 按月 大类聚合供占比饼图 df[月份] df[销售时间].dt.to_period(M) monthly df.groupby([月份, 商品大类])[销售金额].sum().reset_index() # 促销标记规约成布尔供周环比柱状图 df[是否促销] df[促销标记].map({是: True, 否: False, 1: True, 0: False})dt.date和dt.to_period(M)是 pandas 时间序列的两个常用粒度前者出日期对象后者出 Period画图时 x 轴显示更规整。促销标记的映射要覆盖多种写法真实系统里是/否1/0Y/N都可能出现这一步不做后面分组会漏掉一半数据。3. pyecharts 交互图销售、库存、用户三类图怎么落地3.1 为什么选 pyecharts 而不是 matplotlib教案明确用 pyecharts 画交互式图形这个选型有道理。matplotlib 出的是静态图适合写进报告pyecharts 出的是 HTML鼠标悬停能看具体数值缩放能看细节课堂上演示效果直接拉满。新零售这种带时间维度和多分类的数据交互性带来的体验差距很明显。安装就一句pip install pyecharts注意版本1.x 和 0.5.x 的 API 完全不兼容教案配套 PPT 如果是老版本代码得跟着调。pip install pyecharts # 如果要导出图片还需要 snapshot-selenium 或 snapshot-phantomjs pip install snapshot-selenium3.2 销售分析图折线图看趋势饼图看结构实验环节要求画生鲜类商品和一般商品每天销售金额的折线图和按月各大类销售金额占比饼图。折线图用Line饼图用Pie两个图的数据源就是上一章规约出来的daily和monthly。from pyecharts.charts import Line, Pie from pyecharts import options as opts # 折线图生鲜 vs 一般商品每日销售金额 line Line() line.add_xaxis(sorted(daily[日期].unique().tolist())) for cat in [生鲜, 一般商品]: sub daily[daily[商品大类] cat].sort_values(日期) line.add_yaxis(cat, sub[销售金额].tolist(), is_smoothTrue) line.set_global_opts( title_optsopts.TitleOpts(title每日销售金额趋势), xaxis_optsopts.AxisOpts(name日期), yaxis_optsopts.AxisOpts(name销售金额元), tooltip_optsopts.TooltipOpts(triggeraxis), # 悬停显示同一天两条线数值 ) line.render(sales_trend.html)is_smoothTrue让折线平滑趋势更直观但要注意平滑会轻微扭曲真实波动做严谨分析时建议关掉。triggeraxis是折线图的关键配置鼠标移到某一天能同时看到两个大类的数值对比才有意义。饼图那边按月聚合Pie的add方法传(类别, 数值)元组列表即可radius参数可以做成环形图视觉上更现代。3.3 库存与用户分析图柱状图和画像实验要求画促销商品和非促销商品销售金额的周环比增长率柱状图以及累计消费前 10 顾客画像。周环比增长率要先按周聚合再算(本周-上周)/上周用Bar画。顾客画像这块教案说的是根据消费情况画像常见做法是聚合出每个顾客的累计消费、购买频次、偏好大类取前 10 名用柱状图或雷达图展示。from pyecharts.charts import Bar # 周环比增长率 df[周] df[销售时间].dt.isocalendar().week weekly df.groupby([周, 是否促销])[销售金额].sum().unstack() weekly[促销环比] weekly[True].pct_change() * 100 weekly[非促销环比] weekly[False].pct_change() * 100 bar Bar() bar.add_xaxis(weekly.index.astype(str).tolist()) bar.add_yaxis(促销商品周环比(%), weekly[促销环比].round(2).tolist()) bar.add_yaxis(非促销商品周环比(%), weekly[非促销环比].round(2).tolist()) bar.set_global_opts(title_optsopts.TitleOpts(title周环比增长率对比)) bar.render(weekly_growth.html)pct_change()直接算环比乘 100 转百分比round(2)保留两位避免图上标签太长。unstack()把促销/非促销从行索引转成列方便同时取两组数据。顾客画像的聚合逻辑类似groupby(顾客ID).agg({销售金额: sum, 销售时间: count})拿到累计消费和频次再nlargest(10, 销售金额)取前十。4. 避坑与排查这份教案落地时最容易翻车的五个点4.1 中文乱码图上是方块CSV 读进来报错现象pyecharts 渲染出的 HTML 标题和坐标轴中文显示成方块或者读 CSV 直接抛UnicodeDecodeError。原因一是 CSV 编码不是 utf-8二是 HTML 模板没声明字符集。解决读文件时显式指定encodinggbk或encodingutf-8-sigpyecharts 生成的 HTML 默认带meta charsetutf-8如果还乱码检查是不是用文本编辑器另存时改了编码。4.2 时间字段解析失败聚合结果为空现象pd.to_datetime之后大量 NaT按天聚合出来只有零星几天。原因原始时间格式不统一有的带秒有的不带有的用斜杠有的用横杠。解决先用errorscoerce兜底再抽样看几种格式必要时用format参数指定或者分多次to_datetime处理不同格式的子集。4.3 pyecharts 版本不兼容add_yaxis报参数错误现象照着老教程写line.add_yaxis(销量, data, mark_point[max])运行报TypeError。原因0.5.x 和 1.x 的 API 差异很大mark_point在 1.x 里挪到了set_series_opts。解决pip show pyecharts确认版本1.x 统一用opts.MarkPointOpts配置别混用两套写法。4.4 周环比算出 inf 或 NaN现象柱状图上出现空白柱或无穷大。原因上一周销售额为 0 时pct_change会得到 inf第一周没有上一周结果是 NaN。解决算之前把 0 替换成 NaN 或用fillna(0)处理画图前dropna()掉第一周或者用replace([np.inf, -np.inf], np.nan)清洗。4.5 顾客画像取前 10 结果不对现象nlargest(10, 销售金额)取出来的顾客消费额差不多看不出差异。原因顾客 ID 字段有缺失或格式不一致导致同一顾客被拆成多个 ID。解决聚合前先dropna(subset[顾客ID])再统一 ID 格式去空格、转字符串确认唯一顾客数合理后再取前十。5. 从图到报告分析思路怎么组织结论怎么落5.1 分析报告的四段式结构教案把撰写工程分析报告列为核心能力实验环节也要求最后产出报告。一份合格的分析报告不是图的堆砌常见做法是按数据来源与处理 → 分析结果 → 业务洞察 → 建议四段走。数据来源部分交代清楚设备覆盖范围、时间跨度、清洗掉了多少记录这是可信度的基础。分析结果部分按销售、库存、用户三条线展开每条线先给图再给一句话结论。业务洞察要落到具体发现比如生鲜类周末销售明显高于工作日促销商品的周环比波动比非促销大。建议部分对应洞察给可执行动作别写加强管理这种空话。5.2 用一张汇总表把关键指标钉死报告里最容易被追问的是你这个结论基于什么数。建议在报告开头放一张关键指标汇总表把总销售额、日均销售额、生鲜占比、促销占比、Top10 顾客消费集中度列清楚。这样后面任何一张图、任何一个结论都能回溯到具体数字。指标数值说明总销售额按实际数据填清洗后全量求和日均销售额总销售额/天数剔除无销售日期生鲜类占比生鲜销售额/总销售额反映品类结构促销商品占比促销销售额/总销售额评估促销依赖度Top10 顾客集中度Top10 消费/总消费判断用户集中风险5.3 一个具体技巧把 pyecharts 图嵌进报告纯 HTML 报告可以直接用Page把多张图拼成一个页面Page(layoutPage.DraggablePageLayout)支持拖拽布局导出后就是一个可交互的分析看板。如果要写 Word 或 PDF 报告用snapshot-selenium把图导成 PNG 再插入注意导出前先render一次确保 HTML 正常。from pyecharts.charts import Page page Page(layoutPage.DraggablePageLayout) page.add(line, pie, bar) page.render(report_dashboard.html)DraggablePageLayout让每张图可以拖动调整位置适合做课堂演示或交付给业务方看的看板。导出 PNG 时如果中文乱码是 selenium 用的浏览器字体问题换成本地已装中文字体的 Chrome 驱动即可。我第一次带这个案例时图全画完了才发现顾客 ID 字段有 30% 缺失前十画像根本不可信只能回头补数据校验。从那以后我每次做聚合分析前都强制先跑一遍isnull().sum()和nunique()确认字段可用再往下走。希望这份拆解帮到你把第 7 章这 8 学时真正落地成学生能带走的一条分析链路。本文还有配套的精品资源点击获取
延伸阅读

更多相关文章

2026/9/27 2:45:54

告别拖延症:大型门户网站核心技术图解步骤

告别拖延症:大型门户网站核心技术图解步骤 改个需求建站公司拖一周,这种憋屈事你干过吗?明明只是调个间距、换个颜色,外包团队却让你再等三天,理由永远是“系统复杂、不敢动”。别怪你急,是他们的技术架构烂。今天不整虚的,直接上…

2026/9/27 2:45:54

USART+DMA+空闲中断:GD32F303不定长串口接收方案详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/27 3:30:57

总结 9.26

今天学了数学的无穷级数,了解了正项级数审敛法,使用凑形式的方法求和函数,就是提出x,然后学了伪装成常数项级数的幂级数,特征就是多少方,也是凑形式,然后出现下面是n的别想着求导再求积分&#…

2026/9/27 3:30:57

R语言钻石价格分析:从散点图到定价因子的回归建模实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/27 3:30:57

2026年10款硬核降AI率工具推荐:AIGC检测轻松绿灯过关

随着知网、维普、万方等主流学术平台对AIGC检测标准不断收紧,论文的AI痕迹与查重率问题愈发受到关注。如何高效降低AI生成内容的痕迹,成为众多研究者亟需解决的难题。本文将实测对比10款主流降AI工具,为读者提供客观参考与实用建议。为什么需…

2026/9/27 0:00:45

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/27 0:00:45

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:45

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:45

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/27 0:00:45

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:45

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/25 20:55:38

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/26 19:58:38

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/25 18:34:56

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑