提交 7eecbb66 编写于 作者: W wizardforcel

2021-03-09 21:48:57

上级 7618a0b6
......@@ -3,17 +3,17 @@
|   | *“开发人员是当今商业中最重要,最有价值的选区,而与行业无关。”* |   |
|   | - *The New Kingmakers* 的作者 Stephen O'Grady |
首先,让我感谢您,并祝贺您,读者,决定决定花您宝贵的时间阅读本书。 在接下来的各章中,我将带您从开发人员的角度探索或什至重新发现数据科学的旅程,并将发展本书的主题,即数据科学是一项团队运动,如果 为了获得成功,开发人员将不得不在不久的将来扮演更大的角色,并与数据科学家更好地合作。 但是,为了使数据科学对所有背景和行业的人都具有更大的包容性,我们首先需要通过使数据简单易用使其*民主化*-这实际上就是本书的目的。
首先,让我感谢您,并祝贺您,读者,决定决定花您宝贵的时间阅读本书。 在接下来的各章中,我将带您从开发人员的角度探索或什至重新发现数据科学的旅程,并将发展本书的主题,即数据科学是一项团队运动,并且,如果获得成功,开发人员将不得不在不久的将来扮演更大的角色,并与数据科学家更好地合作。 但是,为了使数据科学对所有背景和行业的人都具有更大的包容性,我们首先需要通过使数据简单易用使其*民主化*-这实际上就是本书的目的。
# 我为什么要写这本书?
正如我将在第 1 章“来自开发人员的数据科学观点”中更详细地解释的那样,我首先是拥有 20 多年开发经验的开发人员,他在构建以下方面的软件方面有丰富的经验 多样化的性质; 前端,后端,中间件等。 回顾这段时间,我意识到,正确地执行算法有多少是我首先想到的事情。 数据始终是别人的问题。 我很少需要分析它或从中提取见解。 充其量,我正在设计正确的数据结构以某种方式加载它,这将使我的算法更有效地运行并且代码更优雅且可重复使用。
正如我将在第 1 章“来自开发人员的数据科学观点”中更详细地解释的那样,我首先是拥有 20 多年开发经验的开发人员,他在构建具有多样化的性质的软件方面有丰富的经验; 前端,后端,中间件等。 回顾这段时间,我意识到,正确地执行算法有多少是我首先想到的事情。 数据始终是别人的问题。 我很少需要分析它或从中提取见解。 充其量,我正在设计正确的数据结构以某种方式加载它,这将使我的算法更有效地运行并且代码更优雅且可重复使用。
但是,随着人工智能和数据科学革命的进行,对我来说很明显像我这样的开发人员需要参与其中,因此在 7 年前的 2011 年,我抓住了机会成为 IBM Watson 的首席架构师 核心平台用户界面和工具。 当然,我不假装自己不是机器学习或 NLP 方面的专家。 通过实践学习不能代替获得正式的学术背景。
但是,随着人工智能和数据科学革命的进行,对我来说很明显像我这样的开发人员需要参与其中,因此在 7 年前的 2011 年,我抓住了机会成为 IBM Watson 核心平台用户界面和工具的首席架构师。 当然,我不假装自己不是机器学习或 NLP 方面的专家。 通过实践学习不能代替获得正式的学术背景。
但是,我想在本书中展示的很大一部分是,使用正确的工具和方法,具备正确的数学基础的人(我只是在谈论高中水平的微积分概念)可以迅速成为该领域的优秀从业者。 成功的关键因素是尽可能简化构建数据管道的不同步骤; 从获取,加载和清理数据到可视化和探索数据,一直到构建和部署机器学习模型。
为了进一步推动使数据更容易被数据科学家以外的社区访问的想法,三年前,我在 IBM Watson Data Platform 团队中担任领导职务,其使命是扩大开发人员社区 这些数据特别代表他们关注教育和行动主义。 在此期间,作为首席开发人员倡导者,我开始公开谈论开发人员和数据科学家在更好地协作解决复杂数据问题方面的需求。
为了进一步推动使数据更容易被数据科学家以外的社区访问的想法,三年前,我在 IBM Watson Data Platform 团队中担任领导职务,其使命是扩大开发人员社区,它们以一种特殊的教育和行动主义视角处理这些数据。 在此期间,作为首席开发人员倡导者,我开始公开谈论开发人员和数据科学家在更好地协作解决复杂数据问题方面的需求。
### 注意
......
......@@ -56,7 +56,7 @@
我首先构建了各种工具,这些工具通过自动将用户界面翻译成多种语言的过程来帮助软件国际化。 然后我研究了用于 Eclipse 的 LotusScript(Lotus Notes 的脚本语言)编辑器,该编辑器将直接与基础编译器交互。 该编辑器提供了一流的开发功能,例如提供建议的内容辅助,实时语法错误报告等。 然后,我花了几年时间为 Lotus Domino 服务器构建基于 Java EE 和 [OSGI](https://www.osgi.org) 的中间件组件。 在此期间,我领导一个团队,通过将 Lotus Domino 编程模型引入当时可用的最新技术来对其进行现代化。 我对软件开发,前端,中间件,后端数据层,工具等的各个方面都很满意; 我被某些人称为全栈开发人员。
直到我看到 IBM Watson Question Answering 系统的演示,它在 2011 年在 *Jeopardy* 游戏中击败了长期冠军 Brad Rutter 和 Ken Jennings。哇! 这是一个突破性的技术,它是一种能够回答自然语言问题的计算机程序。 我很感兴趣,在进行了一些研究之后,与参与该项目的一些研究人员会面,并了解了用于构建该系统的技术,例如 NLP,机器学习和通用数据科学,我意识到了这种技术的潜力 如果将技术应用于业务的其他部分
直到我看到 IBM Watson Question Answering 系统的演示,它在 2011 年在 *Jeopardy* 游戏中击败了长期冠军 Brad Rutter 和 Ken Jennings。哇! 这是一个突破性的技术,它是一种能够回答自然语言问题的计算机程序。 我很感兴趣,在进行了一些研究之后,与参与该项目的一些研究人员会面,并了解了用于构建该系统的技术,例如 NLP,机器学习和通用数据科学,我意识到了如果将技术应用于业务的其他部分,这种技术有多少潜力
几个月后,我有机会加入 IBM 新组建的 Watson 部门,领导一个工具团队,其任务是为 Watson 系统建立数据提取和准确性分析功能。 我们最重要的要求之一就是确保我们的客户易于使用这些工具,这就是为什么回想起来,将这一责任赋予开发人员团队是正确的做法。 从我的角度来看,从事这项工作既充满挑战,又富有。 我离开了一个熟悉的世界,在那里我擅长基于众所周知的模式设计架构并实现前端,中间件或后端软件组件,而这个世界主要专注于处理大量数据; 获取,清理,分析,可视化并构建模型。 我花了前六个月的时间从消防水龙头喝酒,阅读和学习有关 NLP,机器学习,信息检索和统计数据科学的知识,至少足以使用我正在构建的功能。
......@@ -209,7 +209,7 @@ IBM Watson 在 Jeopardy 中与 Ken Jennings 和 Brad Rutter 作战!
* **问题类别**:这会将问题映射到 *Jeopardy* 中使用的预定义类型之一,例如,类事实,多项选择题,难题等。
2. **主要搜索和假设生成(信息检索)**:此步骤在很大程度上依赖于问题分析步骤的结果,以组装适用于不同可用答案源的一组查询。 答案源的示例包括各种全文本搜索引擎,例如 [Indri](https://www.lemurproject.org/indri.php)[Apache Lucene/Solr](http://lucene.apache.org/solr),面向文档和面向标题的搜索(Wikipedia),三重存储等等。 然后,搜索结果用于生成候选答案。 例如,面向标题的结果将直接用作候选,而文档搜索将需要对段落进行更详细的分析(再次使用 NLP 技术)以提取可能的候选答案。
3. **假设和证据评分(NLP 和信息检索)**:对于每个候选答案,将进行另一轮搜索,以使用不同的评分技术来查找其他支持证据。 此步骤还用作预筛选测试,其中消除了一些候选答案,例如与步骤 1 中计算得出的 LAT 不匹配的答案。此步骤的输出是一组与 找到支持证据。 这些功能将用作一组机器学习模型的输入,以对候选答案进行评分。
3. **假设和证据评分(NLP 和信息检索)**:对于每个候选答案,将进行另一轮搜索,以使用不同的评分技术来查找其他支持证据。 此步骤还用作预筛选测试,其中消除了一些候选答案,例如与步骤 1 中计算得出的 LAT 不匹配的答案。此步骤的输出是一组机器学习特征,对应于找到的支持性证据。 这些功能将用作一组机器学习模型的输入,以对候选答案进行评分。
4. **最终合并和评分(机器学习)**:在此最后步骤中,系统识别出同一答案的变体并将其合并在一起。 它还使用步骤 3 中生成的功能,使用机器学习模型来选择按其各自分数排名的最佳答案。这些机器学习模型已经针对一组代表性问题进行了训练,这些问题具有针对已被收集的文档的正确答案。 预先吃了。
当我们继续讨论数据科学和 AI 如何改变计算机科学领域时,我认为了解最新技术水平非常重要。 IBM 沃森(Watson)是这些旗舰项目之一,为我们在 *Jeopardy* 游戏中击败肯·詹宁斯(Ken Jennings)和布拉德·鲁特(Brad Rutter)奠定了基础,为我们取得更大的进步铺平了道路。
......
......@@ -59,7 +59,7 @@ Python 显然在数据科学领域有着光明的前途,尤其是与诸如 Jup
GitHub 上的 Jupyter笔记本的搜索结果
这很棒,但是 Jupyter笔记本经常被认为仅仅是数据科学家工具。 我们将在接下来的章节中看到它们可以提供更多的功能,它们还可以帮助所有类型的团队解决数据问题。 例如,它们可以帮助业务分析师快速加载和可视化数据集,使开发人员可以直接在笔记本电脑中与数据科学家合作,以利用他们的分析和构建功能强大的仪表板,或者允许 DevOps 轻松地将这些仪表板部署到可扩展的企业中 就绪的微服务,可以作为独立的 Web 应用程序或可嵌入的组件运行。 基于将数据科学工具带给非数据科学家的愿景,创建了 PixieDust 开源项目。
这很棒,但是 Jupyter笔记本经常被认为仅仅是数据科学家工具。 我们将在接下来的章节中看到它们可以提供更多的功能,它们还可以帮助所有类型的团队解决数据问题。 例如,它们可以帮助业务分析师快速加载和可视化数据集,使开发人员可以直接在笔记本电脑中与数据科学家合作,以利用他们的分析和构建功能强大的仪表板,或者允许 DevOps 轻松地将这些仪表板部署到可扩展,在企业中就绪的微服务,可以作为独立的 Web 应用程序或可嵌入的组件运行。 基于将数据科学工具带给非数据科学家的愿景,创建了 PixieDust 开源项目。
# 介绍 PixieDust
......
......@@ -593,7 +593,7 @@ def compute_pdf(key):
[您可以在此处找到代码文件](https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter%203/sampleCode9.py)
在前面的代码中,我们使用 [Python 列表推导](https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions)快速基于`key`生成模拟数据 争论
在前面的代码中,我们使用 [Python 列表推导](https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions)快速基于`key`参数生成模拟数据
### 注意
......
......@@ -650,7 +650,7 @@ class SimpleDisplayMeta(DisplayHandlerMeta):
[您可以在此处找到代码文件](https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter%205/sampleCode15.py)
注意,前面的`SimpleDisplayMeta`类需要用`@PixiedustDisplay,`装饰,这是将该类添加到插件的内部 PixieDust 注册表中所必需的。 在`getMenuInfo()`方法中,我们首先检查实体类型是否为 Pandas `DataFrame`,如果不是,则返回一个空数组,表示此插件不支持当前实体,因此不会对 菜单。 如果类型正确,我们将返回一个数组,其中包含一个包含菜单信息的 JSON 对象。
注意,前面的`SimpleDisplayMeta`类需要用`@PixiedustDisplay,`装饰,这是将该类添加到插件的内部 PixieDust 注册表中所必需的。 在`getMenuInfo()`方法中,我们首先检查实体类型是否为 Pandas `DataFrame`,如果不是,则返回一个空数组,表示此插件不支持当前实体,因此不会对菜单有任何贡献。 如果类型正确,我们将返回一个数组,其中包含一个包含菜单信息的 JSON 对象。
工厂方法`newDisplayHandler()`作为参数传递了`options``entity``options`参数是键/值对的字典,包含用户做出的各种选择。 正如我们将在后面看到的那样,可视化可以定义反映其功能的任意键/值对,并且 PixieDust 框架将自动将它们保留在单元元数据中。
......
......@@ -611,7 +611,7 @@ MSFT 股票的每日价差
作为练习,让我们尝试创建一个图表,该图表显示在选定股票(MSFT)中进行 10,000 美元的假设投资会如何随着时间变化。 为此,我们必须计算一个`DataFrame`,其中包含该期间每一天的总投资价值,并考虑到我们在上一段中计算的每日价差,并使用 PixieDust `display()` API 可视化数据。
我们使用 Pandas 功能使用基于日期的谓词来选择行,以首先过滤`DataFrame`以仅选择我们感兴趣的时间段内的数据点。然后,通过将 10,000 美元的初始投资除以交易结束时间来计算购买的股票数量 在该期间的第一天定价并加上初始投资价值。 多亏了Pandas的高效序列计算和底层的 NumPy 基础库,所有这些计算都变得非常容易。 我们使用[`np.cumsum()`方法](https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.cumsum.html)计算所有每日收益加上 10,000 美元的初始投资价值。
我们使用 Pandas 功能使用基于日期的谓词来选择行,以首先过滤`DataFrame`以仅选择我们感兴趣的时间段内的数据点。然后,通过将 10,000 美元的初始投资,除以周期第一天的收盘价,并加上初始投资价值,来计算购买的股票数量。 多亏了Pandas的高效序列计算和底层的 NumPy 基础库,所有这些计算都变得非常容易。 我们使用[`np.cumsum()`方法](https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.cumsum.html)计算所有每日收益加上 10,000 美元的初始投资价值。
最后,我们使用`resample()`方法使图表更易于阅读,该方法将频率从每日转换为每月,并使用当月平均值计算新值。
......@@ -667,7 +667,7 @@ plt.show()
滞后为 100 的 MSFT 的 ACF
上图显示了`x`横坐标给出的多个先前数据点(滞后)处数据的自相关。 因此,在滞后`0`处,您始终具有`1.0`的自相关(您始终与自己完美相关),滞后`1`显示与先前数据点的自相关,滞后`2`显示与以下数据的自相关 落后两个步骤的数据点。 我们可以清楚地看到,随着滞后的增加,自相关减小。 在上一张图表中,我们仅使用了 100 个滞后,并且我们看到自相关仍然在 0.9 左右具有统计显着性,这告诉我们长时间分隔的数据是不相关的。 这表明数据具有趋势,当浏览整体价格图表时,这一趋势非常明显。
上图显示了`x`横坐标给出的多个先前数据点(滞后)处数据的自相关。 因此,在滞后`0`处,您始终具有`1.0`的自相关(您始终与自己完美相关),滞后`1`显示与先前数据点的自相关,滞后`2`显示与落后两个步骤的数据点的自相关。 我们可以清楚地看到,随着滞后的增加,自相关减小。 在上一张图表中,我们仅使用了 100 个滞后,并且我们看到自相关仍然在 0.9 左右具有统计显着性,这告诉我们长时间分隔的数据是不相关的。 这表明数据具有趋势,当浏览整体价格图表时,这一趋势非常明显。
为了确认这个假设,我们用更大的`lags`参数绘制 ACF 图表,例如`1000`(鉴于我们的系列有 10,000 个以上的数据点这一事实,这是不合理的),如以下屏幕快照所示:
......@@ -1298,7 +1298,7 @@ display(logmsft_diff)
应用对数差异后的 MSFT 股票系列
通过查看前面的图,我们可以合理地认为我们已经成功地使时间序列固定为 0。 我们还可以使用更严格的方法通过使用 [Dickey-Fuller 测试](https://en.wikipedia.org/wiki/Dickey%E2%80%93Fuller_test)的测试平稳性 测试`AR(1)`模型中存在单位根的原假设。
通过查看前面的图,我们可以合理地认为我们已经成功地使时间序列固定为 0。 我们还可以使用更严格的方法通过使用 [Dickey-Fuller 测试](https://en.wikipedia.org/wiki/Dickey%E2%80%93Fuller_test),它测试`AR(1)`模型中存在单位根的原假设。
### 注意
......@@ -1930,6 +1930,6 @@ def build_arima_model_screen(self, p_order, d_order, q_order):
# 摘要
在本章中,我们谈到了时间序列分析和预测的主题。 当然,我们只是从头开始,当然还有很多需要探索的地方。 通过非常积极的研究,它也是该行业的一个非常重要的领域,尤其是在金融领域。 例如,我们看到越来越多的数据科学家试图基于[递归神经网络](https://en.wikipedia.org/wiki/Recurrent_neural_network)算法建立时间序列预测模型,并取得了巨大的成功。 我们还演示了 Jupyter笔记本与 PixieDust 和`pandas``numpy``statsmodels,`之类的库生态系统相结合如何帮助加速分析的开发以及将其投入生产线可使用的应用程序 业务用户
在本章中,我们谈到了时间序列分析和预测的主题。 当然,我们只是从头开始,当然还有很多需要探索的地方。 通过非常积极的研究,它也是该行业的一个非常重要的领域,尤其是在金融领域。 例如,我们看到越来越多的数据科学家试图基于[递归神经网络](https://en.wikipedia.org/wiki/Recurrent_neural_network)算法建立时间序列预测模型,并取得了巨大的成功。 我们还演示了 Jupyter笔记本与 PixieDust 和`pandas``numpy``statsmodels,`之类的库生态系统相结合如何帮助加速分析的开发,以及将其操作化投入业务用户线可使用的应用程序
在下一章中,我们将研究另一个重要的数据科学用例:图形。 我们将构建一个与飞行旅行相关的示例应用程序,并讨论如何以及何时应用图算法来解决数据问题。
\ No newline at end of file
......@@ -259,7 +259,7 @@ import matplotlib.pyplot as plt
* `airlines.csv`:美国航空公司的列表,包括其 IATA 代码。
* `flights.csv`:2015 年发生的航班列表。此数据包括日期,始发和目的地机场,计划和实际时间以及延误。
`flights.csv`文件包含将近 600 万条记录,需要清除这些记录才能删除始发地或目的地机场中所有没有 IATA 三字母代码的航班。 我们还想删除`ELAPSED_TIME`列中值缺失的行。 如果不这样做,则会在将数据加载到图形结构中时引起问题。 另一个问题是数据集包含一些时间列,例如`DEPARTURE_TIME``ARRIVAL_TIME`,并且为了节省空间,这些列仅以`HHMM`格式存储时间,而实际日期存储在`YEAR``MONTH``DAY`列中。 我们将在本章中进行的一项分析将需要`DEPARTURE_TIME`的完整日期时间,并且由于进行此转换是一项耗时的操作,因此我们现在进行并将其存储在`flights.csv`的处理版本中 我们将存储在 GitHub 上。 此操作使用通过`to_datetime()`函数和`axis=1`调用的Pandas `apply()`方法(指示对每行应用了转换)。
`flights.csv`文件包含将近 600 万条记录,需要清除这些记录才能删除始发地或目的地机场中所有没有 IATA 三字母代码的航班。 我们还想删除`ELAPSED_TIME`列中值缺失的行。 如果不这样做,则会在将数据加载到图形结构中时引起问题。 另一个问题是数据集包含一些时间列,例如`DEPARTURE_TIME``ARRIVAL_TIME`,并且为了节省空间,这些列仅以`HHMM`格式存储时间,而实际日期存储在`YEAR``MONTH``DAY`列中。 我们将在本章中进行的一项分析将需要`DEPARTURE_TIME`的完整日期时间,并且由于进行此转换是一项耗时的操作,因此我们现在进行并将其存储在我们将存储在 GitHub 上的`flights.csv`的处理版本中。 此操作使用通过`to_datetime()`函数和`axis=1`调用的Pandas `apply()`方法(指示对每行应用了转换)。
另一个问题是我们希望将文件存储在 GitHub 上,但是最大文件大小限制为 100M。因此,为使文件小于 100 M,我们还删除了一些不需要的列。 我们尝试构建的分析文件,然后将其压缩,然后再将其存储在 GitHub 上。 当然,另一个好处是`DataFrame`可以使用较小的文件更快地加载。
......@@ -1063,7 +1063,7 @@ def get_airport_location(self, airport_code):
# 第 3 部分–向`USFlightsAnalysis` PixieApp 添加数据浏览
在本节中,我们想扩展`USFlightsAnalysis` PixieApp 的航线分析屏幕,以添加两个图表,以显示从所选始发机场起飞的每家航空公司的历史到达延迟:对于所有从始发机场起飞的航班,其中一个 所有航班之一,与机场无关。 这将为我们提供一种在视觉上比较特定机场的延误是好于还是差于其他机场的方法。
在本节中,我们想扩展`USFlightsAnalysis` PixieApp 的航线分析屏幕,以添加两个图表,以显示从所选始发机场起飞的每家航空公司的历史到达延迟:一个表示所有从始发机场起飞的航班,另一个表示与机场无关的所有航班。 这将为我们提供一种在视觉上比较特定机场的延误是好于还是差于其他机场的方法。
我们首先实现一种选择给定航空公司的航班的方法。 我们还添加了一个可选的机场参数,可用于控制我们是包含所有航班还是仅包含源自该机场的航班。 返回的`DataFrame`应该具有两列:`DATE``ARRIVAL_DELAY`
......
......@@ -22,7 +22,7 @@ Drew 的数据科学 Conway Venn 图现在包括开发人员
2016 年,IBM 董事长兼首席执行官 Ginny Rometty 在[致唐纳德·特朗普总统的一封信](https://www.ibm.com/blogs/policy/ibm-ceo-ginni-romettys-letter-u-s-president-elect)中,讨论了通过创建她称为"新领"的新型工作来更好地为 AI 革命做准备的需要,如以下摘录所示:
> "在当今的 IBM 工作并不总是需要大学学位;在我们美国的一些中心,多达三分之一的员工不到四年制学位。最重要的是相关技能,有时会获得 此外,我们正在创造和雇用人员来填补"新领"职位-在网络安全,数据科学,人工智能和认知业务等领域扮演全新角色。"
> "在当今的 IBM 工作并不总是需要大学学位;在我们美国的一些中心,多达三分之一的员工不到四年制学位。最重要的是相关技能,有时通过假期训练获得。 此外,我们正在创造和雇用人员来填补"新领"职位-在网络安全,数据科学,人工智能和认知业务等领域扮演全新角色。"
如果我们成功地实现了数据科学的民主化,那么这些"新领子"工作就只能创造足够的数量,因为数据科学是 AI 的命脉,每个人都需要以某种能力参与进来; 开发人员,业务线用户,数据工程师等。 不难想象,对这些新型工作的需求将如此之大,以至于传统的学术途径将无法满足需求。 相反,该行业将有责任通过制定旨在重新培训所有可能面临裁员风险的现有工人的新计划来填补这一空白。 将会出现[类似于 Apple 的`Everyone Can Code`程序的新程序](https://www.apple.com/everyone-can-code); 也许像*任何人都可以做数据科学*。 我还认为 **MOOC****大规模开放在线课程**的缩写)将发挥更大的作用,今天,由于主要 MOOC 参与者之间建立了许多合作关系, 例如 Coursera 和 edX,以及像 IBM 这样的公司(请参阅[这个页面](https://www.coursera.org/ibm))。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册