提交 16b742d9 编写于 作者: W wizardforcel

2021-02-20 21:58:27

上级 c54b14bf
......@@ -204,7 +204,7 @@ plt.show()
如果您不熟悉直方图或需要复习,可以用以下方法来解释:将数据离散化后的每个存储桶都在显示该数据的频率。
因此,举例来说,对于每个给定的值范围,我们看到在该邻域中大约有 **600** 个数据点。 有很多人都在 27,000 大关附近,但是当您走到 **80,000** 之类的离群值时,并没有很多人,而且显然还有一些穷人甚至在 **-40,000 时负债累累**,但又一次,它们非常罕见且不太可能,因为我们定义了正态分布,这就是正态概率曲线的样子。 再次,我们将在以后更详细地讨论这一点,但是如果您还不知道,那么我只是想让您想到这个想法。
因此,举例来说,对于每个给定的值范围,我们看到在该邻域中大约有`600`个数据点。 有很多人都在 27,000 大关附近,但是当您走到 **80,000** 之类的离群值时,并没有很多人,而且显然还有一些穷人甚至在 **-40,000 时负债累累**,但又一次,它们非常罕见且不太可能,因为我们定义了正态分布,这就是正态概率曲线的样子。 再次,我们将在以后更详细地讨论这一点,但是如果您还不知道,那么我只是想让您想到这个想法。
# 使用 NumPy 软件包计算中位数
......@@ -378,7 +378,7 @@ Out[11]: ModeResult(mode=array([29]), count=array([14]))
现在,通常,我们谈论标准偏差多于方差,事实证明标准偏差只是方差的平方根。 就这么简单。
因此,如果我的差异为 *5.04* ,则标准偏差为 *2.24* 。 现在您知道为什么我们说方差=(σ) <sup class="calibre33">2</sup> 。 这是因为σ本身代表标准偏差。 因此,如果我取(σ) <sup class="calibre33">2</sup> 的平方根,则得到 sigma。 在此示例中最终为 2.24。
因此,如果我的差异为`5.04`,则标准偏差为`2.24`。 现在您知道为什么我们说方差=(σ) <sup class="calibre33">2</sup> 。 这是因为σ本身代表标准偏差。 因此,如果我取(σ) <sup class="calibre33">2</sup> 的平方根,则得到 sigma。 在此示例中最终为 2.24。
![](img/e5593f79-70de-45c1-95f6-a481fcd4932e.png)
......@@ -388,9 +388,9 @@ Out[11]: ModeResult(mode=array([29]), count=array([14]))
![](img/f44b86df-acba-4f0d-8118-d77696204ddb.png)
现在我们看到 **4** 在我们的数据集中出现了两次,然后我们有一个 **1**,一个 **5** 和一个 **8**
现在我们看到`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 是离群值。 我们不必猜测和盯着它。 现在仍然需要根据数据点与平均值有多少标准偏差来判断离群值。
通常,您可以通过与平均值之间的标准差(或有时为多少个 sigma)来谈论一个数据点有多少离群值。
......@@ -514,9 +514,9 @@ incomes.var()
从概念上来说,尝试将此图视为出现给定值的概率很容易,但是当您谈论连续数据时,这有点误导。 因为在连续数据分布中有无限多个实际可能的数据点。 可能为 0 或 0.001 或 0.00001,因此发生非常特定的值的实际概率非常非常小,并且无限小。 概率密度函数实际上告诉了给定范围的值出现的概率。 因此,这就是您必须考虑的方式。
因此,例如,在上图中所示的正态分布中,在平均值(**0**)和一个与平均值的标准偏差(**1σ**)之间,存在 **34.1%** 值落在该范围内的机会。 您可以根据需要加强或扩展它,找出实际值,但这是考虑概率密度函数的方法。 对于给定的值范围,它为您提供了一种方法来找出该范围出现的可能性。
因此,例如,在上图中所示的正态分布中,在平均值(`0`)和一个与平均值的标准偏差(**1σ**)之间,存在 **34.1%** 值落在该范围内的机会。 您可以根据需要加强或扩展它,找出实际值,但这是考虑概率密度函数的方法。 对于给定的值范围,它为您提供了一种方法来找出该范围出现的可能性。
* 您可以在图表中看到,在接近一个平均值(**-1σ****1σ**)的情况下,接近平均值(**0**), 很可能降落在那里。 我的意思是,如果您将 34.1 和 34.1 相加,等于 68.2%,您的落地概率就在平均值的一个标准偏差之内。
* 您可以在图表中看到,在接近一个平均值(**-1σ****1σ**)的情况下,接近平均值(`0`), 很可能降落在那里。 我的意思是,如果您将 34.1 和 34.1 相加,等于 68.2%,您的落地概率就在平均值的一个标准偏差之内。
* 但是,当您获得两个到三个标准偏差(**-3σ****-2σ****2σ****3σ**)时, 下降到略高于 4%(准确地说是 4.2%)。
* 当您超出三个标准偏差(**-3σ****3σ**)时,我们的误差就远远小于 1%。
......@@ -558,7 +558,7 @@ plt.show()
在数据中出现给定值或值范围的可能性几乎相等。 因此,与正态分布不同,在正态分布中,我们看到了均值附近的值集中,而均匀分布在您定义的范围内的任何给定值上具有相等的概率。
那么,这种概率分布函数是什么样的呢? 好吧,我希望基本上不会在 **-10** 的范围内或超出 **10** 的范围内。 但是,当我介于 **-10****10** 之间时,我会看到一条平线,因为这些值范围中的任何一个出现的可能性都是恒定的。 因此,在均匀分布中,您会在概率分布函数上看到一条平线,因为基本上存在恒定的概率。 每个值,每个值范围都有与其他任何值一样出现的机会。
那么,这种概率分布函数是什么样的呢? 好吧,我希望基本上不会在`-10`的范围内或超出`10`的范围内。 但是,当我介于`-10``10`之间时,我会看到一条平线,因为这些值范围中的任何一个出现的可能性都是恒定的。 因此,在均匀分布中,您会在概率分布函数上看到一条平线,因为基本上存在恒定的概率。 每个值,每个值范围都有与其他任何值一样出现的机会。
# 正态分布或高斯分布
......@@ -579,7 +579,7 @@ plt.plot(x, norm.pdf(x))
![](img/a7cd81e2-a685-4e43-bc34-1d79beccfcea.png)
具有正态分布的 pdf 函数看起来就像在上一节中一样,即,对于我们提供的给定数字,正态分布,其中 0 表示平均值,数字 **-3****-2****-1****1****2****3** 是标准偏差。
具有正态分布的 pdf 函数看起来就像在上一节中一样,即,对于我们提供的给定数字,正态分布,其中 0 表示平均值,数字`-3``-2``-1``1``2``3`是标准偏差。
现在,我们将生成具有正态分布的随机数。 我们已经做过几次了; 考虑一下这。 请参考以下代码块:
......@@ -665,7 +665,7 @@ plt.plot(x, poisson.pmf(x, mu))
![](img/1e402208-e7bc-46f3-aa27-c4a2ef1c7f1a.png)
事实证明,在给定的一天看到 **550** 位访客的几率约为 **0.002** 或 0.2%的概率。 很有意思。
事实证明,在给定的一天看到`550`位访客的几率约为`0.002`或 0.2%的概率。 很有意思。
好了,这些是您在现实世界中可能会遇到的一些常见数据分布。
......
......@@ -687,7 +687,7 @@ Image(graph.create_png())
到了! 多么酷啊?! 我们在这里有一个实际的流程图。
现在,让我告诉您如何阅读它。 在每个阶段,我们都有一个决定。 记住我们大多数的数据是 **0****1**。 因此,第一个决策点变为:是否就业? 小于 **0.5**? 这意味着如果我们的就业值为 0,则为否,我们将向左移动;如果就业为 1,则为是,我们将向右移动。
现在,让我告诉您如何阅读它。 在每个阶段,我们都有一个决定。 记住我们大多数的数据是`0``1`。 因此,第一个决策点变为:是否就业? 小于`0.5`? 这意味着如果我们的就业值为 0,则为否,我们将向左移动;如果就业为 1,则为是,我们将向右移动。
那么,他们以前有工作吗? 如果不是,请左,如果是,请右。 事实证明,在我的样本数据中,当前受雇的每个人实际上都有工作机会,所以我可以很快地说出如果您目前在受雇,是的,您值得引进,我们将紧跟 第二层在这里。
......
......@@ -25,7 +25,7 @@ KNN 听起来很花哨,但实际上它是其中最简单的技术之一! 假
![](img/cdac4f24-ef67-463c-ade8-14188ba538e5.jpg)
在这里,我们可以根据散点图中任意两点之间的等级和受欢迎程度来计算某种距离。 假设有一个新观点出现,一部我们不知道其类型的新电影。 我们可以做的是将 *K* 设置为 *3* ,然后将 *3* 最近的邻居设为散点图上的该点; 然后他们都可以对新的点/电影的分类进行投票。
在这里,我们可以根据散点图中任意两点之间的等级和受欢迎程度来计算某种距离。 假设有一个新观点出现,一部我们不知道其类型的新电影。 我们可以做的是将 *K* 设置为`3`,然后将`3`最近的邻居设为散点图上的该点; 然后他们都可以对新的点/电影的分类进行投票。
您可以看到是否带了三个最近的邻居( *K = 3* ),我有 2 部戏剧电影和 1 部科幻电影。 然后,我让他们全部投票,然后我们将基于最近的 3 个邻居为该新点选择戏剧的分类。 现在,如果我将这个圈子扩大到包括 5 个最近的邻居,即 *K = 5* ,我得到一个不同的答案。 因此,在这种情况下,我选择了 3 部科幻小说和 2 部戏剧电影。 如果让他们全部投票,我最终将得到一部关于新电影的科幻小说分类。
......@@ -81,9 +81,9 @@ movieProperties.head()
![](img/cfe272d1-c206-460d-9ebb-759a700f39ec.png)
这给了我们另一个`DataFrame`,它告诉我们,例如`movie_id 1`的评分为 **452**(这是其受欢迎程度的衡量标准,即实际上有多少人观看并对其进行了评级), 平均评价得分 3.8。 因此,**452** 人观看了`movie_id 1`,他们给它的平均评价为 3.87,这是相当不错的。
这给了我们另一个`DataFrame`,它告诉我们,例如`movie_id 1`的评分为`452`(这是其受欢迎程度的衡量标准,即实际上有多少人观看并对其进行了评级), 平均评价得分 3.8。 因此,`452`人观看了`movie_id 1`,他们给它的平均评价为 3.87,这是相当不错的。
现在,原始评分等级对我们没有太大用处。 我的意思是我不知道 **452** 是否受欢迎。 因此,为了标准化,我们要做的基本上是根据每部电影的最大和最小收视率来衡量。 我们可以使用`lambda`功能来做到这一点。 因此,我们可以通过这种方式将功能应用于整个`DataFrame`
现在,原始评分等级对我们没有太大用处。 我的意思是我不知道`452`是否受欢迎。 因此,为了标准化,我们要做的基本上是根据每部电影的最大和最小收视率来衡量。 我们可以使用`lambda`功能来做到这一点。 因此,我们可以通过这种方式将功能应用于整个`DataFrame`
我们要做的是使用`np.min()``np.max()`函数查找在整个数据集中找到的最大评分数和最小评分数。 因此,我们将拍摄最流行的电影和最不流行的电影,然后在此处找到范围,并针对该范围对所有内容进行归一化:
......
......@@ -123,7 +123,7 @@ SciPy 软件包中的`binom`函数有助于生成二项式分布以及与之相
## 伯努利发行
您可以执行具有两个可能结果的实验​​:成功或失败。 成功的概率为 *p* ,失败的概率为 *1-p* 。 在成功的情况下取 *1* 值,在失败的情况下取 *0* 值的随机变量称为伯努利分布。 概率分布函数可以写成:
您可以执行具有两个可能结果的实验​​:成功或失败。 成功的概率为 *p* ,失败的概率为 *1-p* 。 在成功的情况下取`1`值,在失败的情况下取`0`值的随机变量称为伯努利分布。 概率分布函数可以写成:
![A Bernoulli distribution](img/3450_02_11.jpg)
......@@ -581,7 +581,7 @@ f 统计量由以下公式给出:
![The F distribution](img/3450_02_33.jpg)
*s* <sub>*1*</sub>*n* <sub>*1* [</sub> 大小 *s* <sub>*2*</sub> 是样本 2 的标准偏差,其中大小 *n* <sub>*2*</sub> *σ* <sub>*1*</sub> 是样本*1σ* <sub>*2* 的总体标准差 ]</sub> 是样本 12 的总体标准偏差。
*s* <sub>`1`</sub>*n* <sub>`1`[</sub> 大小 *s* <sub>`2`</sub> 是样本 2 的标准偏差,其中大小 *n* <sub>`2`</sub> *σ* <sub>`1`</sub> 是样本*1σ* <sub>`2`的总体标准差 ]</sub> 是样本 12 的总体标准偏差。
**f** 统计信息的所有可能值的分布称为 F 分布。 下图中的`d1``d2`表示自由度:
......@@ -599,9 +599,9 @@ f 统计量由以下公式给出:
![The chi-square distribution](img/3450_02_36.jpg)
这里, *Y* <sub>*0*</sub> 是取决于自由度数的常数, *X* <sub>*2 [*</sub> 是卡方统计量, *v = n-1* 是自由度数, *e* 是等于自然对数底数的常数 系统。
这里, *Y* <sub>`0`</sub> 是取决于自由度数的常数, *X* <sub>*2 [*</sub> 是卡方统计量, *v = n-1* 是自由度数, *e* 是等于自然对数底数的常数 系统。
*Y* <sub>*0*</sub> 的定义使得卡方曲线下的面积等于 1。
*Y* <sub>`0`</sub> 的定义使得卡方曲线下的面积等于 1。
![The chi-square distribution](img/B03450_02_37.jpg)
......
......@@ -232,7 +232,7 @@ k 均值聚类是一种无监督的学习技术,有助于将 *n* 观测值的
我们如何选择这个 K? 如果我们对所要寻找的东西有所了解,或者期望或想要多少个集群,那么在启动引擎并让算法进行计算之前,将 *K* 设置为该数字。
如果我们不知道有多少,那么我们的探索将花费更长的时间并涉及一些反复试验,例如,当我们尝试 *K = 3* *4**5* ,直到我们看到集群在我们的领域对我们有意义。
如果我们不知道有多少,那么我们的探索将花费更长的时间并涉及一些反复试验,例如,当我们尝试 *K = 3*`4``5`,直到我们看到集群在我们的领域对我们有意义。
![The k-means clustering](img/B03450_05_11.jpg)
......
......@@ -15,7 +15,7 @@ k 均值聚类算法通过计算特征的平均值(例如我们用于聚类的
我们如何选择 *K* ? 如果我们对所要寻找的东西有所了解,或者期望或想要多少个集群,则可以在启动引擎并进行算法计算之前将 *K* 设置为该数字。
如果我们不知道有多少个集群,那么我们的探索将花费更长的时间并涉及一些反复试验,例如,当我们尝试 *K = 3* *4* 时, 和 *5*
如果我们不知道有多少个集群,那么我们的探索将花费更长的时间并涉及一些反复试验,例如,当我们尝试 *K = 3*`4`时, 和`5`
k 均值算法是迭代的。 首先从数据中随机选择 *K* 点,然后将它们用作聚类中心。 然后,在每个迭代步骤中,此算法都会确定哪些行值最接近聚类中心,并为其分配 *K* 点。
......
......@@ -190,7 +190,7 @@ In: fake_dataset.fillna(50)
![](img/e177580f-6e27-4730-8dfb-f4ed92881234.png)
之后,所有丢失的数据都消失了,并已由常量 **50.0** 代替。 处理丢失的数据也可能需要不同的方法。 作为先前命令的替代方法,可以用负常数值替换值,以标记它们与其他值不同的事实(并由学习算法来猜测):
之后,所有丢失的数据都消失了,并已由常量`50.0`代替。 处理丢失的数据也可能需要不同的方法。 作为先前命令的替代方法,可以用负常数值替换值,以标记它们与其他值不同的事实(并由学习算法来猜测):
```py
In: fake_dataset.fillna(-1)
......
......@@ -792,7 +792,7 @@ nu 特别取决于:
*nu_estimate = 0.95 * outliers_fraction + 0.05*
因此,通过将`outliers_fraction`(从 *0.02* 更改为较大的值,例如 *0.1* ),当假定发生率较高时,您需要算法对可能出现的异常现象给予更多关注 您数据中的异常情况。
因此,通过将`outliers_fraction`(从`0.02`更改为较大的值,例如`0.1`),当假定发生率较高时,您需要算法对可能出现的异常现象给予更多关注 您数据中的异常情况。
我们还要观察 PCA 组件从 2 到 5 的图形输出,并将其与主组件进行比较(所解释方差的 51%)。 该系列的第一个图(包括四个散点图)如下:
......@@ -894,7 +894,7 @@ In: from sklearn.metrics import classification_report
![](img/23bf9c64-7ed6-4f0b-aa55-25ccaa4b24d2.png)
在数据科学实践中,**精度****调用****精度**更为广泛地使用,因为数据问题中的大多数数据集倾向于不平衡。 为了解决这种不平衡,数据科学家经常以**精度****召回****f1 分数**来表示其结果。 此外,我们必须注意**精度****精度****召回****f1-分数**如何采用[0.0,1.0 ] 范围。 完美的分类器在所有这些指标上的得分都达到 **1.0**(但是要当心任何完美的分类,如果太令人难以置信,请当心,因为这通常意味着出了点问题;现实世界中的数据问题永远不会 完美的解决方案)。
在数据科学实践中,**精度****调用****精度**更为广泛地使用,因为数据问题中的大多数数据集倾向于不平衡。 为了解决这种不平衡,数据科学家经常以**精度****召回****f1 分数**来表示其结果。 此外,我们必须注意**精度****精度****召回****f1-分数**如何采用[0.0,1.0 ] 范围。 完美的分类器在所有这些指标上的得分都达到`1.0`(但是要当心任何完美的分类,如果太令人难以置信,请当心,因为这通常意味着出了点问题;现实世界中的数据问题永远不会 完美的解决方案)。
# 二进制分类
......
......@@ -205,7 +205,7 @@ Out: 685 µs ± 9.86 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
生成的模型似乎具有良好的性能和较高的训练速度,尽管我们不要忘记我们的数据集也很小。 现在,让我们看看它如何处理另一个多类问题。
分类器的目的是预测特征向量属于 *Ck* 类的可能性。 在该示例中,存在三个类别(`setosa``versicolor``virginica`)。 因此,我们需要计算所有类别的成员资格概率; 为了使说明简单,我们将其命名为 *1**2**3* 。 因此,对于*和*观察,朴素贝叶斯分类器的目标是计算以下内容:
分类器的目的是预测特征向量属于 *Ck* 类的可能性。 在该示例中,存在三个类别(`setosa``versicolor``virginica`)。 因此,我们需要计算所有类别的成员资格概率; 为了使说明简单,我们将其命名为`1``2``3`。 因此,对于*和*观察,朴素贝叶斯分类器的目标是计算以下内容:
![](img/31b7a99e-4b52-4959-8eab-09e0b871cf60.png)
......
......@@ -231,7 +231,7 @@ Twitter 情绪分析数据管道架构
在上图中,我们可以将工作流分解为以下步骤:
1. 产生一系列推文并将其发布到 Kafka 主题中,可以将其视为将事件分组在一起的渠道。 反过来,接收者组件可以订阅此主题/频道以使用这些事件。
2. 通过情感,语言和社交语调得分丰富推文:使用 Spark Streaming 从组件 **1** 订阅 Kafka 主题,然后将文本发送到 Watson Tone Analyzer 服务。 将得到的色调分数添加到数据中,以进行进一步的下游处理。 该组件使用 Scala 实现,为方便起见,使用 Jupyter Scala 笔记本运行。
2. 通过情感,语言和社交语调得分丰富推文:使用 Spark Streaming 从组件`1`订阅 Kafka 主题,然后将文本发送到 Watson Tone Analyzer 服务。 将得到的色调分数添加到数据中,以进行进一步的下游处理。 该组件使用 Scala 实现,为方便起见,使用 Jupyter Scala 笔记本运行。
3. 数据分析和探索:在这一部分,我们决定使用 Python Notebook 仅仅是因为 Python 提供了更具吸引力的库生态系统,尤其是在数据可视化方面。
4. 将结果发布回 Kafka。
5. 将实时仪表板实现为 Node.js 应用程序。
......
......@@ -938,7 +938,7 @@ count_cars('chevrolet')
没有参数,`pixie_debugger`单元魔术将在代码中的第一个可执行语句处停止。 但是,您可以使用`-b`开关轻松地将其配置为在特定位置停止,然后是一个断点列表,该断点可以是行号或方法名。
从前面的示例代码开始,让我们在`count_cars()`方法和第 **11** 行添加断点:
从前面的示例代码开始,让我们在`count_cars()`方法和第`11`行添加断点:
```py
%%pixie_debugger -b count_cars 11
......
......@@ -32,7 +32,7 @@ Drew 的数据科学 Conway Venn 图现在包括开发人员
一个很好的例子是称为 [AlphaZero](https://en.wikipedia.org/wiki/AlphaZero) 的 Google 自学习 AI,它在 4 小时内自学了国际象棋,并继续击败冠军 国际象棋程序。 另一个很好的例子来自 IBM 最近宣布的[辩论者项目](https://www.research.ibm.com/artificial-intelligence/project-debater),这是第一个可以对人类进行辩论的 AI 系统。 复杂的话题。 这些类型的进步将继续推动越来越多的强大服务的可用性,包括开发人员在内的每个人都可以使用它。 聊天机器人是已成功实现民主化的服务的另一个示例,因为开发人员从未如此轻松地创建包含对话功能的应用程序。 我相信,随着时间的流逝,使用这些服务将变得越来越容易,使开发人员能够构建令人惊奇的新应用程序,而这些我们今天甚至还无法想象。
在数据方面,我们需要比现在更轻松地访问高质量数据。 我想到的一个模型来自电视节目 *24* 。 全面披露; 我喜欢看电视并喜欢看电视连续剧,我认为其中一些可以很好地指示技术发展的方向。 在 *24* 中,反恐特工杰克·鲍尔(Jack Bauer)有 24 小时制止坏人造成灾难性事件。 看着那个节目,我总是惊讶于数据从指挥中心的分析员传回杰克鲍尔的手机如此容易,或者给定仅需几分钟即可解决的数据问题, 分析人员能够召集来自不同系统(卫星图像,记录系统等)的数据,对坏蛋进行零介入; 例如,我们正在寻找最近 2 个月内在指定半径内购买了此类化学品的人。 哇! 从我的角度来看,这就是数据科学家访问和处理数据应该多么容易且毫不费力。 我相信我们通过诸如 Jupyter Notebook 之类的工具在朝着这个目标迈进,该工具充当控制平面,用于将数据源与处理它们的服务和分析相连接。 Jupyter Notebook 将工具带到了数据中,而不是相反,从而大大降低了想要参与数据科学的任何人的入门成本。
在数据方面,我们需要比现在更轻松地访问高质量数据。 我想到的一个模型来自电视节目`24`。 全面披露; 我喜欢看电视并喜欢看电视连续剧,我认为其中一些可以很好地指示技术发展的方向。 在`24`中,反恐特工杰克·鲍尔(Jack Bauer)有 24 小时制止坏人造成灾难性事件。 看着那个节目,我总是惊讶于数据从指挥中心的分析员传回杰克鲍尔的手机如此容易,或者给定仅需几分钟即可解决的数据问题, 分析人员能够召集来自不同系统(卫星图像,记录系统等)的数据,对坏蛋进行零介入; 例如,我们正在寻找最近 2 个月内在指定半径内购买了此类化学品的人。 哇! 从我的角度来看,这就是数据科学家访问和处理数据应该多么容易且毫不费力。 我相信我们通过诸如 Jupyter Notebook 之类的工具在朝着这个目标迈进,该工具充当控制平面,用于将数据源与处理它们的服务和分析相连接。 Jupyter Notebook 将工具带到了数据中,而不是相反,从而大大降低了想要参与数据科学的任何人的入门成本。
# 参考
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册