开发者学堂课程【大数据 Spark2020版(知识精讲与实战演练)第四阶段: 项目分析_流程分析】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/691/detail/12106
项目分析_流程分析
流程分析
内容:陌生环境下拿到一个需求,如何一步步规划步骤
流程分析:
第一步分析流程,第二步具体流程介绍、代码如何编写、大致步骤
1.分析的视角
分为三步,第一步理解数据集,理解数据集的过程要查看你数据集,数据集是否有结构,查看数据集数据是否乱,如何进行清晰的处理,对数据集的情况有所了解,数据集每行记录所代表的含义,如:出租车的载客记录,以及表达实体对象的最核心字段;第二步理解需求与结果集,理解需求与调研需求、查阅步骤包括编写代码、完成测试都是必要的,明确需求,与前面的数据集做对照,查看数据集中是否包含必备完成需求的字段,根据需求,明确结果集的内容,理解产生的结果集,data转化成result的过程,即数据转为结果的过程,在数据与结果的基础上继续进行;第三步反推每一个步骤,通过结果集反推数据集中间的过程,通过结果看如何达到结果
(1)理解数据集
首先要理解数据集,要回答自己一些问题
这个数据集是否以行作为单位,是否是 DataFrame 可以处理的,大部分情况下都是。
这个数据集每行记录所代表的实体对象是什么,例如:出租车的载客记录
表达这个实体对象的最核心字段是什么,例如:上下车地点和时间,唯一标识一辆车的 License
(2)理解需求和结果集
小学的时候,有一次考试考的比较差,老师在帮我分析的时候,告诉我,你下次要读懂题意,再去大题,这样不会浪费时间,于是这个信念贯穿了我这些年的工作.
按照我对开发工作的理解,在一开始的阶段进行一个大概的思考和面向对象的设计,并不会浪费时间,即使这些设计可能会占
用一些时间.
对代码的追求也不会浪费时间,把代码写好,会减少阅读成本,沟通成本.
对测试的追求也不会浪费时间,因为在进行回归测试的时候,可以尽可能的减少修改对已有代码的冲击.
所以第一点,理解需求再动手,绝对不会浪费时间.第二点,在数据分析的任务中,如何无法理解需求,可能根本无从动手.
我们的需求是:出租车在某个地点的平均等待客人时间
简单来说,结果集中应该有的列:地点,平均等待时间
(3)反推每一个步骤
结果集中,应该有的字段有两个,一个是地点,一个是等待时间
地点如何获知?-其实就是乘客的下车点,但是是一个坐标,如何得到其在哪个区?等待时间如何获知?其实就是上一个乘客下车,到下一个乘客上车之间的时间,通过这两个时间的差值便可获知
2.步骤分析
查看数据,打开文件夹,简版数据
观察数据集 Hack_licence 执照号,pickup_datatime 上车时间,dropoff_datatime 下车时间,pickup_longitude 上车的经度,pickup_latitude 上车的纬度,dropoff_longitude 下车的经度,dropoff_latitude 下车的纬度
每一行数据:
表示一个出租车在何时何地接了一个乘客,乘客何时上车何时下车,上车下车的位置
(1)读取数据集
数据集很大,所以我截取了一小部分,大概百分之一左右,如果大家感兴趣的话,可以将完整数据集放在集群中,使用集群来计算""大数据"
(2)清洗
数据集当中的某些列名可能使用起来不方便,或者数据集当中某些列的值类型可能不对,或者数据集中有可能存在缺失值,这些都是要清洗的动机,和理由
(3)增加区域列
由于最终要统计的结果是按照区域作为单位,而不是一个具体的目的地点,所以要在数据集中增加列中放置区域信息
①既然是放置行政区名字,应该现有行政区以及其边界的信息.
②通过上下车的坐标点,可以判断是否存在于某个行政区中这些判断坐标点是否属于某个区域,这些信息,就是专业的领域了
(4)按照区域,统计司机两次营运记录之间的时间差
数据集中存在很多出租车师傅的数据,所以如何将某个师傅的记录发往一个分区,在这个分区上完成会话分析呢?这也是一个需要理解的点。
结果集:area 行政区的信息、avgtime 平均等客时间
读取数据集,对杂乱的数据进行清洗,增加区域列,最终需求是出租车在某个区的等客时间,行政区的列对应的是下车点所在的行政信息,按照行政区域司机两次营运记录之间的时间差。
等客时间是上一个乘客下车的时间的到下一个乘客上车的时间的统计即下一个上车-上一个下车,同一个出租车的上一条数据和下一条数据,需要了解会话。