数据可视化第二版-拓展-和鲸网约车分析一等奖作品

2023-10-16 17:58:22 浏览数 (2)

数据可视化第二版-拓展-网约车分析案例

竞赛介绍

本文是和鲸社区的一个数据分析竞赛,比赛链接如下:【2023春节限定】网约车运营分析

这是数据科学开源社区和鲸社区的春节传统节目,也是和鲸社区与接地气的陈老师联合举办的【商业分析训练营】系列第一期,旨在用真实的分析场景,带同学们利用春节假期体验真实的数据分析工作,提升求职与数据分析工作能力。

接地气的陈老师是创业公司数据总监,公众号“接地气的陈老师”主理人,豆瓣评分 9.0 的《商业分析全攻略》一书作者,担任本活动出题人与评委。

假设你是某打车APP的商业数据分析师,为某大区提供日常数据报表。现在大区领导表示:希望你从日常数据监测中,发现问题和机会点,并做出建议。请你认真研究手头报表数据,给出报告。数据如下:

真实的商业分析就是这样:日常工作 80% 是重复的,枯燥的日报、周报、月报,这些监控报表和临时取数。可是,业务部门,领导们又希望你能从简单的监控中发现问题,做出洞察。那么 如何在日常数据里看出门道? 怎么在没有标准答案的情况下,自己找到标准? 怎么基于数据说出一二三,又能让人信服? 这是对商业分析师的重大考验。

通过这个案例,可以让同学们体验到真实工作状态,从期初的迷茫,到逐步清晰,到顿悟,到能够驾驭数据,驱动业务,需要很多年历练。今天带大家迈出第一步。

数据介绍

数据为某大区内五个城市,1周分时段运营数据 字段:时段,代表一天时间,0代表0点~1点,以此类推 冒泡:打车APP中,乘客选择起点、终点,APP提示可选车型&价格,为一次“冒泡” 呼叫:乘客看到冒泡信息后,点击“呼叫”按钮,为一次呼叫 应答:司机看到乘客呼叫后,接单,为“应答” 完单:司机完成订单,乘客付款为“完单” 司机在线:每个时段内司机在线人次

为降低分析难度,假设如下:

订单在时段内完成,不考虑跨时间段场景 司机在线为时间段内所有司机,不考虑时间段内波动 冒泡→呼叫→应答→完单,可简单视为一个流程转化率

1等奖作品-IT从业者张某某的作品

参考:【2023 春节限定】网约车运营分析报告

结论

  • 确定关键指标:

完单数和完单率 (因为城市不一样,完单数体现城市的盈利能力,完单率体现运营效果的可改进空间)

  • 按城市维度分析:

AED 属于大城市大城市中 D 的 APP 运行效果最好,其次是 E,最后为 A,但 A 为该区最大城市。其中 A 的各个时间段完单率均较差,初步排除受交通关系,应该与 A 城市的整体运营或是竞争有关系,对于大城市 A,整体完单数较多,是重要的赢利点,A 市需要重点优化,存在较大机会BC 属于 中小城市 中小城市的完单率 均较好,C 城市的白天完单率最好,但夜晚 0-5 点完单率较差,C 城市 0-5 点司机的数量少,最少为 284 人,占白天峰值 30000 的 1% 左右,可以提升司机数量,增加 C 城市乘客用户好感度。3 点数据举例冒泡 1148 呼叫 452 应答 248 完单 212 从指标相关性分析: 完单数量与司机在线数量相关性最大,说明司机多,也就是说明城市大,完成的订单数量更多,这样可以 重点关注大城市,A 市司机最多,但整体完单数没有比 C 市多。 可以参考 A 市的订单价格与 C 市的订单价格进行比较,看是否存在 A 市是因为城市大,导致更多的远途用户采取了地铁等方式。 完单率 与 司机接单数量和司乘比(司机单位小时完成订单数) 相关性最大,说明可以通过 提升司机主动接单,来提升完单率> 司机接单数量与司乘比(司机单位小时完成订单数)呈强正相关,说明 提升司机的主动接单积极性,可以提升司机的接单数量,提升呼叫到接单到完单的比率。

  • 从单个指标上分析

从转化率角度来看,A 市转化率小,完成最后支付的人相对较少,也就是 A 市可以重点提升,CBD 的完单数均高于 A 和 E 从完单数看,A 和 E 的完单数最小,与城市规模,司机数量不匹配 从漏斗图上可以看出 A 城市的冒泡 - 呼叫 - 应答,流失人数最多,其中其它城市呼叫到应答大约存在 10-30w 的差,而 A 城市存在 70W 的差。

  • 分析结论

  1. 持续维持 BC 城市的用户满意度度和 app 依赖性,比如在 C 城市,提升 0-5 点的司机数量和司机应答积极性,减少 C 城市的整体呼叫与应答流失人数。
  2. 改进 A 城市的转化率过低

从漏斗查看,是冒泡数 1134W 与呼叫数 470W 差别较多,可以改进车型选择或价格推荐。 运营方案优化可以包含路线,可以进一步优化路线,同时可以考虑提供优惠券,提升转化率。另外可以看出,A 城市的司机很多,但呼叫数没有明显偏多,说明用户的依赖性不强,要提升用户的依赖性。 在工作日的 18 点是呼叫的高峰期,但在线司机数量下降了约 4000 千,而同期的大城市 D 市在线司机数量呈现上升趋势,可以优化这个时间段的在线司机数量。

过程数据和思考

数据处理

数据介绍

数据为某大区内五个城市,1 周分时段运营数据 字段:时段,代表一天时间,0 代表 0 点~1 点,以此类推 冒泡:打车 APP 中,乘客选择起点、终点,APP 提示可选车型 & 价格,为一次 “冒泡” 呼叫:乘客看到冒泡信息后,点击 “呼叫” 按钮,为一次呼叫 应答:司机看到乘客呼叫后,接单,为 “应答” 完单:司机完成订单,乘客付款为 “完单” 司机在线:每个时段内司机在线人次

为降低分析难度,假设如下:

订单在时段内完成,不考虑跨时间段场景 司机在线为时间段内所有司机,不考虑时间段内波动 冒泡→呼叫→应答→完单,可简单视为一个流程转化率

去除脏数据:第九列、第十列的数据为空,所以删除这两列的数据: ![![ImageName](https://img-blog.csdnimg.cn/img_convert/6e39fe53e3b692ff8043726b04c2d2b7.png#pic_center)

数据探索

转化率:完单数 / 冒泡数,用户选择起点终点到完成订单的概率 司乘比:完单数 / 司机在线,完单数代表真正的乘客数量,司机在线数代表司机的数量,表示司机的单位时间接单数量,是很重要的司机收入依据** 司机接单:应答数 / 司机在线 ,表示司机的接单意愿, 工作日: 1 表示周一到周五的工作日,0 表示周六和周日

为原始数据添加转化率、司乘比、工作日三列数据,为后续数据分析做准备

数据分析方法选择

对比分析:对比各城市之间司机数量、订单数量、高峰期情况等,分析城市的好坏并给出解决方案 趋势分析:通过观察事物的发展趋势,可以推理出产生此现象的原因、给出解决方案

数据分析
相关性分析

使用 corr 函数计算各指标之间的相关度,绘制热力图进行展示:

由上图可知: 从冒泡数、呼叫数到应答数,与完单数的相关度依次升高,此外,完单数与司机在线数有强烈的关系,与时段也有明显关系 司机在线数与时段具有明显关系,可见,在某些时段,司机在线数较多,某些时段较少 冒泡数、呼叫数、应答数与完单数与时段有明显的正相关,可见,在某些时段的订单多,而某些时段里订单少 转化率与司乘比呈较强的正相关,可见,司机数量与订单完成率有较强的关系 工作日与司乘比呈较弱正相关 司乘比与司机接单正相关,说明司机实际每天应答数量与司机每天完单高度相关。如果想提升完单率,可以尽可能的提升司机的应答数量。

目的是为了这个 app 提升收益:

北极星指标就是完单数量,完单数量意味着盈利 ,

如何提升完单数量,

对于 ADE 城市来说,可以尝试多提升呼叫数和应答数 优化路线,提供优惠券增加呼叫数, 提供接单任务奖励提高应答数, 对司机进行培训提升完单数 对于 BC 城市来说,暂时来说,继续保持的,同时考虑 中午的接单数

完单率是可以优化的空间

转化率分析

各城市从冒泡到完成订单的概率如下图所示:

可见,C 市的转化率最高,而 A 市的转化率最低,可以重点研究 A 市:

绘制 A C 市订单流程的漏斗图:

可见 A 市在冒泡到呼叫之间客户的流失量最大,从呼叫数到应答数之间的流失量也很大

分析结论

应该重点考虑 A 市的运营问题,可以增加在冒泡到呼叫步骤之间留存用户的措施,比如发放优惠券、优化最短路线,推荐合适车型和价格,对推荐的车型和价格进行 AB 测试等。 也要关注为什么下了订单却无法完成结账的问题,可以考虑司机绕路、司机无法在规定时间内到达起始地点等原因,需要根据更多的数据指标进一步探索

完单数量分析
分析结论

订单数量与司机在线数量相关性最大,说明司机多,也就是说明城市大,完成的订单数量更多,这样可以重点关注大城市,A 市司机最多,但 A 市在高峰期的在线司机数量存在下滑,可能存在一个司机采用多个网约车平台有关,提升司机的平台依赖性。对比工作日的 D 市,D 市晚间完单数较多,A 市白天的完单数较多。

司机数量分析

绘制多重折线图,各城市每日的司乘比如下图所示:

由上图可知:

C 市的司机是订单较多的,司机的主动性会更好,粘性更大,其余城市,均有提升空间

绘制各城市的订单流程数量折线图:

分析结论

C 城市虽然冒泡数最少,但是呼叫数、应答数直到完单数都是最多的

从周一到周日,C 市的订单数是最多的,但是在线的司机数却是最少的。A 市虽然冒泡最多,但是最终完成订单的数量较少,所以 A 市 是最需要关注的城市。其次是 E,再次是 D。 冒泡多 但完单少,可能是运营问题,也可能是竞争问题,也可能是交通问题。

时间分析
每日订单分析

绘制各市每日的完单数量折线图:

分析结论

C 城市虽然冒泡数最少,但是呼叫数、应答数直到完单数都是最多的 从上图可以看出,从周一到周四,C 市的完单数均高于其他城市,但是在周五,其他城市的完单数均高于 C 市

工作日各时段分析

绘制工作日各城市各时段完单数的折线图:

网约车的高峰期在 7 到 9 点、17 到 19 点,属于上下班和上下学的时间点。 中间 11 和 14 时间段有一个较大的波动,尤其是 C 市,原因是中午去吃饭和吃完饭对打车的需求比较大。 绘制周六日各城市各时段完单数的折线图

绘制工作日各城市各时段司机在线数的在折线图:

由上图可知,工作日司机的数量在 19 时达到最高峰,而此时的完单数已经降低,所以应该提早增加司机的数量。

周六日各时段分析

绘制周六日各城市各时段完单数的折线图:

周六日网约车的高峰期在 7 到 10、16 到 20 时。期间,部分是由加班造成,也符合周末人们出行游玩的时间点。 不同于工作日的是,在 16 到 17 之间,完单数呈持续上升趋势,原因是周末人们出行时间更自由,在这些时间段里,外出和回家的人更多,导致网约车订单数量增多。* 周末没有固定回家的时间,因此周六日晚上的高峰期要更晚一些,一直持续到 20 至 21 时。

绘制周六日各城市各时段司机在线数的折线图:

由上图可知,周六日司机在线数在 18、19 时达到最高峰,而此时的完单数已呈降趋势,所以应该提早增加司机数量 。

分析结论

应该根据工作日和周末的高峰时间不同需求,增加高峰期的司机数量,采取时段奖励等多种运营手段。

代码
代码语言:javascript复制
import pandas as pd
import numpy as np
from pyecharts import options as opts
from pyecharts.charts import Bar, Line, HeatMap, Funnel
rawdata = pd.read_csv(
    '/home/mw/input/car_hailing9900/ride-hailing_data.csv',
    encoding='gb2312')
# rawdata.drop(['Unnamed: 8','Unnamed: 9'],axis=1,inplace=True)
rawdata.head()
代码语言:javascript复制
rawdata.info()

<class ‘pandas.core.frame.DataFrame’> RangeIndex: 840 entries, 0 to 839 Data columns (total 8 columns): 星期 840 non-null object 时段 840 non-null int64 城市 840 non-null object 冒泡数 840 non-null int64 呼叫数 840 non-null int64 应答数 840 non-null int64 完单数 840 non-null int64 司机在线 840 non-null int64 dtypes: int64(6), object(2) memory usage: 52.6 KB

代码语言:javascript复制
# 最大显示行数
pd.set_option('display.max_rows', 10)
代码语言:javascript复制
# 转化率
change_rate = rawdata['完单数'] / rawdata['冒泡数']
data = pd.concat([rawdata, change_rate], axis=1).rename(columns={0: '转化率'})
data
代码语言:javascript复制
# 司乘比 在线的司机数 每天的平均接单数量
rate = (data['完单数']/data['司机在线'])
data = pd.concat([data, rate], axis=1).rename(columns={0: '司乘比'})
data
代码语言:javascript复制
# 司机接单意愿
rate = (data['应答数'] / data['司机在线'])
data = pd.concat([data, rate], axis=1).rename(columns={0: '司机接单'})
data
代码语言:javascript复制
# 相关性计算
cor = data.corr()
cor
代码语言:javascript复制
# 生成工作日特征
data['工作日']=data.apply(lambda x:1 if ((x.星期=='周一') | (x.星期=='周二') | (x.星期=='周三') | (x.星期=='周四') | (x.星期=='周五')) else 0,axis=1)
data
代码语言:javascript复制
# 相关性可视化
cor = data.corr()
cor
代码语言:javascript复制
# 相关性可视化
cor = data.corr()
value = [[x, y, round(cor.values[x][y], 2)]
         for x in range(11) for y in range(11)]
heatmap = HeatMap(init_opts=opts.InitOpts())
heatmap.add_xaxis(list(cor))
heatmap.add_yaxis(
    "",
    list(cor),
    value,
    label_opts=opts.LabelOpts(
        is_show=True,
        position="inside"))
heatmap.set_global_opts(
    title_opts=opts.TitleOpts(title="相关度"),
    visualmap_opts=opts.VisualMapOpts(max_=1),
    xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=30)))
heatmap.render_notebook()

从冒泡数、呼叫数到应答数,与完单数的相关度依次升高,此外,完单数与司机在线数有强烈的关系,与时段也有明显关系 司机在线数与时段具有明显关系,可见,在某些时段,司机在线数较多,某些时段较少 冒泡数、呼叫数、应答数与完单数与时段有明显的正相关,可见,在某些时段的订单多,而某些时段里订单少 转化率与司乘比呈较强的正相关,可见,司机数量与订单完成率有较强的关系 工作日与司乘比呈较弱正相关 司乘比与司机接单正相关,说明司机实际每天应答数量与司机每天完单高度相关。如果想提升完单率,可以尽可能的提升司机的应答数量。

目的是为了这个 app 提升收益

北极星指标就是完单数量,完单数量意味着盈利 ,

如何提升完单数量,

对于 ADE 城市来说,可以尝试多提升呼叫数和应答数 优化路线,提供优惠券增加呼叫数, 提供接单任务奖励提高应答数, 对司机进行培训提升完单数 对于 BC 城市来说,暂时来说,继续保持的,同时考虑 中午的接单数

完单率是可以优化的空间

代码语言:javascript复制
# 各市转化率
x_data = data["城市"].drop_duplicates().to_list()
y_data = data.groupby('城市')['转化率'].mean().apply(
    lambda x: round(x, 2)).to_list()
bar = Bar()
bar.add_xaxis(x_data)
bar.add_yaxis("各市转化率", y_data)
bar.render_notebook()

BC 城市转化率较好 ADE 城市转化率有提升空间

代码语言:javascript复制
# 各步骤转化率
funnel_data = data.copy(deep=True)
# 冒泡->呼叫转化率
rate = ( data['呼叫数'] / data['冒泡数'] )
funnel_data.insert(4, "冒->呼",rate, allow_duplicates=False)
# 呼叫->应答转化率
rate = ( data['应答数'] / data['呼叫数'] )
funnel_data.insert(6, "呼->应",rate, allow_duplicates=False)
# 应答->完单转化率
rate = ( data['完单数'] / data['应答数'] )
funnel_data.insert(8, "应->完",rate, allow_duplicates=False)
funnel_data
代码语言:javascript复制
# A市漏斗转换图函数
def funnel_show(funnel_data, city_name):
    change_df = data[data['城市'] == city_name][[
        '冒泡数', '呼叫数', '应答数', '完单数']].sum()
    change_data = [
        list(z) for z in zip(
            change_df.index.tolist(),
            change_df.values.tolist())]
    change_rate = funnel_data[funnel_data['城市'] ==
                              city_name][['冒->呼', '呼->应', '应->完']].mean()
    funnel_value = change_rate.values.tolist()
    funnel_value.insert(0, 1)
    attr_trans = [
        change_df.index.tolist()[i] "-" "%.2f%%" %
        (funnel_value[i]*100) for i in range(4)]
    funnel = (
        Funnel()
        .add("流程", [list(z) for z in zip(attr_trans, change_df)],
             label_opts=opts.LabelOpts(
            font_size=13, position="right", formatter="{b}-{c}"),
            tooltip_opts=opts.TooltipOpts(trigger='item',
                                          formatter="{a} <br/>{b} : {c}",
                                          background_color="#ffd1df",
                                          border_color="#ffffd4",
                                          border_width=4,
                                          textstyle_opts=opts.TextStyleOpts(font_size=14, color='blue'),))
        .set_global_opts(title_opts=opts.TitleOpts(title=city_name "转化漏斗图"))
    )
    return funnel


funnel_show(funnel_data, "A市").render_notebook()
代码语言:javascript复制
funnel_show(funnel_data, "B市").render_notebook()
代码语言:javascript复制
funnel_show(funnel_data, "C市").render_notebook()
代码语言:javascript复制
funnel_show(funnel_data, "D市").render_notebook()
代码语言:javascript复制
funnel_show(funnel_data, "E市").render_notebook()
代码语言:javascript复制
# 各城市司乘比
x_data = data["城市"].drop_duplicates().to_list()
y_data = data.groupby('城市')['司乘比'].mean().apply(
    lambda x: round(x, 2)).to_list()
x_data
y_data
bar = (
    Bar()
    .add_xaxis(x_data)
    .add_yaxis('各市司乘比', y_data)
)
bar.render_notebook()

说明 C 市 每位司机 每小时接单量最多

代码语言:javascript复制
# 各市每日司乘比
x_data = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
y1 = data[data['城市'] == 'A市'].groupby(
    '星期')['司乘比'].mean().apply(lambda x: round(x, 2)).to_list()
y2 = data[data['城市'] == 'B市'].groupby(
    '星期')['司乘比'].mean().apply(lambda x: round(x, 2)).to_list()
y3 = data[data['城市'] == 'C市'].groupby(
    '星期')['司乘比'].mean().apply(lambda x: round(x, 2)).to_list()
y4 = data[data['城市'] == 'D市'].groupby(
    '星期')['司乘比'].mean().apply(lambda x: round(x, 2)).to_list()
y5 = data[data['城市'] == 'E市'].groupby(
    '星期')['司乘比'].mean().apply(lambda x: round(x, 2)).to_list()
line = (
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(series_name="A市", y_axis=y1)
    .add_yaxis(series_name="B市", y_axis=y2)
    .add_yaxis(series_name="C市", y_axis=y3)
    .add_yaxis(series_name="D市", y_axis=y4)
    .add_yaxis(series_name="E市", y_axis=y5)
    .set_global_opts(title_opts=opts.TitleOpts(title="司乘比"))
)
line.render_notebook()

由上图可知: 周五和周日的司乘比最多,司机的接单量增加, 从周一到周日,C 市的司乘比最多,说明 C 市的司机接单意愿和实际接单数最好,说明运营和区 app 使用量较好

代码语言:javascript复制
x_data = ['冒泡数', '呼叫数', '应答数', '完单数']
y1 = [round(data[data['城市'] == 'A市']['冒泡数'].mean(),
            2),
      round(data[data['城市'] == 'A市']['呼叫数'].mean(),
            2),
      round(data[data['城市'] == 'A市']['应答数'].mean(),
            2),
      round(data[data['城市'] == 'A市']['完单数'].mean(),
            2)]
y2 = [round(data[data['城市'] == 'B市']['冒泡数'].mean(),
            2),
      round(data[data['城市'] == 'B市']['呼叫数'].mean(),
            2),
      round(data[data['城市'] == 'B市']['应答数'].mean(),
            2),
      round(data[data['城市'] == 'B市']['完单数'].mean(),
            2)]
y3 = [round(data[data['城市'] == 'C市']['冒泡数'].mean(),
            2),
      round(data[data['城市'] == 'C市']['呼叫数'].mean(),
            2),
      round(data[data['城市'] == 'C市']['应答数'].mean(),
            2),
      round(data[data['城市'] == 'C市']['应答数'].mean(),
            2)]
y4 = [round(data[data['城市'] == 'D市']['冒泡数'].mean(),
            2),
      round(data[data['城市'] == 'D市']['呼叫数'].mean(),
            2),
      round(data[data['城市'] == 'D市']['应答数'].mean(),
            2),
      round(data[data['城市'] == 'D市']['完单数'].mean(),
            2)]
y5 = [round(data[data['城市'] == 'E市']['冒泡数'].mean(),
            2),
      round(data[data['城市'] == 'E市']['呼叫数'].mean(),
            2),
      round(data[data['城市'] == 'E市']['应答数'].mean(),
            2),
      round(data[data['城市'] == 'E市']['完单数'].mean(),
            2)]
line = (
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(series_name="A市", y_axis=y1)
    .add_yaxis(series_name="B市", y_axis=y2)
    .add_yaxis(series_name="C市", y_axis=y3)
    .add_yaxis(series_name="D市", y_axis=y4)
    .add_yaxis(series_name="E市", y_axis=y5)
    .set_global_opts(title_opts=opts.TitleOpts(title="订单流程"))
)
line.render_notebook()

C 城市虽然冒泡数最少,但是呼叫数、应答数直到完单数都是最多的

从周一到周日,C 市的订单数是最多的,但是在线的司机数却是最少的。因此,要增加 C 市司机的数量。 A 市虽然冒泡最多,但是最终完成订单的数量较少,所以 A 市 是最需要关注的城市。其次是 E,再次是 D。 冒泡多 但完单少,可能是运营问题,也可能是竞争问题,也可能是交通问题。

代码语言:javascript复制
#各市每日完单数
x_data = ['周一','周二','周三','周四','周五','周六','周日']
y1=data[data['城市'] == 'A市'].groupby('星期')['完单数'].mean().apply(lambda x: round(x,1)).to_list()
y2=data[data['城市'] == 'B市'].groupby('星期')['完单数'].mean().apply(lambda x: round(x,1)).to_list()
y3=data[data['城市'] == 'C市'].groupby('星期')['完单数'].mean().apply(lambda x: round(x,1)).to_list()
y4=data[data['城市'] == 'D市'].groupby('星期')['完单数'].mean().apply(lambda x: round(x,1)).to_list()
y5=data[data['城市'] == 'E市'].groupby('星期')['完单数'].mean().apply(lambda x: round(x,1)).to_list()
line=(
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(series_name="A市",y_axis=y1)
    .add_yaxis(series_name="B市",y_axis=y2)
    .add_yaxis(series_name="C市",y_axis=y3)
    .add_yaxis(series_name="D市",y_axis=y4)
    .add_yaxis(series_name="E市",y_axis=y5)
    .set_global_opts(title_opts=opts.TitleOpts(title="各市每日完单数"))
)
line.render_notebook()
代码语言:javascript复制
#工作日各市各时段完单数
x_data = ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23']
y1=data[(data['城市'] == 'A市') & (data['工作日'] == 1)].groupby('时段')['完单数'].mean().apply(lambda x: round(x,1)).to_list()
y2=data[(data['城市'] == 'B市') & (data['工作日'] == 1)].groupby('时段')['完单数'].mean().apply(lambda x: round(x,1)).to_list()
y3=data[(data['城市'] == 'C市') & (data['工作日'] == 1)].groupby('时段')['完单数'].mean().apply(lambda x: round(x,1)).to_list()
y4=data[(data['城市'] == 'D市') & (data['工作日'] == 1)].groupby('时段')['完单数'].mean().apply(lambda x: round(x,1)).to_list()
y5=data[(data['城市'] == 'E市') & (data['工作日'] == 1)].groupby('时段')['完单数'].mean().apply(lambda x: round(x,1)).to_list()
line=(
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(series_name="A市",y_axis=y1)
    .add_yaxis(series_name="B市",y_axis=y2)
    .add_yaxis(series_name="C市",y_axis=y3)
    .add_yaxis(series_name="D市",y_axis=y4)
    .add_yaxis(series_name="E市",y_axis=y5)
    .set_global_opts(title_opts=opts.TitleOpts(title="工作日各市各时段完单数"))
)
line.render_notebook()
代码语言:javascript复制
# 工作日各市各时段冒泡数
x_data = [
    '0',
    '1',
    '2',
    '3',
    '4',
    '5',
    '6',
    '7',
    '8',
    '9',
    '10',
    '11',
    '12',
    '13',
    '14',
    '15',
    '16',
    '17',
    '18',
    '19',
    '20',
    '21',
    '22',
    '23']
y1 = data[(data['城市'] == 'A市') & (data['工作日'] == 1)].groupby(
    '时段')['冒泡数'].mean().apply(lambda x: round(x, 1)).to_list()
y2 = data[(data['城市'] == 'B市') & (data['工作日'] == 1)].groupby(
    '时段')['冒泡数'].mean().apply(lambda x: round(x, 1)).to_list()
y3 = data[(data['城市'] == 'C市') & (data['工作日'] == 1)].groupby(
    '时段')['冒泡数'].mean().apply(lambda x: round(x, 1)).to_list()
y4 = data[(data['城市'] == 'D市') & (data['工作日'] == 1)].groupby(
    '时段')['冒泡数'].mean().apply(lambda x: round(x, 1)).to_list()
y5 = data[(data['城市'] == 'E市') & (data['工作日'] == 1)].groupby(
    '时段')['冒泡数'].mean().apply(lambda x: round(x, 1)).to_list()
line = (
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(series_name="A市", y_axis=y1)
    .add_yaxis(series_name="B市", y_axis=y2)
    .add_yaxis(series_name="C市", y_axis=y3)
    .add_yaxis(series_name="D市", y_axis=y4)
    .add_yaxis(series_name="E市", y_axis=y5)
    .set_global_opts(title_opts=opts.TitleOpts(title="工作日各市各时段冒泡数"))
)
line.render_notebook()
代码语言:javascript复制
# 工作日各市各时段呼叫数
x_data = [
    '0',
    '1',
    '2',
    '3',
    '4',
    '5',
    '6',
    '7',
    '8',
    '9',
    '10',
    '11',
    '12',
    '13',
    '14',
    '15',
    '16',
    '17',
    '18',
    '19',
    '20',
    '21',
    '22',
    '23']
y1 = data[(data['城市'] == 'A市') & (data['工作日'] == 1)].groupby(
    '时段')['呼叫数'].mean().apply(lambda x: round(x, 1)).to_list()
y2 = data[(data['城市'] == 'B市') & (data['工作日'] == 1)].groupby(
    '时段')['呼叫数'].mean().apply(lambda x: round(x, 1)).to_list()
y3 = data[(data['城市'] == 'C市') & (data['工作日'] == 1)].groupby(
    '时段')['呼叫数'].mean().apply(lambda x: round(x, 1)).to_list()
y4 = data[(data['城市'] == 'D市') & (data['工作日'] == 1)].groupby(
    '时段')['呼叫数'].mean().apply(lambda x: round(x, 1)).to_list()
y5 = data[(data['城市'] == 'E市') & (data['工作日'] == 1)].groupby(
    '时段')['呼叫数'].mean().apply(lambda x: round(x, 1)).to_list()
line = (
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(series_name="A市", y_axis=y1)
    .add_yaxis(series_name="B市", y_axis=y2)
    .add_yaxis(series_name="C市", y_axis=y3)
    .add_yaxis(series_name="D市", y_axis=y4)
    .add_yaxis(series_name="E市", y_axis=y5)
    .set_global_opts(title_opts=opts.TitleOpts(title="工作日各市各时段呼叫数"))
)
line.render_notebook()
代码语言:javascript复制
#工作日各市各时段应答数
x_data = ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23']
y1=data[(data['城市'] == 'A市') & (data['工作日'] == 1)].groupby('时段')['应答数'].mean().apply(lambda x: round(x,1)).to_list()
y2=data[(data['城市'] == 'B市') & (data['工作日'] == 1)].groupby('时段')['应答数'].mean().apply(lambda x: round(x,1)).to_list()
y3=data[(data['城市'] == 'C市') & (data['工作日'] == 1)].groupby('时段')['应答数'].mean().apply(lambda x: round(x,1)).to_list()
y4=data[(data['城市'] == 'D市') & (data['工作日'] == 1)].groupby('时段')['应答数'].mean().apply(lambda x: round(x,1)).to_list()
y5=data[(data['城市'] == 'E市') & (data['工作日'] == 1)].groupby('时段')['应答数'].mean().apply(lambda x: round(x,1)).to_list()
line=(
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(series_name="A市",y_axis=y1)
    .add_yaxis(series_name="B市",y_axis=y2)
    .add_yaxis(series_name="C市",y_axis=y3)
    .add_yaxis(series_name="D市",y_axis=y4)
    .add_yaxis(series_name="E市",y_axis=y5)
    .set_global_opts(title_opts=opts.TitleOpts(title="工作日各市各时段应答数"))
)
line.render_notebook()
代码语言:javascript复制
#工作日各市各时段转化率
x_data = ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23']
y1=data[(data['城市'] == 'A市') & (data['工作日'] == 1)].groupby('时段')['转化率'].mean().apply(lambda x: round(x,2)).to_list()
y2=data[(data['城市'] == 'B市') & (data['工作日'] == 1)].groupby('时段')['转化率'].mean().apply(lambda x: round(x,2)).to_list()
y3=data[(data['城市'] == 'C市') & (data['工作日'] == 1)].groupby('时段')['转化率'].mean().apply(lambda x: round(x,2)).to_list()
y4=data[(data['城市'] == 'D市') & (data['工作日'] == 1)].groupby('时段')['转化率'].mean().apply(lambda x: round(x,2)).to_list()
y5=data[(data['城市'] == 'E市') & (data['工作日'] == 1)].groupby('时段')['转化率'].mean().apply(lambda x: round(x,2)).to_list()
line=(
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(series_name="A市",y_axis=y1)
    .add_yaxis(series_name="B市",y_axis=y2)
    .add_yaxis(series_name="C市",y_axis=y3)
    .add_yaxis(series_name="D市",y_axis=y4)
    .add_yaxis(series_name="E市",y_axis=y5)
    .set_global_opts(title_opts=opts.TitleOpts(title="工作日各市各时段转化率"))
)
line.render_notebook()

小城市 BC C 市应该是一个小城市 0-4 点 完单率较低 可以考虑下,这个时间段的冒泡数 呼叫数 应答数 完单数 B 市 各个时间段 完单率都较好 0.4

大城市 ADE A 市 各个时间段 完单率都较低 说明可能不是市内交通环境 ,而是运营或是竞争的问题 A 市在 9 点早高峰,达到最佳 0.37 说明 A 市是有需求的 D 市 0-5 点 完单率最好 比白天还要好,说明可能是与交通有关 E 市 各个时间段 完单率都较低 说明可能不是市内交通环境 ,而是运营或是竞争的问题

代码语言:javascript复制
x_data = [
    '0',
    '1',
    '2',
    '3',
    '4',
    '5',
    '6',
    '7',
    '8',
    '9',
    '10',
    '11',
    '12',
    '13',
    '14',
    '15',
    '16',
    '17',
    '18',
    '19',
    '20',
    '21',
    '22',
    '23']
y1 = data[(data['城市'] == 'A市') & (data['工作日'] == 1)].groupby(
    '时段')['司机在线'].mean().apply(lambda x: round(x, 1)).to_list()
y2 = data[(data['城市'] == 'B市') & (data['工作日'] == 1)].groupby(
    '时段')['司机在线'].mean().apply(lambda x: round(x, 1)).to_list()
y3 = data[(data['城市'] == 'C市') & (data['工作日'] == 1)].groupby(
    '时段')['司机在线'].mean().apply(lambda x: round(x, 1)).to_list()
y4 = data[(data['城市'] == 'D市') & (data['工作日'] == 1)].groupby(
    '时段')['司机在线'].mean().apply(lambda x: round(x, 1)).to_list()
y5 = data[(data['城市'] == 'E市') & (data['工作日'] == 1)].groupby(
    '时段')['司机在线'].mean().apply(lambda x: round(x, 1)).to_list()
line = (
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(series_name="A市", y_axis=y1)
    .add_yaxis(series_name="B市", y_axis=y2)
    .add_yaxis(series_name="C市", y_axis=y3)
    .add_yaxis(series_name="D市", y_axis=y4)
    .add_yaxis(series_name="E市", y_axis=y5)
    .set_global_opts(title_opts=opts.TitleOpts(title="工作日各市各时段司机在线数"))
)
line.render_notebook()

C 城市 夜晚司机太少 可以增加夜晚司机的任务完成奖励

代码语言:javascript复制
# 周六日日各市各时段完单数
x_data = [
    '0',
    '1',
    '2',
    '3',
    '4',
    '5',
    '6',
    '7',
    '8',
    '9',
    '10',
    '11',
    '12',
    '13',
    '14',
    '15',
    '16',
    '17',
    '18',
    '19',
    '20',
    '21',
    '22',
    '23']
y1 = data[(data['城市'] == 'A市') & (data['工作日'] == 0)].groupby(
    '时段')['完单数'].mean().apply(lambda x: round(x, 1)).to_list()
y2 = data[(data['城市'] == 'B市') & (data['工作日'] == 0)].groupby(
    '时段')['完单数'].mean().apply(lambda x: round(x, 1)).to_list()
y3 = data[(data['城市'] == 'C市') & (data['工作日'] == 0)].groupby(
    '时段')['完单数'].mean().apply(lambda x: round(x, 1)).to_list()
y4 = data[(data['城市'] == 'D市') & (data['工作日'] == 0)].groupby(
    '时段')['完单数'].mean().apply(lambda x: round(x, 1)).to_list()
y5 = data[(data['城市'] == 'E市') & (data['工作日'] == 0)].groupby(
    '时段')['完单数'].mean().apply(lambda x: round(x, 1)).to_list()
line = (
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(series_name="A市", y_axis=y1)
    .add_yaxis(series_name="B市", y_axis=y2)
    .add_yaxis(series_name="C市", y_axis=y3)
    .add_yaxis(series_name="D市", y_axis=y4)
    .add_yaxis(series_name="E市", y_axis=y5)
    .set_global_opts(title_opts=opts.TitleOpts(title="周六日各市各时段完单数"))
)
line.render_notebook()
代码语言:javascript复制
x_data = [
    '0',
    '1',
    '2',
    '3',
    '4',
    '5',
    '6',
    '7',
    '8',
    '9',
    '10',
    '11',
    '12',
    '13',
    '14',
    '15',
    '16',
    '17',
    '18',
    '19',
    '20',
    '21',
    '22',
    '23']
y1 = data[(data['城市'] == 'A市') & (data['工作日'] == 1)].groupby(
    '时段')['司机在线'].mean().apply(lambda x: round(x, 1)).to_list()
y2 = data[(data['城市'] == 'B市') & (data['工作日'] == 1)].groupby(
    '时段')['司机在线'].mean().apply(lambda x: round(x, 1)).to_list()
y3 = data[(data['城市'] == 'C市') & (data['工作日'] == 1)].groupby(
    '时段')['司机在线'].mean().apply(lambda x: round(x, 1)).to_list()
y4 = data[(data['城市'] == 'D市') & (data['工作日'] == 1)].groupby(
    '时段')['司机在线'].mean().apply(lambda x: round(x, 1)).to_list()
y5 = data[(data['城市'] == 'E市') & (data['工作日'] == 1)].groupby(
    '时段')['司机在线'].mean().apply(lambda x: round(x, 1)).to_list()
line = (
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(series_name="A市", y_axis=y1)
    .add_yaxis(series_name="B市", y_axis=y2)
    .add_yaxis(series_name="C市", y_axis=y3)
    .add_yaxis(series_name="D市", y_axis=y4)
    .add_yaxis(series_name="E市", y_axis=y5)
    .set_global_opts(title_opts=opts.TitleOpts(title="工作日各市各时段司机在线数"))
)
line.render_notebook()
代码语言:javascript复制
# 周六日日各市各时段完单数
x_data = [
    '0',
    '1',
    '2',
    '3',
    '4',
    '5',
    '6',
    '7',
    '8',
    '9',
    '10',
    '11',
    '12',
    '13',
    '14',
    '15',
    '16',
    '17',
    '18',
    '19',
    '20',
    '21',
    '22',
    '23']
y1 = data[(data['城市'] == 'A市') & (data['工作日'] == 0)].groupby(
    '时段')['完单数'].mean().apply(lambda x: round(x, 1)).to_list()
y2 = data[(data['城市'] == 'B市') & (data['工作日'] == 0)].groupby(
    '时段')['完单数'].mean().apply(lambda x: round(x, 1)).to_list()
y3 = data[(data['城市'] == 'C市') & (data['工作日'] == 0)].groupby(
    '时段')['完单数'].mean().apply(lambda x: round(x, 1)).to_list()
y4 = data[(data['城市'] == 'D市') & (data['工作日'] == 0)].groupby(
    '时段')['完单数'].mean().apply(lambda x: round(x, 1)).to_list()
y5 = data[(data['城市'] == 'E市') & (data['工作日'] == 0)].groupby(
    '时段')['完单数'].mean().apply(lambda x: round(x, 1)).to_list()
line = (
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(series_name="A市", y_axis=y1)
    .add_yaxis(series_name="B市", y_axis=y2)
    .add_yaxis(series_name="C市", y_axis=y3)
    .add_yaxis(series_name="D市", y_axis=y4)
    .add_yaxis(series_name="E市", y_axis=y5)
    .set_global_opts(title_opts=opts.TitleOpts(title="周六日各市各时段完单数"))
)
line.render_notebook()
代码语言:javascript复制
#周六日各市各时段转化率
x_data = ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23']
y1=data[(data['城市'] == 'A市') & (data['工作日'] == 1)].groupby('时段')['转化率'].mean().apply(lambda x: round(x,2)).to_list()
y2=data[(data['城市'] == 'B市') & (data['工作日'] == 1)].groupby('时段')['转化率'].mean().apply(lambda x: round(x,2)).to_list()
y3=data[(data['城市'] == 'C市') & (data['工作日'] == 1)].groupby('时段')['转化率'].mean().apply(lambda x: round(x,2)).to_list()
y4=data[(data['城市'] == 'D市') & (data['工作日'] == 1)].groupby('时段')['转化率'].mean().apply(lambda x: round(x,2)).to_list()
y5=data[(data['城市'] == 'E市') & (data['工作日'] == 1)].groupby('时段')['转化率'].mean().apply(lambda x: round(x,2)).to_list()
line=(
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(series_name="A市",y_axis=y1)
    .add_yaxis(series_name="B市",y_axis=y2)
    .add_yaxis(series_name="C市",y_axis=y3)
    .add_yaxis(series_name="D市",y_axis=y4)
    .add_yaxis(series_name="E市",y_axis=y5)
    .set_global_opts(title_opts=opts.TitleOpts(title="周六日各市各时段转化率"))
)
line.render_notebook()

1等奖作品-虾虾蟹蟹哈哈的作品

参考:关于网约车数据的探索

引言:背景

0 人点赞