上海市拌客(武宁路店) 餐饮店的外卖订单详情表数据为可视化
一、目的分析店铺的营收情况
天池大赛数据集下载地址:https://tianchi.aliyun.com/dataset/128777
背景
现在的餐饮行业越来越像是一座围城,外面的人看着红红火火,里面的人冷暖自知。
物价不断飙升,租金成本、劳动力成本日益增加,餐饮行业遭遇到了新的挑战,新一轮的洗牌在所难免。
有知名餐饮机构的黯然退场,就有新兴餐饮品牌的粉墨登场。
一、提前准备
1、python第三方库的准备
# 载入库,做基本的设置
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import warnings # 警告库
import jieba
# pyecharts部分的载入
import pyecharts
from pyecharts.charts import *
# 载入pyecharts的所有图形元件
from pyecharts import options as opts
# 载入pyecharts的配置选项
warnings.filterwarnings('ignore')
# 忽略代码中遇到的警告信息
# 设置Seaborn的绘图风格,注意该操作会覆盖matplotlib的设置,因此需要放在matplotlib的设置语句之前
sns.set(style = 'darkgrid')
plt.rcParams['font.sans-serif'] = ['SimHei'] # 正常显示中文
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
E:\Anaconda3\lib\site-packages\pandas\core\computation\expressions.py:20: UserWarning: Pandas requires version '2.7.3' or newer of 'numexpr' (version '2.7.1' currently installed).
from pandas.core.computation.check import NUMEXPR_INSTALLED
二、理解数据 数据清洗
首先,我们需要用pandas库进行数据库的读取。
然后,在用pandas里面的read_csv进行数据库的读取,
读取order.csv文件
order = pd.read_csv('orders.csv',encoding='gbk')
# 查看前五行数据
order.head()
addTime | 下单日期 | 下单日期时间 | 下单时间 | 品牌名称 | 城市 | 平台 | 用户id | 订单id | 订单状态 | ... | 服务费 | 用户实付 | 菜品个数 | 菜品总数 | 订单数 | 订单金额 | 距离 | 配送费 | 门店ID | 餐盒费 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2020/8/1 9:22 | 2020-07-28 | 2020-07-28 11:01:00 | 11:01:28 | 拌客(武宁路店) | 上海 | eleme | 35344964 | 5004510000000000000 | settled | ... | -5.50 | 6.80 | 11 | 11 | 1 | 43.80 | 797.0 | 0.8 | 337460136 | 2.0 |
1 | 2020/8/1 9:22 | 2020-07-28 | 2020-07-28 20:12:00 | 20:12:39 | 拌客(武宁路店) | 上海 | eleme | 22215837 | 5004550000000000000 | settled | ... | -5.50 | 32.96 | 13 | 13 | 1 | 57.96 | 239.0 | 0.8 | 337460136 | 2.0 |
2 | 2020/8/1 9:23 | 2020-07-28 | 2020-07-28 20:18:00 | 20:18:21 | 拌客(武宁路店) | 上海 | eleme | 28152060 | 5004550000000000000 | settled | ... | -5.84 | 31.04 | 14 | 14 | 1 | 63.04 | 239.0 | 0.8 | 337460136 | 2.0 |
3 | 2020/8/1 9:23 | 2020-07-28 | 2020-07-28 11:42:00 | 11:42:03 | 拌客(武宁路店) | 上海 | eleme | 521118154 | 5004510000000000000 | settled | ... | -5.50 | 21.52 | 9 | 10 | 1 | 45.52 | 2978.0 | 3.3 | 337460136 | 2.0 |
4 | 2020/8/1 9:24 | 2020-07-28 | 2020-07-28 23:06:00 | 23:06:48 | 拌客(武宁路店) | 上海 | eleme | 17026312 | 5004560000000000000 | settled | ... | -5.97 | 35.72 | 15 | 15 | 1 | 65.72 | 518.0 | 2.8 | 337460136 | 2.0 |
5 rows × 37 columns
order.loc[order['配送地址eleme']=='121.441305,31.246957','配送地址eleme']='普陀区澳门路872弄7号'
order.loc[order['配送地址eleme']=='121.420720,31.241970','配送地址eleme']='普陀区白兰路137弄2号 '
order.loc[order['门店ID']==337460136,'门店ID']='一店'
order.loc[order['门店ID']==9698624,'门店ID']='二店'
order.loc[order['门店ID']==2043564542,'门店ID']='三店 '
order.loc[order['门店ID']==9428110,'门店ID']='四店 '
order.loc[order['订单状态']=='9','订单状态']='msettled '
order.loc[order['订单状态']=='8','订单状态']='minvalid '
order.loc[order['配送类型']==2002,'配送类型']='美团配送'
order.loc[order['配送类型']==2,'配送类型']='饿了么配送'
order.loc[order['配送类型']==1,'配送类型']='其他配送'
order.columns
Index(['addTime', '下单日期', '下单日期时间', '下单时间', '品牌名称', '城市', '平台', '用户id', '订单id',
'订单状态', '配送地址eleme', '配送坐标', '配送坐标 - 纬度', '配送坐标 - 经度', '配送类型', '门店名称',
'order_15d', 'order_30d', 'order_60d', 'order_7d', 'order_90d',
'sku去重菜品数', '品牌id', '商家实收', '商家补贴', '平台补贴', '总补贴', '服务费', '用户实付',
'菜品个数', '菜品总数', '订单数', '订单金额', '距离', '配送费', '门店ID', '餐盒费'],
dtype='object')
从上面这个订单详情表上可以看出,它的列数会比较多,我们在这里只关注如下数据列,分别是'下单日期','平台','订单id','订单状态', '配送地址eleme','配送类型','商家实收', '商家补贴', '平台补贴', '总补贴', '服务费', '用户实付', '菜品个数', '订单数', '订单金额', '距离', '配送费', '门店ID', '餐盒费'。其它数据在分析中用不上,不用过于去关注。
具体分析如下:
1. 订单金额与时间的变化情况;
2.商家家收入与订单金额的关系;
3.订单数量与星期的关系;
4.订单数量与订单金额的关系;
5.配送地址的频率;
6.订单状态
7.平台的订单量
8.配送类型
9. 补贴情况
10.服务费与菜品的关系
11.门店的收入情况
12.商家收入与用户实付关系
13 菜品的个数与餐盒关系
14 .距离与配送费的关系
# 选取所需要的数据
df_order = order[['下单日期','平台','订单id','订单状态', '配送地址eleme','配送类型',
'商家实收', '商家补贴', '平台补贴', '总补贴', '服务费', '用户实付',
'菜品个数', '订单数', '订单金额', '距离', '配送费', '门店ID', '餐盒费']]
# 对数据进行整体观察
df_order.describe()
订单id | 商家实收 | 商家补贴 | 平台补贴 | 总补贴 | 服务费 | 用户实付 | 菜品个数 | 订单数 | 订单金额 | 距离 | 配送费 | 餐盒费 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | 4.419000e+03 | 4419.000000 | 4419.000000 | 4419.000000 | 4419.000000 | 4419.000000 | 4419.000000 | 4419.000000 | 4419.0 | 4419.000000 | 4413.000000 | 4419.000000 | 4419.000000 |
mean | 2.304600e+18 | 16.288959 | 25.551867 | 2.051957 | 27.603824 | 0.153028 | 23.350342 | 10.196651 | 1.0 | 50.979737 | 1500.162475 | 2.417990 | 2.335144 |
std | 2.442473e+18 | 9.346231 | 6.380767 | 2.105196 | 6.827127 | 5.496264 | 10.944536 | 3.657969 | 0.0 | 14.768896 | 837.964157 | 1.557213 | 0.727017 |
min | 9.428110e+16 | -4.700000 | 0.000000 | 0.000000 | 0.000000 | -39.210000 | 1.360000 | 1.000000 | 1.0 | 17.760000 | 0.000000 | 0.000000 | 0.000000 |
25% | 9.698620e+16 | 10.290000 | 21.900000 | 0.000000 | 23.000000 | -5.200000 | 16.680000 | 8.000000 | 1.0 | 42.140000 | 865.000000 | 0.800000 | 2.000000 |
50% | 9.698620e+16 | 15.700000 | 25.000000 | 2.000000 | 27.000000 | 4.500000 | 21.880000 | 10.000000 | 1.0 | 49.780000 | 1379.000000 | 3.000000 | 2.000000 |
75% | 5.006360e+18 | 21.120000 | 28.100000 | 3.000000 | 31.100000 | 4.500000 | 28.160000 | 12.000000 | 1.0 | 57.480000 | 2084.000000 | 3.000000 | 2.500000 |
max | 5.007880e+18 | 167.170000 | 164.000000 | 25.000000 | 164.000000 | 30.580000 | 209.680000 | 41.000000 | 1.0 | 336.900000 | 4604.000000 | 9.000000 | 15.000000 |
# 查看缺失值
df_order.isnull().sum()
下单日期 0
平台 0
订单id 0
订单状态 0
配送地址eleme 0
配送类型 0
商家实收 0
商家补贴 0
平台补贴 0
总补贴 0
服务费 0
用户实付 0
菜品个数 0
订单数 0
订单金额 0
距离 6
配送费 0
门店ID 0
餐盒费 0
dtype: int