(给机器学习算法与Python实战加星标,提升AI技能) 观察表中时间相关数据结合题目,要做出2步数据预处理:-- 利用cast函数转换成日期数据 update didi set call_time = cast(call_time as datetime), grab_time = cast(grab_time as datetime), cancel_time = cast(cancel_time as datetime), finish_time = cast(finish_time as datetime);
-- 将北京时间调整为巴西时间,date_sub函数 update didi set call_time = date_sub(call_time,interval 11 hour ), grab_time = date_sub(grab_time,interval 11 hour ), cancel_time = date_sub(cancel_time,interval 11 hour ), finish_time = date_sub(finish_time,interval 11 hour );
应答率 = 应答订单数 / 呼叫订单数 完单率 = 完成订单数 / 呼叫订单数
select sum(if(year(grab_time)<>1970,1,0))/count(call_time)as '应答率', sum(if(year(finish_time)<>1970,1,0))/count(call_time)as '完单率' from didi
-- 使用timestampdiff函数,计算应答时间与呼叫时间之间的时长 select sum(TIMESTAMPDIFF(MINUTE,call_time,grab_time))/count(grab_time)as '呼叫应答时间' from didi where year(grab_time)<>1970; 问题3:从这一周的数据来看,呼叫量最高的是哪一个小时(当地时间)?呼叫量最少的是哪一个小时(当地时间)?根据题意,需要新增一列数据,订单呼叫时间的小时,进行分组分析-- 新增一列 alter table didi add column call_time_hour VARCHAR(255); -- 使用substr函数做字符串截取,为新列赋值 update didi set call_time_hour = SUBSTR(call_time from 12 for 2);
-- 方法2:使用date_format函数转换格式 update didi set call_time_hour = DATE_FORMAT(call_time,'%k')
-- 找出呼叫量最高的小时,显示2行防止出现重复值。 select call_time_hour,count(call_time)as'呼叫量' from didi GROUP BY call_time_hour ORDER BY count(call_time) desc limit 2;
-- 找出呼叫量最少的小时,显示3行确认是否有第三个相等值。 select call_time_hour,count(call_time)as'呼叫量' from didi GROUP BY call_time_hour ORDER BY count(call_time) asc limit 3; 得出结论:呼叫量最高的是18时,呼叫量最少的是2和3时。select count(DISTINCT a.order_id)/(select count(DISTINCT order_id) from didi)as'第二天继续呼叫比例' from didi a join didi b on a.passenger_id = b.passenger_id where datediff(a.call_time,b.call_time)=1; 问题5:如果要对表中乘客进行分类,你认为需要参考哪一些因素?基于已有的表格中数据,可以参RFM模型对用户进行分类:
|