数据科学引论-Python之道 第7课数据科学方法学 一、 数据科学方法学 我们来看看数据科学方法学的内涵。下面这张图描述了数据分析的整个过程。 1.Business 2.Analytic 3.Data 4.Data 5.Data Understanding Approach Requirements Collection Understanding Prediction Interpretation Justification DEPLOY! 鑫 歌 Testing 10.Feedback 9 8.Evaluation 7.Modelling 6.Data Deployment Preparation 让我们结合一个实例来看看在这个过程当中10个步骤的每一个步骤都在做 些什么,要解决什么样的问题。假设Peter在7月22号星期五下午3点要在纽 约参加一个会议,但是他人目前在旧金山,当天他要乘坐航班飞到纽约去参加这 个会议,那么他乘坐的航班会不会延误导致他无法参加这个会议呢?我们要解决 的就是这样一个问题。 首先,第一步是业务理解。所有的项目都始于业务理解,业务理解就是要去 理解我们当前这个项目在做什么,我们的目标是什么。也就是说要明确我们要解 决的问题,定义相关的一些问题和对解决方案的一些需求。在这个例子中,我们 要解决的问题就是要去预测某一天的某个航班是否会延误。 如何去进行这样的预测呢?我们来到了第二个步骤,就是要确定分析方法
数据科学引论-Pyth瀂瀁 之道 第 7 课 数据科学方法学 一、 数据科学方法学 我们来看看数据科学方法学的内涵。下面这张图描述了数据分析的整个过程。 让我们结合一个实例来看看在这个过程当中 10 个步骤的每一个步骤都在做 些什么,要解决什么样的问题。假设 Peter 在 7 月 22 号星期五下午 3 点要在纽 约参加一个会议,但是他人目前在旧金山,当天他要乘坐航班飞到纽约去参加这 个会议,那么他乘坐的航班会不会延误导致他无法参加这个会议呢?我们要解决 的就是这样一个问题。 首先,第一步是业务理解。所有的项目都始于业务理解,业务理解就是要去 理解我们当前这个项目在做什么,我们的目标是什么。也就是说要明确我们要解 决的问题,定义相关的一些问题和对解决方案的一些需求。在这个例子中,我们 要解决的问题就是要去预测某一天的某个航班是否会延误。 如何去进行这样的预测呢?我们来到了第二个步骤,就是要确定分析方法
我们可以通过历史的航班信息来进行预测,于是我们确定,我们要根据历史数据, 通过某种数理统计或者是机器学习的方法来进行预测。数理统计和机器学习的方 法有很多种,我们可以选择其中的一种,比如可以选择逻辑回归。紧接着,我们 要去考虑要做这种预测到底需要哪些航班数据?这些数据是什么格式的?我们 可以想象一下,我们需要某一年的所有航班的起降数据,这些数据最好都是纯文 本的,以方便我们去处理。确定了数据的需求之后,我们要去收集这些数据,这 些数据有可能是开放数据,可以在网络上下载,也有可能是一些私有数据,需要 购买。无论怎样,得到数据之后,要对这些数据做一些理解,比如说这些数据看 起来怎么样,是不是很完整?我们对这些数据会产生一些什么样的初步见解?这 些数据能不能可视化?除了这些数据,我们是不是还遗漏了一些东西? 在当前这个例子中,我们可以看到,一旦拿到航班的历史数据,我们就可以 判断出哪些机场最繁忙,哪些航班最容易延误,而哪些机场延误的情况是最糟糕 的。我们来观察一下我们得到的航班数据,这里我们只取了2007年的有关700 万个航班的数据,其中我们最关注的一列是Departure Delay,也就是飞机实际 起飞时间和预计起飞之间之间的一个延误分钟数。要注意的是,这个数据里面并 没有直接去定义某一个航班是否延误了,它只给出了这个延误的分钟数,这一点 很重要。 ArrTime|CRSArrTime CRSDepTime DayofWeek DayofMonth DepDelay DepTimeDest Distance MonthOrigin| 1341 1340 1225 1232 ONT 389 NN|2007 2043 2035 1905 13 191日 PDX 479 SMP |2007 2334 2300 2130 6 2206 PDX 479 SMF N|2007 1356 1330 1200 1 1230 PDX 479 SMP N|2007 957 1000 B30 1 1 B31 PDX 479 11 SMP N2007 通过可视化,我们可以知道哪些机场最繁忙。我们把所有的机场起降的飞机 的航班的数量通过热图呈现出来,就可以看到面积越大的圆圈,颜色越深的圆圈, 表示机场越繁忙
我们可以通过历史的航班信息来进行预测,于是我们确定,我们要根据历史数据, 通过某种数理统计或者是机器学习的方法来进行预测。数理统计和机器学习的方 法有很多种,我们可以选择其中的一种,比如可以选择逻辑回归。紧接着,我们 要去考虑要做这种预测到底需要哪些航班数据?这些数据是什么格式的?我们 可以想象一下,我们需要某一年的所有航班的起降数据,这些数据最好都是纯文 本的,以方便我们去处理。确定了数据的需求之后,我们要去收集这些数据,这 些数据有可能是开放数据,可以在网络上下载,也有可能是一些私有数据,需要 购买。无论怎样,得到数据之后,要对这些数据做一些理解,比如说这些数据看 起来怎么样,是不是很完整?我们对这些数据会产生一些什么样的初步见解?这 些数据能不能可视化?除了这些数据,我们是不是还遗漏了一些东西? 在当前这个例子中,我们可以看到,一旦拿到航班的历史数据,我们就可以 判断出哪些机场最繁忙,哪些航班最容易延误,而哪些机场延误的情况是最糟糕 的。我们来观察一下我们得到的航班数据,这里我们只取了 2007 年的有关 700 万个航班的数据,其中我们最关注的一列是 De瀃arture De濿ay,也就是飞机实际 起飞时间和预计起飞之间之间的一个延误分钟数。要注意的是,这个数据里面并 没有直接去定义某一个航班是否延误了,它只给出了这个延误的分钟数,这一点 很重要。 通过可视化,我们可以知道哪些机场最繁忙。我们把所有的机场起降的飞机 的航班的数量通过热图呈现出来,就可以看到面积越大的圆圈,颜色越深的圆圈, 表示机场越繁忙
PHX DFW A 我们还可以知道哪一些航班最容易延误。我们将延误的航班所处的航线绘制 出来,就会发现航线密集的城市之间的航线容易出现延误。 CT RDU 我们还可以去判断一周中哪一天的什么时间最容易出现飞机延误情况。我们 可以绘制一张热图,它的横坐标是一天当中的24个小时,纵坐标是一周当中的 七天。我们将所有航班的延误情况都绘制到这张图上,就会得到一张热图。通过 热图,我们可以很直观的看到星期五的晚上是最容易出现延误的情时间段
我们还可以知道哪一些航班最容易延误。我们将延误的航班所处的航线绘制 出来,就会发现航线密集的城市之间的航线容易出现延误。 我们还可以去判断一周中哪一天的什么时间最容易出现飞机延误情况。我们 可以绘制一张热图,它的横坐标是一天当中的 24 个小时,纵坐标是一周当中的 七天。我们将所有航班的延误情况都绘制到这张图上,就会得到一张热图。通过 热图,我们可以很直观的看到星期五的晚上是最容易出现延误的情时间段
Average delay per hours and day? 2 3 4 67891011121314151617181920212223 Hour of Day 接下来我们要做数据准备工作,数据准备工作通常包含四个部分: 第一是数据清洗。在前面我们也反复提到过,我们要把一些缺失了数据的数 据行,也就是数据记录,全部删除掉。数据清洗的目的是要是使所有的数据都是 完整的,符合需求的。 第二是合并数据。由于我们的数据源可能来自于不同的地方,它们的数据可 能需要做一些合并。例如,我们之前谈到的两个DataFrame做merge操作,将 两个不同的DataFrame合并成一个DataFrame,以方便后续的操作。 第三是转换数据。我们把数据的格式转换成我们想要的格式或者是类型,例 如,在数据集中记录了每一位乘客的出生日期,但实际上我们经常做的统计是在 统计乘客的年龄,那么我们就应该把出生日期转换成年龄进行存储 第四是特征工程。还记得刚才我们说的吗?在原始的数据中我们并没有看到 直接把一个航班定义为延误或者是没有延误,只是将航班的实际起飞时间和预计 起飞时间之间的延误的分钟数做了一个记录。现在我们就要通过特征工程来定义 什么样的航班算延误的航班。例如,我们提出延误时间超过15分钟的就被归类 为被延误的航班,于是我们在数据集中增加一个新的列,这一列就在标识每一个 航班是被延误了还是没有被延误,它的类型是bool类型,这一列的名字叫
接下来我们要做数据准备工作,数据准备工作通常包含四个部分: 第一是数据清洗。在前面我们也反复提到过,我们要把一些缺失了数据的数 据行,也就是数据记录,全部删除掉。数据清洗的目的是要是使所有的数据都是 完整的,符合需求的。 第二是合并数据。由于我们的数据源可能来自于不同的地方,它们的数据可 能需要做一些合并。例如,我们之前谈到的两个 DataFra瀀e 做 瀀erge 操作,将 两个不同的 DataFra瀀e 合并成一个 DataFra瀀e,以方便后续的操作。 第三是转换数据。我们把数据的格式转换成我们想要的格式或者是类型,例 如,在数据集中记录了每一位乘客的出生日期,但实际上我们经常做的统计是在 统计乘客的年龄,那么我们就应该把出生日期转换成年龄进行存储, 第四是特征工程。还记得刚才我们说的吗?在原始的数据中我们并没有看到 直接把一个航班定义为延误或者是没有延误,只是将航班的实际起飞时间和预计 起飞时间之间的延误的分钟数做了一个记录。现在我们就要通过特征工程来定义 什么样的航班算延误的航班。例如,我们提出延误时间超过 15 分钟的就被归类 为被延误的航班,于是我们在数据集中增加一个新的列,这一列就在标识每一个 航班是被延误了还是没有被延误,它的类型是 b瀂瀂濿 类型,这一列的名字叫
Delayed,True就表示是延误的航班,False是没有延误的航班。所以我们看到特 征工程是从数据集中抽取出一些特征,并标记在数据集中。 到这里为止,数据就准备好了,下面就可以去做数据的分析了。在前面的这 几个步骤中,我们是可以不断地进行迭代的。不断地迭代就可以不断地提高数据 的质量,就可以有助于最后数据分析质量的提高。 紧接着,我们来建模。建模就是要确定在数据分析过程中的输入是什么?输 出是什么?中间使用的是什么样的算法或技术。在建模时,我们确定输入是航班 的起飞时间,包括年月日和出发时间以及目标机场,输出期望是预测这个航班是 否会延误,就是一个bool值,即True或False。中间我们希望使用逻辑回归的 方式来进行处理。 建模实际上是一个高度迭代化的过程。也就是说,我们会拿航班的历史数据 中的一部分,不断地作为输入去产生输出,拿输出和实际的值进行比较,然后不 断地校正中间逻辑回归模型中的参数。所以我们可以看到建模过程是一个高度迭 代化的过程,在这个过程中,模型是在不断地被修正的。 当我们确定好一个模型之后,就要去对这个模型进行评估。例如,我们拿出 历史数据集中没有去训练这个模型的那一部分数据进行校验,来判断这个模型是 否准确。我们不断地拿这种测试用例输入到建立的模型中,根据模型的输出值和 实际值之间的差异来评估模型的准确性。如果用户对数据分析的性能也很在意, 那么在评估过程中还要去评估模型的性能。毕竟,对于模型的准确性而言,高性 能虽然是用户所希望的,但是如果模型过于费时,它的计算复杂度过高,性能很 差,也并不是用户希望的。所以在模型评估的阶段,我们可能会涉及到多个目标 或者是多个约束条件的测试和评估
De濿ayed,True 就表示是延误的航班,Fa濿se 是没有延误的航班。所以我们看到特 征工程是从数据集中抽取出一些特征,并标记在数据集中。 到这里为止,数据就准备好了,下面就可以去做数据的分析了。在前面的这 几个步骤中,我们是可以不断地进行迭代的。不断地迭代就可以不断地提高数据 的质量,就可以有助于最后数据分析质量的提高。 紧接着,我们来建模。建模就是要确定在数据分析过程中的输入是什么?输 出是什么?中间使用的是什么样的算法或技术。在建模时,我们确定输入是航班 的起飞时间,包括年月日和出发时间以及目标机场,输出期望是预测这个航班是 否会延误,就是一个 b瀂瀂濿 值,即 True 或 Fa濿se。中间我们希望使用逻辑回归的 方式来进行处理。 建模实际上是一个高度迭代化的过程。也就是说,我们会拿航班的历史数据 中的一部分,不断地作为输入去产生输出,拿输出和实际的值进行比较,然后不 断地校正中间逻辑回归模型中的参数。所以我们可以看到建模过程是一个高度迭 代化的过程,在这个过程中,模型是在不断地被修正的。 当我们确定好一个模型之后,就要去对这个模型进行评估。例如,我们拿出 历史数据集中没有去训练这个模型的那一部分数据进行校验,来判断这个模型是 否准确。我们不断地拿这种测试用例输入到建立的模型中,根据模型的输出值和 实际值之间的差异来评估模型的准确性。如果用户对数据分析的性能也很在意, 那么在评估过程中还要去评估模型的性能。毕竟,对于模型的准确性而言,高性 能虽然是用户所希望的,但是如果模型过于费时,它的计算复杂度过高,性能很 差,也并不是用户希望的。所以在模型评估的阶段,我们可能会涉及到多个目标 或者是多个约束条件的测试和评估
为了方便这种评估,我们可以创建一个可交互的原型系统,方便用户输入各 种各样的测试用例,然后根据执行的结果产生对模型准确的评估,评估结束之后 就意味着所建立的分析模型符合预期。 紧接着,我们就可以去部署了。部署就是要将训练好的模型部署到生产环境 或者是受限的测试环境中。在部署时,我们可能会与很多其他的人员打交道,比 如市场部门、解决方案的所有者、应用的开发者和设计者等等。在系统部署好之 后,就会投入实际使用,这时用户会对这个模型进行再度评估,他们的评估会反 馈回开发人员,作为数据分析模型的开发者会拿到这些反馈信息,对模型进行不 断地求精,然后重新部署,通过不断的迭代来继续提高模型准确性。 这就是我们看到的数据分析的10个步骤,这些步骤在任何一个阶段都可以 不断地迭代,以提高数据分析的准确性和性能。 如果你是一个新手怎么办?最好的训练方式就是从一个实际的数据科学的 项目入手,你可以考虑一些你身边的问题,例如交通问题、贫困问题、污染问题、 健康问题等等。联合国确立的可持续发展的17个目标当中的任何一个,都是一 个很好的主题。我们甚至可以去查找联合国提供的一些开放数据,然后遵循数据 科学方法学的这个指南来做出一些有意义的数据科学的实际项目。 二、数据科学方法学-应用案例 让我们通过一个简单的实例来看一看数据科学方法学是如何得到应用的。假 设你得到了一个食谱,这个食谱表示这种美食需要使用的原材料,包含了米饭、 海藻、芥末和酱油。在这种情况下,你是否能猜出这是什么美食呢? 也许吃过寿司的人马上就可以猜出这是寿司,但是更一般的情况是我们可能 有很多种食物都没有吃过,甚至都没有见过,在这种情况下,仅仅根据食谱是否
为了方便这种评估,我们可以创建一个可交互的原型系统,方便用户输入各 种各样的测试用例,然后根据执行的结果产生对模型准确的评估,评估结束之后 就意味着所建立的分析模型符合预期。 紧接着,我们就可以去部署了。部署就是要将训练好的模型部署到生产环境 或者是受限的测试环境中。在部署时,我们可能会与很多其他的人员打交道,比 如市场部门、解决方案的所有者、应用的开发者和设计者等等。在系统部署好之 后,就会投入实际使用,这时用户会对这个模型进行再度评估,他们的评估会反 馈回开发人员,作为数据分析模型的开发者会拿到这些反馈信息,对模型进行不 断地求精,然后重新部署,通过不断的迭代来继续提高模型准确性。 这就是我们看到的数据分析的 10 个步骤,这些步骤在任何一个阶段都可以 不断地迭代,以提高数据分析的准确性和性能。 如果你是一个新手怎么办?最好的训练方式就是从一个实际的数据科学的 项目入手,你可以考虑一些你身边的问题,例如交通问题、贫困问题、污染问题、 健康问题等等。联合国确立的可持续发展的 17 个目标当中的任何一个,都是一 个很好的主题。我们甚至可以去查找联合国提供的一些开放数据,然后遵循数据 科学方法学的这个指南来做出一些有意义的数据科学的实际项目。 二、 数据科学方法学-应用案例 让我们通过一个简单的实例来看一看数据科学方法学是如何得到应用的。假 设你得到了一个食谱,这个食谱表示这种美食需要使用的原材料,包含了米饭、 海藻、芥末和酱油。在这种情况下,你是否能猜出这是什么美食呢? 也许吃过寿司的人马上就可以猜出这是寿司,但是更一般的情况是我们可能 有很多种食物都没有吃过,甚至都没有见过,在这种情况下,仅仅根据食谱是否
能判断出它属于哪一个国家的美食呢?在这种情况下,我们需要针对大量的食谱 进行分析,以此来支持我们的这种猜测。所以,第一个步骤先要理解我们所面临 的问题。我们抽象出了两个问题,第一个是只看原料,我们能否预测出这是什么 美食?第二个是哪些美食在原材料上看是彼此相似的? 第二步骤,我们要针对这样的问题来选择合适的分析方法。对于第一个问题, “只看原料,我们是否能预测出这什么美食?”我们可以使用决策树。决策树将 所有的美食做了分类,例如,首先对是否需要米饭进行分类,凡是需要使用米饭 作为原材料的,我们都认为是亚洲美食,否则就属于亚洲以外的美食。在亚洲美 食中,我们进一步分类,看看它使用的原材料是否包含芥末,如果包含芥末,我 们就认为这是一种日本美食,否则就是日本以外的其他亚洲国家的美食。通过决 策树我们就可以比较快速的定位出来所要预测的这种美食是哪个国家的美食。 ALL CUISINES Rice? NO YES NON-ASIAN FOOD ASIAN FOOD Wasabi? NO YES NOT JAPANESE JAPANESE 对于第二个问题,“哪些美食从原材料上看彼此类似?”我们可以使用聚类的 方法。例如,我们可以挑选原材料作为维度,创建一个N维的空间,每一种美食 根据它所使用的原材料的不同,把它表示成这个N维空间当中的一个点,然后 我们去根据点与点之间的距离将所有的点进行分类。例如在下面这张图中,我们
能判断出它属于哪一个国家的美食呢?在这种情况下,我们需要针对大量的食谱 进行分析,以此来支持我们的这种猜测。所以,第一个步骤先要理解我们所面临 的问题。我们抽象出了两个问题,第一个是只看原料,我们能否预测出这是什么 美食?第二个是哪些美食在原材料上看是彼此相似的? 第二步骤,我们要针对这样的问题来选择合适的分析方法。对于第一个问题, “只看原料,我们是否能预测出这什么美食?”我们可以使用决策树。决策树将 所有的美食做了分类,例如,首先对是否需要米饭进行分类,凡是需要使用米饭 作为原材料的,我们都认为是亚洲美食,否则就属于亚洲以外的美食。在亚洲美 食中,我们进一步分类,看看它使用的原材料是否包含芥末,如果包含芥末,我 们就认为这是一种日本美食,否则就是日本以外的其他亚洲国家的美食。通过决 策树我们就可以比较快速的定位出来所要预测的这种美食是哪个国家的美食。 对于第二个问题,“哪些美食从原材料上看彼此类似?”我们可以使用聚类的 方法。例如,我们可以挑选原材料作为维度,创建一个 N 维的空间,每一种美食 根据它所使用的原材料的不同,把它表示成这个 N 维空间当中的一个点,然后 我们去根据点与点之间的距离将所有的点进行分类。例如在下面这张图中,我们
将所有的美食分成了三个种类,每一个类可以对应着一个国家的风味。 k=3 888 8 将相似的美食分组为k个类 确定了分析方法之后,我们就要去抓取原始数据。我们要获取大量的食谱, 通过对它们的分析来支持我们的猜测。我们可以从一些知名的网站上面去下载这 些数据或者是爬取这些数据。 Show the first few rows head(recipes) country almond angelica anise anise seed apple apple brandy apricot 1 vietnamese No No No No No No No 2 Vietnamese No No No No No No No 3 vietnamese No No No No No 4 vietnamese No No o No No No 5 vietnamese No No No o No No No 6 vietnamese No No No No No No No armagnac artemisia artichoke asparagus avocado bacon baked potato balm banana No No No No No 2 No No No No No No No 3 No No No No No No No No o o No No No No o No No No No No No No 6 No No No No No No No No No 拿到数据之后可以对数据产生一个初步的理解。例如,我们观察这个数据集, 他将所有的食材分成了列,包含了很多列,对每一种美食标明这种美食所使用的 食材包括哪一些,并且它属于哪个国家的风味。针对这个数据集,我们可以统计 某一个国家的风味的食物通常会使用哪些食材。由于这个数据集很大,所以我们 需要一些工具的支持。当你的计算能力不足以去处理大量的数据时,可以借助一 些第三方的平台来进行处理。 在数据理解之后,我们就可以做相应的建模评估等等工作了。最终我们就可 以得到一个完整的可以进行美食预测的模型,这个模型可以帮助我们回答像刚才
将所有的美食分成了三个种类,每一个类可以对应着一个国家的风味。 确定了分析方法之后,我们就要去抓取原始数据。我们要获取大量的食谱, 通过对它们的分析来支持我们的猜测。我们可以从一些知名的网站上面去下载这 些数据或者是爬取这些数据。 拿到数据之后可以对数据产生一个初步的理解。例如,我们观察这个数据集, 他将所有的食材分成了列,包含了很多列,对每一种美食标明这种美食所使用的 食材包括哪一些,并且它属于哪个国家的风味。针对这个数据集,我们可以统计 某一个国家的风味的食物通常会使用哪些食材。由于这个数据集很大,所以我们 需要一些工具的支持。当你的计算能力不足以去处理大量的数据时,可以借助一 些第三方的平台来进行处理。 在数据理解之后,我们就可以做相应的建模评估等等工作了。最终我们就可 以得到一个完整的可以进行美食预测的模型,这个模型可以帮助我们回答像刚才
的原材料里包含了米饭、海藻、芥末和酱油的这样的食物到底是哪个国家的哪种 美食了
的原材料里包含了米饭、海藻、芥末和酱油的这样的食物到底是哪个国家的哪种 美食了