数据分析案例-在线食品订单数据可视化分析与建模分类

 3f6a7ab0347a4af1a75e6ebadee63fc1.gif

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+


目录

1.项目背景

2.数据集介绍

3.技术工具

4.导入数据

5.数据可视化

6.建模分类

源代码


 

1.项目背景

一、引言

        随着信息技术的快速发展和互联网的普及,人们的生活方式发生了巨大的变化。特别是在餐饮行业,越来越多的消费者选择通过在线平台进行食品订购,这种趋势使得在线食品订单数据呈现出爆炸式的增长。这些数据中蕴含着丰富的消费者行为、市场趋势和商家运营策略等信息,对于餐饮企业和研究机构来说,具有重要的价值。因此,本研究旨在通过对在线食品订单数据进行可视化分析和建模分类,以揭示其中的潜在规律和价值,为餐饮行业的发展提供有力支持。

二、研究背景

1.在线食品订购市场的快速增长

        近年来,随着移动互联网的普及和消费者生活节奏的加快,在线食品订购市场呈现出迅猛的增长态势。越来越多的消费者选择通过手机或电脑进行食品订购,享受便捷、快速的用餐体验。这种趋势使得在线食品订单数据呈现出大规模、高频率的特点,为数据分析和挖掘提供了丰富的素材。

2.数据驱动决策成为餐饮行业的重要趋势

        在数字化时代,数据已经成为企业决策的重要依据。对于餐饮企业来说,通过对在线食品订单数据的分析,可以深入了解消费者的点餐偏好、消费习惯和市场趋势,从而制定更加精准的营销策略和运营策略。同时,数据分析还可以帮助餐饮企业优化菜品组合、定价策略和服务质量,提升竞争力和盈利能力。

3.数据可视化与建模分类技术的广泛应用

        数据可视化与建模分类技术是现代数据分析的重要工具。通过数据可视化,可以将复杂的数据以直观、易懂的方式呈现出来,帮助用户快速识别数据中的模式和趋势。而建模分类技术则可以对数据进行深入挖掘和分析,发现数据之间的关联性和规律性,为决策提供有力支持。这些技术在各个行业都得到了广泛的应用,包括金融、医疗、零售等,但在餐饮行业的应用还处于起步阶段,具有广阔的研究空间和应用前景。

三、研究意义

        本研究的意义在于通过在线食品订单数据的可视化分析和建模分类,为餐饮行业的发展提供新的视角和思路。具体来说,本研究可以帮助餐饮企业更好地了解消费者需求和市场趋势,优化菜品组合和定价策略,提升服务质量和用户体验。同时,本研究还可以为餐饮行业的监管和政策制定提供科学依据,促进行业的健康发展。

2.数据集介绍

本实验数据集来源于Kaggle

在线食品订单数据集

描述:该数据集包含一段时间内从在线订餐平台收集的信息。它包含与职业、家庭规模、反馈等相关的各种属性。

属性:

Age:顾客的年龄。

Gender:客户的性别。

Marital Status:客户的婚姻状况。

Occupation:客户的职业。

Monthly Income:客户的月收入。

Educational Qualifications:客户的教育资格。

Family size:客户家庭中的人数。

latitude:客户所在位置的纬度。

longitude:客户所在位置的经度。

Pin code:客户所在位置的 Pin 码。

Output:订单的当前状态(例如,待处理、已确认、已交付)。

Feedback:客户收到订单后提供的反馈。

目的:该数据集可用于探索人口统计/位置因素与在线订餐行为之间的关系,分析客户反馈以提高服务质量,并可能根据人口统计和位置属性预测客户偏好或行为。

3.技术工具

Python版本:3.9

代码编辑器:jupyter notebook

4.导入数据

首先导入本次实验用到的第三方库并加载数据集,打印前五行数据

2e8859ae94cc48e0bed7bf7435a26fe8.png

6b19199ffd9448e69336bd5160de0a33.png

查看数据大小

08e970903990413a9cb68b218a7be018.png

原始数据共有388行,13列

查看数据基本信息

0b9d885ca7794a5b8ccaccb39a5c2c82.png

查看数值型变量的描述性统计

6b1d60ec31b54afea27aab49a0f7dbea.png

查看非数值型变量的描述性统计

8100f30963b84426ae949d2177ef6c4a.png

查看数据缺失值情况

bae7f452b51443d98a6ba745a29ac377.png

可以发没有缺失值

查看数据重复值情况

112de5bf7a9c44228b09c60880dbbb77.png

可以发现有103个重复数据,删除处理

94eb345f9ab042c7afb717b5c2eb127b.png

5.数据可视化

3d203a35a67440019af9383887e0ea11.png

86944527b5fd41ff84985acac29ca023.png

949b0a989b38428a81927b93caedd70d.png

af1f73477f3d40bd80ad8972975faf19.png

d8696dc9ed574fb0afefc933a51f9f54.png

1fece2dd607342bb9673b3a8273b337a.png

92bd97d45dae4a8e96e04c824b28db2c.png

34d02fa6d81c498f8663cc24d8c3d424.png

88c4c467ccf644dfb67571e6dd4901b1.png

befc4aeaed684964be6535ad92b2816b.png

2510a7a69ac24567b4fd79f51f5d7b39.png

d2ac06f3f7304f669681b66a193ceffc.png

43b27b4dc7684751aff7d7c2e75a0237.png

42e5e77ddfca4c5690d3d83d353522de.png

cb1602bd11a54d83a421db336a70ff01.png

3e826c4993df4b42819a35019ae36f98.png

06d79ae6f1f24d53993f8cb14704418e.png

2defe316821c4a869a2849a5accf4638.png

5018623358b541c0a74dd20860ff45a7.png

c6affa5929e64b499060ec0ec80d7371.png

7768ee003e794a0ca7103b822560b4b3.png

3e6f7fcc5e2e4bf8853644968bc5943e.png

937999c2828b4771a7f100a37f3762c4.png

6.建模分类

cde1e74fe569434dada3c500f7be6db2.png

443aac5955c24e708e60bb6b02a756f6.png

构建随机森林模型

c73bfba8e60b4e61ba9986260593994f.png

d1315ec5a352425fb9935eeb7c46a030.png

我们可以看到,我们得到了相当不错的90%的准确率。

源代码

在线食品订单数据集
描述:该数据集包含一段时间内从在线订餐平台收集的信息。它包含与职业、家庭规模、反馈等相关的各种属性。

属性:
Age:顾客的年龄。
Gender:客户的性别。
Marital Status:客户的婚姻状况。
Occupation:客户的职业。
Monthly Income:客户的月收入。
Educational Qualifications:客户的教育资格。
Family size:客户家庭中的人数。
latitude:客户所在位置的纬度。
longitude:客户所在位置的经度。
Pin code:客户所在位置的 Pin 码。
Output:订单的当前状态(例如,待处理、已确认、已交付)。
Feedback:客户收到订单后提供的反馈。

目的:该数据集可用于探索人口统计/位置因素与在线订餐行为之间的关系,分析客户反馈以提高服务质量,并可能根据人口统计和位置属性预测客户偏好或行为。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
import warnings
warnings.filterwarnings("ignore", "is_categorical_dtype")
warnings.filterwarnings("ignore", "use_inf_as_na")

data = pd.read_csv('onlinefoods.csv')
data.head()
data.shape
data.info()
data.describe() # 查看数值型变量的描述性统计
data.describe(include='O') # 查看非数值型变量的描述性统计
data.isnull().sum() # 统计缺失值情况
data.duplicated().sum() # 统计重复值情况
data.drop_duplicates(inplace=True)
data.duplicated().sum()
# 年龄和家庭规模的分布
sns.set(style="whitegrid")
fig, ax = plt.subplots(1, 2, figsize=(14, 6))
sns.histplot(data['Age'], bins=15, kde=True, ax=ax[0])
ax[0].set_title('Age Distribution')
ax[0].set_xlabel('Age')
ax[0].set_ylabel('Frequency')
sns.histplot(data['Family size'], bins=6, kde=True, ax=ax[1])
ax[1].set_title('Family Size Distribution')
ax[1].set_xlabel('Family Size')
ax[1].set_ylabel('Frequency')
plt.tight_layout()
plt.show()
# 统计图显示了数据集中的性别、婚姻状况、月收入和教育程度的分布
fig, axes = plt.subplots(2, 2, figsize=(14, 12))

sns.countplot(x='Gender', data=data, ax=axes[0, 0])
axes[0, 0].set_title('Gender Distribution')

sns.countplot(x='Marital Status', data=data, ax=axes[0, 1])
axes[0, 1].set_title('Marital Status Distribution')

sns.countplot(x='Monthly Income', data=data, ax=axes[1, 0])
axes[1, 0].set_title('Monthly Income Distribution')
axes[1, 0].tick_params(axis='x', rotation=45)

sns.countplot(x='Educational Qualifications', data=data, ax=axes[1, 1])
axes[1, 1].set_title('Educational Qualifications Distribution')
axes[1, 1].tick_params(axis='x', rotation=45)

plt.tight_layout()
plt.show()
# 年龄与家庭规模的散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(x='Age', y='Family size', data=data, hue='Gender', style='Marital Status', s=100)
plt.title('Relationship between Age and Family Size by Gender and Marital Status')
plt.xlabel('Age')
plt.ylabel('Family Size')
plt.legend(title='Gender / Marital Status', bbox_to_anchor=(1.05, 1), loc='upper left')
plt.tight_layout()
plt.show()
# 该图表显示了不同收入阶层的人下的订单数量
plt.figure(figsize=(12, 6))
sns.countplot(x='Monthly Income', hue='Output', data=data)
plt.title('Income Level vs. Online Ordering Behavior')
plt.xlabel('Monthly Income')
plt.ylabel('Count')
plt.xticks(rotation=45)
plt.legend(title='Ordered Online')
plt.tight_layout()
plt.show()
# 图表显示,根据他们的反馈,不同性别的人数以及根据他们的反馈,不同教育程度的人数
plt.figure(figsize=(12, 6))
sns.countplot(x='Feedback', hue='Gender', data=data)
plt.title('Feedback by Gender')
plt.xlabel('Feedback')
plt.ylabel('Count')
plt.legend(title='Gender')
plt.tight_layout()
plt.show()

plt.figure(figsize=(12, 6))
sns.countplot(x='Feedback', hue='Educational Qualifications', data=data)
plt.title('Feedback by Educational Qualifications')
plt.xlabel('Feedback')
plt.ylabel('Count')
plt.legend(title='Educational Qualifications', bbox_to_anchor=(1.05, 1), loc='upper left')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
# 盒子图显示了不同婚姻状况和年龄的顾客的订购行为
plt.figure(figsize=(12, 6))
sns.boxplot(x='Marital Status', y='Age', hue='Output', data=data)
plt.title('Ordering Behavior by Marital Status and Age')
plt.xlabel('Marital Status')
plt.ylabel('Age')
plt.legend(title='Ordered Online')
plt.tight_layout()
plt.show()
# 该图表显示了不同收入水平人群的正面和负面反馈数量
plt.figure(figsize=(14, 7))
sns.countplot(x='Monthly Income', hue='Feedback', data=data)
plt.title('Income Level and Feedback Sentiment')
plt.xlabel('Monthly Income')
plt.ylabel('Count')
plt.xticks(rotation=45)
plt.legend(title='Feedback', loc='upper right')
plt.tight_layout()
plt.show()
# 图表显示了不同学历的人在网上订餐的数量
plt.figure(figsize=(14, 7))
sns.countplot(x='Educational Qualifications', hue='Output', data=data)
plt.title('Educational Qualifications and Online Ordering')
plt.xlabel('Educational Qualifications')
plt.ylabel('Count')
plt.xticks(rotation=45)
plt.legend(title='Ordered Online', loc='upper right')
plt.tight_layout()
plt.show()
# 数据集中不同特征之间的热图
correlation_matrix = data[['Age', 'Family size', 'latitude', 'longitude', 'Pin code']].corr()
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', linewidths=.5)
plt.title('Heatmap of Correlations Among Numerical Features')
plt.show()
# 小提琴图显示月收入与年龄的关系
plt.figure(figsize=(14, 8))
sns.violinplot(x='Monthly Income', y='Age', data=data)
plt.title('Violin Plots for Monthly Income vs. Age')
plt.xlabel('Monthly Income')
plt.ylabel('Age')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
# 雷达图显示正面反馈数、负面反馈数、教育程度和平均家庭规模之间的关系
data = pd.read_csv('onlinefoods.csv')
data['Output_Numeric'] = data['Output'].map({'Yes': 1, 'No': 0})

data['Positive_Feedback'] = (data['Feedback'] == 'Positive').astype(int)

radar_df_new = data.groupby('Educational Qualifications').agg(
    Average_Age=('Age', 'mean'),
    Average_Family_Size=('Family size', 'mean'),
    Proportion_Positive_Feedback=('Positive_Feedback', 'mean'),
    Proportion_Ordering_Online=('Output_Numeric', 'mean')
).reset_index()

scaler = MinMaxScaler()
radar_df_normalized = pd.DataFrame(scaler.fit_transform(radar_df_new.iloc[:, 1:]), columns=radar_df_new.columns[1:])
radar_df_normalized['Educational Qualifications'] = radar_df_new['Educational Qualifications']

categories_new = list(radar_df_normalized)[1:]
N_new = len(categories_new)

angles_new = [n / float(N_new) * 2 * 3.14159265359 for n in range(N_new)]
angles_new += angles_new[:1]

fig, ax = plt.subplots(figsize=(10, 10), subplot_kw=dict(polar=True))

plt.xticks(angles_new[:-1], categories_new)

ax.set_rlabel_position(0)
plt.yticks([0.2, 0.4, 0.6, 0.8], ["0.2", "0.4", "0.6", "0.8"], color="grey", size=7)
plt.ylim(0,1)

for i, row in radar_df_normalized.iterrows():
    data = radar_df_normalized.loc[i].drop('Educational Qualifications').tolist()
    data += data[:1]
    ax.plot(angles_new, data, linewidth=2, linestyle='solid', label=radar_df_normalized['Educational Qualifications'][i])
    ax.fill(angles_new, data, alpha=0.1)

plt.title('Enhanced Radar Chart for Educational Qualifications', size=20, y=1.1)
plt.legend(loc='upper right', bbox_to_anchor=(0.1, 0.1))

plt.show()
# 下面的条形图显示了正面和负面反馈的数量
data = pd.read_csv('onlinefoods.csv')
sentiment_counts = data['Feedback'].value_counts()

plt.figure(figsize=(8, 6))
sentiment_counts.plot(kind='bar')
plt.title('Feedback Sentiment Distribution')
plt.xlabel('Sentiment')
plt.ylabel('Frequency')
plt.xticks(rotation=45)
for a,b in zip(range(2),sentiment_counts.values):
    plt.text(a,b,'%d'%b,ha='center',va='bottom',fontsize=14)
plt.show()
# 随机森林机器学习(ML)分类模型预测反馈是积极的还是消极的
# 编码处理
encoder = LabelEncoder()
categorical_features = ['Gender', 'Marital Status', 'Occupation', 'Monthly Income', 'Educational Qualifications', 'Output', 'Unnamed: 12']
for feature in categorical_features:
    data[feature] = encoder.fit_transform(data[feature])
# 准备建模数据
X = data.drop(['Feedback', 'latitude', 'longitude', 'Pin code'], axis=1)
y = encoder.fit_transform(data['Feedback'])
# 拆分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 构建随机森林模型
rf_model = RandomForestClassifier(n_estimators=5, random_state=42)
rf_model.fit(X_train, y_train)
# 模型预测
y_pred = rf_model.predict(X_test)
# 模型评估
accuracy_rf = accuracy_score(y_test, y_pred)
report_rf = classification_report(y_test, y_pred)
print(accuracy_rf)
print(report_rf)
我们可以看到,我们得到了相当不错的90%的准确率

资料获取,更多粉丝福利,关注下方公众号获取

a74f7d5d03234f7c8a635562034442a0.gif#pic_center

 

  • 91
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 100
    评论
当涉及到爬虫数据分析可视化时,有许多有趣的案例可以探索。以下是一个案例分析的示例: 案例在线购物网站评论爬虫数据分析可视化 1. 爬取数据:使用爬虫技术从一个在线购物网站上爬取商品评论数据。可以使用Python的库,如BeautifulSoup或Scrapy来完成这个任务。 2. 数据清洗和预处理:对于爬取下来的数据,进行清洗和预处理。去除HTML标签、去除重复的评论、删除无效或不相关的评论等。 3. 文本分析:使用自然语言处理(NLP)技术对评论文本进行情感分析、关键词提取、主题建模等。例如,可以使用NLTK或spaCy库进行文本分析。 4. 可视化分析:使用Python的数据可视化库,如Matplotlib、Seaborn或Plotly来创建图表和可视化结果。以下是一些可能的可视化方式: - 词云图:通过词云图展示评论中出现频率较高的关键词,可以快速了解用户对商品的评价。 - 情感分析柱状图:根据评论文本的情感分析结果,绘制柱状图显示正面、负面和中性评论的比例。 - 主题分布图:通过主题建模技术,绘制主题分布图展示不同主题在评论中的比例。 - 时间趋势图:根据评论发布的时间,绘制时间趋势图显示评论数量的变化情况,可以了解用户对商品的评价是否有明显的变化。 5. 结果分析和洞察:根据可视化结果,分析用户对商品的评价和反馈。例如,通过情感分析和主题建模可以了解用户对商品的整体满意度以及他们对不同方面的评价。 这只是一个例子,实际上,爬虫数据分析可视化可以应用于各种不同的领域和案例。希望这个案例可以给你一些启发!
评论 100
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾派森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值