基于关联规则算法的超市数据分析可视化大屏

1、项目介绍

本项目旨在通过对超市销售数据的可视化展示与分析,帮助管理者更好地理解销售趋势、发现销售模式,并优化库存管理和营销策略。系统使用关联规则挖掘、时间序列分析等技术,对销售数据进行深入挖掘,生成多种可视化图表,提供直观的分析结果。

1.1 项目简介

本项目开发了一个基于Flask的web应用,通过对超市销售数据的分析与可视化展示,提供销售趋势、类别销售额统计、关联规则分析等多维度的销售数据洞察。系统界面友好,能够实时更新并展示最新的销售数据分析结果。

1.2 技术栈

  • 后端:Flask

  • 前端:HTML、CSS、JavaScript

  • 数据处理:Pandas

  • 数据可视化:Pyecharts等

  • 数据存储:CSV文件

1.3 实现功能

  1. 数据加载

    1. 从CSV文件加载销售数据,包括子类别销售总额、销售趋势数据、关联规则数据、节点边数据、大类别销售数据。

  2. 数据可视化

    1. 条形图:展示支持度前10的关联规则。

    2. 饼图:展示子类别销售额统计。

    3. 折线图:展示销售金额和销售数量的趋势图。

    4. 置信度条形图:展示置信度前10的关联规则。

    5. 网络图:展示关联规则网络结构。

    6. 漏斗图:展示大类别销售数量。

  3. Web展示

    1. 主页面展示所有图表,包括条形图、饼图、折线图、置信度条形图、网络图和漏斗图。

    2. 实时显示当前日期和时间。

    3. 采用响应式布局,适应不同屏幕大小。

1.4项目启动方式

本项目可以通过以下两种方式启动:

1.4.1 通过Jupyter Notebook启动

在Jupyter Notebook中运行以下代码块,可以启动Flask应用

1.4.2 通过PyCharm启动

或可以在PyCharm中可以直接运行app.py文件来启动Flask应用。具体步骤如下:

  1. 打开PyCharm并加载项目。

  2. 确保项目的虚拟环境已经激活,并安装了所有必要的依赖包。

  3. 在项目目录中找到app.py文件。

  4. 右键点击app.py文件,选择Run 'app'

  5. 查看PyCharm下方的控制台输出,确认Flask应用已经成功启动,并显示运行地址,例如:http://127.0.0.1:9999。

2、项目效果截图

3、运行视频

点击查看运行视频运行效果

4、核心代码

def create_line_chart(data):
    # 准备趋势图数据
    print(data.head())
    months = data['销售月份'].tolist()
    sales_amount = data['销售金额'].tolist()
    sales_quantity = data['销售数量'].tolist()

    line = (
        Line(init_opts=opts.InitOpts(width="550px", height="200px"))
        .add_xaxis(months)
        .add_yaxis("销售金额(万元)", sales_amount, yaxis_index=0, label_opts=opts.LabelOpts(is_show=False))
        .add_yaxis("销售数量(万件)", sales_quantity, yaxis_index=1, label_opts=opts.LabelOpts(is_show=False))
        .extend_axis(
            yaxis=opts.AxisOpts(
                name="销售数量(万件)",
                type_="value",
                min_=0,
                max_=max(sales_quantity) * 1.2,
                position="right",
                axisline_opts=opts.AxisLineOpts(is_show=True, linestyle_opts=opts.LineStyleOpts(color="white")),
                # 添加轴线显示
                axislabel_opts=opts.LabelOpts(formatter="{value} 万件", color="white"),
                splitline_opts=opts.SplitLineOpts(is_show=False),  # 去除网格线
                interval=1  # 调整Y轴刻度间隔
            )
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(title="销售金额和销售数量趋势图", pos_top="5%",
                                      title_textstyle_opts=opts.TextStyleOpts(color="white",font_size=14),
                                      pos_left='center'  # 标题居中对齐
                                      ),
            yaxis_opts=opts.AxisOpts(
                name="销售金额(万元)",
                type_="value",
                min_=0,
                max_=max(sales_amount) * 1.2,
                position="left",
                axisline_opts=opts.AxisLineOpts(is_show=True, linestyle_opts=opts.LineStyleOpts(color="white")),
                # 添加轴线显示
                axislabel_opts=opts.LabelOpts(formatter="{value} 万元", color="white"),
                splitline_opts=opts.SplitLineOpts(is_show=False),  # 去除网格线
                interval=5  # 调整Y轴刻度间隔
            ),
            xaxis_opts=opts.AxisOpts(
                axislabel_opts=opts.LabelOpts(rotate=45, color="white"),
                axisline_opts=opts.AxisLineOpts(is_show=True, linestyle_opts=opts.LineStyleOpts(color="white")),
                # 添加X轴线显示
                splitline_opts=opts.SplitLineOpts(is_show=False),  # 去除网格线
            ),

            legend_opts=opts.LegendOpts(orient="vertical",
                                        pos_bottom="0%",
                                        pos_left="75%",  # 将图例位置调整到更右边
                                        textstyle_opts=opts.TextStyleOpts(color='white', font_size=10)

                                        ),
        )
        .set_series_opts(
            label_opts=opts.LabelOpts(
                font_size=10,  # 设置字体大小
                font_family="Arial",  # 设置字体
                color="white"  # 设置字体颜色
            )
        )
    )

    return line


def draw_bar(data):
    rules = data.sort_values(by='lift', ascending=False).head(10)  # 取提升度前10的规则
    print(rules["lift"])
    bar = (
        Bar(init_opts=opts.InitOpts(width="500px", height="220px"))
        .add_yaxis("置信度", rules['confidence'].round(3).tolist())
        # .add_yaxis("提升度", rules['lift'].tolist())
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title="关联度置信指标",
                title_textstyle_opts=opts.TextStyleOpts(color='white', font_size=14),  # 确保文字颜色为白色并增加字体大小
                pos_top='10%',  # 保持标题在顶部5%的位置
                pos_left='center'  # 标题居中对齐
            ),
            legend_opts=opts.LegendOpts(
                orient="vertical",
                pos_right='5%',
                pos_top='10%',
                textstyle_opts=opts.TextStyleOpts(color='white', font_size=10)
            ),
            xaxis_opts=opts.AxisOpts(
                axislabel_opts=opts.LabelOpts(rotate=45, color="white", font_size=8),  # 确保字体大小正确
                splitline_opts=opts.SplitLineOpts(is_show=False),  # 去除网格线
                min_=0.5,  # 强制显示Y轴
                max_=0.62,  # 设置Y轴的最大值
                interval=0.1,  # 减少Y轴刻度数
            ),
            yaxis_opts=opts.AxisOpts(
                axislabel_opts=opts.LabelOpts(formatter="{value}", color="white", font_size=6),
                splitline_opts=opts.SplitLineOpts(is_show=False),  # 去除网格线
                min_=0,  # 强制显示Y轴
                max_=0.7,  # 设置Y轴的最大值
                # interval=0.1,  # 减少Y轴刻度数
                axisline_opts=opts.AxisLineOpts(
                    # 设置轴线颜色
                    linestyle_opts=opts.LineStyleOpts(color="white"),
                    # 是否显示轴线
                    is_show=True, )
            )
        ))
    return bar

5、最后

点击了解更多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值