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

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907
💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

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

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

一、引言

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

二、数据准备

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

python 复制代码
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 时间轴销量脉冲折线

python 复制代码
# 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 柱状轮播

python 复制代码
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 销量热力矩阵

python 复制代码
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 周末/促销对销量的玫瑰冲击

python 复制代码
# 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 轴联动折线

python 复制代码
# 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 商品销量的词云图

python 复制代码
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 组合大屏

python 复制代码
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')
)

五、总结

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

相关推荐
njsgcs11 分钟前
基于vlm+ocr+yolo的一键ai从模之屋下载模型
人工智能·python·yolo·ocr·vlm
laplace012312 分钟前
Part 4. LangChain 1.0 Agent 开发流程(Markdown 笔记)
前端·javascript·笔记·python·语言模型·langchain
TonyLee01716 分钟前
测试数据集
python
啃火龙果的兔子23 分钟前
Pyglet开发游戏流程详解
python·游戏·pygame
古城小栈31 分钟前
PyO3 库全介绍
python·rust
技术工小李40 分钟前
2026马年年会“接福袋”游戏
python
0思必得01 小时前
[Web自动化] Requests模块请求参数
运维·前端·python·自动化·html
计算机毕设指导61 小时前
基于微信小程序的个性化漫画阅读推荐系统【源码文末联系】
java·python·微信小程序·小程序·tomcat·maven·intellij-idea
百锦再1 小时前
开发抖音小程序组件大全概述
人工智能·python·ai·小程序·aigc·notepad++·自然语言
沃斯堡&蓝鸟1 小时前
DAY34 文件的规范拆分和写法
开发语言·python