提交 f0351c54 编写于 作者: W wizardforcel

2021-03-06 22:10:18

上级 65d16563
......@@ -8,7 +8,7 @@
第 1 课, “Jupyter 基础知识”,涵盖了 Jupyter 中的数据分析基础。 我们将从 Jupyter 的用法说明和功能入手,例如魔术功能和制表符补全。 然后,我们将过渡到特定于数据科学的材料。 我们将在实时 Jupyter笔记本中进行探索性分析。 我们将使用视觉辅助,例如散点图,直方图和小提琴图,以加深我们对数据的理解。 我们还将执行简单的预测建模。
第 2 课,“数据清理和高级机器学习”显示了如何在 Jupyter笔记本中训练预测模型。 我们将讨论如何计划机器学习策略。 本课还说明了机器学习术语,例如监督学习,非监督学习,分类和回归。 我们将讨论使用 Scikit-learn 和 pandas 预处理数据的方法。
第 2 课,“数据清理和高级机器学习”显示了如何在 Jupyter笔记本中训练预测模型。 我们将讨论如何计划机器学习策略。 本课还说明了机器学习术语,例如监督学习,非监督学习,分类和回归。 我们将讨论使用 Scikit-learn 和 Pandas 预处理数据的方法。
第 3 课, “Web 抓取和交互式可视化”解释了如何剪贴网页表,然后使用交互式可视化来研究数据。 我们将首先研究 HTTP 请求的工作方式,重点是 GET 请求及其响应状态代码。 然后,我们将进入 Jupyter 笔记本,并使用 Requests 库通过 Python 发出 HTTP 请求。 我们将看到 Jupyter 如何用于在笔记本中呈现 HTML 以及可以与之交互的实际网页。 发出请求后,我们将看到如何使用 BeautifulSoup 来解析 HTML 中的文本,并使用该库来刮擦表格数据。
......
......@@ -204,7 +204,7 @@ Jupyter 具有的许多吸引人的功能,这些特征使高效的 Python 编
6. 运行“计时器”部分中的单元格。 请注意使用一个和两个百分号之间的区别。
即使使用 Python 内核(如您目前所做的那样),也可以使用魔术命令来调用其他语言。 内置选项包括 JavaScript,R,Pearl,Ruby 和 Bash。 Bash 特别有用,因为您可以使用 Unix 命令来查找当前位置(`pwd`),目录中的内容(`ls`),创建新文件夹(`mkdir`)以及写入文件内容(`cat` / `head` / `tail`)。
即使使用 Python 内核(如您目前所做的那样),也可以使用魔术命令来调用其他语言。 内置选项包括 JavaScript,R,Pearl,Ruby 和 Bash。 Bash 特别有用,因为您可以使用 Unix 命令来查找当前位置(`pwd`),目录中的内容(`ls`),创建新文件夹(`mkdir`)以及写入文件内容(`cat`/`head`/`tail`)。
7. 运行“使用笔记本中的 bash”部分中的第一个单元格。 此单元格将一些文本写入工作目录中的文件,打印目录内容,打印空行,然后在删除之前回写新创建文件的内容:
......
......@@ -1202,6 +1202,6 @@ K 折交叉验证算法如下:
首先,我们讨论了如何计划机器学习策略。 我们考虑了如何设计可带来切实可行的业务见解的计划,并强调了使用数据来帮助制定切实可行的业务目标的重要性。 我们还解释了机器学习术语,例如监督学习,无监督学习,分类和回归。
接下来,我们讨论了使用 Scikit-learn 和 pandas 预处理数据的方法。 这包括冗长的讨论以及机器学习中非常耗时的部分的示例:处理丢失的数据。
接下来,我们讨论了使用 Scikit-learn 和 Pandas 预处理数据的方法。 这包括冗长的讨论以及机器学习中非常耗时的部分的示例:处理丢失的数据。
在课程的后半部分,我们针对二进制问题训练了预测分类模型,比较了如何为各种模型(例如 SVM,K 最近邻和随机森林)绘制决策边界。 然后,我们展示了如何使用验证曲线来进行良好的参数选择以及降维如何改善模型性能。 最后,在活动结束时,我们探索了如何在实践中使用最终模型来制定数据驱动型决策。
\ No newline at end of file
......@@ -338,7 +338,7 @@ HTTP 方法
我们遍历所有行,而忽略任何包含比三个数据元素更多的的行。 这些行将不与我们感兴趣的表中的数据相对应。表中确实包含三个数据元素的行被假定为在表中,并且我们在测试过程中从中解析出了这些文本。
文本解析是在`try` / `except`语句内完成的,该语句将捕获任何错误,并允许在不停止迭代的情况下跳过此行。 由于该语句而引起错误的任何行都应查看。 这些数据可以手动记录,也可以通过更改抓取循环并重新运行来解决。 在这种情况下,为了节省时间,我们将忽略所有错误。
文本解析是在`try`/`except`语句内完成的,该语句将捕获任何错误,并允许在不停止迭代的情况下跳过此行。 由于该语句而引起错误的任何行都应查看。 这些数据可以手动记录,也可以通过更改抓取循环并重新运行来解决。 在这种情况下,为了节省时间,我们将忽略所有错误。
23. 通过运行`print(data[:10]):`
......@@ -530,13 +530,13 @@ HTTP 方法
考虑交互式可视化时,其好处类似于静态可视化,但由于可以允许查看者方面的主动探索而有所增强。 它们不仅使观看者可以回答有关数据的问题,而且在浏览时还会想到新问题。 这可以使诸如博客阅读器或同事之类的单独团体受益,但也可以使创建者受益,因为它允许在不更改任何代码的情况下轻松地对数据进行临时的特别探索。
在本主题中,我们将讨论并演示如何使用 Bokeh 在 Jupyter 中构建交互式可视化。 但是,在此之前,我们将简要回顾 pandas `DataFrame`,它们在使用 Python 进行数据可视化中起着重要作用。
在本主题中,我们将讨论并演示如何使用 Bokeh 在 Jupyter 中构建交互式可视化。 但是,在此之前,我们将简要回顾 Pandas `DataFrame`,它们在使用 Python 进行数据可视化中起着重要作用。
## 子主题 A:构建用于存储和组织数据的数据框
正如在本书中一次又一次地看到的那样,Pandas是使用 Python 和 Jupyter笔记本进行数据科学不可或缺的一部分。`DataFrame`提供了一种组织和存储带标签数据的方法,但是更重要的是,pandas 提供了节省时间的方法来转换`DataFrame`中的数据。 我们在本书中看到的示例包括删除重复项,将字典映射到列,在列上应用函数以及填写缺失值。
正如在本书中一次又一次地看到的那样,Pandas是使用 Python 和 Jupyter笔记本进行数据科学不可或缺的一部分。`DataFrame`提供了一种组织和存储带标签数据的方法,但是更重要的是,Pandas 提供了节省时间的方法来转换`DataFrame`中的数据。 我们在本书中看到的示例包括删除重复项,将字典映射到列,在列上应用函数以及填写缺失值。
关于可视化,`DataFrame`提供了用于创建各种 Matplotlib 图的方法,包括`df.plot.barh()``df.plot.hist()`等。 交互式可视化库 Bokeh 以前依靠 pandas`DataFrame`来获取*高级*图表。 它们的工作方式与 Seaborn 相似,就像我们在上一课前面所看到的那样,其中`DataFrame`与要绘制的特定列一起传递给了绘图函数。 但是,Bokeh 的最新版本已放弃对此行为的支持。 相反,现在可以使用与 Matplotlib 相同的方式创建图,在图中可以将数据存储在简单列表或 NumPy 数组中。 讨论的重点是,`DataFrame`并非完全必要,但对于在可视化之前组织和操作数据仍然非常有帮助。
关于可视化,`DataFrame`提供了用于创建各种 Matplotlib 图的方法,包括`df.plot.barh()``df.plot.hist()`等。 交互式可视化库 Bokeh 以前依靠 Pandas`DataFrame`来获取*高级*图表。 它们的工作方式与 Seaborn 相似,就像我们在上一课前面所看到的那样,其中`DataFrame`与要绘制的特定列一起传递给了绘图函数。 但是,Bokeh 的最新版本已放弃对此行为的支持。 相反,现在可以使用与 Matplotlib 相同的方式创建图,在图中可以将数据存储在简单列表或 NumPy 数组中。 讨论的重点是,`DataFrame`并非完全必要,但对于在可视化之前组织和操作数据仍然非常有帮助。
### 建立和合并 Pandas `DataFrame`
......@@ -1004,7 +1004,7 @@ Bokeh 是一个用于 Python 的交互式可视化库。 其目标是提供与 D
我们首先查看 HTTP 请求的工作方式,重点关注 GET 请求及其响应状态代码。 然后,我们进入 Jupyter 笔记本,并使用 Requests 库通过 Python 发出 HTTP 请求。 我们了解了如何使用 Jupyter 以及可与之交互的实际网页在笔记本中呈现 HTML。 发出请求后,我们看到了如何使用 BeautifulSoup 来解析 HTML 中的文本,并使用该库来刮擦表格数据。
抓取两个数据表后,我们将它们存储在 pandas`DataFrame`中。 第一个表包含每个国家的中央银行利率,第二个表包含人口。 我们将它们组合到一个表中,然后用于创建交互式可视化。
抓取两个数据表后,我们将它们存储在 Pandas`DataFrame`中。 第一个表包含每个国家的中央银行利率,第二个表包含人口。 我们将它们组合到一个表中,然后用于创建交互式可视化。
最后,我们使用 Bokeh 在 Jupyter 中渲染交互式可视化效果。 我们看到了如何使用 Bokeh API 创建各种自定义图,并创建了具有特定交互功能(例如缩放,平移和悬停)的散点图。 在定制方面,我们明确显示了如何为每个数据样本设置点半径和颜色。 此外,当使用 Bokeh 探索被抓取的人口数据时,将工具提示悬停在各个点上时会显示国家名称和相关数据。
......
......@@ -385,6 +385,6 @@ y.groupby(df.Doors).mean()
我们了解了什么是多项式回归,即使用更高阶的多项式为多维数据创建更好的复杂曲线。 我们还看到了它在 Python 中的实现。
然后,我们讨论了多元回归,它稍微复杂一些。 我们看到了当有多个因素影响我们预测的数据时如何使用它。 我们看了一个有趣的示例,该示例使用 Python 和一个非常强大的工具 pandas 预测了汽车的价格。
然后,我们讨论了多元回归,它稍微复杂一些。 我们看到了当有多个因素影响我们预测的数据时如何使用它。 我们看了一个有趣的示例,该示例使用 Python 和一个非常强大的工具 Pandas 预测了汽车的价格。
最后,我们研究了多层次模型的概念。 我们了解了一些挑战,以及将它们放在一起时的思考方式。 在下一章中,我们将学习一些使用 Python 的机器学习技术。
\ No newline at end of file
......@@ -125,7 +125,7 @@ testY = purchaseAmount[80:]
现在,在前面的部分中,我已经说过,您不应该像这样将数据集一分为二,而是应该随机抽样以进行训练和测试。 但是在这种情况下,由于我的原始数据无论如何都是随机生成的,因此可以解决问题,所以实际上并没有韵律或原因。 但是在实际数据中,您需要在拆分数据之前先对其进行混洗。
现在,我们将介绍一种方便的方法,您可以将其用于整理数据的目的。 另外,如果您使用的是 pandas 软件包,则其中有一些方便的功能可以自动为您制作训练和测试数据集。 但是,我们将在这里使用 Python 列表进行操作。 因此,让我们可视化最终得到的训练数据集。 我们将散布我们的培训页面速度和购买金额的图表。
现在,我们将介绍一种方便的方法,您可以将其用于整理数据的目的。 另外,如果您使用的是 Pandas 软件包,则其中有一些方便的功能可以自动为您制作训练和测试数据集。 但是,我们将在这里使用 Python 列表进行操作。 因此,让我们可视化最终得到的训练数据集。 我们将散布我们的培训页面速度和购买金额的图表。
```py
scatter(trainX, trainY)
......
......@@ -228,9 +228,9 @@ Array[10 10 10 10]
Pandas库由 Wes McKinny 在 AQR Capital Management 工作时开发。 他想要一种足够灵活的工具来对财务数据进行定量分析。 后来,Chang She 加入了他,并帮助进一步开发了该软件包。
pandas 库是一个开放源代码 Python 库,专门用于数据分析。 它建立在 NumPy 上,可以轻松处理数据。 NumPy 是一个相当底层的工具,可以很好地处理矩阵。
Pandas 库是一个开放源代码 Python 库,专门用于数据分析。 它建立在 NumPy 上,可以轻松处理数据。 NumPy 是一个相当底层的工具,可以很好地处理矩阵。
pandas 库在 Python 世界中带来了 R 的丰富功能,可以处理数据。 它具有高效的数据结构,可以处理数据,执行快速联接以及从各种来源读取数据,仅举几例。
Pandas 库在 Python 世界中带来了 R 的丰富功能,可以处理数据。 它具有高效的数据结构,可以处理数据,执行快速联接以及从各种来源读取数据,仅举几例。
## Pandas的数据结构
......@@ -442,7 +442,7 @@ Minor_axis axis: 0 to 2
在前面的命令中,`open()`函数打开与文件的连接。 `json.load()`函数将数据加载到 Python 中。 `json_data.close()`功能关闭与文件的连接。
pandas 库还提供了读取 JSON 文件的功能,可以使用`pd.read_json()`对其进行访问。
Pandas 库还提供了读取 JSON 文件的功能,可以使用`pd.read_json()`对其进行访问。
### 数据库
......@@ -996,7 +996,7 @@ MIDDLE/HIGH 53089 59.251116 65.905591
# 摘要
在本章中,我们熟悉了 NumPy 和 pandas 软件包。 我们了解了Pandas中不同的数据类型以及如何利用它们。 我们学习了如何执行数据清除和操作,其中我们处理了缺失值并执行了字符串操作。 本章为我们提供了数据科学的基础,您可以通过单击以下链接来更深入地了解 NumPy 和Pandas:
在本章中,我们熟悉了 NumPy 和 Pandas 软件包。 我们了解了Pandas中不同的数据类型以及如何利用它们。 我们学习了如何执行数据清除和操作,其中我们处理了缺失值并执行了字符串操作。 本章为我们提供了数据科学的基础,您可以通过单击以下链接来更深入地了解 NumPy 和Pandas:
* [**NumPy 文档**](http://docs.scipy.org/doc/)
* [**Pandas 文档**](http://pandas.pydata.org/)
......
......@@ -170,7 +170,7 @@ $> easy_install --version
在后一种情况下,您需要首先通过`pip``easy_install`安装它。
注意不要将软件包与模块混淆。 使用`pip`安装软件包。 在 Python 中,您导入一个模块。 有时,包和模块具有相同的名称,但是在许多情况下,它们不匹配。 例如,sklearn 模块包含在名为 Scikit-learn 的软件包中。
注意不要将软件包与模块混淆。 使用`pip`安装软件包。 在 Python 中,您导入一个模块。 有时,包和模块具有相同的名称,但是在许多情况下,它们不匹配。 例如,Sklearn模块包含在名为 Scikit-learn 的软件包中。
最后,要搜索和浏览可用于 Python 的 Python 软件包,请查看 [pypi.org](https://pypi.org/)
......@@ -452,13 +452,13 @@ SciPy 由 Travis Oliphant,Pearu Peterson 和 Eric Jones 共同发起的原始
# Pandas
Pandas软件包处理 NumPy 和 SciPy 无法执行的所有操作。 借助其特定的数据结构,即`DataFrame`和 Series,pandas 允许您处理不同类型(NumPy 的数组无法执行的操作)和时间序列的复杂数据表。 由于 Wes McKinney 的创造,您将能够轻松,平稳地从各种来源加载数据。 然后,您可以切片,切块,处理丢失的元素,添加,重命名,聚合,重塑形状,最后随意可视化数据:
Pandas软件包处理 NumPy 和 SciPy 无法执行的所有操作。 借助其特定的数据结构,即`DataFrame`和 Series,Pandas 允许您处理不同类型(NumPy 的数组无法执行的操作)和时间序列的复杂数据表。 由于 Wes McKinney 的创造,您将能够轻松,平稳地从各种来源加载数据。 然后,您可以切片,切块,处理丢失的元素,添加,重命名,聚合,重塑形状,最后随意可视化数据:
* [**网站**](http://pandas.pydata.org/)
* **打印时的版本**:0.23.1
* **建议的安装命令**`pip install pandas`
按照惯例,pandas 软件包是作为`pd`导入的:
按照惯例,Pandas 软件包是作为`pd`导入的:
```py
import pandas as pd
......@@ -466,7 +466,7 @@ import pandas as pd
# Pandas分析
这是一个 GitHub 项目,可以轻松地从 pandas`DataFrame`创建报告。 该软件包将在交互式 HTML 报告中提供以下措施,该报告用于评估数据科学项目中的手头数据:
这是一个 GitHub 项目,可以轻松地从 Pandas`DataFrame`创建报告。 该软件包将在交互式 HTML 报告中提供以下措施,该报告用于评估数据科学项目中的手头数据:
* **基本知识**,例如类型,唯一值和缺失值
* **分位数统计信息**,例如最小值,Q1,中位数,Q3,最大值,范围和四分位数范围
......@@ -525,7 +525,7 @@ import matplotlib.pyplot as plt
# Seaborn
由于这个原因,使用 Matplotlib 制作漂亮的图形确实非常耗时,[Michael Waskom](http://www.cns.nyu.edu/~mwaskom/) 开发了 Seaborn,这是一种高级可视化工具 基于 Matplotlib 的软件包,并与 pandas 数据结构(例如 Series 和`DataFrame`)集成在一起,能够产生信息丰富且美观的统计可视化。
由于这个原因,使用 Matplotlib 制作漂亮的图形确实非常耗时,[Michael Waskom](http://www.cns.nyu.edu/~mwaskom/) 开发了 Seaborn,这是一种高级可视化工具 基于 Matplotlib 的软件包,并与 Pandas 数据结构(例如 Series 和`DataFrame`)集成在一起,能够产生信息丰富且美观的统计可视化。
* [**网站**](http://seaborn.pydata.org/)
* **打印时的版本**:0.9.0
......@@ -1235,7 +1235,7 @@ In: print (type(iris.data)) Out: <class 'numpy.ndarray'>
散点图矩阵以矩阵格式排列,其列和行是数据集变量。 矩阵的元素包含单个散点图,其`x`值由矩阵的行变量确定,`y`值由列变量确定。 矩阵的对角元素可以同时在其行和列中包含分布直方图或变量的其他单变量表示形式。
pandas 库提供了一种现成的功能,可快速构建散点图矩阵并开始探索数据集中定量变量之间的关系和分布:
Pandas 库提供了一种现成的功能,可快速构建散点图矩阵并开始探索数据集中定量变量之间的关系和分布:
```py
In: import pandas as pd
......@@ -1298,7 +1298,7 @@ Out: (1605, 119) (1605,)
有时,您可能必须使用 Web 浏览器或`wget`命令(在 Linux 系统上)直接从其存储库下载数据集。
如果您已经将数据下载并解压缩(如果需要)到工作目录中,则 NumPy 和 pandas 库及其各自的`loadtxt``read_csv`函数提供了加载数据并开始工作的最简单方法。
如果您已经将数据下载并解压缩(如果需要)到工作目录中,则 NumPy 和 Pandas 库及其各自的`loadtxt``read_csv`函数提供了加载数据并开始工作的最简单方法。
例如,如果您打算分析波士顿的住房数据并使用[这个页面](http://mldata.org/repository/data/viewslug/regression-datasets-housing)中提供的版本,则必须首先下载 您本地目录中的`regression-datasets-housing.csv`文件。
......@@ -1348,7 +1348,7 @@ In: print (housing[0,:3], 'n', housing_int[0,:3]) Out: [ 6.32000000e-03 1.80
因此,如果要使用`loadtxt`函数,则将出现值错误,因为数组必须具有相同类型的所有元素。 变量类是一个字符串,而其他变量则由浮点值组成。
由于`DataFrame`数据结构可以轻松处理由不同类型的变量组成的矩阵形式(每列行)的数据集,因此 pandas 库为这种情况和许多类似情况提供了解决方案。
由于`DataFrame`数据结构可以轻松处理由不同类型的变量组成的矩阵形式(每列行)的数据集,因此 Pandas 库为这种情况和许多类似情况提供了解决方案。
首先,只需下载`datasets-uci-iris.csv`文件并将其保存在本地目录中。
......@@ -1366,7 +1366,7 @@ In: iris_filename = 'datasets-uci-iris.csv'
为了不使本书中印刷的代码片段过于繁琐,我们经常对其进行包装并使其格式正确。 必要时,为了安全地中断代码并将其包装到新行,我们使用反斜杠符号`\`,如前面的代码示例中所示。 当您自己渲染本书的代码时,您可以忽略反斜杠符号并继续在同一行上编写所有指令,或者可以对反斜杠进行数字化后再开始一行,并继续执行代码指令。 请注意,输入反斜杠然后在同一行上继续执行指令将导致执行错误。
除了文件名之外,您还可以指定分隔符(`sep`),小数点的表示方式(十进制),是否有标头(在这种情况下为`header=None`;通常,如果您有标头,则`header=0`),以及该变量的名称(您可以使用列表;否则,pandas 将提供一些自动命名)。
除了文件名之外,您还可以指定分隔符(`sep`),小数点的表示方式(十进制),是否有标头(在这种情况下为`header=None`;通常,如果您有标头,则`header=0`),以及该变量的名称(您可以使用列表;否则,Pandas 将提供一些自动命名)。
另外,我们定义的名称使用单个单词(而不是空格,而是使用下划线)。 因此,我们以后可以像调用方法一样直接调用它们来直接提取单个变量。 例如,`iris.sepal_length`将提取萼片长度数据。
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
......@@ -5,7 +5,7 @@
在本章中,您将学习如何执行以下操作:
* 使用`matplotlib`程序包中的基本`pyplot`功能
* 利用 pandas`DataFrame`进行**探索性数据分析****EDA**
* 利用 Pandas`DataFrame`进行**探索性数据分析****EDA**
* 与 Seaborn 一起创建漂亮的交互式图表
* 可视化我们在第 3 章,“数据管道”和第 4 章,“机器学习”中讨论的
的机器学习和优化过程
......@@ -34,9 +34,9 @@ In: import numpy as np
import matplotlib as mpl
```
这样,我们始终可以将[MATLAB 样的模块`pyplot`]称为`plt`,并在`mpl`的帮助下访问完整的`matplotlib`功能集。
这样,我们始终可以将 MATLAB 风格的模块`pyplot`称为`plt`,并在`mpl`的帮助下访问完整的`matplotlib`功能集。
如果您正在使用 Jupyter 笔记本(或 Jupyter Lab),则可以使用以下行魔术:`%matplotlib`内联。 在笔记本的单元格中写入命令并运行命令后,您可以直接在笔记本本身上绘制绘图,而不必在单独的窗口中显示图形(默认情况下,`matplotlib`的 GUI 后端是`TkAgg`后端)。 如果您更喜欢 Qt( [www.qt.io](https://www.qt.io/)等通常随 Python 科学发行版一起分发的后端,则只需运行以下行魔术:`%matplotlib` Qt。
如果您正在使用 Jupyter 笔记本(或 Jupyter Lab),则可以使用以下行魔术:`%matplotlib`内联。 在笔记本的单元格中写入命令并运行命令后,您可以直接在笔记本本身上绘制绘图,而不必在单独的窗口中显示图形(默认情况下,`matplotlib`的 GUI 后端是`TkAgg`后端)。 如果您更喜欢 [Qt](https://www.qt.io/) 等通常随 Python 科学发行版一起分发的后端,则只需运行以下行魔术:`%matplotlib` Qt。
# 尝试曲线图
......@@ -193,7 +193,7 @@ In: import numpy as np
![](img/baa020e8-e7f1-489c-b3c2-19d0353acf81.png)
有几种方法可以个性化此类图并获得有关分析分布的进一步见解。 首先,通过更改 bin 的数量,您将更改分布的离散方式(离散是将连续函数或一系列值转换为可减少的,[可数的一组数字的过程](http://en.wikipedia.org/wiki/Discretization))。 通常,10 到 20 个 bin 可以很好地理解分布,尽管它实际上取决于数据集的大小以及分布。 例如,Freedman-Diaconis 规则规定,直方图中要有效地可视化数据的最佳 bin 数量取决于 bin 的宽度,可以使用**四分位间距****IQR**)和观察次数:
有几种方法可以个性化此类图并获得有关分析分布的进一步见解。 首先,通过更改箱子的数量,您将更改分布的离散方式(离散是将连续函数或一系列值转换为可减少的,[可数的一组数字的过程](http://en.wikipedia.org/wiki/Discretization))。 通常,10 到 20 个箱子可以很好地理解分布,尽管它实际上取决于数据集的大小以及分布。 例如,Freedman-Diaconis 规则规定,直方图中要有效地可视化数据的最佳箱子数量取决于箱子的宽度,可以使用**四分位间距****IQR**)和观察次数:
![](img/cf8aabb7-2178-4f2b-ba45-55c8039b3928.png)
......@@ -330,7 +330,7 @@ In: import pandas as pd
# 使用箱线图和直方图
分发应该始终是数据中要检查的第一个方面。 Boxplots 可以起草分布图中的关键数据,并帮助您发现异常值。 只需在`DataFrame`上使用`boxplot`方法即可获得快速概述:
分发应该始终是数据中要检查的第一个方面。 盒子图可以起草分布图中的关键数据,并帮助您发现异常值。 只需在`DataFrame`上使用`boxplot`方法即可获得快速概述:
```py
In: boxplots = iris_df.boxplot(return_type='axes')
......@@ -371,7 +371,7 @@ In: single_distribution = iris_df['petal width (cm)'].plot(kind='hist',
![](img/d72ceacc-0d62-44a0-99f2-b54cbe036d6d.png)
您可以使用 plot 方法获得直方图和密度图。 该方法使您可以表示整个数据集,特定的变量组(您只需要提供字符串名称列表并进行一些华丽的索引编制),甚至单个变量即可。
您可以使用`plot`方法获得直方图和密度图。 该方法使您可以表示整个数据集,特定的变量组(您只需要提供字符串名称列表并进行一些华丽的索引编制),甚至单个变量即可。
# 绘制散点图
......@@ -450,7 +450,7 @@ In: from pandas.tools.plotting import parallel_coordinates
# 介绍 Seaborn
Seaborn 由 Michael Waskom 创建并托管在 [PyData 网站](http://seaborn.pydata.org/)上,是一个将底层 Matplotlib 与整个 pyData 堆栈包装在一起的库,允许集成图表 包含 NumPy 和 pandas 的数据结构,以及 SciPy 和 StatModels 的统计例程。 借助内置主题以及专为揭示数据模式而设计的调色板,所有这些工作都特别注重美学。
Seaborn 由 Michael Waskom 创建并托管在 [PyData 网站](http://seaborn.pydata.org/)上,是一个将底层 Matplotlib 与整个 pyData 堆栈包装在一起的库,允许集成图表 包含 NumPy 和 Pandas 的数据结构,以及 SciPy 和 StatModels 的统计例程。 借助内置主题以及专为揭示数据模式而设计的调色板,所有这些工作都特别注重美学。
如果您当前尚未在系统上安装 Seaborn(例如,Anaconda 发行版默认提供它),则可以通过`pip``conda`轻松获得它(提醒您`conda`版本可能落后 直接从 PyPI(Python 包索引)获取的`pip`版本后面。
......@@ -497,7 +497,7 @@ Seaborn 中有五个预设主题:
* `white`
* `ticks`
默认值为`darkgrid`。 您可以通过使用`set_style`命令和首选主题的名称,然后运行 plot 命令轻松地尝试每个命令:
默认值为`darkgrid`。 您可以通过使用`set_style`命令和首选主题的名称,然后运行`plot`命令轻松地尝试每个命令:
```py
In: sns.set_style('whitegrid')
......@@ -610,7 +610,7 @@ In: new_palette=sns.color_palette('hls', 10)
Seaborn 不仅使您的图表更加美观,而且在其方面也易于控制。 它还为您提供了用于 EDA 的新工具,可帮助您发现变量之间的分布和关系。
在继续之前,让我们重新加载程序包,并以 pandas`DataFrame`格式准备好 Iris 和波士顿数据集:
在继续之前,让我们重新加载程序包,并以 Pandas`DataFrame`格式准备好 Iris 和波士顿数据集:
```py
In: import seaborn as sns
......@@ -636,7 +636,7 @@ In: import seaborn as sns
df_boston['target_level'] = pd.qcut(y_boston,3)
```
至于虹膜数据集,目标变量已转换为虹膜种类的描述性文本。 对于波士顿数据集,连续目标变量(自有住房的中位数)已分为三个相等的部分,分别代表较低,中位数和较高的价格(使用 pandas 函数`qcut`)。
至于虹膜数据集,目标变量已转换为虹膜种类的描述性文本。 对于波士顿数据集,连续目标变量(自有住房的中位数)已分为三个相等的部分,分别代表较低,中位数和较高的价格(使用 Pandas 函数`qcut`)。
Seaborn 首先可以找出离散值或分类变量与数字变量之间的关系,从而帮助您进行数据探索。 这可以通过`catplot`功能实现:
......@@ -852,9 +852,9 @@ In: from sklearn.learning_curve import validation_curve
# 随机森林功能的重要性
正如在第 3 章,“数据管道”的结论中所讨论的那样,选择正确的变量可以通过减少噪声,估计方差和过多计算负担来改善学习过程 。 集成方法(例如,RandomForest)可以为您提供与数据集中其他变量一起使用时变量所扮演角色的不同视图。
正如在第 3 章,“数据管道”的结论中所讨论的那样,选择正确的变量可以通过减少噪声,估计方差和过多计算负担来改善学习过程 。 集成方法(例如,随机森林)可以为您提供与数据集中其他变量一起使用时变量所扮演角色的不同视图。
在这里,我们向您展示如何提取 RandomForest 和 Extra-Tree 模型的重要性。 重要性的计算方式最初由 Breiman,Friedman 等人在《分类和回归树》一书中描述。 1984 年。这是一个真正的经典,为分类树奠定了坚实的基础。 在本书中,重要性用*基尼重要性**平均减少杂质*来描述,这是由于特定变量平均超过 集成中的所有树木。 换句话说,平均减少杂质是在该变量上分割的节点的总错误减少乘以路由到每个节点的样本数。 值得注意的是,根据这种重要性计算方法,减少错误不仅取决于误差度量-基尼或熵用于分类,而 MSE 用于回归,而且树顶的拆分也被认为更重要,因为它们涉及处理更多问题。 例子。
在这里,我们向您展示如何提取随机森林和极端树模型的重要性。 重要性的计算方式最初由 Breiman,Friedman 等人在《分类和回归树》一书中描述。 1984 年。这是一个真正的经典,为分类树奠定了坚实的基础。 在本书中,重要性用*基尼重要性**平均减少杂质*来描述,这是由于特定变量平均超过 集成中的所有树木。 换句话说,平均减少杂质是在该变量上分割的节点的总错误减少乘以路由到每个节点的样本数。 值得注意的是,根据这种重要性计算方法,减少错误不仅取决于误差度量-基尼或熵用于分类,而 MSE 用于回归,而且树顶的拆分也被认为更重要,因为它们涉及处理更多问题。 例子。
在几个步骤中,我们将学习如何获取此类信息并将其投影到清晰的可视化文件中:
......@@ -889,11 +889,11 @@ In: from sklearn.datasets import load_boston
![](img/f04b4cbf-f992-42af-abd8-435893538ac4.png)
对于每个估计量(在我们的示例中,我们有 100 个模型),该算法估计得分以对每个变量的重要性进行排名。 RandomForest 模型由决策树组成,决策树可以由许多分支组成,因为该算法试图获得非常小的终叶。 如果在随意排列其原始值之后,排列后的模型的结果预测与原始模型的预测相比在准确性方面有很大差异,则认为该变量之一很重要。
对于每个估计量(在我们的示例中,我们有 100 个模型),该算法估计得分以对每个变量的重要性进行排名。 随机森林模型由决策树组成,决策树可以由许多分支组成,因为该算法试图获得非常小的终叶。 如果在随意排列其原始值之后,排列后的模型的结果预测与原始模型的预测相比在准确性方面有很大差异,则认为该变量之一很重要。
重要性向量在估计器的数量上平均,并且估计的标准偏差通过列表理解(重要性和`std`的赋值)进行计算。 现在,根据重要性得分(向量索引)进行排序,结果将投影到带有标准偏差提供的误差线的条形图上。
在我们的 LSTAT 分析中,该区域中处于较低地位的人口百分比和 RM(即每个住宅的平均房间数)被指出是我们 RandomForest 模型中最具决定性的变量。
在我们的 LSTAT 分析中,该区域中处于较低地位的人口百分比和 RM(即每个住宅的平均房间数)被指出是我们随机森林模型中最具决定性的变量。
# 梯度助推树部分依赖图
......@@ -943,7 +943,7 @@ Bottle 是一个 Python 网络框架,是 HTTP 上微型应用程序的起点
4. 下一步是 API 端点的定义。 当对指定为参数的路径执行 HTTP 调用时,`route`装饰器将应用其后定义的功能。 请注意,在路径中,它表示`name`,这是即将到来的函数的参数。 这意味着`name`是呼叫的参数; 您可以在 HTTP 调用中选择所需的任何字符串,然后您的选择将作为参数名称传递给函数。
5. 然后,在功能主页中,返回了带有 HTML 代码的模板。 以一种更简单的方式,将其视为`template`函数,该函数将创建您将从浏览器中看到的页面。
**Template**,是一个示例,它只是一个普通的HTML页面,但它可能更复杂(它实际上可以是一个模板页面,其中需要填充一些空白)。 模板的完整描述超出了本节的范围,因为我们仅将框架用于简单的纯输出。 如果您需要其他信息,请浏览Bottle帮助页面。
**模板**,是一个示例,它只是一个普通的HTML页面,但它可能更复杂(它实际上可以是一个模板页面,其中需要填充一些空白)。 模板的完整描述超出了本节的范围,因为我们仅将框架用于简单的纯输出。 如果您需要其他信息,请浏览Bottle帮助页面。
6. 最后,在`print`功能之后,有核心`run`功能。 这是一个阻止功能,它将在作为参数提供的主机和端口上设置 Web 服务器。 当您运行清单中的代码时,一旦执行了该功能,就可以打开浏览器并将其指向`http://localhost:9099/personal/Carl`,您将找到以下文本:`Hi Carl!`
......@@ -963,9 +963,9 @@ Bottle 是一个 Python 网络框架,是 HTTP 上微型应用程序的起点
print("Try going to http://localhost:{}/predict".format(port)) run(host='localhost', port=port) # Try insert the following values: # [ 5.1, 3.5, 1.4, 0.2] -> setosa # [ 7.0 3.2, 4.7, 1.4] -> versicolor # [ 6.3, 3.3, 6.0, 2.5] -> virginica
```
导入后,在这里我们使用 get 装饰器,指定仅对 HTTP GET 调用有效的路由。 装饰器以及后面的函数没有参数,因为所有功能都应插入`predict`函数中定义的 HTML 表单中。 表单提交后,将使用 HTTP `POST`传递到`/prediction`页面。
导入后,在这里我们使用`get`装饰器,指定仅对 HTTP GET 调用有效的路由。 装饰器以及后面的函数没有参数,因为所有功能都应插入`predict`函数中定义的 HTML 表单中。 表单提交后,将使用 HTTP `POST`传递到`/prediction`页面。
现在,我们需要为此调用创建一个路由,这就是我们在`do_prediction`函数中所做的。 它的装饰器是/ prediction 页面上的`post`(即与`get`相反;它仅定义`POST`路由)。 数据被解析并转换为 double(默认参数为字符串),然后将特征向量馈送到`classifier`全局变量中以获得预测。 这是使用简单模板返回的。 对象请求包含传递给服务的所有参数,包括我们 *POST* 到路由的整个变量。 最后,似乎我们只需要定义全局变量分类器-即在虹膜数据集上训练的分类器-最后,我们可以调用`run`函数。
现在,我们需要为此调用创建一个路由,这就是我们在`do_prediction`函数中所做的。 它的装饰器是`/prediction`页面上的`post`(即与`get`相反;它仅定义`POST`路由)。 数据被解析并转换为`double`(默认参数为字符串),然后将特征向量馈送到`classifier`全局变量中以获得预测。 这是使用简单模板返回的。 对象请求包含传递给服务的所有参数,包括我们 *POST* 到路由的整个变量。 最后,似乎我们只需要定义全局变量分类器-即在虹膜数据集上训练的分类器-最后,我们可以调用`run`函数。
对于此虚拟示例,我们将逻辑回归器用作分类器,并在完整的鸢尾花数据集上进行训练,而所有参数均保留为默认值。 在实际情况下,这里您将尽可能优化分类器。
......
......@@ -105,7 +105,7 @@ In: nx.to_dict_of_lists(G) Out: {1: [2, 4], 2: [1, 3], 3: [2, 4], 4: [1, 3]}
In: nx.to_edgelist(G) Out: [(1, 2, {}), (1, 4, {}), (2, 3, {}), (3, 4, {})]
```
最后,图可以描述为 NumPy 矩阵。 如果矩阵在`(i, j)`位置包含`1`,则表示`i``j`节点之间存在链接。 由于矩阵通常只包含很少的 1(与零的数量相比),因此通常表示为稀疏(SciPy)矩阵,NumPy 矩阵或 pandas `DataFrame`
最后,图可以描述为 NumPy 矩阵。 如果矩阵在`(i, j)`位置包含`1`,则表示`i``j`节点之间存在链接。 由于矩阵通常只包含很少的 1(与零的数量相比),因此通常表示为稀疏(SciPy)矩阵,NumPy 矩阵或 Pandas `DataFrame`
请注意,矩阵描述是详尽无遗的。 因此,将无向图转换为有向图,将连接`(i, j)`的链接转换为两个链接,即`(i, j)``(j, i)`。 该表示形式通常被称为邻接矩阵或连接矩阵。
......
......@@ -87,7 +87,7 @@ In: N_CLASSES = 43
在这一点上,我们必须读取图像并调整其大小,以创建观察矩阵和标签数组。 为此,我们执行以下步骤:
1. 导入处理所需的模块。 最重要的是 Scikit-learn(即 sklearn),其中包含处理图像的功能。
1. 导入处理所需的模块。 最重要的是 Scikit-learn(即 Sklearn),其中包含处理图像的功能。
2. 我们一个接一个地读取图像。 标签包含在路径中。 例如,图像`GTSRB/Final_Training/Images/00000/00003_00024.ppm`的标签为`00000`,即`0`; 并且图像`GTSRB/Final_Training/Images/00025/00038_00005.ppm`带有标签`00025`,即`25`。 标签存储为标记编码的数组,该数组是一个 43 单元长的数组,只有一个值为`1`的数组(所有其他均为`0`)。
3. 图像以 **PPM****可移植像素图**)格式存储,这是一种将像素存储在图像中的无损方式。 Scikit 图像或只是 [skimage](https://scikit-image.org/) 可以使用功能`imread`读取该格式。 如果您的系统上尚未安装 Scikit 映像,只需在 shell 中键入以下内容:`conda install scikit-image``pip install -U scikit-image`。 返回的对象是 3D NumPy 数组。
4. 然后将包含图像像素表示的 3D NumPy 数组(具有三个通道-红色,蓝色和绿色)转换为灰度。 在这里,我们首先转换为 LAB 颜色空间(请参见[这个页面](https://hidefcolor.com/blog/color-management/what-is-lab-color-space)-该颜色空间比线性颜色更具感知性) 其他,这意味着颜色值的相同变化量应产生相同视觉重要性的影响),然后保留第一个通道(包含亮度)。 再次,此操作很容易使用 skimage 完成。 结果,我们有一个包含图像像素的一维 NumPy 数组。
......
......@@ -103,7 +103,7 @@ HDFS 的体系结构是主从结构。 如果主服务器(称为**名称节点
**Apache Spark** 是 Hadoop 的演进,并在最近几年变得非常流行。 与 Hadoop 及其以 Java 和批量为重点的设计相比,Spark 能够以快速简便的方式生成迭代算法。 此外,它具有用于多种编程语言的非常丰富的 API 套件,并且本身支持许多不同类型的数据处理(机器学习,流传输,图形分析,SQL 等)。
Apache Spark 是一个集群框架,旨在用于大数据的快速通用处理。 速度的提高之一来自以下事实:与 Hadoop,MapReduce 和 HDFS 一样,每项工作之后的数据都保留在内存中,而不是存储在文件系统中(除非您愿意这样做)。 由于内存提供的延迟和带宽比物理磁盘更具性能,因此这种事情使迭代作业(例如群集 K-means 算法)越来越快。 因此,运行 Spark 的集群需要为每个节点配备大量 RAM。
Apache Spark 是一个集群框架,旨在用于大数据的快速通用处理。 速度的提高之一来自以下事实:与 Hadoop,MapReduce 和 HDFS 一样,每项工作之后的数据都保留在内存中,而不是存储在文件系统中(除非您愿意这样做)。 由于内存提供的延迟和带宽比物理磁盘更具性能,因此这种事情使迭代作业(例如群集 K 均值算法)越来越快。 因此,运行 Spark 的集群需要为每个节点配备大量 RAM。
尽管 Spark 是在 Scala(类似于 Java 一样在 JVM 上运行)中开发的,但它具有适用于多种编程语言的 API,包括 Java,Scala,Python 和 R。在本书中,我们将重点介绍 Python。
......@@ -616,7 +616,7 @@ In: bcast_dataset.unpersist()
# Spark 中的数据预处理
到目前为止,我们已经看到了如何从本地文件系统和 HDFS 加载文本数据。 文本文件可以包含非结构化数据(例如文本文档)或结构化数据(例如 CSV 文件)。 至于半结构化数据,就像包含 JSON 对象的文件一样,Spark 具有特殊的例程,可以将文件转换为`DataFrame`,类似于 R 和 Python 包 pandas 中的`DataFrame``DataFrame`与 RDBMS 表非常相似,其中设置了模式。
到目前为止,我们已经看到了如何从本地文件系统和 HDFS 加载文本数据。 文本文件可以包含非结构化数据(例如文本文档)或结构化数据(例如 CSV 文件)。 至于半结构化数据,就像包含 JSON 对象的文件一样,Spark 具有特殊的例程,可以将文件转换为`DataFrame`,类似于 R 和 Python 包 Pandas 中的`DataFrame``DataFrame`与 RDBMS 表非常相似,其中设置了模式。
# CSV 文件和 Spark DataFrames
......@@ -703,7 +703,7 @@ In: df.filter('gender is not null and balance > 0').show()
# 处理丢失的数据
数据预处理的一个常见问题是如何处理丢失的数据。 Spark`DataFrame`pandas`DataFrame`类似,提供了您可以对它们执行的多种操作。 例如,获得仅包含完整行的数据集的最简单选择是丢​​弃包含缺失信息的行。 为此,在 Spark`DataFrame`中,我们首先必须访问`DataFrame``na`属性,然后调用`drop`方法。 结果表将仅包含完整的行:
数据预处理的一个常见问题是如何处理丢失的数据。 Spark`DataFrame`Pandas`DataFrame`类似,提供了您可以对它们执行的多种操作。 例如,获得仅包含完整行的数据集的最简单选择是丢​​弃包含缺失信息的行。 为此,在 Spark`DataFrame`中,我们首先必须访问`DataFrame``na`属性,然后调用`drop`方法。 结果表将仅包含完整的行:
```py
In: df.na.drop().show()
......@@ -1155,7 +1155,7 @@ Out: Row(features=SparseVector(41, {1: 8.0, 7: 181.0, 15: 1.0, 16: 2.0, 22:
* 群集(`pyspark.ml.clustering`程序包):KMeans
* 推荐人(`pyspark.ml.recommendation`软件包):ALS(协作过滤推荐器,基于交替最小二乘法)
让我们回到 KDD99 挑战的目标。 现在,该实例化随机森林分类器并设置其参数了。 要设置的参数是`featuresCol`(包含特征矩阵的列),`labelCol`(包含目标标签的数据框的列),`seed`(使实验可复制的随机种子)和`maxBins` (用于树的每个节点中的分割点的最大 bin 数)。 森林中树木数量的默认值为`20`,每棵树的最大深度为 5 级。 此外,默认情况下,此分类器在`DataFrame`中创建三个输出列:`rawPrediction`(用于存储每个可能标签的预测得分),`probability`(用于存储每个标签的可能性)和`prediction`(最多 可能的标签):
让我们回到 KDD99 挑战的目标。 现在,该实例化随机森林分类器并设置其参数了。 要设置的参数是`featuresCol`(包含特征矩阵的列),`labelCol`(包含目标标签的数据框的列),`seed`(使实验可复制的随机种子)和`maxBins` (用于树的每个节点中的分割点的最大箱子数)。 森林中树木数量的默认值为`20`,每棵树的最大深度为 5 级。 此外,默认情况下,此分类器在`DataFrame`中创建三个输出列:`rawPrediction`(用于存储每个可能标签的预测得分),`probability`(用于存储每个标签的可能性)和`prediction`(最多 可能的标签):
```py
In: from pyspark.ml.classification import RandomForestClassifier
......
......@@ -103,7 +103,7 @@ PixieGateway 是一项突破性的创新,具有可以显着加快分析操作
我认为读者(尤其是不熟悉 Apache Spark 的读者)将喜欢本章,因为它比上一章更容易理解。 关键要点是如何构建可通过连接到 Spark 集群的 Jupyter笔记本进行扩展的分析。
第 8 章,“金融时间序列分析和预测”,我谈论时间序列分析,它是数据科学中非常重要的领域,在行业中有许多实际应用。 本章首先深入探讨 NumPy 库,它是许多其他库(例如 pandas 和 SciPy)的基础。 然后,我继续构建示例应用程序,该应用程序分析了由历史库存数据组成的时间序列,分为两个部分:
第 8 章,“金融时间序列分析和预测”,我谈论时间序列分析,它是数据科学中非常重要的领域,在行业中有许多实际应用。 本章首先深入探讨 NumPy 库,它是许多其他库(例如 Pandas 和 SciPy)的基础。 然后,我继续构建示例应用程序,该应用程序分析了由历史库存数据组成的时间序列,分为两个部分:
* 第 1 部分:提供时间序列的统计信息,包括各种图表,例如自相关函数(ACF)和部分自相关函数(PACF)
* 第 2 部分:使用`statsmodels` Python 库,基于 ARIMA 算法构建预测模型
......
......@@ -77,11 +77,11 @@ GitHub 上的 Jupyter笔记本的搜索结果
请务必注意,PixieDust `display()` API 主要支持两种流行的数据处理框架:
* [**pandas**](https://pandas.pydata.org):迄今为止,最流行的 Python 数据分析包,pandas 提供了两种主要数据结构:用于处理两个- 一维列状数据集和系列。
* [**pandas**](https://pandas.pydata.org):迄今为止,最流行的 Python 数据分析包,Pandas 提供了两种主要数据结构:用于处理两个- 一维列状数据集和系列。
### 注意
当前,PixieDust `display()`仅支持 pandas DataFrames。
当前,PixieDust `display()`仅支持 Pandas DataFrames。
* [**Apache Spark `DataFrame`**](https://spark.apache.org/docs/latest/sql-programming-guide.html):这是高级数据结构 用于操纵整个 Spark 集群中的分布式数据集。 Spark`DataFrame`构建在较低级 **RDD****弹性分布式数据集**的简称)之上,并添加了支持 SQL 查询的功能。
......@@ -250,7 +250,7 @@ PixieDust 内置数据集
可以根据组织的需要定制预定义的策划数据集列表,这是朝着*数据*支柱迈出的重要一步,如上一章所述。
然后,用户可以使用预构建数据集的 ID 再次再次调用`sampleData` API,并在 Jupyter Kernel 中的 Spark 框架可用的情况下获取 Spark DataFrame;如果没有,则退回到 pandas `DataFrame`
然后,用户可以使用预构建数据集的 ID 再次再次调用`sampleData` API,并在 Jupyter Kernel 中的 Spark 框架可用的情况下获取 Spark DataFrame;如果没有,则退回到 Pandas `DataFrame`
在以下示例中,我们在连接了 Spark 的笔记本电脑上调用`sampleData()`。 我们还调用`enableSparkJobProgressMonitor()`以显示有关操作中涉及的 Spark 作业的实时信息。
......@@ -282,7 +282,7 @@ cars = pixiedust.sampleData(1)
使用 PixieDust sampleData API 加载内置数据集
用户还可以传递指向可下载文件的任意 URL。 PixieDust 当前支持 JSON 和 CSV 文件。 在这种情况下,PixieDust 将自动下载文件,将缓存在临时区域中,检测格式,然后根据 Spark 是否在笔记本电脑中可用加载到 Spark 或 pandas`DataFrame`中。 请注意,即使使用`forcePandas`关键字参数可以使用 Spark,用户也可以强制加载到Pandas中:
用户还可以传递指向可下载文件的任意 URL。 PixieDust 当前支持 JSON 和 CSV 文件。 在这种情况下,PixieDust 将自动下载文件,将缓存在临时区域中,检测格式,然后根据 Spark 是否在笔记本电脑中可用加载到 Spark 或 Pandas`DataFrame`中。 请注意,即使使用`forcePandas`关键字参数可以使用 Spark,用户也可以强制加载到Pandas中:
```py
import pixiedust
......@@ -309,7 +309,7 @@ import pixiedust
london_info = pixiedust.sampleData("https://files.datapress.com/london/dataset/london-borough-profiles/2015-09-24T15:50:01/London-borough-profiles.zip")
```
结果如下(假设您的笔记本计算机已连接到 Spark,否则将加载 pandas DataFrame):
结果如下(假设您的笔记本计算机已连接到 Spark,否则将加载 Pandas DataFrame):
```py
Downloading 'https://files.datapress.com/london/dataset/london-borough-profiles/2015-09-24T15:50:01/London-borough-profiles.zip' from https://files.datapress.com/london/dataset/london-borough-profiles/2015-09-24T15:50:01/London-borough-profiles.zip
......@@ -431,7 +431,7 @@ wrangle_data()模式编辑器
具有新列的模式编辑器
最后一步是单击**完成**按钮以将架构定义应用于原始文件,并创建一个 pandas `DataFrame`,它将在笔记本中用作变量。 此时,系统会向用户显示一个对话框,其中包含一个可以编辑的默认变量名,如以下屏幕截图所示:
最后一步是单击**完成**按钮以将架构定义应用于原始文件,并创建一个 Pandas `DataFrame`,它将在笔记本中用作变量。 此时,系统会向用户显示一个对话框,其中包含一个可以编辑的默认变量名,如以下屏幕截图所示:
![Wrangling data with pixiedust_rosie](img/00029.jpeg)
......@@ -457,7 +457,7 @@ display(wrangled_df)
* [散景](http://bokeh.pydata.org)
* [布鲁内尔](https://brunelvis.org)
但是,类似于数据加载和清理,在笔记本中使用这些库可能既困难又耗时。 这些库中的每一个都有各自的编程模型,并且 API 并不总是易于学习和使用的,特别是如果您不是经验丰富的开发人员。 另一个问题是这些库没有与常用数据处理框架(例如 pandas(可能是 Matplotlib 除外)或 Apache Spark)的高层接口,因此,在绘制数据之前需要进行大量数据准备。
但是,类似于数据加载和清理,在笔记本中使用这些库可能既困难又耗时。 这些库中的每一个都有各自的编程模型,并且 API 并不总是易于学习和使用的,特别是如果您不是经验丰富的开发人员。 另一个问题是这些库没有与常用数据处理框架(例如 Pandas(可能是 Matplotlib 除外)或 Apache Spark)的高层接口,因此,在绘制数据之前需要进行大量数据准备。
为解决此问题,PixieDust 提供了一个简单的`display()` API,该 API 使 Jupyter笔记本用户可以使用交互式图形界面来绘制数据而无需任何编码。 这个 API 实际上不会创建图表,但是会在根据用户选择通过调用其 API 委托给渲染器之前完成准备数据的所有繁重工作。
......
......@@ -225,7 +225,7 @@ app.run()
## 一个 GitHub 项目跟踪示例应用程序
让我们将到目前为止所学到的应用于实现示例应用程序。 为了解决问题,我们想使用 [GitHub Rest API](https://developer.github.com/v3) 搜索项目并将结果加载到 pandas`DataFrame`中进行分析。
让我们将到目前为止所学到的应用于实现示例应用程序。 为了解决问题,我们想使用 [GitHub Rest API](https://developer.github.com/v3) 搜索项目并将结果加载到 Pandas`DataFrame`中进行分析。
初始代码显示了欢迎屏幕,其中带有一个简单的输入框以输入 GitHub 查询和一个按钮来提交请求:
......@@ -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)向此 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}}`
### 注意
......@@ -580,7 +580,7 @@ class RepoAnalysis():
您也可以指定`pd_entity`,不带任何值。 在这种情况下,PixieApp 框架将使用传递为用于启动 PixieApp 应用程序的`run`方法的第一个参数的实体。 例如,以`cars`为Pandas的`my_pixieapp.run(cars)`或通过`pixiedust.sampleData()`方法创建的 Spark `DataFrame``pd_entity`的值也可以是返回实体的函数调用。 当您要在渲染之前动态计算实体时,这很有用。 与其他变量一样,`pd_entity`的范围可以是 PixieApp 类或在笔记本中声明的任何变量。
例如,我们可以在其自己的单元格中创建一个函数,该函数将前缀作为参数并返回 pandas `DataFrame`。 然后我们将其用作我的 PixieApp 中的`pd_entity`值,如以下代码所示:
例如,我们可以在其自己的单元格中创建一个函数,该函数将前缀作为参数并返回 Pandas `DataFrame`。 然后我们将其用作我的 PixieApp 中的`pd_entity`值,如以下代码所示:
```py
def compute_pdf(key):
......@@ -631,7 +631,7 @@ test.run()
在 PixieApp 中动态创建`DataFrame`
回到我们的`Github Tracking`应用程序,现在让我们将`pd_entity`值应用于从 GitHub Statistics API 加载的`DataFrame`。 我们创建了一个称为`load_commit_activity,`的方法,该方法负责将数据加载到 pandas`DataFrame`中,并将其与显示图表所需的`pd_options`一起返回:
回到我们的`Github Tracking`应用程序,现在让我们将`pd_entity`值应用于从 GitHub Statistics API 加载的`DataFrame`。 我们创建了一个称为`load_commit_activity,`的方法,该方法负责将数据加载到 Pandas`DataFrame`中,并将其与显示图表所需的`pd_options`一起返回:
```py
from datetime import datetime
......@@ -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)来确保在生成的 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:
......
......@@ -189,7 +189,7 @@ Pixiedust version 1.1.10
```
9. 如果一切顺利,您现在可以通过在`http://<server_ip>>:32222/admin`打开管理控制台来测试部署。 这次,管理控制台的默认凭据为`admin` / `changeme`,我们将在下一部分中说明如何更改它们。
9. 如果一切顺利,您现在可以通过在`http://<server_ip>>:32222/admin`打开管理控制台来测试部署。 这次,管理控制台的默认凭据为`admin`/`changeme`,我们将在下一部分中说明如何更改它们。
Kubernetes 安装说明中使用的`deployment.yml`文件引用了一个 Docker 映像,该映像已预先安装和配置了 PixieGateway 二进制文件及其所有依赖项。 PixieGateway Docker 映像可从[这个页面](https://hub.docker.com/r/dtaieb/pixiegateway-python35)获得。
......
......@@ -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 框架将自动将它们保留在单元元数据中。
......@@ -703,7 +703,7 @@ self._addHTMLTemplate('simpleTable.html', custom_arg = "Some value")
![Extending PixieDust visualizations](img/00091.jpeg)
pandas`DataFrame`上运行自定义可视化插件
Pandas`DataFrame`上运行自定义可视化插件
如 PixieDust 扩展层架构图所示,您还可以使用**渲染器扩展层**扩展 PixieDust,它比**显示扩展层**更具规范性,但提供了更多功能。 框,例如选项管理和临时数据计算缓存。 从用户界面的角度来看,用户可以使用图表区域右上角的**渲染器**下拉菜单在渲染器之间进行切换。
......@@ -775,7 +775,7 @@ class SimpleDisplayWithRenderer(BaseChartDisplay):
### 注意
同样,在运行代码时,请确保将`cars`数据集作为 pandas`DataFrame`加载。 如果您已经运行了**简单表**的第一个实现,并且正在重新使用笔记本电脑,则可能仍然会看到旧的**简单表**菜单。 如果是这种情况,您将需要重新启动内核并重试。
同样,在运行代码时,请确保将`cars`数据集作为 Pandas`DataFrame`加载。 如果您已经运行了**简单表**的第一个实现,并且正在重新使用笔记本电脑,则可能仍然会看到旧的**简单表**菜单。 如果是这种情况,您将需要重新启动内核并重试。
以下屏幕快照显示了作为呈现器的简单表格可视化:
......@@ -1201,7 +1201,7 @@ pixiedust_node 欢迎输出
它还定义了一组旨在与笔记本和 PixieDust `display()` API 交互的功能:
* `print(data)`:输出当前在笔记本计算机中执行的单元格中的数据值。
* `display(data)`:使用从数据转换成的 pandas`DataFrame`调用 PixieDust `display()` API。 如果数据无法转换为 pandas `DataFrame`,则默认为`print`方法。
* `display(data)`:使用从数据转换成的 Pandas`DataFrame`调用 PixieDust `display()` API。 如果数据无法转换为 Pandas `DataFrame`,则默认为`print`方法。
* `html(data)`:在笔记本计算机中当前正在执行的单元格中以 HTML 格式显示数据。
* `image(data)`:期望数据是图像的 URL,并将其显示在当前在笔记本计算机中执行的单元格中。
* `help()`:显示所有前述方法的列表。
......@@ -1244,7 +1244,7 @@ JavaScript 代码由`pixiedust_node`魔术处理,并发送到 Node 子进程
![Run Node.js inside a Python Notebook](img/00106.jpeg)
反向也相同。 以下代码首先在节点单元格中的 JavaScript 中创建一个 JSON 变量,然后在 Python 单元格中创建并显示 pandas DataFrame:
反向也相同。 以下代码首先在节点单元格中的 JavaScript 中创建一个 JSON 变量,然后在 Python 单元格中创建并显示 Pandas DataFrame:
```py
%%node
......
......@@ -276,7 +276,7 @@ display(crimes)
`DNNClassifier`构造函数带有很多可选参数。 在示例应用程序中,我们将仅使用其中的三个,但是我建议您看一下文档中的其他参数:
* `feature_columns``feature_column._FeatureColumn`模型输入的迭代。 在我们的例子中,我们可以使用 Python 理解从 pandas`DataFrame`的数字列创建一个数组。
* `feature_columns``feature_column._FeatureColumn`模型输入的迭代。 在我们的例子中,我们可以使用 Python 理解从 Pandas`DataFrame`的数字列创建一个数组。
* `hidden_units`:每个单元可迭代的多个隐藏层。 在这里,我们将仅使用两层,每层 10 个节点。
* `n_classes`:标签类别的数量。 我们将预测变量列上的`DataFrame`分组并计算行数来推断此数字。
......@@ -1121,7 +1121,7 @@ class LabelsApp():
我们首先下载了 2011 年秋季版本中所有图像 URL 的列表,[可在此处下载](http://image-net.org/imagenet_data/urls/imagenet_fall11_urls.tgz),然后将文件解压缩为 您选择的本地目录(例如,我选择`/Users/dtaieb/Downloads/fall11_urls.txt`)。我们还需要下载[上所有`synsets`的 WordNet ID 和单词之间的映射,网址为 http://image-net.org/archive/ words.txt](http://image-net.org/archive/words.txt) ,我们将使用它来查找包含我们需要下载的 URL 的 WordNet ID。
以下代码将两个文件分别加载到 pandas`DataFrame`中:
以下代码将两个文件分别加载到 Pandas`DataFrame`中:
```py
import pandas
......@@ -1489,7 +1489,7 @@ def do_score_url(self, score_url):
[完整的第四部分笔记本可以在以下位置找到](https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter%206/Tensorflow%20VR%20Part%204.ipynb)
在本节中,我们讨论了使用 TensorFlow 在 Jupyter笔记本中构建图像识别示例应用程序的增量方法,特别着重于使用 PixieApps 操作算法。 我们首先使用 TensorFlow `DNNClassifier`估算器从 pandas`DataFrame`构建简单的分类模型。 然后我们分四个部分构建了图像识别示例应用程序的 MVP 版本:
在本节中,我们讨论了使用 TensorFlow 在 Jupyter笔记本中构建图像识别示例应用程序的增量方法,特别着重于使用 PixieApps 操作算法。 我们首先使用 TensorFlow `DNNClassifier`估算器从 Pandas`DataFrame`构建简单的分类模型。 然后我们分四个部分构建了图像识别示例应用程序的 MVP 版本:
1. 我们加载了预训练的 MobileNet 模型
2. 我们为图像识别示例应用程序创建了一个 PixieApp
......
......@@ -264,7 +264,7 @@ statsmodels.tsa.tests.test_stattools.TestACF_FFT
### 注意
**注意**pandas 与 NumPy 紧密集成,可让您将这些 NumPy 操作应用于 pandas DataFrames。 在本章其余部分中,当分析时间序列时,我们将大量使用此功能。
**注意**Pandas 与 NumPy 紧密集成,可让您将这些 NumPy 操作应用于 Pandas DataFrames。 在本章其余部分中,当分析时间序列时,我们将大量使用此功能。
以下代码示例创建一个Pandas `DataFrame`并计算所有列的平方:
......@@ -465,7 +465,7 @@ array([[ 1, 3, 5, 7],
`quandl`库主要由两个 API 组成:
* `quandl.get(dataset, **kwargs)`: 这将为请求的数据集返回 pandas`DataFrame`或 NumPy 数组。 `dataset`参数可以是字符串(单个数据集)或字符串列表(多个数据集)。 当`database_code`是数据发布者,而`dataset_code`与资源有关时,每个数据集都遵循语法`database_code/dataset_code`。 (请参阅下面的如何获取所有`database_code``dataset_code`的完整列表)。
* `quandl.get(dataset, **kwargs)`: 这将为请求的数据集返回 Pandas`DataFrame`或 NumPy 数组。 `dataset`参数可以是字符串(单个数据集)或字符串列表(多个数据集)。 当`database_code`是数据发布者,而`dataset_code`与资源有关时,每个数据集都遵循语法`database_code/dataset_code`。 (请参阅下面的如何获取所有`database_code``dataset_code`的完整列表)。
关键字参数使您能够优化查询。 [您可以在 GitHub 上的`quandl`代码中找到受支持参数的完整列表](https://github.com/quandl/quandl-python/blob/master/quandl/get.py)。
......@@ -613,7 +613,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()`方法使图表更易于阅读,该方法将频率从每日转换为每月,并使用当月平均值计算新值。
......@@ -1055,7 +1055,7 @@ $("[id^=slider][id$={{prefix}}]").each(function() {
[您可以在此处找到代码文件](https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter%208/sampleCode19.py)
`MovingAverageSubApp`中,我们使用`add_ticker_selection_markup`装饰器并将`chart{{prefix}}`作为默认路由的参数,以添加股票选择器选项卡,并添加一个名为`lag_slider``<div>`元素,其中包含`<pd_event_handler>`设置`self.lag`变量并刷新`chart` div。 `chart` div 将`pd_entity`属性与调用`rolling`方法的[`get_moving_average_df()`方法](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.rolling.html)一起使用,从选定的Pandas `DataFrame`返回滚动均值,并在其上调用`mean()`方法。 由于 PixieDust `display()`尚不支持 pandas 系列,因此我们将系列索引用作名为`x`的列来构建 pandas `DataFrame`,并以`get_moving_average_df()`方法返回它。
`MovingAverageSubApp`中,我们使用`add_ticker_selection_markup`装饰器并将`chart{{prefix}}`作为默认路由的参数,以添加股票选择器选项卡,并添加一个名为`lag_slider``<div>`元素,其中包含`<pd_event_handler>`设置`self.lag`变量并刷新`chart` div。 `chart` div 将`pd_entity`属性与调用`rolling`方法的[`get_moving_average_df()`方法](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.rolling.html)一起使用,从选定的Pandas `DataFrame`返回滚动均值,并在其上调用`mean()`方法。 由于 PixieDust `display()`尚不支持 Pandas 系列,因此我们将系列索引用作名为`x`的列来构建 Pandas `DataFrame`,并以`get_moving_average_df()`方法返回它。
以下代码显示了`MovingAverageSubApp`子 PixieApp 的实现
......@@ -1408,9 +1408,9 @@ with warnings.catch_warnings():
[您可以在此处找到代码文件](https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter%208/sampleCode27.py)
**注意**:我们使用`warnings`包来避免在使用较旧版本的 NumPy 和 pandas 时可能发生的弃用警告。
**注意**:我们使用`warnings`包来避免在使用较旧版本的 NumPy 和 Pandas 时可能发生的弃用警告。
在前面的代码中,我们将`train_set['Adj. Close']`用作`ARIMA`构造函数的参数。 由于我们对数据使用序列,因此我们还需要为`dates`参数传递`train_set['Date']`系列。 请注意,如果我们通过带有`DateIndex`索引的 pandas`DataFrame`来传递,则不必使用`dates`参数。 `ARIMA`构造函数的最后一个参数是`order`参数,它是表示`p``d``q`顺序的三个值的元组, 如本节开头所讨论的。
在前面的代码中,我们将`train_set['Adj. Close']`用作`ARIMA`构造函数的参数。 由于我们对数据使用序列,因此我们还需要为`dates`参数传递`train_set['Date']`系列。 请注意,如果我们通过带有`DateIndex`索引的 Pandas`DataFrame`来传递,则不必使用`dates`参数。 `ARIMA`构造函数的最后一个参数是`order`参数,它是表示`p``d``q`顺序的三个值的元组, 如本节开头所讨论的。
然后,我们调用`fit()`方法,该方法返回将用于预测值的实际 ARIMA 模型。 出于信息目的,我们使用`arima_model.resid.describe()`打印有关模型剩余误差的统计信息。
......@@ -1659,7 +1659,7 @@ def set_active_ticker(self, ticker):
[您可以在此处找到代码文件](https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter%208/sampleCode34.py)
第一个预测屏幕的路线实现非常简单。 `Add differencing` / `Remove differencing`按钮具有`pd_script`属性,该属性调用`self.toggle_differencing()`方法和`pd_refresh`属性以更新整个页面。 还定义了三个`<div>`元素,分别调用`show_chart``show_acf``show_pacf`路由,如以下代码所示:
第一个预测屏幕的路线实现非常简单。 `Add differencing`/`Remove differencing`按钮具有`pd_script`属性,该属性调用`self.toggle_differencing()`方法和`pd_refresh`属性以更新整个页面。 还定义了三个`<div>`元素,分别调用`show_chart``show_acf``show_pacf`路由,如以下代码所示:
```py
[[ForecastArimaSubApp]]
......
......@@ -263,7 +263,7 @@ import matplotlib.pyplot as plt
另一个问题是我们希望将文件存储在 GitHub 上,但是最大文件大小限制为 100M。因此,为使文件小于 100 M,我们还删除了一些不需要的列 我们尝试构建的分析文件,然后将其压缩,然后再将其存储在 GitHub 上。 当然,另一个好处是`DataFrame`可以使用较小的文件更快地加载。
从 Kaggle 网站下载文件后,我们运行以下代码,该代码首先将 CSV 文件加载到 pandas`DataFrame`中,删除不需要的行和列,然后将数据写回到文件中:
从 Kaggle 网站下载文件后,我们运行以下代码,该代码首先将 CSV 文件加载到 Pandas`DataFrame`中,删除不需要的行和列,然后将数据写回到文件中:
### 注意
......@@ -371,7 +371,7 @@ edges
按始发地和目的地分组的航班,平均平均飞行时间为 ELAPSED_TIME,并且只有一个索引
要创建有向加权图,我们使用 NetworkX `from_pandas_edgelist()`方法,该方法以 pandas`DataFrame`作为输入源。 我们还指定了源列和目标列,以及权重列(在我们的示例中为`ELAPSED_TIME`)。 最后,我们告诉 NetworkX 我们想通过使用`create_using`关键字参数来创建有向图,并将`DiGraph`的实例作为值传递。
要创建有向加权图,我们使用 NetworkX `from_pandas_edgelist()`方法,该方法以 Pandas`DataFrame`作为输入源。 我们还指定了源列和目标列,以及权重列(在我们的示例中为`ELAPSED_TIME`)。 最后,我们告诉 NetworkX 我们想通过使用`create_using`关键字参数来创建有向图,并将`DiGraph`的实例作为值传递。
以下代码显示如何调用`from_pandas_edgelist()`方法:
......@@ -591,7 +591,7 @@ airports_centrality
使用 PAGE_RANK,CLOSENESS 和 BETWEENNESS 值增强的 Airports `DataFrame`
作为练习,我们可以验证四个中心指数为顶级机场提供了一致的结果。 使用 pandas `nlargest()`方法,我们可以获得四个索引的前 10 个机场,如以下代码所示:
作为练习,我们可以验证四个中心指数为顶级机场提供了一致的结果。 使用 Pandas `nlargest()`方法,我们可以获得四个索引的前 10 个机场,如以下代码所示:
```py
for col_name in ["DEGREE", "PAGE_RANK", "CLOSENESS", "BETWEENNESS"]:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册