提交 cc7efb34 编写于 作者: W wizardforcel

2021-02-20 21:10:55

上级 f7ab7a62
......@@ -35,7 +35,7 @@ Scala 还提供了一种非常简洁的语法,可以将其转换为更少的
即使初学者也可以使用流行的 [scikit-learn 包](http://scikit-learn.org)快速构建机器学习分类器,而无需成为机器学习专家,也可以使用 [Matplotlib](https://matplotlib.org)[Bokeh](https://bokeh.pydata.org) 快速绘制丰富的图表。
此外,Python 也已成为 IEEE Spectrum 2017 调查( [https://spectrum.ieee.org/computing/software/the-2017-top- 编程语言](https://spectrum.ieee.org/computing/software/the-2017-top-programming-languages)
此外,Python 也已成为 [IEEE Spectrum 2017 调查](https://spectrum.ieee.org/computing/software/the-2017-top-programming-languages)
![Why choose Python?](img/00012.jpeg)
......@@ -49,7 +49,7 @@ GitHub 上也证实了这种趋势,其中 Python 现在在存储库总数中
上图显示了一些有趣的统计数据,展示了 Python 开发人员社区的活跃程度。 在 GitHub 上活动的与 Python 相关的存储库的大小为第三大,每个存储库的总代码推送和未解决的问题也相类似。
Python 在网络上也变得无处不在,它通过 Web 开发框架为众多知名网站提供支持,例如 Django( [https://www.djangoproject.com](https://www.djangoproject.com) ),Tornado( [http ://www.tornadoweb.org](http://www.tornadoweb.org) )和 TurboGears( [http://turbogears.org](http://turbogears.org)。 最近有迹象表明,Python 也在所有主要的云提供商中进入了云服务领域,其中包括中提供了某些功能。
Python 在网络上也变得无处不在,它通过 Web 开发框架为众多知名网站提供支持,例如 [Django](https://www.djangoproject.com)[Tornado](http://www.tornadoweb.org)[TurboGears](http://turbogears.org)。 最近有迹象表明,Python 也在所有主要的云提供商中进入了云服务领域,其中包括中提供了某些功能。
Python 显然在数据科学领域有着光明的前途,尤其是与诸如 Jupyter Notebooks 之类的强大工具结合使用时,Python 在数据科学家社区中已变得非常流行。 笔记本电脑的价值主张是,它们非常易于创建,并且非常适合快速运行的实验。 此外,笔记本电脑还支持多种高保真序列化格式,可以捕获指令,代码和结果,然后可以很容易地与团队中的其他数据科学家共享这些代码,也可以将其作为开源供所有人使用。 例如,我们看到 Jupyter Notebook 在 GitHub 上激增,数量超过 250 万并且还在增加。
......@@ -69,7 +69,7 @@ GitHub 上的 Jupyter Notebooks 的搜索结果
我经常被问到我是如何想到 PixieDust 这个名字的,我只是想让 Notebook 对于非数据科学家来说就像魔术一样简单。
PixieDust( [https://github.com/ibm-watson-data-lab/pixiedust](https://github.com/ibm-watson-data-lab/pixiedust) )是一个开源项目,主要由三个组件组成,旨在解决本章开头所述的三个目标。 :
[PixieDust](https://github.com/ibm-watson-data-lab/pixiedust) 是一个开源项目,主要由三个组件组成,旨在解决本章开头所述的三个目标。
* 一个适用于 Jupyter Notebooks 的辅助 Python 库,它提供了简单的 API,可将各种来源的数据加载到流行的框架(如熊猫和 Apache Spark DataFrame)中,然后以交互方式可视化和浏览数据集。
* 一个基于 Python 的简单编程模型,通过创建功能强大的仪表板 PixieApps,开发人员可以将分析结果直接“产品化”到 Notebook 中。 正如我们将在下一章中看到的那样,PixieApps 与传统的 **BI****Business Intelligence** 的缩写)仪表板有所不同,因为开发人员可以直接使用 HTML 和 CSS 来创建 任意复杂的布局。 此外,他们可以将对笔记本中创建的任何变量,类或函数的访问权限嵌入其业务逻辑中。
......@@ -77,13 +77,13 @@ PixieDust( [https://github.com/ibm-watson-data-lab/pixiedust](https://github.c
请务必注意,PixieDust `display()` API 主要支持两种流行的数据处理框架:
* **pandas**[https://pandas.pydata.org](https://pandas.pydata.org):迄今为止,最流行的 Python 数据分析包,pandas 提供了两种主要数据结构:用于处理两个- 一维列状数据集和系列。
* [**pandas**](https://pandas.pydata.org):迄今为止,最流行的 Python 数据分析包,pandas 提供了两种主要数据结构:用于处理两个- 一维列状数据集和系列。
### 注意
当前,PixieDust `display()`仅支持 pandas DataFrames。
* **Apache Spark DataFrame**[https://spark.apache.org/docs/latest/sql-programming-guide.html](https://spark.apache.org/docs/latest/sql-programming-guide.html):这是高级数据结构 用于操纵整个 Spark 集群中的分布式数据集。 Spark DataFrames 构建在较低级 **RDD****弹性分布式数据集**的简称)之上,并添加了支持 SQL 查询的功能。
* [**Apache Spark DataFrame**](https://spark.apache.org/docs/latest/sql-programming-guide.html):这是高级数据结构 用于操纵整个 Spark 集群中的分布式数据集。 Spark DataFrames 构建在较低级 **RDD****弹性分布式数据集**的简称)之上,并添加了支持 SQL 查询的功能。
PixieDust `display()`支持的另一种较不常用的格式是 JSON 对象数组。 在这种情况下,PixieDust 将使用这些值来构建行,并将键用作列,例如,如下所示:
......@@ -105,7 +105,7 @@ my_data = [
* **Scala Bridge** :您可以使用`%%scala`魔术在 Python 笔记本中直接使用 Scala 。 变量自动从 Python 传输到 Scala,反之亦然。
* **Spark 作业进度监视器**:通过直接在单元格输出中显示进度条来跟踪任何 Spark 作业的状态。
在深入研究三个 PixieDust 组件中的每一个之前,最好通过在云上注册托管解决方案(例如,位于 [https://www.wtsonstudio.com/zh-cn/zh-cn/上的 Watson Studio https://)来访问 Jupyter Notebook。 datascience.ibm.com](https://datascience.ibm.com)或在本地计算机上安装开发版本。
在深入研究三个 PixieDust 组件中的每一个之前,最好通过在云上注册托管解决方案(例如,位于[这个页面](https://datascience.ibm.com))来访问 Jupyter Notebook 或在本地计算机上安装开发版本。
### 注意
......@@ -168,15 +168,15 @@ c.NotebookApp.open_browser = False
### 提示
我强烈建议您使用 Anaconda( [https://anaconda.org](https://anaconda.org),它提供了出色的 Python 软件包管理功能。 如果像我一样喜欢试验不同版本的 Python 和库依赖关系,建议您使用 Anaconda 虚拟环境。
我强烈建议您使用 [Anaconda](https://anaconda.org),它提供了出色的 Python 软件包管理功能。 如果像我一样喜欢试验不同版本的 Python 和库依赖关系,建议您使用 Anaconda 虚拟环境。
它们是轻量级的 Python 沙箱,非常易于创建和激活(请参见 [https://conda.io/docs/user-guide/tasks/manage-environments.html](https://conda.io/docs/user-guide/tasks/manage-environments.html) ):
它们是轻量级的 Python 沙箱,非常易于创建和激活(请参见[这个页面](https://conda.io/docs/user-guide/tasks/manage-environments.html)):
* 创建一个新环境:`conda create --name env_name`
* 列出所有环境:`conda env list`
* 激活环境:`source activate env_name`
我还建议您有选择地熟悉源代码,该源代码位于 [https://github.com/ibm-watson-data-lab/pixiedust](https://github.com/ibm-watson-data-lab/pixiedust)[https:// github.com/ibm-watson-data-lab/pixiegateway](https://github.com/ibm-watson-data-lab/pixiegateway)
我还建议您有选择地熟悉源代码,该源代码位于[这个页面](https://github.com/ibm-watson-data-lab/pixiedust)[这个页面](https://github.com/ibm-watson-data-lab/pixiegateway)
现在,我们准备在下一部分中以`sampleData()`开头探索 PixieDust API。
......@@ -184,7 +184,7 @@ c.NotebookApp.open_browser = False
将数据加载到笔记本中是数据科学家可以执行的最多重复任务之一,但是根据所使用的框架或数据源,编写代码可能既困难又耗时。
让我们举一个具体的示例,尝试从一个开放的数据站点(例如 [https://data.cityofnewyork.us](https://data.cityofnewyork.us) )中将 CSV 文件加载到大熊猫和 Apache Spark DataFrame 中。
让我们举一个具体的示例,尝试从一个开放的数据站点(例如[这个页面](https://data.cityofnewyork.us))中将 CSV 文件加载到大熊猫和 Apache Spark DataFrame 中。
### 注意
......@@ -521,27 +521,27 @@ PixieDust Charts 菜单
只要安装了相应的库,PixieDust 即可使用以下渲染器。 对于未安装的渲染器,将在 PixieDust 日志中生成警告,并且相应的渲染器不会显示在菜单中。 我们将在[第 5 章](05.html#173722-6bf9b9b4cfde46e3ba53bd8d61355763 "Chapter 5. Best Practices and Advanced PixieDust Concepts")*最佳实践和高级 PixieDust 概念*中详细介绍 PixieDust 登录。
* Matplotlib( [https://matplotlib.org](https://matplotlib.org)
* Seaborn ( [https://seaborn.pydata.org](https://seaborn.pydata.org) )
* [Matplotlib](https://matplotlib.org)
* [Seaborn](https://seaborn.pydata.org)
### 注意
需要使用以下库来安装该库: `!pip install seaborn.`
* Bokeh ( [https://bokeh.pydata.org](https://bokeh.pydata.org) )
* [Bokeh](https://bokeh.pydata.org)
### 注意
需要使用以下库来安装该库: `!pip install bokeh.`
* Brunel ( [https://brunelvis.org](https://brunelvis.org) )
* [Brunel](https://brunelvis.org)
### 注意
需要使用以下库来安装该库: `!pip install brunel.`
* Google 地图( [https://developers.google.com/maps](https://developers.google.com/maps)
* Mapbox ( [https://www.mapbox.com](https://www.mapbox.com) )
* [Google 地图](https://developers.google.com/maps)
* [Mapbox](https://www.mapbox.com)
### 注意
......@@ -557,7 +557,7 @@ PixieDust Charts 菜单
### 注意
在使用 Mapbox 渲染器之前,建议从以下位置的 Mapbox 站点获取 API 密钥:( [https://www.mapbox.com/help/how-access-tokens-work](https://www.mapbox.com/help/how-access-tokens-work)。 但是,如果您没有,则 PixieDust 将提供一个默认密钥。
在使用 Mapbox 渲染器之前,[建议从以下位置的 Mapbox 站点获取 API 密钥](https://www.mapbox.com/help/how-access-tokens-work)。 但是,如果您没有,则 PixieDust 将提供一个默认密钥。
要创建地图,请使用 NE Mass 数据集中的*百万美元房屋销售,如下所示:*
......@@ -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](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 对象存储在单元格元数据中,最终将其保存在笔记本中。 您可以通过选择**视图** |手动检查此数据。 **单元格工具栏** | **编辑元数据**菜单,如以下屏幕截图所示:
......@@ -627,7 +627,7 @@ Mapbox 图表的“选项”对话框
在大多数情况下,这是数据科学与软件工程相遇的地方(或者就像人们所说的*,橡胶与道路相遇*)。 团队之间的持续协作(而不是一次交接)是成功完成任务的关键。 通常,他们还必须应对不同的语言和平台,从而导致软件工程团队重写大量代码。
当我们需要构建实时仪表板以可视化结果时,我们在 Twitter 主题标签项目的*情绪分析中亲身体验了它。 数据分析是使用熊猫,Apache Spark 和一些绘图库(例如 Matplotlib 和 Bokeh)以 Python 编写的,而仪表板是用 Node.js 编写的[ [https://nodejs.org](https://nodejs.org) )和 D3( [https://d3js.org](https://d3js.org) )。*
当我们需要构建实时仪表板以可视化结果时,我们在 Twitter 主题标签项目的情绪分析中亲身体验了它。 数据分析是使用熊猫,Apache Spark 和一些绘图库(例如 Matplotlib 和 Bokeh)以 Python 编写的,而仪表板是用 [Node.js](https://nodejs.org)[D3](https://d3js.org) 编写的。
我们还需要在分析和仪表板之间建立数据接口,并且由于我们需要系统是实时的,因此我们选择使用 Apache Kafka 来流化分析结果格式的事件。
......@@ -706,7 +706,7 @@ Hello World PixieApp
在上一节中,我们了解了 PixieApps 与 PixieDust 显示框架的结合如何提供一种简便的方法来构建功能强大的仪表板,这些仪表板可直接与您的数据分析连接,从而允许算法和用户界面之间的快速迭代。 这对于快速原型制作非常有用,但是笔记本电脑不适合在目标角色是业务用户的生产环境中使用。 一个显而易见的解决方案是使用传统的三层 Web 应用程序体系结构重写 PixieApp,如下所示:
* 用于表示层的 React( [https://reactjs.org](https://reactjs.org)
* 用于表示层的 [React](https://reactjs.org)
* Web 层的 Node.js
* 针对 Web 分析层的数据访问库,用于机器学习评分或运行任何其他分析作业
......@@ -724,7 +724,7 @@ Hello World PixieApp
2. 开发人员在同一个 Notebook 中创建一个 PixieApp 来实施这些分析
3. 准备就绪后,开发人员将 PixieApp 发布为 Web 应用程序,业务部门用户可以轻松地以交互方式使用它,而无需访问笔记本电脑
PixieDust 使用 PixieGateway 组件提供了该解决方案的实现。 PixieGateway 是一个 Web 应用程序服务器,负责加载和运行 PixieApps。 它构建在 Jupyter 内核网关( [https://github.com/jupyter/kernel_gateway](https://github.com/jupyter/kernel_gateway)之上,该网关本身构建在 Tornado Web 框架之上,因此遵循如图所示的架构。 下图:
PixieDust 使用 PixieGateway 组件提供了该解决方案的实现。 PixieGateway 是一个 Web 应用程序服务器,负责加载和运行 PixieApps。 它构建在 [Jupyter 内核网关](https://github.com/jupyter/kernel_gateway)之上,该网关本身构建在 Tornado Web 框架之上,因此遵循如图所示的架构。 下图:
![Architecture for operationalizing data science analytics](img/00047.jpeg)
......@@ -740,7 +740,7 @@ PixieGateway 架构图
2. 业务用户使用步骤 1 中的 URL 从浏览器访问应用程序。
3. PixieGateway 提供了一个全面的管理控制台,用于管理服务器,包括配置应用程序,配置和监视内核,访问日志以进行故障排除等。
4. PixieGateway 使用 IPython 消息传递协议( [http://jupyter-client.readthedocs.io/en/latest/messaging.html](http://jupyter-client.readthedocs.io/en/latest/messaging.html)通过 WebSocket 或 ZeroMQ,具体取决于内核是本地的还是远程的。
4. PixieGateway 使用 [IPython 消息传递协议](http://jupyter-client.readthedocs.io/en/latest/messaging.html)通过 WebSocket 或 ZeroMQ,具体取决于内核是本地的还是远程的。
在将分析产品化时,此解决方案相对于传统的三层 Web 应用程序体系结构进行了重大改进,因为它可以将 Web 和数据层折叠为一个 **Web 分析层**,如下图所示:
......
......@@ -225,7 +225,7 @@ app.run()
## 一个 GitHub 项目跟踪示例应用程序
让我们将到目前为止所学到的应用于实现示例应用程序。 为了解决问题,我们想使用 GitHub Rest API( [https://developer.github.com/v3](https://developer.github.com/v3)搜索项目并将结果加载到 pandas DataFrame 中进行分析。
让我们将到目前为止所学到的应用于实现示例应用程序。 为了解决问题,我们想使用 [GitHub Rest API](https://developer.github.com/v3) 搜索项目并将结果加载到 pandas DataFrame 中进行分析。
初始代码显示了欢迎屏幕,其中带有一个简单的输入框以输入 GitHub 查询和一个按钮来提交请求:
......@@ -268,8 +268,8 @@ app.run()
前面的代码中需要注意的几件事:
* Jupyter 提供了 Bootstrap CSS 框架( [https://getbootstrap.com/docs/3.3](https://getbootstrap.com/docs/3.3) )和 jQuery JS 框架( [https://jquery.com](https://jquery.com) )。 ] 笔记本。 我们可以轻松地在代码中使用,而无需安装它们。
* 字体令人敬畏的图标( [https://fontawesome.com](https://fontawesome.com)默认情况下在笔记本电脑中也可用。
* Jupyter 笔记本提供了 [Bootstrap CSS 框架](https://getbootstrap.com/docs/3.3)[jQuery JS 框架](https://jquery.com)我们可以轻松地在代码中使用,而无需安装它们。
* [FontAwesome 图标](https://fontawesome.com)默认情况下在笔记本电脑中也可用。
* PixieApp 代码可以在笔记本的多个单元中执行。 由于我们依赖 DOM 元素 ID,因此重要的是要确保两个元素没有相同的 ID,这会导致不良的副作用。 为此,建议始终包含由 PixieDust 框架提供的唯一标识符`{{prefix}}`,例如`"query{{prefix}}"`
结果显示在以下屏幕截图中:
......@@ -280,7 +280,7 @@ GitHub Tracking 应用程序的欢迎屏幕
下一步是创建一个采用用户值并返回结果的新路由。 此路由将由**提交查询**按钮调用。
为简单起见,以下代码未使用 Python 库与 GitHub 进行接口,例如 PyGithub( [http://pygithub.readthedocs.io/en/latest](http://pygithub.readthedocs.io/en/latest),相反,我们将 直接调用 GitHub 网站上记录的 REST API:
为简单起见,以下代码未使用 Python 库与 GitHub 进行接口,例如 [PyGithub](http://pygithub.readthedocs.io/en/latest),相反,我们将 直接调用 GitHub 网站上记录的 REST API:
### 注意
......@@ -310,7 +310,7 @@ def do_search(self, query):
[您可以在此处找到代码文件](https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter%203/sampleCode5.py)
在前面的代码中,我们创建了一个名为`do_search`的路由,该路由带有一个名为`query`的参数,用于构建 GitHub 的 API URL。 使用`requests` Python 模块( [http://docs.python-requests.org](http://docs.python-requests.org)向此 URL 发出 GET 请求,我们获得了一个 JSON 有效负载,我们将其转换为 pandas DataFrame。 根据 GitHub 文档,Search API 分页,并将下一页存储在链接的标题中。 该代码使用`while`循环遍历每个链接并将下一页加载到新的 DataFrame 中。 然后,我们将所有 DataFrame 合并为一个`pdf`。 我们剩下要做的就是构建将显示结果的 HTML 片段。 该片段使用 Ji​​nja2 表示法`{{...}}`来访问定义为局部变量的`pdf`变量,这仅能起作用是因为我们在`do_search`方法中使用了`@templateArgs`装饰器。 注意,我们还使用了名为`length`的 Jinja2 过滤器来显示找到的存储库数量:`{{pdf|length}}`
在前面的代码中,我们创建了一个名为`do_search`的路由,该路由带有一个名为`query`的参数,用于构建 GitHub 的 API URL。 使用[`requests` Python 模块](http://docs.python-requests.org)向此 URL 发出 GET 请求,我们获得了一个 JSON 有效负载,我们将其转换为 pandas DataFrame。 根据 GitHub 文档,Search API 分页,并将下一页存储在链接的标题中。 该代码使用`while`循环遍历每个链接并将下一页加载到新的 DataFrame 中。 然后,我们将所有 DataFrame 合并为一个`pdf`。 我们剩下要做的就是构建将显示结果的 HTML 片段。 该片段使用 Ji​​nja2 表示法`{{...}}`来访问定义为局部变量的`pdf`变量,这仅能起作用是因为我们在`do_search`方法中使用了`@templateArgs`装饰器。 注意,我们还使用了名为`length`的 Jinja2 过滤器来显示找到的存储库数量:`{{pdf|length}}`
### 注意
......@@ -436,7 +436,7 @@ def do_retrieve_page(self, page):
[您可以在此处找到代码文件](https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter%203/sampleCode7.py)
`page`参数是一个字符串,其中包含我们要显示的`url`类变量的名称。 我们使用标准的`getattr` Python 函数( [https://docs.python.org/2/library/functions.html#getattr](https://docs.python.org/2/library/functions.html#getattr) )从页面获取`url`值。 然后,我们在 GitHub API `url`上发出 GET 请求,以 JSON 格式检索有效负载,并将其传递给 Jinja2 模板以生成将插入表中的行集。 为此,我们使用 Jinja2 中可用的`{%for…%}`循环控制结构( [http://jinja.pocoo.org/docs/templates/#for](http://jinja.pocoo.org/docs/templates/#for)生成`<tr>``<td>` HTML 标记。
`page`参数是一个字符串,其中包含我们要显示的`url`类变量的名称。 我们使用标准的[`getattr` Python 函数](https://docs.python.org/2/library/functions.html#getattr)从页面获取`url`值。 然后,我们在 GitHub API `url`上发出 GET 请求,以 JSON 格式检索有效负载,并将其传递给 Jinja2 模板以生成将插入表中的行集。 为此,我们使用 Jinja2 中可用的[`{%for…%}`循环控制结构](http://jinja.pocoo.org/docs/templates/#for)生成`<tr>``<td>` HTML 标记。
以下屏幕快照显示了查询的搜索结果:`pixiedust`
......@@ -497,11 +497,11 @@ def do_retrieve_page(self, page):
为每一行添加操作按钮
下一步是创建与“回购可视化”页面关联的路由。 该页面的设计非常简单:用户可以从组合框中选择要在页面上可视化的数据类型。 GitHub REST API 提供了对多种类型数据的访问,但是对于此示例应用程序,我们将使用提交活动数据,该数据属于统计信息类别(请参阅 [https://developer.github.com/v3/ repos / statistics /#get-commit-activity-data](https://developer.github.com/v3/repos/statistics/#get-the-last-year-of-commit-activity-data) ,以获取此 API 的详细说明)。
下一步是创建与“回购可视化”页面关联的路由。 该页面的设计非常简单:用户可以从组合框中选择要在页面上可视化的数据类型。 GitHub REST API 提供了对多种类型数据的访问,但是对于此示例应用程序,我们将使用提交活动数据,该数据属于统计信息类别(请参阅[这个页面](https://developer.github.com/v3/repos/statistics/#get-the-last-year-of-commit-activity-data),以获取此 API 的详细说明)。
### 提示
作为练习,请随时通过添加其他类型的 API 的可视化来改进此示例应用程序,例如 Traffic API( [https://developer.github.com/v3/repos/traffic](https://developer.github.com/v3/repos/traffic)
作为练习,请随时通过添加其他类型的 API 的可视化来改进此示例应用程序,例如 [Traffic API](https://developer.github.com/v3/repos/traffic)
还需要注意的是,即使大多数 GitHub API 都无需身份验证即可工作,但如果您不提供凭据,服务器可能会限制响应。 要验证请求的身份,您需要使用 GitHub 密码或通过选择 GitHub **设置**页面上的**开发人员设置**菜单,然后单击 **Personal 来生成个人访问令牌。 访问令牌**菜单,然后单击**生成新令牌按钮**
......@@ -516,7 +516,7 @@ github_token = "XXXXXXXXXX"
为了提供良好的代码模块化和重用性,我们将在新类中实现 Repo Visualization 页面,并使我们的主要 PixieApp 类继承自该类并自动重用其路由。 当您开始拥有大型项目并将其分解为多个类时,请牢记这种模式。
“回购可视化”页面的主要路径返回一个 HTML 片段,该片段具有一个下拉菜单和一个用于可视化的`<div>`占位符。 使用 Bootstrap `dropdown`类( [https://www.w3schools.com/bootstrap/bootstrap_dropdowns.asp](https://www.w3schools.com/bootstrap/bootstrap_dropdowns.asp) )创建下拉菜单。 为了使代码更易于维护,菜单项是通过在元组数组上使用 Jinja2 `{%for..` `%}`循环生成的( [https://docs.python.org/3/tutorial/datastructures.html# 称为`analyses`的元组和序列](https://docs.python.org/3/tutorial/datastructures.html#tuples-and-sequences),其中包含描述和将数据加载到熊猫 DataFrame 中的函数。 再次在这里,我们在自己的单元格中创建此数组,该数组将在 PixieApp 类中引用:
“回购可视化”页面的主要路径返回一个 HTML 片段,该片段具有一个下拉菜单和一个用于可视化的`<div>`占位符。 使用 [Bootstrap `dropdown`类](https://www.w3schools.com/bootstrap/bootstrap_dropdowns.asp)创建下拉菜单。 为了使代码更易于维护,菜单项是通过在元组数组上使用 [Jinja2 `{%for..` `%}`循环](https://docs.python.org/3/tutorial/datastructures.html#tuples-and-sequences)生成的,称为`analyses`的元组和序列,其中包含描述和将数据加载到熊猫 DataFrame 中的函数。 再次在这里,我们在自己的单元格中创建此数组,该数组将在 PixieApp 类中引用:
```py
analyses = [("Commit Activity", load_commit_activity)]
......@@ -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](https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions)快速基于`key`生成模拟数据 争论。
在前面的代码中,我们使用 [Python 列表推导](https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions)快速基于`key`生成模拟数据 争论。
### 注意
......@@ -734,7 +734,7 @@ def do_analyse_type(self, analyse_type):
[您可以在此处找到代码文件](https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter%203/sampleCode12.py)
路由有一个名为`analyse_type,`的参数,我们将其用作在`analyses`数组中查找 load 函数的键(注意,我再次使用列表推导来快速进行搜索)。 然后,我们调用传递回购所有者和名称的此函数来获取`vis_info` JSON 有效负载,并将 pandas DataFrame 存储到名为`pdf`的类变量中。 然后,返回的 HTML 片段将`pdf`用作`pd_entity`值,将`vis_info["chart_options"]`用作`pd_optio` `ns`。 在这里,我使用`tojson` Jinja2 过滤器( [http://jinja.pocoo.org/docs/templates/#list-of-builtin-filters](http://jinja.pocoo.org/docs/templates/#list-of-builtin-filters)来确保在生成的 HTML 中正确进行了转义 。 即使已在堆栈上声明了`vis_info`变量,也允许我使用它,因为我为函数使用了`@templateArgs`装饰器。
路由有一个名为`analyse_type,`的参数,我们将其用作在`analyses`数组中查找 load 函数的键(注意,我再次使用列表推导来快速进行搜索)。 然后,我们调用传递回购所有者和名称的此函数来获取`vis_info` JSON 有效负载,并将 pandas DataFrame 存储到名为`pdf`的类变量中。 然后,返回的 HTML 片段将`pdf`用作`pd_entity`值,将`vis_info["chart_options"]`用作`pd_optio` `ns`。 在这里,我使用[`tojson` Jinja2 过滤器](http://jinja.pocoo.org/docs/templates/#list-of-builtin-filters)来确保在生成的 HTML 中正确进行了转义 。 即使已在堆栈上声明了`vis_info`变量,也允许我使用它,因为我为函数使用了`@templateArgs`装饰器。
在测试改进的应用程序之前,要做的最后一件事是确保主要的`GitHubTracking` PixieApp 类继承自`RepoAnalysis` PixieApp:
......@@ -805,9 +805,7 @@ GitHub 回购提交活动可视化
### 注意
您可以在此处找到的代码文件:
[https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter %203 / sampleCode14.py](https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter%203/sampleCode14.py)
[您可以在此处找到的代码文件](https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter%203/sampleCode14.py)。
* 如果代码包含多行,建议使用`pd_script`子元素,它使您可以使用多行编写 Python 代码。 使用此格式时,请确保代码遵循缩进的 Python 语言规则,例如:
......@@ -921,7 +919,7 @@ def get_pdf(self):
[您可以在此处找到代码文件](https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter%203/sampleCode17.py)
我们使用大熊猫`describe()`方法( [https://pandas.pydata.org/pandas-docs/stable/genic/pandas.DataFrame.describe.html](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.describe.html)返回包含摘要的 DataFrame 统计信息,例如计数,均值,标准差等。 我们还确保此 DataFrame 的第一列包含统计信息的名称。
我们使用大熊猫[`describe()`方法](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.describe.html)返回包含摘要的 DataFrame 统计信息,例如计数,均值,标准差等。 我们还确保此 DataFrame 的第一列包含统计信息的名称。
我们需要做的最后一个更改是初始化`show_stats`变量,因为如果不这样做,那么第一次检查它时,我们会得到`AttributeError`异常。
......
......@@ -16,9 +16,9 @@
# Kubernetes 概述
Kubernetes( [https://kubernetes.io](https://kubernetes.io) )是一个可扩展开源系统,用于自动化和协调容器化应用程序的部署和管理,在云服务中非常流行 提供者。 尽管支持其他类型的容器,但它最常用于 Docker 容器( [https://www.docker.com](https://www.docker.com) )。 在开始之前,您需要访问已配置为作为 Kubernetes 群集的一组计算机; 您可以在此处找到有关如何创建此类集群的教程: [https://kubernetes.io/docs/tutorials/kubernetes-basics](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](https://aws.amazon.com/eks) ),Microsoft Azure( [https://azure.microsoft.com/zh-cn/services/container-service/kubernetes](https://azure.microsoft.com/en-us/services/container-service/kubernetes) )或 IBM Cloud Kubernetes Service( [https://www.ibm .com / cloud / container-service](https://www.ibm.com/cloud/container-service)
如果您没有计算机资源,那么一个好的解决方案是使用提供 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)
为了更好地了解 Kubernetes 集群是如何工作的,让我们看下图所示的高级架构:
......@@ -56,7 +56,7 @@ kubectl [command] [TYPE] [NAME] [flags]
**本地安装**:使用此方法进行测试和开发。
对于这一部分,我强烈建议您使用 Anaconda 虚拟环境( [https://conda.io/docs/user-guide/tasks/manage-environments.html](https://conda.io/docs/user-guide/tasks/manage-environments.html),因为它们可以很好地隔离环境,从而可以 您可以使用不同版本和配置的 Python 包进行实验。
对于这一部分,我强烈建议您使用 [Anaconda 虚拟环境](https://conda.io/docs/user-guide/tasks/manage-environments.html),因为它们可以很好地隔离环境,从而可以 您可以使用不同版本和配置的 Python 包进行实验。
如果要管理多个环境,则可以使用以下命令获取所有可用环境的列表:
......@@ -247,7 +247,7 @@ jupyter kernelgateway --generate-config
* **Python** :`SingletonChartStorage.chart_storage_class`
* **环境**:`PG_CHART_STORAGE`
引用的连接器类必须继承`pixiegateway.chartsManager`包中定义的`ChartStorage`抽象类(可以在此处找到实现: [https://github.com/ibm-watson-data-lab/pixiegateway/blob/ master / pixiegateway / chartsManager.py](https://github.com/ibm-watson-data-lab/pixiegateway/blob/master/pixiegateway/chartsManager.py) )。
引用的连接器类必须继承`pixiegateway.chartsManager`包中定义的`ChartStorage`抽象类([可以在此处找到实现](https://github.com/ibm-watson-data-lab/pixiegateway/blob/master/pixiegateway/chartsManager.py))。
PixieGateway 提供了到 Cloudant / CouchDB NoSQL 数据库( [http://couchdb.apache.org](http://couchdb.apache.org) )的现成连接器。 要使用此连接器,您需要将连接器类设置为`pixiegateway.chartsManager.CloudantChartStorage`。 您还需要指定辅助配置变量以指定服务器和凭据信息(我们显示了 Python / Environment 表单):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册