TowardsDataScience 博客中文翻译 2019(一百三十九)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

擎天柱的数据科学。第 2 部分:设置您的数据操作环境。

原文:https://towardsdatascience.com/data-science-with-optimus-part-2-setting-your-dataops-environment-248b0bd3bce3?source=collection_archive---------18-----------------------

用 Python、Spark 和 Optimus 分解数据科学。今天:数据科学的数据操作。…::此处第 1 部分::…在这里,我们将学习为我们的项目设置 Git、Travis CI 和 DVC。

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

Illustration by Héizel Vázquez

欢迎回到 Optimus 的数据科学系列。在第一部分中:

[## 擎天柱的数据科学。第 1 部分:简介。

用 Python、Spark 和 Optimus 分解数据科学。

towardsdatascience.com](/data-science-with-optimus-part-1-intro-1f3e2392b02a)

我们开始这个旅程,谈论擎天柱,火花和创造环境。为此,我们使用 MatrixDS:

[## 由数据科学家创建的数据科学家社区

数据社区的工作台 matrixds.com](https://matrixds.com/)

要访问回购,只需点击下方:

[## MatrixDS |数据项目工作台

MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。

community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)

在 MatrixDS 上,单击叉车:

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

GitHub 上也有回购:

[## FavioVazquez/ds-optimus

如何用 Optimus,Spark,Python 做数据科学?法维奥·巴斯克斯/ds-optimus

github.com](https://github.com/FavioVazquez/ds-optimus)

你只需要克隆它。

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

数据操作

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

来自数据厨房的优秀员工:

DataOps 可以提高数据分析团队创建和向用户发布新分析的能力。它需要敏捷的思维方式,还必须得到自动化平台的支持,该平台将现有工具整合到数据操作开发管道中。DataOps 涵盖了从数据采集到洞察交付的整个分析流程。

因此,对我来说,DataOps(来自数据操作)可以被认为是这些领域的交集:

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

其功能组件将包括:

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

你可以在我的朋友 Andreas Kretz 的出版物中读到更多关于这些话题的内容:

[## 数据科学管道工

数据科学背后的工程和大数据社区

medium.com](https://medium.com/plumbersofdatascience)

在 MatrixDS 上设置环境

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

https://matrixds.com/

我们将使用工具:TravisCI、DVC、Git 和 GitHub 在平台中创建一个简单(但健壮)的数据操作环境。

Git:

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

https://git-scm.com/

Git 是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小到大的项目。

在数据科学中,git 就像是我们的内部经理,拥有强大的记忆力。它会记住你做过的所有事情,你是如何做的,以及存储库中每个文件的历史。

Git 默认安装在 MatrixDS 中,但是我们需要设置两个配置。首先,让我们打开一个新的终端并键入:

**git config --global user.name "FIRST_NAME LAST_NAME"**

设定你的名字,然后

**git config --global user.email "MY_NAME@example.com"**

设置您的电子邮件。

我建议你放在那里的邮箱和你在 GitHub 上的邮箱是一样的。

要开始使用此存储库,只需克隆它:

**git clone** [**https://github.com/FavioVazquez/ds-optimus.git**](https://github.com/FavioVazquez/ds-optimus.git)

然后转到目录:

**cd ds-optimus**

因为这已经是一个 Git repo,所以您不需要初始化它,但是如果您是从零开始,您将需要键入:

git init

在您想要存储库的文件夹上。

DVC:

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

https://dvc.org/

DVC 或数据版本控制是一个用于机器学习项目和数据科学项目的开源版本控制系统。这段视频对此做了更好的解释:

因为我们使用的是 Python,我们将通过以下方式安装 DVC:

**pip install --user dvc**

正如文档所说,为了开始使用 DVC,你需要首先在你的项目目录中初始化它。DVC 不需要 Git,也可以在没有任何源代码控制管理系统的情况下工作,但是为了获得最佳体验,我们推荐在 Git 库之上使用 DVC。

重要评论:

现在 DVC 的 MatrixDS 中的一些配置有错误,所以为了运行 DVC,你必须在不同的文件夹中执行,而不是在/home/matrix 中。为此,请这样做(我假设您在默认文件夹中有原始项目):

cd /home/
sudo mkdir project
cd project
cp -r ../matrix/ds-optimus/ .
cd ds-optimus

因此,要开始在我们的回购中使用 DVC,我们只需键入:

**dvc init**

如果由于某种原因,这在 MatrixDS 上对您不起作用,请为 linux 安装 DVC:

**wget https://dvc.org/deb/dvc.list
sudo cp dvc.list /etc/apt/sources.list.d/
sudo apt-get update
sudo apt-get install dvc**

如果由于某种原因,您得到了错误:

W: chown to root:adm of file /var/log/apt/term.log failed - OpenLog (1: Operation not permitted)

模仿

sudo su

然后键入:

apt-get install dvc

好的,如果你在这个回购上运行 dvc init ,你会看到:

Adding '.dvc/state' to '.dvc/.gitignore'.
Adding '.dvc/lock' to '.dvc/.gitignore'.
Adding '.dvc/config.local' to '.dvc/.gitignore'.
Adding '.dvc/updater' to '.dvc/.gitignore'.
Adding '.dvc/updater.lock' to '.dvc/.gitignore'.
Adding '.dvc/state-journal' to '.dvc/.gitignore'.
Adding '.dvc/state-wal' to '.dvc/.gitignore'.
Adding '.dvc/cache' to '.dvc/.gitignore'.You can now commit the changes to git.+-----------------------------------------------------------------+
|                                                                 |    |                                                                 |
|        DVC has enabled anonymous aggregate usage analytics.     |    |                                                                 |
|     Read the analytics documentation (and how to opt-out) here: |     |                                                                 |
|              [https://dvc.org/doc/user-guide/analytics](https://dvc.org/doc/user-guide/analytics)           |           |                                                                 |
|                                                                 |             |                                                                 |
+-----------------------------------------------------------------+What's next?
------------
- Check out the documentation: [https://dvc.org/doc](https://dvc.org/doc)
- Get help and share ideas: [https://dvc.org/chat](https://dvc.org/chat)
- Star us on GitHub: [https://github.com/iterative/dvc](https://github.com/iterative/dvc)

然后提交您的工作(如果您更改了文件夹,您可能需要再次配置 Git):

git add .
git commit -m "Add DVC to project"

特拉维斯 CI:

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

https://travis-ci.org/

Travis CI(持续集成)是我最喜欢的 CI 工具。持续集成是指频繁地合并小的代码变更,而不是在开发周期结束时合并大的变更。目标是通过以较小的增量开发和测试来构建更健康的软件。

这里隐藏的概念是自动测试你在做什么。当我们编程时,我们一直在做很多事情,我们在测试新的东西,尝试新的库等等,把事情搞砸并不罕见。CI 可以帮助你,因为你将开始做你的工作,用 Git 提交一点点,你应该有必要的测试来看看你做的新代码或分析是否影响(以好的或不好的方式)你的项目。

关于 Travis 和 CI 工具还有很多要了解的,但这里的计划是使用它,您将在途中学习。所以你要做的第一件事就是去:

[## Travis CI——满怀信心地测试和部署您的代码

编辑描述

travis-ci.org](https://travis-ci.org/)

并使用您的 GitHub 个人资料创建一个帐户。

然后你会去**(我在这里假设你已经成功地从 GitHub 获得回购)**然后在https://travis-ci.org/account/repositories你会选择 ds-optimus:

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

然后激活回购

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

如果一切顺利,您会看到类似这样的内容:

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

好的,现在这个是空的,因为我们还没有任何东西可以测试。这很好,将在下面的文章中讨论这个问题。但是现在我们需要构建将触发“travis builds”的基本文件。

我们需要一个. travis.yml 文件,这是它应该包含的基本内容:

language: python
python:
  - "3.6"
# Before upgrade pip and pytest
before_install:
- pip install --upgrade pip
- pip install pytest
# command to install dependencies
install:
  - pip install -r requirements.txt
# command to run tests
#script: pytest

正如你所看到的,我们还需要一个 requirements.txt 文件,在我们的例子中,现在只有 optimus。

如果你在 GitHub 上有一个项目的分支,确保将我的主人添加为上游,因为文件已经在那里了。

如果你不知道如何添加一个上游,以下是方法:

[## 如何使下游的 git 存储库跟上上游存储库的变化

本文演示了如何在您执行…

medium.com](https://medium.com/sweetmeat/how-to-keep-a-downstream-git-repository-current-with-upstream-repository-changes-10b76fad6d97)

然后,我们必须提交将“. travis.yml”添加到项目中的提交。

当你再次去特拉维斯时,你会看到你的第一件作品:

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

现在它会给我们一个错误,因为我们还没有创建任何测试来运行:

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

但是不要担心,我们以后会讲到的。

感谢您看到更新,并开始为此项目设置您的环境。如果您有任何问题,请在此写信给我:

[## 法维奥·瓦兹奎-科学与数据公司创始人/首席数据科学家| LinkedIn

加入 LinkedIn ‼️‼️重要提示:由于 LinkedIn 技术限制,我现在只能接受连接请求…

www.linkedin.com](https://www.linkedin.com/in/faviovazquez/)

擎天柱的数据科学。第 3 部分:理解您的数据。

原文:https://towardsdatascience.com/data-science-with-optimus-part-3-understanding-your-data-4b01c12c5907?source=collection_archive---------29-----------------------

第一部分第二部分

在疯狂地创建模型之前,你首先需要理解你的数据。本教程将向您解释如何在我们正在设置的环境中做到这一点。

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

Illustration by Héizel Vázquez

正如我之前所说:

数据第一。

但即使在那之前(像宇宙大爆炸之前),你也需要理解数学、微积分、统计学和你正在解决的问题。

大型科技公司使用的秘密武器是对他们的数据的深刻理解和对项目非常具体的定义。

正如您可以想象的那样,数据现在是公司的重要资产(可能是最重要的资产)。所以在你可以应用机器学习或深度学习之前,你需要拥有它,知道你拥有什么,理解它,治理它,清理它,分析它,标准化它(也许更多),然后你才能想到使用它。

这篇文章是对一个用熊猫做的伟大回购的修改,为什么?因为你可以比较所有的代码,看看如何在熊猫和用火花和擎天柱。这是原始回购协议:

[## 吉普萨莫拉/熊猫 _ 练习

练习你的熊猫技能!在 GitHub 上创建一个帐户,为 guipsamora/pandas_exercises 开发做贡献。

github.com](https://github.com/guipsamora/pandas_exercises) 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

获取数据和代码

对于这里的一切,我们使用矩阵。有了这个工具,你就有了一个免费的 Python(用 JupyterLab 和 Jupyter Notebook)和 R(用 R Studio)环境,还有像 Shiny 和 Bokeh 等演示工具。而且免费。看一看:

[## 由数据科学家创建的数据科学家社区

数据社区的工作台 matrixds.com](https://matrixds.com/)

要访问回购,只需点击下方:

[## MatrixDS |数据项目工作台

MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。

community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)

在 MatrixDS 上,单击叉车:

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

GitHub 上也有回购:

[## FavioVazquez/ds-optimus

如何用 Optimus,Spark,Python 做数据科学?法维奥·巴斯克斯/ds-optimus

github.com](https://github.com/FavioVazquez/ds-optimus)

你只需要克隆它。

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

如果您回忆起其他部分的图像:

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

我们现在将关注数据争论和数据可视化部分。

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

第 0 部分。为 Optimus 设置环境

首先创建一个 JupyterLab 会话,打开终端并键入:

sudo update-alternatives --config java

你会看到:

There are 2 choices for the alternative java (providing /usr/bin/java).Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      manual mode
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode

选择数字 2。我们需要它,因为 Spark 和 Optimus 与 Java 8 配合得最好。

现在,确保您已经安装了 Optimus,如果没有,只需键入:

pip install — user optimuspyspark

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

第一部分。获取和了解您的数据(基础)

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

我们将使用的第一个笔记本是这样的(MatrixDS):

[## MatrixDS |数据项目工作台

MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。

community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)

你可以看到她所有的细节:

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

第二部分。过滤和排序您的数据

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

我们将使用的下一个笔记本是这样的(MatrixDS):

[## MatrixDS |数据项目工作台

MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。

community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)

GitHub:

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

第三部分。将您的数据分组

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

我们将使用的下一个笔记本是这样的(MatrixDS):

[## MatrixDS |数据项目工作台

MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。

community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)

GitHub:

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

第四部分。连接您的数据

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

我们将使用的下一个笔记本是这样的(MatrixDS):

[## MatrixDS |数据项目工作台

MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。

community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)

GitHub:

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

第五部分。创建数据统计

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

我们将使用的下一个笔记本是这样的(MatrixDS):

[## MatrixDS |数据项目工作台

MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。

community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)

GitHub:

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

第六部分。可视化您的数据

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

我们将使用的下一个笔记本是这样的(MatrixDS):

[## MatrixDS |数据项目工作台

MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。

community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)

GitHub:

https://gist . github . com/FavioVazquez/1700 B1 a 941 b 17532 fa 6 BF 09 e 9 DFD 8 e3e

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

感谢继续阅读这些文章,它们制作起来非常有趣。如果您有任何问题,请通过我的 LinkedIn 或 Twitter 联系我:

[## 法维奥瓦兹奎-教员,教授和数据科学的中小企业-荣誉退休研究所…

拉斐尔·乌达内塔大学计算工程、科学计算活动和社会学士学位…

www.linkedin.com](https://www.linkedin.com/in/faviovazquez/) [## 法维奥·巴斯克斯(@法维奥·巴斯克斯)|推特

Favio Vázquez 的最新推文(@FavioVaz)。数据科学家。物理学家和计算工程师。我有一个…

twitter.com](https://twitter.com/faviovaz)

没有计算机科学的数据科学

原文:https://towardsdatascience.com/data-science-without-the-computer-science-a9484dea7fcb?source=collection_archive---------20-----------------------

无需学习 Docker,运行可重用的独立 Jupyter 环境的更简单方法

我们都有一些战争故事。无法在 Windows 上托管特定 conda 包的 virtualenv。试图进行 Python 升级,清除了操作系统的本机二进制文件。或者一个精心策划的 virtualenv 最终做了我们需要的一切;但是我们不敢进行下一步的配置更改,以免打乱我们迄今为止的所有努力…

环境管理对数据科学家来说很重要,但是您真的希望它全部正常工作。我从多位数据科学家那里听到了这样的评论:我们可能应该使用 Docker 或其他东西来标准化和隔离我们的环境——但我们不想学习更多的计算机科学。

ContainDS 是用于 Windows 或 Mac 的新软件,提供了一个简单的用户界面,用于在 Docker 提供的独立虚拟环境中运行 Jupyter Lab 或笔记本电脑,而无需学习如何从命令行控制 Docker。

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

Jupyter Logo © 2019 Project Jupyter

基于一系列现成的环境(例如安装了 Tensorflow 的 Jupyter 或 SciPy),您只需指定一个工作区(即您计算机上用于存储笔记本文件和任何数据的文件夹),然后单击 ContainDS 将启动一个虚拟的 Linux“容器”,您可以在 web 浏览器中通过 Jupyter 直接访问该容器。它甚至照顾 Jupyter 的密码令牌,所以你不必复制和粘贴它…

您可以安装您需要的任何其他 conda 或 pip 包,然后克隆您的环境以供其他项目重用或与您的同事共享。

让我开始

虽然 ContainDS 试图保护你远离 Docker 的细节,但是你当然需要让 Docker 在你的计算机后台运行。

所以在你的电脑上安装 Docker 桌面’(社区版)。包括系统要求在内的更多细节在 Docker 网站上,如果你在 Docker Hub 上注册了一个帐户,你可以在那里下载安装程序。更直接的是,你可以使用链接直接下载安装程序:T2 Docker 桌面 Windows 版 T3 或 T4 Docker 桌面 Mac 版 T5。

接下来,从我们的下载页面安装 Windows 或 Mac 的 ContainDS。

选择基本环境

一旦 ContainDS 启动并运行,并且检测到 Docker 在您的计算机上正确运行,您将看到“新容器”屏幕:

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

选择一个推荐的 Jupyter 图片——也许是“datascience-notebook ”,开始使用 NumPy、Pandas 等安装 Python。单击选择,然后您将看到配置屏幕:

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

您真正需要输入的只是一个工作空间路径。这只是您要存储笔记本文件和任何数据的文件夹的位置。如果您已经知道要处理哪些文件,它可以是一个现有的文件夹,或者您可以输入 ContainDS 将为您创建的新文件夹路径。

或者,您可以更改容器名称以供将来参考,并且您可以通过取消选中“Jupyter Lab”复选框来选择启动 Jupyter Notebook,而不是最新的 Jupyter Lab web 前端。

单击创建开始下载图像并创建容器。第一次使用特定图像时,可能需要一段时间来下载,但它会被缓存以供将来使用。

直接发射到木星

当容器准备好时,您将看到熟悉的 Jupyter 控制台日志:

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

单击 web 按钮,您的默认 WEB 浏览器将会打开,并且已经连接到 Jupyter:

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

您会注意到 web 端口是由 ContainDS 自动分配的,您不需要复制和粘贴任何令牌或密码,因为 ContainDS 已经为您完成了这项工作。

完善您的环境

大概就是这样。现在你有了 Jupyter 环境,你可以像以前一样与它互动。

要安装其他软件包,您可以在 Jupyter Lab 中打开一个终端窗口(单击+图标,然后从启动器中选择终端)。本质上,此时您只是在 Linux 操作系统中——这可以使一些软件包的安装支持更加容易。Jupyter 图像都基于 conda 虚拟环境,因此您可以使用conda installpip install

或者,直接在你的笔记本里使用魔法命令(如!pip install <package>)。

不要完全忘记 Docker

所以使用 ContainDS 意味着您不必学习任何 Docker 命令!当然,知道您的环境是通过 Docker 运行的仍然很重要。你需要让 Docker 在后台运行。如果您使用 ContainDS 中的 stop 按钮停止容器运行,那么如果您以后重新启动它,它可能会分配一个新端口—因此您可能需要再次单击 WEB 按钮,在新端口上启动一个新的 Jupyter 会话。

如果您完全删除一个容器,那么它不会影响您的工作区文件夹,但是您当然会丢失您对 conda 环境所做的任何修改。要首先保留此类环境更改,并使您能够在将来重用该环境,请单击 ContainDS 中的 Clone 选项卡来拍摄快照。

集装箱真正为我做了什么?

在这个阶段,您真正要做的是基于 Jupyter 映像启动一个 Docker 容器,这个容器可以通过 Docker 命令行获得。ContainDS 使这变得更容易,特别是在“绑定”工作区文件夹、处理 Jupyter 令牌和定位 web 端口方面。

ContainDS 实际上是建立在 Docker 自己的捆绑 GUI 应用程序之上,名为kite matic——为数据科学家更新和定制。

展望未来,数据科学家可能需要 Docker 完成许多任务和配置,ContainDS 的目的是继续为您完成这些任务。为此,我们需要您的反馈和想法!因此,请联系,让我们更多地了解您希望通过新的集装箱化 Jupyter 环境实现的目标…

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

Photo by frank mckenna on Unsplash

拥有一个根据你的需求定制的 GUI 可以让事情变得更快更简单,并且省去了学习 Docker 更多细节的麻烦。但是如果你确实想看到一些 Docker 命令,你可能需要手动实现它,请参阅 Dataquest 的教程:为数据科学运行 Docker 化的 Jupyter 服务器

你需要知道的数据科学-诊断线性回归

原文:https://towardsdatascience.com/data-science-you-need-to-know-linear-regression-2b6d966bc4a8?source=collection_archive---------16-----------------------

这是我的“你需要了解的数据科学系列”的一部分,探索数据科学中经常被忽视的方面。 第一部 第二部 推荐阅读。第 3 部分即将推出!

在本帖中,我们将介绍大多数学生最先学习的机器学习算法之一,线性回归。

你会看到很多跨越数据分析和数据科学的线性回归,不幸的是,很多都很弱。这通常有两个原因:

  • 回归模型严重违反了一个或多个关键的统计假设
  • 回归没有提供详细的诊断,因此无法评估其稳健性(以及其结论)

在这篇文章中,我们将学习如何避免这些问题,以及如何有效地评估和评论已发布的回归模型。我们将从 A/B 测试评估的角度来处理这个问题,但是同样的原则也适用于生产化的回归模型(即后端的模型)。

理论:回归独立数据

在我们建立回归模型之前,重要的是要彻底研究数据(例如通过配对图和密度图)并理解我们的 A/B 测试的统计能力(参见 第 1 部分 第 2 部分 )。

一旦我们探索了数据,我们就可以开始建立一个线性模型。用于线性回归的 R/Python 代码的简单性可能具有欺骗性。虽然你可以通过简单的lm(x,y),产生结果,但你需要了解这些结果是否可靠。

线性回归有一组与其相关的假设警告,在我们解释回归结果之前,需要对其进行检查。如果我们违反这些假设,那么代码仍将运行,您仍将获得系数、p 值和预测(等等),但它们很可能毫无意义!

一点数据科学可能是一件危险的事情!

好模型的标准

在我们着手模型构建之前,最好在头脑中有一个好模型的定义。我们将根据以下标准定义一个好的模型:

  • 模型能够解释/预测 Y 值的全范围
  • 模型可以准确地提供置信区间,以告知我们对不确定性(和重要性)的理解
  • 异常值不会扭曲模型

我们可以通过满足以下线性回归标准来满足这些要求:

  • X 和 Y 之间的关系是线性的,或者可以是线性的。
  • 误差与 X 无关(也称为同质性)
  • 变量大多彼此不相关
  • 残差呈正态分布

因此,为了构建一个好的模型,我们需要理解和评估上面概述的基本假设。我们将通过一系列的图来实现这一点,这些图检查了许多东西,但也许最重要的是模型的残差:

  • 残差是模型预测值和实际观测值之间的差值。

我们将首先通过一个表现良好的回归来探索这些图,以了解这些图在最佳情况下的样子,然后这些图如何对异方差和非线性做出反应。

理论:表现良好的回归

首先,一个表现良好的回归模型。我们将(希望)记住直线的定义:

Y=β。X+c

其中,β是系数矩阵,X 是常数矩阵,c 是截距。

我们将使用这个等式来理解回归,并添加一个 e 项来表示我们观察值周围的独立误差。运行回归时,我们的目标是确定:

Y=β。X+c+e

这样我们就可以精确地确定系数 β 的大小(因此我们的处理效果)和 e (因此我们可以确定其显著性)。

让我们用一个实例来演示回归是如何工作的。首先,让我们定义我们的关系(目的是从回归结果中恢复这些值):

  • 截距= 10
  • β = 2
  • 误差项= 3

现在,我们将基于该等式模拟 200 个独立值:

set.seed(111)
ex1 <- data.frame("Xvals"=runif(1:200, min=1,max=10) )
ex1$Yvals = 10 + 2*ex1$Xvals + rnorm(200,0,3) *# y = \beta . X +c +e*

head(ex1[c("Xvals","Yvals")])

屈服:

##      Xvals    Yvals
## 1 6.336832 24.47252
## 2 7.538330 21.59567
## 3 4.333798 19.98488
## 4 5.634314 21.88319
## 5 4.398969 16.70039
## 6 4.765036 16.75019

现在让我们将 Xvals 回归到 Yvals,来问:“Xvals 和 Yvals 之间有什么关联?”。

exreg1 <- lm(Yvals~Xvals, data=ex1)

由于我们的回归相对简单,只有一个独立变量,我们可以很容易地用一个简单的图来显示结果:

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

我们可以看到黑线很好地描述了XvalsYvals之间的关系。还要注意,蓝点距离回归线相对等距离;这是我们在回归分析中非常关心的事情。从每个点(蓝色)到模型(黑线)的距离称为残差,我们将这些收集在一起(pl。残差)来了解我们的模型性能(下图)。

在分析模型残差之前,让我们快速检查一下回归总结:

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

在继续之前,让我们回顾一下这些术语的含义:

  • P 值:P 值来源于检验零假设系数= 0 。如果 p 值低于某个阈值(通常为 0.05),那么我们拒绝零假设并将结果称为“显著”。注意,统计学中的显著性是指“可靠”之类的意思。因此,系数可能非常小,但仍具有统计学意义(可靠)。
  • 系数:当所有其他预测因子保持不变时,每个系数估计 X 中每单位增加的平均响应的变化。
  • 常数:我们方程中的截距项。
  • 观察值:数据帧中的行数。
  • R^2 R 平方是数据与拟合回归线接近程度的统计度量。它也被称为决定系数,或多元回归的多重决定系数。r 平方=解释偏差/总偏差。r 平方不能确定系数估计和预测是否有偏差,这就是为什么您必须评估残差图。r 平方并不表示回归模型是否合适。对于好的模型,可以使用低 R 平方值,对于不符合数据的模型,可以使用高 R 平方值!
  • 调整后的 r^2调整后的 r 平方比较包含不同数量预测因子的回归模型的解释能力。调整后的 R-squared 是 R-squared 的修改版本,已针对模型中的预测因子数量进行了调整。只有当新项对模型的改善程度超过偶然情况下的预期时,调整后的 R 平方才会增加。当预测者偶然对模型的改进小于预期时,它会减少。调整后的 R 平方可以是负值,但通常不是。它总是低于 R 的平方。
  • F 统计量变量的加入是否整体上改善了回归模型?F 统计报告了零假设,即我们当前的模型与仅截距模型无法区分。拒绝这一假设(p < 0.05)表明包含变量是有帮助的。

我们可以看到,我们很好地恢复了截距和系数项(加上一些与误差项成比例的置信区间):

  • 截距 = 9.79
  • β = 2.07

接下来,让我们检查诊断图,以评估模型如何满足我们上面陈述的假设:

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

让我们一个接一个地分析这些情节:

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

  • 该图显示了模型残差与拟合值。理想情况下,我们希望残差在 0 处的黑色虚线周围均匀分布。红线表示平均残值,理想情况下位于 0.0 黑线上
  • 不平坦的红线表示我们的数据可能是非线性的(使用上面的“Xvals vs Yvals”图,思考这是为什么)。
  • 在 0.0 线周围具有不均匀或不对称散布的点代表异方差或非线性(再次思考为什么会这样)。

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

  • 这是残差的 QQ 图。趋势偏离对角线(代表完全正态)表明我们的残差是非正态的(更多信息参见 AMP 第 1 课)。我们在这里看不到残差的任何趋势(高低 X 处的分散较小且不明显,因为它不构成趋势)。

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

  • 比例-位置图显示了作为拟合值函数的标准化残差的平方根。这类似于我们上面的残差与拟合图,应该以类似的方式解释。

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

  • 最后,杠杆图测量每个点对我们最终产出的影响与该点的剩余。本质上,这个图表将帮助我们发现对我们的模型有巨大影响的数据点。如果一些点具有高杠杆高(绝对)残值,那么它们将比其他数据点更多地扭曲我们的模型。库克距离(虚线)是一个结合了剩余规模和杠杆的度量。
  • 请注意,我们在上面没有看到任何库克的距离线,因为我们的库克值太小了(这是一件好事!)

总的来说,这些图看起来很合理,我很高兴我们满足了线性模型的要求。

总之,这种回归看起来非常有效:

  • 残差与拟合图显示了一条平坦的直线,并且在残差中没有明显的模式
  • 残差的 QQ 图看起来也很合理。虽然我们可以从虚线上看到一些偏差,但这些并不是我所说的“趋势偏差”。我们可以对残差进行夏皮罗检验来证实这一点(p= 0.2613),但一般来说,我建议简单地检查 QQ 图,而不是重复进行假设检验。
  • 我们的比例-位置图同样是平坦的,没有模式
  • 我们的残差与杠杆图没有显示任何明显的异常值。

理论:非线性关系

现在让我们来看一个表现不佳的回归,具体来说,我们将检查由非线性关系产生的诊断图,并将它们与上面的图进行比较:

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

嗯,很明显,我们已经尝试用线性模型来拟合非线性关系了!因此,这个模型是无用的(记住我们在本节开始时对好模型的定义)。请注意,虽然我们可以清楚地看到我们的模型很糟糕(即,在给定一组 x 的情况下,它在预测 Ys 方面做得不好),但我们仍然能够实现 0.856 的巨大 R 平方。不要盲目追随 R-squared 而被遗忘!

让我们看看诊断图:

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

将这些图与表现良好的回归图进行比较,以了解它们在非理想条件下如何变化。同样,花一些时间尝试理解这些图与上面简单的 X-Y 图的关系。

例如:

  • 我们可以注意到,在残差与拟合图中,我们的残差与零相交两次,我们的回归线也与非线性数据点趋势相交两次。
  • 同样,我们的比例位置图
  • 还要注意我们的残差与杠杆图,我们清楚地看到了一个更高杠杆和更高残差的趋势(因为我们的数据点离我们的趋势线越来越远)

如果我们更仔细地检查我们的 QQplot:

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

  • 我们会注意到,我们的残差图总结了我们在 Xvar、Yvar 图中看到的内容。在 X 的极值处,我们倾向于偏离拟合线。

花一些时间检查这些图中的关系,以提高你快速诊断违反了哪个线性模型假设的能力。

理论:表现不佳的回归,异方差数据

最后,让我们看看极端异方差是什么样子的(记住:异方差是当我们的误差项依赖于 X 时):

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

注意锥形数据表明异方差。

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

同样,将其与我们表现良好的回归进行比较,以了解异方差数据如何出现在回归图中(提示:仔细检查残差与拟合图,以及尺度位置图)。

记住——在一个多因素的真实回归分析中,你不会有一个简单的 Xvar-Yvar 回归图来轻松地诊断你的模型,所以你需要习惯于单独使用这些诊断!

最后,我想介绍一个图,它不是由 R 自动生成的,但是在回归诊断中非常有用。在此图中,我们将绘制拟合值与真实(观察)值的对比图,以了解模型的表现,让我们为上述回归示例绘制这些图表:

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

花些时间检查和理解这些图,以及这些模型如何与我们上面概述的标准进行比较:

  • 模型能够解释低 Y 值和高 Y 值
  • 模型可以准确地提供置信区间,以告知我们对可变性(和显著性)的理解
  • 异常值不会扭曲模型
  • 给定一组 x,我们的模型可以准确地预测 Ys

理论:数据转换

改进回归诊断图的方法之一是转换数据。一般来说,要么 X 变量,要么 Y 变量都会被转换。我们将在这里集中讨论 Y 变量转换,因为它们更常用。

常见的 y 变换包括:

  • ln 或 log10 转换
  • 简单的幂变换(平方根或平方)

通常假设,当 y 变量被转换时,我们可以简单地对模型系数进行反向转换(即,应用反函数)以使其可解释。

这是不对的!用以更复杂的方式改变系数来转换 y 变量!

通常,对 y 变换数据的系数进行反向变换需要求解复杂的微分方程(这里有一个明显的例外,将在本课的后面讲述),并且不像反向变换那样简单。让我们通过返回到我们表现良好的回归来证明这一点:

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

还记得我们计算 Y 使得 Y=10+2βX+eY=10+2βX+e(其中 e 是我们的误差项)。我们可以看到这种回归很好地将这个反馈给了我们。

相反,让我们回归 Y 的平方根,我们可以看到我们的诊断图看起来仍然合理:

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

我们的系数是:

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

这次我们得到的截距是 3.079,β是 0.253。如果我们平方这些(平方是平方根的倒数),那么我们得到:

  • 截距= 9.48
  • Xvals = 0.064

显然,这些与原始公式或原始回归都没有关系!

如果变换变量是必要的,那么选择一个保留一些物理意义的变换是明智的。例如求面积的平方根(这将产生长度)。转换的一个重要危险是在数据中引入新的责难,例如,将“客户支出(美元)的变化”平方会使所有数据为正,从而使模型解释变得不可能。

这些转换的一个显著的例外是自然对数(在 r: log()中)。当 Y 数据进行对数变换时,系数可以解释为 x 增加一个单位时 Y 的预期变化百分比。

摘要

  • 不要盲目的变换和反变换数据!
  • 转换后的数据通常会产生无法解释的系数(没有求解适当的方程)
  • 自然对数转换是这个规则的一个重要例外。ln 变换产生系数,其中 X 增加一个单位,y 增加β÷100β÷100。

帖子摘要:

  • 回归有一些假设,必须满足这些假设才能产生有意义的结果和良好的预测。
  • 诊断图将允许您评估您的模型满足这些假设的程度。
  • 数据的转换需要仔细考虑。
  • 始终为您创建的任何模型提供诊断图!您可以将这些内容放在文档/演示文稿末尾的附录中。

数据科学最被误解的英雄

原文:https://towardsdatascience.com/data-sciences-most-misunderstood-hero-2705da366f40?source=collection_archive---------0-----------------------

为什么像对待二等公民一样对待分析会伤害你

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

This article is an extended 2-in-1 remix of my HBR article and TDS article about analysts.

小心你崇拜的技能,因为不明智的选择会带来毁灭性的影响。除了管理不善的团队和不必要的雇佣,你会看到真正的英雄辞职或重新教育自己以适应你今天的动机。这种现象的一个主要例子是在分析。

购买奖品

数据科学的顶级奖杯是难以捉摸的,这并不奇怪:“全栈”数据科学家意味着掌握机器学习统计分析。当团队找不到三合一的博学家时,他们会着眼于在单一来源专家中吸引最令人印象深刻的奖项。谁得到了基座?

当今数据科学的时尚偏爱带有一丝科幻色彩的浮华精致,使得人工智能和机器学习成为招聘圈的宠儿。阿尔法点的另一个挑战者来自统计学,这要归功于长达一个世纪的严谨和数学优势的声誉。分析师呢?

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

作为二等公民的分析

如果你的主要技能是分析(或数据挖掘或商业智能),那么当你前面提到的同胞从你身边走过时,你的自信心很可能会受到打击,就业市场会毫不隐晦地暗示你要提高技能加入他们。

优秀的分析师是数据工作取得成效的先决条件。让他们放弃你是很危险的,但是如果你低估了他们,他们就会这么做。

门外汉很少理解的是,数据科学保护伞下的三种职业彼此完全不同。他们可能使用相同的方程式,但这就是相似之处。优秀的分析师绝不是其他数据科学的马马虎虎,而是数据工作取得成效的先决条件。让他们放弃你是很危险的,但是如果你低估了他们,他们就会这么做。

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

尊严相同

与其让分析师发展他们的统计机器学习技能,不如考虑鼓励他们首先寻求自己学科的高度。数据科学是一种野兽,一个领域的卓越胜过两个领域的平庸。

三个数据科学学科各有所长。统计员带来严谨,ML 工程师带来性能,分析师带来速度。

在 peak expertise,这三家公司都同样受人尊敬,但它们提供的服务大相径庭。为了理解其中的微妙之处,让我们来看看在每一个数据科学学科中真正优秀意味着什么,它们带来了什么价值,以及在每份工作中生存需要哪些性格特征。

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

卓越的统计学:严谨

作为在数据之外得出安全结论的专家,统计学家是你在这个不确定的世界里防止欺骗自己的最好保护。对他们来说,草率地推断比让你的大脑一片空白更大的罪过,所以期待一个好的统计学家给你的繁荣踩刹车。他们总是小心翼翼,非常关心所用的方法对于问题来说是否正确,并且为从手头的信息中得出哪些推论是有效的而苦恼。

大多数人没有意识到的是统计学家本质上是认识论者。因为没有魔法能把不确定性变成确定性,所以他们的角色不是产生真相,而是把合意的假设和可用的信息进行合理的整合。

**结果呢?**帮助领导者以风险可控的方式做出重要决策的视角。

毫不奇怪,许多统计学家对那些学习方程式却没有吸收任何哲学的“暴发户”反应激烈。如果与统计学家打交道似乎令人疲惫不堪,这里有一个快速解决办法:不要得出任何超出你的数据的结论,你就不需要他们的服务了。说起来容易做起来难,对吗?尤其是如果你想做一个重要的发射决定。)

卓越的机器学习:性能

如果你对“【T4,我打赌你无法建立一个以 99.99999%的准确率通过测试的模型”的回答是“【T6,看我的”,那么你可能是一名应用机器学习 /人工智能工程师。“随着编码印章建立原型和生产系统工作以及几年来每小时都失败的顽强韧性(如果这是必要的话),机器学习专家知道他们不会在教科书中找到完美的解决方案。相反,他们将参与一场试错的马拉松。对他们尝试每个新选项需要多长时间有很好的直觉是一个巨大的优势,比算法如何工作的深入了解更有价值(尽管两者都有很好)。

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

“I’ll make it work.” -Engineer

**结果如何?**一个能够很好地自动化棘手任务的系统,足以通过统计员的严格测试,并提供商业领袖所要求的大胆性能。

性能不仅仅意味着明确一个指标,它还意味着在生产中表现良好的可靠、可伸缩和易于维护的模型。卓越的工程设计是必须的。

宽与深

前两个角色的共同点是他们都为特定的问题提供高强度的解决方案。如果他们处理的问题不值得解决,你最终会浪费他们的时间和你的钱。商业领袖们经常感叹的是,*我们的数据科学团队毫无用处。而问题通常在于缺乏分析学的专业知识。*

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

统计学家和机器学习工程师是又窄又深(顺便说一下,是兔子洞的形状)的工人,所以让他们指出值得努力的问题真的很重要。如果你的专家正在小心翼翼地解决错误的问题,你在数据科学上的投资当然会遭受低回报。为了确保你能很好地利用窄而深的专家,你要么需要确定你已经有了正确的问题,要么你需要一个宽而浅的方法来找到一个。

卓越的分析:速度

最好的分析师是速度快如闪电的程序员,他们可以快速浏览大量数据集,比其他专家所说的“白板”更快地发现和展现潜在的见解。他们半马虎的编码风格困扰着传统的软件工程师…直到把他们远远甩在身后。速度是最高的美德,紧随其后的是不会错过潜在有用的宝石的特性。掌握信息的视觉呈现有助于解决大脑方面的速度瓶颈:美丽而有效的情节可以让大脑更快地提取信息,这在潜在洞察力的时间方面有所回报。

在统计学家和 ML folk 慢的地方,分析师是决策者和其他数据科学同事灵感的旋风。

****结果:企业把握住了脉搏,看到了以前未知的未知。这产生了灵感,帮助决策者选择有价值的任务,派统计学家和 ML 工程师去做,把他们从数学上令人印象深刻的无用兔子洞的挖掘中拯救出来。

草率的胡说八道还是一流的故事?

“但是,”反对统计学家,“他们所谓的见解,大部分都是废话。”他们的意思是他们的探索结果可能只反映噪音。也许吧,但事情不止如此。

分析师是数据故事讲述者。他们的任务是总结有趣的事实,并小心翼翼地指出,在没有统计数据的情况下,任何偶然出现的诗歌灵感都不会被认真对待。

买家请注意:有许多冒充数据科学家的数据骗子。没有魔法能把不确定性变成确定性。

优秀的分析师对他们职业中的一条黄金法则有着坚定不移的尊重:不要得出超越数据的结论(并阻止你的观众也这样做)。不幸的是,相对来说,很少有分析师是真材实料——买家请注意:有很多数据骗子冒充数据科学家。这些人兜售胡说八道,以无纪律的方式超越数据,以基于一厢情愿的想法“支持”决策。如果你的道德标准松懈,也许你会把这些蛇油推销员留在身边,把他们安置在你生意的营销黑艺术部分。就我个人而言,我宁愿不要。

优秀的分析师对他们职业中的一条黄金法则有着坚定不移的尊重:不要在数据之外得出结论。

只要分析师坚持事实()“这就是事实。”但这意味着什么呢?“只有:这就是这里的东西。”不要把自己看得太重,他们犯下的最大罪行是浪费别人的时间。出于对黄金法则的尊重,优秀的分析师会使用柔和、模糊的语言(例如,不是“我们得出结论”,而是“我们受到启发去思考”),并通过强调每种观点的多种可能解释来抑制领导者的过度自信。

虽然测试假设需要统计技能,但分析师是你首先提出这些假设的最佳人选。例如,他们可能会说“这只是一种相关性,但我怀疑它可能是由……”之类的话,然后解释他们为什么会这样想。

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

这需要对数据之外可能发生的事情的强烈直觉,以及向决策者传达选项的沟通技巧,决策者通常决定哪些假设(许多假设)足够重要,值得统计学家努力。随着分析师的成熟,他们将开始掌握判断什么是重要的,什么是有趣的,让决策者远离中间人的角色。

在这三个品种中,分析师是最有可能继承决策宝座的。

因为主题专业知识对帮助您更快地发现数据中的有趣模式大有帮助,所以最好的分析师会认真熟悉该领域。不这样做是一个危险信号。随着他们的好奇心推动他们发展对业务的感觉,预计他们的输出将从一堆虚假警报转变为决策者更可能关心的一系列明智的见解。

为了避免浪费时间,分析师应该把他们想说的故事摆出来,从几个角度戳穿它,并进行后续调查,看看它是否站得住脚,然后再提交给决策者。如果决策者因为一个鼓舞人心的故事而面临被迫采取重要行动的危险,那就是一个蝙蝠信号,让统计学家扑入并检查(当然是在的新数据中),根据决策者愿意接受的假设和他们的风险偏好,这一行动是一个明智的选择。

分析师和统计学家的混合体

对于坚持事实的分析师来说,没有错,只有慢。将统计专业知识添加到“正确做事”中,在一个重要的方面错过了要点,特别是因为在探索性数据分析和统计严谨性之间有一个非常重要的过滤器:决策者。负有决策责任的人必须签署追求分析师洞察力的业务影响,这值得专家花费大量时间。除非分析师和统计学家的混合体也是一个熟练的决策者和商业领袖,否则他们的技能组合会形成一个中间有裂缝的三明治。

然而,弥合这一差距的分析师,其价值不亚于黄金。珍惜他们!

机器学习和人工智能分析

机器学习专家通过算法输入一堆潜在的数据,调整设置,并不断迭代,直到产生正确的输出。虽然这听起来好像没有分析的作用,但在实践中,一个企业往往有太多的潜在成分要一下子塞进搅拌机。

你的分析师是短跑运动员;他们快速帮助你了解和总结现状的能力对你的过程来说是一种超能力。

一种筛选出有希望的集合的方法是领域专长——询问对事物如何工作有意见的人。另一种方式是通过分析。打个烹饪的比方,机器学习工程师非常擅长在厨房里修修补补,但现在他们正站在一个巨大而黑暗的仓库前,里面装满了潜在的食材。他们可以随意抓起它们,把它们拖回厨房,或者派一个带着手电筒的短跑运动员先穿过仓库。你的分析师是短跑运动员;他们快速帮助你了解和总结现状的能力对你的过程来说是一种强大的力量。

分析师和 ML 专家的混合体

分析师加速机器学习项目,因此双重技能非常有用。不幸的是,由于分析和 ML 工程之间在编码风格和方法上的差异,很难在一个人身上看到顶尖的专业知识(更难得的是,这个人在需要时表现得缓慢而富有哲理,这就是为什么真正的全栈数据科学家确实是一只罕见的野兽)。

长期低估的危险

专家分析师不是机器学习工程师的劣质版本,他们的编码风格是为了速度而优化的——故意的。他们也不是糟糕的统计学家,因为他们根本不处理不确定性,他们处理事实。“这是我们的数据,我的工作不是谈论它在现有数据之外的意义,但也许它会启发决策者与统计学家一起探讨这个问题…”

初学者没有意识到的是,这项工作要求顶级分析师比其他应用品种更好地掌握数据科学的数学知识。除非任务足够复杂,需要发明一种新的假设检验或算法(研究人员的工作),统计学家和 ML 专家可以依靠检查现成的软件包和测试是否适合这项工作,但他们通常可以跳过不得不面对方程本身。

例如,统计学家可能会忘记一个t-测试的 p 值的等式,因为他们是通过点击软件包上的 run 来获得的,但他们永远不会忘记如何以及何时使用一个等式,以及对结果的正确哲学解释。另一方面,分析师不打算解读。他们在寻找一个血淋淋的,巨大的,多维数据集的形状。通过了解 p 值方程分割数据集的方式,他们可以形成原始数据集中的模式的反向视图,以产生他们看到的数字。如果不懂得数学,你就不会有这种观点。然而,与统计学家不同的是,他们不关心数据的测试是否正确。他们关心的是 t 检验能让他们对当前数据集中发生的事情有一个有用的了解。区别很微妙,但很重要。

统计学家处理数据之外的事情,而分析师坚持数据之内的事情。

在 peak excellence,两人都有深厚的数学功底,他们经常使用相同的方程式,但他们的工作完全不同。

类似地,分析师经常使用机器学习算法来分割他们的数据,识别引人注目的分组,并检查异常情况。由于他们的目标不是性能而是灵感,他们的方法是不同的,在 ML 工程师看来可能显得草率。同样,这是在不同的工作中使用相同的工具。

用一个类比来总结一下:别针被外科医生、裁缝和办公室工作人员使用。这并不意味着工作是相同的,甚至是可比的,鼓励你所有的裁缝和办公室职员学习外科以在职业生涯中取得进步是危险的。

每个企业需要的唯一角色是决策者和分析师。如果你失去了你的分析师,谁来帮你找出哪些问题值得解决?

如果你过分强调机器学习和统计学中的招聘和奖励技能,你会失去你的分析师。到时候谁来帮你弄清楚哪些问题值得解决?你将会剩下一群可怜的专家,他们不断被要求从事毫无价值的项目或分析任务,而他们并没有签约。你的数据将毫无用处。

研究人员的护理和喂养

如果这听起来还不够糟糕的话,许多领导者试图聘用博士,并过分强调统计学家和 ML 工程师的 研究——而不是应用版本……而没有一个有价值、重要且已知不可能用现有算法解决的问题。

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

这只有在你投资于一个研究部门,并且不打算询问你的研究人员最近为你做了什么的情况下才可以。为研究而研究是一项高风险投资,很少有公司能够承担得起,因为从中得不到任何有价值的东西是一种非常现实的可能性。

只有当你有合适的问题让他们解决时,研究人员才属于研究部门之外——他们的技能是从零开始创造新的算法和测试,而现成的版本并不存在——否则他们将经历一个悲惨的西西弗螺旋(这将完全是你的错,而不是他们的错)。研究人员通常会花上十年以上的时间进行培训,这至少值得尊重,因为他们不会从事完全不相关的任务。

当有疑问时,在其他角色之前雇佣分析师。

因此,在你的分析师帮助你确定了一个有价值的项目,并且试图用应用数据科学家完成它的努力已经失败之后,才是雇佣他们进行应用项目的合适时机。那是当你带来职业发明家的时候。

笑点是

如果有疑问,在其他角色之前雇佣分析师。欣赏他们,奖励他们。鼓励他们成长到自己选择的职业高度(而不是别人的)。在这个故事中提到的角色中,每家企业都有数据需求的只有决策者和分析师。其他的只有当你确切知道你需要它们做什么的时候才能使用。从分析开始,为你新发现的睁开眼睛看到面前丰富而美丽的信息的能力感到骄傲。灵感是一种强大的力量,不可轻视。

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

VICKI JAURON, BABYLON AND BEYOND PHOTOGRAPHY/GETTY IMAGES image used with the HBR article. My favorite interpretation is that the human is a business leader chasing away flocks of analysts while trying to catch the trendy job titles.

如果你喜欢这篇文章,请查看我的数据科学领域指南这里或前往我的 YouTube 频道…

感谢阅读!人工智能课程怎么样?

如果你在这里玩得开心,并且你正在寻找一个为初学者和专家设计的有趣的应用人工智能课程,这里有一个我为你制作的娱乐课程:

Enjoy the entire course playlist here: bit.ly/machinefriend

喜欢作者?与凯西·科兹尔科夫联系

让我们做朋友吧!你可以在 TwitterYouTubeSubstackLinkedIn 上找到我。有兴趣让我在你的活动上发言吗?使用此表格取得联系。

企业中的数据科学家

原文:https://towardsdatascience.com/data-scientist-in-a-business-46ed161798b1?source=collection_archive---------9-----------------------

数据科学家的角色会有很大不同,达成单一定义是不现实的

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

Photo by Carlos Muza on Unsplash

作为数据科学之旅的一部分,人们将听到关于在商业环境中成为数据科学从业者意味着什么的非常有价值但不同的观点,从传统的数据分析和报告到复杂的机器学习模型开发和部署,这也恰好需要在 STEM 领域的高级学位。此外,为了在这个并不精确的世界中追求精确,人们试图明确定义数据分析师、统计师、数据科学家、数据工程师、机器学习工程师、开发人员、数据架构师或其他相关角色,甚至在他们内部分成不同的级别。然后是围绕数据科学教育学位(或一般的高级 STEM 学位)的重要性的讨论,其数量似乎正在快速增长。因此,它很快变得令人困惑。

在这个不精确的世界里,我们是在试图精确吗?

尽管不同的视角对于更多地了解该职业以及确定潜在的改进领域极其重要,但我认为定义工作本身是一项永无止境的任务,原因如下:

  1. 业务概况和需求千差万别,从只有数百或数千个数据点的传统企业,到每天有大量数据流的高度数字化企业。在某些情况下,趋势分析或逻辑回归可能就足够了,但在其他情况下,只有持续挤压 AUC 的微小改善以及实时模型部署才能提供竞争优势。
  2. 行业内和行业间的采用率会有所不同;不可避免的是,一些公司在如何从数据科学中获取价值方面将比其他公司更先进,处于前沿的公司不仅建立了复杂的数据科学团队,还对大部分员工进行了数据科学基础知识的培训。
  3. 数据科学本身作为一门学科正在发展。在统计学习中,许多概念都非常古老,但已经发生变化的是计算能力的使用,从单台计算机到云服务,以及数据科学相关编程语言和应用程序的可访问性。然后你还有一个像 XGBoost 这样的算法,这是一个最近的有影响力的发展。

那么,我们该何去何从呢?让我们来看看这张经典图表:

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

The Data Science Venn Diagram (by Drew Conway)

你知道有多少人拥有这三个主要领域的专业知识?想象一下在企业中工作——销售、运营、客户服务、行政管理、营销等。—对于几个(或许多?)年,然后(或之前,或同时)获得数学和计算机科学方面的同等专业知识。难怪被称为“数据科学”的子集的真正代表经常被比作独角兽,其出现的频率可能与初创企业中的独角兽并无不同。您可以在本文的中获得数据科学技能的更详细概述。虽然这种数据科学专业知识的三足鼎立令人向往,但却很难确定(您如何知道自己是这三个领域的专家?),这可能有助于解释为什么数据科学通常作为团队运动效果最佳…我指的是科学(在能够负担整个团队的公司中)。

好吧,隧道的尽头有光吗?是的,一个务实的。

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

Photo by Joshua Sortino on Unsplash

我认为一个更好的方法是考虑三个基本支柱,而不是一个业务中数据科学从业者的精确定义:

  • 商业专长
  • 技术保密
  • 性格特征

商业专长

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

Photo by Nik MacMillan on Unsplash

通常,在成为数据科学家的建议中,业务理解和经验被忽视、简单假设或简单提及,然而这是成为有效从业者的重要因素。面向企业的数据科学旨在解决实际问题,其中数据是发现和/或解决方案不可或缺的一部分。这种专长有三个方面:

  • 对商业战略、经济学和模型的理解
  • 特定于个体公司及其行业的商业洞察力和直觉
  • 能够引导公司寻找项目来源,交流结果,并实施建议

这对于任何人来说都是一个棘手的问题——尤其是在有等级或专业结构的大公司工作时。虽然商业基础知识可以在工作中和学校里很快学到,但更深刻的直觉来自经验。这种学习有很多好处,从不用高管浪费时间解释基础知识,到能够识别和组织相关数据,发现并解决企业真正关心的问题,以及将技术语言转换为业务用语。此外,业务视角有助于确定优先级,有时,在继续下一个项目之前,用 10%的努力获得 90%的结果可能就足够了。第三波数据科学家文章中有更多关于这个的讨论。

“…我鼓励您不要将数据科学视为一个需要学习的新知识领域,而是一套可以在当前专业领域应用的新技能。”

Jake VanderPlas,Python 数据科学手册

然而,如果没有下一个支柱——技术支柱,企业将无法理解数据科学可以完成什么,不能完成什么,可以提取什么价值,以及如何走向(几乎)客观、中立的轶事和数据驱动的现实。

技术诀窍

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

Photo by Nicolas Thomas on Unsplash

这个支柱是关于能够实现业务所需的数据支持解决方案,这是在 Moneyball 中观察到的早期主要例子之一。如果你在网上搜索“如何成为一名数据科学家”或“什么是数据科学家”,你很可能会找到专注于该职位技术方面的文章。似乎有一个巨大的光谱需要学习。

为了帮助理清问题,我将技术方面分为两个角度:一个是不适合的(核心,适用于大多数(如果不是所有)企业的数据科学工作,但可能无法满足所有特定公司的需求,尤其是如果公司在数据科学应用方面处于领先地位)和一个是过度适合的(适应特定公司的需求和数据科学团队设置,因此在被公司雇用之前很难预测)。

以下是我认为“未充分满足”观点包含的内容:

  • 统计/机器学习——相关统计/数学知识与其在现代编程语言中的实现的结合。与分别学习统计和编程不同,它们可以协同学习——对我来说,它们是数据科学背景下同一枚硬币的两面。幸运的是,只要你坚持使用在线和 PDF 版本,就可以以无与伦比的免费价格获得优秀的课程(特雷弗·哈斯蒂和罗布·蒂布拉尼的统计学习,斯坦福大学是其中之一)和书籍(统计学习介绍,以及对那些更倾向于数学的人来说,统计学习的要素)。我个人也关注吴恩达的教育内容,部分原因是他雄辩地解释复杂概念的能力以及对商业应用的日益关注。关于这个主题有很多世界级的内容。
  • 数据项目工作流程——包括伦理、项目设计、数据收集、处理、建模以及得出结论/预测/解释。通常,编程(最常见的是 Python 和/或 R ,还有关系数据库的 SQL)将处于这项工作的最前沿,但我们会错误地忽略“拖放”的演变,即“无代码”或几乎无代码的数据科学平台,以及自动化机器学习解决方案。我仍然认为编程是必不可少的,因为现有的数据科学库已经提供了很多便利和足够的抽象,而不会分散注意力(允许人们接近数据和模型的“底层”,即实际了解代码的每一行发生了什么),但随着时间的推移,这可能会改变。无代码并不意味着“数据科学”的“科学”部分会变得更简单,但是我确信会有忘记这一点的诱惑。虽然可供选择的内容——通过 MOOCs、训练营、书籍和学术界——非常多,但我想强调的是 R for Data SciencePython Data Science Handbook是优秀的免费起点。在应用数据科学(而非研究)中,编码和数据科学平台现在都处于可访问阶段,它们在有 STEM 学位和没有 STEM 学位的人之间充当最终的均衡器;然而,我怀疑对 STEM 学位的一些偏见将继续存在,因为许多当前的数据科学家拥有这样的背景(并希望根据他们的知识招聘),也因为缺乏非 STEM 候选人。
  • 视觉化——虽然通常是数据工作流程的一部分,但我会把它挑出来,因为我相信一个人可以把知道如何通过视觉讲述一个故事作为整个职业生涯。例如,通过可视化,人们可以使以前对用户不友好的“干”数据——有吸引力的、困难的模型——更容易理解,以及大数据——得到清晰的总结。此外,我预计至少一些可视化软件提供商将扩展其在整个数据工作流中的存在(而其他数据科学软件公司将改进其可视化组件)。同样,有许多选择可以学习,从 Edward R. Tufte 的经典著作到应用书籍、MOOCs,以及可视化图书馆和软件提供商提供的大量示例。

有人可能会说,尽管“吃不饱”,但这似乎仍然很多。我同意——数据科学是一个跨学科的、相当复杂的领域——但我认为这方面的知识非常容易获得。培训资源非常丰富,而且通常是负担得起的,尤其是在初级到中级水平——人们只需要时间和愿望来学习和练习。此外,同行支持(例如 StackoverflowStackexchange )和专业网站(本文提供了其中几个网站的链接)允许获得各种问题的答案,这些问题可能过于具体,无法在任何培训中涵盖。我认为,尽管“能力不足”,但技术知识加上业务专长对于任何数据科学家来说都是一个出色的背景。

好吧,那么什么属于“过度适合”的观点呢?答案是——可以与最广泛的数据科学理解相联系的所有其他东西(概率加权),这就是我认为数据科学家定义中的许多可变性开始出现的地方。例如,可能需要也可能不需要:

  • 知道(或凭直觉)更多的数学知识(特别是。微积分、线性代数、概率、统计)——但不太可能需要高等数学、因为许多艰苦的工作已经在各自的数据科学库中为我们完成了
  • 在生产模式下部署模型——或者请求 IT /程序员的帮助
  • 使用云技术
  • 扩展和应用人工智能的知识
  • 使用大数据/ Apache Hadoop / Apache Spark
  • 使用 NoSQL 数据库/ Apache Cassandra
  • 管理团队
  • 处理非表格数据,包括图像、空间、语音、文本和 web
  • 担心延迟、可扩展性、安全性、存储和实时数据(例如 Apache Kafka)
  • 利用除 Python、R 和 SQL 之外的编程语言以及各种操作系统
  • 专攻并深入钻研一个狭窄的学科
  • 维护知识图谱-了解数据科学相关领域的广泛范围,并了解最新发展,例如,是否有新的算法、云技术解决方案或深度学习研究突破。

久而久之,上面的一些可能就不再是“可能”了。不用说,除了商业和技术基础知识之外,学习并不断实践所有这些知识(甚至更多)对一个人来说是不现实的,尽管他很有抱负。对某些领域有个人兴趣,或者预测个人业务的需求,可能是开始涉猎广泛知识的好方法。在某些方面,在数据科学领域工作类似于在研究生院:你知道总有更多的东西要学,你觉得自己总是落后,但时间有限,因此你必须选择战斗并处理它。

然而,尽管提高这些技能需要时间和精力,但重要的是不要忽视第一支柱——业务。否则,团队就有被视为利基数据处理者的风险,总是需要被告知做什么和解决什么业务问题。

选择个性特征

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

Photo by Andrew Seaman on Unsplash

你可以成为一名成功的商业人士,并拥有坚实的技术背景,但有一些性格特征将这一切结合在一起,并有可能进一步放大你作为数据科学家的成功:

  • 如果你在矩阵里,你每次都会吃红色药丸去追求知识,而不是传播“民间智慧”、方便的真理、假设、偏见或者矩阵本身。武术是选修的。
  • 如果你是一名侦探,你将成为现实生活中的赫丘里·波罗,运用铁甲般的方法和逻辑来解决复杂的数据之谜——并且能够以清晰的方式与听者回顾整个过程,尽管其中隐含着复杂。你把复杂的声音变得尽可能简单,但不能再简单了。
  • 如果你是一个强化学习代理人,你会平衡利用你已经拥有的知识和追求新知识的探索。你接受新奇的挑战,保持创造力和求知欲。
  • 如果你是一名跑步者,你通常会跑长距离——毅力是许多数据科学项目的关键。

总之,尽管由于上述原因,很难单独定义数据科学家的角色或道路,但专注于业务和“不适合”的技术背景可能是该领域任何职业生涯的重要基础-认识到不同公司是否认为足够将有所不同。

最后但同样重要的是,考虑到数据科学发展如此迅速,并且正在经历某种范式转变,我强烈推荐阅读托马斯·库恩的《科学革命的结构》 。这是一本永不过时的书。

数据科学家不是唯一的数据科学角色!

原文:https://towardsdatascience.com/data-scientist-is-not-the-only-data-science-role-4756b642d26?source=collection_archive---------19-----------------------

关于主要数据科学角色的简明信息。

“数据科学”这个术语并不新鲜。它让大量技术人员涌入这个领域。相对于计算机科学和商业世界中的其他领域,数据科学是一个广阔的领域。为什么?因为它是两个世界的集合!

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

涉及典型数据科学角色的技能:

虽然这个领域提供了丰厚的报酬,但它也要求个人拥有一系列的技能。主要要素如下所列:

数学(尤其是统计学,但不仅仅是统计学!)

算法和数据结构

批判性思维和解决问题

软件工程

软技能

创意

主要数据科学角色:

数据科学的主要角色如下:

数据工程师

数据分析师

机器学习工程师

数据科学家

让我们一次了解一个角色。

数据工程师

任何典型的数据驱动型公司的工作流程都是从收集各种来源的原始数据开始的。这是数据工程师的基本职责。他们是软件工程师,设计、构建和整合来自各种资源的数据。这些工程师针对大数据编写复杂的查询,以确保大数据易于访问且运行顺畅。他们必须确保来自资源的数据流不会中断。

数据工程师在项目的整个管道的早期工作。

核心技能和资源:

  1. 扎实的数据库知识(SQL 和 NoSQL)
  2. 数据仓库(Hadoop、HIVE、Apache Spark)
  3. 基本的机器学习知识

没有大数据分析,公司就像瞎子和聋子,像高速公路上的小鹿一样在网络上游荡——杰弗里·摩尔,作家兼顾问

数据分析师

数据工程师和数据分析师在管道的早期阶段携手合作。数据分析师解释数据,并将其转化为最适合项目需求的信息。数据分析师的主要职责如下:

  1. 收集和解释数据
  2. 分析结果
  3. 识别模式和趋势
  4. 想象洞察力

核心技能和资源:

  1. 统计分析
  2. 可视化(表格)
  3. 大数据(Hadoop、Hive)
  4. 机器学习(张量流,火炬)

除了这些技术技能之外,数据分析师还需要很强的商业和人际交往技能,因为他们与客户密切合作来安排数据。

“我们的目标是将数据转化为信息,将信息转化为洞察力”——惠普公司前总裁兼董事长卡莉·菲奥莉娜说。

机器学习工程师

一个机器学习工程师在流水线的中间阶段工作。这些工程师将处理项目早期阶段安排的大数据。这些工程师负责创建自动训练计算机(特定模型)的程序和算法。大数据顾名思义,就是海量的数据。

随着数据集中的维度数量不断增加,人类很难感知数据并对其进行操作。

因此出现了机器学习算法。

核心技能和资源:

  1. 机器学习算法和库(Scikit-Learn、TensorFlow)
  2. 数据建模和评估
  3. 软件工程(REST API 调用、模块化、版本控制、测试)

数据科学家

数据科学家既是数学家,又是计算机科学家,还是趋势观察者。他们的日常职责包括:

  1. 收集原始数据并将其转换成可用的格式
  2. 从数据中获得洞察力和模式
  3. 训练模型来预测看不见的实例
  4. 应用机器学习,深度学习
  5. 与技术和业务团队沟通和协作

“数据科学家是 21 世纪的炼金术士”

核心技能和资源:

  1. 通讯技能
  2. 商业头脑
  3. 数据库ˌ资料库
  4. 数据库
  5. 数据可视化
  6. ML 和 AI

数据科学是一门艺术。人们可以利用不断改变世界的大数据做些什么,这很有趣。虽然数据科学家是收入最高的工作,但在我看来,所有角色在项目的每个阶段都同等重要,因为数据科学项目通常不是“独角戏”。

数据科学家的知识和技能

原文:https://towardsdatascience.com/data-scientist-knowledge-and-skills-a437b00ebda5?source=collection_archive---------12-----------------------

数据科学家从数据中创造知识;并且具有统计学、编程和所研究领域的知识和技能。

数据科学家通过定量和编程方法从数据中创造知识,以及所研究领域的知识。数据科学是数据科学家工作的领域。

知识和技能领域

数据科学家应具备以下领域的技能和知识:

  • 数据、统计或其他定量方法。
  • 编程、计算机科学或工程。
  • 正在调查的领域。

这些领域相辅相成,造就了一名全面的数据科学家。擅长统计学并不一定能让一个没有运行高级机器学习和部署生产模型的编程技能的人成为优秀的数据科学家;或者解释结果的领域知识。

拥有这些领域的知识和技能并不一定意味着数据科学家是该领域的深度专家,这是一种被称为独角兽数据科学家的不合理情况。

更合理的期望是,数据科学家在所有这些领域都足够全面,能够在数据科学领域发挥作用。正是这些领域的广博(而非专业)知识和技能的结合造就了数据科学家。

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

Photo via Unsplash

数据、统计或其他定量方法

数据科学的核心是将数据转化为知识。这种知识可以包括对事物的分类或估计。分类或分类是对离散值(即整数值或类别)的预测,可能包括将电子邮件分为垃圾邮件或非垃圾邮件,估计或回归是对连续变量的预测。例如,预测客户的未来收入。

数据是基于在世界上观察到的事物而产生的。它几乎总是现实的样本,因为不可能观察到所有的现实。数据样本来自一个数据群体——完全观察到的宇宙。

为了创造知识,数据科学家应该理解描述性统计和推断性统计。描述性统计描述现实样本的特征,包括中心(如均值、中值)分散(即观察值如何分布)形状(如分布的偏斜度)。如果测量不止一个变量,它还测量变量之间的相关性

推断统计根据对样本数据的描述,得出关于总体的结论。数据科学家需要了解先进的推理技术,如 机器学习——这些技术基于观察和手头任务性能的测量来创造新知识。

数据科学家可能还知道其他定量方法,包括预测。这方面的一个例子包括服装店的未来销售预测,这取决于季节。

数据科学家遵循数据分析流程来创造知识。一个常见的流程是数据挖掘的跨行业标准流程 (CRISP-DM),包括以下六个步骤:

  1. 业务理解:下一节将要介绍的领域知识。
  2. 数据理解:描述性统计和数据质量评估。
  3. 数据准备:数据清理,构造新变量,合并数据集。
  4. 建模:一个模型是对数据观测样本的假设结构的描述。建模包括技术的选择(机器学习有许多构建模型的算法)和运行它们。
  5. 评估:评估所选择的模型满足商业目标的程度。
  6. 部署:部署模型,以便用户可以将它与未来的数据一起使用,并制定维护计划。

数据科学家需要很好地理解数据收集和一般的数据管理方法。

他们还需要使用适当的数据可视化来传达数据中的发现。这些可视化包括饼图、条形图和折线图。

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

Person Using Laptop Computer on Brown Wooden Table by www.rawpixel.com is licenced under Free to use.

编程、计算机科学或计算机系统工程

编程是构建执行任务的计算机程序的过程。编程通常是计算机科学和计算机系统工程等领域的中心。

数据科学家需要高级编程技能来处理数据、计算复杂指标和进行高级机器学习。这些程序需要在可维护性和性能方面有良好的结构——来自计算机科学或计算机系统工程的技能和知识。编程语言包括 Python,R,SAS,SPSS。

数据科学家需要了解一些数据存储技术,包括数据库、数据仓库和数据湖。

数据科学家不一定需要成为合格的计算机科学家或计算机系统工程师,但他们需要在这些领域的技术方面有足够的知识,以便有效地进行数据科学研究。

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

Seated Woman Typing on Apple Mighty Keyboard in Front of Turned-on Silver Imac by negativespace.co is licenced under CC0 License.

领域知识

数据科学家还需要很好地理解领域知识库,以便为领域贡献更多有价值的知识。

领域知识也有助于更好地定义问题,确定什么是已知的,并准确地解释结果。

领域知识是一条捷径,这样数据科学家就可以使用已有的知识来更好地创造新知识,并有助于将研究范围缩小到该领域中尚未了解的内容,这样数据科学家就不会重复研究。

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

Low Angle Photography of Buildings Under Blue and White Sky by Jimmy Chan is licenced under Free to use.

技能的结合增加了价值

数据科学家不一定是这三个领域的专家。然而,他们肯定需要有良好的跨学科知识,以便从数据中创造有价值的领域知识。

数据科学家简介

原文:https://towardsdatascience.com/data-scientist-profiles-22505e4888db?source=collection_archive---------13-----------------------

走向数据科学专业化的定义

数据科学缺乏一个合适的领域定义,导致术语和高要求技能的怪异混合。

这篇文章强调了如何获得满足您业务需求的最佳数据科学配置文件。首先,这篇文章旨在帮助那些无力组建大型数据科学家团队并希望优化投资的公司。

我很幸运能与来自不同国家和背景的数据科学家团队共事。不过,我们都是数据科学家,有着不同的思维模式和专业。

数学家、物理学家、统计学家、经济学家和计算机科学家。我的团队由不同背景、不同学历层次的人组成:学士、硕士和博士。

好吧,那么…我如何找到合适的数据科学家?让我们首先尝试定义它们。

纯分析数据科学家

每个数据科学家都应该善于分析。然而,纯粹的分析数据科学家是一个数字处理器。线性代数和统计是其解决方案的核心

这类数据科学家的典型背景是数学、统计学、物理学家,甚至经济学。通常,这些人精通数字,但对复杂的软件和数据管道缺乏经验。但是,给他们数据和问题,他们会解码。或者更好,让他们定义问题!

我什么时候需要一名纯粹的分析数据科学家?当你的问题的核心解决方案是基于统计和数学时,你可能需要这种档案。通常,项目的软件需求要么已经被另一个团队满足,要么非常简单。

现实世界的例子:

  1. 银行风险分析。你的公司是一家银行。它习惯于使用经典的好的数学模型。你不需要复杂的软件,但需要复杂的分析。如果有人精于财务分析,并且不怕处理 Excel 电子表格,那会有所帮助。
  2. **年度投资优化。**贵公司研究如何优化今年的营销投资。你有前几年的数据,你需要有人以数据驱动的方式帮助你做决策。数据科学家负责根据严格的数学分析,向高管传达优化投资的最佳方式。
  3. 统计假设验证。你的公司是一家制药公司。你想测试你的新药的性能。当我们谈论医学领域时,我们必须非常精确。研究实验的评估和验证是一个至关重要的要求。你的候选人非常了解分布和假设检验。

**那么,分析数据科学家能提供什么呢?**复杂分析包括报告、结论和决策建议。

他们通常使用什么工具? R,SAS,Python,MATLAB,Excel,…

**什么时候你不应该去找这个简介?在线端到端模型,**大数据(当你的数据不适合 RAM 时),你的公司不需要解决具有挑战性的分析解决方案等。

黑客数据科学家

数据科学家喜欢靠近它工作。这些配置文件是 Unix 用户,不喜欢复杂的图形用户界面。他们可能对 Docker 甚至 Kubernetes 有所了解。

典型的背景有计算机科学、电气工程、信息系统等。那么,**对他们有什么期待呢?**他们能够融入 IT 团队。因此,他们可以与 IT 和/或 BI 团队一起开发端到端的机器学习模型或数据系统。如果你不把这些人撇在一边会有所帮助。

现实世界的例子:

  1. 线上产品推荐。你拥有一家零售电子商务公司。您不希望您的公司在*个性化的世界中落在后面,*它决定基于您的用户的日常交互来构建推荐系统。建立一个好的、可靠的推荐系统比你想象的更有挑战性。事实上,我们需要数据工程师和数据科学家合作来解决这个问题。黑客数据科学家应该乐于讨论可伸缩性、延迟、部署等。
  2. AIOps 。您希望利用自己生成的大量数据来改善公司内部的 IT 运营。您希望开始预测机器何时会出现故障,何时需要水平扩展等。你最好找一个熟悉 IT 环境的数据科学家!
  3. **图片搜索引擎。**你的用户可以通过使用关键词和过滤器写下一个查询来查询你的搜索引擎。但是,您希望开始使用图像作为输入查询的新来源。你已经了解了基本点检测器 (SIFT,SURF 等)。)、CNN、和深度特征表示。解决方案就在那里,你需要一个懂算法和技术的人来把你的搜索引擎安装到位。同样,如果你有一个可以融入 it 团队的人,那是最好的。该算法可能需要直接集成到前端,你的候选人应该知道这意味着什么!延迟是一个问题;我们的用户不想等待超过一分钟;图像处理必须在前端逻辑内部进行。

**那么,黑客数据科学家能提供什么呢?**端到端原型 API、机器学习模型、Python 库等。

他们通常使用什么工具? Python (scikit-learn,pandas,Keras,seaborn,Flask 等。)、PySpark、SQL (essential)、Unix 系统、Docker、云计算(AWS/GCP/Azure)、Git 等。

**你什么时候不需要这个档案?**当你的公司使用 Windows 时,候选人可能会立即放弃。在那些不需要交付在线系统的情况下,技术和创新不是优先考虑的,等等。

研究数据科学家

最后,我们不能忘记研究数据的科学家。这些配置文件在实验室环境中工作,远离生产系统。他们正在构建新的最先进的算法,这将颠覆整个行业。他们在重要会议上发表论文,花时间阅读研究论文,并可能拥有博士学位或更高的学位。

一些拥有这些档案的知名公司有 Google DeepMind、Zalando AI、OpenAI 等。在这些情况下,工作机会可能不是来自数据科学家的名字,而是他们正在寻找的专业。然而,并不是只有拥有强大研究团队的顶级公司才能拥有这些专业化的角色;你的公司可能也需要它们!

让我们举几个例子来说明哪家公司会对此类档案感兴趣:

  1. 产品合成 AI 一代。你听说过生成性对抗网络吗?嗯,这种神经网络在一个发生器和一个鉴别器之间展开了一场战斗。你可能会问这意味着什么。好吧,你要知道这些神经网络可以生成合成图像,从而生成你的内容比如新产品,设计,艺术,甚至人脸!你想颠覆时尚生成人工智能设计吗?马上雇佣一名研究数据科学家!
  2. **实时跟踪和人脸匹配。**您是否拥有一家安保公司?你希望你的客户追踪他们的宠物吗?您希望仅在摄像头上的人脸不匹配时触发警报吗?然后,你可能需要一个有计算机视觉经验的研究数据科学家。
  3. 机器人的强化学习。你拥有一家机器人公司。你希望你的机器人开始更灵活地解决不同的任务。你有这些要素:代理人,环境,以及需要解决的事情。你听说过不仅数学分析和动态系统可以解决你的问题,机器学习也可以。具体来说,你可能听说过一个叫做强化学习的子领域。是时候雇人开始你的自动学习之路了!

那么,一名研究数据科学家能提供什么呢?最先进的算法和解决方案、会议论文、研究等。

**他们通常使用什么工具?**视情况而定。但是,大多数科学库都是 Python 和 MATLAB 的。深度学习底层框架如 TensorFlow、PyTorch 等。,在 AI 界都很有名气。

**你什么时候不需要这个档案?**当您想要一个可以通过 Amazon Rekognition、Google Vision API 或其他 SaaS 提供商更便宜、更简单地解决的解决方案时。当你不想投资纯粹的创新和研究时。

这些数据科学家概况不是僵化和不相交的定义。在大多数情况下,您可以找到混合了这些类型的数据科学家。然而,根据你的需求的深度和广度,你可能会寻找一个更全面的专业的职位。此外,人们必须把这些真实世界的例子仅仅当作例子。一个数据科学家应该是领域不可知的**,只要你有一个**可以被公式化为数学问题的问题。****

如果你想拥有的是一个能一下子破解一切的人,那么我建议你看看我的另一篇文章:https://medium . com/@ joelqv 8/the-data-scientist-unicorn-8c 86 CB 712 DDE

最后一个简介,数据科学家独角兽永远不会让你失望

数据科学家 vs 数据工程师

原文:https://towardsdatascience.com/data-scientist-vs-data-engineer-f7345a3d0412?source=collection_archive---------23-----------------------

谁更好?

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

What is your natural gifts and talents that inspire other people?

“数据科学家连续 4 年是最好的工作”

“数据科学家是最有前途的 10 大工作之一”

“数据科学家的薪水高于平均水平”

荣誉还在继续……

数据是新的石油。如果开采得当,企业在利润方面以及风险管理、合规和社会服务等其他方面的成功率将呈指数级增长。

数据工程师专注于使数据可用和结构化。这涉及到与 IT 合作将数据接收到数据仓库中。此外,优秀的数据工程师会将数据转换成人类可用的形式。因此,与传统的 ETL 相比,ELTL(Extract-Load-Transform-Load)是一种新的过程模式。

**数据科学家专注于将统计算法应用于数据。**虽然他们具备连接不同数据仓库(云和本地)的良好知识,但他们并不精通上游数据接收流程。当数据适合人类理解时,数据科学家是有能力的。此外,他们是统计学/应用数学专家,在制作与业务相关的人工智能模型方面具有出色的商业敏锐性。

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

Soccer is a team work

想象一场足球比赛。我们有著名的前锋,如克里斯蒂亚诺罗纳尔多或路易斯苏亚雷斯。然而,如果没有防守队员向前传球,他们就无法赢得比赛。想想伟大的名字,如蒂亚戈席尔瓦或塞尔吉奥·拉莫斯。罢工者需要他们的支持和帮助。

跟随你的真心

在我的工作中,我遇到许多渴望成为数据科学家的数据工程师。通常有两类:

  • 数学相关学科的新毕业生
  • 具有深厚数据工程背景的经验丰富的候选人

关于第一类,它是实践经验和良好指导的结合。关于第二类,我鼓励他们重新评估自己的动机和才能。

数据工程师拥有极其宝贵的技能,并在高增长领域工作。我有一个很好的朋友,他很自豪成为一名数据工程师,从事云数据支持、端到端数据解决方案交付和数据摄取自动化方面的工作。最近在云中的发展,如 Google 云平台和云数据仓库(如雪花)都属于数据工程领域。此外,数据科学支持方面的最新发展,如 AWS SageMaker 或 Azure ML,是由数据工程师推动的,以满足数据科学家的需求。

“比较就是绝望。

感激和谦逊是解决心中升起的许多不安全感的方法。

每个人都将对他们如何使用他们被给予的天赋/角色负责…而不是他们如何想象他们会使用他人的天赋/角色”Paul J. Kim

追随我们的天赋至关重要。大多数人都梦想成为体育明星或名人。然而,我们最终发现我们的生活在召唤一些不同的东西。不是每个人都需要成为数据科学家,因为这看起来很“酷”。与数据工程师和所有其他职业类似,数据科学家也有自己平凡的工作问题。

但是,如果我们努力成为我们自己,成为我们生来就有的、优秀的和充满激情的人,它将会把平凡转变为创新的想法。事实上,数据工程师在分析/技术行业也享受着企业成功、高薪和认可的公平份额。你会接受挑战,成为数据科学家或数据工程师的先驱吗?

总而言之,数据科学家和数据工程师是相辅相成的。

这两者都是实现大数据承诺所必需的。两者都需要不断创新人工智能和机器学习的前沿。两者都需要把世界变得更好。

如果你喜欢这篇文章,并想看更多的内容,请考虑加入媒体会员,使用下面的链接来支持我和其他作者:

[## 通过我的推荐链接加入 Medium-Albert Suryadi

阅读艾伯特·苏亚迪(以及媒体上成千上万的其他作家)的每一个故事。您的会员费直接支持…

albertsuryadi.medium.com](https://albertsuryadi.medium.com/membership)

关于作者:Albert sur yadi是蓝筹股组织中实现高级分析和数据科学能力的公认领导者。他被公认为分析团队(实践社区)的领导者,该团队授权并激励他人超越现状。

数据科学家是思想家

原文:https://towardsdatascience.com/data-scientists-are-thinkers-a36cc186d570?source=collection_archive---------7-----------------------

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

Photo by Mitchell Hollander on Unsplash

执行与探索及其对您的意义

数据科学家服务于一个非常技术性的目的,但这个目的与其他个体贡献者有很大的不同。与工程师、设计师和项目经理不同,数据科学家是探索优先,而不是执行优先。

考虑到数据科学的起源,这并不奇怪。如果你快速浏览一下这个领域的早期历史,你会发现事情是从学者们研究计算统计学的可能性开始的。这种研究员般的思维模式仍然根植于我们的 DNA 中。

我们不断被代表大规模业务、产品和客户的数据所包围。这让我们可以从 30,000 英尺的高度看问题,而其他角色大部分时间都在基层工作,致力于执行。重要的是我们要意识到这个事实,更重要的是我们要充分利用它。

执行与探索

大部分老牌公司的技术集成电路都专注于执行。这很直观。为了让一个公司成功,它必须完成提供价值的事情。

数据科学角色略有不同。根据团队结构和规模的不同,它们会有很大的不同,但一般来说,执行并不是我们最擅长的地方。我们最有价值的工作往往来自探索。

当涉及到复杂的问题和假设时,执行不是答案。必须有人投入进去,在更深的层次上解决问题。他们必须彻底地分析和探索这个问题。数据科学家是承担这一任务的最佳人选。

思考,产生直觉,然后探索这种直觉的行为是被犯罪低估的。如果处理得当,这项工作不仅会产生有趣的结果,还会推动决策制定。这是数据科学家真正繁荣的地方。

如果您查看某些角色在执行探索谱中的最终位置,您会得到如下结果:

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

这并不是说数据科学家不能或不应该执行。我们花了大量的时间来构建模型、编写产品代码和自动化常见任务。事实是,我们拥有多样化的技能组合,允许我们探索和执行。这就是为什么很难找到数据科学家,也是这个领域如此激动人心和富有挑战性的原因。

找到平衡

数据科学家是不是应该彻底流氓化,为所欲为?大概不会。我们不能公然无视积压的 JIRA 门票,而去调查前一天晚上凌晨 2:00 想到的一个假设。这里必须有一个平衡。

我们必须支持我们的利益相关者。这意味着及时交付他们需要的东西,以便他们能够有效地做出决策并推动事情向前发展。

然而,我们同样有义务利用我们独特的地位和分析技能。我们通过花时间思考新的想法,产生假设,并浏览数据来做到这一点。

但问题依然存在:这在实践中看起来像什么?在一个持续关注执行力的世界里,这样想并不容易。最近,我一直在做三件不同的事情来保持探索第一。我对目前的结果很满意。

封锁时间

首先,我建议每天留出一个小时左右的时间进行深入思考和探索。最适合你的时间会因人而异。我更喜欢早上做的第一件事,但是你也可以在下午留出一个小时。安排好这个时间是极其重要的。

通过每天与自己定期会面,创造一个成功的系统。这是一次你不能错过或重新安排的会议。对自己负责。这是你思考的时间。

把一切都写下来

如果你没听说过,文档是很重要的。你的思维实践也不例外。不管你的想法有多好,把它写下来。创建一个流动的文档或一个记事本,在那里你可以让这些想法、问题和假设继续存在并被重温。

保持好奇

作为一名数据科学家,好奇心是你的北极星。有时你会陷入执行模式,忘记发展和探索自己的想法。当这不可避免地发生时,好奇心会把你带回来。我强烈推荐这篇来自多线程的优秀文章,以了解关于数据科学中的好奇心的更多信息。

“让您的数据科学家能够提出您以前从未想过的想法。”—埃里克·科尔森

转变你的心态

基于执行的工作在数据科学中最受欢迎。你能责怪我们吗?更容易量化。您可以看到构建模型或将代码推向生产的结果。

从一个下午对一个新想法的修补中很难看到具体的结果。这个新想法可能不会导致任何有意义的事情。也许只有 10%的赌注最终会有所收获。不要因此而气馁。10%是值得的。10%是真正变革性工作的来源——这一切都始于思考。

感谢阅读!请随意查看下面我的一些类似文章,并订阅我的时事通讯中的以获得有趣的链接和新内容。

你可以在 Medium 上关注我更多类似的帖子,也可以在 Twitter 上找到我。想了解更多关于我和我在做什么,请查看我的网站。

数据科学家是 AI 无法取代的

原文:https://towardsdatascience.com/data-scientists-cant-be-replaced-by-ai-841a0a2a8df9?source=collection_archive---------15-----------------------

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

A Robot Helping A Data Scienist (photograph by author)

一个成功的数据科学家会做两件人工智能无法训练完成的事情:倾听和销售。

虽然我并不严格地与人工智能打交道,但数据科学家与人工智能打交道的想法非常普遍,以至于对它是什么保持半只眼睛是有用的,只要你能向人们解释为什么那不是你做的事情。

自 1944 年以来,计算机在常规计算方面做得更好,但这并没有导致统计学家的工作减少,当时他们还存在,或者最近,数据科学家也存在。事实上,除了回归之外,普遍使用的机器学习算法是为了利用计算机比人类更擅长常规计算而明确发明的,从 teh 开始

如果不是常规的统计计算,那么数据科学家到底在做什么呢?我的论点是,数据科学家在计算和编码上只花了相对较少的时间,或者至少,花在这个领域的时间并不是数据科学家创造的最大价值的来源。

不要错误地认为,应用算法只是数据科学家时间的一小部分,是因为 80%的时间都被数据准备占用了,这将有一天通过人工智能来完成。数据操作只占用项目中的大部分时间,而这些项目是预先打包好的,有明确的目标。一旦数据科学家参与定义项目的目标,或者人们开始使用模型并开始有疑问,数据准备和建模都会被其他活动挤掉。

价值不是建模和数据操作,而是在将客户的需求或顾客的需求(这些词的含义略有不同,但这种差异在这里并不重要)转化为某种模型,并以一种有用的方式实现它的过程中创造的。有用性是在用户的眼里,所以这意味着你需要两次了解你的客户的需求。首先,弄清楚你应该建立什么样的模型,其次,当你有了模型,你需要了解客户将如何使用它。

这里至关重要的一点是,与客户交谈的人必须知道什么是可能的,并且必须了解实施所涉及的内容。这实际上意味着与客户交谈的最佳人选总是数据科学家,而不是 BA 或产品负责人或销售人员。

比无法告诉客户数据科学能做什么的问题更糟糕的是,业务代表将失去客户问题的重要部分,而您需要这些部分来为客户提供正确的工作。有两个显而易见的原因——在人与人之间传递信息肯定会丢失信息并引入噪音。第二,非数据科学家很难理解哪些部分重要,哪些部分不重要

‘现在我们透过玻璃,黑暗地看着’

这项任务的难点在于了解你的客户想要什么。数据科学家应该熟悉信息论,信息论旨在量化信息的哪些部分对信息的传递至关重要,因此是无损压缩等技术的基石。

最近在一次数据科学会议上,我看到了噪音传播概念的一部分,这是通过一个游戏来说明的,在这个游戏中,人们试图通过让每个人给站在他们后面的人表演来沿着一排人传播舞蹈动作。不出所料,到最后,这些动作完全乱码了。

圣保罗是个乐观主义者。即使你们面对面站着,理解另一个人试图给你的信息也是非常困难的,除非他们自己也能很好地理解,并且是一个优秀的沟通者。你的客户通常不是数据科学家,所以他们通常不明白该告诉你什么。

因此,了解客户真正想要和需要的是数据科学家最难掌握也是最重要的技能。

然而,由于沟通是双向的,向用户解释模型实际上是做什么的相关技能,它如何与用户的问题相关,以及在他们的业务环境中使用它的最佳方式几乎同样重要,也同样困难。

说服人们使用该模型是值得的这一阶段与获得工作机会的初始阶段一样是销售任务。这是人工智能尚未涉足的领域——人工智能有时可以提供答案,但它无法说服人们信任它。

在某种程度上,IBM 的 Watson 是这种脱节的一个例子,该产品的性能似乎至少是足够的,但预期用户——医生——在他们的工作流程中没有看到它的位置。这里的问题可以用马丁·科恩的一句话来概括——“仅仅证明你拥有强大的技术是不够的。向我证明它实际上会做一些有用的事情——它会让我的生活更好,也让我的病人的生活更好。"

事实上,向某人证明你的技术改善了他们的生活需要你解释他们自己如何做到这一点——你需要解释他们如何改变他们的工作方式,以便你的技术实际上使他们更有效率。

这部分是最容易出错的部分,但也是最重要的部分,至少它是最有可能出错的部分,因此最值得关注。然而,到目前为止,没有人工智能关注这个主题,也没有在最常为数据科学家创作的书籍和培训材料中给予大量关注。

对这一误解有一个合理的解释。大多数面向数据科学家的培训材料都侧重于算法和数据争论。很少有人关注软技能。这可能有几个原因。可能作者认为对这些技能没有需求——尽管我自己不相信这是真的。然而,他们可能认为没有需求的一个原因是,他们认为这些技能是显而易见的,因为它们是人类固有的。

同样,我不同意。我认为,即使是那些有争议的技能也只是人类的权限,一些人——他们可能不是数据科学家——发现它们很容易掌握,这并不意味着它们是显而易见的,或者每个人都可以立即学会。这只是意味着人类可以通过合理的努力来学习它们,尽管它们超出了人工智能研究的范围。

因此,任何花时间适当开发正确的软技能的数据科学家(至少在技术方面有能力)都处于人工智能无法取代的地位——他们也处于非常有可能领先于其他数据科学家的地位。掌握这些技能既是防止人工智能失业的最佳保护,也是与其他人类相比的最佳区别。

罗伯特·德格拉夫是《管理你的数据科学项目的作者,将于 2019 年 7 月中旬由阿普瑞斯出版社出版。

数据科学家:这个假期,关于你的职业生涯,你需要问自己五件事

原文:https://towardsdatascience.com/data-scientists-five-things-to-ask-yourself-about-your-career-this-holiday-season-1699a995876c?source=collection_archive---------34-----------------------

对于数据科学家来说,机会是无穷无尽的——你应该反思一下自己目前的处境

又到了假日季节——似乎一年比一年来得快,不是吗?我当然不是在抱怨。我总是需要休息,这是放松、放松、打开礼物、玩电脑游戏、看电视、当然还有吃大量节日食物的好时机。

但对我来说,这也是一个反思和评估的时间。分析和数据科学领域正在像一列货运列车一样前进,以不可阻挡的步伐向前迈进。新技术和方法正以我们大多数人都难以跟上的速度涌现。关于工具和理论的会议比比皆是。公司正在疯狂地雇佣数据科学家——他们无法从我们这里获得足够的数据,尽管有些人不知道该拿我们怎么办。

这可能不会永远持续下去,所以我们应该尽可能充分利用数据科学牛市,假期是一个很好的时间来问自己是否处于一个好位置,或者是否可以做得更好。为了帮助你,这里有五个我在每个假期都会问自己的问题。

1.我有影响吗?

数据科学家应该能够看到他们的工作是如何帮助他人的。数据科学家可以通过许多方式产生影响-他们可以产生有助于重大决策的致命见解,他们可以让周围的人更容易获得数据和测量结果,他们可以教授新的做事方法。

有人或事从你的工作中受益吗?你为你付出的努力有意义和效果而高兴吗?如果你觉得自己在粗制滥造,但不知道为什么或出于什么目的,也许是时候重新思考了?

2.我被理解和尊重了吗?

数据科学家的角色——他们被训练做什么,他们能带来什么技能——应该被你工作的权威人士很好地理解。如果不是,你可能会发现一些与数据科学无关的工作正在向你走来,或者你根本没有什么有趣的工作可做。

你觉得你是基于对自己技能的正确理解而被聘用的吗?你为之工作的人知道如何充分利用你吗?你和你带来的技能是否得到了足够的重视和尊重?如果没有,至少值得一谈,你不觉得吗?

3.我在不断学习吗?

按照这个领域的发展速度,如果你不能不断学习和跟上发展,几年后你就不太容易被录用了。

你的工作场所在他们分配工作给你的方式上是否有助于你学习新技能?他们支持你花时间学习相关的新知识吗?你是否被鼓励(或至少被允许)与社区互动并参与有助于你学习和了解发展的活动?如果没有,你不就是为了赚一两块钱,又开始了一年生产老一套产品的日子吗?

4.我有我需要的技术吗?

跟上数据科学中的技术基础架构与跟上内容一样重要。您当前工具的 1.0 版可能会在几年内变成 8.0 版,甚至可能是完全不同的版本。

随着工具链的发展,您可以访问您需要的工具链,您对此感到高兴吗?您的环境在调整其技术基础设施以支持您的需求并使您保持最新方面是否具有支持性和灵活性?如果没有,你应该让别人听到你的声音!

5.我在建立信心吗?

这不仅仅是技术发展的问题,数据科学家需要在职业生涯中树立信心。他们需要成为更好的沟通者,在自己的领域更具权威性——从长远来看,他们需要激励和指导未来的数据科学家,他们永远不会落后。

你觉得你处在一个鼓励你建立自信、表达和沟通技巧的环境中吗?你是否处于促进这些技能发展的环境中?你以为别人看到你的存在感一年比一年大?如果没有,就采取行动——不要被贴上可靠的后台数据科学家的标签。

这些是我每年都会思考并给别人建议的一些事情。希望他们帮你盘点。享受假期!

最初我是一名纯粹的数学家,后来我成为了一名心理计量学家和数据科学家。我热衷于将所有这些学科的严谨性应用到复杂的人的问题上。我也是一个编码极客和日本 RPG 的超级粉丝。在 LinkedIn Twitter上找我。

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

数据科学家们,是时候大声疾呼了

原文:https://towardsdatascience.com/data-scientists-its-time-to-speak-up-5962125a6202?source=collection_archive---------27-----------------------

性格,而不是代码,将决定你的 ML 职业生涯

59%的人工智能工人从事他们认为可能对社会有害的产品;27%的人因担忧而辞职;而 81%的人工智能工作者希望有更多的机会来评估他们工作的潜在影响。

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

Photo by Markus Spiske from Pexels

准备好接受不舒服的感觉。你选择了一个正处于开创历史先例和建立基于人工智能和对机器信任的新时代的职业。我们希望从分析跨语言、行业和职业的数百万个数据点中获益。但是我们人类自己没有能力做到这一点。实际上,一个人不可能查看或理解这么多数据点。这意味着我们将别无选择,只能依赖机器做出的决定,尽管我们可能没有能力理解为什么会做出这些决定。这需要对机器学习及其设计师……数据科学家的信任。

说你正在构建的作品将对整个社会产生深远的影响,这是一种委婉的说法。这意味着,如果你不学会如何在机器学习能力的发展中大声疾呼并挑战不负责任的行为,我们都将陷入困境。

如果你目前工作情况不好,我很抱歉,我理解。上面的统计数据至少应该告诉你,你并不孤单。让我们承认,有些时候,你会或已经被要求作为数据科学家做一些你不同意的事情。有时,你甚至可能开始一个看起来相对良性的项目,但一旦深入其中,你就会发现存在重大问题。出于许多原因,你可能会觉得有义务继续下去。你可能签了合同,或者觉得火车离站太远,已经没有回头路了。你不会想成为兴风作浪的人。但是我要告诉你,只要你有决心,总有办法阻止坏事发生。正是在这些时刻,是你的性格,而不是你的代码,决定了你的职业生涯,甚至你的人生。

这些关于性格——而不是代号的时刻,将会定义你的职业生涯。

机器学习创新有办法模仿从事这些创新的人和团队。如果首席数据科学家懒惰、不道德,并且不关心如何确保数据完全符合目的,那么代码和训练数据集就有办法成为这样的精确产品。ML 的创新结果并没有获得信任,甚至更糟,实际上可能是有偏见的或不安全的。我的观点是,如果你在一个 ML 项目中妥协了,如果你没有坚持最高标准——无论是道德上还是其他方面,你的工作和团队的工作都会反映出这一点。考虑到你的工作可能会涉及武器、汽车、健康诊断工具、机器人辅助手术或技术,这些技术可能会影响一个人找到工作、获得贷款或拥有高质量生活的能力,这是不行的。

会有关键时刻,你需要做出决定。你必须决定是让动力推动项目前进,还是停止项目,坚持额外的时间来调查数据和结果,因为这不太对。不管怎样,是你的角色决定了这个时刻。你正在建立一个小小的知识球,一点点你自己的个人道德,进入你涉足的每一个狭窄的人工智能系统。虽然你在想“这只是代码,我从 GitHub 得到的,每个人都在使用它”…看得更深!不仅仅是代码。代码很便宜。那只是外壳的东西。真正的事情发生在你选择的数据和你选择使用它的方式中。对你来说,简单地将数据转换成你需要的格式是不够的。在弄乱这些数据之前,你必须仔细查看。你必须真正理解它所代表的生活或事物;它具有的上下文将被使用。数据是我们生活的证据。例如,您可能认为您正在跟踪城镇周围的手机信号,但这些信号背后有人。这些“信号”中的每一个都是你正在偷听并形成观点的一个人的生活…以及在企业系统中用分数标注。

虽然你可以讲述很多关于这些“信号”的故事,但是你要知道,当你这么做的时候,这些信息将被用来在此基础上构建其他东西。因此,如果你搞砸了,你只是通过将数据永久保存到云中并出售或交换给下一个最高出价者,标记了一组“人”与“信号”。关键是…确保这是你最大的努力。在你看来,如果你正在分析一个人的数据,确保你是在通过你所做的事情帮助他们,而没有做这些事情。如果在任何时候这种平衡被打破了,那么你应该停下来重新评估这个项目。

如果你觉得自己做了一些不光彩的事情,那就说出来!你不仅仅是一个大机器中的一个齿轮,对你所做的事情不负任何责任。我听到了你接下来要说的话。我保证;真的。我多次从崭露头角的数据科学家那里听到这种说法。“但如果我说出来,我的职业生涯将会受到影响。我再也不会得到有趣或有挑战性的项目了。资助或发起这些项目的人不理解他们要求我做的事情的性质。”

“但是如果我说出来,我的事业将会靠边站。我再也不会得到有趣或有挑战性的项目了。资助或发起这些项目的人不理解他们要求我做的事情的性质。”

然后让他们明白。以同样的方式,你以有意义的方式为你的项目呈现数据,使用这种技能让他们理解当你产生有偏见或不安全的 ML 资产时会发生什么。除了你之外,还有其他人能告诉他们你的 ML 项目中固有的缺陷吗?还有人愿意站出来吗?如果“当权者”真的在乎呢?你给他们机会知道陷阱了吗?在你和他们谈话之前,你认为他们有不良企图吗?许多资助人工智能项目的企业高管希望了解可能导致公共关系噩梦、安全风险的问题,当然最重要的是公众和客户的安全问题。这些危险中的任何一个都可能导致企业倒闭。

以下是我对你能做些什么的建议。

这些都取决于你的情况,所以要清楚你选择做什么最适合你的工作环境。我不打算撒谎;你需要做的事情可能意味着你要转移到一个不同的项目、部门甚至公司。但我保证,优秀的、有道德的数据科学家将永远受欢迎。另外,你将能够在晚上睡觉,并且知道你在为社会的进步做贡献。

从具体和准备开始。

写下你看到的所有问题的要点;以及你认为对这些问题合理适当的解决方案。带着问题而来却没有解决方案只会让人沮丧。你想要改变;所以准备好告诉人们需要什么样的改变。如果他们不同意你的建议,那么请他们贡献自己的想法,让他们成为解决方案的一部分。

说出你认为继续这种不负责任的行为会带来的影响。你可以这样写,“如果我们继续不允许至少 5 周的时间来研究来自 3 级数据经纪人的数据,我们最终可能会得到一份招聘申请,这将加剧护理行业的偏见。这将造成对该行业男性的偏见,并加剧该行业正在努力缩小的性别差距”。该声明将问题(低质量的培训数据)和解决方案(5 周的额外调查时间)与结果(加剧了护理中的性别差距)联系起来。这样拼出来谁能说不呢?

**记录每次会议达成的协议和决议,并达成一致的行动计划。**令人惊讶的是,有多少次人们同意一个概念(例如,偏见是不好的),然后当你采取措施解决问题(例如,将应用程序发布时间延长 5 周)时,他们声称他们不同意解决方案“如何”实现。然后你又回到了僵局,没有任何改变发生。每次会议结束后,立即发送一份信息,确保每个人都同意会议内容以及如何完成。那么你有同意这个计划的书面记录。

当你展示不负责任地做一个创新项目的后果时,做好手心出汗和心跳加速的准备。其中一些步骤是对话,而不是演示。你展示或讨论的内容以及你展示的方式决定了一切。为下面的每一步考虑你的观众。他们会回避一个正式的演示,还是会期待一个?他们是想要一种情感诉求,还是需要用数字和其他事实来说服他们。为你的特定听众准备演讲或陈述,然后排练。另外,准备一份你认为他们可能会问你的问题清单,并预演你会对他们说些什么。尽量简洁。尽量不要用责备的语气或语言。记住你想要改变。你必须和那些你可能不同意的人一起工作,才能实现真正的改变。如果你用你的要求建立一个对抗或争斗的环境,那将很难改变人们的想法。在你走进会面地点之前,祈祷、冥想或用心练习,或者做任何你需要做的事情来消除你心中的仇恨。如果你没有带着爱和热情来,你将不会得到你所寻求的改变。要有勇气。你能做到的!

以下是在企业环境中通常可以接受的步骤:

1.和你的同事一起检查;如果合适的话。
如果是他们提出了不负责任的做事方式,找出是什么驱动了这种行为,然后呼吁他们改变。首先尝试单独上诉,这样群体动力就不会发挥作用。如果团队中有其他人和你有同样的感受,看看你能否让他们也畅所欲言。提出你的问题和你希望看到的解决方案,并寻求他们的帮助来带来改变。如果你打算迈出这一步,一本好书值得一读,那就是《关键对话:当风险很高时的对话工具》。

如果这不起作用,那么是时候采取下一步措施了。但首先要知道,如果你能在需要更高层人士介入之前说服团队和解,这通常会被视为伟大的领导举措。

2。 去找你经理。

大多数通情达理的经理都欢迎在你去找公司其他人之前有机会了解情况和你的观点。他们通常会把自己视为你在公司的代言人,并试图与你合作,代表你进行干预。董事或副总裁通常会问你是否尝试过与有问题的人解决问题,以及是否与你的直接经理达成了解决方案。跳过这一步通常被视为不好的形式。如果你已经采取了这一步,但没有达成一致,或者如果经理是问题的主要部分,那么继续下一步。继续推动并记录对话。在每次谈话后发送一份摘要信息,并抄送给你自己和相关人员。你想要积极的改变;所以记得用逻辑来推动对话,而不是高度情绪化的对话。

3.向你经理的老板或不同的部门求助。
如果你仍然没有一个令人满意的解决方案,那么你必须决定是继续留在你的管理层还是求助于不同的保密来源。如果你决定去一个可以调查的秘密来源,那么你可以选择人力资源、法律、隐私、数据官(如果他们不是你的报告线)、合规和道德。如果你在一家大公司工作,也很可能有某种内部匿名举报热线。如果你在一家小公司工作,比如人工智能初创公司,那么你可能没有太多选择。你必须直接上诉。不断推动行动计划,沟通和记录。如果这不起作用,你终于束手无策了。是时候进入下一步了。

4.决策点:断绝关系,继续前进
如果你觉得公司没有做任何违法的事情,但你无法忍受他们继续不负责任行为的意图,你可以简单地与他们断绝关系,不参与开发你不同意的事情。

5.决策点:焦土
这些是最极端的选择,应该被视为最后的手段,因为它们对你或你的同事的伤害不亚于这些行为的实施者。后果可能包括:关于你的负面报道、针对你的法律诉讼、公司倒闭、数千人失业、监管行动以及其他严重后果。在阅读了关于一些使用人工智能的公司和大学缺乏道德领导力的曝光后,如果你认为必须不惜一切代价阻止一家公司或组织,似乎在极少数情况下你别无选择,只能烧焦你身后的土地。

a.如果你觉得公司正在做一些公众需要知道的事情,比如克里斯·威利关于剑桥分析的事情,你可以通过匿名或公开的方式向媒体揭发。

b.你可以举行一次罢工,或者像他们在谷歌所做的那样,向公司的执行管理层提交一封公开信。

c.你可以向大学机器学习研究人员通风报信,然后他可以对你观察到的问题进行彻底的客观调查。如果这是匿名完成的,这不一定是焦土的情况。

d.你也可以(匿名或公开)向监管者或国会人士通风报信。监管机构可以展开调查,国会议员可以举行听证会。这是给监管机构的密报,最终导致 Theranos 垮台。在剑桥分析公司的情况引起国会注意后,国会将脸书的马克·扎克伯格带到了一个公共听证会上;并将脸书的做法公之于众。

只有你能决定对于你正在经历或看到的情况你需要做什么。也许你能做的最好的事情就是我选择做的事情,在人工智能伦理方面工作,帮助人们更广泛地理解人工智能系统可能出错的地方。但是,请为了世界上我们所有人的爱,如果你看到一些可能伤害人们或他们生活方式的事情,不要选择简单的沉默。大声说!

数据科学家,你应该知道的 5 种图形算法

原文:https://towardsdatascience.com/data-scientists-the-five-graph-algorithms-that-you-should-know-30f454fa5513?source=collection_archive---------0-----------------------

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

因为图表分析是未来

作为数据科学家,我们已经对 Pandas 或 SQL 或任何其他关系数据库驾轻就熟。

我们习惯于以行的形式看到用户,以列的形式看到他们的属性。但是现实世界真的是那样的吗?

在一个互联的世界中,用户不能被视为独立的实体。它们彼此之间有一定的关系,我们有时希望在构建机器学习模型时包括这种关系。

现在,虽然在关系数据库中,我们不能在不同的行(用户)之间使用这种关系,但在图形数据库中,这样做是相当简单的。

在这篇文章中,我将谈论一些你应该知道的最重要的图算法,以及如何用 Python 实现它们。

此外,这里有一个由 UCSanDiego 在 Coursera 上提供的大数据图形分析课程,我强烈推荐学习图论的基础知识。

1.连接的组件

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

A graph with 3 connected components

我们都知道集群是如何工作的?

你可以用非常通俗的术语把连通分量想象成一种硬聚类算法,它在相关/连通的数据中寻找聚类/孤岛。

举个具体的例子: 假设你有连接世界上任意两个城市的道路的数据。你需要找出世界上所有的大洲以及它们包含的城市。

你将如何实现这一目标?来吧,考虑一下。

我们使用的连通分量算法是基于 BFS/DFS 的一个特例。我不会在这里过多地谈论它是如何工作的,但是我们将看到如何使用Networkx让代码运行起来。

应用程序

从零售的角度来看:比方说,我们有很多客户使用很多账户。使用连通分量算法的一种方法是在数据集中找出不同的族。

我们可以基于相同的信用卡使用、相同的地址或相同的手机号码等假设客户之间的边(道路)。一旦我们有了这些连接,我们就可以在相同的上运行连接组件算法来创建单独的聚类,然后我们可以为这些聚类分配一个家族 ID。

然后,我们可以使用这些家庭 id 根据家庭需求提供个性化建议。我们还可以使用这个家族 ID,通过创建基于家族的分组特征来推动我们的分类算法。

财务角度:另一个用例是使用这些家庭 id 来捕获欺诈。如果一个帐户在过去进行过欺诈,则关联的帐户很可能也容易受到欺诈。

可能性只受到你自己想象力的限制。

密码

我们将使用 Python 中的Networkx模块来创建和分析我们的图表。

让我们从一个用于我们目的的示例图开始。包含城市和它们之间的距离信息。

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

Graph with Some random distances

我们首先创建一个边和距离的列表,我们将添加边的权重:

edgelist = [['Mannheim', 'Frankfurt', 85], ['Mannheim', 'Karlsruhe', 80], ['Erfurt', 'Wurzburg', 186], ['Munchen', 'Numberg', 167], ['Munchen', 'Augsburg', 84], ['Munchen', 'Kassel', 502], ['Numberg', 'Stuttgart', 183], ['Numberg', 'Wurzburg', 103], ['Numberg', 'Munchen', 167], ['Stuttgart', 'Numberg', 183], ['Augsburg', 'Munchen', 84], ['Augsburg', 'Karlsruhe', 250], ['Kassel', 'Munchen', 502], ['Kassel', 'Frankfurt', 173], ['Frankfurt', 'Mannheim', 85], ['Frankfurt', 'Wurzburg', 217], ['Frankfurt', 'Kassel', 173], ['Wurzburg', 'Numberg', 103], ['Wurzburg', 'Erfurt', 186], ['Wurzburg', 'Frankfurt', 217], ['Karlsruhe', 'Mannheim', 80], ['Karlsruhe', 'Augsburg', 250],["Mumbai", "Delhi",400],["Delhi", "Kolkata",500],["Kolkata", "Bangalore",600],["TX", "NY",1200],["ALB", "NY",800]]

让我们使用Networkx创建一个图表:

**g = nx.Graph()**
for edge in edgelist:
    **g.add_edge**(edge[0],edge[1], weight = edge[2])

现在 我们想从这张图上找出不同的大陆和它们的城市。

我们现在可以使用连通分量算法来实现这一点,如下所示:

for i, x in enumerate(**nx.connected_components(g)**):
    print("cc"+str(i)+":",x)
------------------------------------------------------------
cc0: {'Frankfurt', 'Kassel', 'Munchen', 'Numberg', 'Erfurt', 'Stuttgart', 'Karlsruhe', 'Wurzburg', 'Mannheim', 'Augsburg'}
cc1: {'Kolkata', 'Bangalore', 'Mumbai', 'Delhi'}
cc2: {'ALB', 'NY', 'TX'}

如您所见,我们能够在数据中找到不同的组件。仅仅通过使用边和顶点。这个算法可以在不同的数据上运行,以满足我上面提到的任何用例。

2.最短路径

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

继续上面的例子,我们得到一个图表,上面有德国的城市以及它们之间的距离。

你想找出如何从法兰克福(起点)到慕尼黑的最短距离

我们用来解决这个问题的算法叫做 Dijkstra 。用 Dijkstra 自己的话说:

鹿特丹格罗宁根的最短旅行方式是什么,一般来说:从给定的城市到给定的城市。是最短路径的算法,我用了大概二十分钟设计的。一天早上,我和我年轻的未婚妻在阿姆斯特丹购物,累了,我们坐在咖啡馆的露台上喝咖啡,我在想我是否可以这样做,然后我设计了最短路径的算法。正如我所说,这是一个 20 分钟的发明。事实上,它是在三年后的 59 年出版的。该出版物仍然可读,事实上,相当不错。它如此漂亮的原因之一是我没有用铅笔和纸来设计它。我后来才知道,不用铅笔和纸进行设计的一个好处是,你几乎是被迫避免所有可以避免的复杂性。最终,令我大为惊讶的是,这个算法成了我成名的基石之一。

— Edsger Dijkstra,在与 Philip L. Frana 的访谈中,ACM 通讯,2001【3】

应用程序

  • Dijkstra 算法的变体在谷歌地图中被广泛用于查找最短路线。
  • 你在沃尔玛超市。你有不同的过道和过道之间的距离。您希望为顾客提供从通道 A 到通道 d 的最短路径。

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

  • 你已经看到 LinkedIn 如何显示一级关系,二级关系。幕后发生了什么?

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

密码

print(**nx.shortest_path**(g, 'Stuttgart','Frankfurt',weight='weight'))
print(**nx.shortest_path_length**(g, 'Stuttgart','Frankfurt',weight='weight'))
--------------------------------------------------------
['Stuttgart', 'Numberg', 'Wurzburg', 'Frankfurt']
503

您还可以使用以下方法查找所有对之间的最短路径:

for x in **nx.all_pairs_dijkstra_path(g,weight='weight')**:
    print(x)
--------------------------------------------------------
('Mannheim', {'Mannheim': ['Mannheim'], 'Frankfurt': ['Mannheim', 'Frankfurt'], 'Karlsruhe': ['Mannheim', 'Karlsruhe'], 'Augsburg': ['Mannheim', 'Karlsruhe', 'Augsburg'], 'Kassel': ['Mannheim', 'Frankfurt', 'Kassel'], 'Wurzburg': ['Mannheim', 'Frankfurt', 'Wurzburg'], 'Munchen': ['Mannheim', 'Karlsruhe', 'Augsburg', 'Munchen'], 'Erfurt': ['Mannheim', 'Frankfurt', 'Wurzburg', 'Erfurt'], 'Numberg': ['Mannheim', 'Frankfurt', 'Wurzburg', 'Numberg'], 'Stuttgart': ['Mannheim', 'Frankfurt', 'Wurzburg', 'Numberg', 'Stuttgart']})('Frankfurt', {'Frankfurt': ['Frankfurt'], 'Mannheim': ['Frankfurt', 'Mannheim'], 'Kassel': ['Frankfurt', 'Kassel'], 'Wurzburg': ['Frankfurt', 'Wurzburg'], 'Karlsruhe': ['Frankfurt', 'Mannheim', 'Karlsruhe'], 'Augsburg': ['Frankfurt', 'Mannheim', 'Karlsruhe', 'Augsburg'], 'Munchen': ['Frankfurt', 'Wurzburg', 'Numberg', 'Munchen'], 'Erfurt': ['Frankfurt', 'Wurzburg', 'Erfurt'], 'Numberg': ['Frankfurt', 'Wurzburg', 'Numberg'], 'Stuttgart': ['Frankfurt', 'Wurzburg', 'Numberg', 'Stuttgart']})....

3.最小生成树

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

现在我们有另一个问题。我们为一家水管铺设公司或互联网光纤公司工作。我们需要使用最少的电线/管道连接图表中的所有城市。 我们如何做到这一点?

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

An Undirected Graph and its MST on the right.

应用程序

  • 最小生成树在网络设计中有直接的应用,包括计算机网络、电信网络、运输网络、供水网络和电网(它们最初就是为此而发明的)
  • MST 用于近似旅行推销员问题
  • 聚类-首先构建 MST,然后使用簇间距离和簇内距离确定一个阈值来断开 MST 中的一些边。
  • 图像分割—它用于图像分割,我们首先在图上构建一个 MST,其中像素是节点,像素之间的距离基于某种相似性度量(颜色、强度等)。)

密码

# nx.minimum_spanning_tree(g) returns a instance of type graph
nx.draw_networkx(**nx.minimum_spanning_tree**(g))

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

The MST of our graph.

如你所见,上面是我们要铺设的电线。

4.Pagerank

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

这是长期以来为谷歌提供动力的页面排序算法。它根据输入和输出链接的数量和质量给网页打分。

应用程序

Pagerank 可以用在任何我们想要评估任何网络中节点重要性的地方。

  • 它已经被用于通过引用来寻找最有影响力的论文。
  • 已经被谷歌用来对网页进行排名
  • 它可以用来对 tweets 进行排序——用户和 Tweets 作为节点。如果用户 A 关注用户 B,则在用户之间创建链接;如果用户发推文/转发推文,则在用户和推文之间创建链接。
  • 推荐引擎

密码

在这个练习中,我们将使用脸书的数据。我们有 facebook 用户之间的边/链接文件。我们首先使用以下公式创建 FB 图:

# reading the datasetfb = nx.read_edgelist('../input/facebook-combined.txt', create_using = nx.Graph(), nodetype = int)

看起来是这样的:

pos = nx.spring_layout(fb)import warnings
warnings.filterwarnings('ignore')plt.style.use('fivethirtyeight')
plt.rcParams['figure.figsize'] = (20, 15)
plt.axis('off')
nx.draw_networkx(fb, pos, with_labels = False, node_size = 35)
plt.show()

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

FB User Graph

现在我们想找到具有高影响力的用户。

直观地说,Pagerank 算法会给一个有很多朋友的用户更高的分数,而这个用户又有很多 FB 朋友。

pageranks = nx.pagerank(fb)
print(pageranks)
------------------------------------------------------
{0: 0.006289602618466542,
 1: 0.00023590202311540972,
 2: 0.00020310565091694562,
 3: 0.00022552359869430617,
 4: 0.00023849264701222462,
........}

我们可以使用以下方法获得排序后的 PageRank 或最有影响力的用户:

import operator
sorted_pagerank = sorted(pageranks.items(), key=operator.itemgetter(1),reverse = True)
print(sorted_pagerank)
------------------------------------------------------
[(3437, 0.007614586844749603), (107, 0.006936420955866114), (1684, 0.0063671621383068295), (0, 0.006289602618466542), (1912, 0.0038769716008844974), (348, 0.0023480969727805783), (686, 0.0022193592598000193), (3980, 0.002170323579009993), (414, 0.0018002990470702262), (698, 0.0013171153138368807), (483, 0.0012974283300616082), (3830, 0.0011844348977671688), (376, 0.0009014073664792464), (2047, 0.000841029154597401), (56, 0.0008039024292749443), (25, 0.000800412660519768), (828, 0.0007886905420662135), (322, 0.0007867992190291396),......]

以上 id 是针对最有影响力的用户。

我们可以看到最有影响力的用户的子图:

first_degree_connected_nodes = list(fb.neighbors(3437))
second_degree_connected_nodes = []
for x in first_degree_connected_nodes:
    second_degree_connected_nodes+=list(fb.neighbors(x))
second_degree_connected_nodes.remove(3437)
second_degree_connected_nodes = list(set(second_degree_connected_nodes))subgraph_3437 = nx.subgraph(fb,first_degree_connected_nodes+second_degree_connected_nodes)pos = nx.spring_layout(subgraph_3437)node_color = ['yellow' if v == 3437 else 'red' for v in subgraph_3437]
node_size =  [1000 if v == 3437 else 35 for v in subgraph_3437]
plt.style.use('fivethirtyeight')
plt.rcParams['figure.figsize'] = (20, 15)
plt.axis('off')nx.draw_networkx(subgraph_3437, pos, with_labels = False, node_color=node_color,node_size=node_size )
plt.show()

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

Our most influential user(Yellow)

5.中心性测量

有许多中心性度量,可以用作机器学习模型的特征。我将谈论其中的两个。这里可以看看其他措施

中间中心性:不仅拥有最多朋友的用户很重要,将一个地理位置与另一个地理位置联系起来的用户也很重要,因为这让用户可以看到来自不同地理位置的内容。 中间中心性量化了一个特定节点在两个其他节点之间的最短选择路径中出现的次数。

**度中心性:**简单来说就是一个节点的连接数。

应用程序

中心性度量可以用作任何机器学习模型中的特征。

密码

下面是寻找子图中间中心性的代码。

pos = nx.spring_layout(subgraph_3437)
betweennessCentrality = **nx.betweenness_centrality(**subgraph_3437**,normalized=True, endpoints=True)**node_size =  [v * 10000 for v in betweennessCentrality.values()]
plt.figure(figsize=(20,20))
nx.draw_networkx(subgraph_3437, pos=pos, with_labels=False,
                 node_size=node_size )
plt.axis('off')

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

您可以在这里看到根据介数中心性值确定大小的节点。他们可以被认为是信息传递者。断开任何具有高介数中心性的节点都会将图分成许多部分。

结论

在这篇文章中,我谈到了一些最有影响力的图算法,它们改变了我们的生活方式。

随着如此多的社交数据的出现,网络分析可以在改善我们的模型和产生价值方面提供很大帮助。

甚至对世界多一点了解。

有很多图形算法,但这是我最喜欢的。如果你愿意的话,一定要更详细地研究这些算法。在这篇文章中,我只是想获得该领域所需的广度。

如果你觉得我把你最喜欢的算法留在了评论里,请告诉我。

下面是 Kaggle 内核的全部代码。

如果你想阅读更多关于图算法的内容,这里有一个由 UCSanDiego 在 Coursera 上开设的大数据图分析课程,我强烈推荐你学习图论的基础知识。

谢谢你的阅读。将来我也会写更多初学者友好的帖子。在 媒体 关注我或者订阅我的 博客 了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter @mlwhiz 联系。

数据科学家的工具包—如何从不同来源收集数据

原文:https://towardsdatascience.com/data-scientists-toolkit-how-to-gather-data-from-different-sources-1b92067556b3?source=collection_archive---------17-----------------------

Master all — csv、tsv、zip、txt、api、json、sql …

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

Photo by Jakob Owens on Unsplash

不久前!

您还记得将外部硬盘中的数据发送给您进行分析或建模的时间吗?

现在,作为一名数据科学家,你不局限于这些方法。存储数据、共享数据以及获取数据、扩充数据的不同来源有多种方式。

下面,我列出了几种收集数据的方法供你分析

目录:

  1. CSV 文件
  2. 平面文件(制表符、空格或任何其他分隔符)
  3. 文本文件(在单个文件中—一次读取所有数据)
  4. 压缩文件
  5. 多个文本文件(数据被分割到多个文本文件中)
  6. 从互联网下载文件(服务器上托管的文件)
  7. 网页(抓取)
  8. API(JSON)
  9. 文本文件(逐行读取数据)
  10. 关系数据库管理系统(SQL 表)

在 Python 中,文件被描述为文本或二进制文件**,两者之间的区别很重要**

文本文件由一系列行组成。每一行都以一个称为 EOL 或行尾字符的特殊字符结束。有几种类型,但最常见的是\n,

二进制文件类型基本上是除文本文件之外的任何类型的文件。由于其性质,二进制文件只能由知道或理解文件结构的应用程序来处理

1。CSV 文件

存储和共享数据集最常见的格式是逗号分隔格式或 csv 文件。pandas.read_csv()是最有用和最强大的方法,我强烈推荐你阅读它的文档。通过使用适当类型的sep,您可以在 dataframe 中加载多种类型的数据

import pandasdf = pd.read_csv('data.csv', sep =',')

2。平锉平锉

但有时您可能会收到制表符分隔、固定宽度格式或分号分隔等文件。Pandas提供多种方法来恰当地读取此类数据。但是,当您指定正确的分隔符时,甚至read_csv也能很好地工作

import pandas# Tab separated file
df = pd.read_csv('data.tsv', sep='\t')
OR 
# columns are separated by space 
df = pd.read_csv('data.txt', sep = ' ')

3。文本文件

我们看到使用pandas.read_csv()方法可以读取 txt 文件,但是让我们看看读取 txt 文件的另一种方式是上下文管理器。它们在分配和管理资源、关闭所有打开的文件方面非常有效

上下文管理器最广泛使用的例子是with语句

file_name = 'data.txt'with open(file_name, mode = 'r') as file:
    df = file

4。Zip 文件

有时,您可能会得到一个 csv 文件,其中可能包含您需要的 csv 文件,以节省大小。提取。你需要使用’ zip file '库。如果你使用的是 windows,这样做比从 windows 中提取要好得多

zipfile也是一个上下文管理器,将支持我们前面看到的with语句

from zipfile import ZipFilefile_name = 'my_zip_file.zip'
with open(file_name, mode = 'r') as f:
    f.extractall()
# Extractall method will extract all the contents of zipfile in the same folder# now we can load the extracted csv file in our dataframe
import pandasdf = pd.read_csv('my_csv_file.csv')

5。多个文本文件

您可能会遇到这样的情况,您的数据以多个文本文件的形式提供给您。例如,你被提供了 1000 个电影标题的评论,而不是把所有的放入一个,他们把每个单独的评论作为一个文件,并且提供了 1000 个这样的文本文件

我们将使用一个库glob——它使得打开具有相似路径结构的文件变得简单

import pandas
import globfolder_name = 'my_folder'df_list = []
for review in glob.glob('my_folder/*.txt'):
    with open(review, mode = 'r') as file:
        movie = {}
        movie['title'] = file.readline()
        movie['review'] = file.read()
df_list.append(movie)df = pd.DataFrame(df_list)
  • 是 glob 语句中的通配符。它允许 python 扫描所有的。给定路径中的 txt 文件

6。从网上下载文件

如果你必须下载保存在服务器上的文件。你必须使用一个库— requests

import requests
import ossample_url = '192.145.232.xx/2019/2/class_notes/gather_data.txt'folder_name = 'my_folder'if not os.path.exists(folder_name):
    os.makedirs(folder_name)response = requests.get(url)
file_name = 'gather_data.txt'
file_loc = os.path.join(folder_name, file_name)
with open(file_loc, mode='wb') as outfile:
    outfile.write(response.content)

**7。网页(网页抓取)

网络抓取是一种使用代码从网页中提取数据的奇特方式。存储在网页上的数据被称为 HTML,即超文本标记语言。它是由这些叫做标签的东西组成的,这些东西赋予了网页结构。<title>, <div>, <h1> ……等等

因为 HTML 代码只是文本,所以可以使用解析器提取其中的标签和内容。为此,我们将使用一个库— BeautifulSoup

假设我们想从 IMDb 和烂番茄两者中提取关于《复仇者联盟》最终结局(2019)的信息

注意:Inspect element 是您寻找相关标签和属性以提取数据的最好朋友

from bs4 import BeautifulSoup as bs
import requests
import pandasimdb_url = '[https://www.imdb.com/title/tt4154796/](https://www.imdb.com/title/tt4154796/)'
response = requests.get(imdb_url)
soup = bs(response.content, features = b'lxml)
movie = {}
movie['title'] = soup.find('div', attrs = {'class': 'title_wrapper'}).find('h1').text
movie['imdb_rating'] = soup.find('span', attrs = {'itemprop': 'ratingValue'}).textrt_url = '[https://www.rottentomatoes.com/m/avengers_endgame](https://www.rottentomatoes.com/m/avengers_endgame)'
response = requests.get(rt_url)
soup = bs(response.content, features = 'lxml')
movie['tomatometer'] = soup.find('span', attrs = {'class' : 'mop-ratings-wrap__percentage'}).text
movie['audience_score'] = soup.find('div', attrs = {'class' : 'audience-score'}).find('span', attrs={'class' : 'mop-ratings-wrap__percentage'}).textdf = pd.DataFrame(movie)

通过这种方式,我们从两个不同的来源收集了关于《复仇者联盟》结局的信息

8。API(应用程序编程接口)

你当然可以从网页中提取信息,但是更好的获取信息的方式是通过 API。

维基百科有几个公开开放的 API,其中流行的一个是 Mediawiki。我们将使用 python 库wptools

import wptools
import pandas# For a wikipedia URL '[https://en.wikipedia.org/wiki/Avengers:_Endgame](https://en.wikipedia.org/wiki/Avengers:_Endgame)' we only need to pass the string after /wiki/wiki_page = wptools.page('[Avengers:_Endgame](https://en.wikipedia.org/wiki/Avengers:_Endgame)).get()# Now this wiki_page has fetched extracts, images, infobox data, wiki data etc
# By using wikipage.data() method we can extract all the informationwiki_page.data['image'] # this will return 3 images backfirst_image = wiki_page.data['image'][0]
print (first_image['url'])
'https://upload.wikimedia.org/wikipedia/en/0/0d/Avengers_Endgame_poster.jpg'# Now you can save this poster link or use the requests method as seen above to save poster of the movie

9。文本文件 (逐行读取数据)

假设您已经使用 twitter api — tweepy 下载了 tweepy 数据

你已经将所有的推文保存在一个文本文件中——tweets _ JSON . txt

你现在的目标是从这些推文中提取有用的信息,将其保存在数据框架中,并用于进一步的分析。这是您在第 3 步和第 8 步中学到的技能的组合

第 1 部分—让我向您展示如何使用 tweepy 获取 twitter 数据。

import tweepy
import jsonconsumer_key = 'xxx'
consumer_secret = 'xxx'
access_token = 'xxx'
access_secret = 'xxx'auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)api = tweepy.API(auth, wait_on_rate_limit = True)tweet_ids = [] #This will be the list of tweets for which you need the information forfile_name = 'tweets_json.txt'
with open(file_name, mode='w') as file:
    for tweet_id in tweet_id:
        tweet = api.get_status(tweet_id, tweet_mode = 'extended')
        json.dump(tweet._json, file)
        file.write('/n')

第 2 部分—阅读 tweets_json.txt 以提取有用的信息

import pandas
import jsondf_list = []
with open('tweets_json.txt', mode = 'r') as file:
    for line in file:
        tweet = {}
        json_data = json.loads(line)
        tweet['tweet_id'] = json_data['id']
        tweet['retweet_count'] = json_data['retweet_count']
        tweet['favorite_count'] = json_data['favorite_count']
        df_list.append(tweet)
tweet_df = pd.DataFrame(df_list)

10。RDBMST3【SQL 数据库】

数据库是“保存在计算机中的一组结构化数据,尤其是可以通过各种方式访问的数据。”它便于数据的存储、检索、修改和删除

在数据争论的背景下,数据库和 SQL 开始用于存储数据或收集数据:

  • 连接数据库,将数据导入熊猫数据框架
  • 连接数据库并将数据从熊猫数据帧存储到数据库
  1. 用 python 连接到数据库—

我们将使用 SQLAlchemy 连接到 SQLite 数据库,这是一个用于 python 的数据库工具包

import sqlalchemy
import pandasengine = sqlalchemy.create_engine('sqlite:///movies.db')

movies.db 不会显示在 jupyter 笔记本仪表盘上

2.在数据库中存储熊猫数据帧

# Store dataframe 'df' in a table called movie_tbl in the databasedf.to_sql('movie_tbl', engine, index=False)

movies.db 现在将显示在 jupyter 笔记本仪表盘中

3.读取熊猫数据框架中的数据库表

df = pd.read_sql('SELECT * FROM movie_tbl', engine)

结束语:

  • 我试图给出各种事物的基本概念,避免写下太多的细节
  • 请随意写下您的想法/建议/反馈

数据科学家:你的变量名很糟糕。以下是修复它们的方法。

原文:https://towardsdatascience.com/data-scientists-your-variable-names-are-awful-heres-how-to-fix-them-89053d2855be?source=collection_archive---------2-----------------------

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

Wading your way through data science code is like hacking through a jungle. (Source)

一种大大提高代码质量的简单方法

快速,下面的代码是做什么的?

for i in range(n):
    for j in range(m):
        for k in range(l): 
            temp_value = X[i][j][k] * 12.5
            new_array[i][j][k] = temp_value + 150

这是不可能的,对吗?如果你试图修改或调试这段代码,你会不知所措,除非你能读懂作者的想法。即使你是作者,在编写这段代码几天后,你也不会知道它做了什么,因为使用了无用的变量名【神奇的】数字

使用数据科学代码时,我经常看到类似上面(或者更糟)的例子:带有变量名如X, y, xs, x1, x2, tp, tn, clf, reg, xi, yi, ii和无数未命名常量值的代码。坦率地说,数据科学家(包括我自己)很不擅长给变量命名,甚至不知道如何给它们命名。

随着我从为一次性分析编写面向研究的数据科学代码成长为生产级代码(在 Cortex Building Intel ),我不得不通过抛弃来自数据科学书籍、课程和实验室的实践来改进我的编程。可以部署的机器学习代码与数据科学家被教授的编程方式之间存在许多差异,但我们将从两个具有重大影响的常见问题开始:

  • 无用/混乱/模糊的变量名
  • 未命名的“神奇”常数数字

这两个问题都导致了数据科学研究(或 Kaggle 项目)和生产机器学习系统之间的脱节。是的,你可以在运行一次的 Jupyter 笔记本中摆脱它们,但是当你有任务关键的机器学习管道每天运行数百次而没有错误时,你必须编写 可读和可理解的 代码。幸运的是,我们数据科学家可以采用来自软件工程的最佳实践,包括我们将在本文中讨论的那些。

**注意:**我关注 Python,因为它是目前为止行业数据科学中使用最广泛的语言。Python 中的(详见此处):

  • 变量/函数名为lower_caseseparated_with_underscores
  • 命名常量在ALL_CAPITAL_LETTERS
  • 班级在CamelCase

命名变量

在命名变量时,有三个基本概念需要记住:

  1. 变量名必须描述变量所代表的信息。变量名应该用文字明确地告诉你变量代表什么。
  2. 你的代码被阅读的次数会比它被编写的次数多。优先考虑你的代码有多容易理解,而不是写得有多快。
  3. 采用标准的命名惯例,这样你就可以做出一个全局决定,而不是多个局部决定。

这在实践中是什么样子的?让我们来看看对变量名的一些改进:

  • Xy。如果你已经看过几百次了,你就知道它们是特性和目标,但是对于阅读你的代码的其他开发人员来说,这可能并不明显。相反,使用描述这些变量代表什么的名称,例如house_featureshouse_prices
  • value。值代表什么?可能是一个velocity_mphcustomers_servedefficiencyrevenue_total。像value这样的名字没有告诉你变量的用途,很容易混淆。
  • temp。即使你只是使用一个变量作为临时值存储,也要给它一个有意义的名字。也许这是一个需要转换单位的值,所以在这种情况下,要明确:
# Don't do this
temp = get_house_price_in_usd(house_sqft, house_room_count)
final_value = temp * usd_to_aud_conversion_rate# Do this instead
house_price_in_usd = get_house_price_in_usd(house_sqft, 
                                            house_room_count)
house_price_in_aud = house_price_in_usd * usd_to_aud_conversion_rate
  • 如果你使用像usd, aud, mph, kwh, sqft这样的缩写,确保你提前建立这些缩写。与团队中的其他人就常用缩写达成一致,并写下来。然后,在代码审查中,确保执行这些书面标准。
  • tptnfpfn:避免机器学习特定缩写。这些值代表true_positivestrue_negativesfalse_positivesfalse_negatives,所以要明确。除了难以理解之外,较短的变量名可能会输入错误。当你指的是tn的时候用tp太容易了,所以把整个描述写出来。
  • 上面是一个优先考虑代码的易读性而不是你能写多快的例子。阅读、理解、测试、修改和调试写得不好的代码要比写得好的代码花费更长的时间。总的来说,通过尝试更快地编写代码——使用更短的变量名——你实际上会增加你程序的开发时间!如果你不相信我,回到你 6 个月前写的一些代码,并尝试修改它。如果你发现自己试图破译你的代码,这表明你应该集中精力在更好的命名约定。
  • xsys。这些通常用于绘图,在这种情况下,这些值代表x_coordinatesy_coordinates。然而,我已经看到这些名称用于许多其他任务,因此通过使用描述变量用途的特定名称来避免混淆,例如timesdistancestemperaturesenergy_in_kwh

什么导致了不好的变量名?

命名变量的大多数问题源于

  • 希望变量名简短
  • 将公式直接翻译成代码

关于第一点,虽然像 Fortran 这样的语言确实限制了变量名的长度(6 个字符),但是现代编程语言没有限制,所以不要觉得被迫使用人为的缩写。也不要使用过长的变量名,但是如果你不得不偏向某一方,那么就以可读性为目标。

关于第二点,当你写方程或使用模型时——这是学校忘记强调的一点——记住字母或输入代表真实世界的值!

让我们看一个既犯错误又如何改正的例子。假设我们有一个多项式方程,可以从模型中找到房子的价格。您可能想直接用代码编写数学公式:

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

temp = m1 * x1 + m2 * (x2 ** 2)
final = temp + b

这是看起来像是机器为机器写的代码。虽然计算机最终会运行你的代码,但它会被人类阅读更多次,所以要写人类能理解的代码!

要做到这一点,我们需要考虑的不是公式本身——如何建模——而是正在建模的真实世界的对象——什么是什么。让我们写出完整的方程(这是一个很好的测试,看看你是否理解模型):

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

house_price = price_per_room * rooms + \
              price_per_floor_squared * (floors ** 2)
house_price = house_price + expected_mean_house_price

如果你在给你的变量命名时有困难,这意味着你对模型或者你的代码不够了解。我们编写代码来解决现实世界的问题,我们需要理解我们的模型试图捕捉什么。描述性变量名让你在比公式更高的抽象层次上工作,帮助你专注于问题领域。

其他考虑

命名变量要记住的重要一点是一致性计数。与变量名保持一致意味着你花在命名上的时间更少,而花在解决问题上的时间更多。当您将聚合添加到变量名时,这一点很重要。

变量名中的聚合

所以你已经掌握了使用描述性名称的基本思想,将xs改为distancese改为efficiencyv改为velocity。现在,当你取平均速度时会发生什么?这应该是average_velocityvelocity_mean还是velocity_average?两个步骤可以解决这个问题:

  1. 首先,确定常见的缩写:avg表示平均值,max表示最大值,std表示标准差等等。确保所有团队成员都同意并记下这些内容。
  2. 把缩写放在名字的末尾。这将最相关的信息,即由变量描述的实体,放在了开头。

遵循这些规则,您的聚合变量集可能是velocity_avgdistance_avgvelocity_mindistance_max。规则二。是一种个人选择,如果你不同意,没关系,只要你坚持应用你选择的规则。

当你有一个代表物品数量的变量时,一个棘手的问题就出现了。你可能很想使用building_num,但这是指建筑物的总数,还是某一特定建筑物的具体指数?为了避免歧义,使用building_count指代建筑物的总数,使用building_index指代特定的建筑物。你可以把它应用到其他问题上,比如item_countitem_index。如果你不喜欢count,那么item_total也是比num更好的选择。这种方法解决了歧义并保持了将聚合放在名字末尾的一致性*。*

循环索引

由于某些不幸的原因,典型的循环变量变成了ijk。这可能是数据科学中比任何其他实践更多错误和挫折的原因。将无信息的变量名与嵌套循环结合起来(我见过嵌套循环包括使用iijj,甚至iii),你就有了不可读、易错代码的完美配方。这可能有争议,但是我从不使用i或任何其他单个字母作为循环变量,而是选择描述我正在迭代的内容,例如

for building_index in range(building_count):
   ....

或者

for row_index in range(row_count):
    for column_index in range(column_count):
        ....

这在你有嵌套循环时特别有用,这样你就不必记得i是代表row还是column或者是j还是k。您希望将您的精神资源用于计算如何创建最佳模型,而不是试图计算数组索引的特定顺序。

(在 Python 中,如果你没有使用循环变量,那么使用_作为占位符。这样,您就不会对是否使用索引感到困惑。)

更多要避免的名字

  • 避免在变量名中使用数字
  • 避免英语中常见的拼写错误
  • 避免使用带有不明确字符的名称
  • 避免使用意思相似的名字
  • 避免在名字中使用缩写
  • 避免听起来相似的名字

所有这些都坚持优先考虑读时可理解性而不是写时便利性的原则。编码主要是一种与其他程序员交流的方法,所以在理解你的计算机程序方面给你的团队成员一些帮助。

永远不要使用神奇的数字

一个幻数是一个没有变量名的常量值。我看到这些用于转换单位、改变时间间隔或添加偏移量等任务:

final_value = unconverted_value * 1.61final_quantity = quantity / 60value_with_offset = value + 150

(这些变量名都很差!)

幻数是错误和混乱的主要来源,因为:

  • 只有一个人,作者,知道它们代表什么
  • 更改该值需要查找所有使用该值的位置,并手动键入新值

不使用幻数,我们可以定义一个转换函数,接受未转换的值和转换率作为参数:

def convert_usd_to_aud(price_in_usd,            
                       aud_to_usd_conversion_rate):
    price_in_aus = price_in_usd * usd_to_aud_conversion_rate

如果我们在一个程序的许多函数中使用转换率,我们可以在一个位置定义一个名为常量的:

USD_TO_AUD_CONVERSION_RATE = 1.61price_in_aud = price_in_usd * USD_TO_AUD_CONVERSION_RATE

(在我们开始项目之前,我们应该与团队的其他成员确定usd =美元,aud =澳元。记住标准!)

这是另一个例子:

# Conversion function approach
def get_revolution_count(minutes_elapsed,                       
                         revolutions_per_minute):
    revolution_count = minutes_elapsed * revolutions_per_minute # Named constant approach
REVOLUTIONS_PER_MINUTE = 60revolution_count = minutes_elapsed * REVOLUTIONS_PER_MINUTE

使用在一个地方定义的NAMED_CONSTANT使得改变值更加容易和一致。如果转换率发生变化,您不需要搜索整个代码库来更改所有出现的代码,因为它只在一个位置定义。它也告诉任何阅读你的代码的人这个常量代表什么。如果名字描述了参数所代表的,函数参数也是一个可接受的解决方案。

作为幻数风险的真实例子,在大学期间,我参与了一个建筑能源数据的研究项目,这些数据最初每隔 15 分钟出现一次。没有人过多考虑这种变化的可能性,我们用神奇的数字 15(或 96 表示每日观察次数)编写了数百个函数。在我们开始以 5 分钟和 1 分钟的间隔获取数据之前,这一切都很好。我们花了几周的时间修改所有的函数来接受区间的一个参数,但即使如此,我们仍然要与几个月来使用幻数所导致的错误作斗争。

真实世界的数据习惯于在你身上变化——货币之间的兑换率每分钟都在波动——硬编码成特定的值意味着你将不得不花费大量的时间来重写代码和修复错误。编程中没有“魔法”的位置,即使在数据科学中也是如此。

标准和惯例的重要性

采用标准的好处是,它们让你做出一个全球性的决定,而不是许多地方性的决定。不要在每次命名变量的时候都选择聚合的位置,而是在项目开始的时候做一个决定,并在整个过程中一致地应用它。目标是花更少的时间在与数据科学无关的问题上:命名、格式、风格——而花更多的时间解决重要问题(比如使用机器学习解决气候变化)。

如果你习惯独自工作,可能很难看到采用标准的好处。然而,即使是独自工作,你也可以练习定义自己的约定,并坚持使用它们。你仍然会从更少的小决策中获益,当你不可避免地需要在团队中发展时,这是一个很好的实践。每当一个项目中有一个以上的程序员时,标准就成了必须的!

你可能不同意我在这篇文章中所做的一些选择,这没关系!*采用一套一致的标准比精确选择使用多少空格或变量名的最大长度更重要。*关键是不要在偶然的困难上花费太多时间,而是要专注于本质的困难。(大卫·布鲁克斯有一篇关于我们如何从解决软件工程中的偶然问题到专注于本质问题的优秀论文

结论

记住我们所学的,我们现在可以回到我们开始的初始代码:

for i in range(n):
    for j in range(m):
        for k in range(l): 
            temp_value = X[i][j][k] * 12.5
            new_array[i][j][k] = temp_value + 150

把它修好。我们将使用描述性的变量名和命名的常量。

现在我们可以看到,这段代码正在对一个数组中的像素值进行归一化,并添加一个常量偏移量来创建一个新的数组(忽略实现的低效率!).当我们将这些代码交给我们的同事时,他们将能够理解并修改这些代码。此外,当我们回过头来测试代码并修复错误时,我们会准确地知道我们在做什么。

这个话题很无聊吗?也许这有点枯燥,但是如果你花时间阅读软件工程,你会意识到区分最好的程序员的是重复实践诸如好的变量名、保持例程简短、测试每一行代码、重构等平凡的技术。这些是将代码从研究阶段转移到生产阶段所需要的技术,一旦你到了那里,你会发现让你的模型影响现实生活中的决策一点也不无聊。

在本文中,我们介绍了一些改进变量名的方法。

需要记住的要点

  1. 变量名应该描述变量所代表的实体。
  2. 优先考虑你的代码易于理解的程度,而不是你写代码的速度。
  3. 在整个项目中使用一致的标准,以最小化小决策的认知负担。

具体要点

  • 使用描述性变量名称
  • 使用函数参数或命名常数,而不是“神奇”的数字
  • 不要使用机器学习专用的缩写
  • 用变量名描述一个方程或模型代表什么
  • 将聚合放在变量名的末尾
  • item_count代替num
  • 使用描述性循环索引代替ijk
  • 在整个项目中采用命名和格式约定

(如果你不同意我的一些具体建议,那没关系。更重要的是,你使用一种标准的方法来命名变量,而不是教条地使用确切的约定!)

我们可以对数据科学代码进行许多其他更改,以使其达到生产级别(我们甚至没有讨论函数名!).我很快会有更多关于这个主题的文章,但与此同时,请查看“从代码完成开始构建软件的注意事项”。要深入了解软件工程最佳实践,请阅读史蒂夫·麦康奈尔的 代码全集

为了发挥其真正的潜力,数据科学将需要使用允许我们构建健壮的软件产品的标准。对我们来说幸运的是,软件工程师已经想出了这些最佳实践的大部分,并在无数的书籍和文章中详细介绍了它们。现在该由我们来阅读和执行它们了。

我写关于数据科学的文章,欢迎建设性的评论或反馈。你可以在推特上找到我。如果在提高底线的同时帮助世界对你有吸引力,那就去看看 Cortex Building Intelligence 的职位空缺。我们帮助世界上一些最大的办公楼节省了数十万美元的能源成本,同时减少了碳足迹。

数据显示我们对世界的看法是错误的

原文:https://towardsdatascience.com/data-shows-we-are-wrong-about-the-world-ac5608ce6c4f?source=collection_archive---------22-----------------------

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

Photo by Vitaly Vlasov from Pexels

用数据破除神话

为什么一切不像媒体告诉你的那么糟糕

埃迪亚告诉我们这个世界正在走向地狱。核战争的风险,民族主义的复兴,大国竞争的回归,也门、叙利亚、利比亚的内战和人道主义灾难…

当最近的一项调查问到“综合考虑所有因素,你认为世界是变得更好还是更坏了?”,人们的反应是(不出所料的)悲观。

在瑞典,只有 10%的人认为情况正在好转,而在美国,这一比例仅为 6%。在英国,55%的受访者认为生活在贫困中的世界人口比例增加了,只有 13%的人认为这一数字下降了。

几乎没有人认为世界正在变好。

媒体不会告诉我们世界在如何变化,它会告诉我们世界在哪里出了问题。史蒂夫·丹宁。

但事实证明并非如此。我们从未经历过如此前所未有的进步。随着每一天的过去,世界变得越来越好。用美国前总统巴拉克·奥巴马的话说,“如果你不得不盲目选择你想在什么时候出生,你会选择现在”。

当我们的头脑被恐惧占据时,就没有事实的空间了。汉斯·罗斯林

在媒体灌输的非理性恐惧所定义的日益动荡和政治化的环境中,数据是唯一稳定的实体。客观、公正地分析数据,(通常)不容易被操纵,这是更好地理解我们日益复杂的世界的关键。

摆脱贫困的大逃亡

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

Source: Our World in Data

两百多年前,90%的人口生活在极度贫困之中。1950 年,世界上 75%的人仍然生活在极端贫困之中。但如今,生活在极端贫困中的人口还不到总人口的 10%。

很少有人想听到这些,但是每天都有 217,000 人脱离了 2 美元的贫困线。

2000 年,联合国制定了 8 项千年发展目标(始于 1990 年):

  • 将全球贫困率减半
  • 让 10 亿人摆脱贫困
  • 这一切都是在 25 年内发生的

2000 年,大多数专家认为这些目标纯属空想。

你猜怎么着?世界提前五年实现了这些目标。

我们的进步不仅影响了富国,也影响了穷国。到 2008 年,生活在我们星球上的 67 亿人的平均收入相当于西方 1964 年的水平。

暴力

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

Source: Our World in Data

你们巨大的进步不仅触及了贫困,也触及了其他领域。

各种战争的数量从 1950 年代的每年 6 起下降到 2000 年代的每年 1 起,而死亡人数从每百万人 240 人下降到每百万人不到 10 人。

2017 年有近 7 万人因武装冲突丧生。另一方面,每年有近 80 万人死于自杀。

事实证明,在长期和平的时代,一个人自杀的可能性是被士兵杀死的可能性的 10 倍以上。

2018 年,约有 3 万人被恐怖分子杀害。相比之下,交通事故每年导致 125 万人死亡:27 万中国人、8 万欧洲人和 4 万美国人。

糖尿病和高血糖导致 350 万人死亡!空气污染——700 万。你死于糖尿病和空气污染的概率分别是死于恐怖袭击的 100 倍和 200 倍

现在,糖和空气远比火药危险。

暴饮暴食已经成为比营养不良更糟糕的问题。

过去,战争意味着没有和平。正如尤瓦尔·赫拉利曾经指出的那样,和平意味着暂时没有战争。

“例如,尽管德国和法国在 1913 年处于和平状态,但每个人都知道他们在 1914 年可能会剑拔弩张。每当政治家、将军、商人和普通公民为未来制定计划时,他们总是给战争留有余地。”

然而今天,和平是战争发生的绝对必然性。当首席执行官、政治家和公民制定近期计划时,他们不会将美中战争的可能性纳入计划。随着我们向知识经济转型,主要资产不再是油田和黄金,而是数据和人力资本,战争数量可能会大幅减少。

民主

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

Source: Our World in Data

媒体和专家正在谈论威权主义的崛起、自由民主的倒退和民粹民族主义的回归。

然而,民主国家的数量一直在稳步增加。1942 年,只有 12 个民主国家。在 1962 年,36 个民主国家。2015 年,有 103 个民主国家。几乎是 60 年前的 10 倍。

根据史蒂芬·平克的数据,2015 年,大约三分之二的世界人口生活在自由或相对自由的国家(1950 年不到五分之二,1900 年不到五分之一,1850 年为百分之七,1816 年为百分之一)。

民主是在无政府状态的混乱和暴政的暴力之间取得不稳定平衡的唯一政府形式。正如卡尔·波普尔指出的,民主不是人民的统治;这是一个无需流血就能推翻糟糕领导的体系。

如果世界变得更加民主,那么这就是进步。

生活和财富

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

Source: Our World in Data

今天的平均寿命是 72.23 岁,是 100 年前的两倍!

自从工业革命以来,世界财富增加了一百倍。2015 年,大约有 30 万人因营养不良而死亡。与此同时,几乎有 300 万人因为肥胖而灭亡!暴饮暴食已经成为比饥荒更严重的问题。

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

Source: Our World in Data

“有史以来第一次,死于吃得太多的人多于死于吃得太少的人;死于老年的人比死于传染病的人多;尤瓦尔·赫拉利说:“自杀的人比被士兵、恐怖分子和罪犯杀死的人加起来还要多。”。他接着写道,“对于普通的美国人和欧洲人来说,可口可乐比基地组织构成了更致命的威胁。”

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

Source: Our World in Data

我们悲观和无知的原因

证据显示世界正在变得更好。然而,正如史蒂夫·丹宁在《福布斯》 中写道,“在英国和美国,大多数人认为”生活在极端贫困中的人口比例增加了!三分之二的美国人甚至认为极端贫困人口的比例“几乎翻了一番”。"

为什么人们对人类取得的进步如此无知?

正如史蒂芬·平克指出的那样,积极和消极的事情在不同的时间线上展开。“坏事可能会很快发生,但好事不是一天建成的,随着它们的展开,它们将与新闻周期不同步。”

新闻是关于发生的事情,而不是没有发生的事情。我们从来没有看到一个记者对着镜头说,“我正在一个没有爆发战争的国家进行现场报道”——或者一个没有被轰炸的城市,或者一所没有被枪击的学校。只要坏事没有从地球上消失,总会有足够多的事件占据新闻,特别是当数十亿部智能手机将世界上大多数人口变成犯罪记者和战地记者时。摘自 s·平克的《现在的启蒙》

媒体不会告诉我们世界在如何变化,它会告诉我们世界在哪里出了问题。福布斯

新闻媒体的受欢迎程度取决于它们娱乐、刺激、震撼或灌输仇恨、享受、自信和恐惧等极端情绪的能力。因此,大多数人不知道人类在过去几十年中取得的进步。

用 Max Roser 的话来说,如果新闻媒体真的报道了世界的变化,他们可能会报道生活在极端贫困中的人数在过去 25 年中每天都减少了 217,000 人。

承认我们过去的成就对于理解我们,人类,如果我们关注相关的事情,我们可以在未来取得更大的进步是必要的。

依靠媒体来形成你的世界观就像只看我的脚的照片来形成你对我的看法一样。汉斯·罗斯林

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

Source: Our World in Data

天花是人类几个世纪的祸害,仅在 20 世纪就有 3 亿人死于天花(这大约相当于现代俄罗斯、德国、英国和希腊人口的总和),消灭天花的计划仅花费了 3 . 12 亿美元!!!

这还不到美国这种隐形轰炸机(B-2)一个机翼成本的一半。

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

Source: Wikipedia

美国已经建造了 21 架 B-2。

想象一下,如果我们专注于科学、技术和人类福祉的改善,我们会取得什么样的成就。我们的机会和能力是无限的;我们可以不断拓展我们的理解范围,不断扩大我们对周围世界的了解,并有效地解决全球性挑战。

关注进步的意义不是沾沾自喜,而是找出原因,这样我们就能做更多有效的事情……进步包括尽可能分解社会进程的特征,以最大化人类利益,同时最小化伤害。史蒂芬·平克

过去几十年取得了巨大的进步,我们的主要目的是最大限度地扩大进步带来的好处,同时消除其负面影响。

我们已经做了。我们可以再做一次。我们可以做到的是无限的,利用数据和人工智能放大的人类理性的力量来促进人类的繁荣。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值