TowardsDataScience 博客中文翻译 2020(五百六十)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

有没有可能不用编码就做出机器学习算法?

原文:https://towardsdatascience.com/is-it-possible-to-make-machine-learning-algorithms-without-coding-cb1aadf72f5a?source=collection_archive---------32-----------------------

我准备了一个简单的应用程序,向您展示在一个叫做 Orange 的有趣工具的帮助下,这是如何实现的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

马库斯·温克勒在 Unsplash 上的照片

我坚信,用代码制作自己的机器学习算法或任何预测模型的前一步是理解基础知识,并知道如何理性地解释模型。

很多时候,当我们将机器学习或数据分析模型与编码联系在一起时,我们认为建立它是一项非常困难的任务。这里你还有另一个障碍要解决!但是,如果你一开始就专注于理解其背后的理论,那就不一定了。这里有一个小指南来帮助你完成这个过程。

目录:

1.数据分析的重要性。(1 分钟读取)

2.机器学习贡献。(1 分钟读取)

3.理解基础知识:数据验证过程,不平衡数据集,监督和非监督方法。(2 分钟读取)

4.决策树和随机森林介绍。(2 分钟读取)

5.应用程序使用橙色。(6 分钟读数)

1.为什么选择数据分析?

如今,我们可以从成千上万的数据源中提取、转换和加载数据,包括股票价格、医疗记录、调查、人口普查和记录行为等。此外,我们可以应用这些技术的领域非常广泛,每个领域都有广泛的有用应用,例如欺诈检测、信用评分和与金融领域相关的资产分配。

但是我能用这些知识为一家公司做多少贡献呢? 很多!就把自己放在银行信贷风险分析师的位置上。我应该借钱给这个客户还是拒绝他的申请?我应该要求他或她提供多少信息,而不冒失去与贷款相关的利率的风险?他的定期工资单够了吗?还是我也要问他其他金融机构的信用记录来保证还款?”。数据分析和机器学习模型在自动化日常任务(如本任务)、处理大量信息和优化指标以增强业务可持续性方面发挥着重要作用。

最终目标是对数据做出有意义和可解释的推断,提取变量之间的关系,并检测模式以预测变量的结果。

我们来看看科技公司的案例。为了实现和增长他们的商业价值,他们的重点必须放在提高业务指标和取悦用户上。数据分析为这些公司提供了不断变化的洞察力指标,使他们能够打造更好的产品。使命:了解用户,所提供的产品如何融入他们的生活,他们的动机是什么,他们的体验如何,以便改进它。所有这些以及更多的都可以通过使用数据来实现。

2.机器学习在这一切中扮演了什么角色?

实话实说,在你的公司预算中可能不需要机器学习。这是为什么呢?因为大多数公司需要在流程、客户体验、成本降低和决策制定方面进行改进,所有这些都可以通过实施传统的数据分析模型轻松实现,而无需借助更复杂的 ML 应用程序。

尽管如上所述,传统的数据分析模型是静态的,并且对于快速变化的非结构化数据输入的使用有限,这些数据会快速且不断地发生变化。这时,对能够分析数十种输入和变量的自动化流程的需求就出现了。

此外,两种方法的解析过程有很大不同,因为 ML 模型侧重于从用户处接收已确定目标的输入,并从快速变化的数据中学习哪些因素对实现该目标很重要,而不是由用户设置将决定目标变量结果的因素。

它不仅允许算法进行预测,还允许算法与预测进行比较,并调整结果的准确性。

3.了解基础知识:

数据验证过程: 在执行机器学习算法并选择我们可以分析数据的最佳方式的过程中,我们将其分成两个子集:训练子集测试子集,以便我们的模型与训练数据相匹配,并对测试数据进行预测,作为对现实问题的模拟。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

我们如何执行数据分割并不简单,因为我们不想偏向任何子集。例如,在处理一个公司客户样本的数据时,我们不希望分割训练和测试子集,而不在两个子集中包含每个类别的同等代表样本。因此,我们说数据拆分必须以分层随机的方式进行。

不平衡数据集: 当一个类的实例比另一个类的实例多得多时,就称数据不平衡。在数据分类过程中,模型可能没有足够的类实例来了解它,结果会使分析产生偏差。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

有几种采样方法可以处理这个问题,包括*欠采样、过采样、合成数据生成和成本敏感学习。*在本文中,我将深入探讨过采样。

监督和非监督模型:

  • 监督学习:包括手动告诉模型我们想要为训练数据集预测什么标签。
  • 无监督学习:由于我们不知道标签,我们要求模型根据每个元素具有的更明显的特征来对数据集中的元素进行分组。

4.决策树和随机森林简介

决策树算法的结构是关于数据集中观察值的问题和答案的层次结构,以帮助模型进行分类。下面的方案就是一个例子,它简化了确定棒球运动员工资的基本问题结构:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

决策树示例—作者图片

在该图中,我们看到了一个两级决策树的表示,其中第一步分类与个人作为职业球员的年数相关,而回答该问题的条件是每个赛季的命中数。在这个例子中,联盟中每个球员的工资将按照这个模型的指导方针来确定。

最合适的模型将是更好地代表所研究的变量之间的实际关系的模型(如果棒球运动员的工资和多年的经验是线性相关的,那么线性回归可能是最合适的模型)。随机森林是各种技术之一,这些技术允许我们表示变量之间更复杂的关系,这些关系不一定是线性的、指数的或对数的。

例如,在一个球员的经验少于 4.5 年的情况下,他的工资的决定完全取决于他的职业经验,而不是击球次数。

问题方案的最终目标是以一种尽可能不同的方式分割观察结果。最后,将根据满足的不同条件对观测结果进行分组:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

决策树分类示例—按作者分类的图片

随机森林

利用决策树的分类机制是基于大量个体树的“集合”。让我们用一个简单的比喻来说明这个概念:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

盲人摸象,公共领域

每个盲人都有一个任务:根据他触摸的身体部位推断出动物。就本文的目的而言,这个比喻意味着每个盲人都是一个模型,而大象就是要预测的价值。如果他们都接触同一个部位,他们可能会错误地推断出哪个是动物。因此,最好将它们分散开来,以便能够从不同的“信息”集中“学习”。此外,我们将尝试组合独立预测无效的模型(或盲人),以优化模型的输出。

代替触摸动物的一部分,该模型将实际分析一个选定的数据集(通过样本的重新定位),该数据集通过 引导 获得。不幸的是,这种方法不能保证所选数据集不相关,主要是因为""强预测值通常优于其他指标。这就是随机森林发挥作用的地方,因为它的主要功能是随机选择数据集,忽略“强”预测。

5.我们要用什么工具?

Orange 是一个开源工具,它允许我们执行广泛的数据操作任务,如数据可视化、探索、预处理和建模创建,而无需使用 Python、R 或任何其他代码。如果你是在这条漫长的学习道路上迈出第一步,这是最理想的。

它也适合更高级的用户,因为它包括 Python 窗口小部件,可以输入 Python 脚本来补充它所提供的窗口小部件。进入下面的链接继续安装程序。

1.打开一个新文件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

初始用户界面—作者图片

2.将文件小部件拖到画布上,并通过双击文件小部件浏览本地服务器中的数据集。

在这种情况下,我将利用一个数据集,该数据集包含一家金融机构的 150,000 名客户的样本。“SeriousDlqin2yrs”列将是准备我们的模型时的目标变量。

你可以在我的 GitHub 的链接中找到数据集。

注意:不要担心灰色的“应用”按钮,因为它仅用于确认对每个特性中的值所做的更改,例如在修改“角色”或“值”选项卡之后。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

文件加载界面—作者图片

3。可视化数据集的默认特征和分布 从左侧面板的“数据”和“模型”和“可视化”中拖动“特征统计”和“分布”小部件。使用这些工具,您可以更好地查看数据集中每个要素的描述性统计数据,例如平均值、离差、最小值、最大值和缺失值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

要素统计微件-按作者分类的图像

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

分发小部件-按作者分类的图像

4.选择行

过滤列数据以避免干扰分析准确性的不正确值。我们可以为特性设置条件,例如值低于 X 数量或等于 Y 数量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选择行—按作者选择图像

5.选择列

从原始数据集中选择用于分析的重要要素,并使用微件“选择列”创建仅包含这些要素的新数据集。这是一个小部件,您可以在其中确定选定的列,并指示目标变量以供进一步分析。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选择列界面-按作者分类的图像

6.数据采样器

数据采样器小部件用于将过滤后的数据集分成训练和测试子集。在 Orange 的界面中,我们可以选择一个“采样类型”来输入我们想要的采样方法。特别是,我选择了全部数据的 70%作为“训练样本”,剩下的 30%作为“测试样本”。正如本文前面提到的,正如 Orange 的界面所反映的,子集的数据选择是通过分层样本随机进行的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据采样器界面—作者图片

7.不平衡的数据集分辨率

为了解决上面解释的不平衡数据集问题,我决定执行过采样技术,而不是 SMOTE ,因为我认为 Orange 中不包含此功能的小部件。

1 .选择“默认值,这是来自训练子集的少数类,因为我们想要随机复制观察值以平衡数据集。在可视化中,您将看到小部件之间的链接或边有图例,您必须在图例中指出您想要将什么数据传递给“接收”小部件。在这种情况下,“选择行”小部件包含一个训练子集,从中发送“匹配数据”或“默认值”。另一方面,我们发现“不匹配的数据”,即来自训练子集的“无默认值”,它们被直接发送到“连接小部件。

过采样方法的一个优点是,相对于欠采样*,它不会导致信息损失。它的缺点是,由于它只是简单地在原始数据集中添加重复的观察值,它最终会添加几种类型的多个观察值,从而导致过拟合。*

2.数据样本小部件随机复制固定数量的观察值

3. Concatenate 小部件将新的观察结果与“旧的”观察结果连接起来,以便最终获得一个平衡的数据集提交给我们的模型。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

橙色画布——作者图片

8.使用随机森林对平衡训练数据集执行预测

让我们继续有趣的部分:建模随机森林。要执行此任务,请从“模型”部分选择小部件“随机森林,并将其链接到平衡训练数据集。

我们将测试“深度”超参数,以优化模型。超参数是模型的一种“设置”,可以通过调整来提高性能。对于随机森林,超参数包括:

  1. 林中决策树的数量
  2. 分割节点时每棵树考虑的特征数量,也称为模型的“深度”或“增长”。

如下图所示,第一个模型有一个 3-tree 深度限制,第二个模型在优化中的深度没有限制。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有 3 棵树深度限制的随机森林—图片由作者提供

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

没有深度限制的随机森林—图片由作者提供

9.测试和分数小部件

这个小部件用于根据训练数据集评估模型的结果。它将根据定义的折叠数执行交叉验证。这些折叠是从训练样本中创建的子集的数量,该训练样本将在回合中运行以评估整个数据集。

生成的界面是所用模型的列表,作为性能与获得的指标的比较。在下一步中,我将解释每个指标的含义。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

测试和评分界面—作者图片

10.混淆矩阵

为了简化练习,我将使用我们运行的两个模型中最有效的模型进行解释。混淆矩阵是一种性能测量工具,用于根据预定的指标评估机器学习模型。输出是一个包含如下值组合的表:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Sarang Narkhede,理解混乱矩阵

  1. 真正的正面结果(TP): 模型正确预测了正面结果(例如,它预测它将“不会违约”,并最终没有违约)。
  2. 真正的负面结果(TN): 模型正确预测了负面结果(例如,它预测它将“违约”并结束违约)。
  3. 假阳性结果(FP): 模型未能预测到阳性结果(例如,它预测到它将“违约”,但最终没有这样做)。
  4. 假阴性结果(FN): 模型未能预测到负面结果(例如,它预测到它将“不会违约”,并结束了这种预测)。

该矩阵作为一个小部件包含在 Orange 中,具有以下界面:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

混淆矩阵界面—图片由作者提供

对于测量召回精度F1 得分精度AUC-ROC 曲线极其有用:

  • 准确率:模型成功分类的预测比例。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • ***精度:*所有正面预测中正确预测结果的比例。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 回忆:模型正确预测的积极结果部分。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • F1 分数:它是精确度和召回率的结合,也用来衡量测试的准确性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结论

这篇文章的动机是展示如何在没有一行代码的情况下应用复杂的机器学习算法,但我最终认为它是一个理论推动者,希望能成为阅读这篇文章的每个人的动力。

参考

感谢您花时间阅读我的文章!如有任何问题、建议或意见,欢迎联系我:herrera.ajulian@gmail.com

有可能用神经网络预测股票价格吗?

原文:https://towardsdatascience.com/is-it-possible-to-predict-stock-prices-with-a-neural-network-d750af3de50b?source=collection_archive---------2-----------------------

当谈到时间序列预测时,读者(听众、观众……)开始考虑预测股票价格。预计这将有助于确定何时卖出,何时买入更多。有时我们会看到描述如何做到这一点的论文。论文[1]在这里提供了一个例子,作者甚至提供了一些结果。然而,Chollet 的《用 Python 进行深度学习》一书强调,人们不应该试图使用时间序列预测技术来预测股票价格。Chollet 在某种程度上解释说,在股票市场的情况下,关于以前状态的数据不是估计未来状态的良好基础。在文献[3]中,作者甚至得出结论,股票价格是鞅,因此,未来价格的最佳估计(就估计误差而言)是当前价格。

那么,有没有可能用神经网络来预测股票价格呢?

一些理论

免责声明 :本理论概述反映了本人对该课题的认识,因此可能会使用不正确的术语,完全不正确等等。所以如果你知道的比我多,你可能会笑死。我警告过你。

什么是份额?股票是证明持有者有权要求分享公司利润的文件。这意味着股票的价格应该取决于公司的利润。此外,股票的价格并不取决于确切的公司利润,而是预期利润。这意味着股票的价格代表了市场交易者对未来利润的看法。而且观点可能是错误的。我们都记得这样的故事:初创公司成本很高,但最终似乎没有提供任何革命性的东西,然后几乎完全失去了市场价格。因此,我们可以得出结论,股票价格取决于市场交易者的主观意见。

考虑下图。该图描绘了马士基公司的股价走势图。可以看到,在 2019 年 4 月 2 日,一股股票的价格是 7718 DKK。第二天的价格是每股 7750 DKK。原因是什么?我们可以在图的底部看到一个小写字母D。这封信意味着公司在这一天支付股息,显然,股息大到足以刺激需求。所以,即将到来的事件会导致价格上涨。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

马士基股价

现在考虑另一个情节。这张图显示了 Yandex 的股价。这几天,我们听到有传言称,其中一家银行将收购 Yandex。通常,在这种谣言中,股价会上涨,因为这意味着买方将从市场上购买股票,从而增加需求。这一次,投资者认为这些都不是好消息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Yandex 股票价格

我们可以在这里得出一个简单的结论:股价主要取决于交易员对公司未来的看法,而不是之前的价格本身。因此,用以前的价值来预测未来的股票价格是没有意义的。

我们应该使用目标所依赖的,或者至少是相关的值来预测一些事情。就股票价格而言,人们必须考虑市场之外的事件。很可能,使用神经网络来预测这样的事件是不可能的。事实上,更多的交易者破产了,而不是成为亿万富翁,这告诉我们,一个人并不经常能够预知未来。想知道更多关于预测不可预测的事情,请阅读纳西姆·尼古拉斯·塔勒布的《黑天鹅》一书。

实践

理论上,理论和实践是高度相关的,但实际上,它们并不相关。在这里,我们将尝试预测一些事情,看看会发生什么。

我们将训练一个神经网络,它将使用 n 个已知值(以前的价格)预测第(n+1)个价格。我们假设两次后续价格测量之间的时间是恒定的。首先,我们需要数据集。我们可以在雅虎财经了解股票价格

我们将预测每日价格,这意味着一天在数据集中用一个值表示。我们将使用前几天的收盘价来预测收盘价。我们将使用马士基作为测试公司。
我们将使用yfinance Python 包获取数据。我们应该考虑到雅虎可能会改变他们的 API,所以软件包可能会意外停止工作。这种情况至少已经发生过一次,所以我们必须为其他变化做好准备。所以,让我们安装软件包:

pip install yfinance

有关如何使用该软件包的更多信息,请参见此处。现在,让我们联系市场:

import yfinance as yf# create the object that represents Maersk stock data
# here MAERSK-B.CO -- is the Maerks's ticker
maersk = yf.Ticker('MAERSK-B.CO')

我们还没有下载任何数据,我们只创建了可以用来请求数据的对象。雅虎财经为马士基提供股息信息,正如我们已经看到的,股息影响股价。因此,我们希望神经网络在预测价格时将股息考虑在内。这意味着,当我们告诉网络使用前几天的一组价格来预测某一天的收盘价时,我们还需要为它提供一个标记,来告诉它当天是否支付股息。要获得支付股息的日期,请检查maersk.dividends属性。为了得到股票价格,我们称之为history方法。该方法需要几个参数,我们对periodinterval特别感兴趣。

period参数定义了我们请求数据的时间段。该参数支持一些预定义的字符串值,我们将使用其中的一个。我们传递字符串’max’,它告诉我们所有可用的数据:从股票上市的第一天开始,直到今天。使用startend参数可以定义精确的周期。然而,由于我们将使用所有可用的数据,我们将使用period参数并传递’max’

interval参数告诉该方法两个连续值之间的间隔。它采用一个预定义的值,我们将传递’1d’到那里,因为我们将使用每日价格。

你可以在这里阅读更多关于history方法及其论据的内容。

所以,是时候拿点数据了!

history = maersk.history(period='max', interval='1d')

现在history变量保存了一个包含价格的熊猫数据框架。让我们来看看它们:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

马士基股价数据框架

是时候准备数据了。当设计一个神经网络来预测时间序列时,应该决定网络将有多少输入。在我们的例子中,我们必须选择输入网络的价格数量来预测下一个价格。由于我们现在不知道这个数字,最好能够生成具有不同输入量的数据集。幸运的是,Keras 开发人员已经考虑到了这一点,现在 Keras 提供了一个时间序列生成器,可以生成具有不同输入量的数据集。在时间序列预测的情况下,输入值和目标值都来自同一个序列。这意味着我们使用大小为j的滑动窗口,其中j是我们用来预测第(j+1)个值的值的数量。换句话说,我们取时间序列的j个后续元素({x₁, x₂, ... xⱼ}),然后取第(j+1)-个元素(x₍ⱼ₊₁₎)并将其设置为目标值。该对(j值,(j+1) -th 值)构成单个训练示例。为了进行另一个训练示例,我们将滑动窗口移动一个,并使用{x₂, x₃, ... x₍ⱼ₊₁₎}作为输入,使用x₍ⱼ₊₂₎作为目标值。

Keras 为我们提供了 TimeseriesGenerator 类,我们将使用这个类来生成训练集。这里唯一的困难是,我们还希望网络将红利考虑在内。因此,我们必须编写一个函数,使用TimeseriesGenerator类来生成训练集,然后用有关红利的信息丰富生成器的输出。

def generate_series(data, value_num):
    close = data['Close']
    dividends = data['Dividends']
    tsg = TimeseriesGenerator(close, close,
                              length=value_num,
                              batch_size=len(close))
    global_index = value_num
    i, t = tsg[0]
    has_dividends = np.zeros(len(i))
    for b_row in range(len(t)):
        assert(abs(t[b_row] - close[global_index]) <= 0.001)
        has_dividends[b_row] = dividends[global_index] > 0            
        global_index += 1
    return np.concatenate((i, np.transpose([has_dividends])),
                           axis=1), t

该函数有两个参数:我们希望它处理的数据集(data参数)和序列应该具有的输入值的数量(value_num参数)。

如您所知,神经网络是使用梯度下降来训练的,该梯度下降采用成本函数的梯度。最简单的方法假设我们使用整个数据集计算成本函数梯度。然而,这也有不好的一面。首先,数据集可能非常大,这将使得计算梯度非常耗时。其次,如果数据集非常大,那么梯度值也可能非常大,大到根本不适合机器精度。当然,第二个问题在极端情况下通常很重要(有点双关的意思)。一些聪明人指出,我们实际上并不需要精确的梯度值[4]。我们只需要它的估计来确定我们应该向哪个方向移动以最小化成本函数。因此,我们可以使用训练样本的一个小子集来估计梯度。当然,我们最终将遍历整个数据集,但没有必要一次计算整个数据集的梯度。我们可以将数据集分成几个称为批处理的子集,一次只处理一个批处理。我们使用为单个批次计算的梯度来更新网络的权重。一旦我们处理了所有的批次,我们可以说我们已经运行了一个单一的训练时期。在单个训练期内,可能有多个时期,确切的时期数取决于任务。同样聪明的人强调训练的例子一定要洗牌[4]。这意味着一对后续的训练样本不能属于同一批。
让我们测试该函数并生成一个使用四个输入值的数据集。

inputs, targets = generate_series(history, 4)

让我们看一个例子。

# print(inputs[3818])array([1.246046e+04, 1.232848e+04, 1.244496e+04, 1.274000e+04,
       1.000000e+00])

正如我们所看到的,一个训练示例是一个具有四个价格和一个额外的五分之一值的向量,该值指示当天是否支付股息。请注意,值相对较大。事实上,从 767.7 到 12740.0 的接近价格范围神经网络不适合这样的范围,所以我们必须将数据标准化。我们将使用最简单的归一化策略,最小最大归一化。

h_min = history.min()
normalized_h = (history - h_min) / (history.max() - h_min)

因为我们已经修改了初始数据,所以我们必须重新生成数据集。

inputs, targets = generate_series(normalized_h, 4)

我们来看一下归一化的数据。

# print(inputs[3818])array([0.9766511 , 0.96562732, 0.97535645, 1\.        , 1\.        ])

正如我们所看到的,这些值现在的范围是从 0 到 1。这使得任务更容易。然而,我们现在必须保留h.min()h.max(),这样我们就可以在预测价格时对网络输入进行归一化处理,并对其输出进行反归一化处理,以获得准确的值。

最后,是神经网络的时候了。该网络将具有(n+1)输入、n价格和一个红利指标,以及一个输出。我们还需要确定n。为此,我们将编写一个函数,用指定数量的输入创建一个神经网络。我们使用input_shape=(n+1,)表达式来包含股息指标。

def create_model(n):
    m = models.Sequential()
    m.add(layers.Dense(64, activation='relu', input_shape=(n+1,)))
    m.add(layers.Dense(64, activation='relu'))
    m.add(layers.Dense(1))
    return m

在训练网络之前,我们将数据集分为两部分:训练集和测试集。我们将使用训练集来训练网络,使用测试集来测试未知数据的网络性能。在训练网络时,我们永远不会使用测试集的例子。

train_inputs = inputs[:-1000]
val_inputs = inputs[-1000:]train_targets = targets[:-1000]
val_targets = targets[-1000:]

让我们再写一个函数。这个函数将帮助我们决定网络应该有多少个输入。该函数采用输入的数量来检查要训练的时期的数量。该函数将创建一个网络,为其准备数据,然后训练网络并在测试集上评估其性能。

def select_inputs(data, start, end, epochs):
    models = {}
    for inputs in range(start, end+1):
        print('Using {} inputs'.format(inputs))
        model_inputs, targets = generate_series(data, inputs)

        train_inputs = model_inputs[:-1000]
        val_inputs = model_inputs[-1000:]
        train_targets = targets[:-1000]
        val_targets = targets[-1000:]

        m = create_model(inputs)
        print('Training')
        m.compile(optimizer='adam', loss='mse') 
        h = m.fit(train_inputs, train_targets,
                  epochs=epochs,
                  batch_size=32,
                  validation_data=(val_inputs, val_targets))
        model_info = {'model': m, 'history': h.history}
        models[inputs] = model_info
    return models

现在,让我们用 2 到 10 个输入训练网络 20 个时期:

trained_models = select_inputs(normalized_h, 2, 10, 20)

训练完成后,我们可以得到一个简短的总结,代码如下:

model_stats = {}
for k, v in trained_models.items():
    train_history = v['history']
    loss = train_history['loss'][-1]
    val_loss = train_history['val_loss'][-1]
    model_stats[k] = {'inputs': k, 'loss': loss, 'val_loss': val_loss}

打印model_stats值,我们可以看到摘要:

{2: {'inputs': 2,
  'loss': 6.159038594863468e-05,
  'val_loss': 0.0006709674960002303},
 3: {'inputs': 3,
  'loss': 7.425233190960614e-05,
  'val_loss': 0.00021176348975859583},
 4: {'inputs': 4,
  'loss': 7.471898652647588e-05,
  'val_loss': 0.00022580388654023408},
 5: {'inputs': 5,
  'loss': 8.866131339595126e-05,
  'val_loss': 0.00027424713294021784},
 6: {'inputs': 6,
  'loss': 7.322355930846842e-05,
  'val_loss': 0.0003323734663426876},
 7: {'inputs': 7,
  'loss': 8.709070955596233e-05,
  'val_loss': 0.0004295352199114859},
 8: {'inputs': 8,
  'loss': 8.170129280188121e-05,
  'val_loss': 0.00024587249546311797},
 9: {'inputs': 9,
  'loss': 7.327485314296024e-05,
  'val_loss': 0.0003118165017804131},
 10: {'inputs': 10,
  'loss': 8.064566193526276e-05,
  'val_loss': 0.0003668071269057691}}

正如我们所看到的,用测试集计算的误差总是稍大于为训练集计算的值。这意味着网络对已知数据(训练示例)的处理略好于未知数据(测试示例)。

我们现在可以根据网络的输入数来绘制测试误差。

import matplotlib.pyplot as pltval_loss = []
indices = []
for k, v in model_stats.items():
    indices.append(k)
    val_loss.append(v['val_loss'])plt.plot(indices, val_loss)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不同输入数网络的测试误差

通过该图,我们可以看到哪个网络的测试误差最低。确切的结果可能会随着时间的推移而变化,这取决于通过雅虎财经获得的历史数据量。

有一个有趣的观察。如果一个人运行这个脚本两次,那么他们会收到不同的结果。换句话说,最低的测试误差由不同的网络产生。由于网络之间的唯一区别是输入的数量,因此我们可以得出结论,测试误差并不那么依赖于输入的数量。这反过来支持了最初的猜测,即我们无法用神经网络来预测股票价格。显然,网络训练忽略一些输入,推断输出不依赖于它们。

请记住,我们已经将数据标准化了。现在让我们计算网络的精确误差。

close_min = history['Close'].min()
close_max = history['Close'].max()
for k in model_stats:
    e = ((close_max - close_min) * model_stats[k]['val_loss'] + close_min)
    print(k, e)

输出:

2 771.0400773414451
3 770.341964375037
4 771.6538168560887
5 771.9637314503287
6 770.3164239349957
7 771.5147973106168
8 778.0784490537151
9 779.7546236891968
10 770.8432766947052

哇!误差非常大。即使对于已经显示最低测试误差的网络,精确误差也非常大。老实说,在决定购买哪些股票时,我不会相信一个有这种错误的网络。我也不会建议其他人相信它。

现在我们可以画一个图表,比较准确的价格和预测的价格。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

将预测价格与目标价格进行比较

正如你所看到的,图表并不经常匹配。

我们得到了未知数据的大误差值。这意味着网络未能预测收盘价。也许,我们可以通过改变网络架构来改善结果,让它适应更多的时代。我不认为我们能得到更多的数据,因为我们已经使用了所有可用的数据。使用不同公司的数据训练一个网络是可能的,但是由于这些公司可能具有不同的属性,它们的股票价格可能根据不同的规律变化,这只会使网络混乱。

我们要注意的是,网络本身并不预测股价。相反,它试图使用给定值来猜测序列的下一个值是什么。这是因为价格并没有编码下次价格会如何变化。如果价格增长了一段时间,那么不能保证下一分钟不会降低。价格主要受网络不知道的外部事件的影响。

或许,我们将能够使用神经网络进行短期预测,以确定未来几分钟内的价格变化。这可能是因为我们预测的时间段越短,外部事件发生的变化就越小。但是,在这种情况下,使用线性回归模型来预测价格变化的方向可能会更好。

如果我们仔细观察股价图,我们会发现变化看起来是随机的。如果我们只有价格而对外部事件一无所知,这可能是真的。因此,股票价格看起来确实像一个鞅,一个我们无法预测的过程。我同意 Chollet 的观点,你最好不要用神经网络来预测股票价格。

更新

我在这里看到了另一篇关于致力于股票预测的数据科学的帖子。作者尝试使用技术分析向神经网络输入更多可用于预测的值。然而,作者没有成功,他得出的结论是,股票价格大多是一个随机过程,不能根据其自身的价值来预测。这个结论与这篇文章的发现相吻合:你不能用神经网络来预测股票价格,即使使用技术分析来获得更多的数据统计。

参考文献

  1. Bugorskij,v . Ispol ’ zo vanie nejronnyh setej dlya modelirovaniya prognoza kotirovok cennyh bumag/v . Bugorskij,a . Sergienko//Prikladnaya informatika。— 2008.—编号 3(15)。(俄语)
  2. Chollet,f .使用 python 进行深度学习— 2017 年。—曼宁出版公司。
  3. Elliot,a .时间序列预测:预测股票价格/ A. Elliot,C. H. Hsu // ArXiv 电子版。— 2017.
  4. 伊恩·古德费勒。深度学习/伊恩·古德菲勒、约舒阿·本吉奥、亚伦·库维尔——麻省理工学院出版社,2016 年。

有可能防守梅西吗?数据视角。

原文:https://towardsdatascience.com/is-it-possible-to-stop-messi-a-data-perspective-cf4e2d900181?source=collection_archive---------30-----------------------

或者我是如何分析 2009/10 赛季巴塞罗那德比的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由来自 Pexels迈克拍摄

最近几年,足球过程(球探、管理训练负荷、赛前/赛后分析等。)正在缓慢但肯定地朝着更有数据依据的决策方向发展。对于一个热爱足球的数据分析师/科学家来说,越来越多的数据集可以免费访问,这为足球数据探索带来了机遇。作为一名足球迷,当 Statsbomb 在 2019 年发布完整的梅西数据传记数据集时,我非常兴奋。随着最近新冠肺炎疫情实施的隔离,我有了一些空闲时间,我决定好好利用。这是我在梅西兔子洞深处的故事。

所有相关代码、交互式可视化等等,都可以在我的 github 项目中找到。

TL;梅西是个天才,你无法阻止他。还是可以?

1.再一次:莱昂内尔·梅西

1.1 数字爱情

有人可能想知道为什么还要写一篇关于梅西的文章。嗯,首先是因为他的整个西甲职业生涯都可以在一个单独的数据集中免费获得。直到今天,这是唯一一个完整的关于单个球员的数据集(考虑到球员已经到了职业生涯的末期)。

第二,因为我确信我们并不了解梅西的一切。已经有很多关于他的报道:得分技巧、组织核心、与 c 罗的广泛比较等等。也许你已经读到过梅西是不可能的,或者他走得比大多数球员跑得都好

但是据我所知,防御方面还没有被广泛地探索。当我埋头于数据传记时,我开始想是否有可能阻止梅西?而如果有,如何只用数据来描述?

由于足球比赛中的事件数据倾向于比赛的进攻方,因为防守有更多的“无球”事件,所以分析起来更加困难。跟踪数据要容易得多(假设数据足够准确),因为我们随时都知道球员的位置,但这并不意味着在事件数据中什么也找不到。防守行动、压力事件,加上预期目标、 PPDAVAEP 等先进指标,足以让它在“阻止梅西”的任务中有所作为。

1.2 更强、更好、更快、更强

如何阻止梅西?

这个百万美元的问题让每一个面对他的教练都紧张得要命。他是(有史以来)最伟大的球员之一,自 2004 年以来,他在巴塞罗那俱乐部撕开了防线。

看看他的赢/平/输分布就知道了:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

梅西总体获胜统计(2004/05–2018/19)。452 场比赛 339 胜 39 负。

从 2004 年第一年到 2018/19 赛季结束,梅西出场 452 场,共 419 粒进球,158 次助攻

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

梅西进球再分配(2004/05–2018/19)。

如果我们只考虑开放式比赛目标:

  • 336 个目标共 253.6 xG ( 预期目标)。
  • 对于 xG 小于 0.05 的射门,22 个进球总共 14.5 xG。

只是为了好玩,这是他的(公开比赛)目标,具有最小 xG 值(所有数据集的):0.024。奇怪的是,这看起来不像是梅西打进的最难的进球,但他的射门距离相当远,而且在他面前有很多对手。

具有最小 xG 值的目标。希洪竞技—巴塞罗那足球俱乐部(2015/16 赛季)的开场进球

光是这些数据就显示了梅西作为一名得分手有多伟大,而这只是他所能做到的一小部分。如果你想了解更多关于梅西的(高级)数据,尤其是他的运球技术,你可以看看 Statsbomb 的文章:

你也可以在这个笔记本里找到我自己处理的数据(参见相关的数字文件夹)。

所以,总而言之,显而易见的是:很难防守梅西这样的球员。

2.毕竟是人类

无论梅西有多伟大,有时他也会有糟糕的比赛。例如,从 2004 年到 2019 年,他有一些比赛没有进球或助攻。这并不意味着这是一场糟糕的比赛,但至少梅西不是决定性的。

为了说明这一点,我们可以看看梅西没有进球或助攻的比赛的百分比。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

梅西赛季“糟糕比赛”的百分比(注意,2004/05 赛季的样本量很小)

如你所见,梅西不增加他的统计线并不常见。这并不总是坏事,但对梅西的成绩有影响:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

梅西得分或助攻的效果(2004/05–2018/19)。

确实不全是梅西的问题,这个图缺少了一些脉络(对手的实力,当天队友的素质,比赛的赌注等等。),但仍然是胜率的巨大下降。

如果我们考虑 xG,当然也有很大的不同,如下图所示。没有进球或助攻的比赛表现出了更慢的 xG 输出,平均为 0.33,而他进球或助攻时为 0.89。这意味着他得分机会更少,但主要是(平均而言)他得分的位置更差。嗯,有时候他只是运气不好,就像那场比赛,他输出 1.35 倍,没有得分。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

梅西 xG 分配取决于他得分或助攻一个进球。

这表明,有时候,降低梅西的影响力是可能的。

为了分析如何防守梅西,我选择专注于一场比赛:这更容易可视化,并为未来在更大范围内的分析提供了一些思路。

我是怎么选择这样一个游戏的?我决定关注 2009/10 赛季的*😗

  • 对于梅西(众多赛季之一)来说,这是一个伟大的赛季:西甲 35 场比赛 34 粒进球 10 次助攻
  • 这是佩普·瓜迪奥拉在巴塞罗那俱乐部的最佳西甲赛季:99 分,当时是拉利加的纪录(现在被皇家马德里 2011/2012 赛季和巴塞罗那 2012/2013 赛季的 100 分击败)。

由此出发,我选择整个赛季梅西 xG 输出最小的比赛。输入:

埃尔德比加泰罗尼亚语

这也是瓜迪奥拉和 T2、波切蒂诺和 T3 之间的对决,这让事情变得更加有趣。

3.面对面

3.1 时间的碎片

在讨论梅西在这场比赛中是如何被阻止的之前,先了解一下背景。这场比赛是一场德比,因此根本不是一场友谊赛。它结束了(剧透警报!平局:0 - 0。

但这不是一个无聊的游戏,尽管:

  • 巴萨只有 4 次射门,总 xG 0.11。
  • 巴塞罗那西班牙人有 10 次射门(0.61 xG)。
  • 梅西输出 0.03 xG 助攻,相比 2009/10 赛季平均 0.23
  • 他没有得到达尼·阿尔维斯的帮助,阿尔维斯在 58 分钟后得到一张红牌。

我当时没有看这个游戏(现在也没有),但是我确信毛里西奥·波切蒂诺有一个计划。下面的数据分析将试图揭开他的计划。

3.2 做对

关于这场比赛,我们首先要问的是:有没有一个反梅西的计划

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我们看看梅西的热图和西班牙人的防守图,我们可以看到西班牙人确实在他们的左翼防守更多(特别是他们在那里压得更多),那里是梅西喜欢的地方,也是丹尼尔·阿尔维斯花费大部分时间的地方。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

看起来梅西是被故意针对的。

第二,梅西能够做到他平时做的事情吗?我指的是疯狂的运球,超出世界范围的投篮和不可能的传球。好吧,看看他的通行地图,我们可以看到,这不是照常营业:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

梅西传球图,西班牙人-巴塞罗那足球俱乐部(2009/10 赛季)。

正如我们在上图中看到的:

  • 几乎所有成功的传球都离球门很远。
  • 没有多少垂直通过。
  • 最终第三遍几乎总是不完整。
  • 西班牙人在传球上没有太大的压力。也许他们想阻止传球者,而不是梅西本人。

巴塞罗那的通行证(在达尼阿尔维斯红牌之前)证实了这一点。我们可以看到前面三个(梅西、佩德罗、马克斯韦尔(?))被牵扯进去了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

达尼阿尔维斯红牌前巴萨传球网。图灵感来自追踪的好友。

相比之下,西班牙人的传球网络显示他们试图从两侧进攻,避开布斯克茨/亚亚·图雷/哈维三角,并且有一些传球选择到凡尔登

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

西班牙人传球网先于达尼阿尔维斯红牌。图灵感来自追踪的好友。

为了更进一步,需要一些高级度量。我选择求助于通过估计概率来评估行为(VAEP) 。我不会详细说明 VAEP 是什么,因为这超出了本文的范围,但你可以在这里找到的原始论文

简而言之,这是一种给足球中的每个动作分配一个概率值的方式,而不仅仅是射门和进球。例如,成功通关的 VAEP 值为+0.3,而失败的通关的 VAEP 值为-0.19。

VAEP 是分析球员在比赛中贡献的一个很好的工具(除了其他工具,参见美国足球分析文章对这些工具的比较),因为它考虑了所有的行为,甚至是防守行为。KU Leuven 团队甚至发布了他们的足球运动员动作描述语言(SPADL) 的替代版本,称为原子 SPADL 。这种选择有两个主要优点:

  • 它为镜头分配更好的(更接近真实)值。
  • 它导致更稳定的动作值。

最后但同样重要的是,整个项目可以在 github 上公开访问。S 操作包有一个带 SPADL 的主分支,以及一个用于 atomic-SPADL 的原子分支。

在用 atomic SPADL 拟合一个模型后,我们可以通过 VAEP 的镜头探索梅西数据集。例如,这是梅西每个赛季的平均 VAEP(每 90 分)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

原子 VAEP 模型。

如果我们特别关注 2009/10 赛季,我们可以看到梅西的 VAEP 价值观的分布以及德比的所在地。这证实了对拉普尔加来说这不是“那些夜晚中的一个”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

VAEP 不仅仅属于梅西。以下是所有德比球员的名单,按照 VAEP 值(每 90 分)排名:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

西班牙人队的 VAEP 价值(2009/10 赛季)。梅西尽管表现“糟糕”,但仍排名第六。佩德罗和马克斯韦尔没有做太多,阿尔维斯也一样。

考虑到最高的 VAEP 价值来自维克托·巴尔德斯,我们可以有把握地说,西班牙人不仅防守做得很好,他们也有一些很好的进攻阶段。

根据这一分析,我们有一些西班牙人成功阻止梅西的关键因素:

  • 锁定左翼,以尽量减少梅西/D .阿尔维斯的连接,特别是:在那里施加更多的压力。
  • 减少梅西在最后三分之一的传球选择。
  • 从侧翼进攻避开巴萨的中场,迫使他们防守:“进攻是最好的防守形式”。

4.超出

梅西的分析是更好地理解足球防守的第一步。

它表明,有了‘基本’的统计数据和更先进的工具(VAEP ),就有可能获得防御性的洞察力。从这里可以做很多事情:

  • 多分析一些梅西 xG 输出少的比赛,才能找到大体趋势。
  • 分别使用进攻防守 VAEP 值来评估(例如)特定球队或球员的防守输出。
  • 从 VAEP 价值观的角度分析梅西最差的 10 场比赛。
  • 评估该数据集中的其他明星玩家是如何被阻止的。

即使只是为了好玩,这种分析在现实生活中也是有用的。

感谢阅读。

笔记

1-防守地图显示了与 2009/10 赛季所有球队面对巴塞罗那的平均水平相比,在这场比赛中一支球队的防守行动多了多少。

双路网络参数:

  • 位置:通过原点,
  • 大小:通过次数,
  • 颜色:通过次数。

为了探索 VAEP,你可以试试作者的互动工具

参加虚拟技术会议值得吗?

原文:https://towardsdatascience.com/is-it-worth-it-to-attend-a-virtual-tech-conference-5868727b6e13?source=collection_archive---------37-----------------------

一份利弊清单,帮助你决定它是否适合你。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

安德烈·斯特拉图在 Unsplash 上拍摄的照片

新冠肺炎将我们带入了虚拟会议的时代。无论是大型会议还是小型会议,都不得不彻底改革从设施到技术的体验。海报板会议上长长的咖啡和小吃桌、尴尬的午餐和免费啤酒都不见了。

不幸的是,一些非常棒的技术会议,如 O’Reilly 的 Strata Data 和 AI 2020Gartner 数据和分析峰会被取消。

其他会议已经虚拟化,包括 2020 年东 ODSC NeurIPS 和 2020 年格蕾丝·赫柏庆典 AWS Re:Invent 全力以赴,让活动免费!

今年我参加了几次虚拟会议。我非常怀疑进去。参加科技会议最有价值的部分之一是结识其他公司的人,了解他们在做什么项目,以及他们面临的障碍。即使我是一个内向的人,我也会强迫自己参加午餐聚会和快乐时光。尽管有这种担心,我还是发现这些虚拟会议的某些方面让我很享受。我列出了一些我经历过或注意到的利弊。

许多专业人士

加入和退出会议——这无疑是我最喜欢的虚拟会议功能。如果你参加的讲座和你想象的不一样,那就去参加另一个讲座。就这么简单。当这种情况亲自发生时,你更倾向于留下来浏览你的手机,而不是试图在另一个礼堂找到另一个座位。

没有 FOMO——因为每个环节都是在线的,都有录音。我参加的会议在会后提供了所有的会议记录。

没有旅行预算——这是一个很好的功能,可以帮助你从老板那里获得参加活动的许可。公司的成本是入场费。不需要支付机票、酒店、出租车或食物费用。

没有错过家庭义务——对于关心他人、照顾孩子或父母的人来说,离开家几天是很困难的。安排照看孩子已经够难的了,但有时你会因为不在家而产生负罪感。好吧,不是对所有人,而是对我们中的一些人。

一些价格降低了——见我之前关于 Re:Invent = Free 的笔记。

极好的座位——没有人挤在你旁边。你面前的人并不是拿着平板电脑给每张幻灯片拍照。没有人在你身后喋喋不休。没有必要转身告诉你后面的人,你大老远飞来不是为了听他们在演讲时说话。

一些缺点

无法联网——会议的一个重要组成部分就是联网。休闲社交是无法在网上重现的。

更多的干扰——当你身在会场时,更容易让这种体验包围你。当你坐在餐桌旁时,你更有可能停下来换衣服或者出去接孩子。如果你在家容易分心,这可能是一个问题。

无法会见演讲者——有些人非常喜欢在会议结束后会见演讲者。我相信那些人很怀念这种互动。

没有社交活动——从 meetup 咖啡会议到受邀才能参加的聚会,科技会议上通常不缺少社交活动。这种节日气氛是无法虚拟重现的。

没有供应商演示——对于寻找产品供应商的从业者来说,会议展览大厅可能是一周内打击几个竞争对手的绝佳场所。你也可以感受一下公司文化。我曾经从一个活跃的供应商搜索中排除了一家公司,因为我在一次会议上观察了首席执行官。他说话时没有倾听,他的员工似乎公开鄙视他。直到今天,当有人提到这家公司时,我仍然会有那种负面的感觉。当我参观虚拟展馆时。咩。我没有从中得到任何东西。

没有海报板会议——这是学生和行业人士与更广泛的社区分享他们的研究的一个错过的机会。作为一名从业者,我喜欢了解热门话题。我特别喜欢一个理论在现实世界中的应用。我认为这可以在某种程度上虚拟重现,尽管我还没有遇到过。

没有赃物——是的,我们不能忘记没有赃物。t 恤衫和标有商标的袜子通常会在我来的时候装满我的行李箱,但今年不会。连笔都没有。我的孩子们怀念能够通过挖赃物袋来争夺战利品的日子。令人惊讶的是,我收到的网飞研究针织帽和随机分发的辣酱的请求最多。我希望被雇佣来吸引参与者的杂耍者和魔术师有一个备用计划。

不能和你的同事一起旅行和闲逛——这取决于你的同事,不是吗?两种情况都有可能。

至少尝试一次

总的来说,我建议你至少尝试一次虚拟会议来感受一下。当限制解除时,你可能会发现自己要么参加实体会议要么参加虚拟会议,这取决于你的空闲时间和预算。

Julia 的位置与 Python 共存吗?

原文:https://towardsdatascience.com/is-julias-place-co-existence-with-python-eff2cb834f41?source=collection_archive---------23-----------------------

Julia 是未来的 ML 语言,还是 Python 不太为人所知的伙伴?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(Julia logo src =http://julia-lang.org,python logo src =http://python.org/,背景由我的好朋友 Jay Smith 提供)

J ulia 和 Python 都是我非常喜爱的编程语言。在 Python 上使用 Julia 有很多好处,比如编写时间更少,编译速度更快。然而,到目前为止,Julia 未能在 Python 无所不包的流行中将其根除。与 Python 不同,Julia 缺乏成为行业标准工具所需的关键机器学习和脚本基础设施,尤其是对于机器学习而言。

Julia 的包通常是复杂的、过度调整的、文档记录不良的,这与 Python 中可用的包形成了鲜明的对比,Python 中可用的包通常是由较大的实体开发的,而不是由在家开发该语言的开发者开发的。Scikit-Learn 是 Python 中最受欢迎的机器学习库之一,它源于“谷歌代码之夏”竞赛,而 Tensorflow 是由谷歌自己开发的。

朱莉娅不受欢迎,虽然在我看来很不幸,但这确实提出了一个非常有趣的问题:

朱莉娅住在哪里?

Julia 只是 Python 的助手,没有任何自己的代码库,还是 Julia 可能是 Python 的犯罪伙伴,更像 Scala 一样被用来管理工人和部署企业级机器学习算法?Scala 是一种大多数科学家害怕使用的语言,尽管它有着悠久的历史和庞大的软件包库。这是因为 Scala 是一种很难完成复杂操作的语言,通常要花很长时间才能完成用 Python 四分之一时间就能完成的事情。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(http://scala-lang.org/)

尽管有这些缺点,但在当今,Scala 对于许多数据科学家来说是一门必不可少的语言。火上浇油的是,Scala 源自 Java,并带来了所有浮点计算和操作错误。Julia 没有这些问题,与 Scala 相比,它很容易编写,可以快速启动并运行,同时保持处理大数据的语言所需的速度。

我认为这将是这种语言的一个伟大方向,因为我认为 Python 不太可能很快失宠。就目前而言,考虑到 Julia 拥有的包,我可以假设这可能不是语言的发展方向。Julia 的很多包都被 PyCalls 弄残了,这让 Julia 因为对 Python 的解读慢得不可思议。

这是一个可怕的短板,错过了机会,因为虽然 Python 肯定比 Julia 慢,但它在机器学习中的地位比 Scala 牢固得多。也就是说:我知道更多的工程师使用 Python 而不是 Scala。

所以在 Julia 的模块中,很容易假设 Julia 的目标不是取代 Scala,而是取代 Python——因此有这样一句格言:

“像 Python 一样走路,像 C 一样奔跑”

(我不确定他们是否还在使用那句古老的格言)

我觉得朱莉娅应该用来做什么?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(茱莉亚标志由 http://julia-lang.org/提供)

正如我之前概述的,Julia 肯定可以填补 Python 和 Scala 之间的一个相当大的空白。首先通过使用 PyCall.jl 导入 Python 模块,其次通过类似于 Scala 的方式处理大数据。这并不是说 Julia 作为机器学习和统计的首选语言是不可行的,但就取代 Python 而言,这可能是不太可能的。Python 是一门伟大的语言,已经成为世界上最流行的编程语言。

它比 Python 更难

对 Julia 的一个普遍误解部分来自于这句格言,即 Julia 和 Python 本质上是同一种语言,但这与事实相去甚远。我认为重要的是要记住,不了解 R、Lisp、Nimrod 或类似语言的人可能会在坚持和理解函数范式方面遇到一些困难——尤其是来自 Python 的函数范式。

虽然 Julia 的语法肯定经常与 Python 的语法相似,但只看构造函数肯定会揭示出它们的区别:

# Julia
mutable struct my_type
    data
endclass my_type:
    data

虽然乍看之下这些确实很相似,但重要的是要记住结构和类是完全不同的数据类型。结构和类之间的第一个巨大区别是函数如何应用于类型。对于结构,您需要通过方法传递数据,以便使用具有分派或参数多态性的函数,但对于类函数,可以将其指定为该类型的子级。这是一个非常显著的结构差异,对于已经使用 Python 一段时间的人来说,这种不和谐是可以理解的。

Julia 也比 Python 更难理解,有很多语法对于典型的 Python 程序员来说没有任何意义。

因此,我们有了一种比 Python 稍微难一点的语言,但速度明显更快。我认为像这样的语言可能面临的最大问题是没有明确的方向——这正是 Julia 在更广泛的范围内所遭受的。Julia 有专注于优化的包,以及用于 SDL2 和 GTK3+的端口,但同时没有编译的可执行文件,这使得这些包除了为了好玩而编码之外基本上没有任何用处。朱莉娅也有几十个机器学习包,但他们经常使用 PyCall.jl,所以我问:

为什么不用 Python 呢?

仅仅为了使用语言的虚荣心而用不同语言的同一个包的较慢版本对我来说没有太大意义。

我认识的人

在我认识的数百名其他数据科学家中,有两个一直在使用 Julia。我问他们对朱莉娅现状的看法,以及这种语言的发展方向,他们的回答是一致的:

“我希望看到更少的 PyCall,更多的机器学习包,以及更明确的语言方向。”

这些肯定是围绕 Julia 的主要问题,因为我最近了解到,他们都 PyCall Pandas.py,而不是使用 Julia 的 data frames . JL——这说明需要更好的模块来完成大多数补救任务。

后端

到目前为止,我认为 Julia 最大的用处是在后端脚本中,对于我每天都在编写的如此神奇的语言来说,这是一个不幸的结局。Julia 肯定可以用于请求和端点,以移动大量数据供 Python 使用。然而,这个名称的问题是,Julia 的 HTTP.jl 包并不像完成这项工作所需要的那样好。最重要的是,Genie.jl 可能有很多问题,在大多数情况下,您可以更容易地在 Python 中做完全相同的事情。当面临暂停的时候,我绝对认为朱莉娅能帮你摆脱困境

“大号 get 请求泡菜。”

结论

虽然我非常喜欢 Julia 语言,但是为了让这种语言取得比现在更大的进步,它今天确实面临着一些需要解决的问题。首先,我希望看到更好的语言包,不要像现在这样复杂和混乱。我已经为此工作了一段时间,如果你想看看我的一些包,你可以去我的 Github:

[## emmettgb -概述

在 GitHub 上注册你自己的个人资料,这是托管代码、管理项目和构建软件的最佳地方…

github.com](https://github.com/emmettgb)

我认为 Julia 可以做一些非常有趣的事情,并彻底改变我们进行机器学习的方式,但为了让这种方法奏效,我认为需要在语言内部可用的方向、基础和模块方面做出一些改变。我认为使 Julia 成为更可行的语言的一些基本因素包括:

  • 已编译的可执行文件!!!求你了。
  • 替换 SkLearn 的一致包,纯 Julia 写的。
  • 统计和可视化绘图合并成一个模块,用纯 Julia 编写。(没有 PyCall like Plots.jl)
  • 处理和移动各种格式数据的更好资源。
  • 更好地支持 Javascript。
  • 我希望看到请求和 API 两方面的改进,尽管我确实喜欢 Essenciary 的 Genie.jl

总的来说,如果没有这些基本的改进和改变,我认为 Julia 将永远是一种远不如 Python 有用的语言。Julia 的目标不应该是重新发明轮子,因为缺少模块而失去他们在低端构建的所有伟大的东西。我们只能希望,随着时间的推移,语言和库只会变得更好,我希望不用 Python 在 Julia 中工作很快会可行。

现场 Kubernetes 是否可行?

原文:https://towardsdatascience.com/is-kubernetes-on-premise-viable-8b488368af56?source=collection_archive---------12-----------------------

云是最好的解决方案,但是如果不可用呢?

公共云提供商并不总是一个选择。作为云爱好者,我更喜欢在任何可能的时候使用云,但是有些情况下我们根本不能使用云。这可能是由于数据保护要求、成本优化,或者只是我们的老板害怕变化。我们可能希望事情不是这样,但我很遗憾地说,我们不能总是改变世界。那么,在这种情况下该怎么办呢?拒绝 Kubernetes 的优势或避免容器而支持虚拟机的解决方案根本不是一个选项。很容易理解,对我们 k8s 上瘾的人来说,唯一的选择就是在内部部署它。在这篇文章中,我将解释什么是关键点,以及在开始这个旅程之前你必须考虑到什么。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

帕什米努·曼苏哈尼达皮克斯拜

为什么我应该在内部使用 Kubernetes?

诚实的答案是你不应该。由于云价格和质量使用,基于云的解决方案是降低成本、保持高质量标准和缩短新安装上市时间的更好解决方案。问题是,即使 Kubernetes on cloud 是最好的选择,它也不总是适用的。

许多组织根本无法使用云。这可能是由于可疑的安全政策、法规或数据政策,或者他们所在国家的某些云服务不可用。也可能是首席信息官购买了一个新的数据中心,并希望在整个公司范围内使用这一投资。

原因不重要。问题是,简单地说,在某些情况下,Kubernetes 必须保留在本地。我认为回到 VMs 时代不是一种选择。

在内部使用 Kubernetes 有什么关系

Kubernetes 是一种工具。是的,一个大的,复杂的,强大的工具。但永远是个工具。运行工具的基础是:

  1. 知道如何使用它
  2. 具备所有工具要求

如果你需要往木头里敲一颗钉子,你需要一把锤子(工具),一个知道该做什么的人(你),和一颗钉子(工具要求)。Kubernetes(工具)也差不多。你将需要一个人或一个团队知道如何处理他(设置、维护、安全)和一个运行它的基础设施(工具需求)。

我希望我没有伤害任何在锤子和 Kubernetes 之间做比较的人😃我的意图不是贬低 Kubernetes 的价值,而是介绍我们必须关注的一系列关键事项:人员和基础设施。让我们进入下一章进行深入探讨。

基础设施要求

理论上,你可以在你的笔记本电脑上运行 Kube,但是不难理解,为了扩展,你需要更多的东西。在混合场景中,当您已经拥有用于部署虚拟机的虚拟机管理程序时,使用它们来托管 k8s 服务器是更简单的方法。很明显,所使用的硬件很重要,您将会明白如何设置基础设施也很重要。配置不好的好硬件可能会带来不好的性能。

裁员

如果你想有一个可靠的解决方案,最好使用三个。使用多个节点,您可以平衡工作负载和内部服务,如 kube-apiserver、etcd、kube-scheduler 和 kube-controller-manager 等等。

将主容器与容器分开

主组件可以在容器的同一台机器上运行,但是最好将它们隔离开来,以避免资源冲突。

最低要求

Kubernetes 被设计为可以从故障中恢复,而不会丢失任何数据。这一特性取决于硬件资源的可用性。最佳实践将这一最少的资源集确定为三个节点,2GB RAM 和 8GB SSD。可以想象,硬件性能会影响 Kubernetes 的性能。建议使用固态硬盘或同等性能的硬盘。当然,在生产环境中,添加比最小资源更多的资源是一个好主意,也要考虑容器需求。

找到合适的支持。

您可以从头开始安装 Kubernetes,或者直接在您喜欢的虚拟机上使用 Ansible playbook 。无论如何,查看 K8S 官方文档,我们会发现这两个很好的替代方案:

  • CloudStack ,它基于硬件虚拟化原则,像传统的 IaaS 一样,它也可用于本地解决方案,并支持 Vagrant
  • CoreOS 是部署 Kubernetes 集群的一个很好的选择。您可以使用本教程或使用 CloudStack 集成来手动完成。

团队

Kubernetes 不是游戏。它很容易安装(只需注意它是 docker 附带的)并用于部署应用程序。稍微复杂一点的部分是管理。我的意思不是仅仅看一下资源是否足够,以及万一增加一个新的节点。我说的是确保卷的备份,分发服务以平衡节点上的负载,或者简单地解决问题。

Kubernetes 是一个完美的工具,因为在大多数情况下,你只需要安装一个,然后单独工作。同时,在云解决方案中,体系结构的一部分是托管的,内部完全由您决定。这就是为什么我建议每家采用 it 的公司都要有一名训练有素的专家。CNCF 的考试是一个很好的起点。你可以在 Udemy 或者类似的平台上买到很多便宜的备考课程。

别忘了 DevOps

Kubernetes 的领养不仅仅是 Kubernetes 的事。你需要他背后的所有架构。Kubernetes 的标准开发流程需要 IT 思维模式的重大改变。这也翻译成你必须提供给开发者的工具(是的,其他工具…)。首先,你将需要一个 CR (container repository)来存储所有的容器图像,这些图像将由一个 DevOps 进程产生,由一个工具实现。如果您的公司出于安全原因不允许使用云,您将需要在本地部署这样的工具。在实践中,Kubernetes 带来了一个结构良好的流程。如果你还没有,你将被迫把它带回家。

带什么回家

云是 Kubernetes 的第一选择,除非你处于一种特殊的情况,在这种情况下,你有特定的好处,如成本优化,硬性要求,如安全性,或者一些特殊的条件,需要对所有栈进行完全控制。如果你在这些情况下,你将需要提供一个可靠的基础设施,基于坚实的硬件和良好的安装。尽管如此,你还需要在产品方面受过训练的人,并准备好管理 Kubernetes 的复杂性。

好消息是,如果内部空间过于狭小,无法满足您的需求,您将来可以(相当)轻松地移动。

关于 CoreOS 的一个说明

5 月 26 日即将到来,Kubernetes 官方文档指向 Cloudstack 和 CoreOS(最后一次更新是在 2019 年 6 月😒),但该发行版将于 5 月 26 日到期。Red Hats 设计的继任者是 Fedora CoreOS,这对于开始一个新项目来说是没问题的,但在移植的情况下需要一些工作。在这种情况下,可以选择使用 Flatcar 容器 Linux 发行版,这是一个更兼容的解决方案。另一个机会是迁移到云,如果已经在计划中的话。生命的终结可能是正确的提示。

参考资料:

  • DZone*——*Kubernetes 以为什么和怎样为前提
  • Kubernetes—本地虚拟机

学习新的编程语言很难吗?

原文:https://towardsdatascience.com/is-learning-new-programming-languages-tough-a0412b81293c?source=collection_archive---------70-----------------------

一个高级数据科学家 需要 多种编程语言

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由我可爱的 so 拍摄:)

如果你想成为一名高级数据科学家,你需要熟悉不同的编程语言,因为:

  1. 评估和寻找最适合项目结构的
  2. 得到一个高度精确的模型
  3. 使用可信模型
  4. 商业伙伴对一种特定语言的熟悉程度

当你想学习一门新的编程语言时,不管你是新手还是专家,我们人类害怕变化,主要是因为我们认为这很难。你要投入时间去寻找好的资源,学习新的评论结构,让大脑为你想学的新语言做好准备。中国有句谚语说:

学习是一笔财富,它会跟随它的主人到任何地方。

对我们数据科学家来说,一种财富是有目的地学习一种新的编程语言。我们如何将恐惧转化为财富?让我告诉你怎么做。

从数据科学家做起

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

活动发起人Unsplash 上的照片

许多软件工程师在他们的学士或硕士课程期间,根据他们的兴趣或课程以及大学教授的兴趣,必须学习不同的编程语言,即 C#、C++、Python、R、Matlab 等。但是对于一些想以数据科学家开始职业生涯的人来说,编程是新的。和你们许多人一样,在完成博士学位后,我决定进入工业界。当我看到需要资质的工作申请时,我很惊讶:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在我的硕士和博士学位期间,我像任何研究人员一样使用 Matlab 做数据科学项目,我只知道一种我在日常工作中使用的编程语言。但是,数据科学家项目的许多组织和职位更喜欢使用 Python 或 R,因为它们是开源的,公司不必为许可证付费。于是,我开始学习 r。

从 Matlab 切换到 R:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

像其他人一样,我认为改变是困难的,我们也知道学习一个新的话题是多么有趣。我试图找出如何学习一门新的编程语言,我认识到 4 个步骤将帮助我:

  1. 寻找最佳环境(我安装了 RStudio 用于使用 R)
  2. 有了一本好书,不要把它全部扔掉,而是把它作为主要资源
  3. 在线课程开始学习(当我还是学生时,我更喜欢免费课程)
  4. 有目的或有应用地学习,做一个你喜欢的项目

是的,如果你想把它学得很好,你必须开始用这种新语言创建一个应用程序,正如蒂姆·桑德斯所说:

没有应用的教育只是娱乐

如果我想找份工作,我必须把它学得很好,所以,我开始把一个项目从 Matlab 转换成 r。我意识到:

当你有一个集中的学习流程时,你就不应该害怕学习新的编程语言

我创建了工作流程,我将恐惧转化为财富,我学到了很多,做了第一个项目,很开心,我得到了我想要的工作。我是一名高级数据科学家,知道两个分析程序。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由本·怀特Unsplash 上拍摄

在与 R 合作两年并做了不同的分析项目后,我发现:

  1. 简单易学
  2. 一个强大的研究人员社区,支持和信任软件包
  3. 非常适合数据科学项目
  4. 非常适合数据可视化(ggplot、Plotly、D3 等)
  5. 轻松创建分析仪表板(Shinny)
  6. 易于嵌入另一个环境,即 C#或 VB
  7. 还有…

下面是 Matlab 和 R 的对比:

[## MATLAB 与 R |了解 7 大重要差异

MATLAB 的名字代表矩阵实验室。Matlab 是一个多范例的数值计算环境和…

www.educba.com](https://www.educba.com/matlab-vs-r/)

但两年后,我决定在一家以 Python 为常用数据科学工具的公司接受新的挑战。

从 R 转换到 Python

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当我面试新职位时,我告诉面试官,我认为学习 Python 没有任何挑战,因为我使用了适合我的工作流程。我知道:

当你已经学会了其中的一些语言时,学习一门新的编程语言并不困难。

我再次应用相同的工作流程,找到最佳环境**,**一本好书,一门在线课程,有目的或有应用地学习。是的,它又起作用了,我上任的第一天,在学习期间,我用 Python 写了我的项目,用的是 AnacondaPycharm 。如果你是一名数据科学家,并且使用 python,你知道,它拥有你做一个伟大项目所需要的所有东西,以及 Python 编程是多么令人愉快。

我从这些改变中得到的主要好处是当我接手一个用 R 编写的旧项目时,我能够为这个项目做出贡献。现在,我正在做一个项目,其中的数据收集部分是在 Matlab 中完成的,我的客户正在 Matlab 中进行仿真,我对他们的源代码没有任何问题,我正在领导数据科学部分。此外,当我在 Python 包中看到限制时,我有时会将 Python 和 R 混合起来做一个好项目。R 和 Python 的这种混合情况有助于我创建高度精确和值得信赖的数据科学产品。

在这里,您可以找到 R 和 Python 之间的比较:

[## 数据科学领域的 R vs Python 哪个更好…?-数据文件夹

r 和 Python 是面向数据科学的编程语言的最新水平。学习两者…

数据-天赋.培训](https://data-flair.training/blogs/r-vs-python-for-data-science/)

结论

作为一名数据科学家,有必要了解不同的数据科学编程语言,因为学习新的编程语言意味着:

  1. 更灵活接受不同的项目
  2. 获得不同工具的广阔视野
  3. 有更多的自由来选择开发项目的最佳方案
  4. 对项目成功的最大贡献
  5. 与开发者一起创建新的网络
  6. 与熟悉某种语言的客户建立信任

如何做,如果你想理解一门新的编程语言:

  1. 寻找最佳环境
  2. 有一本好书
  3. 通过在线课程开始学习
  4. 学有所用

最后:

“如果没有变化,我们就不会有进步,无论是篮球还是其他运动.”–约翰·伍登

非常感谢您的时间和阅读我的文章,我的名字是 Abduljabbar Asadi 博士,我是一名高级人工智能和数据科学主管和兼职自由职业者。我的目标是与您分享我在为大公司开发国际数据科学项目的多年经验中获得的知识。如果你想保持联系,请在 MediumLinkedin 上关注我:)

像这样?请随意分享,这样其他人就可以找到它!

机器学习正在接管金融生态系统吗?

原文:https://towardsdatascience.com/is-machine-learning-taking-over-the-financial-ecosystem-b9e841b07c9d?source=collection_archive---------72-----------------------

机器学习在金融领域的现实应用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

卢克·切瑟在 Unsplash 上的照片

从最初的商品交易到处理加密货币,金融已经走过了漫长的道路。与任何其他领域一样,技术已经成为金融生态系统不可或缺的一部分。从提取现金的自动柜员机(ATM)到算法交易,围绕金融的技术已经发生了变化,并且还在快速发展。在这篇文章中,我将谈论接管金融的最具影响力的技术分支之一,机器学习。

什么是机器学习,为什么它很重要?

机器学习是人工智能的一种应用,它为计算机提供了从经验中学习的能力*,而无需显式编程。*

随着技术的进步,数据生成的速度飞速增长。给一个数字,2.5 万亿分之一(也就是 18 个零!)每天都会产生字节的数据。“大数据”是对这种海量数据的称呼,其中很大一部分是金融数据。即使使用我们已经拥有的传统软件工具,也不可能从大数据中分析和获得洞察力,因为所有这些工具都是基于规则的,这意味着它们必须明确地编程来做什么。这就是机器学习发挥作用的地方。正如定义中提到的,机器学习从经验(在这种情况下是大数据)中学习,而不是显式编程。因此,机器学习是一种可以有效利用大量数据的技术,这些数据是在您阅读本文时产生的。这就是为什么机器学习脱颖而出,而且很重要。

现在,让我通过机器学习在金融领域的一些应用来阐明一些实际问题。

1。算法交易

算法交易是指一台支持机器学习的计算机(或系统)在股票市场、外汇市场等进行交易。代表一个人类。这将带来竞争优势,因为机器学习算法可以同时分析数千个数据源,每天执行数十万笔交易,这超过了人类的能力。这被称为高频交易(HFT)。此外,参与交易的人有时可能是多愁善感的,因此不是百分之百客观的,这在算法交易中不是这样。总部位于香港的艾迪雅公司经营着一只对冲基金,利用机器学习做出所有股票交易决策。

2。投资组合管理

投资组合管理基本上是个人或组织的财富和投资管理。为了做到这一点,有一个机器学习解决方案,Robo-Advisor。这个名字很容易让人误解,因为没有机器人参与其中。robo-advisor 所做的是就投资组合向客户提供建议,以优化他/她的财富。让我用一个例子来简化一下。假设有一个年轻人想在 60 岁退休,并有 20 万美元的储蓄。当客户输入其当前财务状况及其他相关详情时,robo-advisor 将根据客户的风险偏好为客户提供一系列投资机会和金融工具,以实现其退休时拥有 20 万美元的目标。

3 .欺诈检测

虽然传统的欺诈检测系统严重依赖于一组强大的规则,但基于机器学习的欺诈检测系统甚至可以学习如何应对新的潜在安全威胁。机器学习算法将新交易(或任何其他金融活动)与账户历史进行比较,并评估所述交易具有欺诈性的可能性。如果这种可能性超过某个百分比,该特定交易将被标记甚至自动拒绝。与人工操作员相比,其优势在于基于机器学习的系统可以在先前交易的数千个数据点上快速权衡交易细节。此外,与不使用机器学习的传统软件工具不同,机器学习的软件工具会根据帐户所有者不断变化的习惯进行自我调整。此外,目前正在研究如何使用自然语言处理(NLP)来检测欺诈性金融文件,如果成功,这将是革命性的。

4 .资信评估/保险核保

评估客户的信用价值是一项耗时耗钱的工作,但对于任何金融服务提供组织来说,这都是一项至关重要的任务。组织中有独立的部门来完成这项工作。你猜怎么着?机器学习已经准备好了!数据科学家根据成千上万以前的客户资料训练模型,算法从中识别潜在趋势。使用一个训练有素的模型,银行或任何其他金融机构都可以预测某个客户是否会偿还贷款,通过这个模型可以减少不良贷款的数量。从保险公司的角度来看,他们可以根据投保人的性别、年龄和一系列其他因素来评估其必须接受健康治疗或遭遇交通事故的可能性。基于这种前景,保险公司可以承保。总部位于美国的保险公司 Lemonade 采取了类似的基于机器学习的方法。

5。情绪/新闻分析

情感分析正在处理大量的非结构化数据,如照片、音频文件、社交媒体帖子、博客等。来判断市场情绪。洞察市场情绪有助于市场细分、战略营销等。这是另一篇文章的主题。如果我在这里坚持金融方面,情绪分析直接帮助投资决策。例如,如果对一家公司的某些产品或公司本身有负面情绪,投资该公司是不明智的,因为股价可能会在未来下跌,反之亦然。当涉及到分析情感时,自然语言处理(NLP)技术被高度使用。

现实点吧!

除了上面提到的应用,机器学习在金融生态系统中还有更多应用场景。然而,除了少数真实世界的系统之外,机器学习还没有真正在金融领域崭露头角。为什么?大多数机器学习解决方案仍处于开发阶段,与机器学习相关的研发成本高昂!另一个原因是,传统组织仍未准备好自动化做出高度关键的财务决策的流程,因为这在很大程度上取决于 it。换句话说,还有很大的提升空间。也就是说,科技巨头和知名大学正在这一领域投入大量资源进行研究。谷歌的“谷歌人工智能”计划只是一个例子。随着大数据的可用性和所有这些研究的进行,机器学习正在快速发展。金融部门被当前机器学习进步浪潮彻底改变的那一天已经不远了。

资源

芒果糯米是生产力的关键吗?🥭

原文:https://towardsdatascience.com/is-mango-sticky-rice-correlated-with-productivity-ad925959d858?source=collection_archive---------53-----------------------

648 天情绪数据的分析和可视化

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你想知道你的情绪如何影响你的睡眠,你的父母如何影响你的幸福水平吗?

成为一个数据呆子,并跟踪它!

🤔这到底是什么?(又名数据源)

2018 年 10 月,我开始跟踪自己的几个指标。

每天我都会对自己的情绪、睡眠、服用的维生素以及许多其他变量进行评分。后来,我还实施了每周回顾实践,记录在不同活动上花费的平均时间(例如工作时间),感恩,最喜欢的名言等等。

数据收集

每天和每周的评论都是通过在线表格记录的——每天一份在晚上或第二天早上填写,每周一份在每个周日结束时填写。从 2018 年的 Google Forms 开始,我又把表单搬到了 Coda,2020 年初又搬到了 Airtable。

使用 Toggl 每天跟踪每周活动数据(如花在有偿工作或自我改善上的时间)。这一周的总数在周末记入日志。

睡眠数据——深度睡眠的持续时间和总睡眠时间——被奥纳环跟踪,在周末记录每周平均值。

在 2020 年中期,我积累了足够的数据,或者说足够的数据分析技能来调查结果。有什么模式吗?相关性?我能绘制的最酷的图表是什么?

下面这个帖子是对过程的人性化总结,突出的结果,和最好的图表。👌

完整的 Jupyter 笔记本包括了许多想法的列表,供进一步分析。

让我们看看数字:数据访问

您可以使用 Airtable API 和这个出色的 Python 包装器来访问最新版本的数据。

我们对包含每周统计数据的数据框进行同样的操作,*瞧,*我们有两个熊猫数据框可以使用。

让我们看看他们能告诉我们什么。

🆙涨跌和皮尔逊

有了所有的情绪数据,我们可以绘制一些令人愉快的图表。

例如,这里有一个函数,它在选定的几天内绘制两种选定的情绪。

输出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

过去 30 天内自我报告的抑郁和焦虑评分。

这是很好的视觉化一个时期,但要看到更广泛的趋势,我们可以转向统计。我们最好的朋友皮尔逊进来了🙌。我可以总结一下最高值,但是相关矩阵太难展示了。

输出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不同情绪测量之间的相关性。

遵循标准基准值(高于 0.5,低于-0.5-中等正/负相关,高于 0.7 或低于-0.7-强正/负相关),没有强相关。

这里有一个函数,用于选择和显示高于 0.5 和低于-0.5 的相关性,我在这里运行它,天数等于数据框的长度,以从整个数据集获取值。

输出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

它告诉我们什么?没什么特别的,真的。

  • 随着自信心的下降,我的抑郁程度增加,反之亦然:随着抑郁程度的下降,自信心增加。
  • 动机和抑郁之间也存在同样的关系。

另外,**自信和动机是相互正相关的——**一个人做得好,另一个人也会做得好。没什么好惊讶的。

然而,我期望睡眠质量与情绪有更强的相关性,但事实似乎并非如此。

🌇我最幸福的城市是哪里?

在过去的 648 天里,我去了很多地方,很想看看这个地方是否以及如何影响我的心情。

所有这些结果都需要全盘接受——每个地点的观测数据都不相同。

有几个城市我只呆了大约一周。这通常意味着我在那里是为了度假或一个特殊的活动,所以每天的安排和日常事务与长期逗留是不可比的。我从分析中排除了这些行。

要获得每个城市的最高平均情绪值,我们只需使用 group by 并提取最小值和最大值。

输出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

看起来我应该睡在华沙,为了工作去清迈——那会是一段很长的路程。🤷‍♀️

输出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

大多数情绪数据与我记忆中的自我的报告相符,除了巴黎的生产力值较低。我不记得是这样的。

有趣的是,在同一个城市——巴黎—,人们观察到了最低的生产率、最低的抑郁和最高的创造力。这不是我记忆中的这次逗留——我不会说它低于平均水平,或者在任何方面更有创造性。

📍而最工作狂的城市是…

工作和感觉富有成效不是一回事。但是,你猜怎么着?有人非常仔细地记录了一周内不同活动所花费的时间。

使用 datetime 很混乱——你可以在笔记本上看到我所有的尝试——对于这篇文章,我将坚持使用浮点值。让我们来看看我每天跟踪的主要活动的最高值和最低值——有偿工作、自我提升和生活组织。

输出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

看起来最“多产”的城市清迈并不是我工作时间最长的地方。同样,在里斯本花很多时间工作也没有让我觉得很有效率。

如何制作一个图表来可视化这些持续时间值,并显示里斯本有多不正常。

输出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作为背景,我在里斯本的时候没有和我的伙伴在一起,非常孤独。我的解释是:

缺乏社会交往会导致过度工作,甚至没有积极的主观生产力感。

太浪费了,不要在家里做。☝️

💤我在哪睡的时间最长?

自我报告的睡眠质量华沙最高,槟榔屿最低。它是如何与睡眠时间成平方的?提醒一下:总睡眠深度睡眠值用一个奥纳环跟踪。

这是每个城市的睡眠时长值的图表。

输出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不太清楚哪些是顶值,哪些是低值。我设法将睡眠值从浮点数转换成小时数。

输出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请注意,上表几乎完全准确,除了一个值:Lisbon 的工作时间。它应该是 31 小时 15 分钟,但是由于值超过了 24 小时,事情就偏离了方向,尽管我诚实地(漫长、令人厌倦、通常令人沮丧地)尝试,我还是没能解决这个问题。

  • 我在华沙每周最长的平均深度睡眠时间——分别是 8:16 小时和 2:34 小时。
  • 吉隆坡每周平均深度睡眠时间最短——1:03 小时,以及
  • 槟榔屿每周总平均睡眠时间最短——6:57 小时。

吉隆坡的深度睡眠和总睡眠时间以及主观排名与槟榔屿非常接近。(吉隆坡 1 分 16 秒,7 分 03 秒,6.97 秒,槟城 1 分 22 秒,6 分 57 秒,6.57 秒)。

🏙城市赢家!

当然,任何关于城市的结论都与城市本身无关,而是与我在那里的特定生活环境有关——包括公寓、工作和睡眠场所、社交生活和天气。

确定在最有希望的地点创造的条件将是令人感兴趣的。我在清迈有什么其他地方没有的东西,让我的(印象中的)生产力如此之高?

莫自行车的可用性和芒果糯米的便捷性是生产力的关键吗?!

这是我决定这篇文章标题的地方。

🧀要奶酪了!我感激什么?

感恩练习是我每周回顾*的一部分,也是分析文本数据的一大来源!

*为什么不用词云来显示最常用的词?*🤩谁不喜欢好字云。

这是你可以做到的。跳过我清理柱子的部分,没人喜欢那部分。

结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

显然,对于像我这样一个内向的隐士来说,也许令人惊讶的是,与人相关的术语在这片云上占据了显著的位置。特别提到妈妈和汤姆(我的搭档),以及 EA 社区的一个大喊。

⏰我到底在做什么?

他们说日子很长,但月份很短。

当你不注意的时候,日子就会变得模糊不清,特别是在 2020 年的封锁期,每天都是星期二(或者星期三,正如蒂姆·厄本所说的那样)。

写下突出的事件有助于养成密切关注的习惯。这也有助于更加珍惜每一天。

让我们来看看对我来说最常见的突出事件是什么。

我确实考虑到这是一份主观报告,由我设法注意到的、在一天结束时记得的、并决定写下来的内容组成。可能不太安全。

代码与 gratefulness cloud 相同,只是使用了不同的数据框和列作为文本源。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来自日常突出事件的词云。

不出所料,汤姆再次占据了突出的位置。我想这就是当你和你的伴侣生活在一起时会发生的事——*他们到处都是血,init!*😛

交谈(打电话、指导、交谈)和散步(散步、散步)是我最喜欢的活动。可以说,几个特定的人也是“突出的事件”(简、奥利弗和妈妈)。

结论

*我学到了什么?*没有什么开创性的东西。至少,没有明确的哇时刻和立即可操作的 CTA。和许多调查一样,这次调查也以:需要更多的研究!

在哲学方面,对数据的详细处理鼓励了更深入的思考,例如:

  • 工作效率感觉与工作时间长度之间的差异,以及
  • 促使我更仔细地调查在特定地点(如华沙)建立的确切生活和睡眠可能有助于更好的睡眠。

下一步,我可能会进行更多有意识设计的实验。例如,连续 4 周吃芒果,看看它是否会影响我的(感知水平的)生产力。😉

我知道你想说什么:我应该每天记下我的感激之情。我会把这个提议提交给我的国际单项体育联合会委员会。

关注我更多数据冒险!

[## 劳达米亚/数据组合

这是作为 Dataquest 和 DataCamp 课程 Data Science path 的一部分完成的所有项目的记录。那些…

github.com](https://github.com/Laodamia/Data-Portfolio)

迈克尔·乔丹是低方差之王吗?

原文:https://towardsdatascience.com/is-michael-jordan-the-king-of-low-variance-7f059e81955?source=collection_archive---------86-----------------------

继《最后的舞蹈》网飞纪录片系列之后,这里有三个你在统计网站上从未见过的“有史以来最伟大”决心的一致性测试。

《最后的舞蹈》将迈克尔·乔丹和整个 80-90 年代的篮球时代带回了我们的生活。但随之而来的是关于谁是“山羊”或历史上最伟大的人的无休止的争论,在这方面,乔丹在数据上并没有明显的优势——他没有比尔·拉塞尔赢得那么多冠军,没有卡里姆、卡尔·马龙、威尔特·张伯伦甚至仍然活跃的勒布朗·詹姆斯得那么多分。他场均得分最多,但仅比威尔特·张伯伦高出一点点。那么是什么让他如此特别呢?或者把他当成山羊只是 NBA 推广者和耐克公司的一个营销噱头,注入了我们天真的 90 年代孩子的记忆?嗯,我想考虑纪录片中反复提到的最后一个辩护-

乔丹总是表演。

他来赢得每一场比赛,并在每一场比赛中为观众中从未看过他现场表演的小孩表演。

也许我们可以在数据中看到这一点?如果迈克尔·乔丹是一个稳定的表演者,我们会期望看到他没有很多“糟糕的夜晚”。这意味着他的场均得分通常不会比他的平均得分低很多。方差的度量应该能够捕捉到这一点。

我们如何检验我们的假设?

我们想把乔丹和其他伟大的得分手做比较——我们会拿科比、拉里·伯德、威尔特·张伯伦和勒布朗·詹姆斯做比较。我们也想只选择他们平均得分高的赛季,否则,方差比较就没什么意思了。想象一下,如果有人平均每场比赛得 5 分,并且从未超过 10 分,这个玩家的方差很低,但他不是好玩家。我们正在寻找方差为 5 的每个游戏玩家的 30 分。此外,许多球员在新秀年需要时间热身,在联盟的最后几年有一些下降,所以我们想把这些排除在分析之外。出于这个目的,我们将只选择那些球员平均得分超过 25,并且至少打了 50 场比赛的赛季。我们还将展示该赛季平均值方差的标准化版本,这样像威尔特·张伯伦这样的球员在赛季中每场比赛平均得分超过 50 分(这有多疯狂…?),正如我们提到的,它可能固有地具有更高的方差。我们将把常规赛和季后赛结合起来进行方差估计。我们的数据来源将是非常详细的https://www.basketball-reference.com

对于伯德,我们选择了 1984/1985-1987/1988 赛季,张伯伦 1959/1960-1965/1966 赛季,1969/1970 赛季,乔丹-1984/1985 赛季,1986/1987-1992/1993 赛季,1995/1996-1997/1998 赛季,科比-2000/2001-2002 赛季)

所以…结果是:

标准偏差,非平均值标准化:

勒布朗-7.731231136445559

鸟——8 . 58860 . 88888888881

约旦——8 . 19860 . 888888888615

神户——9 岁。39960.89989899991

萎蔫——12 . 59861868612

标准偏差,按平均值标准化:

勒布朗—8.3877441

约旦— 8.36280090045399

枯萎——9 . 59860 . 99989999989

鸟——9 . 59980 . 99999999991

神户——9 岁。39860.89989898991

勒布朗和乔丹有几乎相同的方差。我们能为一致性设计一些更好的估计吗?

我们最后一次尝试如下-

我们不想在更高的分数中测量方差——高方差分数惩罚了拥有 50-60 分惊人表现的玩家,因为它与他的平均水平非常不同。我们只想惩罚“糟糕的夜晚”,我们希望所有的玩家都通过某种全球尺度来衡量,类似于我们对归一化方差所做的那样,因为如果你是一个 5 分玩家游戏,仅仅衡量与自己平均水平的距离不会算作你有许多糟糕的夜晚(因为你的平均水平一开始就不太好)。所以我们用这个公式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中 P 是所有游戏分数的集合。

现在结果发生了巨大的变化:

枯萎——3.6269300860010376

约旦——4 . 54860 . 48648668661

勒布朗——6 岁。36660.66666666661

神户——7 岁。36860.78777878767

鸟——7 . 59867 . 38777787871

整个数据直方图供您目测:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以你有它。胜利肯定不属于乔丹,但他在稳定性方面非常强。除了威尔特·张伯伦,我认为很难找到有类似表现的球员,尽管这需要更深入的研究来验证。当然,得分并不代表一切——例如,比尔·拉塞尔根本不是一个好的得分手,魔术师约翰逊也不怎么样,除了助攻、篮板、盖帽和抢断等其他统计数据,他们还在风格、赢球态度和关键时刻得到衡量。奇怪的是,当二阶矩统计在常规统计工作中如此普遍时,你却从未在游戏分析中看到它们。基本上一切都是关于平均值,最好的情况是关于条件预期(“65%的球队在季后赛中以 3-1 领先…”)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

No-SQL 是在扼杀 SQL 吗?

原文:https://towardsdatascience.com/is-no-sql-killing-sql-3b0daff69ea?source=collection_archive---------6-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SQL 永远不会消亡的两个原因

上周,一位朋友转发给我一封电子邮件,邮件来自一位成功的企业家,他宣称“SQL 已死”。

这位企业家声称,像 MongoDB 和 Redis 这样广受欢迎的非 SQL 数据库会慢慢扼杀基于 SQL 的数据库,因此作为数据科学家学习 SQL 是一个“遗留问题”

我完全被他的邮件震惊了:他是如何得出如此离谱的结论的?但这也让我很好奇…有没有可能其他人也同样被误导了?这位企业家发展了一大批追随者,而且直言不讳——新的数据科学家是否收到了应该避免学习 SQL 的建议?

因此,我想我应该公开分享我对这位企业家的回应,以防其他人认为 SQL 正濒临灭绝。

你绝对应该学习 SQL,以便从事数据科学的职业。No-SQL 对学习 SQL 的价值没有任何影响

基本上有两个原因可以保证 SQL 在未来的几十年里仍然适用。

原因#1:不会——SQL 数据库不会取代 Presto、Redshift 或 BigQuery 等分析数据库

无论您的应用程序是使用 MySQL 这样的 SQL 后端还是 MongoDB 这样的非 SQL 后端,后端中的数据最终都会被加载到 Redshift、Snowflake、BigQuery 或 Presto 这样的专用分析数据库中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有分析数据库的平台架构示例:SQL 和 NoSQL

为什么公司要把数据转移到像 Redshift 这样的专业化柱状存储中?因为列存储能够比 NoSQL 和像 MySQL 这样的行存储数据库更快地运行分析查询。事实上,我敢打赌,柱状商店数据库的流行程度与 NoSQL 数据库一样快。

因此,应用程序数据库的技术,无论是 NoSQL 还是其他,通常与数据科学家无关,因为他们不使用应用程序数据库(尽管有一些例外,我将在后面讨论)。

原因 2:NoSQL 数据库的好处不是因为它们不支持 SQL 语言

事实证明,非 SQL 存储可以实现一个基于 SQL 的查询引擎,如果它对它们的支持有意义的话。类似地,SQL 数据库也可以支持 NoSQL 查询语言,但是他们选择不支持。

那么为什么柱状存储数据库有意选择提供 SQL 接口呢?

他们这样选择是因为 SQL 实际上是一种表达数据操作指令的非常强大的语言。

考虑一个简单的查询示例,该查询对 NoSQL 数据库 MongoDB 中的文档集合进行计数。

注意:MongoDB 中的文档类似于行,而集合类似于表。

**db.sales.aggregate( [
  {
    $group: {
       _id: null,
       count: { $sum: 1 }
    }
  }
] )**

将其与等效的 SQL 进行比较。

**select count(1) from sales**

很明显,对于想要提取数据的人来说,SQL 语言是更好的选择。(NoSQL 数据库支持一种不同的语言,因为 SQL 对于与数据库接口的应用程序库来说比较难以正确构建)。

我之前提到过,应用程序数据库的技术与数据科学家无关的规则也有例外。例如,在我的第一家公司,我们实际上没有像 Redshift 这样的分析数据库,所以我必须直接查询应用程序的数据库。(更准确地说,我是在查询应用程序数据库的读取副本)。

该公司的应用程序还使用了非 SQL 数据库 Redis,至少有一次我需要直接从 Redis 中提取数据,所以我确实需要学习 Redis 的 NoSQL API 的一些组件。

因此,在主应用程序专门使用 NoSQL 数据库的环境中,您学习的任何 SQL 都可能是不相关的。但是这些环境非常罕见,随着公司的发展,他们几乎肯定会投资支持 SQL 的列存储分析数据库。

感谢阅读!如果你觉得这篇文章有用,我写的是关于数据科学和媒体编程的文章,所以如果你想了解更多类似的内容,请关注我。

** [## 如何通过脸书数据科学面试

赢得面试的 4 个技巧

towardsdatascience.com](/how-to-pass-the-facebook-data-science-interview-3f2615c17012) [## 为什么 Python 比 R 更适合数据科学职业

新数据科学家将从学习 Python 中获益更多的四个原因

towardsdatascience.com](/why-python-is-better-than-r-for-data-science-careers-44ec7a149a18)**

回归中正态分布有必要吗?如何跟踪修复?

原文:https://towardsdatascience.com/is-normal-distribution-necessary-in-regression-how-to-track-and-fix-it-494105bc50dd?source=collection_archive---------4-----------------------

博克斯-考克斯变换,夏皮罗-维尔克检验,QQ 图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者拍摄的图片——新加坡南洋理工大学的钟形建筑

我相信对于每个以前学过统计学的人来说,正态分布(高斯分布)是他们学到的最重要的概念之一。每次运行模型或者做数据分析的时候,我都倾向于检查因变量和自变量的分布,看它们是否正态分布。如果有些变量是偏斜的,不是正态分布的,我会有点慌。

我该怎么办?我应该转换变量吗?我应该把它从模型中移除还是就这么放着?

我总是想知道常态是否是一个必要的假设,以及我们应该如何解决它。这篇文章就是关于这些的。

那么对于自变量和因变量,正态性假设有必要成立吗?答案是否定的

假设正态分布的变量只是预测误差。什么是预测误差?是模型预测结果与真实结果的偏差。

Y =系数* X +截距+预测误差

预测误差应遵循平均值为 0 的正态分布。置信区间和变量显著性的计算就是基于这个假设。这是什么意思?例如,您试图分析哪些变量有助于预测房价,并且您选择了基于 5%显著性水平的因素。如果误差分布显著偏离均值 0 正态分布,那么你选择的显著因素实际上可能不足以显著影响房价变化。但是,如果您只想获得基于最小均方误差的预测,这不会影响您的预测。

**那么我们该怎么办?**如果你只是想得到预测,那就随它去吧。如果要选择重要的预测因素,在构建模型和预测后,应该绘制图表以查看预测误差的分布。

为了更好地说明,我创建了 1 个随机正态分布样本和 1 个非正态分布样本,每个样本都有 1000 个数据点。

#create normal and nonnormal data sample
import numpy as np
from scipy import stats
sample_normal=np.random.normal(0,5,1000)
sample_nonnormal=x = stats.loggamma.rvs(5, size=1000) + 20

有许多方法可以检验数据的正态性,下面只是一些例子:

  1. 简单地画出分布曲线,看看曲线是否符合钟形曲线形状。非正态样本明显是左尾的。
import seaborn as sns
import matplotlib.pyplot as plt
sns.distplot(sample_normal)
plt.show()
sns.distplot(sample_nonnormal)
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正态分布样本的分布(左);非正态分布样本的分布图(右)

2.使用夏皮罗-维尔克测试,内置的 python 库可用,您可以根据您决定的 p 值来决定,通常我们在 5%的显著性水平上拒绝 H0,这意味着如果 p 值大于 0.05,那么我们接受它为正态分布。注意,如果样本量大于 5000,就应该用检验统计量而不是 p 值作为指标来决定。

print (stats.shapiro(sample_normal))
print (stats.shapiro(sample_nonnormal))#Test Statistics, p-value
#(0.9970424175262451, 0.06130971387028694) - H0 accepted
#(0.9806660413742065, 2.945287624900317e-10) - H0 rejected
  1. QQ 图,一个非常流行的用来观察数据分布是否遵循正态分布的图。
fig = sm.qqplot(sample_normal,line='s')
plt.show()
fig = sm.qqplot(sample_nonnormal,line='s')
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正态分布 QQ-plot(左);非正态分布 QQ 图(右)

我们如何解决常态问题:

通常,出现此问题(误差不符合正态分布)有两个原因:

  1. 因变量或自变量太不正常(可以从变量的偏斜度或峰度看出)
  2. 存在一些干扰模型预测的异常值/极值

我们应该做的是首先检查因变量和自变量中是否存在异常值。如果去除异常值不能解决问题,那么我们应该使用 box-cox 变换将一些非正态变量转换为正态分布。

下面是 Box-Cox 变换的数学公式。将基于数据点来决定λ值,以在变换后提供最佳的正态分布形状。我们可以直接使用 Python 包来帮助我们转换数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Box-Cox 变换数学公式

#transform the data using box-cox
sample_transformed, lambd = stats.boxcox(sample_nonnormal)#plot the distribution curve and QQ-plot for transformed data
sns.distplot(sample_transformed)
plt.show()
fig = sm.qqplot(sample_transformed,line='s')
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到,经过 box-cox 变换后,非正态分布的样本是正态分布的。

总之,如果您试图找到一个重要的预测因子或定义置信区间,请记住在模型建立后检查误差项的分布。如果因变量或自变量非常非正态,那么可以使用 box-cox 变换对其进行变换,使误差项更加正态分布。

您认为在构建模型之前,您已经完成了所有的统计假设检查了吗?不,你不是!如果你想了解更多关于回归模型中的其他统计假设,请参考我下面另一篇关于多重共线性的文章。

[## 回归中的多重共线性

为什么这是个问题?如何跟踪和修复它

towardsdatascience.com](/multi-collinearity-in-regression-fe7a2c1467ea)

NumPy 比 Python 快吗?

原文:https://towardsdatascience.com/is-numpy-faster-than-python-e8a7363d8276?source=collection_archive---------17-----------------------

Numpy 的线性代数比常规 Python 快多少?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A 前几天,我写了一篇文章,客观地比较了 Julia 和 Python 的现状,甚至测试了两种语言之间的一些基本迭代性能。虽然 Python 肯定落后于 Julia,但令人印象深刻的是 Python 在 Julia 面前表现得如此之好,当处理较小的数据集时,Python 通常仅落后于 Julia。然而,当观察次数增加时,Python 的速度缺点似乎成指数增长。您可以在此处找到该文章的链接:

[## 该不该跳 Python 的船,搬去茱莉亚?

是应该为了朱丽亚的表现而抛弃 Python,还是朱丽亚的速度只是精心炒作?

towardsdatascience.com](/should-you-jump-pythons-ship-and-move-to-julia-ccd32e7d25d9)

公开发表你的作品的一个好处是,它基本上可以被整个互联网的同行评议。虽然这可能会为一些相当粗鲁的人找你麻烦打开大门,但它也允许志同道合的科学家交流思想。这个故事留下了很大的反响,对我的测试进行了建设性的批评,因为我为元素级乘法和元素级指数编写了自己的函数。需要说明的是,我的目标是比较这两种语言的原始能力,并不是说用一种或另一种语言可以更快地编写这个算法,而是说明用 Julia 编写后端代码要容易得多,这与因为 Python 的缺点而改用 C 语言相反。

当然,比起使用我自己的函数,大多数 Python 程序员更希望我不要重新发明轮子,而是把它做成方形,并且更希望我只使用 NumPy。然而,为了准确测试 Pythonic 的性能,并与不使用 C 的 Julian 性能进行比较,我避免使用 C。

然而,这个想法让我很好奇。在 Github 上看,NumPy 大约有 51%是 c 语言,所以很明显,在很多情况下,NumPy 会击败我们在 Python 中可以进行的任何操作。目前悬而未决的是,我们可以从这样的事情中获得多大的性能提升。此外,NumPy 中相对基本的线性代数函数,如 numpy.multiply(),有可能是用 Python 编写的,甚至没有利用 c。

%timeit 测试

笔记本

我想测试这一点的第一种方法是使用我在之前的另一篇文章中使用的相同方法。我将使用一个 10,000,000 的 dim 数据集,并尝试使用一个简单的线性回归模型进行预测,该模型使用了 C 中可能使用的 NumPy 函数和我自己的 Pythonic 函数。下面是使用我自己的函数编写的类:

def dot(x,y):
    lst = []
    for i,w in zip(x,y):
        lst.append(i * w)
    return(lst)
def sq(x):
    x = [c ** 2 for c in x]
    return(x)
class LinearRegression:
    def __init__(self,x,y):
        # a = ((∑y)(∑x^2)-(∑x)(∑xy)) / (n(∑x^2) - (∑x)^2)
        # b = (x(∑xy) - (∑x)(∑y)) / n(∑x^2) - (∑x)^2
        if len(x) != len(y):
            pass
        # Get our Summations:
        Σx = sum(x)
        Σy = sum(y)
        # dot x and y
        xy = dot(x,y)
        # ∑dot x and y
        Σxy = sum(xy)
        # dotsquare x
        x2 = sq(x)
        # ∑ dotsquare x
        Σx2 = sum(x2)
        # n = sample size
        n = len(x)
        # Calculate a
        self.a = (((Σy) * (Σx2)) - ((Σx * (Σxy)))) / ((n * (Σx2))-(Σx**2))
        # Calculate b
        self.b = ((n*(Σxy)) - (Σx * Σy)) / ((n * (Σx2)) - (Σx ** 2))
        # The part that is super struct:
    def predict(self,xt):
        xt = [self.a + (self.b * i) for i in xt]
        return(xt)

这是使用 NumPy 函数编写的同一个类:

import numpy as np
class npLinearRegression:
    def __init__(self,x,y):
        # a = ((∑y)(∑x^2)-(∑x)(∑xy)) / (n(∑x^2) - (∑x)^2)
        # b = (x(∑xy) - (∑x)(∑y)) / n(∑x^2) - (∑x)^2
        if len(x) != len(y):
            pass
        # Get our Summations:
        Σx = sum(x)
        Σy = sum(y)
        # dot x and y
        xy = np.multiply(x,y)
        # ∑dot x and y
        Σxy = sum(xy)
        # dotsquare x
        x2 = np.square(x)
        # ∑ dotsquare x
        Σx2 = sum(x2)
        # n = sample size
        n = len(x)
        # Calculate a
        self.a = (((Σy) * (Σx2)) - ((Σx * (Σxy)))) / ((n * (Σx2))-(Σx**2))
        # Calculate b
        self.b = ((n*(Σxy)) - (Σx * Σy)) / ((n * (Σx2)) - (Σx ** 2))
        # The part that is super struct:
    def predict(self,xt):
        xt = [self.a + (self.b * i) for i in xt]
        return(xt)

使用的两个 Numpy 函数是 square()和 multiply()。这些函数相对简单,正如我在函数示例中展示的那样,所以我真的很好奇是否有 C 语言可以加速它们。在我们开始速度测试之前,我们需要读入一些数据:

import pandas as pd
df = pd.read_csv("speedtrain.csv")
testdf = pd.read_csv("speedtest.csv")

现在我们将以我们自制的函数为基线来计时:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

虽然 8.22 当然不坏,但它还可以更好。Julia 在不到一秒钟的时间内完成了这个计算,所以看看 C 和 Python 的组合如何与 Julia 相抗衡将会非常有趣:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

哇!

看起来我文章的评论有一点是对的;NumPy 和 C 对于线性代数来说要快得多。我曾怀疑 NumPy 可能会为这个操作保留纯 Python 代码,但是很明显我错了。我认为提醒我们自己 NumPy 可能也有自己的类型和用 C 编写的迭代器也很重要。这当然非常酷,因为这意味着 NumPy 相对来说非常快。

结论

所以简短的回答是

是的,

NumPy 比 Python 快很多。虽然这是意料之中的,但是如果我说我期望通过使用 NumPy 而不是 Pythonic 函数来实现我的目标,那么我是在撒谎。我认为这也是对为了 Python 中的科学和数学而对 NumPy 包所做的惊人工作的一种敬意。目前,NumPy 在 Github 上有超过 23,000 个提交,这是为社区做的大量免费、开源、无私的工作!

总的来说,我认为 Python 可以通过使用一个大的 C 库来加速是非常酷的。毕竟,Python 主要是为最终用户与低层应用程序进行交互而创建的,就像他们在 ABC 中那样。我很高兴收到这个回复,并且能够进一步研究这个问题,了解更多关于使用 NumPy 带来的性能好处。非常感谢你们所有人的阅读,也感谢你们提供建设性的反馈,比如催生了这篇文章的回复。

NumPy 真的比 Python 快吗?

原文:https://towardsdatascience.com/is-numpy-really-faster-than-python-aaa9f8afb5d7?source=collection_archive---------24-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:sl linux 命令的截图

是的,但前提是你知道如何使用它。

Python 开发人员都知道 NumPy 比普通 Python 快。然而,如果你用错了,它可能会影响你的表现,这也是事实。要知道什么时候使用 NumPy 是有益的,我们必须了解它是如何工作的。

在这篇文章中,我们将详细了解一下为什么 NumPy 可以更快,以及什么时候使用它是次优的。

Python 中的随机数

我们的玩具问题是随机数的产生。假设我们只需要一个随机数。我们应该使用 NumPy 吗?来测试一下吧!我们将它与内置的随机数生成器进行比较,运行两者一千万次,测量执行时间。

对我来说,结果如下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以,对于单个随机数,NumPy 要慢得多。为什么会这样呢?如果我们需要一个数组而不是一个数字呢?会不会也慢一点?

这一次,让我们生成一个包含一千个元素的列表/数组。

(我不想在 lambdas 中包装要计时的表达式,因为在 Python 中函数调用有开销。我希望尽可能精确,所以我将它们作为字符串传递给timeit函数。)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在情况大不一样了。当我们生成一个数组或随机数时,NumPy 轻松获胜。

这个结果也有一些奇怪的地方。首先,我们生成一个随机数 10 000 000 次。第二,我们将 1000 个随机数组成的数组生成 10 000 次。在这两种情况下,我们最终都有 10 00 万个随机数。使用内置方法,当我们将它们放入一个列表中时,需要大约 2 倍的时间。然而,使用 NumPy,当使用数组时,我们看到了比它本身快 30 倍的速度。

为了了解幕后发生了什么,我们将对代码进行分析。

剖析代码:使用 cProfiler 进行分析

为了查看脚本在每个函数中花费了多少时间,我们将使用 cProfiler

1.用于生成单个数字的内置随机数

我们先来看看内置函数。在下面的脚本中,我们像以前一样创建 10,0 00,0 00 个随机数。

我们从命令行使用 cProfiler:

python -m cProfile -s tottime builtin_random_single.py

出于我们的目的,这里有两个重要的列。ncalls显示一个函数被调用的次数,而tottime是花费在一个函数上的总时间,不包括花费在子函数上的时间。

所以内置函数random.random()如预期被调用了 10 000 000 次,在那个函数上花费的总时间是0.380秒。

NumPy 版本呢?

2.NumPy random 用于生成单个数字

这里,这是我们分析的脚本。

结果令人惊讶:

与之前类似,numpy.random.random()函数确实如我们所料被调用了 10 000 000 次。然而,脚本在这个函数上花费的时间比以前在内置的随机函数上花费的时间要多得多。因此,每次函数调用的成本更高。

然而,当我们开始使用数组和列表时,事情发生了巨大的变化。

3.内置的随机数生成一个随机数列表

像以前一样,让我们生成 1000 个随机数的列表 10 000 次。

侧写的结果并不令人惊讶。

正如我们所看到的,大约 60%的时间花在了列表理解上:10 000 个电话,总共 0.628 秒。(回想一下,tottime不计算子功能调用,比如这里对random.random()的调用。)

现在我们可以看到为什么 NumPy 在正确使用的情况下会更快。

4.NumPy random 用于生成随机数数组

这个剧本和以前一样非常简单。

这是侧写的结果。

10 000 次呼叫,即使每次呼叫花费的时间更长,您也可以获得 10 00 个随机数的numpy.ndarray。正确使用 NumPy 的原因是它的数组非常高效。它们就像 C 数组而不是 Python 列表。它们之间有两个显著的区别。

  • Python 列表是动态的,因此可以添加和删除元素。NumPy 数组的长度是固定的,所以如果不创建一个新的数组,就不能添加或删除。(创建一个数组成本很高。)
  • Python 列表可以同时保存几种数据类型,而 NumPy 数组只能包含一种。

因此,它们不太灵活,但性能明显更高。当不需要这种额外的灵活性时,NumPy 优于 Python。

盈亏平衡点在哪里?

为了确切地了解 NumPy 在随机数生成方面在多大程度上超过 Python,我们可以通过测量不同大小的执行时间来比较这两者。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到 20 左右,NumPy 开始超过 Python。当然,对于其他运算,如计算正弦或数字相加,这个数字可能不同,但趋势是相同的。对于较小的输入大小,Python 的表现略胜于 NumPy,但是随着输入大小的增加,NumPy 会大幅度胜出。

摘要

正确使用 NumPy 可以显著提高性能。然而,在某些情况下,Python 可能是更好的选择。如果你不知道什么时候使用 NumPy,你可能会损害你的表现。

一般来说,你最好使用普通的 Python,例如

  • 你处理小列表,
  • 您想要频繁地添加/删除列表。

当优化性能时,总是要考虑事物内部是如何工作的。这样,即使是在 Python 中,您也可以真正增强代码。

如果你喜欢把机器学习概念拆开,理解是什么让它们运转,我们有很多共同点。看看我的博客,我经常在那里发表这样的技术文章!

公共交通应该为冠状病毒的传播负责吗?

原文:https://towardsdatascience.com/is-public-transit-to-blame-for-the-spread-of-coronavirus-3cec94b7388f?source=collection_archive---------57-----------------------

新冠肺炎 Python 教程# 2-熊猫和统计模型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

马丁·大卫在 Unsplash 上的照片

***Note from the editors:***[*Towards Data Science*](http://towardsdatascience.com/) *is a Medium publication primarily based on the study of data science and machine learning. We are not health professionals or epidemiologists, and the opinions of this article should not be interpreted as professional advice. To learn more about the coronavirus pandemic, you can click* [*here*](https://www.who.int/emergencies/diseases/novel-coronavirus-2019/situation-reports)*.*

美国城市遭受重创

随着各州开始重新开放,很多事情仍不明朗。公共官员似乎在重新开放他们的州的问题上存在党派分歧,公民们开始在全国范围内抗议。虽然政党似乎发挥了作用,但这种分裂也可能是由冠状病毒的不均衡影响造成的。毫无疑问,美国城市受到的冲击最大。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:https://www . nytimes . com/interactive/2020/us/coronavirus-us-cases . html

城市的人口密度最大,在获得医疗保健方面的差距也可能最大,因此可以预见,城市是受影响最大的地方。但是,病毒的传播会不会归结于对城市本身更为根本的东西。从图表中,我们可以看到最大的影响来自东北部,而越往西走,城市受到的影响似乎越来越小。

城市间影响力的差异引发了这样一个问题:东北部城市是否有一些根本的东西是西部城市不必担心的。例如,冠状病毒会因为公共交通使用的巨大差异而扩散吗?看看这张 2013 年的图表。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:https://fivethirtyeight . com/features/how-your-cities-public-transit-stacks-up/

它们看起来几乎是同一个图像。这是有道理的。每天乘坐拥挤的地铁车厢或只有一个携带者的小型封闭公共汽车上下班可能会导致新感染的爆发。更不用说,大量频繁接触的金属、玻璃和塑料表面,病毒可以在上面存活数小时。此外,这也可以解释在欧洲和其他发达国家相对更严重的影响,这些国家也有发达的公共交通系统。尽管乍一看很有说服力,但让我们看看数字是否支持它。

量化公共交通的影响

当州长和市长计划重新开放他们的社区时,应该采取重大预防措施来防止新感染的再次出现。公共交通可能是确保我们做好这件事的关键驱动力。在这篇文章中,我将带你通过一步一步的分析来估计公共交通对冠状病毒传播的影响。

数据

我使用了来自纽约时报的各县冠状病毒病例的分类数据,我还使用了 T2 联邦运输管理局发布的公共交通使用数据。文件中还包括从美国农业部 (USDA)收集的县级人口和收入数据。本文使用的所有数据都可以在这里找到。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据非关联乘客出行对城市进行排名。非关联旅客出行是指居民进行的非关联的总出行次数。

**Note**: Probably the hardest part of this process is the data-wrangling in order to make the resulting dataset, if you would like to know how it was done, feel free to ask! This process also removed certain cities like NYC due to data matching errors between datasets. Also, the number of cases are as of when I was working on this project, which was actually about a month ago.

回归

量化自变量对因变量影响的一个简单方法是线性回归。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里,我们可以通过在上述回归中估计 x 的β系数,来模拟公共交通使用 x 对感染 y 的影响。我们可以在 python 中这样做,并检查它的重要性。首先,我们导入相关的包:

然后我们运行回归并打印结果!

执行回归后,我们发现我们有一个系数 0,但一个真正重要的 p 值。所以没有影响?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们看到系数基本上为 0,并且在 t 统计量上有一个低 p 值。这意味着自变量在 99.999%的置信度下可能没有影响。

需要注意的是,我们的自变量的大小,比案例数要高得多。这可能导致系数小于 0.0001,但仍然很重要,因为乘客出行的数量在数千和/或数百万的数量级。因此,在进行回归分析之前,我们应该将变量标准化,以获得更合理的估计值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结果表明,不相关的乘客旅行实际上对冠状病毒病例的数量有显著影响。

现在我们看到一个更有趣的结果,公共交通实际上可能对冠状病毒病例的数量有相对显著的影响。

检查有效性

这个结果准确吗?大概不会。可能有许多因素与公共交通使用相关,也可能对感染人数有因果影响。

例如,大量使用公共交通可能与低收入人群的高患病率相关。由于经济原因,这些人可能无法遵守留在家中的命令,因此更有可能被感染。高人口密度也可能与高公共交通使用率相关,更多的人意味着更多的交通流量——导致使用公共交通的概率更高。无论公共交通是否存在,更密集的环境都可能导致更多的感染。简而言之,贝塔系数可能被夸大了。相关性并不意味着因果关系。

那么我们该如何改善这一点呢?一种方法是使用一个工具变量,该变量与其他因素无关。虽然有效,但在实践中很难找到有效的工具变量。公共交通的普及与人口密度、收入和地方政府有着内在的联系。

我们也可以尝试一种差异的方法。如果这个国家有一些地区关闭了公共交通,我们可以比较这些县与那些没有关闭的县的感染率变化的差异。然而,没有足够多的县这样做,以作出准确的估计。因此,相反,我们将简单地添加一些控制变量,以尝试并减少因忽略因素而导致的偏差。

控制

我们应该添加的主要控制因素是人口密度和收入水平,因为这两个因素最有可能导致高估公共交通的影响。我们可以通过下面的代码来实现这一点:

我们看到它对我们的结果产生了巨大的影响。公共交通的影响已经减半,但它似乎仍然对冠状病毒的病例数有重大影响。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请注意,虽然不相关的乘客出行有影响,但这种影响大约是人口密度影响的四分之一。然而,这仍然是相当重要的。

结论

因此,根据分析,公共交通可能对新感染人数有影响。由于县级数据和市级数据之间的冲突,合并数据集存在一些限制,但我们仍然看到了一个相当令人信服的结果,即与农村地区相比,这可能导致了城市中病毒的更广泛传播。当政府计划重新开放时,他们应该特别小心如何重新开放高风险地区,他们应该依靠严格的分析来支持他们的决定。

本文是冠状病毒相关 python 教程的三部分迷你系列的第二篇文章。你可以在这里查看第一篇文章!

Python 比 R 快吗?

原文:https://towardsdatascience.com/is-python-faster-than-r-db06c5be5ce8?source=collection_archive---------23-----------------------

基于简单机器学习管道的 R vs Python 速度基准测试

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片改编自https://www.r-project.org/logo/https://www.python.org/community/logos/

关于用于机器学习的正确工具,有很多反复出现的讨论。r 和 Python 经常被认为是替代品:它们都适合机器学习任务。但是当一个公司需要开发工具并为此维护两个解决方案时,这可能会带来更高的成本。所以,我们有时候不得不选择。

在这篇文章中,我将展示一个 R vs Python 的速度基准测试,我这样做是为了看看 Python 是否真的像某些人声称的那样提供了速度提升。

基准机器学习管道

对于一个基准来说,要做到公平是相对困难的:执行的速度可能很大程度上取决于我的代码,或者所使用的不同库的速度。我必须做出决定,我已经决定对虹膜数据集进行分类。这是一个相对容易的机器学习项目,这似乎有助于进行公平的比较。

我将使用 R 和 Python 中的库,我知道它们是常用的,此外它们也是我自己喜欢使用的库。

基准测试的步骤

我做了两个笔记本,R 和 Python,都执行以下步骤:

  • 读取带有虹膜数据的 csv 文件。
  • 将数据随机分为 80%的训练数据和 20%的测试数据。
  • 使用内置的网格搜索和交叉验证方法,在训练数据上拟合多个模型
  • 根据测试数据评估每个最佳模型,并选择最佳模型

基准的模型

我选择使用以下模型列表:逻辑回归、线性判别分析、K-最近邻和支持向量机。对于后两者,我添加了一个网格搜索,用于在 3 个内核上使用多处理进行 5 重交叉验证的超参数调优。

我选择了这些模型,而不是更流行的 Random Forest 或 XGBoost,因为后者有更多的参数,并且函数接口之间的差异使得很难确保模型执行的完全平等的设置。

我选择的模型参数更少,在 R 和 Python 中使用它们的方式几乎相同。因此,用错误的参数选择来偏置基准的风险较小。

由此产生的脚本和笔记本

我在下面展示了结果代码。要在你自己的硬件上运行笔记本,你可以在这里下载R 笔记本和在这里下载 Python 笔记本

R 代码

基准测试使用了以下 R 代码:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Python 比 R 快吗?—R 代码。作者配图。

Python 代码

基准测试使用了以下 Python 代码:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Python 比 R 快吗?Python 代码。作者配图。

结果:Python 比 R 快吗?

为了进行公平的比较,我在一个执行了 100 次的函数中转换了完整的代码,然后测量了它所用的时间。这两个代码都是在配有 2.4GHz 双核英特尔酷睿 i5 处理器的 MacBook Pro 上执行的。

R 脚本的总持续时间大约是 11 分 12 秒,大约是每个循环 7.12 秒。Python 脚本的总持续时间大约为 2 分 2 秒,每个循环大约为 1.22 秒。

Python 代码比 R 替代方案快 5.8 倍!

因此,这种特殊机器学习管道的 Python 代码比 R 替代方案快 5.8 倍!

当然,这不能自动推广到 R 和 Python 中任何类型项目的速度。此外,可能有更快的替代方法来用这两种语言编写这些代码,但我认为当关注功能而不是速度时,这两种代码都是编写机器学习笔记本的合理方法。

对我个人来说,这种差异比我预期的更显著,我会在未来的项目中考虑这一点。我希望这篇文章对你也有用!感谢阅读!

PyTorch 是在抓 TensorFlow 吗?

原文:https://towardsdatascience.com/is-pytorch-catching-tensorflow-ca88f9128304?source=collection_archive---------6-----------------------

2020 年深度学习框架的状态

自从我为主要的深度学习框架看风景以来,已经有 10 个月了。PyTorch 和 [TensorFlow](http://Search Results Web Result with Site Links www.tensorflow.org) 已经成为明确的框架选择。TensorFlow 领先 PyTorch 两年,但 PyTorch 已经在许多领域缩小了差距。让我们看看现在的情况吧!👍

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

PyTorch 和 TensorFlow?

有什么新鲜事?

TensorFlow 和 PyTorch 越来越像了。TensorFlow 采用了 PyTorch 创新,PyTorch 也采用了 TensorFlow 创新。值得注意的是,现在这两种语言都可以在动态执行模式或静态图形模式下运行。

这两个框架都是开源的,但是 PyTorch 是脸书的产品,而 TensorFlow 是谷歌的产品。

让我们看看其他一些显著的差异和更新。👍

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

PyTorch

在撰写本文时,PyTorch 的版本是 1.4。它一直在增加功能,以提高行业的采用率。PyTorch 现在可以更容易地在谷歌云的张量处理单元(TPUs) 上运行——这是训练复杂深度学习模型的最快方法。

此外,Chainer 框架的维护者 Preferred Networks 最近将他们的团队带到了 PyTorch。最后,如果你喜欢 C++或 Java, PyTorch 有一个版本适合你。😀

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

张量流

TensorFlow 2.0 引入了许多改进,使 API 更加精简和友好。它紧密集成了 Keras,因为它是前端的高级 API。Keras 仍然可以与其他一些框架一起使用,但是将其作为 TensorFlow 的一部分使用通常是有意义的。

此外,如果你更喜欢 JavaScript 而不是 Python,TensorFlow 为你准备了一个 JavaScript 版本。😀

TensorFlow 在生产和边缘深度学习方面仍然比 PyTorch 有更多的功能,但 PyTorch 越来越接近功能对等。

方法

如果你想学习一个流行的深度学习框架,PyTorch 和 TensorFlow 是城里的两个游戏。我没有考虑其他框架,因为没有其他框架被广泛采用。

在我之前的分析中,我查看了许多指标。结果显示,TensorFlow 和 PyTorch 都在稳步增长。在这篇文章中,我将关注我认为最重要的四个指标:工作列表、研究使用、在线搜索结果和自我报告使用。

让我们跳进来吧!🚀

工作列表

2020 年 1 月 26 日在美国用关键词 TensorFlowPyTorch 搜索果然怪兽简聘LinkedIn

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

TensorFlow 在每个招聘网站的搜索结果中出现的次数平均是两倍。以下是原始数据:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是结果占总数的百分比。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在我十个月前的分析中,我注意到 TensorFlow 出现在三倍于 PyTorch 的列表中。现在 TensorFlow 的优势降到了 2 倍。📉

研究

PyTorch 现在是顶级研究会议论文的领导者。前 PyTorch 实习生 Horace He 在本文中研究并讨论了这个话题。这是一张显示增长的图表。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:https://chillee.github.io/pytorch-vs-tensorflow/

超过 50%意味着 PyTorch 比 TensorFlow 在那次会议上被提及的次数更多。

作为一个更详细的样本,这里是来自 NeurlIPS 会议的原始分数,PyTorch 使 TensorFlow 黯然失色。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:https://chillee.github.io/pytorch-vs-tensorflow/

在最近的 NerulIPS 会议中,PyTorch 在 166 篇论文中,TensorFlow 在 74 篇论文中。PyTorch 从 2018 年的论文数量少于 TensorFlow,到 2019 年的数量增加了一倍多。

PyTorch 这么快就超过 TensorFlow 我觉得很惊讶。PyTorch 是否会继续扩大其在这一领域的领先优势,这将是一件有趣的事情。📈

接下来让我们看看在线搜索。

搜索流行度

我用 Google Trends 找到了 2017 年 1 月 26 日到 2020 年 1 月 26 日 PyTorch(软件)和 TensorFlow(计算机应用)在美国的相对搜索次数。

请参见下面的结果,TensorFlow 为蓝色,PyTorch 为红色:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

谷歌搜索兴趣。蓝色张量流。红色火炬。

显然没有人想在寒假前后搜索深度学习框架。🎄😀

这是线性趋势线的相同数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

蓝色张量流。红色火炬。参见 互动网络版Tableau Public。

PyTorch 已经大大缩小了差距。看看这种趋势是否会持续下去将会很有趣。

最后,让我们看看人们说他们在用什么。

报告的使用

在 2019 年的堆栈溢出开发者调查中,10.3%的受访者报告使用 TensorFlow,而 3.3%的受访者报告使用 Torch/PyTorch。专业开发人员的得分相似(9.4%对 2.9%)。没有其他深度学习框架的报道。

值得注意的是,这项调查是在 2019 年初进行的,所以我们必须等待,看看 2020 年的结果会显示什么。📊

概述

TensorFlow 仍然在 PyTorch 的许多工作列表中被提及,但差距正在缩小。PyTorch 在顶级会议的研究论文中的使用量已经领先,并且几乎缩小了在谷歌搜索结果中的差距。根据最近的堆栈溢出开发者调查,TensorFlow 的使用仍然是普通的三倍。

总体而言,TensorFlow 在大多数领域仍然领先,但 PyTorch 正在取得进展。🐎

你应该关注什么?

这个项目是出于我的愿望而诞生的,我希望把我的时间花在使用深度学习框架并利用它进行教育上,这对于人们的学习来说是最有意义的。我仍然没有决定未来两年的答案是 PyTorch 还是 TensorFlow。

PyTorch 很可能会继续向对等发展。然而,TensorFlow 仍然是安全的选择。在可预见的未来,它将会很受欢迎,尤其是雇主。

值得注意的是,这两个框架都本着合作竞争的精神不断创新。即将到来的创新将塑造它们的受欢迎程度,并为用户带来好处。🎉

资源

如果你准备学习深度学习,我建议参考以下资源:

fast.ai MOOC 有很棒的视频和支持它的社区。想学 PyTorch 的话特别有用。

Chollet 的用 Python 进行深度学习这本书是关于深度学习的很好的入门书。他是 Keras 的原作者。如果你想学习 TensorFlow,这是一个特别好的选择。

TensorFlow 和 T2 py torch 的文档中都有很好的教程和指南。

先决条件

在你着手深度学习之前,我建议你学习 Python。如果你是 Python 的新手,我可以推荐我的难忘的 Python 书吗?😀

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一旦你熟悉了 Python 基础知识,我建议你学习 NumPy 和 pandas Python 库来进行数据清理和分析。McKinney 的 Python for Data Analysis 这本书很好地涵盖了 NumPy 和 pandas。我还在准备一本关于熊猫的书,所以订阅我的 Data Awesome 邮件列表吧,当它发布时,你会是第一个知道的人。

最后,在跳入机器学习的深度学习分支之前,我建议你用 scikit-learn 库学习使用更通用的机器学习算法。我喜欢穆勒和圭多的用 Python 介绍机器学习。此外,Aurélien Géron 的第二版使用 Scikit-Learn、Keras 和 TensorFlow 进行机器学习涵盖了使用 TensorFlow 2.0 进行机器学习和深度学习。

包装

我希望你发现这个对最流行的深度学习框架的状态的评估是有用的。如果你有,请在你最喜欢的社交媒体上分享,这样其他人也可以找到它。👍

我写关于 PythonDockerSQL 和其他技术主题的文章。如果你对此感兴趣,请关注我,在这里阅读更多。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

快乐决定!⚖️

R Shiny 的多功能性足以构建一个视频游戏吗?

原文:https://towardsdatascience.com/is-r-shiny-versatile-enough-to-build-a-video-game-5c93232ef4e2?source=collection_archive---------61-----------------------

用有趣的方式推动 r 闪亮

在过去的两年里,RStudio 一直在组织一场竞赛,展示作为创建应用程序框架的 Shiny 的强大功能和灵活性。最近我一直致力于让闪亮的应用程序变得更漂亮,今年我决定参加这个比赛。然而,我想做一些稍微不同的事情…

就在那时,一个问题突然出现在我的脑海中:有没有可能用 R Shiny 来制作一个游戏,即使是作为一个原型?它真的有可玩性和趣味性吗?

电子游戏?在 R 闪亮?

历史上,Shiny 一直被用于数据驱动的应用程序和快速开发工具,但游戏之前已经在各种语言和框架中完成。不仅如此,所有的要素都在那里:构建 UI 的方法,保持游戏状态的东西,以及读取玩家输入并相应更新 UI 的能力。

早在 2016 年就有人试图制作简单闪亮的游戏《T2 》,但我想尝试一些更有雄心的东西。我越是拿这个想法开玩笑,它就越是可行。让我们看看我是不是对的。

这个概念

我最初的想法很简单。我希望它是一个慢节奏的游戏,你可以在桌面或手机上玩,因为我也想探索在 Shiny 中构建响应性 ui。我玩了一个刷卡游戏,不同方向的刷卡会以不同的方式影响游戏。这些选择会影响一些指标,玩家会调整决策,使这些指标保持在最佳水平。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一款静态、早期版本的游戏。

我觉得把玩家放在一个虚构的世界领袖的位置上会很有趣,他的决定会影响世界的状态。作为一名全能的决策者,你的工作是平衡经济、环境和公众对你表现的看法。如果其中任何一个达到零,游戏就结束了!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

玩家平衡三个指标:财富、观点和环境

我还觉得用一个单独的值来追踪你有多邪恶会很有趣。不会让你输掉比赛,但会根据你的行为提供一些小的好处或障碍。因此,因果报应仪诞生了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因果报应仪(左)

我想象它有一种复古的感觉,所以我用 NES.css 来表达一点怀旧之情。我也真的想展示一个基于度量标准的地图,在这种情况下,“传单”是一个简单的选择,因为它是如此受欢迎和易于使用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

实践中的概念验证

有了大部分的研究和坚实的概念证明,是时候实施了!我希望有一个非常清晰和易于遵循的项目结构,同时让任何人都可以简单地学习和扩展。

项目结构

说到技术,HTML、CSS 和 JavaScript 将是前端的面包和黄油。像“htmltools”和“ SASS ”这样的库是显而易见的选择,因为我打算手工构建许多这样的组件。这也可以让我轻松地包含 JavaScript 来实现更复杂的浏览器行为。

对于服务器组件,我决定将它们构建在各自的“模块”内的“R6”对象中。如果您不熟悉 R6,它是一种面向对象的编程方法,用于将方法和值封装到类中,然后可以作为单独的对象进行实例化,这意味着每个对象都有自己的方法和状态。这是一种不同于函数式编程的方法,但在其他语言中非常常用。请务必查看马辛杜贝尔关于 R6 课程的有益帖子

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

项目结构图

有了我想做的东西的想法,是时候实际建造这个东西了。所以我开始查看所需组件的列表:

  • 数据管理器:负责加载和提供数据。因为我希望能够创建许多可能的卡片组合,所以我创建了一个小模板引擎,并使用 google sheet 作为我的数据库。这将允许我随时更改/添加/删除卡或选项,因为数据管理器总是会在新游戏开始时读取最新的数据。如果你对数据是如何保存的感兴趣,你可以在这里查看电子表格。
  • **卡牌管理员:**负责生成卡片并展示给玩家。它最终负责卡片的 UI,并根据游戏状态、当前因果值和一点随机性生成新卡,大量使用“样本”来挑选卡片模板、值和强度(卡片强度影响决策对不同指标的影响程度)。
  • **度量管理器:**主要负责当前游戏状态的视觉部分。它使用状态管理器值作为反应值来保持用户界面与游戏的当前状态同步。
  • 状态管理器:游戏的核心,主要由反应列表和检查游戏状态变化的支持功能组成。例如,检查游戏结束。
  • **游戏经理:**实例化并集合所有其他经理。它负责游戏状态的启动、重置和所有高级别的改变。
  • **地图管理器:**管理一张地图,它提供了世界当前状态的一些视觉反馈。这不是最初的计划,也不是游戏所必需的,但我认为如果有一些东西而不仅仅是几个进度条来显示游戏状态,那会是一个不错的选择。

结果呢

几个周末后,我对它感到满意,并决定提交我的作品。竞赛结果还没有出来,所以请为我祈祷吧!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我对发展的速度感到震惊。反应值作为一个管理游戏状态的引擎是惊人的,R6 使得在需要的时候创建和破坏实例变得超级容易。使用电子表格作为数据库也是一个非常有趣的概念,结果比我预期的要好。最终的结果让我可以很容易地修复打字错误和添加新的卡类型。

由于一些自定义的 css 样式,即使是移动设备也能正常工作:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

手机版功能出奇的好!

最后的想法:闪亮的游戏,是还是不是?

在这一点上,我们知道在 R Shiny 中构建一个正常运行的视频游戏是可能的。那么… 你是否应该用 Shiny 来打造自己的游戏?说实话,大概不会。有几十种其他的框架和语言肯定更适合这种类型的项目。

然而,对我来说,这个项目展示了在 R Shiny 中实现复杂的 UX 和 UI 元素是多么容易。当然,这不是一个商业就绪的游戏,但作为一个概念证明或快速原型,可以在几天/几周内建立起来,然后迭代,Shiny 再次以一种非常积极的方式给我带来了惊喜。这对 Shiny 作为复杂企业仪表盘的首选解决方案的持续未来是个好兆头。

如果你想研究一下代码或者找到更多关于这个项目的信息,你可以在 Github 仓库中找到一切:https://github.com/pedrocoutinhosilva/shiny.decisions

也可能你只是想玩玩最后的结果!一定要让我知道你已经坚持了几周了!

在这里玩游戏:https://sparktuga.shinyapps.io/ShinyDecisions/

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://sparktuga.shinyapps.io/ShinyDecisions/

有用的参考资料

自助 BI 对每个人都可行吗?

原文:https://towardsdatascience.com/is-self-service-bi-feasible-for-everyone-c9fa7fef4b31?source=collection_archive---------35-----------------------

介绍

商业智能(BI)工具/应用强调它们对复杂模型、大型数据集和复杂用例的解决方案,当然,这些解决方案也适合它们。可能希望在日常工作中使用这些工具的普通用户可能会因为认为只有 IT 专家才能开发这些东西而感到害怕和沮丧。

我不想说这个领域不需要专业知识,是的,一些解决方案需要巨大的努力和经验丰富的团队来实现。我想揭示的是,即使简单的用例也可以用最低/中等的技能来实现,它可以提供很好的内部效果并产生影响。

让我们通过使用从欧洲新乘用车和轻型商用车注册中收集的数据来举例说明这种说法,并生成一组简单但有用且有趣的可视化结果。以下示例将涵盖使用 MS Excel 和 Power BI 对数据的收集、存储、转换和可视化。

我们从哪里开始?

首先,我们必须获得信息(数据)并将其存储在某个地方。通常,数据存储在不同的位置、数据库或文件中,并且经常以不同的格式存储。对于这种情况,我们将把复杂性降到最低。

接下来,我们应该始终牢记 ETL 过程。这个缩写代表提取、转换和加载,可以解释如下:

**提取:**包括从不同的源中提取数据,并将其转换成适合转换的单一格式(接下来的步骤)。

**转换:**在此阶段,应用各种规则、函数和/或计算,以便为负载准备数据。这一阶段是数据清理发生的地方,它的目标是为数据的使用提供一个整洁的输出。

Load: 在这个阶段,数据被传输到所需的最终位置,这个位置可以是一个简单的平面文件,也可以是更复杂的数据仓库。根据不同组织的需求和用途,这个过程可能会有很大的不同,而且,由于加载的数据与数据库交互,还会发生许多其他的考虑事项。

完成前面的步骤后,可以设计和构建可视化和报告来传递信息并提供关于数据的见解。

工作时间到了!

数据采集和存储:

对于这个例子,我们有四个不同的数据源;ACEA 乘用车登记(环节)、ACEA 商用车登记(环节)、AEB 销售轿车及轻型商用车(环节)及奇数乘用车及轻型商用车(环节)。

所有检索到的信息都将存储在一个 Excel 文件中,其中每个源都有自己的工作表。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每个来源一张工作表

对于每个源,数据将以下列相同的格式存储;国家、年份、月份(每月一个)和数据源(表明数据来自哪里——Source—)。

从下图中可以看出,每一行代表一个国家一年的观察结果。请注意,在这种情况下,所有信息都被插入到一个表中,并根据数据源进行命名。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ACEA 客车表

在相应的工作表中填写所有数据后,必须将文件保存在可以访问的位置。在这种情况下,它存储在网络位置的共享文件夹中。一旦完成,就为下一步做好了准备。

摘录:

在这个阶段可以使用许多工具。在这种情况下,Power BI 将用于执行 ETL 过程和可视化。由于数据量非常小,并且它不是一个复杂的模型,所以在这里可以很容易地完成这项工作。

要获取数据,只需选择“获取数据”,然后,文件的来源(在这种情况下是 Excel),一旦打开,选择相应的表格,然后单击“加载”。现在,四个不同来源的所有信息都加载进来了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从 Excel 获取数据

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选择文件中的表

作为转换过程之前的最后一步,建议检查是否正确提取了所有表中的数据。这将在查询编辑器中完成,可通过单击“编辑查询”按钮访问该编辑器。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通常 Power BI 能够识别标题(列名)和每个标题包含的数据类型。建议在每个表上检查这一点,因为有时 BI 猜测的功率可能不是我们所期望的。如果是这种情况,应该作进一步的改正。

在这个例子中,所有的列标题和数据类型都根据我们的需要正确地标识出来,每个表都没有错误(国家和数据源列用字符表示,每个月的数量用整数表示)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

变换:

现在是做一些转变的时候了。首先,所有的表将通过追加来组合。只需在查询编辑器中右键单击其中一个表,然后单击“新建查询”、“合并”和“追加查询为新查询”就可以了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过选择“三个或更多表格”选项,然后单击“确定”,所有表格都应添加到“要追加的表格”字段。这将创建一个新的表,将这四个表组合在一起,我们可以在其中开始进行更多的转换。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了使数据结构更适合在 Power BI 中使用,首先我们必须合并每个月的车辆数量。在当前的表格中,每个月对应于其包含数量的列。这里的目标是有一个包含数量的列和另一个规定月份的列。

为了实现这一点,并且再次在查询编辑器中对之前创建的表进行操作,必须选择每个包含月份的列(一月到十二月)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下一步是在“转换”菜单中选择“仅取消选定列的透视”选项。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这将会创建两个新列,其中一个存储所有月份(属性),另一个存储所有数量(值)。由于此操作,表中的行数将显著增加。

之后,它们可以用一个更有意义的名字重新命名,比如“月”和“量”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这个阶段,数据应该是期望的格式。在此之后可以进行其他操作或转换。例如,可以根据国家名称或任何其他特定要求来创建分类的条件列。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

负载:

如果前面的步骤发生在另一个实例中(不是 Power BI),那么最终的数据将被加载到最终目标,比如一个带分隔符的平面文件或数据仓库。

因为数据的提取和转换是在与构建报告相同的环境(Power BI)中完成的,所以剩下要做的就是关闭查询编辑器并应用更改。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在数据已经准备好进入最后阶段。

报告和可视化设计

在这一阶段,必须对想要报告的内容有一个概念,是时候创建数据的视觉效果、图表和其他表示形式了。这部分本身是一个完整的主题,因此,可能的可视化和可能性的想法将被显示,但不包括如何创建它们。

在高层次的细节上,已经创建了一个包含三个条形图、一个折线图和一个地图的控制面板。

这些图像显示的是每年、每季度和每月累积的车辆登记数量。此外,一个线形图显示了几年来每月的数量,一个地图显示了相对市场规模(车辆注册数量)的国家。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据的一些属性已经包含在过滤器窗格中。这使得对数据进行过滤和切片以获得更多信息成为可能。

接下来,显示了一些通过过滤和分割数据来获取信息和见解的示例:

仅显示 2018 年

这里只过滤了年份,它按季度、月份显示了一年中所有国家/地区的总量,并且是按月份演变的。此外,可以看到地图上当年最大的市场。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

仅显示意大利的 2018 年

与上一个例子相同,但是在这个例子中,意大利被过滤为国家。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

西欧五大汽车市场概述

从地图上可以看出,西欧最大的市场是德国、法国、意大利、西班牙和英国。这些国家的发展是值得赞赏的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

随着问题和过滤越来越精细,可以在整个可视化中找到越来越多的细节和见解:

确定西班牙新车注册的季节性和趋势

虽然只关注折线图,但可以通过每个月来了解市场的发展。此外,该国车辆登记的季节性也有助于了解这一趋势。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

识别土耳其市场的冲击,例如 2019 年

除了最后一个例子,市场的冲击也可以在以下土耳其 2019 年的例子中发现。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以使用更高级的功能来制定未来的决策,如生成预测(与工具集成)并观察德国市场新车注册的总体趋势

预测

可以使用更高级的功能来制定未来的决策,如生成预测(Power BI 中的集成工具)并观察德国市场新车注册的总体趋势。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过对德国市场的轻型商用车进行过滤,可以获得更大的粒度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

和前面的例子一样,但是是客车。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如前所述,从许多不同角度分析数据的机会是存在的,根据这些信息做出决策的可能性也增加了。

维护和更新

除了本例的设置之外,剩下要做的就是在文件中的数据可用时更新它。为此,新信息将简单地添加到 Excel 文件中。

如果数据结构及其可用性没有变化,就不需要任何维护。因此,一旦数据被刷新,模型应该能够反映最新的信息。

相反,如果这些方面发生变化,可能需要更新整个流程。

收尾

前面的例子是一个简化的用例,但是,值得注意的是,像这样简单的东西可以提供有见地和有用的结果。

对于每个分析/BI 项目,基础都依赖于数据可用性。正如在第一部分中所演示的,拥有一种结构化的收集和存储数据的方式将会使接下来的步骤更加简单和直接。

有了这个基础,流程的后续部分(ETL)变得更容易管理。在这种情况下,由于其结构化的形式和方便的位置,提取和导入数据很容易。必须特别注意正在提取的数据(即,它是否包含错误、缺失值或被标注在不正确的数据类型下)。

因为数据是“干净的”,所以这个例子的转换部分简单明了。唯一需要处理的事情是合并表,并将数据结构转换成适合需要的格式。最后,在这种情况下,加载就像单击一个按钮一样简单。

一旦所有的可视化都完成了,报告也构建好了,BI 工具的真正潜力就可以被欣赏了。经过一些过滤,交叉过滤和其他选择,可以获得有力和有见地的信息。

现在,总结一下,所有这些都做完了,让我们回到我们的问题上来;自助 BI 对每个人都可行吗?

在我看来,答案是肯定的,但有一个条件。这一过程可能会令人生畏,对于完全不熟悉电子表格和数据可视化的人来说,这将有一个相当长的学习曲线。因此,如果这个人对前面的几点一点都不熟悉,在开始的时候需要额外的努力,但这不是一个限制。

对于那些在过去有电子表格和数据可视化经验的人来说,这根本不应该是一个大挑战。如开头所述,简单的自助 BI 用例可以通过最低/中等技能水平实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值