python招聘笔试题_滴滴2020年春招笔试题分析(Python)

数据背景来自:优梨:滴滴2020年春招Sql笔试题分析​zhuanlan.zhihu.com

这里就不再重复了,主要描述如何使用python数据清洗

问题:

1.订单的平均应答率是多少?完单率是多少?

2.每个订单的平均应答时间是多少?

3.从这一周的时间来看,呼叫次数最多的时间是几点(当地时间),最少的随时间是几点(当地时间)

4.客户留存的情况:呼叫订单第二天继续呼叫的比例是多少?

数据清洗

1.首先导入文件

import pandas as pd

x1=pd.read_csv('C:/Users/LENOVO/Desktop/didi.csv')

2.为方便理解查询将列名改成中文

smallDic={'order_id':'订单号','passenger_id':'乘客号','call_time':'呼叫时间',

'grab_time':'应答时间','cancel_time':'取消时间','finish_time':'完成时间'}

x1.rename(columns=smallDic,inplace=True)

x1.head()

3.缺失数据处理

x1.shape

x2=x1.dropna(subset=['订单号','乘客号'],how='any')

x2.shape并没有缺失的数据

4.统一处理为巴西时间

import datetime

def time_add(x):

list=[]

for i in x:

sdate = datetime.datetime.strptime(i,'%Y/%m/%d %H:%M')

delta11 = datetime.timedelta(hours=11) #巴西时间比国内慢11小时

edate = sdate - delta11

list.append(edate)

pd1=pd.Series(list)

return pd1

t=x2.loc[:,'应答时间']

t1=x2.loc[:,'呼叫时间']

t2=x2.loc[:,'取消时间']

t3=x2.loc[:,'完成时间']

x2.loc[:,'应答时间']=time_add(t)

x2.loc[:,'呼叫时间']=time_add(t1)

x2.loc[:,'取消时间']=time_add(t2)

x2.loc[:,'完成时间']=time_add(t3)

x2.head()

5.对呼叫时间进行处理,分为呼叫日期和呼叫时刻

x2.loc[:,'呼叫时间']=x2.loc[:,'呼叫时间'].astype('str')

def time_spilt(x):

list=[]

for i in x:

date=i.split(" ")[0]

list.append(date)

pd1=pd.Series(list)

return pd1

date1=x2.loc[:,'呼叫时间']

x2['呼叫日期']=time_spilt(date1)

def hour_spilt(x):

list=[]

for i in x:

date=i.split(" ")[1]

hour=date.split(":")[0]

list.append(hour)

pd1=pd.Series(list)

return pd1

date1=x2.loc[:,'呼叫时间']

x2['呼叫时刻']=hour_spilt(date1)

x2.head()

6.呼叫日期中可能还会有空值,因此再次处理一下

x2.loc[:,'呼叫时间']=pd.to_datetime(x2.loc[:,'呼叫时间'],

format='%Y/%m/%d %H:%M',

errors='coerce' #表示不符合格式要求时转化成空值

)

clearData=x2.dropna(subset=['呼叫时间'],how='any')

#行数就代表总的呼叫订单数

call_O=clearData.shape[0]

7.对时间进行排序

#对时间进行排序

clearData=clearData.sort_values(by=['呼叫时间'],ascending=True)

clearData=clearData.reset_index(drop=True) #重新修改索引值

clearData.head()

构建模型

#构建模型 应答率=应答订单/呼叫订单 多条件筛选

judge1=(clearData.loc[:,'应答时间']>'2018-3-5') & (clearData.loc[:,'应答时间']

clearData1=clearData.loc[judge1,:]

grab_O=clearData1.shape[0]

grab_rate=grab_O/call_O

grab_rate应答率72.39%

#完成率也是一样的算法 完成订单/呼叫订单

judge2=(clearData.loc[:,'完成时间']>'2018-3-5') & (clearData.loc[:,'完成时间']

clearData2=clearData.loc[judge2,:]

finish_O=clearData2.shape[0]

finish_R=finish_O/call_O

finish_R完成率47.14%

#最多呼叫次数计算

call_Num=clearData.groupby('呼叫时刻').agg({'订单号':'count'})

max_time=call_Num.max()

p,d=call_Num.stack().idxmax()

print(p,max_time)表示最多的是18点,40笔

min_time=call_Num.min()

p1,d1=call_Num.stack().idxmin()

print(p1,min_time)最少的为2点,只有1笔

将结果在图上绘制出来峰值为18点此后开始大幅下降,而凌晨2-4点这段时间呼叫次数很低

from datetime import timedelta

data=clearData.loc[:,['呼叫日期','乘客号']]

data.loc[:,'呼叫日期']=pd.to_datetime(data.loc[:,'呼叫日期'],format='%Y-%m-%d')

data.dtypes为了后面更好的计算,需要转换日期格式

include_time=pd.Series(data.呼叫日期.unique()).sort_values()[:-1]

list=[]

for i in include_time:

first_user=set(data[data.呼叫日期==i].乘客号.unique())

add_day=datetime.timedelta(days=1)

s=i+add_day

second_user=set(data[data.呼叫日期==s].乘客号.unique())

a=0

for user in first_user:

for user1 in second_user:

if user==user1:

a=a+1

continue

rencent_rate=a/len(first_user)

print(i,rencent_rate)

python基础数据分析学习:优梨:Python数据分析工具入门:Numpy/Pandas​zhuanlan.zhihu.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值