乐飞天下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
總結
以上是生活随笔為你收集整理的乐飞天下python笔试题_滴滴2020年春招笔试题分析(Python)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python抓取html中特定的数据库,
- 下一篇: mysql数据库事务命令_MySql学习