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

【数据可视化-70】奶茶店销量数据可视化:打造炫酷黑金风格的可视化大屏

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907

💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述

【数据可视化-70】奶茶店销量数据可视化:打造炫酷黑金风格的可视化大屏

    • 一、引言
    • 二、数据准备
    • 三、图表设计
    • 四、完整代码实现
      • 4.1 时间轴销量脉冲折线
      • 4.2 商品销量 TOP8 3D 柱状轮播
      • 4.3 天气 vs 销量热力矩阵
      • 4.4 周末/促销对销量的玫瑰冲击
      • 4.5 销售额 & 客单价双 Y 轴联动折线
      • 4.6 商品销量的词云图
      • 4.7 组合大屏
    • 五、总结

一、引言

  在数据分析的世界里,数据可视化不仅仅是将数据转化为图形,更是一种艺术和科学的结合。今天,我们将使用 Python 和 Pyecharts 来打造一个炫酷的黑金风格的可视化大屏,展示奶茶店的销售数据。这个大屏将包含多个图表,每个图表都以其独特的方式揭示数据中的洞察。

二、数据准备

  首先,我们需要准备数据。假设你已经有一个名为 奶茶店每日订单.csv 的文件,包含以下字段:日期星期商品天气是否周末是否促销销量客单价销售额。我们将使用 Python 的 Pandas 库来读取和处理这些数据。

import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import *
from pyecharts.globals import ThemeType, SymbolType
from pyecharts.commons.utils import JsCode
# 1️⃣ 读取数据
df = pd.read_csv('奶茶店每日订单.csv', parse_dates=['日期'])# 2️⃣ 数据预处理
df['月份'] = df['日期'].dt.month_name()
df['星期'] = df['星期'].astype('category').cat.reorder_categories(['周一','周二','周三','周四','周五','周六','周日'], ordered=True)# 3️⃣ 计算聚合指标
# 3.1 日期维度
daily = df.groupby('日期').agg({'销量':'sum','销售额':'sum'}).reset_index()# 3.2 商品维度
item_top8 = (df.groupby('商品').agg({'销量':'sum','销售额':'sum'}).sort_values('销量', ascending=False).head(8).reset_index())
item = (df.groupby('商品').agg({'销量':'sum','销售额':'sum'}).sort_values('销量', ascending=False).reset_index())
# 3.3 天气维度
weather = df.groupby(['天气','商品'])['销量'].sum().reset_index()
weather_matrix = weather.pivot(index='商品', columns='天气', values='销量').fillna(0)# 3.4 周末/促销
weekend_promo = df.groupby(['是否周末','是否促销'])['销量'].sum().reset_index()

三、图表设计

  我们将设计以下六个图表:

  1. 时间轴销量脉冲折线:展示每天的销量变化,背景为黑色,折线为荧光绿。
  2. 商品销量 TOP8 3D 柱状轮播:展示销量最高的前 8 种商品。
  3. 天气 vs 销量热力矩阵:展示不同天气条件下各商品的销量。
  4. 周末/促销对销量的玫瑰冲击:展示周末和促销对销量的影响。
  5. 销售额 & 客单价双 Y 轴联动折线:展示销售额和客单价的变化。
  6. 商品销量的词云图:展示各商品的销量分布。

四、完整代码实现

4.1 时间轴销量脉冲折线

# 4.1 时间脉冲折线(黑金荧光绿)
line_time = (Line(init_opts=opts.InitOpts(width='100%', height='300px', theme=ThemeType.DARK)).add_xaxis(daily['日期'].dt.strftime('%m-%d').tolist()).add_yaxis('销量', daily['销量'].tolist(),is_smooth=True,linestyle_opts=opts.LineStyleOpts(width=3, color='#39FF14'),itemstyle_opts=opts.ItemStyleOpts(color='#39FF14')).set_global_opts(title_opts=opts.TitleOpts(title='销量时间脉冲', subtitle='黑底荧光绿'),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45, color='#fff')),yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(color='#fff')),legend_opts=opts.LegendOpts(textstyle_opts=opts.TextStyleOpts(color='#fff')))
)

4.2 商品销量 TOP8 3D 柱状轮播

bar3d = (Bar3D(init_opts=opts.InitOpts(width='100%', height='400px', theme=ThemeType.DARK)).add('',[[i, j, int(item_top8.iloc[i]['销量'])] for i in range(8) for j in range(1)],xaxis3d_opts=opts.Axis3DOpts(type_='category', data=item_top8['商品'].tolist()),yaxis3d_opts=opts.Axis3DOpts(type_='category', data=['销量']),zaxis3d_opts=opts.Axis3DOpts(type_='value'),).set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=item_top8['销量'].max(),range_color=['#1E1E1E', '#FF00FF']),title_opts=opts.TitleOpts(title='商品销量 TOP8 3D'))
)

4.3 天气 vs 销量热力矩阵

heat = (HeatMap(init_opts=opts.InitOpts(width='100%', height='600px', theme=ThemeType.DARK,bg_color='rgba(5,10,20,0.9)',page_title="天气与商品销量热力图")).add_xaxis(weather_matrix.columns.tolist()).add_yaxis(series_name="销量",yaxis_data=weather_matrix.index.tolist(),value=[[j, i, int(weather_matrix.iloc[i, j])] for i in range(len(weather_matrix)) for j in range(len(weather_matrix.columns))],label_opts=opts.LabelOpts(is_show=True, color='#fff', font_size=10)).set_global_opts(title_opts=opts.TitleOpts(title="天气 vs 商品销量热力图",subtitle="数据来源:销售数据分析系统",title_textstyle_opts=opts.TextStyleOpts(color="#FFD700", font_size=24,font_weight="bold"),subtitle_textstyle_opts=opts.TextStyleOpts(color="#AAA", font_size=16),pos_left="center"),xaxis_opts=opts.AxisOpts(name="商品",name_textstyle_opts=opts.TextStyleOpts(color="#FFF"),axislabel_opts=opts.LabelOpts(color='#fff',rotate=45,interval=0,font_size=10),splitline_opts=opts.SplitLineOpts(is_show=True)),yaxis_opts=opts.AxisOpts(name="天气",name_textstyle_opts=opts.TextStyleOpts(color="#FFF"),axislabel_opts=opts.LabelOpts(color='#fff', font_size=12),splitline_opts=opts.SplitLineOpts(is_show=True)),visualmap_opts=opts.VisualMapOpts(is_show=True, orient='horizontal',pos_top='50px',pos_left='center',min_=1000,max_=5000,range_color=['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'],textstyle_opts=opts.TextStyleOpts(color="#FFF")),tooltip_opts=opts.TooltipOpts(formatter=JsCode("""function(params) {return '天气: ' + params.value[1] + '<br/>'+ '商品: ' + params.value[0] + '<br/>'+ '销量: ' + params.value[2];}""")),toolbox_opts=opts.ToolboxOpts(is_show=True,pos_left="right",feature={"saveAsImage": {"pixelRatio": 2, "title": "保存图片"},"dataView": {"title": "数据视图"},"restore": {"title": "重置"},"dataZoom": {"title": "区域缩放"}})).set_series_opts(itemstyle_opts={"borderColor": "#111","borderWidth": 1})
)

4.4 周末/促销对销量的玫瑰冲击

# 4.4 周末/促销玫瑰图
rose = (Pie(init_opts=opts.InitOpts(width='100%', height='400px', theme=ThemeType.DARK)).add('',[list(z) for z in zip([f'周末={w},促销={p}' for w, p in zip(weekend_promo['是否周末'], weekend_promo['是否促销'])],weekend_promo['销量'])],radius=['20%', '75%'],rosetype='radius',label_opts=opts.LabelOpts(is_show=True, formatter='{b}:{c}', color='#fff')).set_colors(['#FF00FF', '#00FFFF', '#FFFF00', '#39FF14']).set_global_opts(title_opts=opts.TitleOpts(title='周末/促销销量玫瑰'))
)

4.5 销售额 & 客单价双 Y 轴联动折线

# 4.5 销售额+客单价双 Y 轴
line_dual = (Line(init_opts=opts.InitOpts(width='100%', height='350px', theme=ThemeType.DARK)).add_xaxis(daily['日期'].dt.strftime('%m-%d').tolist()).add_yaxis('销售额', daily['销售额'].tolist(), yaxis_index=0,linestyle_opts=opts.LineStyleOpts(width=3, color='#FFFF00')).extend_axis(yaxis=opts.AxisOpts(name='客单价',type_='value',position='right',axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color='#00FFFF')),axislabel_opts=opts.LabelOpts(color='#00FFFF'))).add_yaxis('客单价', (daily['销售额']/daily['销量']).round(2).tolist(),yaxis_index=1,linestyle_opts=opts.LineStyleOpts(width=3, color='#00FFFF')).set_global_opts(title_opts=opts.TitleOpts(title='销售额 & 客单价双轴'),legend_opts=opts.LegendOpts(textstyle_opts=opts.TextStyleOpts(color='#fff')))
)

4.6 商品销量的词云图

words = [(row['商品'], int(row['销量'])) for _, row in item_top8.iterrows()]
wordcloud = (WordCloud(init_opts=opts.InitOpts(theme=ThemeType.DARK)).add('', words, word_size_range=[20, 100],textstyle_opts=opts.TextStyleOpts(color='random')).set_global_opts(title_opts=opts.TitleOpts(title='销量词云'))
)

4.7 组合大屏

from pyecharts.charts import Page# 组合大屏
page = (Page(layout=Page.DraggablePageLayout, init_opts=opts.InitOpts(width='100%', height='100%', theme='dark')).add(line,bar3d,heat,rose,line_dual,wordcloud,).render('dashboard.html')
)

五、总结

  通过上述代码,我们成功地将奶茶店的销售数据转化为一个炫酷的黑金风格的可视化大屏。每个图表都以其独特的方式揭示了数据中的洞察,帮助我们更好地理解奶茶店的销售情况。希望这篇文章对你有所帮助,如果你有任何问题或建议,欢迎在评论区留言。

http://www.dtcms.com/a/291895.html

相关文章:

  • Vue + WebSocket 实时数据可视化实战:多源融合与模拟数据双模式设计
  • AI创作系列第22篇:前端缓存与更新机制重构 - 表情包系统的全面升级
  • 贪心算法Day4学习心得
  • 当直播间告别“真人时代”:AI数字人重构商业新秩序
  • haproxy七层代理新手入门详解
  • 零事故网站重构:11步标准化流程与风险管理指南
  • 第13天 | openGauss逻辑结构:表管理1
  • zabbix“专家坐诊”第295期问答
  • SPI的收发(W25Q64外部flash 和 内部flsah)
  • 小米视觉算法面试30问全景精解
  • Android常用的adb和logcat命令
  • 【bug】ubuntu20.04 orin nx Temporary failure resolving ‘ports.ubuntu.com‘
  • 【测试开发】---Bug篇
  • kafka主题管理详解 - kafka-topics.sh
  • Claude Code Kimi K2 环境配置指南 (Windows/macOS/Ubuntu)
  • 热点leetCode题
  • AI助力临床医学科研创新与效率双提升丨临床医学日常工作、论文高效撰写与项目申报、数据分析与可视化、机器学习建模等
  • Vercel AI SDK 3.0 学习入门指南
  • Java设计模式揭秘:深入理解模板方法模式
  • 一个简单实用的 WinForm 通用开发框架
  • 替代Oracle?金仓数据库用「敢替力」重新定义国产数据库
  • Pygame开源--谷歌小恐龙游戏(附彩蛋)
  • Custom SRP - Draw Calls
  • 从零构建智能对话助手:LangGraph + ReAct 实现具备记忆功能的 AI 智能体
  • Spring Boot 整合 Redis 实现发布/订阅(含ACK机制 - 事件驱动方案)
  • 【Autosar】RTE(Runtime Environment)层详解
  • lspci/setpci用法小结
  • Day 18:推断聚类后簇的类型
  • 支付网关系统前后端鉴权方案
  • LLaMA-Mesh:语言模型驱动的3D内容生成革命