文章目录

  • 数据可视化第二版-拓展-网约车分析案例
    • 竞赛介绍
  • 1等奖作品-IT从业者张某某的作品
    • 结论
    • 过程数据和思考
      • 数据处理
      • 数据探索
      • 数据分析方法选择
      • 数据分析
        • 相关性分析
        • 转化率分析
          • 分析结论
        • 完单数量分析
          • 分析结论
        • 司机数量分析
          • 分析结论
        • 时间分析
          • 每日订单分析
        • 工作日各时段分析
        • 周六日各时段分析
      • 代码
  • 1等奖作品-虾虾蟹蟹哈哈的作品
    • 引言:背景
    • 度量指标 & 结论
    • 过程数据与思考
      • 一、数据处理
      • 二、大盘存量数据一览
        • 1. 分城市关键指标变化情况
        • 2. 各项指标相关性分析
      • 三、数量维度分析
        • 1. 城市间比较
          • 1.1 工作日 vs 双休日
          • 1.2 白天 vs 夜晚
        • 2. 城市内比较
      • 四、质量维度分析
        • 1. 各城市完单率
        • 2. 异常区间
      • 五、问题提出与可能的解决方法
      • 参考文献
    • 代码附录
    • 一、数据查看与数据清洗
    • 二、 绘图查看城市每天网约车供需趋势
      • (一)数量
        • 1. 城市间比较
        • 2. 城市内比较:超过标准区间内数值占多少小时
        • 3. 白天夜晚比较
        • 4. 城市内 top N/tail N
      • (二)质量
    • 三、求出来三步转化率看一下
      • 1.转换率计算
      • 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 时达到最高峰,而此时的完单数已呈降趋势,所以应该提早增加司机数量 。

分析结论

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

代码

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()

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

# 最大显示行数
pd.set_option('display.max_rows', 10)
# 转化率
change_rate = rawdata['完单数'] / rawdata['冒泡数']
data = pd.concat([rawdata, change_rate], axis=1).rename(columns={0: '转化率'})
data

# 司乘比 在线的司机数 每天的平均接单数量
rate = (data['完单数']/data['司机在线'])
data = pd.concat([data, rate], axis=1).rename(columns={0: '司乘比'})
data

# 司机接单意愿
rate = (data['应答数'] / data['司机在线'])
data = pd.concat([data, rate], axis=1).rename(columns={0: '司机接单'})
data

# 相关性计算
cor = data.corr()
cor

# 生成工作日特征
data['工作日']=data.apply(lambda x:1 if ((x.星期=='周一') | (x.星期=='周二') | (x.星期=='周三') | (x.星期=='周四') | (x.星期=='周五')) else 0,axis=1)
data

# 相关性可视化
cor = data.corr()
cor

# 相关性可视化
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 城市来说,暂时来说,继续保持的,同时考虑 中午的接单数

完单率是可以优化的空间

# 各市转化率
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 城市转化率有提升空间

# 各步骤转化率
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

# 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 funnelfunnel_show(funnel_data, "A市").render_notebook()

funnel_show(funnel_data, "B市").render_notebook()

funnel_show(funnel_data, "C市").render_notebook()

funnel_show(funnel_data, "D市").render_notebook()

funnel_show(funnel_data, "E市").render_notebook()

# 各城市司乘比
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 市 每位司机 每小时接单量最多

# 各市每日司乘比
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 使用量较好

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。 冒泡多 但完单少,可能是运营问题,也可能是竞争问题,也可能是交通问题。

#各市每日完单数
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()

#工作日各市各时段完单数
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()

# 工作日各市各时段冒泡数
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()

# 工作日各市各时段呼叫数
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()

#工作日各市各时段应答数
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()

#工作日各市各时段转化率
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 市 各个时间段 完单率都较低 说明可能不是市内交通环境 ,而是运营或是竞争的问题

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 城市 夜晚司机太少 可以增加夜晚司机的任务完成奖励

# 周六日日各市各时段完单数
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()

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()

# 周六日日各市各时段完单数
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()

#周六日各市各时段转化率
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等奖作品-虾虾蟹蟹哈哈的作品

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

引言:背景

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

  1. 数据可视化第二版-03部分-07章-局部与整体

    文章目录 数据可视化第二版-03部分-07章-局部与整体 总结 可视化视角-局部与整体 代码实现 韦恩图 venn3 venn2 饼图 环形图 旭日图 园堆积图 矩形树图 漏斗图 基于matplot' ...

  2. 上海发布通知:年底前全面清退不符条件的网约车车辆和驾驶员

    不符合条件的网约车与驾驶员,将在今年底前大量退出上海.10月22日上午,2018年上海市网络预约出租汽车平台企业约谈会举行,上海市交通委执法总队.市公安交警总队.市运输管理处联合约谈上海市16家网约车 ...

  3. 网约车壁垒超过想象,美团打车陷进退两难地步

    美团向港交所提交招股书,其关于网约车业务的一些关键数据就此为外界所知,招股书提到,其2017年其在南京试点推出的网约车业务仅司机成本就已达到2.93亿元,今年3月其进入上海推出网约车服务,不过之后其在 ...

  4. 《数据分析师第二版》

    <数据分析师第二版>学习笔记2020年9月24日更新 第8章 数据规整:聚合.合并和重塑 8.2合并数据集 pandas.merge:可以根据一个或多个键将不同DataFrame中的行连接 ...

  5. 基于QT的滴滴网约车订单数据可视化分析

    全套资料下载地址:https://download.csdn.net/download/sheziqiong/85584944?spm=1001.2014.3001.5503 [摘要]在万物联网的当下 ...

  6. 向左还是向右,网约车聚合平台还是高精度地图数据收集站

    北京第三区交通委提醒您:道路千万条,安全第一条.行车不规范,亲人两行泪." 在科幻电影<流浪地球>大火之后,电影中多次出现的交通宣传标语受到了不少网友的调侃,一时间成为最热的网络 ...

  7. 数据可视化:利用Python和Echarts制作“用户消费行为分析”可视化大屏

    数据可视化:利用Python和Echarts制作"用户消费行为分析"可视化大屏 前言 实验目的: 准备工作: 一.创建项目: 二.建立数据库连接获取数据: 三.页面布局: 四.下载 ...

  8. 大数据24小时:系统工程领域专家夏耘出任海云数据CEO,交通部将对网约车公司运营数据进行监管

    [数据猿导读]系统工程领域专家夏耘加盟海云数据,接替冯一村任CEO一职:交通部颁布<办法>,将对网约车公司运营数据进行监管:阿里云在欧洲推出多款产品,涉及大数据.人工智能.安全等领域--以 ...

  9. 赠书:算法与数据中台“网约车业务实践”

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 在O2O 模式下,网约车平台成为其中最为经典的案例,无论 ...

最新文章

  1. python 非法字符处理
  2. 1、MySQL约束概述
  3. java的read()_Java Reader read()方法
  4. Struts2-Action的基本流程
  5. linux 添加path环境变量中,在Linux里设置环境变量PATH的方法是什?
  6. 16个SNS网站常用JS组件
  7. apache commons Java包简介
  8. 标准误计算机excel公式,excel标准误差怎么算
  9. linux下mysql免安装_linux下免安装版本mysql5.5 配置
  10. 计算机考试当场出分,基金从业资格考试当场出成绩吗?
  11. windows无法完成格式化怎么办?
  12. Java 第 34 课 1365. 有多少小于当前数字的数字 1331. 数组序号转换
  13. 怎么调出全局搜索_eclipse全局搜索快捷键是什么
  14. 实验三十五 Windows Server 2012 RDS桌面虚拟化之六VDI虚拟桌面的用户管理和安全防护
  15. Wireshark抓包数据
  16. c#未能加载基类System
  17. NVIDA显卡支持的编码器+解码器对应表
  18. 《计算机组成原理》重点
  19. 怎么用matlab建立一个魔方,Matlab学习笔记(2)矩阵与魔方
  20. JAVA程序计数器理解

热门文章

  1. [渝粤教育] 北部湾大学 团体心理辅导 参考 资料
  2. #边学边记 必修5 高项:对人管理 第2章 项目沟通管理和干系人管理 2-5 项目干系人管理
  3. POJ 1253:Dungeon Master
  4. (附源码)ssm经济信息门户网站 毕业设计 141634
  5. python语言依赖平台_poetry首页、文档和下载 - Python 依赖管理和打包工具 - OSCHINA - 中文开源技术交流社区...
  6. 实例|货架设计利器|有限元法|详解
  7. 全球3d地形图分享,我们生活的地球,原来可以这么美!
  8. 第4集丨做一个内心强大的人
  9. 书本知识太枯燥?体验一次动手又动脑的项目制吧
  10. Typora主题更换(含主题下载云盘链接)