提交 fe74a8c1 编写于 作者: W wizardforcel

2021-03-09 22:29:39

上级 7eecbb66
......@@ -584,7 +584,7 @@ scikit_learn==0.19.0
查看对角线上的直方图,我们看到以下内容:
* `a``RM``MEDV`具有最接近正态分布的形状。
* `b``AGE`偏向左侧,`LSTAT`偏向右侧(这似乎是违反直觉的,但偏斜是根据均值的位置定义的 相对于最大值)。
* `b``AGE`偏向左侧,`LSTAT`偏向右侧(这似乎是违反直觉的,但偏斜是根据均值的位置,相对于最大值定义的)。
* `c`:对于`TAX`,我们发现大量分布在 700 左右。这从散点图中也很明显。
仔细观察右下角的`MEDV`直方图,我们实际上会看到类似于`TAX`的东西,其中有一个上限为 50,000 美元的大上限。 回想一下当我们执行`df.describe()`时,`MDEV`的最小值和最大值分别为 5k 和 50k。 这表明数据集中的房屋中位价上限为 50k。
......@@ -732,7 +732,7 @@ scikit_learn==0.19.0
![Activity B: Building a Third-Order Polynomial Model](img/image1_123.jpg)
我们可以插入`a`,`b`,`c`和`d`的定义,以获得以下多项式模型,其中系数 与以前的相同:
我们可以插入`a`,`b`,`c`和`d`的定义,以获得以下多项式模型,其中系数与以前相同:
![Activity B: Building a Third-Order Polynomial Model](img/image1_125.jpg)
......
......@@ -64,7 +64,7 @@
如果有不同的数据源,可以将它们合并为到单个表中吗? 如果不是,那么我们可能要为每个模型训练模型,并为最终预测模型取整体平均值。 我们可能要执行此操作的示例是使用不同比例的各种时间序列数据集。 考虑一下我们有以下数据源:一张表,其中 AAPL 股票收盘价为每日时间范围,iPhone 销售数据为每月时间范围。
我们可以通过将每月销售数据添加到每日时间比例表中的每个样本,或按月对每日数据进行分组来合并数据,但是最好建立两个模型,一个用于每个数据集,然后结合使用 最终预测模型中每个模型的结果。
我们可以通过将每月销售数据添加到每日时间比例表中的每个样本,或按月对每日数据进行分组来合并数据,但是最好建立两个模型,一个用于每个数据集,然后结合使用最终预测模型中每个模型的结果。
## 子主题 B:用于机器学习的预处理数据
......@@ -950,7 +950,7 @@ K 折交叉验证算法如下:
* 在标记的训练数据上进行有监督的学习
* 具有两个类别标签的分类问题(二进制)
尤其是,我们正在训练模型,以根据一系列连续和明确的特征来确定员工是否已离开公司。 在“活动 A”和“训练员工保留问题的预测模型”中准备了用于机器学习的数据之后,我们接着实现了 SVM,K 最近邻和随机 森林算法仅使用两个功能。 这些模型能够以超过 90% 的总体准确性进行预测。 但是,在查看特定班级的准确性时,我们发现离职的员工(`class-label 1`)只能以 70-80% 的准确度进行预测。 让我们看看可以通过利用全部功能空间将改进多少。
尤其是,我们正在训练模型,以根据一系列连续和明确的特征来确定员工是否已离开公司。 在“活动 A”和“训练员工保留问题的预测模型”中准备了用于机器学习的数据之后,我们接着实现了 SVM,K 最近邻和随机森林算法仅使用两个功能。 这些模型能够以超过 90% 的总体准确性进行预测。 但是,在查看特定班级的准确性时,我们发现离职的员工(`class-label 1`)只能以 70-80% 的准确度进行预测。 让我们看看可以通过利用全部功能空间将改进多少。
1.`lesson-2-workbook.ipynb`笔记本中,向下滚动到该部分的代码。 我们应该已经从上一节中加载了预处理的数据,但是如果需要,可以通过执行`df = pd.read_csv('../data/hr-analytics/hr_data_processed.csv')`再次完成。 然后,使用`print(df.columns)`打印`DataFrame`列。
2. 定义所有功能的列表,方法是将`df.columns`中的输出复制并粘贴到新列表中(确保删除目标变量`left`)。 然后,像之前一样定义`X``Y`。 如下所示:
......
......@@ -994,7 +994,7 @@ Bokeh 是一个用于 Python 的交互式可视化库。 其目标是提供与 D
![Activity B: Exploring Data with Interactive Visualizations](img/image3_61.jpg)
* 小国 鉴于人口的逐年增加,巴林的利率异常低下:
* 鉴于人口的逐年增加,巴林的利率异常低下:
![Activity B: Exploring Data with Interactive Visualizations](img/image3_63.jpg)
......
......@@ -51,7 +51,7 @@ spark-submit SparkKMeans.py
```
新术语和重要词以粗体显示。 您在屏幕上看到的字词,例如在菜单或对话框中的字样如下所示:“在 Windows 10 上,您需要打开“开始”菜单,然后转到“Windows 系统” |“控制面板”以打开 控制面板。”
新术语和重要词以粗体显示。 您在屏幕上看到的字词,例如在菜单或对话框中的字样如下所示:“在 Windows 10 上,您需要打开“开始”菜单,然后转到“Windows 系统 | 控制面板”以打开控制面板。”
警告或重要提示如下所示。
......
......@@ -87,7 +87,7 @@
如果这两种情况中的任何一种发生在您身上,请不要惊慌,它们只是随机的怪癖,有时事情只是无法按正确的顺序启动,或者它们无法在您的 PC 上及时启动。 没关系。
您所要做的就是返回并再次尝试打开该文件。 有时需要两到三次尝试才能真正正确地加载它,但是如果您多次尝试,它最终会弹出,那么就像我们之前看到的处理异常值的 Jupyter笔记本屏幕一样,您应该这样做
您所要做的就是返回并再次尝试打开该文件。 有时需要两到三次尝试才能真正正确地加载它,但是如果您多次尝试,它最终会弹出,那么就像我们之前看到的处理异常值的 Jupyter笔记本屏幕一样,您应该这样做。
# 使用和理解 IPython(Jupyter)笔记本
......@@ -169,7 +169,7 @@ plt.show()
如果您已经了解 Python,则可以跳过以下两节。 但是,如果您需要复习,或者以前从未使用过 Python,则需要进行这些学习。 关于 Python 脚本语言,您需要了解一些古怪的知识,因此让我们深入研究,直接进入池中,通过编写一些实际代码来学习一些 Python。
就像我之前说过的那样,在本书的要求中,您应该具有某种编程背景才能在本书中取得成功。 您已经使用某种语言进行了编码,即使它是脚本语言,JavaScript,我也不在乎它是 C++,Java 还是其他东西,但是如果您是 Python 的新手,我会给您 这里有些速成课程。 我将继续深入探讨本节中的一些示例。
就像我之前说过的那样,在本书的要求中,您应该具有某种编程背景才能在本书中取得成功。 您已经使用某种语言进行了编码,即使它是脚本语言,JavaScript,我也不在乎它是 C++,Java 还是其他东西,但是如果您是 Python 的新手,这里我会给您一些速成课程。 我将继续深入探讨本节中的一些示例。
关于 Python 的一些怪癖与您可能已经看到的其他语言有些不同; 因此,我只想了解 Python 与您可能使用过的其他脚本语言的不同之处,而做到这一点的最佳方法是查看一些真实的示例。 让我们深入研究一些 Python 代码:
......@@ -197,7 +197,7 @@ plt.show()
制表符和空格在 Python 中具有真正的含义,因此您不能只是按照自己的方式设置格式。 您必须注意它们。
我想说明的是,在其他语言中,通常会有某种形式的方括号或大括号表示我在`for`循环,`if`块或某种内部 代码块,但在 Python 中,所有这些都用空格指定。 `Tab`对于告诉 Python 哪个代码块实际上很重要:
我想说明的是,在其他语言中,通常会有某种形式的方括号或大括号表示我在`for`循环,`if`块或某种内部代码块,但在 Python 中,所有这些都用空格指定。 `Tab`对于告诉 Python 哪个代码块实际上很重要:
```py
for number in listOfNumbers:
......@@ -249,7 +249,7 @@ print (A)
# 数据结构
让我们继续进行数据结构。 如果您需要暂停一下,让事物沉入一点,或者您想多玩一点,那就随便吧。 学习这些东西的最好方法是潜入并进行实际试验,因此,我绝对鼓励这样做,这就是为什么我为您提供 IPython/Jupyter笔记本的原因,因此您实际上可以走进去,弄乱代码,做不同的事情 东西
让我们继续进行数据结构。 如果您需要暂停一下,让事物沉入一点,或者您想多玩一点,那就随便吧。 学习这些东西的最好方法是潜入并进行实际试验,因此,我绝对鼓励这样做,这就是为什么我为您提供 IPython/Jupyter笔记本的原因,因此您实际上可以走进去,弄乱代码,做不同的事情。
例如,这里我们有一个围绕`25.0`的分布,但是让我们围绕它`55.0`
......@@ -307,7 +307,7 @@ x[3:]
# 前结肠
例如,如果要获取列表的前三个元素(元素编号 3 之前的所有内容),我们可以说`:3`以获取前三个元素`1``2``3`,以及 如果您考虑一下发生了什么,就象大多数语言一样,就索引而言,我们从 0 开始计数。因此元素 0 为`1`,元素 1 为`2`,元素 2 为`3`。 既然我们说我们要在元素 3 之前拥有所有东西,那就是我们得到的。
例如,如果要获取列表的前三个元素(元素编号 3 之前的所有内容),我们可以说`:3`以获取前三个元素`1``2``3`,以及如果您考虑一下发生了什么,就象大多数语言一样,就索引而言,我们从 0 开始计数。因此元素 0 为`1`,元素 1 为`2`,元素 2 为`3`。 既然我们说我们要在元素 3 之前拥有所有东西,那就是我们得到的。
因此,请记住,永远不要忘记,在大多数语言中,您是从 0 开始而不是从 1 开始计数。
......@@ -543,9 +543,9 @@ print (income)
```
假设我们输入了一行输入数据,它是一个逗号分隔的值文件,其中包含年龄(例如`32`),以收入逗号分隔的年龄(例如`120000`),用于弥补年龄。 我所能做的就是在每行输入时,我可以调用`split`函数将其实际上分成一对用逗号定界的值,然后将结果元组从`split`中分离出来并将其分配给 两个变量-`age``income`-同时定义了年龄,收入和说我想将其设置为等于`split`函数产生的元组。
假设我们输入了一行输入数据,它是一个逗号分隔的值文件,其中包含年龄(例如`32`),以收入逗号分隔的年龄(例如`120000`),用于弥补年龄。 我所能做的就是在每行输入时,我可以调用`split`函数将其实际上分成一对用逗号定界的值,然后将结果元组从`split`中分离出来并将其分配给两个变量-`age``income`-同时定义了年龄,收入和说我想将其设置为等于`split`函数产生的元组。
因此,这基本上是您一次将多个字段分配给多个变量的常见缩写。 如果运行该命令,您会发现`age`变量实际上最终分配给了`32``income`分配给了`120,000`,因为那里有一些小技巧。 在执行此类操作时,您一定要小心,因为如果在结果元组中没有预期的字段数或预期的元素数,那么如果尝试分配更多的字段,则会出现异常 或少于您期望在此处看到的东西
因此,这基本上是您一次将多个字段分配给多个变量的常见缩写。 如果运行该命令,您会发现`age`变量实际上最终分配给了`32``income`分配给了`120,000`,因为那里有一些小技巧。 在执行此类操作时,您一定要小心,因为如果在结果元组中没有预期的字段数或预期的元素数,或少于您期望在此处看到的东西,那么如果尝试分配更多的字段,则会出现异常
# 辞典
......@@ -557,7 +557,7 @@ print (income)
一个非常有用的工具,基本上可以进行某种形式的查找。 假设您在数据集中具有某种标识符,该标识符映射到一些易于理解的名称。 在打印出来时,您可能会使用字典来实际进行查找。
如果您尝试查找不存在的内容,我们还可以看到会发生什么。 好吧,我们可以在字典上使用`get`函数来安全地返回条目。 因此,在这种情况下,`Enterprise`确实在我的词典中有一个条目,它只给我返回了`Kirk`,但是如果我在词典中调用`NX-01`船,我就没有定义它的船长,因此它会返回 在此示例中,使用`None`值比抛出异常更好,但是您确实需要意识到这是可能的:
如果您尝试查找不存在的内容,我们还可以看到会发生什么。 好吧,我们可以在字典上使用`get`函数来安全地返回条目。 因此,在这种情况下,`Enterprise`确实在我的词典中有一个条目,它只给我返回了`Kirk`,但是如果我在词典中调用`NX-01`船,我就没有定义它的船长,因此它会返回空。 在此示例中,使用`None`值比抛出异常更好,但是您确实需要意识到这是可能的:
```py
print (captains.get("NX-01"))
......@@ -632,9 +632,9 @@ print (DoSomething(SquareIt, 3))
```
现在,我有一个名为`DoSomething``def DoSomething`的函数,它将带有两个参数,一个我称为`f`,另一个我称为`x`,如果发生,我实际上可以传递 这些参数之一的函数中。 因此,请仔细考虑一下。 多看一点这个例子。 在这里,`DoSomething(f,x):`将返回`x``f`; 它基本上会调用带有 x 作为参数的 f 函数,并且在 Python 中没有强类型,因此我们只需要确保传递给第一个参数的实际上是一个可以正常工作的函数 。
现在,我有一个名为`DoSomething``def DoSomething`的函数,它将带有两个参数,一个我称为`f`,另一个我称为`x`,如果发生,我实际上可以将这些参数之一传递到函数中。 因此,请仔细考虑一下。 多看一点这个例子。 在这里,`DoSomething(f,x):`将返回`x``f`; 它基本上会调用带有 x 作为参数的 f 函数,并且在 Python 中没有强类型,因此我们只需要确保传递给第一个参数的实际上是一个可以正常工作的函数 。
例如,我们说 print `DoSomething`,对于第一个参数,我们传入`SquareIt`(实际上是另一个函数)和数字`3`。 这应该做的就是说对`SquareIt`函数和`3`参数进行操作,这将返回`(SquareIt, 3)`,而我上次检查的`3`平方是`9`,当然可以了 实际上工作
例如,我们说 print `DoSomething`,对于第一个参数,我们传入`SquareIt`(实际上是另一个函数)和数字`3`。 这应该做的就是说对`SquareIt`函数和`3`参数进行操作,这将返回`(SquareIt, 3)`,而我上次检查的`3`平方是`9`,当然实际上可以
对于您来说,这可能是一个新概念,将函数作为参数传递给周围,因此,如果您需要在此停留一分钟,请稍等片刻,然后尝试使用它,请随时这样做。 再次,我鼓励您停下来并按照自己的步调前进。
......@@ -749,7 +749,7 @@ for x in range(10):
```
例如,我们可以使用此范围运算符自动定义范围内的数字列表。 因此,如果我们说`range(10)`中的`for x`,则`range 10`将产生一个`0``9`的列表,并通过对该列表中的`x`说,我们将遍历该列表中的每个单独条目,然后 打印出来。 同样,`print`语句后的逗号表示不要给我换行,请继续。 因此,此输出最终是该列表的所有元素彼此相邻打印。
例如,我们可以使用此范围运算符自动定义范围内的数字列表。 因此,如果我们说`range(10)`中的`for x`,则`range 10`将产生一个`0``9`的列表,并通过对该列表中的`x`说,我们将遍历该列表中的每个单独条目,然后打印出来。 同样,`print`语句后的逗号表示不要给我换行,请继续。 因此,此输出最终是该列表的所有元素彼此相邻打印。
为了做一些更复杂的事情,我们将做类似的事情,但是这次我们将展示`continue``break`的工作方式。 与其他语言一样,您实际上可以选择跳过循环迭代的其余处理,或者实际上过早地停止循环迭代:
......@@ -809,9 +809,9 @@ while (x < 10):
# 运行 Python 脚本
在整本书中,我们将使用到目前为止一直在使用的 IPython/Jupyter笔记本格式(`.ipynb`文件),对于这样的书,这是一种很好的格式,因为它可以让我放一些小块 代码,然后在其中放一些文字和说明操作的内容,然后您就可以尝试实际操作。
在整本书中,我们将使用到目前为止一直在使用的 IPython/Jupyter笔记本格式(`.ipynb`文件),对于这样的书,这是一种很好的格式,因为它可以让我放一些小块代码,然后在其中放一些文字和说明操作的内容,然后您就可以尝试实际操作。
当然,从这个角度来看,这很棒,但是在现实世界中,您可能不会使用 IPython/Jupyter笔记本在生产中实际运行 Python 脚本,所以让我简要地简要介绍一下其他方法 运行 Python 代码以及其他交互方式来运行 Python 代码。 因此,这是一个非常灵活的系统。 让我们来看看。
当然,从这个角度来看,这很棒,但是在现实世界中,您可能不会使用 IPython/Jupyter笔记本在生产中实际运行 Python 脚本,所以让我简要地简要介绍一下运行 Python 代码的其他方法,以及其他交互方式。 因此,这是一个非常灵活的系统。 让我们来看看。
# 不仅仅是 IPython/Jupyter笔记本的更多选择
......@@ -859,7 +859,7 @@ while (x < 10):
![](img/3f4a7f96-ead8-4dfa-8f1c-da8eddf25b03.png)
这样便有了运行 Python 代码的三种方式:IPython/Jupyter 笔记本,我们将在整本书中使用它,只是因为它是一个很好的学习工具,您还可以将脚本作为独立的脚本文件运行,也可以执行 交互式命令提示符中的 Python 代码。
这样便有了运行 Python 代码的三种方式:IPython/Jupyter 笔记本,我们将在整本书中使用它,只是因为它是一个很好的学习工具,您还可以将脚本作为独立的脚本文件运行,也可以在交互式命令提示符中执行 Python 代码。
因此,您拥有了它,并且这里有三种不同的方式来运行 Python 代码以及在生产中进行实验和运行。 所以记住这一点。 在本书的其余部分中,我们将一直使用笔记本电脑,但是,到时候,您还有其他选择。
......
......@@ -66,7 +66,7 @@
2. 如果您以 1 到 4 的等级阅读您的整体健康状况,那这些选择对应于差,中,好和优秀类别,那又如何呢? 你怎么认为? 这是序数数据的一个很好的例子。 这非常类似于我们的电影收视率数据,并且再次取决于您的建模方式,您可能也可以将其视为离散的数值数据,但从技术上讲,我们将其称为序数数据。
3. 那你同学的种族呢? 这是分类数据的一个很明显的例子。 您无法真正将紫色人与绿色人进行比较,对,他们只是紫色和绿色,但是您可能需要研究它们并了解其他维度之间的区别。
4. 几岁的同学年龄如何? 那里有一个技巧问题; 如果我说它必须是整数年,例如 40、50 或 55 年,那么那将是离散的数值数据,但是如果我具有更高的精度(例如 40 年 3 个月和 2.67 天),那将是连续的数值数据,但是无论哪种方式,它都是数值数据类型。
4. 几岁的同学年龄如何? 那里有一个技巧问题; 如果我说它必须是整数年,例如 40、50 或 55 年,那么那将是离散的数值数据,但是如果我具有更高的精度(例如 40 年 3 个月和 2.67 天),那将是连续的数值数据,但是无论哪种方式,它都是数值数据类型。
5. 最后,花钱在商店里。 同样,这可能是连续数值数据的一个示例。 同样,这仅是重要的,因为您可能将不同的技术应用于不同类型的数据。
例如,在某些概念中,我们可能对分类数据执行一种类型的实现,而对数值数据进行另一种类型的实现。
......@@ -187,7 +187,7 @@ np.mean(incomes)
完成此操作后,我只需在数据列表`incomes`上调用`np.mean`,即可计算出这些数据点的平均值或均值。 就这么简单。
让我们继续运行它。 确保选择了该代码块,然后可以单击“播放”按钮以实际执行该代码块,并且由于这些收入数字包含随机成分,因此每次运行该代码块时,我都会得到略有不同的结果,但是 它应始终非常接近`27000`
让我们继续运行它。 确保选择了该代码块,然后可以单击“播放”按钮以实际执行该代码块,并且由于这些收入数字包含随机成分,因此每次运行该代码块时,我都会得到略有不同的结果,但是它应始终非常接近`27000`
```py
Out[1]: 27173.098561362742
......@@ -198,7 +198,7 @@ Out[1]: 27173.098561362742
# 使用 Matplotlib 可视化数据
让我们可视化这些数据,使其更具意义。 因此,还有一个名为`matplotlib`的软件包,以后我们将再次讨论更多,但这是一个软件包,可以让我在 IPython笔记本中制作漂亮的图形,因此这是一种可视化您的简单方法 数据,看看发生了什么。
让我们可视化这些数据,使其更具意义。 因此,还有一个名为`matplotlib`的软件包,以后我们将再次讨论更多,但这是一个软件包,可以让我在 IPython笔记本中制作漂亮的图形,因此这是一种可视化您的数据的简单方法,看看发生了什么。
在此示例中,我们使用`matplotlib`创建我们的收入数据的直方图,该直方图分为`50`个不同的存储桶。 因此,基本上,我们要获取连续数据并将其离散化,然后可以在`matplotlib.pyplot`上调用`show`来实际显示该直方图。 请参考以下代码:
......@@ -363,7 +363,7 @@ Out[11]: ModeResult(mode=array([29]), count=array([14]))
![](img/cacd8ae5-44dc-4b10-8a09-de01df532676.png)
假设我们有一些关于飞机到达机场的频率的数据,例如,该直方图表明我们每分钟有大约 4 班飞机到达,并且在我们查看该数据的 12 天左右发生。 但是,我们也有这些异常值。 我们有一个非常慢的一天,每分钟只有一次到达,而我们只有一个非常快的一天,每分钟接近 12 个到达。 因此,读取直方图的方法是查找给定值的存储桶,它告诉您该值在数据中出现的频率,直方图的形状可以告诉您很多有关给定集合的概率分布 数据的
假设我们有一些关于飞机到达机场的频率的数据,例如,该直方图表明我们每分钟有大约 4 班飞机到达,并且在我们查看该数据的 12 天左右发生。 但是,我们也有这些异常值。 我们有一个非常慢的一天,每分钟只有一次到达,而我们只有一个非常快的一天,每分钟接近 12 个到达。 因此,读取直方图的方法是查找给定值的存储桶,它告诉您该值在数据中出现的频率,直方图的形状可以告诉您很多有关给定集合的数据的概率分布
从这些数据中我们知道,我们的机场很可能每分钟有 4 个左右的进港旅客,但几乎不可能有 1 或 12 个进港旅客,我们还可以专门讨论一下两者之间所有数字的机率。 因此,每分钟不仅有 12 个到达的可能性,每分钟 9 个到达的可能性也很小,而且一旦我们开始达到 8 个左右,事情就会开始加速。 直方图可以提供很多信息。
......@@ -402,7 +402,7 @@ Out[11]: ModeResult(mode=array([29]), count=array([14]))
现在我们看到`4`在我们的数据集中出现了两次,然后我们有一个`1`,一个`5`和一个`8`
通常使用标准偏差作为思考如何识别数据集中异常值的方法。 如果我说我在 4.4 平均值的一个标准偏差内,则认为这是正态分布中的典型值。 但是,您可以在上图中看到`1``8`实际上不在该范围内。 因此,如果我采用 4.4 的正负 2.24,我们最终会在`7``2`周围,而`1``8`都落在 标准偏差的范围。 因此,我们可以从数学上说 1 和 8 是离群值。 我们不必猜测和盯着它。 现在仍然需要根据数据点与平均值有多少标准偏差来判断离群值。
通常使用标准偏差作为思考如何识别数据集中异常值的方法。 如果我说我在 4.4 平均值的一个标准偏差内,则认为这是正态分布中的典型值。 但是,您可以在上图中看到`1``8`实际上不在该范围内。 因此,如果我采用 4.4 的正负 2.24,我们最终会在`7``2`周围,而`1``8`都落在标准偏差的范围。 因此,我们可以从数学上说 1 和 8 是离群值。 我们不必猜测和盯着它。 现在仍然需要根据数据点与平均值有多少标准偏差来判断离群值。
通常,您可以通过与平均值之间的标准差(或有时为多少个`σ`)来谈论一个数据点有多少离群值。
......@@ -430,7 +430,7 @@ S² = (11.56 + 0.16 + 0.36 + 0.16 + 12.96) / 4 = 6.3
# 数学解释
至于为什么总体和样本方差之间存在差异,它涉及关于您可能不想考虑太多的概率的真正怪异的东西,并且它需要一些花哨的数学符号,在本书中我尽量避免使用符号 尽可能多,因为我认为概念更重要,但这已经足够基本了,您将一遍又一遍地看到它。
至于为什么总体和样本方差之间存在差异,它涉及关于您可能不想考虑太多的概率的真正怪异的东西,并且它需要一些花哨的数学符号,在本书中我尽量避免使用符号,因为我认为概念更重要,但这已经足够基本了,您将一遍又一遍地看到它。
如我们所见,总体方差通常指定为 `σ²`,其中`σ`为标准偏差,我们可以说这是每个数据点`X`的总和减去平均值,`μ`,平方,即每个样本在`N`(数据点的数量)上平方的方差,我们可以用以下公式表示:
......@@ -741,7 +741,7 @@ plt.show()
```
在此示例中,我们要做的是生成一些以零为中心的数据,即均值为零,标准偏差为`0.5`,我将使用该数据作为`10000`数据点 分配。 然后,我们将绘制一个直方图,看看我们得出了什么。
在此示例中,我们要做的是生成一些以零为中心的数据,即均值为零,标准偏差为`0.5`,我将使用该数据作为`10000`数据点的分布。 然后,我们将绘制一个直方图,看看我们得出了什么。
![](img/33390974-0859-4cc0-8a6d-6d78be980298.png)
......@@ -916,7 +916,7 @@ Out [5]:0.059954502386585506
```
确实,它确实为零。 峰度以两种链接的方式显示了我们的数据分布:尾巴的形状或峰的尖锐程度如果我只是将尾巴压扁,它会推高该峰以使其更尖,或者同样地,如果将其降低 分布,您可以想象这有点分散了东西,使尾巴更胖,峰值更矮了。 这就是峰度的含义,在此示例中,峰度几乎为零,因为它只是一个普通的正态分布。
确实,它确实为零。 峰度以两种链接的方式显示了我们的数据分布:尾巴的形状或峰的尖锐程度如果我只是将尾巴压扁,它会推高该峰以使其更尖,或者同样地,如果将其分布降低,您可以想象这有点分散了东西,使尾巴更胖,峰值更矮了。 这就是峰度的含义,在此示例中,峰度几乎为零,因为它只是一个普通的正态分布。
如果您想使用它,请继续,然后再次尝试修改发行版。 使它以除 0 以外的内容为中心,并查看该值是否实际发生任何变化。 应该是? 嗯,这确实不应该,因为这些都是分布形状的度量,也并没有真正说明分布的确切位置。 这是形状的度量。 那就是时刻的全部。 继续尝试一下,尝试不同的中心值,尝试不同的标准偏差值,看看它对这些值有什么影响,并且它根本不会改变。 当然,您期望诸如均值之类的东西会发生变化,因为您正在更改均值,但方差,偏斜也许不会。 玩耍,找出答案。
......
......@@ -742,7 +742,7 @@ purchases[ageDecade] += 1
# 我的作业解决方案
你做功课了吗 但愿如此。 让我们看一下我的解决方案,看看条件概率如何告诉我们假数据集中年龄和购买概率之间是否存在关系。
你做功课了吗但愿如此。 让我们看一下我的解决方案,看看条件概率如何告诉我们假数据集中年龄和购买概率之间是否存在关系。
提醒您,我们试图做的是消除年龄和购买可能性之间的依存关系,看看我们是否可以在条件概率值中实际反映这一点。 这是我得到的:
......
......@@ -32,7 +32,7 @@
![](img/4afbc931-a14b-4756-99f7-936312f2fd71.png)
现在,您将不再需要真正地自己动手做,但是如果您出于某些原因必须这样做,或者您只是对幕后发生的事情感到好奇,我现在将为您描述整体算法,如何实际计算斜率和`y`-如果需要一天的时间,则很难拦截自己。 其实并不那么复杂。
现在,您将不再需要真正地自己动手做,但是如果您出于某些原因必须这样做,或者您只是对幕后发生的事情感到好奇,我现在将为您描述整体算法,以及如何实际计算斜率和`y`-如果需要一天的时间,则很难拦截自己。 其实并不那么复杂。
还记得直线的斜率截距方程吗? 它是`y = mx + c`。 斜率刚好是两个变量之间的相关性乘以`Y`中的标准偏差除以`X`中的标准偏差。 标准差只是自然而然地渗入到数学中似乎有些奇怪,但是请记住,相关性也已纳入标准差,因此不必重新引入该术语也就不足为奇了。
......@@ -68,7 +68,7 @@
对于 R 平方,您将获得一个介于 0 到 1 之间的值。现在 0 表示您的拟合度很糟糕。 它不会捕获数据中的任何差异。 尽管 1 是一个完美的拟合,但数据中的所有方差都被该行捕获,并且在这种情况下,您在行两侧看到的所有方差都应该相同。 所以 0 是不好的,而 1 是好的。 这就是您真正需要知道的。 介于两者之间的事物。 较低的 R 平方值表示拟合度较差,较高的 R 平方值表示拟合度较高。
正如您将在接下来的部分中看到的,进行回归的方法不止一种。 线性回归就是其中之一。 这是一种非常简单的技术,但是也有其他技术,您可以使用 R 平方作为定量度量,以衡量给定回归对一组数据点的良好程度,然后使用它来选择最适合的模型 您的数据
正如您将在接下来的部分中看到的,进行回归的方法不止一种。 线性回归就是其中之一。 这是一种非常简单的技术,但是也有其他技术,您可以使用 R 平方作为定量度量,以衡量给定回归对一组数据点的良好程度,然后使用它来选择最适合您的数据的模型
# 使用 Python 计算线性回归和 R 平方
......@@ -133,7 +133,7 @@ plt.show()
![](img/bbdc1831-fa60-406a-b31c-2da0b56d83bb.png)
这段代码将创建一个函数,以在数据旁边绘制最佳拟合线。 这里还有更多的 Matplotlib 魔术。 我们将创建一个`fitLine`列表,并使用编写的`predict()`函数获取`pageSpeeds`(即`x`-轴),并创建 Y 函数 从那开始。 因此,我们将不使用支出金额的观察值,而只是使用`slope`乘以`x`加上从上述`linregress()`调用中获得的`intercept`来找到预测值。 本质上,在这里,我们将像以前一样做一个散点图,以显示原始数据点,即观察值。
这段代码将创建一个函数,以在数据旁边绘制最佳拟合线。 这里还有更多的 Matplotlib 魔术。 我们将创建一个`fitLine`列表,并使用编写的`predict()`函数获取`pageSpeeds`(即`x`-轴),并从那开始创建 Y 函数。 因此,我们将不使用支出金额的观察值,而只是使用`slope`乘以`x`加上从上述`linregress()`调用中获得的`intercept`来找到预测值。 本质上,在这里,我们将像以前一样做一个散点图,以显示原始数据点,即观察值。
然后,我们还将使用通过返回的线方程式创建的`fitLine`在同一`pyplot`实例上调用`plot`,并将它们一起显示。 当我们这样做时,它看起来如下图:
......@@ -153,7 +153,7 @@ plt.show()
多项式回归是回归的更一般情况。 那么,为什么将自己限制在一条直线上呢? 也许您的数据实际上没有线性关系,或者可能有某种曲线,对吗? 这种情况经常发生。
并非所有关系都是线性的,但是线性回归只是我们可以做的一整类回归的一个例子。 如果您还记得我们最终得到的线性回归线的形式为`y = mx + b`,则可以从普通最小二乘法或其他方法的线性回归分析中获得`m``b`的值 你选。 现在,这只是一阶或一阶多项式。 阶数或次数是您看到的`x`的幂。 这就是一阶多项式。
并非所有关系都是线性的,但是线性回归只是我们可以做的一整类回归的一个例子。 如果您还记得我们最终得到的线性回归线的形式为`y = mx + b`,则可以从普通最小二乘法或其他方法的线性回归分析中获得`m``b`的值。 现在,这只是一阶或一阶多项式。 阶数或次数是您看到的`x`的幂。 这就是一阶多项式。
现在,如果需要,我们还可以使用二阶多项式,看起来像`y = ax ^ 2 + bx + c`。 如果我们使用二阶多项式进行回归,则将获得`a``b``c`的值。 或者我们可以做一个`ax ^ 3 + bx ^ 2 + cx + d`形式的三阶多项式。 阶数越高,可以表示的曲线越复杂。 因此,将`x`混合在一起的能力越强,可以获得的形状和关系就越复杂。
......@@ -166,7 +166,7 @@ plt.show()
* 可视化拟合并检查您的曲线是否偏离了正常值
* 高 R 平方仅表示您的曲线非常适合您的训练数据; 它可能是也可能不是很好的预测指标
如果您拥有到处都是的数据并且变化很大,那么您可能会发疯并创建一条线,就像向上和向下一样尝试尽可能地拟合该数据,但实际上并不能 代表数据的内在联系。 它在预测新值方面做得不好。
如果您拥有到处都是的数据并且变化很大,那么您可能会发疯并创建一条线,就像向上和向下一样尝试尽可能地拟合该数据,但实际上并不能代表数据的内在联系。 它在预测新值方面做得不好。
因此,始终仅从可视化数据开始,然后考虑曲线真正需要多么复杂。 现在,您可以使用 R 平方来衡量您的拟合度,但是请记住,这只是在测量该曲线与您的训练数据的拟合度,即您用来实际基于其进行预测的数据。 它不能衡量您准确预测未来的能力。
......@@ -223,7 +223,7 @@ plt.show()
在这一点上,看起来很合适。 但是,您想问自己:“我是否过度拟合?我的曲线看起来是否真的超出了容纳异常值的范围?” 我发现那并不是真的。 我真的没有看到很多疯狂的事情发生。
如果我有一个非常高阶的多项式,它可能会在顶部向上捕捉以捕获那个离群值,然后向下扫描以捕捉在那里的离群值,并在我们有很多密度的地方变得更稳定,然后 它可能会遍历整个地方,以尝试适应最后的最后一组离群值。 如果您看到这样的废话,就知道多项式中的阶数过多,阶数过多,您应该将其降低,因为尽管它适合您所观察到的数据,但对预测没有用 您尚未看到的数据
如果我有一个非常高阶的多项式,它可能会在顶部向上捕捉以捕获那个离群值,然后向下扫描以捕捉在那里的离群值,并在我们有很多密度的地方变得更稳定,然后它可能会遍历整个地方,以尝试适应最后的最后一组离群值。 如果您看到这样的废话,就知道多项式中的阶数过多,阶数过多,您应该将其降低,因为尽管它适合您所观察到的数据,但对预测您尚未看到的数据没有用
想象一下,我有一条曲线突然向上弯曲,然后再次向下弯曲以适应异常值。 我对介于两者之间的内容的预测将不准确。 曲线确实应该在中间。 在本书的后面,我们将讨论检测这种过度拟合的主要方法,但是现在,请观察它并知道我们以后会更深入。
......@@ -277,7 +277,7 @@ p4 = np.poly1d(np.polyfit(x, y, 3))
因此,我们此处的前进方向仍将是使用最小二乘法来将模型拟合到您的观察结果集。 所不同的是,对于您拥有的每个不同功能,我们都会有很多系数。
因此,例如,我们最终得到的价格模型可能是 alpha 的线性关系,一些常数(类似于您的 y 截距),一些里程系数,一些年龄系数以及一些系数 它有多少扇门
因此,例如,我们最终得到的价格模型可能是 alpha 的线性关系,一些常数(类似于您的 y 截距),一些里程系数,一些年龄系数以及一些它有多少扇门的系数
![](img/5e0c70c6-ae2c-4435-92e5-e05b7ba56a28.png)
......@@ -365,7 +365,7 @@ y.groupby(df.Doors).mean()
多级模型的概念是,某些影响会在层次结构的各个级别上发生。 例如,您的健康状况。 您的健康状况可能取决于单个细胞的健康状况,而这些细胞可能取决于其内部器官的健康状况,而器官的健康状况可能取决于您整体的健康状况。 您的健康状况可能部分取决于家庭的健康状况以及家庭所提供的环境。 而您家庭的健康状况又可能取决于您所居住城市的某些因素,那里有多少犯罪,那里有多少压力,那里有多少污染。 甚至除此之外,它还可能取决于我们所生活的整个世界的因素。也许仅仅是世界医疗技术的状态才是因素,对吧?
另一个例子:您的财富。 你赚多少钱? 好吧,这是您个人辛勤工作的一个因素,但这也是您父母所做的工作的一个因素,他们有多少钱可以投资到您的教育和成长环境中,又如何 你的祖父母? 他们能够创造什么样的环境以及他们能为您的父母提供什么样的教育,这反过来又影响了他们可用于您自己的教育和养育的资源。
另一个例子:您的财富。 你赚多少钱? 好吧,这是您个人辛勤工作的一个因素,但这也是您父母所做的工作的一个因素,他们有多少钱可以投资到您的教育和成长环境中,你的祖父母又如何? 他们能够创造什么样的环境以及他们能为您的父母提供什么样的教育,这反过来又影响了他们可用于您自己的教育和养育的资源。
这些都是多级模型的示例,其中存在一个层次结构,这些层次结构在越来越大的范围内相互影响。 现在,多层次模型的挑战是试图弄清楚:“那么,如何对这些相互依赖性进行建模?如何对所有这些不同的影响进行建模,以及它们如何相互影响?”
......@@ -375,7 +375,7 @@ y.groupby(df.Doors).mean()
可以想象,这变得非常困难,并且很快变得非常复杂。 这确实超出了本书或数据科学入门书籍的范围。 这是很难的东西。 有很多关于它的厚书,您可以做一本关于它的非常高级的主题的完整书。
那么,为什么我什至提到多层次模型呢? 这是因为在某些情况下,我已经在职务说明中看到了它,这是他们希望您在一些情况下了解的事情。 我从来没有在实践中使用过它,但是我认为从获得数据科学职业的角度来看,重要的是至少要熟悉该概念,并且知道它的含义以及所涉及的一些挑战 在创建多层次模型中。 希望我已经为您提供了这些概念。 这样,我们可以继续进行下一部分。
那么,为什么我什至提到多层次模型呢? 这是因为在某些情况下,我已经在职务说明中看到了它,这是他们希望您在一些情况下了解的事情。 我从来没有在实践中使用过它,但是我认为从获得数据科学职业的角度来看,重要的是至少要熟悉该概念,并且知道它的含义,以及在创建多层次模型中所涉及的一些挑战。 希望我已经为您提供了这些概念。 这样,我们可以继续进行下一部分。
那里有多层模型的概念。 这是一个非常高级的主题,但是至少您需要了解概念是什么,并且概念本身非常简单。 当您尝试做出预测时,您只是在不同层次,不同层次上查看效果。 因此,也许会有不同层次的效果相互影响,而这些不同层次的因素也可能相互关联。 多级建模试图考虑所有这些不同的层次结构和因素,以及它们之间如何相互作用。 放心,这就是您现在需要知道的全部。
......
......@@ -41,7 +41,7 @@
因此,这确实是无监督学习的重点:如果您不知道要查找的内容,它可能是发现甚至不存在的分类的强大工具。 我们称其为**潜在变量**。 您甚至不知道原来存在的某些数据属性可以通过无监督学习来解决。
让我们再举一个无监督学习的例子。 假设我是将人们聚集在一起,而不是将球和骰子聚集在一起。 我正在写一个约会网站,我想看看什么样的人倾向于聚集在一起。 人们倾向于聚集一些属性,这些属性决定了他们是否倾向于彼此喜欢和彼此约会。 现在,您可能会发现出现的集群不符合您的易变型刻板印象。 也许这与大学生与中年人,离婚的人或宗教信仰无关。 也许,如果您查看从该分析中实际得出的集群,您将学到一些有关您的用户的新知识,并实际上发现,还有什么比您的员工真正拥有的现有功能更重要,可以决定他们是否 互相喜欢。 因此,这是提供有用结果的监督学习的示例。
让我们再举一个无监督学习的例子。 假设我是将人们聚集在一起,而不是将球和骰子聚集在一起。 我正在写一个约会网站,我想看看什么样的人倾向于聚集在一起。 人们倾向于聚集一些属性,这些属性决定了他们是否倾向于彼此喜欢和彼此约会。 现在,您可能会发现出现的集群不符合您的易变型刻板印象。 也许这与大学生与中年人,离婚的人或宗教信仰无关。 也许,如果您查看从该分析中实际得出的集群,您将学到一些有关您的用户的新知识,并实际上发现,还有什么比您的员工真正拥有的现有功能更重要,可以决定他们是否互相喜欢。 因此,这是提供有用结果的监督学习的示例。
另一个示例是根据电影的属性对电影进行聚类。 如果要对 IMDb 之类的一组电影进行聚类,结果可能会让您感到惊讶。 也许不仅仅是电影的类型。 也许还有其他属性,例如电影的年龄,放映时间或放映所在的国家/地区更重要。 你只是永远不知道。 或者,我们可以分析产品说明的文字,并尝试找到对某个类别最有意义的术语。 再有,我们可能未必事先知道什么术语或什么词最能表明产品属于某个类别。 但是通过无监督学习,我们可以挑出潜在信息。
......@@ -53,7 +53,7 @@
# 评估监督学习
那么,您如何评价监督学习? 好吧,关于监督学习的美丽之处在于我们可以使用一种称为训练/测试的技巧。 这里的想法是将我们希望我的模型从中学习的观测数据分为两组,即训练集和测试集。 因此,当我根据已有的数据来训练/构建模型时,我只会使用部分数据(称为训练集)来进行此操作,而我会保留另一部分数据以用于 测试目的。
那么,您如何评价监督学习? 好吧,关于监督学习的美丽之处在于我们可以使用一种称为训练/测试的技巧。 这里的想法是将我们希望我的模型从中学习的观测数据分为两组,即训练集和测试集。 因此,当我根据已有的数据来训练/构建模型时,我只会使用部分数据(称为训练集)来进行此操作,而我会保留另一部分数据以用于测试目的。
我可以使用一部分数据作为训练数据来构建模型,然后我可以评估由此产生的模型,并查看它是否可以成功预测出我的测试数据的正确答案。
......
......@@ -231,7 +231,7 @@ Coefficient value of the height is [ 1.00092142]
![Multiple regression](img/3450_06_10.jpg)
我们可以看到的一名球员的的罚球相当糟糕,但与其他球员相比,平均得分似乎接近平均水平,这意味着他在半场得分或 他会尝试很多得分。 这里的整体分布也很分散。
我们可以看到的一名球员的的罚球相当糟糕,但与其他球员相比,平均得分似乎接近平均水平,这意味着他在半场得分或他会尝试很多得分。 这里的整体分布也很分散。
从前面的相关性和分布分析,我们可以看出,得分的平均值和自变量之间没有明确的模式。 可以预料,将使用现有数据构建的模型不会非常准确。
......
......@@ -387,4 +387,4 @@ Area under the ROC curve :0.878275
在本章中,您学习了逻辑回归的目的。 您学习了如何使用 statsmodels 和 SciKit 构建逻辑回归模型,然后如何评估模型并查看其是否为好模型。
在下一章中,您将学习如何生成建议,例如您在[这个页面](http://www.amazon.com/)上看到的建议,根据您的购买将向您推荐新商品 历史。 也可以根据您当前正在浏览的产品向您显示类似的项目。
\ No newline at end of file
在下一章中,您将学习如何生成建议,例如您在[这个页面](http://www.amazon.com/)上看到的建议,根据您的购买历史将向您推荐新商品。 也可以根据您当前正在浏览的产品向您显示类似的项目。
\ No newline at end of file
......@@ -724,7 +724,7 @@ If you limit your expectations for Jurassic World to more teeth, it will deliver
```
我们可以看到我们的 Spark 程序能够为每条评论打分。 情感分数输出末尾的数字表明,如果评论为肯定或否定,则情感分数的数字越高—评论越好,而情感分数的数字越负—否定 审查已经
我们可以看到我们的 Spark 程序能够为每条评论打分。 情感分数输出末尾的数字表明,如果评论为肯定或否定,则情感分数的数字越高—评论越好,而情感分数的数字越低—评论越差
我们使用带有以下参数的 Spark Submit 命令:
......
......@@ -4,7 +4,7 @@
数据科学是一个相对较新的知识领域,需要成功集成线性代数,统计建模,可视化,计算语言学,图形分析,机器学习,商业智能以及数据存储和检索。
在过去的十年中,Python 编程语言征服了科学界,如今它已成为数据科学从业人员必不可少的工具,并且是每个有抱负的数据科学家必备的工具。 Python 将为您提供快速,可靠,跨平台且成熟的环境,用于数据分析,机器学习和算法问题解决。 通过我们简单,循序渐进,面向示例的方法,可以轻松克服以前阻止您掌握 Python 用于数据科学应用程序的一切,这将帮助您将最直接,最有效的 Python 工具应用于演示和现实世界 数据集。
在过去的十年中,Python 编程语言征服了科学界,如今它已成为数据科学从业人员必不可少的工具,并且是每个有抱负的数据科学家必备的工具。 Python 将为您提供快速,可靠,跨平台且成熟的环境,用于数据分析,机器学习和算法问题解决。 通过我们简单,循序渐进,面向示例的方法,可以轻松克服以前阻止您掌握 Python 用于数据科学应用程序的一切,这将帮助您将最直接,最有效的 Python 工具应用于示例和现实世界的数据集。
作为《Python 数据科学基础知识》的第三版,这本书提供了更新和扩展的内容。 基于最新的 Jupyter笔记本和 JupyterLab 接口(结合了可互换的内核,一个真正的多语言数据科学系统),本书结合了 NumPy,`pandas`和 Scikit-learn 的所有最新改进。 此外,它以新的 GBM 算法(XGBoost,LightGBM 和 CatBoost),深度学习(通过提供基于 TensorFlow 的 Keras 解决方案),精美的可视化效果(主要是由于 Seaborn)和 Web 部署(使用瓶子)的形式提供了新内容。 。
......
......@@ -18,7 +18,7 @@
数据科学是一个相对较新的知识领域,尽管计算机科学界已经对它的核心组件进行了多年的研究。 它的组件包括线性代数,统计建模,可视化,计算语言学,图形分析,机器学习,商业智能以及数据存储和检索。
数据科学是一个新领域,您必须考虑到当前,它的前沿仍然有些模糊和动态。 由于数据科学是由各种学科构成的,所以请记住,根据数据科学家的能力和专业领域的不同,它们的个人资料也会有所不同(例如,您可以阅读 Harlan D Harris 在[这个页面](http://radar.oreilly.com/2013/06/theres-more-than-one-kind-of-data-scientist.html)上发表的《数据科学家》的说明性文章,或深入讨论 有关 A 型或 B 型数据科学家以及其他有趣的分类法的信息,请访问[这个页面](https://stats.stackexchange.com/questions/195034/what-is-a-data-scientist))。
数据科学是一个新领域,您必须考虑到当前,它的前沿仍然有些模糊和动态。 由于数据科学是由各种学科构成的,所以请记住,根据数据科学家的能力和专业领域的不同,它们的个人资料也会有所不同(例如,您可以阅读 Harlan D Harris 在[这个页面](http://radar.oreilly.com/2013/06/theres-more-than-one-kind-of-data-scientist.html)上发表的《数据科学家》的说明性文章,或深入讨论有关 A 型或 B 型数据科学家以及其他有趣的分类法的信息,请访问[这个页面](https://stats.stackexchange.com/questions/195034/what-is-a-data-scientist))。
在这种情况下,作为数据科学家,您可以学习并有效使用的最佳交易工具是什么? 我们相信最好的工具是 Python,并且我们打算为您提供快速入门所需的所有基本信息。
......@@ -45,11 +45,11 @@ Python 创建于 1991 年,是一种通用的,解释性的和面向对象的
# Python 2 还是 Python 3?
Python 有两个主要分支:2.7.x 和 3.x。 在本书的第三版修订时,Python 基金会( [www.python.org/](http://www.python.org/) )正在提供 Python 版本 2.7.15(发布日期为 2018 年 1 月 5 日)和 3.6 的下载。 .5(发布日期 2018 年 1 月 3 日)。 尽管最新的 Python 3 版本,但*较旧的* Python 2 在 2017 年仍在科学(采用 20%)和商业(采用 30%)领域中使用,[本调查所详细描述的那样 通过 JetBrains](https://www.jetbrains.com/research/python-developers-survey-2017/)。 如果您仍在使用 Python 2,那么情况很快就会变得很麻烦,因为在短短的一年时间内,Python 2 将被淘汰并且维护将停止( [pythonclock.org/](https://pythonclock.org/) 将为您提供倒计时, 但是要获得对此的正式声明,只需阅读[这个页面](https://www.python.org/dev/peps/pep-0373/)[实际上只有少数几个库在两者版本之间仍然不兼容](http://py3readiness.org/)并没有足够的理由继续使用旧版本。
Python 有两个主要分支:2.7.x 和 3.x。 在本书的第三版修订时,Python 基金会( [www.python.org/](http://www.python.org/) )正在提供 Python 版本 2.7.15(发布日期为 2018 年 1 月 5 日)和 3.6 的下载。 .5(发布日期 2018 年 1 月 3 日)。 尽管最新的 Python 3 版本,但*较旧的* Python 2 在 2017 年仍在科学(采用 20%)和商业(采用 30%)领域中使用,[ JetBrains 的调查所详细描述的那样](https://www.jetbrains.com/research/python-developers-survey-2017/)。 如果您仍在使用 Python 2,那么情况很快就会变得很麻烦,因为在短短的一年时间内,Python 2 将被淘汰并且维护将停止( [pythonclock.org/](https://pythonclock.org/) 将为您提供倒计时, 但是要获得对此的正式声明,只需阅读[这个页面](https://www.python.org/dev/peps/pep-0373/)[实际上只有少数几个库在两者版本之间仍然不兼容](http://py3readiness.org/)并没有足够的理由继续使用旧版本。
除了所有这些原因之外,Python 3 和 2 之间没有立即的向后兼容性。实际上,如果尝试使用 Python 3 解释器运行一些为 Python 2 开发的代码,则可能无法正常工作。 最新版本进行了重大更改,这影响了以前的兼容性。 一些数据科学家已经将大部分工作建立在 Python 2 及其软件包上,因此他们不愿意切换到新版本。
在本书的第三版中,我们将继续针对广大的数据科学家,数据分析师和开发人员,这些人在 Python 2 中没有如此强大的遗产。因此,我们将继续使用 Python 3,并且我们 建议使用最新版本的 Python 3.6 等版本。 毕竟,Python 3 是 Python 的现在和未来。 它是 Python 基金会将进一步开发和改进的唯一版本,并且它将是许多操作系统上未来的默认版本。
在本书的第三版中,我们将继续针对广大的数据科学家,数据分析师和开发人员,这些人在 Python 2 中没有如此强大的遗产。因此,我们将继续使用 Python 3,并且我们建议使用最新版本的 Python 3.6 等版本。 毕竟,Python 3 是 Python 的现在和未来。 它是 Python 基金会将进一步开发和改进的唯一版本,并且它将是许多操作系统上未来的默认版本。
无论如何,如果您当前正在使用版本 2,并且希望继续使用它,则仍然可以使用本书及其所有示例。 实际上,在大多数情况下,在代码本身带有以下导入之前,我们的代码将仅在 Python 2 上运行:
......@@ -305,7 +305,7 @@ $> pip install virtualenv
安装完成后,您可以开始构建虚拟环境。 在继续之前,您必须做出一些决定:
* 如果您的系统上安装了更多版本的 Python,则必须决定选择哪个版本。 否则,`virtualenv`将采用在您的系统上安装`virtualenv`时使用的 Python 版本。 为了设置不同的 Python 版本,您必须在参数`-p`后面加上所需的 Python 版本,或者插入要使用的 Python 可执行文件的路径(例如,使用`-p python2.7` 只是指向 Python 可执行文件,例如`-p c:Anaconda2python.exe`)。
* 如果您的系统上安装了更多版本的 Python,则必须决定选择哪个版本。 否则,`virtualenv`将采用在您的系统上安装`virtualenv`时使用的 Python 版本。 为了设置不同的 Python 版本,您必须在参数`-p`后面加上所需的 Python 版本,或者插入要使用的 Python 可执行文件的路径(例如,使用`-p python2.7`或只是指向 Python 可执行文件,例如`-p c:Anaconda2python.exe`)。
* 使用`virtualenv`,当需要安装某些软件包时,它将从头开始安装,即使它已在系统级别可用(在您从中创建虚拟环境的 python 目录中)。 此默认行为很有意义,因为它允许您创建一个完全分离的空环境。 为了节省磁盘空间并限制所有软件包的安装时间,您可以改为使用参数`--system-site-packages`来决定利用系统上已经可用的软件包。
* 您可能希望以后可以跨 Python 安装甚至在不同的机器之间在虚拟环境中移动。 因此,您可能想通过使用参数`--relocatable`来使所有环境脚本相对于其放置的路径实现功能。
......@@ -424,7 +424,7 @@ $> conda remove -n python36 --all
我们现在要介绍的软件包具有很强的分析能力,它们将构成一个完整的数据科学工具箱。 所有软件包均由经过广泛测试和高度优化的功能组成,以提高内存使用率和性能,并准备成功执行任何脚本操作。 下一节提供了有关如何安装它们的演练。
部分受到 R 和 MATLAB 环境中存在的类似工具的启发,我们将探索一些选定的 Python 命令如何使您能够有效地处理数据,然后在无需编写过多代码或重新发明的情况下进行探索,转换,实验和学习 车轮
部分受到 R 和 MATLAB 环境中存在的类似工具的启发,我们将探索一些选定的 Python 命令如何使您能够有效地处理数据,然后在无需编写过多代码或重新发明轮子的情况下进行探索,转换,实验和学习
# NumPy
......@@ -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
......@@ -768,13 +768,13 @@ install.packages(c('pbdZMQ', 'devtools')) devtools::install_github('IRkernel/rep
您不能为不同的内核混合使用相同的笔记本命令。 每个笔记本仅指一个内核,即最初创建时使用的那个内核。
得益于强大的内核思想,程序可以运行由前端接口传达的用户代码,并向接口本身提供有关执行代码结果的反馈,因此无论您使用哪种语言,都可以使用相同的接口和交互式编程风格 正在用于发展
得益于强大的内核思想,程序可以运行由前端接口传达的用户代码,并向接口本身提供有关执行代码结果的反馈,因此无论您使用哪种语言,都可以将相同的接口和交互式编程风格用于开发
在这种情况下,IPython 是零内核,最初的内核是零,但仍然存在,但不再打算用于引用整个项目。
因此,Jupyter 可以简单地描述为用于可通过控制台或基于 Web 的笔记本操作的交互式任务的工具,该工具提供了特殊的命令,可帮助开发人员更好地理解和构建当前正在编写的代码。
与 IDE(与编写脚本,事后运行并最终评估其结果的思想相反)相反,Jupyter 允许您以块,命名单元的形式编写代码,依次运行每个单元,并评估每个结果 一个单独,检查文本和图形输出。 除了图形集成,它还提供可定制的命令,丰富的历史记录(JSON 格式)和计算并行性,可为您提供进一步的帮助,从而在处理大量数值计算时提高了性能。
与 IDE(与编写脚本,事后运行并最终评估其结果的思想相反)相反,Jupyter 允许您以块,命名单元的形式编写代码,依次运行每个单元,并单独评估每个结果,检查文本和图形输出。 除了图形集成,它还提供可定制的命令,丰富的历史记录(JSON 格式)和计算并行性,可为您提供进一步的帮助,从而在处理大量数值计算时提高了性能。
这种方法对于涉及基于数据的代码开发的任务也特别富有成果,因为它自动完成了经常被忽视的文档编制工作,并说明了数据分析的完成方式,前提和假设以及中间结果和最终结果。 如果您的工作之一是同时介绍您的工作并说服项目的内部或外部利益相关者,那么 Jupyter 确实可以毫不费力地为您讲故事。
......@@ -836,7 +836,7 @@ In:%%latex
能够将技术公式集成到 markdown 中对于涉及基于数据的代码开发的任务特别有用,因为它可以自动完成通常被忽略的文档编制工作,并说明如何管理数据分析及其前提,假设,中间和中间数据。 最终结果。 如果您的工作之一是同时介绍您的工作并说服项目中的内部或外部利益相关者,那么 Jupyter 确实可以毫不费力地为您讲故事。
[网页](https://github.com/ipython/ipython/wiki/A-gallery-of-interesting-IPython-Notebooks)上,有很多示例,您可能会发现其中的一些启发 工作,就像我们所做的那样。 实际上,我们不得不承认,保持清洁,最新的 Jupyter笔记本可以节省与经理和利益相关者见面时突然出现的不计其数的时间,这需要我们草率地介绍工作的状态。
[网页](https://github.com/ipython/ipython/wiki/A-gallery-of-interesting-IPython-Notebooks)上,有很多示例,您可能会发现其中的一些启发工作,就像我们所做的那样。 实际上,我们不得不承认,保持清洁,最新的 Jupyter笔记本可以节省与经理和利益相关者见面时突然出现的不计其数的时间,这需要我们草率地介绍工作的状态。
简而言之,Jupyter 允许您执行以下操作:
......@@ -879,7 +879,7 @@ $> jupyter notebook
In: print ("This is a test")
```
写入单元格后,只需按一下单元格选项卡下面的**播放**按钮(或作为键盘热键,您可以同时按 shift 键和输入按钮)即可运行它并获取 输出。 然后,将出现另一个单元格供您输入。 在单元格中书写时,如果按菜单栏上的加号按钮,将获得一个新的单元格,并且可以使用菜单上的箭头从一个单元格移动到另一个单元格。
写入单元格后,只需按一下单元格选项卡下面的**播放**按钮(或作为键盘热键,您可以同时按 shift 键和输入按钮)即可运行它并获取输出。 然后,将出现另一个单元格供您输入。 在单元格中书写时,如果按菜单栏上的加号按钮,将获得一个新的单元格,并且可以使用菜单上的箭头从一个单元格移动到另一个单元格。
其他大多数功能都非常直观,我们邀请您尝试一下。 为了了解 Jupyter 的工作原理,您可以使用快速入门指南,例如[这个页面](http://jupyter-notebook-beginner-guide.readthedocs.io/en/latest/),或购买专门的书籍 Jupyter 功能。
......@@ -1223,7 +1223,7 @@ In: print (iris.DESCR)
In: print (type(iris.data)) Out: <class 'numpy.ndarray'>
```
`Iris.data`提供名为`sepal length``sepal width``petal length``petal width`的变量的数值,它们以矩阵形式`(150, 4)`排列,其中 150 是观察数,4 是 功能数量。 变量的顺序是`iris.feature_names`中显示的顺序。
`Iris.data`提供名为`sepal length``sepal width``petal length``petal width`的变量的数值,它们以矩阵形式`(150, 4)`排列,其中 150 是观察数,4 是特征数量。 变量的顺序是`iris.feature_names`中显示的顺序。
`Iris.target`是整数的向量,其中每个数字代表一个不同的类(请参阅`target_names`的内容;每个类名称都与其索引号和*山鸢尾*相关,该零元素是零元素 列表中的,在目标向量中表示为`0`
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册