提交 fd641582 编写于 作者: W wizardforcel

2021-03-09 21:19:09

上级 677b545c
......@@ -11,7 +11,7 @@
但是,随着人工智能和数据科学革命的进行,对我来说很明显像我这样的开发人员需要参与其中,因此在 7 年前的 2011 年,我抓住了机会成为 IBM Watson 的首席架构师 核心平台用户界面和工具。 当然,我不假装自己不是机器学习或 NLP 方面的专家。 通过实践学习不能代替获得正式的学术背景。
但是,我想在本书中展示的很大一部分是,使用正确的工具和方法,具备正确的数学基础的人(我只是在谈论高中水平的微积分概念)可以迅速成为 该领域的优秀从业者。 成功的关键因素是尽可能简化构建数据管道的不同步骤; 从获取,加载和清理数据到可视化和探索数据,一直到构建和部署机器学习模型。
但是,我想在本书中展示的很大一部分是,使用正确的工具和方法,具备正确的数学基础的人(我只是在谈论高中水平的微积分概念)可以迅速成为该领域的优秀从业者。 成功的关键因素是尽可能简化构建数据管道的不同步骤; 从获取,加载和清理数据到可视化和探索数据,一直到构建和部署机器学习模型。
为了进一步推动使数据更容易被数据科学家以外的社区访问的想法,三年前,我在 IBM Watson Data Platform 团队中担任领导职务,其使命是扩大开发人员社区 这些数据特别代表他们关注教育和行动主义。 在此期间,作为首席开发人员倡导者,我开始公开谈论开发人员和数据科学家在更好地协作解决复杂数据问题方面的需求。
......@@ -28,7 +28,7 @@
* 我曾在博客,文章和教程中广泛撰写过有关我作为 Jupyter笔记本的数据科学从业者的经验的文章。 在各种会议上,我作为演讲者和研讨会主持人也有丰富的经验。 一个很好的例子是我在 2017 年在 ODSC 伦敦发表的主题演讲,题为[《数据科学的未来:更少的权力游戏,更多的联盟》](https://odsc.com/training/portfolio/future-data-science-less-game-thrones-alliances)。 但是,我以前从未写过书,也不知道会有多大的承诺,尽管以前曾写过书的朋友多次警告过我。
* 我希望本书具有包容性,并平等地面向开发人员,数据科学家和业务用户,但我一直在努力寻找实现该目标的正确内容和基调。
最后,开始这项冒险的决定很容易。 在 PixieDust 项目上工作了 2 年后,我感到我们已经通过非常有趣的创新取得了令人瞩目的进展,这些创新引起了开源社区的极大兴趣,并且写书将很好地补充我们在帮助开发人员参与数据方面的倡导工作 科学
最后,开始这项冒险的决定很容易。 在 PixieDust 项目上工作了 2 年后,我感到我们已经通过非常有趣的创新取得了令人瞩目的进展,这些创新引起了开源社区的极大兴趣,并且写书将很好地补充我们在帮助开发人员参与数据科学方面的倡导工作
附带说明一下,对于正在考虑写书且有类似问题的读者,我只能建议第一个带有大写“是的,继续努力”的读者。 可以肯定的是,这是一项重大承诺,需要付出大量的牺牲,但前提是您要有一个扎实的故事来讲故事,这确实值得您付出努力。
......@@ -44,9 +44,9 @@
这本书包含两个大致相等长度的逻辑部分。 在上半年中,我列出了本书的主题,即弥合数据科学与工程学之间的鸿沟的必要性,其中包括有关我提议的 Jupyter + PixieDust 解决方案的深入详细信息。 下半年致力于将我们在上半年中学到的知识应用于四个行业案例。
第 1 章,“开发人员对数据科学的观点”,我尝试通过我自己的经验来定义数据科学,并建立一个数据管道来在 Twitter 上执行情感分析 帖子。 我认为这是一项团队运动,并且在大多数情况下,数据科学团队和工程团队之间存在孤岛,这会导致不必要的摩擦,效率低下,最终导致无法充分发挥其潜力。 我还认为,数据科学将继续存在,并最终将成为当今所谓的计算机科学不可或缺的一部分(我想有一天会有新术语出现,例如“计算机数据科学”更好地捕捉了这种双重性)。
第 1 章,“开发人员对数据科学的观点”,我尝试通过我自己的经验来定义数据科学,并建立一个数据管道来在 Twitter 上执行帖子情感分析。 我认为这是一项团队运动,并且在大多数情况下,数据科学团队和工程团队之间存在孤岛,这会导致不必要的摩擦,效率低下,最终导致无法充分发挥其潜力。 我还认为,数据科学将继续存在,并最终将成为当今所谓的计算机科学不可或缺的一部分(我想有一天会有新术语出现,例如“计算机数据科学”更好地捕捉了这种双重性)。
第 2 章,“借助 Jupyter笔记本和 PixieDust”,我开始深入研究流行的数据科学工具,例如 Python 及其专用于数据科学的开源库生态系统,以及 当然 Jupyter 笔记本。 我解释了为什么我认为 Jupyter 笔记本电脑将在未来几年成为大赢家。 我还从简单的`display()`方法开始介绍 PixieDust 开源库功能,该方法使用户可以通过构建引人注目的图表直观地浏览交互式用户界面中的数据。 使用此 API,用户可以从多个渲染引擎(例如 Matplotlib,Bokeh,Seaborn 和 Mapbox)中进行选择。 `display()`功能是 PixieDust MVP(最低可行产品)中的唯一功能,但是随着时间的流逝,当我与许多数据科学从业人员进行互动时,我为快速成为 PixieDust 工具箱添加了新功能:
第 2 章,“借助 Jupyter笔记本和 PixieDust”,我开始深入研究流行的数据科学工具,例如 Python 及其专用于数据科学的开源库生态系统,以及 Jupyter 笔记本。 我解释了为什么我认为 Jupyter 笔记本电脑将在未来几年成为大赢家。 我还从简单的`display()`方法开始介绍 PixieDust 开源库功能,该方法使用户可以通过构建引人注目的图表直观地浏览交互式用户界面中的数据。 使用此 API,用户可以从多个渲染引擎(例如 Matplotlib,Bokeh,Seaborn 和 Mapbox)中进行选择。 `display()`功能是 PixieDust MVP(最低可行产品)中的唯一功能,但是随着时间的流逝,当我与许多数据科学从业人员进行互动时,我为快速成为 PixieDust 工具箱添加了新功能:
* `sampleData()`:一个简单的 API,可轻松将数据加载到Pandas和 Apache Spark`DataFrame`
* `wrangle_data()`:用于清理和按摩数据集的简单 API。 此功能包括使用正则表达式从非结构化文本中提取内容的功能,可将列分解为新的列。 `wrangle_data()` API 也可以基于预定义的模式提出建议。
......@@ -90,7 +90,7 @@ PixieGateway 是一项突破性的创新,具有可以显着加快分析操作
* 第 3 部分:我展示了如何直接在笔记本中集成 TensorBoard 图形可视化组件,并提供了调试神经网络模型的功能。
* 第 4 部分:我展示了如何使用自定义训练数据重新训练模型,以及如何更新 PixieApp 来显示两个模型的结果。
我决定使用 TensorFlow 进行深度学习图像识别,以开始一系列示例应用程序,因为这是一个日益流行的重要用例,并演示了如何构建模型并将其部署在同一笔记本中的应用程序中,这是缩小数据科学与工程之间差距的主题。
我决定使用 TensorFlow 进行深度学习图像识别,以开始一系列示例应用程序,因为这是一个日益流行的重要用例,并演示了如何构建模型并将其部署在同一笔记本中的应用程序中,这是缩小数据科学与工程之间差距的主题。
第 7 章,“大数据 Twitter 情感分析”,我谈到在 Twitter 规模上进行自然语言处理。 在本章中,我将展示如何使用 IBM Watson Natural Language 了解基于云的服务对推文进行情感分析。 这非常重要,因为它提醒读者,重用托管托管服务而不是内部构建功能有时可能是一个有吸引力的选择。
......@@ -110,7 +110,7 @@ PixieGateway 是一项突破性的创新,具有可以显着加快分析操作
时间序列分析是数据科学的一个重要领域,我认为它被低估了。 在撰写本章时,我个人学到了很多东西。 我当然希望读者也能喜欢它,并且阅读它会激发人们对这个伟大话题的更多了解。 如果是这样,我还希望您能说服您在接下来的时间序列分析学习中尝试 Jupyter 和 PixieDust。
第 9 章,“使用图的美国国内航班数据分析”,我通过图的研究完成了这一系列行业用例。 我选择了一个用于分析航班延误的示例应用程序,因为该数据很容易获得,并且非常适合使用图形算法(嗯,为了全面披露,我可能还选择了它,[因为我已经编写了一个类似的应用程序来预测航班延误 基于我使用 Apache Spark MLlib 的天气数据](https://developer.ibm.com/clouddataservices/2016/08/04/predict-flight-delays-with-apache-spark-mllib-flightstats-and-weather-data))。
第 9 章,“使用图的美国国内航班数据分析”,我通过图的研究完成了这一系列行业用例。 我选择了一个用于分析航班延误的示例应用程序,因为该数据很容易获得,并且非常适合使用图形算法(嗯,为了全面披露,我可能还选择了它,[因为我已经编写了一个类似的应用程序来预测航班延误基于我使用 Apache Spark MLlib 的天气数据](https://developer.ibm.com/clouddataservices/2016/08/04/predict-flight-delays-with-apache-spark-mllib-flightstats-and-weather-data))。
我首先介绍图和相关图算法,包括几种最流行的图算法,例如广度优先搜索和深度优先搜索。 然后,我继续介绍用于构建示例应用程序的`networkx` Python 库。
......@@ -121,7 +121,7 @@ PixieGateway 是一项突破性的创新,具有可以显着加快分析操作
* 第 3 部分:将数据浏览添加到 PixieApp,其中包括飞往选定起点机场的每家航空公司的各种统计信息
* 第 4 部分:使用在第 8 章,“金融时间序列分析和预测”中学习的技术,建立用于预测航班延误的 ARIMA 模型
图论也是数据科学的另一个重要且不断发展的领域,本章很好地介绍了该系列文章,我希望该系列文章提供一组多样化且具有代表性的行业用例。 对于对使用大数据图形算法特别感兴趣的读者,我建议您查看 [Apache Spark GraphX](https://spark.apache.org/graphx),它使用非常简单的方法来实现许多图形算法 灵活的 API
图论也是数据科学的另一个重要且不断发展的领域,本章很好地介绍了该系列文章,我希望该系列文章提供一组多样化且具有代表性的行业用例。 对于对使用大数据图形算法特别感兴趣的读者,我建议您查看 [Apache Spark GraphX](https://spark.apache.org/graphx),它使用非常简单灵活的 API 来实现许多图形算法
第 10 章,“最终见解”结束时,我给出了简要摘要并解释了我对 Drew's Conway 维恩图的理解。 然后,我将讨论 AI 和数据科学的未来,以及公司如何为 AI 和数据科学革命做好准备。 另外,我还列出了一些很好的参考资料供进一步学习。
......
此差异已折叠。
......@@ -72,7 +72,7 @@ GitHub 上的 Jupyter笔记本的搜索结果
[PixieDust](https://github.com/ibm-watson-data-lab/pixiedust) 是一个开源项目,主要由三个组件组成,旨在解决本章开头所述的三个目标。
* 一个适用于 Jupyter笔记本的辅助 Python 库,它提供了简单的 API,可将各种来源的数据加载到流行的框架(如Pandas和 Apache Spark `DataFrame`)中,然后以交互方式可视化和浏览数据集。
* 一个基于 Python 的简单编程模型,通过创建功能强大的仪表板 PixieApps,开发人员可以将分析结果直接“产品化”到笔记本中。 正如我们将在下一章中看到的那样,PixieApps 与传统的 **BI****商业智能**的缩写)仪表板有所不同,因为开发人员可以直接使用 HTML 和 CSS 来创建 任意复杂的布局。 此外,他们可以将对笔记本中创建的任何变量,类或函数的访问权限嵌入其业务逻辑中。
* 一个基于 Python 的简单编程模型,通过创建功能强大的仪表板 PixieApps,开发人员可以将分析结果直接“产品化”到笔记本中。 正如我们将在下一章中看到的那样,PixieApps 与传统的 **BI****商业智能**的缩写)仪表板有所不同,因为开发人员可以直接使用 HTML 和 CSS 来创建任意复杂的布局。 此外,他们可以将对笔记本中创建的任何变量,类或函数的访问权限嵌入其业务逻辑中。
* 一个安全的微服务 Web 服务器,称为 PixieGateway,可以将 PixieApps 作为独立的 Web 应用程序运行,也可以作为可以嵌入到任何网站中的组件运行。 使用图形向导可以从 Jupyter笔记本轻松部署 PixieApps,而无需更改任何代码。 此外,PixieGateway 支持将由 PixieDust 创建的任何图表共享为可嵌入的网页,从而使数据科学家可以轻松地在笔记本电脑外部传达结果。
请务必注意,PixieDust `display()` API 主要支持两种流行的数据处理框架:
......@@ -83,7 +83,7 @@ GitHub 上的 Jupyter笔记本的搜索结果
当前,PixieDust `display()`仅支持 Pandas `DataFrame`。
* [**Apache Spark `DataFrame`**](https://spark.apache.org/docs/latest/sql-programming-guide.html):这是高级数据结构 用于操纵整个 Spark 集群中的分布式数据集。 Spark`DataFrame`构建在较低级 **RDD****弹性分布式数据集**的简称)之上,并添加了支持 SQL 查询的功能。
* [**Apache Spark `DataFrame`**](https://spark.apache.org/docs/latest/sql-programming-guide.html):这是高级数据结构用于操纵整个 Spark 集群中的分布式数据集。 Spark`DataFrame`构建在较低级 **RDD****弹性分布式数据集**的简称)之上,并添加了支持 SQL 查询的功能。
PixieDust `display()`支持的另一种较不常用的格式是 JSON 对象数组。 在这种情况下,PixieDust 将使用这些值来构建行,并将键用作列,例如,如下所示:
......@@ -327,7 +327,7 @@ Successfully created pySpark DataFrame for 'https://files.datapress.com/london/d
display(london_info)
```
我们在图表菜单中选择**饼图**,然后在**选项**对话框中,将`Area name`列拖放到**键**区域和`Crime rates per thousand population 2014/15`中 在**值**区域中,如以下屏幕截图所示:
我们在图表菜单中选择**饼图**,然后在**选项**对话框中,将`Area name`列拖放到**键**区域和`Crime rates per thousand population 2014/15`**值**区域中,如以下屏幕截图所示:
![SampleData – a simple API for loading data](img/00020.jpeg)
......@@ -497,7 +497,7 @@ display(cars)
PixieDust 图表菜单
首次调用图表菜单时,将显示一个选项对话框,以配置一组基本配置选项,例如`X``Y`轴所使用的类型 聚合等等 为了节省您的时间,该对话框将预先填充 PixieDust 从`DataFrame`自动检查的数据模式。
首次调用图表菜单时,将显示一个选项对话框,以配置一组基本配置选项,例如`X``Y`轴所使用的类型,聚合等等。 为了节省您的时间,该对话框将预先填充 PixieDust 从`DataFrame`自动检查的数据模式。
在以下示例中,我们将创建一个条形图,显示按马力计算的平均里程消耗:
......@@ -579,7 +579,7 @@ Mapbox 图表的“选项”对话框
交互式 Mapbox 可视化
每种图表类型都有其自己的上下文选项集,这些选项不言自明,在这一点上,我鼓励您使用它们中的每一个。 如果您发现问题或有增强想法,则可以始终在 GitHub 上的[这个页面](https://github.com/ibm-watson-data-lab/pixiedust/issues)创建一个新问题,或者更好地提交 一个带有您的代码更改的请求请求[这里有更多有关该操作的信息](https://help.github.com/articles/creating-a-pull-request))。
每种图表类型都有其自己的上下文选项集,这些选项不言自明,在这一点上,我鼓励您使用它们中的每一个。 如果您发现问题或有增强想法,则可以始终在 GitHub 上的[这个页面](https://github.com/ibm-watson-data-lab/pixiedust/issues)创建一个新问题,或者提交一个带有您的代码更改的请求更好[这里有更多有关该操作的信息](https://help.github.com/articles/creating-a-pull-request))。
为避免每次单元格运行时都重新配置图表,PixieDust 将图表选项作为 JSON 对象存储在单元格元数据中,最终将其保存在笔记本中。 您可以通过选择**视图 | 单元格工具栏 | 编辑元数据**菜单手动检查此数据,如以下屏幕截图所示:
......@@ -754,7 +754,7 @@ PixieApps 非常适合快速构建单页应用程序和仪表板。 但是,您
### 注意
**注意**:我们将在第 4 章“使用 PixieGateway 服务器将 PixieApps 部署到 Web 上”中,详细介绍 PixieGateway,包括如何在本地安装新实例 并在云上
**注意**:我们将在第 4 章“使用 PixieGateway 服务器将 PixieApps 部署到 Web 上”中,详细介绍 PixieGateway,包括如何在本地和在云上安装新实例
为了演示此功能,我们使用之前创建的`DataFrame`汽车:
......
......@@ -22,7 +22,7 @@
术语 **PixieApp** 代表 **Pixie 应用**,并且旨在强调其与 PixieDust 功能(尤其是`display()` API)的紧密集成。 其主要目标是使开发人员易于构建可以调用 Jupyter笔记本中实现的数据分析的用户界面。
PixieApp 遵循[**单页应用程序**(**SPA**)设计模式](https://en.wikipedia.org/wiki/Single-page_application)其中 向用户显示并带有欢迎屏幕,该屏幕会动态更新以响应用户交互。 更新可以是部分刷新,例如在用户单击控件后更新图形,也可以是完全刷新,例如在多步过程中更新新屏幕。 在每种情况下,更新都是通过使用特定机制触发的路由在服务器端进行控制的,我们将在后面讨论。 触发后,路由将执行代码以处理请求,然后发出 HTML 片段,该片段将在客户端应用于正确的目标 [DOM 元素](https://www.w3schools.com/js/js_htmldom.asp)
PixieApp 遵循[**单页应用程序**(**SPA**)设计模式](https://en.wikipedia.org/wiki/Single-page_application)向用户显示并带有欢迎屏幕,该屏幕会动态更新以响应用户交互。 更新可以是部分刷新,例如在用户单击控件后更新图形,也可以是完全刷新,例如在多步过程中更新新屏幕。 在每种情况下,更新都是通过使用特定机制触发的路由在服务器端进行控制的,我们将在后面讨论。 触发后,路由将执行代码以处理请求,然后发出 HTML 片段,该片段将在客户端应用于正确的目标 [DOM 元素](https://www.w3schools.com/js/js_htmldom.asp)
以下序列图显示了运行 PixieApp 时客户端和服务器端如何交互:
......@@ -147,7 +147,7 @@ app.run()
[您可以在此处找到代码文件](https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter%203/sampleCode2.py)。
* **方法**的局部变量:只要您将`@templateArgs`装饰器添加到方法中,PixieApp 就会自动将方法中定义的所有局部变量放在 Jinja2 模板字符串的范围内 在示例中
* **方法**的局部变量:只要您将`@templateArgs`装饰器添加到方法中,PixieApp 就会自动将方法中定义的所有局部变量放在 Jinja2 模板字符串的范围内,如示例所示
```py
@route()
......@@ -280,11 +280,11 @@ GitHub Tracking 应用程序的欢迎屏幕
下一步是创建一个采用用户值并返回结果的新路由。 此路由将由**提交查询**按钮调用。
为简单起见,以下代码未使用 Python 库与 GitHub 进行接口,例如 [PyGithub](http://pygithub.readthedocs.io/en/latest),相反,我们将 直接调用 GitHub 网站上记录的 REST API:
为简单起见,以下代码未使用 Python 库与 GitHub 进行接口,例如 [PyGithub](http://pygithub.readthedocs.io/en/latest),相反,我们将直接调用 GitHub 网站上记录的 REST API:
### 注意
**注意**:当您看到以下表示法`[[GitHubTracking]]`时,这意味着该代码应添加到`GitHubTracking` PixieApp 类中,并且为避免一遍又一遍地重复周围的代码,它具有 被省略。 如有疑问,您可以始终参考本节末尾指定的完整笔记本。
**注意**:当您看到以下表示法`[[GitHubTracking]]`时,这意味着该代码应添加到`GitHubTracking` PixieApp 类中,并且为避免一遍又一遍地重复周围的代码,它被省略了。 如有疑问,您可以始终参考本节末尾指定的完整笔记本。
```py
import requests
......@@ -395,7 +395,7 @@ def do_search(self, query):
前面的代码示例显示了 PixieApps 的一个非常重要的属性,即您可以通过简单地将数据存储到类变量中来维护应用程序整个生命周期中的状态。 在这种情况下,我们使用`self.first_url``self.prev_url``self.next_url``self.last_url`。 这些变量对分页小部件中的每个按钮使用`pd_options`属性,并在每次调用`do_retrieve_page`路由时更新。 `do_search`返回的片段现在返回带有主体占位符的表,该表由`body{{prefix}},`标识,该表成为每个按钮的`pd_target`。 我们还使用`invoke_route`方法来确保在首次显示表格时获得第一页。
我们之前已经看到路由返回的 HTML 片段用于替换整个页面,但是在前面的代码中,我们使用`pd_target="body{{prefix}}"`属性表示 HTML 片段将被注入到表的 BODY 元素中 具有`body{{prefix}}` ID。 如果需要,您还可以通过创建一个或多个`<target>`元素作为可点击源元素的子元素来为用户操作定义多个目标。 每个`<target>`元素本身都可以使用所有 PixieApp 自定义属性来配置内核请求。
我们之前已经看到路由返回的 HTML 片段用于替换整个页面,但是在前面的代码中,我们使用`pd_target="body{{prefix}}"`属性表示 HTML 片段将被注入到表的 BODY 元素中,它具有`body{{prefix}}` ID。 如果需要,您还可以通过创建一个或多个`<target>`元素作为可点击源元素的子元素来为用户操作定义多个目标。 每个`<target>`元素本身都可以使用所有 PixieApp 自定义属性来配置内核请求。
这是一个例子:
......
......@@ -16,7 +16,7 @@
# Kubernetes 概述
[Kubernetes](https://kubernetes.io) 是一个可扩展开源系统,用于自动化和协调容器化应用程序的部署和管理,在云服务中非常流行 提供者。 尽管支持其他类型的容器,但它最常用于 [Docker 容器](https://www.docker.com)。 在开始之前,您需要访问已配置为作为 Kubernetes 群集的一组计算机; [您可以在此处找到有关如何创建此类集群的教程](https://kubernetes.io/docs/tutorials/kubernetes-basics)
[Kubernetes](https://kubernetes.io) 是一个可扩展开源系统,用于自动化和协调容器化应用程序的部署和管理,在云服务供应商中非常流行。 尽管支持其他类型的容器,但它最常用于 [Docker 容器](https://www.docker.com)。 在开始之前,您需要访问已配置为作为 Kubernetes 群集的一组计算机; [您可以在此处找到有关如何创建此类集群的教程](https://kubernetes.io/docs/tutorials/kubernetes-basics)
如果您没有计算机资源,那么一个好的解决方案是使用提供 Kubernetes 服务的公共云供应商,例如 [Amazon AWS EKS](https://aws.amazon.com/eks)[Microsoft Azure](https://azure.microsoft.com/en-us/services/container-service/kubernetes)[IBM Cloud Kubernetes Service](https://www.ibm.com/cloud/container-service)
......@@ -56,7 +56,7 @@ kubectl [command] [TYPE] [NAME] [flags]
**本地安装**:使用此方法进行测试和开发。
对于这一部分,我强烈建议您使用 [Anaconda 虚拟环境](https://conda.io/docs/user-guide/tasks/manage-environments.html),因为它们可以很好地隔离环境,从而可以 您可以使用不同版本和配置的 Python 包进行实验。
对于这一部分,我强烈建议您使用 [Anaconda 虚拟环境](https://conda.io/docs/user-guide/tasks/manage-environments.html),因为它们可以很好地隔离环境,从而您可以使用不同版本和配置的 Python 包进行实验。
如果要管理多个环境,则可以使用以下命令获取所有可用环境的列表:
......@@ -390,7 +390,7 @@ PixieGateway 架构图
例如,以下代码必须位于其自己的单元格中才能成为运行代码:
正如我们在第 3 章,“PixieApp”下看到的那样,可以在同一笔记本中声明多个 PixieApp,这些笔记本将用作子 PixieApp 或 主要的 PixieApp。 在这种情况下,我们需要确保它们是在自己的单元格中定义的,并且您不要尝试实例化它们并调用其`run()`方法。
正如我们在第 3 章,“PixieApp”下看到的那样,可以在同一笔记本中声明多个 PixieApp,这些笔记本将用作子 PixieApp 或主要的 PixieApp。 在这种情况下,我们需要确保它们是在自己的单元格中定义的,并且您不要尝试实例化它们并调用其`run()`方法。
规则是,只有一个主要的 PixieApp 类可以为其调用`run()`方法,并且包含该代码的单元格被 PixieGateway 视为运行代码。
......@@ -450,7 +450,7 @@ app.run()
* **选项**
* **PixieGateway 服务器**:例如,`http://localhost:8899`
* **页面标题**:简短说明 在浏览器中显示时将用作页面标题的页面
* **页面标题**:在浏览器中显示时,将用作页面标题的页面简短说明
* **安全**:通过网络访问时配置 PixieApp 的安全性:
......@@ -459,7 +459,7 @@ app.run()
### 注意
**注意**:目前,PixieGateway 不提供任何身份验证/授权机制。 第三方授权,例如 [OAuth 2.0](https://oauth.net/2),[JWT](https://jwt.io) 等将被添加到 未来
**注意**:目前,PixieGateway 不提供任何身份验证/授权机制。 第三方授权,例如 [OAuth 2.0](https://oauth.net/2),[JWT](https://jwt.io) 等未来将被添加
* **导入**:显示由 PixieDust 发布者自动检测到的 Python 软件包依赖项列表。 这些导入的软件包(如果尚不存在)将自动安装在运行应用程序的内核上。 当检测到特定的依赖项时,PixieDust 会查看当前系统以获取版本和安装位置,例如 PyPi 或自定义安装 URL(例如 GitHub 存储库)。
* **内核规范**:您可以在此处为 PixieApp 选择内核规范。 默认情况下,PixieDust 选择 PixieGateway 服务器上可用的默认内核,但是,例如,如果您的笔记本依赖于 Apache Spark,则您应该能够选择支持它的内核。 使用管理控制台部署 PixieApp 之后,也可以更改此选项。
......@@ -721,6 +721,6 @@ PixieDust Chart 选项
# 摘要
阅读完本章后,您应该能够安装,配置和管理 PixieGateway 微服务服务器,将图表作为网页发布,以及将 PixieApp 从笔记本部署到 Web 应用程序。 无论您是在 Jupyter笔记本中从事分析工作的数据科学家还是开发人员针对企业用户编写和部署应用程序的开发人员,我们在本章中均已展示 PixieDust 如何帮助您更有效地完成任务并减少 操作分析所需的时间。
阅读完本章后,您应该能够安装,配置和管理 PixieGateway 微服务服务器,将图表作为网页发布,以及将 PixieApp 从笔记本部署到 Web 应用程序。 无论您是在 Jupyter笔记本中从事分析工作的数据科学家还是开发人员针对企业用户编写和部署应用程序的开发人员,我们在本章中均已展示 PixieDust 如何帮助您更有效地完成任务并减少操作分析所需的时间。
在下一章中,我们将研究与 PixieDust 和 PixieApp 编程模型相关的高级主题和最佳实践,这在其余各章中讨论行业用例和示例数据管道时将非常有用。
\ No newline at end of file
......@@ -96,7 +96,7 @@ app.run()
简单的 PixieApp,可从文本生成词云
任何直接绘制到单元格输出的函数都可以与`@captureOutput`装饰器一起使用。 例如,您可以对 HTML 或 JavaScript 类使用 Matplotlib `show()`方法或 IPython `display()`方法。 您甚至可以使用`display_markdown()`方法通过 [Markdown 标记语言](https://en.wikipedia.org/wiki/Markdown)输出富文本,如下所示 代码
任何直接绘制到单元格输出的函数都可以与`@captureOutput`装饰器一起使用。 例如,您可以对 HTML 或 JavaScript 类使用 Matplotlib `show()`方法或 IPython `display()`方法。 您甚至可以使用`display_markdown()`方法通过 [Markdown 标记语言](https://en.wikipedia.org/wiki/Markdown)输出富文本,如以下代码所示
```py
from pixiedust.display.app import *
......@@ -285,7 +285,7 @@ app.run()
随着**物联网**设备(**物联网**)的兴起,能够分析和可视化数据实时流变得越来越重要。 例如,您可能在机器或起搏器等便携式医疗设备中安装了诸如温度计之类的传感器,并将数据连续流传输到诸如 Kafka 的流服务中。 通过为 PixieApp 和`display()`框架提供简单的集成 API,PixieDust 使得在 Jupyter笔记本内部处理实时数据更加容易。
在可视化级别,PixieDust 使用 [Bokeh](https://bokeh.pydata.org) 支持进行有效的数据源更新,以将流数据绘制到实时图表中(请注意,目前仅折线图和散点图 支持绘图,但将来会添加更多)。 `display()`框架还支持使用 Mapbox 渲染引擎对流数据进行地理空间可视化。
在可视化级别,PixieDust 使用 [Bokeh](https://bokeh.pydata.org) 支持进行有效的数据源更新,以将流数据绘制到实时图表中(请注意,目前仅支持折线图和散点图,但将来会添加更多)。 `display()`框架还支持使用 Mapbox 渲染引擎对流数据进行地理空间可视化。
要激活流可视化,您需要使用从`StreamingDataAdapter,`继承的类,该类是 PixieDust API 的一部分,是一个抽象类。 此类充当流数据源与可视化框架之间的通用桥梁。
......@@ -435,7 +435,7 @@ def newDisplayHandler(self, options, entity):
在前面的代码中,我们使用它在[`pixiedust.display.streaming.bokeh`包](https://github.com/pixiedust/pixiedust/blob/master/pixiedust/display/streaming/bokeh/lineChartStreamingDisplay.py)中创建由 PixieDust 提供的`LineChartStreamingDisplay`实例,并传递`avgChannelData`实体。
如果要查看该应用程序的运行情况,则需要在 [IBM Cloud](https://console.bluemix.net/catalog/services/message-hub) 上创建一个消息中心服务实例,并使用 它的凭据,请使用以下代码在笔记本中调用此 PixieApp:
如果要查看该应用程序的运行情况,则需要在 [IBM Cloud](https://console.bluemix.net/catalog/services/message-hub) 上创建一个消息中心服务实例,并使用它的凭据,请使用以下代码在笔记本中调用此 PixieApp:
```py
from pixiedust.apps.messageHub import *
......@@ -459,7 +459,7 @@ MessageHubStreamingApp().run(
## 通过 PixieApp 事件添加仪表板明细
PixieApp 框架支持使用浏览器中可用的发布-订阅模式在不同组件之间发送和接收事件。 使用此模型的最大好处是,[它可以使用宽松的耦合模式](https://en.wikipedia.org/wiki/Loose_coupling),它允许发送和接收组件保持不可知 彼此。 因此,它们的实现可以彼此独立地执行,并且对需求的变化不敏感。 当您的 PixieApp 使用由不同团队构建的不同 PixieApps 的组件时,或者事件来自用户与图表进行交互(例如,单击地图)并且您想要提供向下钻取功能时,这将非常有用。 。
PixieApp 框架支持使用浏览器中可用的发布-订阅模式在不同组件之间发送和接收事件。 使用此模型的最大好处是,[它可以使用宽松的耦合模式](https://en.wikipedia.org/wiki/Loose_coupling),它允许发送和接收组件彼此保持不可知。 因此,它们的实现可以彼此独立地执行,并且对需求的变化不敏感。 当您的 PixieApp 使用由不同团队构建的不同 PixieApps 的组件时,或者事件来自用户与图表进行交互(例如,单击地图)并且您想要提供向下钻取功能时,这将非常有用。 。
每个事件都携带任意键和值的 JSON 有效负载。 有效负载必须至少具有以下其中一个键(或两者兼有):
......@@ -683,7 +683,7 @@ class SimpleDisplay(Display):
[您可以在此处找到代码文件](https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter%205/sampleCode16.py)
如前所述,`SimpleDisplay`类必须继承`Display`类并实现`doRender()`方法。 在此方法的实现中,您可以访问`self.entity``self.options`变量来调整信息在屏幕上的呈现方式。 在前面的示例中,我们使用`self._addHTMLTemplateString()`方法创建将呈现可视化效果的 HTML 片段。 与 PixieApp 路由一样,传递给`self._addHTMLTemplateString()`的字符串可以利用 Jinja2 模板引擎并可以自动访问诸如`entity`之类的变量。 如果您不想在 Python 文件中对模板字符串进行硬编码,则可以将提取到其自己的文件中,该文件必须放置在名为`templates`的目录中,该目录必须与调用 Python 的目录位于同一目录中 文件。 然后,您将需要使用`self._addHTMLTemplate()`方法,该方法将文件名作为参数(不指定`templates`目录)。
如前所述,`SimpleDisplay`类必须继承`Display`类并实现`doRender()`方法。 在此方法的实现中,您可以访问`self.entity``self.options`变量来调整信息在屏幕上的呈现方式。 在前面的示例中,我们使用`self._addHTMLTemplateString()`方法创建将呈现可视化效果的 HTML 片段。 与 PixieApp 路由一样,传递给`self._addHTMLTemplateString()`的字符串可以利用 Jinja2 模板引擎并可以自动访问诸如`entity`之类的变量。 如果您不想在 Python 文件中对模板字符串进行硬编码,则可以将提取到其自己的文件中,该文件必须放置在名为`templates`的目录中,该目录必须与调用的 Python 文件位于同一目录中。 然后,您将需要使用`self._addHTMLTemplate()`方法,该方法将文件名作为参数(不指定`templates`目录)。
### 注意
......
......@@ -3,7 +3,7 @@
|   | *“人工智能,深度学习,机器学习-如果您不了解它,无论您在做什么-都要学习。否则,您将在 3 年内成为恐龙。”* |   |
|   | -*马克·库班* |
这是涵盖流行行业用例的一系列示例应用程序的第一章,并且我从与机器学习有关的用例开始,也不是巧合,尤其是通过图像识别示例应用程序进行深度学习。 在过去的几年中,我们看到在**人工智能****AI**)领域加速发展,以至于许多实际应用正在成为现实,例如 自动驾驶汽车以及具有先进的自动语音识别功能的聊天机器人,在某些任务上完全可以代替人工操作,而从学术界到工业界的越来越多的人开始涉足其中。 但是,人们认为入门成本非常高,并且掌握机器学习的基本数学概念是先决条件。 在本章中,我们试图通过使用示例来证明事实并非如此。
这是涵盖流行行业用例的一系列示例应用程序的第一章,并且我从与机器学习有关的用例开始,也不是巧合,尤其是通过图像识别示例应用程序进行深度学习。 在过去的几年中,我们看到在**人工智能****AI**)领域加速发展,以至于许多实际应用正在成为现实,例如自动驾驶汽车以及具有先进的自动语音识别功能的聊天机器人,在某些任务上完全可以代替人工操作,而从学术界到工业界的越来越多的人开始涉足其中。 但是,人们认为入门成本非常高,并且掌握机器学习的基本数学概念是先决条件。 在本章中,我们试图通过使用示例来证明事实并非如此。
我们将在本章开始时对机器学习进行快速介绍,并将其子集称为深度学习。 然后,我们将介绍一个非常流行的深度学习框架,称为 TensorFlow,我们将使用它来构建图像识别模型。 在本章的第二部分中,我们将展示如何通过实现示例 PixieApp 来操作已构建的模型,该示例使用户可以输入网站链接,抓取所有图像并将其用作模型的输入 对它们进行分类。
......
......@@ -386,7 +386,7 @@ flight_graph = nx.from_pandas_edgelist(
[您可以在此处找到代码文件](https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter%209/sampleCode7.py)
**注意**:NetworkX 支持通过从 多种格式,包括字典,列表,NumPy 和 SciPy 矩阵,当然还有Pandas。 [您可以在此处找到有关这些转换功能的更多信息](https://networkx.github.io/documentation/networkx-2.1/reference/convert.html)
**注意**:NetworkX 支持通过从多种格式创建,包括字典,列表,NumPy 和 SciPy 矩阵,当然还有Pandas。 [您可以在此处找到有关这些转换功能的更多信息](https://networkx.github.io/documentation/networkx-2.1/reference/convert.html)
我们可以通过直接打印其节点和边来快速验证我们的图是否具有正确的值:
......@@ -571,7 +571,7 @@ def compute_centrality(g, centrality_df, compute_fn, col_name, *args, **kwargs):
[您可以在此处找到代码文件](https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter%209/sampleCode12.py)
我们现在可以简单地用三个计算函数`nx.pagerank()``nx.closeness_centrality()``nx.betweenness_centrality()`分别用列`PAGE_RANK``CLOSENESS``BETWEENNESS`调用来调用`compute_centrality()`方法,如 以下代码
我们现在可以简单地用三个计算函数`nx.pagerank()``nx.closeness_centrality()``nx.betweenness_centrality()`分别用列`PAGE_RANK``CLOSENESS``BETWEENNESS`调用来调用`compute_centrality()`方法,如以下代码所示
```py
airports_centrality = compute_centrality(flight_graph, airports_centrality, nx.pagerank, "PAGE_RANK")
......@@ -673,7 +673,7 @@ nx.dijkstra_path(flight_graph, "BOS", "PSC", weight="ELAPSED_TIME")
['BOS', 'MSP', 'PSC']
```
不幸的是,我们之前计算的中心度索引不是`flight_graph``DataFrame`的一部分,因此将其用作`weight`属性的列名将不起作用。 但是`dijkstra_path()`还允许我们使用一个函数来动态计算权重。 由于我们想尝试不同的中心指数,因此我们需要创建一个[工厂方法](https://en.wikipedia.org/wiki/Factory_method_pattern),该方法将为给定的中心指数创建函数 一个争论。 此参数用作嵌套包装函数的闭包,该包装函数符合`dijkstra_path()`方法的`weight`参数。 我们也使用字典来记住给定机场的权重,因为该算法将为同一机场多次调用该函数。 如果权重不在缓存中,则使用`centrality_indice_col`参数在`airports_centrality``DataFrame`中查找权重。 由于 Dijkstra 算法偏爱距离较短的路径,因此通过获得中心值的倒数来计算最终权重。
不幸的是,我们之前计算的中心度索引不是`flight_graph DataFrame`的一部分,因此将其用作`weight`属性的列名将不起作用。 但是`dijkstra_path()`还允许我们使用一个函数来动态计算权重。 由于我们想尝试不同的中心指数,因此我们需要创建一个[工厂方法](https://en.wikipedia.org/wiki/Factory_method_pattern),该方法将为给定的中心指数创建函数参数。 此参数用作嵌套包装函数的闭包,该包装函数符合`dijkstra_path()`方法的`weight`参数。 我们也使用字典来记住给定机场的权重,因为该算法将为同一机场多次调用该函数。 如果权重不在缓存中,则使用`centrality_indice_col`参数在`airports_centrality``DataFrame`中查找权重。 由于 Dijkstra 算法偏爱距离较短的路径,因此通过获得中心值的倒数来计算最终权重。
以下代码显示`compute_weight`工厂方法的实现:
......@@ -1365,7 +1365,7 @@ plt.show()
`ARRIVAL_DELAY`数据的部分自相关
从前面的图表中,我们可以假设数据具有趋势和/或季节性,并且不稳定。 使用我们在第 8 章,“金融时间序列分析和预测”中介绍的对数差异技术,对序列进行转换并使用 PixieDust `display()`方法将其可视化,如 以下代码
从前面的图表中,我们可以假设数据具有趋势和/或季节性,并且不稳定。 使用我们在第 8 章,“金融时间序列分析和预测”中介绍的对数差异技术,对序列进行转换并使用 PixieDust `display()`方法将其可视化,如以下代码所示
### 注意
......@@ -1618,7 +1618,7 @@ class PredictDelayApp():
这两个下拉菜单具有`pd_refresh`属性,该属性指向 ID 为`prediction_graph{{prefix}}``<div>`元素。 触发后,此`<div>`元素使用`flight_segment``airline`状态属性调用`predict_screen()`路由。
`predict_screen()`路线中,我们使用`flight_segment``airline`参数创建训练数据集,构建一个可预测模型的 ARIMA 模型,并在折线图中可视化结果,以比较预测值和 实际值。
`predict_screen()`路线中,我们使用`flight_segment``airline`参数创建训练数据集,构建一个可预测模型的 ARIMA 模型,并在折线图中可视化结果,以比较预测值和实际值。
### 注意
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册