Python实战07:麦当劳用户市场调研分析

背景问题

自1955年在美国创立以来,麦当劳已发展成为全球快餐业的标志性品牌,其黄金拱门标志几乎遍布世界各地。随着市场环境的变化和技术的发展,麦当劳不断调整其市场营销策略,以适应不同地区消费者的需求和全球健康饮食趋势的变迁。近年来,数字化转型成为麦当劳战略的核心,包括线上点餐的使用、数字化营销的加大投入、以及顾客体验的优化,这一切都旨在提升品牌竞争力并深化与顾客的情感联系。

本数据集提供了针对麦当劳消费用户的市场调研信息,可以用于深入了解顾客偏好、评估产品与服务质量、优化价格策略、精确定位营销活动以及响应健康饮食趋势,从而帮助麦当劳制定更加精准的市场策略,提升顾客满意度和品牌竞争力。

数据说明

问题描述

顾客口味偏好分析
价格敏感度分析
整体喜好分析
顾客画像分类

数据清洗及预览

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import re

plt.rcParams['axes.unicode_minus'] = False

df  = pd.read_csv(r'D:\pythonbag\Datas\mcdonalds.csv',index_col = 0)

print('-'*50)
display(df.head())
print('数据集大小:\n',df.shape)
print('-'*50)
print('数据集存在重复值个数:\n',df.duplicated().sum())
print('-'*50)
print('数据集存在缺失值个数:\n',df.isna().sum())
print('-'*50)
print('数据集信息:')
print(df.info())

由于我把原始数据集的index设置为索引列,所以才会有22条重复记录,考虑到可能存在一些少数客户爱好口味等一模一样的情况,因此不用进行处理。
接下来查看Like和VisitFrequency的唯一值。

for i in ['Like','VisitFrequency']:
    print(df[i].unique())

# 使用正则方法提取Like列的正负数
def extract_number(x):
    # [-+]表示可以是+或-,?表示前面字符可以出现0次或1次,\d+表示一个或多个数字
    match  = re.search(r'[-+]?\d+',str(x))
    if match:
        return int(match.group())
    else:
        return np.nan
df['Like'] = df['Like'].apply(extract_number)

print('数据集描述性统计:')
display(df.describe(include='all'))

把yes和no替换为True和False,方便后面分析

if_list=['yummy','convenient','spicy','fattening','greasy','fast','cheap','tasty','expensive','healthy','disgusting']
df[if_list] = df[if_list].replace({'Yes':True,'No':False})
df.head()

统计每个特征的唯一值的人数

mean_list = ['yummy','convenient','spicy','fattening','greasy','fast','cheap','tasty','expensive','healthy','disgusting']
feature_groupby = {}
for col in mean_list:
    feature_groupby[col] = df.groupby(col)["Gender"].count()
feature_df = pd.DataFrame(data=feature_groupby)
display(feature_df)

for feature in ['VisitFrequency','Gender']:
    visit_groupby = df.groupby(feature)['Gender'].count().reset_index(name='count')
    visit_df = pd.DataFrame(data=visit_groupby)
    display(visit_df)

探索性数据分析

顾客口味偏好分析

count_list = ['yummy','spicy','greasy','tasty','disgusting','VisitFrequency']
df['Age_Q'] = pd.cut(df['Age'],bins=[18,25,40,60],labels=['18-24岁青年','25-39岁成年','40-59岁中年'])

for target in ['Gender','Age_Q']:
    fig = plt.figure(figsize=(20, 30))
    for i,feature in enumerate(count_list,1):
        # .size()和.count()的区别:
        taste_groupby = df.groupby([feature,target]).size().reset_index(name='Count')
        ax = fig.add_subplot(4,3,i)
        sns.barplot(data=taste_groupby,x=feature,y='Count',hue=target,ax=ax)
        plt.xticks(rotation=12,fontsize=12)
        plt.title(feature+'下的'+target+'人数分布情况',fontsize=16)
        plt.xlabel(feature,fontsize=14)
        plt.ylabel('Count',fontsize=14)
        for patch in ax.patches:
            x_loc = patch.get_x()+patch.get_width()/2
            y_loc = round(patch.get_height())
            ax.text(x_loc,y_loc,y_loc,ha='center',va='bottom',fontsize=12)
    plt.tight_layout()
    plt.show()

小结:

  • Yummy美味:
    超过一半的顾客认为麦当劳食物美味,其中女性人数略高于男性人数,25-39岁成年人数最高,其次是40-59岁中年,最后是18-24岁青年。

  • Spicy辣:
    大多数顾客不认为麦当劳食物辣,其中女性人数略高于男性人数,中年人数最高,其次是成年,最后是青年。

  • greasy油腻:
    超过一半的顾客认为麦当劳食物油腻,其中女性人数略高于男性人数,中年人数最高,其次是成年,最后是青年。

  • tasty可口:
    超出一半的顾客认为麦当劳食物可口,其中女性人数略高于男性人数,中年人数最高,其次是成年,最后是青年。

  • disgusting厌恶:
    大多数顾客不认为麦当劳食物令人厌恶,其中男性人数略高于女性人数,中年人数最高,其次是成年,最后是青年。

  • visitFrequency光顾频率:
    Every three months、Once a month、Once a year:
    大多数顾客光顾麦当劳的频率处于低下,说明他们比较注重健康问题,其中男性人数略高于女性人数,中年人数最高,其次是成年,最后是青年。
    More than once a week、never、once a week:
    部分顾客每周至少吃一次,也有的顾客从不吃,其中男新人数和女性人数基本持平。其中More than once a week频率,各类年龄群体人数基本持平,never频率,中年人数最高,其次是成年,最后是青年,Once a year频率成年人数最高,其次是中年人,最后是青年。青年,Once a year频率成年人数最高,其次是中年人,最后是青年。

价格敏感度分析

for target in ['Gender','Age_Q']:
    fig = plt.figure(figsize=(8,10))
    for i,feature in enumerate(['cheap','expensive'],1):
        price_groupby = df.groupby([feature,target]).size().reset_index(name='Count')
        ax = fig.add_subplot(2,2,i)
        sns.barplot(data=price_groupby,x=feature,y='Count',hue=target,ax=ax)
        plt.title(feature+'下的'+target+'人数分布情况',fontsize=12)
        plt.xlabel(feature,fontsize=10)
        plt.ylabel('Count',fontsize=10)
        for patch in ax.patches:
            x_loc = patch.get_x()+patch.get_width()/2
            y_loc = round(patch.get_height())
            ax.text(x_loc,y_loc,y_loc,ha='center',va='bottom')
    plt.show()

小结:

  • cheap便宜:
    超过一半的顾客认为麦当劳便宜,其中女性人数略高于男性人数,中年人数最高,其次是成年,最后是青年。

  • expensive昂贵:
    超出一半的顾客不认为麦当劳食物昂贵,其中男性人数略高于女性人数,中年人数最高,其次是成年,最后是青年。

整体喜好分析

box_list = ['Gender','Age_Q','yummy','convenient','spicy','fattening','greasy','fast','cheap','tasty','expensive','healthy','disgusting','VisitFrequency']
fig = plt.figure(figsize=(20,20))
for i,target in enumerate(box_list,1):
    if i != 14:
        ax = fig.add_subplot(4,4,i)
    else:
        ax = fig.add_subplot(4,4,(14,16))
    sns.boxplot(data=df,x=target,y='Like',ax=ax,width=0.4)
    plt.title(target+'下的Like箱线图分布',fontsize=12)
plt.tight_layout()
plt.show()

小结:

  • Gender:
    女性对麦当劳的喜好评分略高于男性的,女性的评分中位数约为2分,而男性的评分中位数约为1分。
  • Age_Q: 评分中位数最高的是18-24岁青年,约为3分,其次是25-39岁成年,约为2分;最后是40-59岁中年,约为1.5分,可能麦当劳口味对于40-59岁中年而言有些不太习惯,但是他们还是会光顾的。
  • yummy:
    认为美味的顾客对麦当劳评分高于不认为美味的顾客的。
  • convenient:
    认为方便的顾客对麦当劳评分高于不认为方便的顾客的。
  • spicy:
    认为辣的顾客对麦当劳评分略高于不认为辣的顾客的。
  • fattening:
    认为发胖的顾客对麦当劳评分略低于不认为发胖的顾客的。
  • gressy:
    认为油腻的顾客对麦当劳评分略低于不认为油腻的顾客的。
  • fast:
    认为快速的顾客对麦当劳评分略高于不认为快速的顾客的。
  • cheap:
    认为便宜的顾客对麦当劳评分略高于不认为便宜的顾客的。
  • expensive:
    认为昂贵的顾客对麦当劳评分略低于不认为昂贵的顾客的。
  • tasty:
    认为可口的顾客对麦当劳评分高于不认为可口的顾客的。
  • healthy:
    认为健康的顾客对麦当劳评分略高于不认健康宜的顾客的。
  • disgusting:
    认为厌恶的顾客对麦当劳评分低于不认为厌恶的顾客的。
  • VistFrequency: more than once a week和once a week的顾客评分高于其他频率的,不频繁光顾或者从不光顾的例如once a year和never的顾客评分要低很多。

综上所述:
麦当劳在年龄群体中最受青少年顾客的青睐,对成年乃至中年顾客而言可能觉得麦当劳很方便,但口味是其次的;食物口味(除辣味以外)对顾客的喜好评分有显著影响;性别、健康与方便问题则可能有一定的影响但不大,而价格似乎没有显著影响。另外,光顾频率越高就可能会提高顾客对麦当劳的评分。

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值