滴滴出行2020数据分析面试题

article/2025/9/27 19:31:49

目录

    • 数据来源
    • 字段释义
    • 指标释义
    • 其他信息
        • 加载包
        • 加载数据
        • 数据预处理
      • 问题
        • 1 订单的应答率、完单率分别是多少?
        • 2 呼叫应答时间多长?
        • 3 呼叫量最高的是哪一个小时(当地时间)?呼叫量最少的是哪一个小时(当地时间)?
        • 4 呼叫订单第二天继续呼叫的比例有多少?
          • (1)按订单数计算
          • (2)按乘客数计算
        • 5 如果要对表中乘客进行分类,你认为需要参考哪一些因素?

数据来源

滴滴国际部2020年2月数据分析实习生笔试题
内容:2018年3月5日-2018年3月11日期间100名巴西乘客的订单基础信息

字段释义

字段中文名称解释
order_id订单ID呼叫订单识别号
passenger_id乘客ID乘客识别号
call_time呼叫时间乘客从应用上发出需要用车的请求的时间点(北京时间)
grab_time应答时间司机点击接单的时间点(北京时间)
cancel_time取消时间司机或者乘客取消订单的时间(北京时间)
finish_time完单时间司机点击到达目的地的时间点(北京时间)

指标释义

指标名称含义统计口径
应答率呼叫订单被应答的比例应答订单/呼叫订单
完单率呼叫订单被完成率完成订单/呼叫订单
呼叫应答时间被应答订单从呼叫到被应答平均时长被应答订单从呼叫到被应答时长总和/被应答订单数量

其他信息

巴西比中国慢11小时

加载包

import numpy as np
import pandas as pd
import datetime

加载数据

data = pd.read_csv('dididata.csv')
data.head()

data.head()

数据预处理

# 查看各字段格式
data.info()

data.info()
4个时间数据为object,需要将其改为datetime

data['call_time'] = pd.to_datetime(data['call_time'])
data['grab_time'] = pd.to_datetime(data['grab_time'])
data['cancel_time'] = pd.to_datetime(data['cancel_time'])
data['finish_time'] = pd.to_datetime(data['finish_time'])
data.info()

data.info()
没有空值,说明未应答、未取消、未完成的订单时间不是以空值存储,检查后发现这些数据是记为1971-01-01 00:00:00
将其替换为空值,便于后续分析

data.loc[data['grab_time']=='1971-01-01 00:00:00','grab_time']= np.nan
data.loc[data['cancel_time']=='1971-01-01 00:00:00','cancel_time'] = np.nan
data.loc[data['finish_time']=='1971-01-01 00:00:00','finish_time']= np.nan
data.info()

巴西比中国慢11小时,将表中北京时间转换为巴西时间

data['call_time']-=datetime.timedelta(hours=11)
data['grab_time']-=datetime.timedelta(hours=11)
data['cancel_time']-=datetime.timedelta(hours=11)
data['finish_time']-=datetime.timedelta(hours=11)
data.head()

data.head()

问题

1 订单的应答率、完单率分别是多少?

print('应答率:',data['grab_time'].count()/data['call_time'].count())
print('完单率:',data['finish_time'].count()/data['call_time'].count())

应答率: 0.7239057239057239
完单率: 0.4713804713804714

2 呼叫应答时间多长?

diff = (data['grab_time']-data['call_time']).sum()/data['grab_time'].count()    # 获取平均时间,得到numpy.timedelta64 纳秒时间差
diff = diff / np.timedelta64(1,'m')    # 将 纳秒 转换为 分钟
print('呼叫应答时间:',diff,'分钟')

呼叫应答时间: 0.7255813953333333 分钟

3 呼叫量最高的是哪一个小时(当地时间)?呼叫量最少的是哪一个小时(当地时间)?

data.groupby(data['call_time'].dt.hour).call_time.count().sort_values(ascending=False)

call_time
18 40
20 25
23 21
19 21
14 20
16 18
13 15
9 14
0 14
15 13
12 12
22 10
10 10
21 10
8 9
17 8
7 8
11 8
5 7
6 6
4 3
1 3
3 1
2 1
Name: call_time, dtype: int64
呼叫量最高的是18时,呼叫量最少的是2时和3时。(当地时间)

4 呼叫订单第二天继续呼叫的比例有多少?

(1)按订单数计算
# 新增一列呼叫日期的天数,方便计算
data['day'] = data['call_time'].dt.day
# 将表根据passenger_id进行左连接
data2 = data.merge(data,on='passenger_id',how='left')
# 筛选出第二次呼叫比第一次呼叫晚一天的数据
data2 = data2[(data2['day_y']-data2['day_x'])==1]
# 为避免前一天有多个订单,造成第二天的订单重复计算,对第二天的订单号进行去重
print('结果为:',data2.drop_duplicates(subset=['order_id_y']).order_id_x.count() / data.day.count())

结果为: 0.32996632996632996

(2)按乘客数计算
# 在连接好的表中,对乘客id进行去重,得到第二天继续呼叫乘客数
result = data2.drop_duplicates(subset='passenger_id').passenger_id.count() / data.drop_duplicates(subset='passenger_id').passenger_id.count()
print('结果为:',result)

结果为: 0.3472222222222222

5 如果要对表中乘客进行分类,你认为需要参考哪一些因素?

基于已有的表格中数据,可以用RFM模型对用户进行分类,
R:乘客上一次打车距离3月11日的时间间隔
F:乘客在数据期间的打车频率
M:打车消费金额(表中无打车金额,可以用完成订单总时长代替)
RFM

data['time'] = data['finish_time'] - data['call_time']
​
rfm = data.groupby('passenger_id').aggregate({'call_time': max,'order_id': 'count','time': sum
})
rfm.head()

rfm.head()

rfm['R'] = (rfm['call_time'].max() - rfm['call_time'])/np.timedelta64(1,'D')
rfm['time'] = rfm['time']/np.timedelta64(1,'m')
rfm.rename(columns={'order_id':'F','time':'M'},inplace=True)
rfm.head()

rfm.head()

rfm.describe()

rfm.describe()

def RFM(x):level = x.apply(lambda x:'1' if x>0 else '0')label = level['R']+level['F']+level['M']d = {'011':'重要价值客户','001':'重要发展客户','111':'重要保持客户','101':'重要挽留客户','010':'一般价值客户','000':'一般发展客户','110':'一般保持客户','100':'一般挽留客户'}result = d[label]return result
rfm['label'] = rfm[['R','F','M']].apply(lambda x:(x-x.mean())).apply(RFM,axis=1)
rfm.head()

rfm.head()

rfm.groupby(['label']).aggregate({'F':'count','M':sum
})

一般挽留客户和一般发展客户比较多,都是21人;
重要价值客户有13人,乘车时长远高于其他客户群


http://chatgpt.dhexx.cn/article/JoPb8aMy.shtml

相关文章

大数据分析实习生应该如何选择职业方向?

那么,大数据方向实习生到底该做些什么? Excel2013目前可以支持104万行数据,即使是这样也远远算不上大数据。 以下是华院数据整理的2015年大数据相关公司排名 看看你的公司在不在里边? 话说回来,对于一个实习生来说,让你处理Ex…

大数据分析实习生面试题库

大数据分析是一个有吸引力的领域,因为它不仅有利可图,而且您有机会从事有趣的项目,而且您总是在学习新事物。如果您想从头开始,请查看大数据分析实习生面试题库以准备面试要点。 大数据分析是一个有吸引力的领域。这是有利可图的&…

数据分析师实习岗笔试题(part1)

笔试后记,仅供参考 因为公司说不能泄露笔试题,所以我就加了点润色,但是不影响内容 限时免费:3小时 前言 笔试时间:2020年6月 笔试方式:在线笔试 笔试内容:sql语言、R语言/python、统计学相关知识 笔试时间:2小时之内 来几个励志的名人名言吧 要随时牢记在心中:决心…

【数据分析】滴滴数据分析岗实习经验

转载自:数据管道 原作者介绍:双非院校刚毕业的统计硕士,目前在滴滴工作,有8个月的数据分析实习经历,面试过10位以上数据分析实习生,最终成为了产品经理。 在原文的基础上有过删减。 两个主题 本文的主要目…

数据分析真题日刷 | 网易2018实习生招聘笔试题-数据分析实习生

上周开始实习,博客更新就缓下来了。这是十天前做的套题了,现在拾起来把它再整理整理。 网易数据分析实习生的笔试题,和校招的题目还是有部分重复的,不过难度也不小。 今日真题 网易2018实习生招聘笔试题-数据分析实习生 &#x…

数据分析——实习僧数据分析岗招聘信息分析

随着互联网技术不断完善,市场竞争日益激烈,粗放经营的企业将很难实现可持续发展。为改变这一现状,越来越多的企业开始对自身数据进行深度分析和挖掘,并以此辅助决策人员进行精细化决策管理。由此,越来越多的数据分析师应运而生。 本人初步踏入这一领域,希望对数据分析实…

分析数据分析实习岗位信息(1、数据获取)

目录 1.1 网页分析1.2 字体反扒机制1.3 构造字典1.4 创建表1.5 根据自己的需要进行修改 又到了一年一度的秋招了,由于受疫情的影响,部分公司减少了数据分析相关岗位的实习名额,为了更了解秋招的相关岗位信息,这里针对实习僧 网站…

我在滴滴数据分析岗实习了8个月

作者介绍:双非院校刚毕业的统计硕士,目前在滴滴工作,有8个月的数据分析实习经历,面试过10位以上数据分析实习生,最终成为了产品经理。 两个主题 本文的主要目标是帮助一些刚入门的同学了解互联网公司中“数据分析”岗位…

LOUVAIN——社交网络挖掘之大规模网络的社区发现算法

LOUVAIN——社交网络挖掘之大规模网络的社区发现算法 算法来源 该算法来源于文章Fast unfolding of communities in large networks,简称为Louvian。 算法原理 Louvain算法是基于模块度(Modularity)的社区发现算法,该算法在效率…

泛运筹理论初探——Louvain算法简介

图论-图论算法之Louvain 社区发现算法简介之Louvain算法 在本次文章中,我们将会介绍经典的社区发现方法,也就是Louvain算法。这种算法在社群发现等应用的效果较好,是比较经典的图挖掘类算法,在金融风控行业挖掘诈骗团伙等应用…

Louvain社区划分算法及Java语言实现

Louvain社区划分算法及Java语言实现 社区划分算法处理的对象Louvain社区发现算法全局模块度单层算法过程多层算法过程Java代码实现图实现模块度计算单层louvain实现多层louvain实现运行入口,使用方法 社区划分算法处理的对象 社区划分算法又称社区发现算法&#xf…

社区发现算法-Community Detection-NormalizeCut/Louvain/NMF/LPA

本文结构安排 图聚类简介 正则化割 Louvain 非负矩阵分解(NMF) 其他常见方法 图(graph):是一种由点和边集构成的结构 G ( V , E ) G(V,E) G(V,E) 图聚类(graph clustering) : 将点划分为不同的簇,使得簇内的边尽量多,簇之间…

Louvain算法在反作弊上的应用

作者 | ANTI 一、概述 随着互联网技术的发展,人们享受互联网带来的红利的同时,也面临着黑产对整个互联网健康发展带来的危害,例如薅羊毛、刷单、刷流量/粉丝、品控、诈骗、快排等等,反作弊作为打击黑产的中坚力量,持…

community_louvain社群划分方法

第一、 这个方法是一个典型的EM算法。定义了一个“模块度”的量化评价指标,然后结合上优化方法,不断地优化模块度,最终得到社群划分的结果。 第二、模块度的定义,具体如下: 对于图中任意两个节点,i和j 1、…

Louvain 社团发现算法学习(我的java实现+数据用例)

为了大家方便,直接把数据放在github了: https://github.com/qq547276542/Louvain 算法介绍: Louvain 算法是基于模块度的社区发现算法,该算法在效率和效果上都表现较好,并且能够发现层次性的社区结构,其…

‘ network communites’(网络社区)(二)(louvain算法实现)

引言: 在(一)中我们学习到了什么是‘network communites’(网络社区)及其目标函数Q的求取,接下来我们要说明的是,我们要通过怎样的算法来实现将你的网络分成若干个集群。 一:louva…

neo4j实现Louvain算法

文章目录 例子一:创建一个属性图(无权)一、属性图如下二、实现算法1.stream模式执行Louvain算法(匿名图)2.结果如下 总结一:例子二:创建一个属性图(有权)一、属性图如下二…

社区发现系列03-Louvain算法分辨率

1、分辨率局限 louvain算法存在的问题:分辨率局限。就是说当通过优化模块度来发现社区结构时,网络在存在一个固有的分辨率局限,导致一些规模较小但是结构显著的社区淹没在大的社区中,无法被识别到。 造成这个问题的根本原因是模块…

(Leiden)From Louvain to Leiden:guaranteeing well-connected communities

Leiden算法 论文地址 Leiden算法是近几年的SOTA算法之一。 Louvain 算法有一个主要的缺陷:可能会产生任意的连接性不好的社区(甚至不连通)。为了解决这个问题,作者引入了Leiden算法。证明了该算法产生的社区保证是连通的。此外证明了当Leiden算法迭代应…

社区发现不得不了解的库,包含Louvain 算法、Girvan-Newman 算法等多种社区发现算法,还具有可视化功能

熟知社区发现算法,你不能错过这个 Python 库。它涵盖 Louvain 算法、Girvan-Newman 算法等多种社区发现算法,还具有可视化功能。 网络是由一些紧密相连的节点组成的,并且根据不同节点之间连接的紧密程度,网络也可视为由不同簇组成…