便利店商品推荐数字大屏:基于python和streamlit

news2025/3/14 6:24:58

基于python和streamlit实现的便利店商品推荐大屏,针对选择困难症消费者。

import streamlit as st
import pandas as pd
import numpy as np
import altair as alt
from datetime import datetime, timedelta
import time


# 模拟数据生成
def generate_data():
    np.random.seed(42)
    products = ['咖啡+三明治', '泡面+火腿肠', '酸奶+水果盒', '薯片+可乐', '饭团+茶饮',
                '巧克力+能量棒', '冰激凌+饼干', '寿司+味增汤', '沙拉+果汁', '关东煮套餐']
    data = pd.DataFrame({
        '组合名称': products,
        '本周销量': np.random.randint(100, 500, len(products)),
        '总价(元)': [15, 12, 18, 10, 20, 25, 13, 22, 17, 16],
        '场景标签': ['早餐', '宵夜', '健康', '休闲', '午餐', '健身', '零食', '日式', '轻食', '热食'],
        '库存状态': ['充足'] * 8 + ['低库存'] * 2
    })
    return data


# 实时趋势模拟
def realtime_trend():
    timestamps = [datetime.now() - timedelta(hours=i) for i in range(24)]
    return pd.DataFrame({
        '时间': timestamps,
        '销量': np.random.poisson(lam=50, size=24).cumsum()
    })


# 大屏布局
def main():
    st.set_page_config(layout="wide")
    st.title("🏪 购物决策")

    # 数据加载
    data = generate_data()
    trend_data = realtime_trend()

    # 第一行:核心指标
    col1, col2, col3 = st.columns(3)
    with col1:
        st.metric("🔥 今日最热组合", "泡面+火腿肠", "+15%销量增长")
    with col2:
        st.metric("🕒 最佳购买时段", "20:00-22:00", "销量峰值")
    with col3:
        st.metric("📈 实时订单量", np.random.randint(50, 200), "环比+8%")

    # 第二行:主视觉区
    tab1, tab2, tab3 = st.tabs(["TOP10组合", "实时趋势", "场景导航"])

    with tab1:
        # 组合排行榜(带交互)
        c = alt.Chart(data).mark_bar().encode(
            x='本周销量:Q',
            y=alt.Y('组合名称:N', sort='-x'),
            color=alt.Color('总价(元):Q', scale=alt.Scale(scheme='goldred')),
            tooltip=['组合名称', '本周销量', '总价(元)', '库存状态']
        ).properties(height=400)
        st.altair_chart(c, use_container_width=True)

    with tab2:
        # 实时趋势图
        line_chart = alt.Chart(trend_data).mark_line().encode(
            x='时间:T',
            y='销量:Q',
            color=alt.value('#FF6B6B')
        ).properties(height=400)
        st.altair_chart(line_chart, use_container_width=True)

    with tab3:
        # 场景导航按钮
        selected_scene = st.radio("选择消费场景:",
                                  ["早餐", "宵夜", "健康", "全部"],
                                  horizontal=True)
        filtered_data = data[data['场景标签'] == selected_scene] if selected_scene != "全部" else data
        st.write(f"### {selected_scene}推荐组合")
        cols = st.columns(3)
        for idx, (_, row) in enumerate(filtered_data.iterrows()):
            with cols[idx % 3]:
                st.image(f"https://picsum.photos/200/100?random={idx}",
                         use_column_width=True)
                st.caption(f"**{row['组合名称']}**  |  ¥{row['总价(元)']}")
                st.progress(row['本周销量'] / 500, text=f"本周销量 {row['本周销量']}份")

    # 第三行:交互模块
    with st.expander("🎮 组合探索游戏"):
        left, right = st.columns(2)
        with left:
            st.subheader("🔀 随机惊喜生成器")
            if st.button("生成我的幸运组合"):
                combo = np.random.choice(data['组合名称'], 2, replace=False)
                st.success(f"🎉 推荐组合:{combo[0]} + {combo[1]} 立减3元!")

        with right:
            st.subheader("🆚 组合PK投票")
            vote_options = np.random.choice(data['组合名称'], 2, replace=False)
            vote = st.radio("哪个更吸引你?", vote_options)
            st.write(f"当前票数: {np.random.randint(50, 100)} vs {np.random.randint(50, 100)}")


# 运行程序
if __name__ == "__main__":
    main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2314696.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenAI智能体初探:使用 OpenAI Responses API 在 PDF 中实现检索增强生成(RAG)

大家好,我是大 F,深耕AI算法十余年,互联网大厂技术岗。 知行合一,不写水文,喜欢可关注,分享AI算法干货、技术心得。 欢迎关注《大模型理论和实战》、《DeepSeek技术解析和实战》,一起探索技术的无限可能! 引子 在信息爆炸的时代,从大量 PDF 文档中快速准确地检索信息…

【实战-解决方案】Webpack 打包后很多js方法报错:not defined

问题分析 在不打包的情况下,方法(如 checkLoginStatus、filterSites、initProgressBar 等)可以正常运行,而经过 Webpack 打包后报 is not defined 错误,通常有以下几个可能的原因: 全局变量丢失 在 Webpac…

【大模型基础_毛玉仁】2.3 基于 Encoder-only 架构的大语言模型

更多内容:XiaoJ的知识星球 目录 2.3 基于Encoder-only 架构的大语言模型2.3.1 Encoder-only 架构2.3.2 BERT 语言模型1)BERT 模型结构2)BERT 预训练方式3)BERT 下游任务 2.3.3 BERT 衍生语言模型1)RoBERTa 语言模型2&a…

链表所有节点值的和

class Node:# 节点类,每个节点包含数据(data)和指向下一个节点的引用(next)def __init__(self, data):self.data data # 存储节点的数据self.next None # 指向下一个节点,默认值为None,表示没有下一个节点class LinkedList:# 链表类&…

STM32 F407ZGT6开发板

#ifndef _tftlcd_H #define _tftlcd_H #include "system.h" //定义LCD彩屏的驱动类型 可根据自己手上的彩屏背面型号来选择打开哪种驱动 //#def…

c# txt文档的实时显示,用来查看发送接收指令

通讯历史按钮 private void uiButton1_Click(object sender, EventArgs e){try{logf new logF();logf.Show();}catch (Exception){throw;} }主页面关闭函数(点击保存就为true true就不删除) private void page1_FormClosed(object sender, FormClos…

Excel 数据转换为SQL语句

文章目录 一、制作公式二、示例图 一、制作公式 1、找一列空白的,选中一个单元格,输入"",在双引号中写入INSERT语句脚本,然后回车。 // 数字代表行数 “INSERT INTO PayList (product, rmb) VALUES (”&A10&“…

SpringMVC (一)基础

目录 SpringMVC 一 简单使用 1 新建模块选择指定参数 2 创建实现类 3 将项目启动 4 运行结果:在浏览器当中响应执行 二 RequestMapping 三 请求限定 SpringMVC SpringMVC是Spring的web模块,用来开发Web应用,SpringMVC应用最终作为B/…

windows第十二章 MFC控件常用消息

文章目录 控件反射消息机制文本框控件EN_CHANGE消息EN_UPDATE消息EN_SETFOCUS消息EN_KILLFOCUS消息EN_MAXTEXT消息EN_ERRSPACE消息EN_HSCROLL消息 按钮控件BN_CLICKED消息BN_DOUBLECLICKED消息BN_SETFOCUS消息BN_KILLFOCUS消息 单选按钮BN_CLICKED 消息 复选框BN_CLICKEDBN_DOU…

基于C语言的简单HTTP Web服务器实现

1. 概述 本案例使用C语言实现了一个简单的HTTP服务器,能够处理客户端的GET请求,并返回静态文件(如HTML、图片等)。在此案例中案例,我们主要使用的知识点有: Socket编程:基于TCP协议的Socket通信…

ZYNQ初识13(zynq_7020)hdmi和串口板载功能的验证

(1)另:首先需要确认供电模块,电压转换模块没有问题,测量后上电防止出现短路。通过vivado下载bit流文件检测JTAG下载口是否正常,如可正常检测,才可进行下一步验证。 (2)以…

ollama下载的DeepSeek的模型(Model)文件在哪里?(C盘下)

目录 一、下载大模型(DeepSeek) 2. 安装 Ollama 3. 检查安装是否成功 二、拉取大模型(DeepSeek) 1. 打开命令行 2. 下载模型 3. 测试下载 4. 等待下载完成 三.模型存放路径 这个位置!! 在人工智能…

docker的anythingllm和open-webui压缩包分享(国内镜像拉取,百度云压缩包分享)

文章目录 前言第一部分:镜像获取🚀 方式一:切换国内下载镜像✅1. 下载anythingllm✅ 2. 下载open-webui 🚀方式二:下载我分享的百度云✅ anythingllm压缩包百度云链接❎ open-webui压缩包 第二部分:下载之后…

父组件中循环生成多个子组件时,有且只有最后一个子组件的watch对象生效问题及解决办法

提示:父组件中循环生成多个子组件时,有且只有最后一个子组件的watch对象生效问题及解决办法 文章目录 [TOC](文章目录) 前言一、问题二、解决方法——使用function函数代替箭头函数()>{}总结 前言 ‌‌‌‌‌问题:子组件用that解决watch无…

求递增子序列LIS的两种方法

文章目录 前言一、普通动态规划(DP)求解LIS1.DP思路2.DP的状态定义与转移方程3.DP的时间与空间复杂度4.DP代码实现5.DP的图文示例 二、贪心 二分查找求解LIS1.思路分析2.贪心 二分的时间与空间复杂度 三. 模板题讲解1.洛谷B3637 最长上升子序列1.dp写法…

【Linux篇】进程状态(僵尸进程,孤儿进程),优先级与调度机制

📌 个人主页: 孙同学_ 🔧 文章专栏:Liunx 💡 关注我,分享经验,助你少走弯路! 文章目录 1. 前文铺垫理解内核链表 2. 进程状态2.1 进程状态查看2.2 僵尸进程2.3 僵尸进程危害2.4 孤儿…

AI应用加速落地丨MaxKB正在被政府、公共事业、教育和医疗行业用户广泛采纳

2025年2月至3月上旬,伴随着各个行业接入并使用DeepSeek,MaxKB开源知识库问答系统正在被越来越多的行业用户所采纳,是人工智能行业落地的强应用。目前,MaxKB在政府、公共事业、教育和医疗四大行业已经拥有了众多典型案例&#xff0…

2024年第十五届蓝桥杯软件C/C++大学A组——五子棋对弈

蓝桥杯原题: 题目描述: “在五子棋的对弈中,友谊的小船说翻就翻? ” 不!对小蓝和小桥来说,五子棋不仅是棋盘上的较量,更是心与心之间的沟通。这两位挚友秉承着 “ 友谊第一,比赛第二…

复试难度解析,西电先进材料与纳米科技学院学院考研录取情况

01、先进材料与纳米科技学院各个方向 02、24先进材料与纳米科技学院近三年复试分数线对比 PS:材料院24年院线学硕方向降低10分,专硕上涨15分;材料院在分数线相对于其他211、985院校对比来看,依然分数偏低,推荐大家关注…

Deepseek Chatgpt Kimi 推荐的深度学习书单

朋友让推荐一些深度学习的书,让 Deepseek、Chatgpt、Kimi 分别生成了一份书单并做了对比,记录一下以备以后用到。 Chatgpt 推荐的深度学习书 1. chatgpt 推荐的书目截图 1.2 Chatgpt 推荐的深度学习书目文字版 如果你想学习 Deep Learning&#xff0…