数据分析之利用RFM模型对餐饮客户进行分析

大数据时代,很多公司虽建立数据仓库解决了数据孤岛问题,但不知如何使用数据。博主利用Python、SQL Server和Tableau,采用经典RFM模型采集某连锁餐饮行业客户数据,经标准化变换后,用K-Means聚类分析将客户分为高、一般和普通价值三类,还对各类客户进行了分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、背景和目标

随着大数据时代的到来,很多公司都建立了数据仓库,对分散在各处的数据进行收集,这只是解决了数据应用中的数据孤岛问题,但是不知道如何对数据进行使用。博主打算利用经典的RFM模型来挖掘数据,对某连锁餐饮行业客户进行分类,分成高价值客户、一般价值客户和普通价值客户,方便针对不同客户制定不同的营销策略

利用的工具:

1.Python3.5

2.SQL Server2014

3.Tableau

二、数据采集和处理

1.从数据库采集所需数据

采集模型中所需要的数据:

消费日期:R=观测结束日期-最后消费日期,单位为天

消费频率:观测窗口设置为最近三个月,单位为次

消费金额:客户的消费总金额

因为我直接从数据库获取的数据是很干净的数据,所以不会存在缺失、重复值,也不会有很大的数据差异,不需要进行清洗和规约。直接使用Python的Pandas从数据库获取数据,因为我电脑配置不高,所以就先选了一万条数据。:


import pymssql
import pandas as pd
import time

#连接数据库
def get_db_connection():
    host = 'xxx'
    port = 1433
    user = 'sa'
    password = 'xxx'
    database = 'xxx'
    conn = pymssql.connect(host=host,user=user,password=password,database=database,charset="utf8")
    print('数据库连接成功')
    return conn
#查询SQL结果并生成DataFrame
def get_df():
    sql= '''select top 10000  MEMBER_CODE,datediff(day,max(dob),'2019-03-15')as R,count(1) as F,sum(sales) as M 
     from xxxx  	
     where dob between '2019-01-01' and '2019-03-15'
	 and MEMBER_CODE is not null
	 group by MEMBER_CODE'''
    conn=get_db_connection()
    #直接使用pandas的read_sql即可转化成DataFrame
    df=pd.read_sql(sql,conn)
    print(df.head())
    # columns=[column=cur.description[i][0] for i in range(len(column=cur.description))] #利用光标获得列名

if __name__ == '__main__':
    get_df()





获取到的数据是这样的:

2.为了避免数据量级对结果产生影响,对采集的数据进行变换。这里采用的数据变换方法是标准化

def get_std_data():
    df=get_df().iloc[:,1:]#会员号是str类型,去掉会员号才可以标准化
    std_data=(df-df.mean(axis=0))/df.std(axis=0)
    print(std_data.head())

变换万之后的数据是这样的:

 

三、建模分析

采用K-Means对客户进行聚类分析,分成三类:高价值客户、一般价值客户和普通价值客户。

def get_result():
    data=get_std_data()
    model=KMeans(n_clusters=3,n_jobs=4)
    model.fit(data)
    print(model.cluster_centers_)#查看聚类中心
    print(model.labels_)#查看个样本对应标签

结果:

四、报告和总结

客户群1在F和M的属性最大,在R的属性最小,说明该客户群经常购买公司的产品,并且很频繁,是优质客户。这一类客户贡献了公司很大的销售额,需要重点保持,优先把资源用在这一部分客户。

客户群2在M和F的属性稍微大点,在R属性最小,说明该客户群也是经常购买产品的,只是频率没那么高,属于一般价值客户。这一类客户消费近期有消费,需要提高他们的购买频率,就有可能成为优质的客户。

客户群3在R属性最大,在M属性最小,说明这个客户很久才购买一次,而且每次买东西也不贵,属于普通价值客户。

简单分析之后,把标签放回原来的数据源,保存成Excel,可以作为训练数据,接下来可以利用这些带标签的数据进行分类。

 

完整代码:


import pymssql
import pandas as pd
from sklearn.cluster import KMeans

#连接数据库
def get_db_connection():
    host = 'xxx'
    port = 1433
    user = 'sa'
    password = 'xxxx'
    database = 'xxxx'
    conn = pymssql.connect(host=host,user=user,password=password,database=database,charset="utf8")
    print('数据库连接成功')
    return conn
#查询SQL结果并生成DataFrame
def get_df(conn):
    sql= '''select top 10000  MEMBER_CODE,datediff(day,max(dob),'2019-03-15')as R,count(1) as F,sum(sales) as M 
     from xxxx  	
     where dob between '2019-01-01' and '2019-03-15'
	 and MEMBER_CODE is not null
	 group by MEMBER_CODE'''
    #直接使用pandas的read_sql即可转化成DataFrame
    df=pd.read_sql(sql,conn)
    return df
    # columns=[column=cur.description[i][0] for i in range(len(column=cur.description))] #利用光标获得列名
def get_std_data(df):
    df=df.iloc[:,1:]#去掉会员号才可以标准化
    std_data=(df-df.mean(axis=0))/df.std(axis=0)
    return std_data

def get_result(data,df):
    model=KMeans(n_clusters=3,n_jobs=4)
    model.fit(data)
    print(model.cluster_centers_)#查看聚类中心
    #把便签放回数据源,这样就可以把会员进行分类了
    df1=pd.DataFrame(list(model.labels_),columns=['Labor'])
    DF=pd.merge(df,df1,how='inner',left_index=True,right_index=True)
    DF.to_excel('data_with_labor.xlsx')
    print(DF.head())


if __name__ == '__main__':
    conn=get_db_connection()
    df=get_df(conn)
    data=get_std_data(df)
    result=get_result(data,df)

 

<think>好的,我需要帮用户寻找关于餐饮企业数据可视化大屏的设计方案或实现方法,涵盖综合数据、营收数据、菜品数据、单店数据、库存数据、会员数据及能耗数据的展示。首先,我得整理用户提到的各个模块,然后结合现有的引用资料,给出可行的解决方案。 根据引用[1]提到的数据可视化库如matplotlib和seaborn,以及动态实时大屏范例,可能使用Echarts和Python Flask来实现动态展示。引用[2]提供了一个基于Echarts和Flack的源码范例,这可以作为基础框架。引用[3]提到使用PowerPivot建立表之间的关系,所以在数据预处理阶段需要处理好数据模型。 接下来,我需要分模块设计每个数据板块。比如综合数据可能需要仪表盘展示关键指标,营收数据用折线图或柱状图显示趋势,菜品数据用热力图或饼图展示销售占比。单店数据可能需要地图标记或分店对比图表,库存数据用库存预警和动态条形图。会员数据可以用RFM模型和漏斗图,能耗数据用堆叠面积图和实时监控。 然后,技术实现方面,前端用Echarts或AntV,后端用Flask处理数据接口,数据库用MySQL或实时数据库,ETL工具处理数据清洗,最后部署到服务器并用Nginx做反向代理。 还要考虑数据联动和权限管理,确保不同角色看到不同数据。最后,生成相关问题,帮助用户进一步探讨细节。</think>### 餐饮企业数据可视化大屏设计方案 #### 一、核心模块设计 1. **综合数据看板** - 使用$仪表盘$展示实时总营收、订单量、客单价等核心指标[^1] - 地图热力图显示全国/区域门店分布与经营状态 - 动态词云展示热搜菜品/客户评价关键词 2. **营收数据分析** - 时序折线图对比$$y = \sum_{i=1}^n (当日营收 - 同期营收)$$ - 环形图展示堂食/外卖/团购渠道占比 - 滚动榜单显示TOP10盈利门店 3. **菜品数据洞察** - 桑基图呈现$$菜品销售流向 = 原料消耗量 \times 转化率$$[^3] - 散点矩阵分析菜品销量与毛利率关系 - 动态条形图展示实时爆款菜品排行 4. **单店数据钻取** - 3D拓扑图展示门店后厨-前厅动线效率 - 时段对比雷达图分析客流高峰特征 - 设备状态监控面板集成IoT传感器数据 #### 二、技术实现路径 1. **数据架构** ```mermaid graph LR A[POS系统] --> B(数据中台) C[供应链系统] --> B D[会员系统] --> B B --> E{实时计算引擎} E --> F[可视化大屏] ``` 2. **关键代码示例(Python+Echarts)** ```python # 实时数据管道 from kafka import KafkaConsumer import json consumer = KafkaConsumer('catering_data', bootstrap_servers=['localhost:9092']) for msg in consumer: data = json.loads(msg.value) # 数据清洗转换 process_data(data) # 更新Redis缓存 update_redis(data) ``` 3. **可视化组件库选型** | 数据类型 | 推荐图表 | 交互特性 | |---------|----------|---------| | 库存预警 | 动态水位图 | 阈值报警 | | 会员画像 | 关系网络图 | 群体筛选 | | 能耗分析 | 堆叠面积图 | 时段对比 | #### 三、实施注意事项 1. 建立统一的$数据字典$规范字段命名 2. 设计响应式布局适配$$1024 \times 768$$到$$7680 \times 4320$$多种分辨率 3. 实现亚秒级数据延迟保障实时性[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值