TowardsDataScience-博客中文翻译-2020-三十六-

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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

数据科学的 Python 最佳实践

原文:https://towardsdatascience.com/data-science-coding-mistakes-and-best-practices-part-1-f7511cf573f7?source=collection_archive---------15-----------------------

入门

通过以下几个技巧,避免常见错误并提高您的数据科学编码技能

nesabymakersUnsplash 上拍摄的照片

我们中的许多人在没有强大的软件工程背景的情况下开始了他们的数据科学职业生涯。虽然一开始这可能不是问题,但是随着代码变得越来越复杂,您会发现您的笔记本会变得越来越慢,并且您会努力维护它。这篇文章的目标是帮助你写出干净、易读、高性能的代码。这篇文章并不是关于如何成为一名更好的程序员的详尽指南,但是我希望你能从中找到一些有用的东西来提高你的编码技能。

1.在 DataFrame 行上循环(简单回答:不要!)

我认为这是第一次做分析编程的人最常犯的错误之一。StackOverflow 的回答很好地解释了这一点。

pandas 中的迭代是一种反模式,只有当你用尽了所有其他选择时,才应该这么做。你不应该使用名字中带有“iter”的函数超过几千行,否则你将不得不习惯等待。

为了加快你的数据处理,你需要使用内置的 pandas 或 numpy 函数,因为它更快更容易。例如,看看这个 For 循环,

for index, row in df.iterrows():
   if row['room_size'] <= 36
       row['category'] = 'small'
   else:
       row['category'] = 'large'

这可以使用 numpy 轻松完成,

df['category'] = np.where(df['room_size'] <= 36, 'small', 'large')

使用 numpy/pandas 函数的最大好处可能是它们比 for 循环快很多。看看下面的图表,比较熊猫函数和迭代的运行时间。

各种数据处理方法的速度比较。

如果您使用 pandas 或 numpy 函数,您的代码将被矢量化,这意味着这些库不是一次处理一个值,而是一次对所有行执行一次操作,这使得您的数据处理速度非常快。以下是您可以使用 pandas 进行数据帧操作的一些其他示例:

基于其他列的操作创建新列:

df['c4'] = (df['c1'] — df['c2']) * df['c3']/100

向上或向下移动列:

df['c1'] = df['c1'].shift(periods=1) # Shifting up one column
df['c1'] = df['c1'].shift(periods=-1) # Shifting down one column

切片一个:

df = df[start_index:end_index].copy()

填充不适用值:

df.fillna('bfill',inplace=True)

最棒的是,您可以使用 pandasnumpy 内置函数进行大多数数据操作。我只能想到一些用例,这些用例只能通过迭代来完成,比如训练你的 ML 模型或者使用正则表达式。因此,如果您想知道如何使用这些库之一进行数据操作,请查阅 numpy 或 pandas 文档(或 StackOverflow)。

2.SettingWithCopyWarning(),了解视图与副本

如果你曾经使用过熊猫,你可能以前遇到过这个警告。

SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

这个警告可能是由很多原因造成的,但是我认为最常见的原因是对视图和副本的不清楚的理解。顾名思义,视图是原始数据的视图,因此修改视图可能会修改原始对象。举个例子,

# df2 will return a **view**
df2 = df[['A']]
df2['A'] /= 2

上面的操作返回一个视图,并将产生SettingWithCopyWarning。如果您更改列df2的值,它也会更改列dfA的值,这就是警告试图告诉我们的。要修复它,你必须使用.copy()df2创建一个全新的对象

# df2 will return a **copy**
df2 = df[['A']].copy()
df2['A'] /= 2

上面的代码将返回一个副本,这是一个全新的对象。在上面的代码中,改变df2不会改变df。事实上,你应该在每次创建一个新的非空数据框架时使用 **.copy()** 来避免声名狼藉的SettingWithCopyWarning

3.编写干净的代码。

众所周知,数据科学家写的代码很糟糕。这并不奇怪,因为数据科学家编写的许多代码都是用于 EDA、快速原型制作和一次性分析的。你的代码可能有一天会被其他人修改或阅读,这个事实你可能不会想到。引用一个比我更好的程序员的话,“代码被阅读的次数比它被编写的次数多得多,所以要相应地计划”。以下是我给你的一些关于如何写出更好代码的建议。

避免非描述性的变量名

不要在你的代码中写简短的非描述性的变量名,比如ijXY。而是写一个描述性的变量名,比如row_indexcolumn_indextrain_datatest_data。是的,这会让你多花两秒钟输入变量,但是相信我,当将来有人试图修改/调试你的代码时,这会节省很多工时。

# Avoid (❌) - Non-descriptive variable names
n, x, y = data.shape# Prefer (✅) - Clear, descriptive variable names
no_of_images, image_width, image_height = data.shape

命名和格式约定

拥有一致的命名准则将有利于您和您的团队。它将使任何阅读你的代码的人更快地理解它,并使你的代码更好看。由于大多数数据科学代码都是用 python 编写的,所以我将分享一些 PEP8 命名约定:

  • 变量/函数名称为小写,用下划线分隔
  • 常量名称都是大写字母
  • 名称通常应使用茶色

至于格式,因为 python 不允许混合使用制表符和空格来缩进,所以最好坚持一种格式。有许多不同的 python 风格 指南可供您遵循,但我发现其中有几个是必不可少的:

  • 使用 4 个空格代替制表符(如果你使用 VS 代码,你可以自动将制表符转换成空格)
  • 用两行空行将顶级函数和类定义括起来。
  • 通过在圆括号、方括号和大括号内使用 Python 的隐含行继续符来换行
# Long function
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

保持你的代码干燥(不要重复)

考虑将您在整个代码中使用的相同值重构到代码的单独部分中的单个变量中,或者更好的是,重构到单独的 JSON 文件中。这将在将来为您节省大量时间,因为如果您想在整个代码中更改相同的值,您可以通过更改一个变量来实现。这种做法还将避免一种常见的编码反模式,称为幻数,其中具有未解释含义的唯一值被直接硬编码在源代码中。

# Avoid (❌) - Unexplained 'magic' number
model = models.Sequential()
model.add(layers.LSTM(60, activation='relu', input_shape=(10, 3)))# Prefer (✅) - Clear value names and meaning
neurons = 60
no_of_timesteps = 10
no_of_feature = len(df.columns)
activation = 'relu'

model = models.Sequential()
model.add(layers.LSTM(neurons, 
activation= activation, input_shape=(no_of_timesteps, dimensions)))

这也适用于您的过程,与其在笔记本中编写冗长的数据处理过程,不如将相似的过程分组并重构为单个函数。然后,您可以使用 pandas .pipe()函数在单个链式执行中调用所有重构的函数。

# Avoid (❌) - Long, sequential procedures
df = pd.read_csv(‘data/train.csv’)
df[‘price_per_sqft’] = df[‘price’] / df[‘sqft’]
df[‘c1’].fillna(0, inplace=True)
df[‘c2’].fillna(method=‘bfill’, inplace=True)
df[‘c3’].fillna(df.groupby([‘c1,c2’])[‘c3’].transform(‘mean’))# Prefer (✅) - Separation of functions and chained executions
PATH = ‘data/train.csv’def load_data(path):
 return pd.read_csv(path)def calculate_price_per_sqft(df):
 df[‘price_per_sqft’] = df[‘price’] / df[‘sqft’]def imputate_missing_values(df):
 df[‘c1’].fillna(0, inplace=True)
 df[‘c2’].fillna(method=‘bfill’, inplace=True)
 df[‘c3’].fillna(df.groupby([‘c1,c2’])[‘c3’].transform(‘mean’))
 return dfdf = load_data(PATH)
result = (
  df.pipe(calculate_price_per_sqft)
    .pipe(imputate_missing_values)
)

4.在. parquet 文件中保存和加载数据

常见的做法是使用.to_csv()功能将数据保存到 CSV,就像你在许多 kaggle 笔记本中看到的那样。但是 CSV 实际上 不是存储大数据的好格式 ,因为它是无模式的,所以你必须在加载数据时解析日期和数字,并且是未压缩的,这意味着大数据集将占用大量内存,并且保存和加载将非常慢。Pandas 库实际上支持许多更适合保存大型数据集的格式。看看下面的图表,比较数据帧保存/加载时间。

图片来自伊利亚扎依采夫,2019。经允许重新发布

我们可以看到羽毛和拼花比 CSV 快几个数量级,两者都由pandas支持。这是由于这些文件类型的列压缩,它们将数据存储在磁盘中,类似于 DataFrame 对象在内存中的存储方式。接下来,我们来看看这些文件类型的文件大小对比。

图片来自伊利亚扎依采夫,2019。经允许重新发布

这一次拼花地板脱颖而出。基于这种比较,我推荐以 parquet 格式保存数据,因为这样速度更快,占用的内存更少,并且受pandas支持。您可以使用.to_parquet()将数据保存在parquet文件中。

# Avoid (❌) - Saving and loading data to CSV
df = pd.read_csv('raw_dataset.csv')
df.to_csv('results.csv')# Prefer (✅) - Saving and loading data to parquet
df = pd.read_parquet('raw_dataset.parquet')
df.to_parquet('results.parquet')

5.构建您的项目

一开始,在一个 jupyter 笔记本上进行分析、可视化、特征工程和构建 ML 模型似乎是个不错的主意。当然,打开笔记本开始处理数据集是非常容易的,但是如果你在开始时没有仔细地组织代码,事情会很快变得非常混乱。结构化您的项目将降低代码的复杂性,并使其更易于维护。对于 starter,你可以将自己创建的有用的函数放在一个名为data_processor.py的独立模块中,然后导入到你的 jupyter 笔记本中。

// data_processor.pyimport pandas as pddef imputate_missing_values(df):
 df['c1'].fillna(0, inplace=True)
 df['c2'].fillna(method='bfill', inplace=True)
 df['c3'].fillna(df.groupby(['c1','c2'])['c3'].transform('mean'))
 return dfdef calculate_moving_averages(df):
 df['moving_average'].fillna(0, inplace=True)
 return df

在你的 jupyter 笔记本中,你可以导入你已经创建的模块,并使用.pipe()函数来使用它(我是.pipe函数的粉丝)。

// your_notebook.ipynbimport data_processor.py as dpresult = (
  df.pipe(calculate_price_per_sqft)
    .pipe(imputate_missing_values)
)

接下来,您可以将它们进一步分成名为visualization.pydata_processing.pybuild_model.py等模块。

事实上,只要项目中的每个模块都符合单一责任原则,你就可以随心所欲地构建你的项目。引用维基百科,

单一责任原则(SRP)是一种计算机编程原则,它规定每个模块或类都应该对软件提供的功能的单一部分负责,并且这种责任应该完全由类来封装。它的所有服务都应严格符合这一职责。

或者,如果你想要一个现成的模板,请查看为你做上述所有事情的cookiecutterdata science。

结论

这篇文章包含了我在作为一名数据科学家的旅程中所犯的错误和学到的有用技术。我并不声称这些方法是完美的,但我希望这篇文章对开始职业生涯的数据科学家初学者有所帮助。

我是一名初学数据的科学家,热衷于从数据中创造价值。可以在 Twitter@ faisalrasbihan联系我。我欢迎建设性的反馈和批评。

参考文献:
【1】https://medium.com/r?URL = https % 3A % 2F % 2 ftowardsdatascience . com % 2 ftop-10-coding-errors-made-by-data-scientists-bb 5 BC 82 faaee
【2】https://towards data science . com/data-scientists-your-variable-names-are-words-heres-how-to-fix-them-89053d 2855 be
【3】https://towards

[4]https://www . practical data science . org/html/views _ and _ copies _ in _ pandas . html

向五岁儿童解释数据科学概念

原文:https://towardsdatascience.com/data-science-concepts-explained-to-a-five-year-old-ad440c7b3cbd?source=collection_archive---------4-----------------------

在采访中简单描述技术概念

我见过许多数据科学面试问题,要求您“向我描述[插入数据科学概念],就好像我是一个五岁的孩子。我妹妹正在学习成为一名小学教师,在和她讨论过这个问题后,我们觉得这个问题有点夸张,也许是为了强调或者是为了引人注意。所以我决定保留这个吸引人的标题,但是这篇文章将稍微侧重于向一个没有技术背景的成年人解释这些概念。然而,为了与主题保持一致,我还创建了图形来描述每个答案,如果我有机会使用白板,我会在我的解释中附上图形。

这些主题遵循以下顺序:

  1. 统计和数据准备
  2. 机器学习模型概念
  3. 评估模型

假设检验和 T 检验

总体均值的假设检验

对于假设检验,你首先从一个关于大群体的问题开始。比如美国人的平均身高是多少?你猜它是 5 英尺。8 英寸。(只是根据个人经验)。你知道你不可能真实地测量每个美国人的身高,所以你随机选择了一个更小的群体来测量(随机样本)。

看看所有美国人的平均身高是否真的是 5 英尺。8 英寸。,你会进行假设检验!在本例中,您将需要使用单样本 t 检验,它有一个特定的等式,我不会深入研究。这里需要注意的重要一点是,你需要知道你测量的人数,他们的平均身高,以及他们身高的标准差(也就是他们的身高离平均值有多远)。

当你从 t 检验中得到一个值(t 值)时,你需要使用一个图表或程序来评估你是否可以得出你非常确定——95%确定——这是美国人的平均身高。如果你的 t 值大于 1.96 或小于-1.96,你会说你拒绝你的假设,即所有美国人的平均身高是 5 英尺。8 英寸。如果它在这个范围之间,你就“未能拒绝”(这是统计学术语)你的假设,并得出结论说这是美国人的实际平均身高。

主成分分析

有时你有一个数据集,其中有太多的列(变量),很难处理。将所有这些变量放入一个模型中会导致它运行缓慢,并且很难一次将你的因变量(你试图预测的变量)和所有其他变量之间的关系可视化。这就是 PCA 的用武之地!

PCA 将变量转换为分量,每个分量都是原始变量的混合,但共享方差较小。

PCA 双标图示例

注意,我肯定会把 5 年前的水平解释留给这一个。通过一些复杂的数学(线性代数),PCA 将你的变量转化为“组件”左边的图称为双标图,它显示了组件 1 和组件 2 由我们最初的四个变量组成。然而,每个变量在一个组件中比在另一个组件中表现得更多。例如,绿色(变量 2)向量具有较高的分量 1 值,但其分量 2 值保持在 0.2 以下。因此,与成分 2 相比,变量 2 是成分 1 的更重要部分。

这里的目标是拥有比变量数量更少的组件(这样你的模型可以运行得更快)。此外,您希望您的组件尽可能多地保留关于原始变量的信息。为了对此进行分析并选择将多少组件放入模型中,您可以查看一个名为解释方差比率的指标。该指标告诉您每个组件“解释”的数据集中总方差的百分比希望本节中的第一幅插图能让这个想法更清晰一些。在一个理想的场景中,你可以通过将每个组件的解释方差比相加来选择要包含在你的模型中的组件数量,直到你达到大约 80%或 0.8 的累积总数。

最后,还有一点需要澄清:当您使用 PCA 组件时,您会失去一些解释模型结果的能力。一旦确定了模型中哪些组件是有意义的,你能做的最好的事情就是查看双标图,如上图所示,以显示每个变量如何为每个组件提供信息。

SQL(结构化查询语言)连接

假设您有一个数据库,它实际上就像一个 Excel 表或表格的集合。SQL 连接最容易通过示例来理解,因此示例表如下所示:

2 个 SQL 连接示例表

对于这个例子,我们假设有一些学生的信息在学生表中,但是他们不在注册表中,因为他们当前没有注册上课。此外,我们在学生表中没有注册课程的学生的信息。以下是每种类型的联接会告诉您的内容:

可视化 3 种类型的 SQL 连接

  • 内部连接:学生表和注册表中每个学生的注册+学生信息
  • 右加入:报名人数+学生信息只针对报名参加某个班级的学生
  • 左连接:学生信息+招生信息只针对学生表中的学生

因此,您希望在查询中使用的 SQL 连接类型(也就是您发送到数据库以获取数据的代码)取决于您希望了解的信息。如果您想知道注册上课的学生的电话号码,请使用内部联接。如果您想要每个学生的姓名和年份,以及他们所在的班级(如果他们碰巧注册了任何课程),那么您可以使用左连接。

我们现在正冒险进入模特界。

偏差/方差权衡

这很难向非技术观众解释,所以请耐心听我说。

偏差/方差权衡是一个经典的数据科学概念,它表明当您创建模型时,偏差和方差之间存在固有的权衡。我将从这两个术语的描述开始,然后简要解释为什么在这两个术语之间有一个权衡。

高偏倚和高方差的极端情况图解(图表来自https://www . kdnugges . com/2018/04/data-science-interview-guide . html/2)

偏差:具有高偏差的模型不能很好地“拟合”数据。也就是说,它的准确性在你用来制作模型的数据(训练数据)和你用来测试模型的数据上是低的【关于测试的更多信息,参见交叉验证部分】。高偏差表明您的数据中有遗漏,或者您使用了错误的模型!示例:您的数据看起来像二阶多项式(x ),但您尝试使用线性模型(x)进行预测,如图中的上图所示。

方差:方差高的模型对数据集自变量的微小变化非常敏感。这个问题与过度拟合有关,即您的模型与您用训练的数据拟合得太好,因为它将数据集中的噪声(或随机性)识别为重要,而实际上并不重要。因此,当你引入它以前没有见过的新数据时,它在预测中的表现很差。示例:将具有二阶多项式(x)关系的数据与 20 阶多项式 x ⁰进行拟合(见上图)。

这两个问题之间存在权衡,因为当您调整模型以更好地适应您的数据时,您会减少偏差,但您必然会增加方差。这种紧张关系存在于根据你收集的数据对模型进行过拟合和欠拟合之间。

决策树和随机森林

一个简单的决策树示例

左边的图片是你能做出的最简单的决策树之一。您从顶部开始,询问关于您的观察(数据集中的一行)的问题,并沿着树向下,直到您得到一个结果,这将是您的预测 y 值。

决策树很容易让你的数据超负荷。最糟糕的情况是,你的树的每个结果恰好代表数据集中的一个观察值。

为了解决这个问题,使用了随机森林模型。从本质上讲,一个程序会生成一堆决策树,每一棵看起来都有一点不同,这是由于模型进行决策分割的随机性。然后,对所有这些树的结果进行平均,以获得最终预测。这种方法可以让你制作更小的树,减少模型的方差,同时保持模型的准确性,这也是它非常受欢迎的原因。

最后,关于验证你的模型。

交叉验证

在评估任何类型的机器学习模型时,交叉验证都是最佳实践。下图显示了如果要执行三次交叉验证(三重交叉验证),将如何分割数据集。

拆分数据集以进行交叉验证

对于上面的每个数据分割,您将在列车段上构建您的模型,并在测试集上测试您的模型(生成预测)。然后,您可以对每个分割的准确性分数进行平均,以获得模型实际上有多好的图片。数据科学家这样做是因为他们可以使用更少的数据总量,并可以在模型以前没有见过的更大范围的数据上测试他们的模型。

当雇主问这些问题时,他们似乎想评估两件事:

  1. 你对这个概念了解到足以分解它吗?
  2. 你能以直观、简单、简洁的方式解释棘手的技术概念吗?

我希望这篇文章有助于你了解概念的分解,无论你是试图自己理解它们还是更好地向他人解释它们。如果你碰巧有一个 5 岁左右的孩子,如果你能向他们解释其中的一个并让我知道它是如何进行的,那将是令人惊讶的。(我猜他们可能只是有点困惑。)此外,如果您对这些主题还有任何不清楚的地方,请告诉我!

感谢阅读!点击这里查看我在这个迷你系列中的第二篇文章:

[## 向一个五岁的孩子解释机器学习模型

尽可能简单地解释 ML 模型是如何工作的

medium.com](https://medium.com/@megandibble/machine-learning-models-explained-to-a-five-year-old-f2f540d9dcea)

【www.canva.com】上制作的 所有图形

数据科学咨询:从想法到部署

原文:https://towardsdatascience.com/data-science-consulting-from-idea-to-deployment-ea8efed8c388?source=collection_archive---------32-----------------------

为企业主解释数据科学软件开发项目流程。

如果你知道如何挖掘,你的数据可能是金子。大多数企业主都知道应用数据科学来获得竞争优势的价值和用途。数据挖掘产生未被发现的洞察力,这些洞察力导致成功商业战略的行动计划。为了充分利用应用数据科学,拥有有用的数据以及业务人员了解典型的数据科学开发流程非常重要。

数据科学推动创新

让我们探讨两个案例研究,一家零售/餐饮连锁店和一家医疗保险公司如何使用应用数据科学和机器学习来进行数据挖掘,并发现对业务战略创新有用的见解。

零售/餐饮连锁店案例研究

一家连锁零售店和餐馆收集了多年的库存和销售数据。该数据库用作数据科学顾问用来训练机器学习模型的信息资源。该顾问帮助企业主确定并实现战略目标。

现有的数据库是用于生成需求预测模型的资源,以便对未来的销售进行预测。一个自适应选择性模型通过分析过去两年半的零售销售数据来预测未来一周的需求。数据挖掘使用结合外部数据源的自回归模型。这使得在任何时候对任何特定产品的需求进行预测成为可能。通过使用这一解决方案,该公司能够优化库存和仓储,根据需要随时提供可用的供应品,并且更加经济高效。

医疗保险公司的案例研究

在这种情况下,目标是确保对高度个人化医疗保健数据的授权访问,以遵守健康保险便携性和责任法案(HIPAA)的规定。该公司被建议使用多模式生物认证,要求用户通过面部和语音识别才能获得授权访问。

数据科学顾问建议为系统添加增强的安全功能,包括用于驾照验证的光学字符识别 (OCR),防止面部识别欺骗的深度学习系统,以及基于 NLP 的安全挑战。这些改进促成了企业验证即服务(EVaaS)系统的创建。

数据科学咨询项目流程

企业主想知道如何使用技术来实现业务目标。他们对技术工作的细节不太感兴趣。他们更感兴趣的是在其业务流程中实施应用数据科学的成本和结果。

以下是数据科学软件开发项目的步骤。

步骤 1:收集数据

数据科学顾问了解客户和客户的顾客的需求。咨询师会发现客户的问题。推荐的解决方案能产生最大的价值,并满足客户的顾客的需求。顾问必须了解数据科学如何应用于业务模型,以及哪些数据将支持实施策略。

如果有多年来收集的现有数据可供使用,这对训练机器学习模型很有帮助。顾问评估数据以从战略角度理解其结构和有用性。

如果没有可用的数据库,那么数据科学顾问将探索客户的目标和主要用例。这些是数据收集技术设计的基础。获取数据的选项包括直接收集数据和调查是否存在任何第三方数据库,这可能是有用的。或许,存在合适的预训练模型。如果他们这样做,这将大大减少模型训练所需的费用和精力。有可能生成合成数据来代替真实数据。

使用预训练模型,精确度会根据特定于新项目的数据输入进行调整。随着模型的“学习”,结果会提高。在开始时,不可能预测机器学习模型的准确性和质量。这需要一个反复的过程,在开发过程中使用实验和校准结果。

给数据科学顾问大约一周的时间来评估业务输入和目标。作为项目合同前建议阶段的一部分,这种评估通常是没有成本的。

第二步:设定目标

业务目标是衡量改进的标准。技术目标是衡量系统性能的基准。成功指标是两者的结合。

使用需求预测时,依赖于客户行为的商业目标,如“增加 20%的销售额”没有保证。可以保证的是技术目标,比如“销量增加 20%需要多少库存。”

例如,客户可能需要一个预测模型,该模型基于对过去五个月的数据的分析,以 70%的准确度预测未来一周的产品需求。这一预测将是创建额外的测量、任务和假设的基础。

正如我们在零售/餐饮连锁店项目中看到的,目标是优化库存、仓储和采购。数据挖掘从过去的销售统计数据允许顾问预测未来的商品购买。对单个数据集的分析解决了库存、仓储、采购以及预测销售收入的问题。

每个任务都是从一个假设发展而来的,例如“通过使用销售预测来改善库存管理”来为每个项目设置适当的库存水平。这个假设提供了一个可以遵循的指南。通过评估在探索回答假设的数据集合时完成的结果,决策变得必要。

如果假设是正确的,那么机器学习模型经历微调以提高结果的准确性。Substantia 致力于此。

如果假设是不正确的,并且表明将假设应用于特定数据集没有价值,那么方法、假设或数据集必须改变。

需要什么样的精度水平?

所需的精确度是不可预测的,因为它取决于数据集。由于花费的预算对业务目标来说是成本有效的,因此准确性是有限的。过度花费以达到高于必要的精度水平是一个糟糕的策略。没有必要要求不能为企业创造增值结果的系统准确性。

阶段 3:构建循环

通过将经典的敏捷原则与跨行业数据挖掘流程(CRISP-DM)模型相结合,可以管理数据科学项目。

标准周期专注于一个假设,以生成任务和结果的精确度。这个周期是一组四次冲刺,每次持续一周。在理解业务和数据的前两个冲刺阶段,第一个假设形成了基线,以此为基础,用未来的假设来改进结果。

通过适当的假设,使原始数据具有可操作性是可能的。为此,必须采取以下步骤:

  • 数据回顾:了解、访问、探索数据集的格式和数量。
  • 报告:通过识别初步的洞见,创建一份数据评审报告。
  • 数据认证:验证数据集的完整性和质量。
  • 行动项目:为建模建立一个可操作的数据集。

在上面给出的需求预测示例中,数据经过了检查、清理和组织。这些数据决定了最常出售商品的基准。并非所有数据都具有相同的值。为了获得有用的结果,用于模型的数据必须与提出的确切假设相关。数据科学顾问组织了一个有代表性的数据样本进行分析。对所有数据的分析并不是一蹴而就的。

多模态生物识别安全系统示例中,一个目标是通过实时比较驾照照片和自拍照片来更好地识别用户。面部识别的预训练模型有助于建立基线。

使用驾照数据集带来了一个挑战。许可证的图像质量远低于高分辨率自拍文件和用于模型预训练的面部图像。因为目标是比较这两种类型的图像,所以数据集必须符合假设的要求。

多少数据才够?

拥有太多的数据永远不会发生,因为从大型数据库中选择一个子集样本是可能的。但是,如果没有足够的正确类型的数据,训练过程将失败,模型将无法学习。如果需要更多的数据,我们会收集数据或转向不同的假设。

如果一个假设由于缺乏足够的数据来检验而失败,那么,我们用一个新的假设重新开始这个循环。这种类型的失败是固有的和不可避免的风险。

在零售/餐饮连锁店项目中,了解不同类型产品的销售情况至关重要。需要的数据是每个时期的购买量,以及在销售前这些物品在仓库中的库存时间。模型分析的项目越多,获得的准确性就越低。然而,为不同的项目重新训练模型是可能的。这改善了结果。

在选择用于训练模型的数据之前,决定如何测试模型的准确性是一个明智的策略。可以将大多数初始数据集随机分成两组。一个是培训用的,一个是测试用的。

例如,要以 97%或更高的准确率预测一个月的销售额,假设模型需要五个月的历史销售数据。一旦这个假设有了足够的证据,模型就成功了,预测系统就可以部署了。

阶段 4:部署模型

模型部署分为两个阶段。第一阶段是使用真实数据在测试环境中部署模型。该模型进行短期预测,并检查准确性。例如,如果历史数据是前五个月的交易,那么合适的预测周期可以是一周或一个月。使用一年的预测期是不合适的,因为这将引入不准确性,并且需要太长的时间来验证。

模型通过分析测试后,部署提升到实时生产环境。

在零售/餐饮连锁店的案例中,需求预测模型在测试环境中的测试服务器上运行了足够长的时间,证明其平均准确率为 97%。然后,它与公司范围的系统集成,供每个地点使用该地点的相关数据。

结论

数据科学软件开发项目的四个阶段需要随时重复业务流程和新的统计方法,使特定的机器学习模型过时。幸运的是,数据科学随着许多基于云的服务和预训练模型的出现而继续发展,这很有用。这使得软件开发人员更容易创建新模型并测试它们。与现有企业软件的集成变得越来越容易,软件项目交付速度更快,从而缩短了新部署的上市时间。

数据科学速成班

原文:https://towardsdatascience.com/data-science-crash-course-6d8e03390f6b?source=collection_archive---------19-----------------------

让我们在 2020 年学习数据科学

2020 年到了,是时候学习数据科学了!这一数据科学速成课程是开始数据科学之旅的快捷方式。我们的目标是在你现在拥有的任何一台计算机上立即开始编程。仅仅通过阅读这篇文章,你将学会开始编码和分析数据的所有必要术语。我们走吧!

数据科学速成班。2020 年学数据科学吧!

开始前请注意:

如果您想查看本课程的完整课堂讲稿以及视频讲座,请访问数据科学 Rush 网站。

1.介绍

我们将 Python 用于数据科学

Python 是初学者和专家的完美语言,因为它的流行和清晰的结构。它很容易掌握,而且由于社区的存在,您将能够在您的第一次实验以及最近的机器学习研究中使用它。

数据科学速成课程概述

首先我来说说设置你的环境。在我们的例子中,这意味着在你的计算机上安装 Anaconda,这将允许你快速运行 Jupyter 笔记本,在那里你将直接从你的浏览器运行简短的 Python 程序。所以从现在到你的第一个节目,你可能需要 15 分钟。

那么要做数据科学,你需要一点数学知识。我将复习线性代数和统计学中的基本术语,这是你在学习过程中需要用到的。这些包括:

  • 向量及其运算
  • 矩阵及其运算
  • 均值、方差、相关性
  • 随机变量,相关性,条件概率,
  • 朴素贝叶斯定理

然后我们可以直接处理数据:

  • 正在导入文件。txt,。json,。xml,。超文本标记语言
  • 在 NumPy 数组、pandas 数据帧和其他结构(列表、字典)中存储数据

获取和处理数据

我还将讨论如何以及在哪里可以获得有趣的数据。因为数据科学是关于数据的,所以你应该找到一个令你兴奋的数据集。一些例子包括:

  • 书籍和文件,例如来自古腾堡项目
  • 抓取网站(下载体育或财经新闻)
  • Kaggle 数据库
  • Twitter API

数据科学中的标准技术

拥有数据是数据科学的第一步,一旦我们有了数据,我们就可以开始工作了。标准技术包括:

分类:我们有两个或更多的类别(标签),我们想根据这些标签对对象进行分类。我们在这里讨论监督学习和标准技术,包括 KNN,朴素贝叶斯,决策树,XGBoost,神经网络。

聚类:我们没有任何标签,但我们仍然想对我们的数据进行分类。我们通过不同的相似性度量对数据进行聚类,从而创建标签。我们在这里讨论无监督学习和标准技术,包括 k-means 和 DBSCAN。

神经网络本身就是一个独立的话题。它们背后的基本思想是将一个问题简化成可以被“神经元”单独处理的更小的部分。我将介绍像 Keras 和 Tensorflow 这样的基本框架,然后还将讨论 MNIST 和其他一些很好的问题。

如果你想可视化数据或者更好地理解数据,降维是必须的。有时,您只想在 2D 绘制 4D 数据,然后必须对其进行转换,以捕捉信息的本质。标准技术包括主成分分析和 SVM。

对于数据科学的商业应用来说,可视化数据非常重要。最后,你想把你的发现传达给其他人,最好的方式是用一个漂亮的图表展示给他们,每件事都很清楚。我们将讨论 plotly 和 Dash。

在这个速成课程之后,您将准备好解决基本的数据科学问题,并自学更多内容。

2.蟒蛇和朱庇特笔记本

Anaconda 是一个针对数据科学和机器学习应用的免费开源发行版,包括 Python 和 R 编程语言。它旨在简化包的管理和部署。

好吧,这听起来可能很复杂,但事实是,这一切都是为了给你一个可以编码的框架。你需要一个编译器来运行 Python 代码,想想“运行”你的程序的文本编辑器,Anaconda 给了你更多。它为您提供了您可能想要使用的所有软件包和 Jupyter 笔记本。

不过还是从安装开始吧。让我们去 www.anaconda.com下载最新版本:

Anaconda 网站

既然你有了它,是时候深入解释它是如何工作的了。

如果你现在打开 Anaconda,你会看到这个屏幕:

巨蟒领航员

Jupyter 笔记本

现在让我们来看看 Jupyter 笔记本。其余的我们可以暂时忘掉。让我们打开 Jupyter 笔记本,你会看到下面的屏幕:

Jupyter 笔记本

点击右上角的 New 并选择 Python3。你会明白的

Jupyter 笔记本

还有…你可以走了!这是一个命令行,在这里您可以开始用 Python 编写代码,然后通过单击 Run 来执行。

Jupyter 笔记本是一种非常方便的编写代码和记录不同实验的方式。它不太适合较大的项目,但对于用数据运行快速实验或训练神经网络来说,它是完美的。

您通常通过“导入…”来导入包/库。包是现成的代码片段,让您不必自己编写所有内容,从而节省时间。所有东西都有包装:

  • 导入数据(json)
  • 处理数据(熊猫、NumPy)
  • 文本分析
  • 神经网络(Keras、PyTorch、Tensorflow)
  • 可视化(破折号)

因此,通常情况下,在您自己做任何事情之前,您应该检查是否已经有相关的软件包可用。当然,有时候你会想自己动手,只是为了学习。

最后,JupyterLab 也是一个很棒的工具,它基本上只是一种同时管理多个 Jupyter 笔记本的方法,因此如果你想组织你的代码,它非常有用。

现在,您已经拥有了用 Python 编写第一个数据科学实验所需的一切。

3.线性代数与统计

现在我们要复习数据科学所需的数学。

数据科学线性代数

线性代数是关于向量和矩阵的操作。这既是符号,也是操纵对象的有用方式。Vector 的核心就是写在一列(或一行)中的一组数字:

矢量

您可以对向量执行类似加法的运算,方法是将各个项相加,它们需要具有相同的长度。你可以用一个标量乘以一个向量,这个标量是一个实数,通过把每个条目乘以这个实数。

现在,向量通常被认为是在某个更大的空间中,例如像平面上的[1,2],在那里它们表示坐标。突然间一切变得非常直观。此外,很明显,你可以测量向量之间的距离(平面上两点之间的距离)或尝试计算两个向量之间的角度。

当你把数据写成向量,然后对它们进行运算以测量它们时,这在数据科学中非常有用。线性代数方法是必要的。

向量概括为矩阵,n 乘 m 的阵列,其具有以行和列书写的 n 乘 m 个条目:

[数]矩阵

同样,您可以添加相同形状的矩阵,将它们乘以一个标量,并执行其他操作。例如,您可以将某些兼容形状的矩阵相乘。这对于数据科学中的许多应用来说是至关重要的,所以在进一步学习之前,你一定要练习乘法矩阵。

这就是你从线性代数开始所需要的。从某种意义上来说,张量是矩阵向更高维度的推广,值得一读。

统计数字

统计学是关于数据的收集、组织、显示、分析、解释和呈现。这需要将概率与理论结合起来,因为你需要通过从某些分布中取样来对未知数据建模。

重要的概念是方差和偏差。关注维基百科:

  • 偏差误差是来自学习算法中错误假设的误差。高偏差会导致算法错过特征和目标输出之间的相关关系(欠拟合)。
  • 方差是对训练集中的小波动的敏感性的误差。高方差会导致算法模拟训练数据中的随机噪声,而不是预期的输出(过拟合)。

换句话说,偏差与样本数据相对于整个数据集太小有关,而方差则与过于关注数据中的每个微小变化有关。这两个概念之间有一个权衡,通常情况下,我们用多大的偏差换取多大的方差。

为了开始操作机器学习模型,您需要学习概率论的基础知识,例如

  • 随机变量
  • 条件概率
  • 朴素贝叶斯定理

这些概念对于理解数据科学和机器学习背后的基础数学至关重要。学习它们的最好方法是做几个练习,计算特定情况下的实际概率和矩阵。网上有大量的书籍和资料,所以我不会在这里复制。

4.处理数据

最后用 Python 做点有数据的事情吧。我将回顾处理数据的基本技术。你如何储存信息?我们已经知道我们想要用向量和矩阵来表示我们的数据。

导入数据

我们可以从导入文件开始。你的电脑上可能已经有了

  • 短信
  • Excel 电子表格
  • jsons
  • XML
  • 战斗支援车

你可以把它输入到 Jupyter 笔记本电脑中。

大部分是通过“open (…)”完成的,例如:

在 Python 中打开 CSV

看看 Python 编程或者真正的 Python 来了解更多。

其他形式的文件也是如此。

我们已经知道,我们希望以数组(矩阵、向量)的形式表示数据,所以让我们看看如何用 Python 来实现。

存储数据

现在的问题是如何储存它们。有几种标准的方法可以做到这一点。

Numpy 数组是一种表示数组的简单方法,NumPy 是进行数据科学的最佳库之一。请看这里的官方文件。如果你想定义一个向量[1,2,3],这里有一段 Jupyter 笔记本的摘录:

NumPy 数组是一个伟大的数据科学工具

又快又简单,对吧?

Pandas 是一个开源的、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。

DataFrame 是一种电子表格格式,是 Pandas 的一部分,也允许处理数据。这个例子展示了如何使用它来创建一个简单的电子表格:

数据科学的熊猫数据框架

它真的很高效,用起来也很棒,特别是如果你以前广泛使用过 Excel,这一切都会非常熟悉。

除了这两个非常高效的包之外,Python 本身也提供了过多的数据结构。看看这里有多少个。举几个在处理数据时很方便的例子:

  • 列表
  • 字典
  • 元组

最好的学习方法就是摆弄它,所以现在就打开你的 Jupyter 笔记本吧!

5.获取数据

数据对于做数据科学至关重要。为了开始使用它,我们通常必须先清洗它。我们来讨论一下怎么做。

如果你的电脑上没有任何有趣的数据,那么最好的方法就是从网上搜集信息。用 Python 处理像'请求'和'漂亮的声音'这样的包(清理数据)非常容易。

大多数网站很容易使用请求,这只是一个清理问题。

用于数据科学的抓取 web

你可以从网上下载有用的数据。我们生活在数字世界,几乎任何东西都可以在网上找到。大多数数据可以通过抓取从不同的网站获取。这种获取数据的方式非常令人满意,但需要时间,因为您必须一路清理 HTML 代码。

尤其是财务数据非常容易获得。你可以用像 Pandas DataFrames 和 NumPy 数组这样的工具来分析它,我们在上一篇文章中已经讨论过了。

假设你想从纳斯达克获取信息。使用 GET,您可以立即获得 HTML 代码:

请求 Python 用于数据科学

然而,正如你所看到的,这是远远不可读的。下一步将是使用 BeautifulSoup 使其变得漂亮:

数据科学的美丽小组

这是更具可读性,但你仍然需要投入工作,从中提取一些信息。这是一个很好的开始方式。

查看 BeautifulSoup 文档了解更多详情。

搜集很棒,因为你可以通过研究更多关于你的爱好的信息来学习数据科学。比如说,如果你喜欢视频游戏,并且想要分析不同的统计数据,那么抓取是最好的选择。您将了解更多您感兴趣的特定网站。

互联网上可用的数据集

获取数据的另一种方法是访问已经准备好的数据集。这方面的例子数不胜数,我在这里只讨论一些主要的数据集。

古腾堡计划是下载书籍的一个很好的来源。您可以访问版权过期的旧书。想想莎士比亚。

Twitter API 是另一个奇妙的来源。注册一个开发者账户,然后你就可以开始玩自动化了。例如,你可以提取关于一个标签的数据,以及人们对最近事件的反应。这对于社会科学或市场营销的研究尤其重要。

Kaggle 是数据科学竞赛的绝佳资源,也是现成的数据集的绝佳资源,你可以从他们的网站上直接免费下载。大公司经常在那里宣布他们的竞争,所以你会看到在更广泛的数据科学社区中有什么有趣的东西。

为数据科学建立数据集

除此之外,还有一堆数据集用于对机器学习模型进行基准测试。我不会在此详述,但我想向您介绍几个值得了解的例子:

  • MNIST——手写数字的数据集
  • CIFAR-10–10 类 60,000 张图像
  • ImageNet —根据 WordNet 层次结构组织的图像数据库
  • IMDB 评论 —来自 IMDB 的电影评论数据集
  • 维基百科——巨大的文本资源

这就是这节课的全部内容。现在是时候打开你的 Jupyter 笔记本,玩你最喜欢的数据集了。

实践永远是学习数据科学的最佳途径。

6.分类和监督学习

我们已经学习了存储数据和从哪里获取数据。现在让我们来看看数据分类的标准技术,这是数据科学的基本应用。

什么是监督学习

假设您有贴有标签的数据。想想有描述的动物图像,不管是猫还是狗(分类问题)。另一个例子是关于电子商务中客户的数据,包括年龄组、职业、过去购物(回归问题)。监督学习处理这种类型的问题,其中你将标签附加到数据上,以便你可以使用这些标签作为指导来“监督”你的算法的学习过程。

分类是根据包含标签已知的对象的训练数据集,识别新对象属于哪个标签(类别)的问题。例子是将给定的电子邮件分配到“垃圾邮件”或“非垃圾邮件”类别,以及基于观察到的患者特征给给定的患者分配诊断。

回归是基于其他特征或变量估计一个值(“连续标签”)的统计过程。

分类和回归算法

K 近邻(KNN) 是分类和回归的最标准例子。我们正在寻找与我们开始的给定例子最接近的物体,并基于此贴上标签。k 代表我们正在寻找的一些邻居。看看 KNN 的这个实现,当 K=2 时,使用 sklearn ,这里我们要理解平面上的 6 个点:

KNN 与 sklearn

朴素贝叶斯是一种标准的方法。您简化了一种情况,并假设数据中的动作/对象是独立的(在概率意义上),因此您可以使用贝叶斯定理计算概率。形式上,“朴素贝叶斯”方法是一组基于应用贝叶斯定理的监督学习算法,其“朴素”假设是给定类变量值的每对特征之间的条件独立性。您可以再次使用 sk learn来实现它,例如,在本例中,使用标准虹膜数据集,并使用正态分布(GaussianNB)来模拟条件概率:

带 sklearn 的朴素贝叶斯

当您试图预测标签的精确值时,会使用回归。所以这是一个分类问题的连续变体。这对于试图根据生活在一个人附近的人来确定他的收入来说是完美的。

线性回归是最简单的,即假设您的数据可以用线性函数来建模。有太多的回归模型是基于不同的函数,最流行的是 sigmoid 和 ReLu(修正的线性函数)。

同样,使用 sklearn 很容易实现线性回归。看看这篇教程,了解如何在 Python 中使用线性回归。

另一种分类技术是决策树,在这种分类技术中,您可以尝试使用问答格式的数据,如:

  • 这个人住在公寓还是房子里?
  • 这个人三十多了吗?
  • 这个人有孩子吗?

树可以自动生成。例如,您可以使用 sklearn 构建一个简单的决策树,将平面分成两个区域:

使用 sklearn 的决策树

构建树很棒,因为这样你就可以通过投票将几棵树连接成一个更大的模型。考虑每个决策树的决策,并且对所有决策进行加权(在最简单的情况下是算术平均)。这种方法被称为集成学习。

更高级的算法

XGBoost 是另一种标准技术,值得一读。官方文档写着:“XGBoost 是一个优化的分布式梯度增强库,旨在高效、灵活和可移植。它在梯度推进框架下实现机器学习算法。XGBoost 提供了一种并行的树提升(也称为 GBDT,GBM ),可以快速准确地解决许多数据科学问题。相同的代码运行在主要的分布式环境(Hadoop、SGE、MPI)上,可以解决超过数十亿个例子的问题。”您可以将 XGBoost 视为更高级的决策树。

当涉及到监督学习时,神经网络通常是最终的工具。你建立了一个能够根据过去的例子学习标签的架构。我很快会谈到它们,但首先我会解释当你没有先验标签时该做什么,这就是如何进行无监督学习或聚类。

7.聚类和无监督学习

我们学习了监督学习,以及当您有一个带有标注的数据集时该做什么。现在让我们看看没有提供标签的数据集,谈谈无监督学习。

什么是无监督学习

假设我们有原始数据,如与营销相关的社会统计数据。例如,您试图了解谁在您的电子商务网站上购买了 MacBook,并且您希望找到相似的人。或者你正在通过一个在线平台卖票,你试着把你的客户分成不同的类别,这样你就可以向每一组传达一致的信息。

为了聚类数据或把你的数据分成不同的类别(这不是事先给定的!),你必须使用一种聚类算法。sklearn 将再次提供帮助。让我们用一个来自 sklearn 的代码示例来回顾两个基本方法。

数据科学中的聚类方法

k-means 是聚类中的基本技术。这里的“K”代表您想要的集群数量。这是任意的,你选择这个参数,但是有一些方法(见肘方法的例子),在这里你可以自动推断出最佳的聚类数。你可以使用 sklearn 将著名的虹膜数据集分组。例如,这将是 3 个集群的结果:

k 均值聚类

如果你想让成为一个简单的 k-means 用例,那么你可以简单地将平面上的点分成 2 组。

sklearn k-means

k-means 和其他技术的关键是有一个度量,即一个明确定义的距离,通过它我们可以测量数据集中对象的相似程度。在大多数来自电子表格的实际数据中,度量很容易定义,我们只需要空间中向量之间的通常距离,因为数据是纯数字的。当然,你可以让它变得更复杂,特别是如果你的数据有噪音或者你试图提取真正隐含的数据,但是你不需要考虑例如如何将一个单词嵌入向量空间。

另一种数据聚类算法是基于密度的带噪声应用空间聚类,简称 DBSCAN。跟随 sk learn:“DBS can 算法将集群视为由低密度区域分隔的高密度区域。由于这种相当一般的观点,由 DBSCAN 发现的聚类可以是任何形状,这与假设聚类是凸形的 k-means 相反。DBSCAN 的核心部分是岩心样本的概念,岩心样本是位于高密度区域的样本。因此,聚类是一组彼此靠近的核心样本(通过某种距离度量来测量)和一组靠近核心样本的非核心样本(但它们本身不是核心样本)。”这也是标准技术之一,乍听起来可能很复杂,但原理很简单:

DBSCAN 正在运行

如果你想知道如何在一个例子上实现 DBSCAN,看看这里的信用卡数据集和一个简短的教程。

数据科学是实用的

最好的学习方法是实践,所以我强烈建议你现在打开你的 Jupyter 笔记本,继续 Kaggle 搜索一个你可以在实验中使用的数据库。上面的例子中有很好的数据集:

  • 信用卡数据
  • 虹膜数据集
  • 平面上的点

你还可以在网上找到大量其他现成的数据集,包括干净的和原始的。

聚类经常出现在自然界中,如果你要为一个更大的组织工作,比如银行或保险公司,你肯定会用到它。你试图将未标记的数据归入可以解释的类别,这是很自然的。然后,如果你设法通过聚类来建立类别,当你试图把新的对象放入已经存在的来自聚类的组中时,你将回到新数据的分类问题。

归根结底,数据科学就是分类、聚类并从中提取信息。只是需要时间去掌握。

8.神经网络

我们将讨论神经网络以及如何使用它们对数据进行分类。这将是对神经网络的一个温和的介绍,因为我假设你从未使用过它们。

什么是神经网络

神经网络从感知器开始,以人脑中的单个神经元为模型。你可以把它想象成一个接一个的函数。有了输入数据,然后应用一个激活函数,可以是线性函数、ReLu 或 sigmoid 函数或任何其他函数,然后将数据传递到下一个节点,并在给定节点再次应用激活函数。这一切都是分层进行的(这是更一般的前馈网络描述):

前馈神经网络

所以让我们从一个感知器的例子开始。我们看看它们是如何用 sklearn 实现的,然后我们切换到 Keras 框架。 Keras 是一个高级神经网络 API,用 Python 编写,能够运行在 TensorFlow 之上。 TensorFlow 是机器学习的端到端开源平台。它有一个全面、灵活的工具、库和社区资源生态系统,让研究人员推动 ML 的最新发展,开发人员轻松构建和部署 ML 驱动的应用程序。

这里有一个关于 sklearn 的简单例子,我们尝试使用感知器来拟合数字:

Sklearn 感知器神经网络

如你所见,代码简短而简单,但细节在数学中。在这一点上,你应该回到一些线性代数,以了解发生了什么。

以下段落更具技术性,但我尝试将所有术语放在一起(通过链接,您可以了解每个概念的更多信息):

形式上,多层感知器是一类前馈神经网络。前馈神经网络是其中节点之间的连接不形成循环的神经网络。反向传播是一种用于训练监督学习的前馈神经网络的算法。反向传播针对单个输入/输出示例计算损失函数相对于网络权重的梯度。在这种情况下,理解梯度下降也很重要,这是一种用于寻找函数局部最小值的算法。

让我在这里指出,深度学习是机器学习,但我们使用至少 3 层神经网络的神经网络。

Keras 中的神经网络

现在让我们回到例子。正如我提到的,Keras 和 Tensorflow 是目前最流行的机器学习框架,Keras 特别容易上手。当你建造连续的模型时,这有点像乐高。让我们来看看这个例子,再次看到多层感知器这次是用 Keras 建造的:

Keras 神经网络

我不会在此详述,但这里发生了什么:

  1. 我们进口 Keras。
  2. 我们生成一些随机数来训练一些数据,然后进行测试(X,y train/test)。
  3. 我们建立了一个序列模型,但增加了 3 层。其中两个具有 ReLu 作为激活函数,最后一个具有 sigmoid。我们也使用 dropout,但我不会在这里讨论它,尽管它值得阅读更多。
  4. 然后,我们对模型进行编译,使其适合我们的训练数据。
  5. 我们根据测试数据对模型进行评估。

总而言之,这就是神经网络和机器学习的工作原理:

  1. 通过导入包、框架和数据(用于训练和测试)来设置阶段。
  2. 建立一个模型。
  3. 使模型符合训练数据。
  4. 根据测试数据评估模型。
  5. 调整模型的参数,调整数据,重复。

由于数据科学是实用的,并且都是关于测试和尝试的,现在轮到你了。打开你的 Jupyter 笔记本,玩数据。我还推荐阅读如何将 Keras 用于 MNIST 数据集— 这里有一个很好的教程。

9.降维

让我们来讨论一下如何减少数据中的一些维度,以便可以可视化和更好地理解。

主成分分析

假设您想要绘制数据,但您的数据有太多的维度,无法立即完成。降维来了。这些方法允许您只查看与您最相关的某些维度的信息。

标准技术是 PCA,即主成分分析,它着眼于特征向量(奇异值)并投影到那些捕获大部分数据的向量。例如,你可以把 4D 变换成 2D,通过投影到 2D 空间,由两个最大的奇异值构成。

让我们看一个简单 PCA 的 sklearn 代码与 NumPy 数组一起使用:

带 sklearn 的 PCA

这里我们只使用 2 个分量的 PCA,我们得到我们空间的奇异值。要真正理解发生了什么,您应该阅读一些资料:

数据科学中的降维

降维很重要,因为你想要去除不必要的数据,电子表格中不相关的列,以便以最有效的方式应用数据科学算法。较少的参数更容易控制和操作。

还有许多其他方法用于降维。更高级的包括例如流形学习。流形学习是一种非线性降维方法。这项任务的算法是基于这样的想法,即许多数据集的维数只是人为的高。t-SNE 是流形学习中最著名的技术之一你可以在 sklearn 文档中读到更多关于它的内容

总而言之,如何降低维度完全取决于您正在处理的数据。有时候,从一开始就很明显,为了获得更好的结果,应该忽略几列或几行。有时很难看出什么是真正重要的,然后你不得不尝试一些降维算法来解开数据和对象之间的依赖关系。

但这就是为什么数据科学是实用的——不摆弄数据就没有理解。

10.(英)可视化(= visualization)

最后,我将讨论如何展示一个数据科学项目,使其对他人具有吸引力和启发性。换句话说,让我们来谈谈观想。

如何在 Python 中可视化

我首先写道,一个记录良好的 Jupyter 笔记本非常适合可视化,特别是如果你想向有技术背景的人展示你的工作。当你为工作面试做测试题时,这通常是雇主期望你发出的。

否则,如果你与非技术人员交谈,你将需要更多的视觉方式来展示你所取得的成就,比如:

  • 使用 plotly 或 matplotlib 绘制数据
  • 创建热图
  • 在表格中显示统计数据

下面是一个使用 matplotlib 的简单绘图示例:

Matplotlib 图

它的代码是:

Python 中的 matplotlib

总的来说,你可以用 plotly 创造出令人惊奇的。下面你可以找到一个来自 plotly 的可视化示例,全部用 Python 完成:

对 plotly 的良好掌握会让你做真正伟大的事情。

plotly 更进一步的是 plotly 的 Dash ,它允许你用 Python 构建网络应用。因此,向任何人展示真的很棒,无论是技术人员还是非技术人员。你可以在这里看看【Dash 有什么可能。例如,这个交互式仪表板是在 Dash 中完成的:

Python 中的仪表板

你可以在这里访问它。

如你所见,Python 为你可视化和展示你的作品提供了惊人的选择。现在轮到你在 Jupyter 笔记本上玩了。

分享你的开源项目

分享你的项目的最好方式肯定是 Github。上传您的代码和一份精心编写的文档,并与您的同事分享以获得反馈。当然,如果你在为一家公司工作,你不能真的这样做,但是如果你正在为你自己的开源项目工作,那么 Github 是一个分享你的工作的完美方式。数据科学有一个很棒的社区,所以你肯定会听到反馈并从其他人那里学到更多。

这就是数据科学速成班的全部内容。

我希望您喜欢它,并学到了有用的东西,现在您已经准备好解决一些数据科学问题了。

请在评论中告诉我你的反馈,以及你将来还想学习什么。

祝您的数据科学之旅好运!

P.S .如果你想看 本课程的视频版本,可以看看我的 YouTube 频道 :

YouTube 上的数据科学速成班

附言:如果你想了解更多关于数据科学的知识,这里有一些我写的可能有用的文章:

数据科学工作

最后,如果你想了解成为一名数据科学家意味着什么,那么看看我的书数据科学工作:如何成为一名数据科学家,它将指导你完成这个过程。

谢谢大家的支持!

深度线性回归

原文:https://towardsdatascience.com/data-science-crash-course-in-depth-linear-regression-fd06511f586c?source=collection_archive---------25-----------------------

数据科学速成班

从线性回归开始理解算法。

“随机数据点及其线性回归”——摘自维基百科

本月早些时候, Edward Qian 和我开始为有抱负的数据科学家编写一套综合课程,这些课程可以在我们的网站【www.dscrashcourse.com】上找到

我将把稍加修改的课程交叉发布到 Medium 上,让更多的观众可以看到。如果你觉得这些文章很有帮助,请到网站上查看更多的课程和练习题!

算法是计算机解决特定问题时可以遵循的一组规则。在建模的背景下,每种算法将使用不同的方法来获得最能代表目标变量的函数。回想一下,回归算法探索了自变量和一个连续因变量之间的关系。

线性回归

线性回归对因变量和至少一个自变量/解释变量之间的线性关系进行建模。有一个解释变量的线性回归模型称为简单线性回归,而有多个变量的线性回归模型称为多元线性回归

当对训练集进行拟合时,线性回归模型估计未知参数,以量化自变量的线性变化对平均因变量的影响。

系数

是估计的参数。有了这些系数,只要我们知道解释变量,我们就可以估计未来观测值。

ϵ (读作ε)是误差项,也称为残差。误差是真实目标变量和预测目标变量之间的差异。

系数是如何计算的?

简而言之,我们选择“最佳”系数来最小化误差项。

做这件事有几种不同的方法。标准方法之一是使用普通最小二乘估计 (OLS)方法。OLS 方法做了几个假设:

  • 可以使用线性关系对数据进行建模,类似于上面所示的形式
  • 误差项 ϵ 是独立同分布的,总体均值为零
  • 误差项的方差必须是常数;它不能是目标的函数
  • 独立变量与误差项不相关,也彼此不相关
  • 理想情况下,误差项应该是正态分布的——这使我们能够可靠地计算置信区间

在这些假设下,我们可以构建一个封闭形式的公式来计算使误差项最小的系数。

推导从一个目标开始:最小化残差平方和。

回想一下,我们可以将误差度量为yXβ

误差平方和可以定义为系数的函数。在矩阵符号中:

函数 S 使用我们的 beta 参数计算误差平方和。

这是 β 的二次函数,所以如果我们对 β 求导就能找到全局最小值。然后我们可以通过将β设为 0 来求解^。

将左侧设置为零。我们的 OLS 假设允许我们假设 X 具有满列秩,这使得 XX 可逆。

模型解释

线性回归的简单性是一把双刃剑。线性模型非常容易解释和理解,但也是对现实世界复杂性的简化。大多数数据集也会违反 OLS 方法的假设。

模型解读的重要性不可小觑。能够解释系数使我们能够使用模型来推动业务战略,量化我们努力的效果,并给予利益相关者对我们算法的信任。

我们用一个例子来演示一下。房地产经纪人吉姆训练了一个线性回归模型来预测房价,作为平方英尺和年龄的函数。让 y 代表房子的价格, x 1 代表平方英尺, x 2 代表以年为单位的年龄。

他使用上述公式计算系数,并得出他用来预测 house 的公式:

吉姆的模型告诉了我们很多关于房价的信息:

  • 平方英尺每增加一个单位,平均房价就会增加 500 美元
  • 房龄每增加一个单位,平均房价就会下降 1.2 美元

这些信息可以用来提高房屋的估价。现实并非如此简单,但如果增加一平方英尺的额外空间只需要 200 美元,难道你不想增加房子的面积来卖个更高的价钱吗?

关注交互效应和分类变量

吉姆意识到体型和年龄之间的交互作用非常重要。他补充说,作为一个预测,并重新训练他的模型。他的新公式变成了:

Jim 决定将房屋类型作为预测因素纳入他的模型。每栋房子要么是联排别墅,半独立式或独立式住宅。他决定将这些视为分类变量。

新模型将利用这些额外的预测因素:

  • x 3 : 1 如果房子是联排别墅,否则为 0
  • 如果房子是半独立式的,x 4 : 1,否则为 0
  • x 5 : 1 如果房子是独立式的,否则为 0

这再次扩大了他的公式:

这告诉我们,在其他条件相同的情况下,独立式住宅比半独立式住宅平均贵 4000 美元,比联排别墅贵 11000 美元。

线性回归的常见陷阱

  • 多重共线性:独立变量可能高度相关,这违反了 OLS 假设(也许他们当年建造了更大的房子,让我们可以根据房屋年龄预测面积)
  • 异方差性:非恒定方差也违反了 OLS 假设(也许,房子越老,价格的方差越大)

其他一些值得思考的趣闻:

  • 我们的线性模型需要截距吗?(零岁没有平方的房子应该值 1000 美元吗?那还是房子吗?)
  • 我们的目标变量的合理值范围是多少?房价当然不能是负的…

感谢您的阅读!

如果你喜欢这篇文章,可以看看我关于数据科学、数学和编程的其他文章。通过 Medium 关注我的最新更新。😃

作为一个业余爱好项目,我还在www.dscrashcourse.com建立了一套全面的免费数据科学课程和练习题。

如果你想支持我的写作,下次你报名参加 Coursera 课程时,可以考虑使用我的会员链接。完全公开—我从每一次注册中获得佣金,但不会对您产生额外费用。

再次感谢您的阅读!📕

解释逻辑回归

原文:https://towardsdatascience.com/data-science-crash-course-interpreting-logistic-regression-97fc0f40d06b?source=collection_archive---------57-----------------------

数据科学速成班

从逻辑回归开始理解概率模型

照片由乔纳森·彼得森Unsplash 上拍摄

本月早些时候, Edward Qian 和我开始为有抱负的数据科学家编写一套综合课程,这些课程可以在我们的网站www.dscrashcourse.com上找到

我将把稍加修改的课程交叉发布到 Medium 上,让更多的观众可以看到。如果你觉得这些文章很有帮助,请到网站上查看更多的课程和练习题!

逻辑回归用于通过估计事件的对数概率来模拟事件发生的概率。如果我们假设对数赔率和独立变量 j 之间存在线性关系,那么我们可以将事件发生的概率 p 建模为:

您可能会注意到没有指定对数底数。对数的底数实际上并不重要——回想一下,如果我们将两边乘以 logkb,我们可以将底数 b 改为任何新的底数 k

这给了我们假设左手边的基础的灵活性。当然,基数会影响结果的解释以及系数值。

隔离概率

如果我们有对系数的估计,就很容易分离出p。注意 p/(1-p) 代表事件发生的几率

我们将用另一个例子来说明解释。房地产经纪人 Jim 训练了一个逻辑回归模型来预测某人出价购买房子的可能性。他通过使用两个解释变量来保持模型的简单性:

  • 1:潜在客户看房的次数
  • x 2:房子要价千元

在使用程序确定最佳系数后,Jim 为他的模型推导出这些系数:

吉姆的模型告诉我们:

  • 预期买家每多参观一次房子,平均几率的自然对数就会增加 2
  • 房价每增加 1000 美元,平均来说,赔率的自然对数减少 0.002

那…听起来很拗口,而且很难理解。我们可以用一个简单的技巧来提高口译水平。

我们可以计算出 e 的 2 次幂和-0.002 的值,以简化解释。

  • 潜在买家每多参观一次房子,平均而言,出价的几率就会受到约 7.39 倍的乘数影响
  • 房价每增加 1000 美元,平均而言,出价的几率会受到乘数 0.998 的影响

如果 Jim 的客户 Sue 有一次参观了一栋定价为 1,000,000 美元的房子,那么我们可以使用上面推导的公式来估计她购买该房子的概率。

这表明苏有大约 4%的机会出价买下这栋房子。

作为分类器

尽管是一个回归模型,逻辑回归经常用于分类。孤立概率总是在 0 和 1 之间。我们可以设置一个任意的阈值来预测观察值所属的类别。

我们还可以将逻辑回归扩展为两个以上类别的分类器,使其成为一个多类别分类器。我们可以通过采取一对所有的方法来做到这一点,在该方法中,我们训练与类别一样多的逻辑回归模型(每个模型预测一个类别发生的对数概率),并采用产生最高概率的类别进行推断。

感谢您的阅读!

如果你喜欢这篇文章,你可能想看看我关于数据科学、数学和编程的其他文章。通过 Medium 关注我的最新更新!

了解树木

原文:https://towardsdatascience.com/data-science-crash-course-understanding-trees-60337f605448?source=collection_archive---------70-----------------------

数据科学速成班

了解用于分类和回归的基于树的模型

本月早些时候, Edward Qian 和我开始为有抱负的数据科学家编写一套综合课程,这些课程可以在我们的网站【www.dscrashcourse.com】上找到

我将把稍加修改的课程交叉发布到 Medium 上,让更多的观众可以看到。如果你觉得这些文章很有帮助,请到网站上查看更多的课程和练习题!

基于树的方法可用于回归和分类。这些算法背后的思想是将预测器空间分成多个不重叠的区域,并将新的观测值分配给它们各自的区域。这些方法也被称为决策树方法

回归决策树

在将预测空间分成 n 个区域后,我们计算该区域中响应变量的统计量(例如,平均值)。新的预测将被放入它们各自的区域中,并且该区域的统计数据将被用作预测。

我们用房价的例子来说明一个例子。为了简单起见,我们假设最佳区域已经确定。房地产经纪人吉姆想尝试一种基于树的方法来预测房价。他用房子的面积和年龄作为预测指标。

Jim 的决策树将其预测器空间划分如下:

  • 区域#1:面积小于 250 平方英尺,年龄小于 10 岁
  • 区域#2:面积小于 250 平方英尺,年龄超过 10 年
  • 区域#3:面积超过 250 平方英尺,年龄在 10 岁以下
  • 区域#4:面积超过 250 平方英尺,年龄超过 10 年

吉姆想推断一栋新房子的价格(在图中用红色标出)。这所房子属于第四区。从训练集中观察到的区域 4 中房屋的平均价格是$125,000。因此,吉姆的模型会预测这个新房子会卖那么多。

分类决策树

用于分类的决策树的行为类似于回归。假设 Jim 决定使用相同的预测器(在不同的数据集上)来预测某人是否会出价购买房子。蓝色的观察值对应于那些提供报价的观察值,而红色的观察值对应于没有报价。该算法将预测器空间分成 n 个区域,并且每个区域被映射到一个类别。

Jim 的决策树将其预测器空间划分如下:

  • 区域# 1:5 岁以下
  • 区域#2:年龄超过 5 年,面积超过 250 平方英尺
  • 区域#3:年龄超过 5 年,面积小于 250 平方英尺

假设算法也告诉我们,区域 2 和 3 映射到“offer”,而区域 1 映射到“no offer”。有了这些信息,我们可以预测随后的观测值将属于哪一类。

更复杂的基于树的方法

我们可以集成(组合)多个决策树来形成更复杂的模型。基于树的集成算法分为:

  • Bagging (也称为 bootstrap aggregation ):更小的数据子集是通过替换随机抽样产生的。在每个子集上训练决策树。来自每个决策树的结果被平均以产生最终输出。
  • Boosting :与 Bagging 不同,在 Bagging 中每个决策树都是独立训练的,Boosting 算法中的每个学习器都是从以前的学习器中顺序学习的。
  • 堆叠:几个模型并行训练。另一个模型被训练以基于每个集合模型的预测来确定输出。这种集成技术在基于树的模型中并不常见。

装袋示例:随机森林

随机森林是一种流行的机器学习算法,使用 bagging 集成决策树。除了随机采样每棵树的训练数据之外,随机森林还随机采样用于每棵树的特征。

Boosting 示例:使用决策树的 AdaBoost

AdaBoost 是 adaptive boosting 的缩写,在迭代过程中集成决策树:我们从数据集上训练的一个决策树开始,但在每个迭代步骤中,我们重新加权数据集,以更加强调错误分类,并在这个重新加权的数据集上重新训练决策树。

感谢您的阅读!

如果你喜欢这篇文章,你可能想看看我关于数据科学、数学和编程的其他文章。关注我 Medium 上的最新更新!

数据科学不一定要性感才能有影响力

原文:https://towardsdatascience.com/data-science-doesnt-have-to-be-sexy-to-be-impactful-7c20f3d12b41?source=collection_archive---------44-----------------------

数据科学不仅仅是机器人和人工智能助手。Unsplash 上 Photos 爱好的照片

2020 年格蕾丝·赫柏庆典

今年 9 月 29 日至 10 月 3 日,来自 115 个国家的 30,000 名技术人员聚集在一起参加格蕾丝·赫柏庆典,这是一个女性学习、交流和庆祝其技术成就的年度会议。我很幸运地成为与会者之一,我从那里的大量讲座中学到了很多东西——从如何评估创业想法,到下一代人工智能硬件如何工作,到打击刻板印象威胁和冒名顶替综合症,到使用一种特殊的基于时间的神经网络来教机器人自动驾驶,我已经在之前的帖子中写过这些。

在数据科学的未开发领域建立伟大的职业生涯

有一件事是我没有预料到的,那就是我最喜欢的演讲之一来自并不令人兴奋的会计软件领域。但我想写的是我参加的 Intuit 两位高级数据科学家的演讲,因为这是我见过的最好的例子之一,说明了一个最初看起来很平凡的任务实际上可以成为一个非常迷人和复杂的数据科学项目。

尝试在目前“热门”的领域寻找数据科学角色确实很有诱惑力…但令人惊叹的职业生涯可以超越目前被认为是数据科学中性感或迷人的话题。

我们都听说过“数据科学家是 21 世纪最性感的工作”这句恶名昭彰的话,这句话出自 2012 年《哈佛商业评论》一篇文章的标题。即使在这个“性感”的工作中,机器学习的“性感”部分也往往会得到所有的关注,就像我上面提到的自主机器人。但在不那么迷人的部分(包括会计软件),也有一些真正伟大的工作正在进行,这些工作可能以各种意想不到的方式引人入胜并具有挑战性。

我认为,对于正在开始数据科学职业生涯的读者来说,这是特别重要的一点。尝试在媒体目前“热门”的领域寻找数据科学角色可能真的很有诱惑力,比如自动驾驶汽车语言图像生成模型、人工智能助手,或者任何工作描述中大量掺杂“前沿”一词的领域。

但是,惊人的职业生涯可以超越目前被认为是数据科学中性感或迷人的话题。一些最有影响力的工作发生在传统行业或数据科学领域相对较新的行业,如法律、房地产或会计。

这些都是巨大的行业,有巨大的需求和现有的用户群,以及数据科学和机器学习应用的巨大潜力。因此,绿地项目有大量的机会,即使很小的改进和效率也可以产生真正有影响力的结果,并增加巨大的价值。

最重要的是,像这样的项目也很有趣。我自己也做过一些,但是我想在这里讨论的是一个更清晰的例子。表面上看起来相对简单的分类模型实际上是一项大数据科学事业,涉及一系列复杂的数据处理、多种不同的机器学习模型和定制的评估技术。

Chi-chat:一个度量驱动的最佳频道推荐用户协同框架

本次演讲由 Intuit 高级数据科学经理范和高级数据科学家文瑶主讲

看似复杂的数据科学项目

这个例子来自为个人和企业制作会计和其他财务软件的 Intuit。当客户联系客户服务时,他们有三种与他人通话的方式可供选择——拨打电话、实时聊天或预定回拨。不同的方法适合不同类型的问题。例如,实时聊天很受欢迎,适合简单的标准问题,但如果你有一个更复杂的问题,就不那么好了。

因此,当客户有问题时,任务就是推荐他们应该使用三个渠道中的哪一个。总体目标是将用户行为导向最有助于他们的渠道,以提高客户满意度并缩短处理时间。这听起来相当简单——这只是一个分类任务,对吗?不对。事实上,这个看似简单的问题原来是一个复杂而有趣的数据科学项目,涉及多个不同的机器学习模型和一堆其他考虑因素。

在进行有影响力的工作方面(这应该是每个数据科学家的最终目标),该项目将帮助数百万客户以最适合他们的方式获得他们需要的帮助。

项目步骤

首先,你有杂乱的训练数据,以成千上万个客户问题的形式发给客户服务。每个客户及其需求都是独一无二的,不同代理的反应也各不相同。在步骤 1 中,数据科学家必须使用自然语言处理进行文本预处理来准备这个问题数据。除了删除停用词等标准内容,这还包括映射首字母缩写词、自定义拼写检查模块(包括与 Covid 相关的关键字,如“刺激支票”和特定于税务软件的术语,如“TurboTax ”),以及标准化税务表单名称的格式(事实证明这非常复杂)。

接下来,在步骤 2 中,他们使用了一个名为 sent2vec 的模型,将问题表示为句子嵌入的集合。这是基于一个奇妙的单词嵌入模型,叫做word 2 vec——如果你还不熟悉这个,我强烈推荐你去看看。Word2vec 可以用于将大量的单词缩减为少量的特征,这些特征基本上代表了单词的共享上下文。语料库中的每个单词然后可以以向量(也称为单词嵌入)的形式来表示,该向量对于这些共享特征中的每一个都具有值。Sent2vec 通过取句子中单词嵌入的平均值,将这些单词嵌入转换成句子嵌入。这将创建一个向量,它表示您创建的 n 维空间中的句子,其中 n 是嵌入特征的数量。

然后,在步骤 3 中,他们使用 k-means 聚类来基于这些句子嵌入以及一些给出用户上下文的特征(包括他们的操作系统、平台和语言)对问题进行聚类。在第 4 步中,他们通过使用这些上下文特征进行客户合作,对此进行了补充。

接下来,在步骤 5 中,他们进行了度量驱动的集群标记,以确定要使用的正确通道,这也涉及统计显著性测试(姑且称之为步骤 5.5 )。这被证明是一个重大的技术挑战,因为他们有多个指标需要优化—客户满意度、效率、案例解决率和客户偏好。让事情变得更加复杂的是,一些指标相互冲突。例如,在案例解决时间上得分很低的更长的电话通常会导致更高的客户满意度。

最高优先级的指标是客户满意度。图片来自维基媒体

为了给正确的频道分配标签,他们使用了一种非常有趣的基于指标优先级的分级顺序方法。例如,客户满意度是他们最重要的衡量标准。因此,他们首先进行了一个双样本 t 检验,以确定净推销商得分(一个常用的客户满意度指标)。如果结果是显著的(即,如果一个通道在这种情况下明显更好),他们会推荐具有更好指标的通道。如果没有,他们会转到下一个指标,如案件处理时间,并重复这一过程,以此类推每个指标。

这些示例将提供基于指标的建议。如果这些指标都不重要,但用户偏好率很重要,那么他们会给出基于偏好的建议,例如,如果客户倾向于为特定类型的问题安排回电。如果结果在任何指标上都不显著,他们会默认为实时聊天,因为这是最受欢迎的渠道。

最后,在步骤 6 中,他们根据满意度、联系解决方案和通话效率进行了 A/B 测试,以确定该模型是否比当前情况有所改进(用户可以选择自己的沟通方式,无需推荐)。在这种情况下,A 中的频道是随机排序的,而 B 中的频道是由机器学习模型推荐的。基于 ML 的推荐在所有指标上都表现得更好。他们还输出模型推荐的强度,以指定它是强推荐还是弱推荐,并发现当模型有信心时,客户体验改善得更多。

科学或主题听起来有多性感或前沿并不重要。重要的是增加价值,产生影响,并建立帮助人们和解决问题的东西——你可以在任何领域工作。

有影响力的数据科学

总之,尽管一开始看起来像是一个相对简单的项目,但这项任务涉及复杂的数据预处理、单词和句子嵌入的 NLP 模型、聚类模型、客户协同分类、统计显著性测试、基于度量层级的标签的复杂解决方案以及 A/B 测试。在进行有影响力的工作方面(这应该是每个数据科学家的最终目标),该项目将帮助数百万客户以最适合他们的方式获得他们需要的帮助。还不错。

因此,下次你发现自己在阅读数据科学工作清单,或者被要求从事一个听起来不像是世界上最迷人的数据科学主题的项目时,请记住,无论科学或主题听起来多么性感或前沿。重要的是增加价值,产生影响,并建立帮助人们和解决问题的东西——你可以在任何领域工作。

数据科学教育

原文:https://towardsdatascience.com/data-science-education-78a70b8e4940?source=collection_archive---------26-----------------------

迈克尔·克里斯滕森在 Unsplash 上的照片

意见

正规教育比其他教育更好吗?

随着机器学习变得越来越普遍,其软件包变得越来越容易使用,底层技术细节被抽象出来并对从业者隐藏起来是很自然的,也是可取的。然而,这也带来了危险,从业者会意识不到设计决策,从而意识不到机器学习算法的局限性。[1]

在这篇文章中,我想讨论一下我在正式的分析学学位项目中的经历,并与自学方法进行比较(在这里,自学方法被定义为包括书籍、项目、YouTube 教程、MOOCs 以及任何其他不能相加形成学位的

我想先说,如果你想像我一样,从一个非常不同的学科转行成为一名数据科学家,那么我不认为自我导向学习可以与一个知名机构的正式教育相提并论。这种观点可能不会受欢迎,我知道持有这样的观点很可能会被涂上柏油,插上羽毛,并被 Twitter 的高等法院视为“异教徒”或“看门人”。

但是请把你的干草叉放下几分钟,听我说完。

我的故事

自从我长大后,明白了一个喜欢科学和数学的人不一定要成为医生或会计,我的人生目标就是“解决问题”。我知道这很模糊,但即使是在今天,我也找不出一个更合适或更能说明问题的理由。

所以我做了任何想解决问题的年轻女孩都会做的事情:我在当地一所大学注册了化学工程专业。在换了几次专业后(我喜欢我的工程课,但觉得实习很单调),我于 2015 年从德雷克塞尔大学毕业,获得了……化学工程学士学位。没错:我又回到了起点。

但我有了一个新计划:拿到学位后短短几周,我就把所有的东西装进了我的 2004 款讴歌 TL,搬到了佐治亚州的亚特兰大,在佐治亚理工学院学习分析。

完成学士学位后,我决定进入佐治亚理工学院攻读硕士学位,主要有三个原因:(1)我绝对不想在化工厂工作(也许会遭受身体伤害* );(2)我喜欢使用数据进行决策的潜力;(3)“数据科学家”最近被评为“21 世纪最性感的工作”,我想变得性感。

正式学位课程的额外津贴

显然,了解一个话题有很多方法,我承认,与学位项目相关的时间和金钱可能并不值得每个人或每个职业。(如果你已经在数据科学相关的岗位上工作多年,也许一些自我驱动的项目就是你改变职业生涯所需要的全部。)然而,在下面的小节中,我将讨论我认为正规教育的主要好处。

1.策划的课程

正如我上面提到的,有很多方法可以了解一个主题,鉴于免费在线资源的可用性,我认为任何人都可以自学几乎任何他们想学的东西(这种信息的可用性对于数据科学来说尤其如此**)。此外,如果你真正理解如何应用数据科学概念,那么绝对没有理由(除非一些公然的反社会行为等)。)为什么你不能找到有报酬的工作。

然而,当你设计自己的课程时,很难知道你是否完全理解了一个主题,此外,当学习完全是自我指导的时候,就有把重点放在容易理解的材料上而不是理解重要的材料上的风险。

假设我破解了一个机器学习管道,它确实是一个很棒的管道,我保证:它运行很快,它需要的唯一参数可以简单地从响应变量中导出,并且它在训练集上获得了 100%的准确性。

如果没有人来填补我的知识空白,那么我可能会发现它们,但为时已晚:例如,当一位客户因根据我脆弱的见解做出决策而损失了巨额资金,而我已经被赶下了数据骗子

换句话说:学生需要老师。

2.专注的时间到了

我认为自己是一个相当有成就的自学者:我如饥似渴地阅读,除了短暂的兴趣之外,我不怕开始一个项目;然而,自学,当你有了一份全职工作,有了家庭,有账单要付,有甜甜圈要吃等等。经常充满了开始和停止。

我知道这一点,因为我有过这样的经历:我断断续续地学习德语几乎有十年了,尽管在这段时间里我取得了进步,但我仍然发现自己不得不一次又一次地复习相同的词汇,因为我很少把流利的德语作为优先事项。

出于这个原因,如果你对数据科学的职业很认真,那么当务之急是通过沉浸在主题中来专注于学习。我认为,如果一个人致力于学习,那么他们可以在业余时间自学,当然,但这样的做法可能会阻碍学习。

换句话说:全日制学位课程是让你沉浸在某个话题中的最简单的 T2 方式,因为在你学习期间,学习是你的首要任务。

3.网络机遇

我有一个阿姨曾经告诉我,“重要的不是你知道什么,而是你认识谁,”这种情绪过去常常困扰着我,因为在我的成长过程中,我是一个孤独的人,希望她能靠自己的大脑生活,认为自己太害羞和笨拙,没有魅力。所以我从来没有真正期望过喜欢网络。

但当我到达佐治亚理工学院时,我的同学们形成了一个相当亲密的小团体:我们在公共区域一起做作业,我们一起租了一个 Airbnb 去参加另一个城市的会议,期末考试后我们一起喝啤酒,我们因共同的痛苦和邻近而联系在一起。

我没有意识到,在成长过程中,在高中以及类似的时候,当我认为我必须靠自己的时候,这些与同龄人交往的经历就是人际关系网。这不全是招聘会和电梯推销:这是在校园里呆到很晚,试图调试代码并从别人的错误中学习。

然后还有招聘会和校园面试,我开始向这些巨大而重要的公司做电梯推销,因为我是这个伟大项目的一部分。成为某件事情的一部分是一种很棒的感觉。

换句话说:有时候是你认识的人,你认识的人,你认识的人认识的人。

(后来,在另一个故事中,我又一次收拾好 04 年的讴歌 TL,带着我所有的家当去了克利夫兰,哦,除了稍纵即逝的兴趣之外,我还找到了一份工作,独自开动脑筋(也许还有一点魅力)。

我能说什么呢?一个人在他拥有的时候用他所拥有的来工作。)

在线学位课程

当我开始讨论我的经历时,我想把重点放在传统的校园课程与通过书籍、项目和 MOOCs 自学的比较上。然而,在分析和计算机科学方面有一些新的在线项目(例如,佐治亚理工学院就有;UT Austin 有这些课程),我相信这些课程正开始以 MOOCs 尚未能做到的方式重新定义大学教育。这些项目比校内项目便宜,但据称它们提供同样著名的教育和同样的学位。我个人没有上过任何这样的课程,但它们似乎是向公平和普及教育迈出的惊人一步。

我想这些项目在社交机会方面会有一些限制(尽管,鉴于目前的情况,所有的社交都是远程进行的,也许在线学生会融入到这样的活动中),但它们确实提供了一种精心策划的学术体验,而且鉴于它们的低价,学生们可能会更好地将全部注意力投入到学习中。

数据科学:一个新兴行业

尽管数千年来统计学家和计算机科学家一直在从事属于“数据科学”范畴的工作,但数据科学一个新兴领域,因此,它通常被视为一种可以通过专注于实际应用而忽视理论来学习的行业。

每篇描述如何在两周或更短时间内成为数据科学家的文章,以及每段三分钟的视频(视频中,一个人在正方形和圆形之间划了一条线,称之为机器学习)都体现了这种数据科学作为一种交易的观点。这种过于简单化对整个领域都是有害的:如果我们不认真对待自己和教育,为什么别人要如此?

许多数据科学都是应用性的,是的,编程技能在工业中非常重要,但是要真正成为一名可以信赖的专家,从数据中获得有用的见解,并教会机器学习和热爱,就不可能将应用与数学和计算理论分开。

法律和工程都经历了类似的过程,从行业开始,然后正式成为职业,有组织、道德规范、执照和进入壁垒,如大学学费***(尽管如上所述,这些壁垒可能是可以避免的,同时保持正式化更积极的方面)。

我相信,随着时间的推移,由于他们在决策中的潜在作用,数据科学家将被要求达到越来越高的专业标准,在许多公司,他们已经达到了,因为许多数据科学职位要求申请人必须持有博士学位。

我认为每个数据科学家都需要博士学位吗?没有,而且(尽管我很想回到我的书房)我自己也没有。但我确实认为,对某些数据科学角色的博士要求表明,行业领导者特别重视两项技能:(1)设计和开展研究性学习的能力;(2)质疑自己假设和偏见的能力。

因此,如果您阅读本文是因为对成为数据科学家感兴趣,我强烈建议您考虑一个不仅能教您应用技能,还能教您如何以全面和深思熟虑的方式处理研究问题的项目。

最后的想法

我不会为了任何事情放弃我在乔治亚理工学院的经历。我从来没有质疑过我的时间或金钱是否可以更好地使用,这并不是因为某种认知巫术,比如沉没成本谬论,而是因为我所学的课程和我遇到的人对我解决问题和合作的方式产生了不可磨灭的、无价的影响。

我将是第一个告诉你我不是数据科学专家的人。我从我做的每一个项目中学到了一些新的东西,我不会以任何其他方式获得它:我想解决问题,而不是制造问题,我相信我所受的教育帮助我理解了其中的区别。

*我在杜邦公司的钱伯斯工厂实习;人们实际上已经因为在那里工作而得了癌症并死亡,更不用说在我实习后不久发生的爆炸,那次爆炸导致另一个地方的四人死亡。

  • *我觉得笑话是,“数据科学是 90%的数据清洗,10%的数据分析,建模等。,“但应该是,“数据科学是 10%做数据科学,90%说做数据科学。”

***反正在美国。

[1] Deisenroth,Marc Peter 等机器学习的数学。剑桥大学出版社,2020 年。

数据科学精英以及如何避免他们

原文:https://towardsdatascience.com/data-science-elitists-and-how-to-avoid-them-b8888178e8c0?source=collection_archive---------35-----------------------

你需要掌握的知识能够区分互联网上有益的批评和不必要的负面信息。

克里斯汀娜·戈塔迪在 Unsplash 上的照片

互联网是一个可怕的地方。尤其是对于那些尝试新事物或转行的人。这里面有正确的信息也有错误的信息,有鼓励也有沮丧。对于数据科学来说尤其如此。成为一名数据科学家需要什么是一个有点争议的话题,许多人对此有非常强烈的看法。

具体来说,有一群人似乎只发出关于成为数据科学家的负面信息。我称他们为数据科学精英。他们倾向于认为,要成为一名数据科学家,你需要一个博士学位,你需要成为一名数学专家,你需要知道所有与数据相关的技术工具,以及你完美的计算机科学知识。不用说,我不同意他们的观点。在这篇文章中,我想告诉你为什么不认真对待数据科学精英,以及如何在成为数据科学家的过程中抵御消极因素。

首先,当人们给你一长串技术技能时,你不应该当真。数据科学家不是开发人员。是的,你需要学习一些技术工具,但其中许多并不是必需的,只是有了它们就好了。

此外,每个公司都有自己的技术栈,也就是他们使用的工具集。你申请的每家公司都有可能使用不同的技术,你不可能学会所有的技术。尤其是当你刚刚开始的时候,知道如何使用专业工具并不是首要任务。在播客第四集的中,我和 Samantha Zeitlin(一名招聘高级数据科学家)讨论了这个问题。她提到,根据她的经验,你在工作中学习工具。

当别人告诉你,你做不到,或者为时已晚时,你不应该当真。出于某种原因,有些人倾向于给人一种感觉,要么你现在就拥有这些技能,要么你就完蛋了。当我看到这样的评论时,这是我的脸:

每个人在某个时候都必须是初学者。没有必要让一个人因为没有这种或那种技能而感到难过。如果你想成为一名数据科学家,你可以,就这样。我就是这么想的。根据你的背景,这可能会花你或多或少的时间。这需要的时间可能也取决于你的财务要求,以及你是否能全职工作,但仅此而已。这并不是说每个人都适合成为数据科学家。当然,在深入学习之前,你应该理解这份工作的要求和含义。但是我一会儿会谈到这一点。

你应该半信半疑地接受人们的建议。除非有人是“让他人成为数据科学家”的教授,否则我怀疑他们对自己的工作是否客观。如果有人获得了数学博士学位,然后成为了一名数据科学家,那么听到他们说你需要一个博士学位或者你需要高级数学技能就不足为奇了。人们试图提供帮助,但对他们来说很难做到客观。因此,不要把一个人的建议放在心上,试着去阅读其他人对同一话题的看法。也许你想成为数据科学家的播客可以帮到你。眨眨眼

当然,我不能告诉你应该留意数据科学精英的每一种方式。你必须自己发现错误的信息(或无用的信息)。我能做的就是告诉你如何学会只拿对你有用的东西。

这些是我在免费迷你课程《数据科学入门》中复习的内容。你可以用我的网站上的表格注册。回到我们的话题。

首先,也是最重要的一点,你需要对自己想要从事的数据职业类型有信心。如果你所拥有的只是对你认为你想做的事情的模糊解释,你将很容易被你所读到或听到的东西所操纵。当有人说,你需要成为一名优秀的开发人员才能成为数据科学家,你可能很难理解这到底是什么意思。了解数据管道,它需要哪种类型的开发,以及哪种类型的数据专家处理它的哪些部分将对你有所帮助。

你需要对这门学科有很好的理解。人工智能、机器学习、自然语言处理、深度学习、认知解决方案、计算机视觉、机器人技术,还有更多你可能在互联网上看到的东西,这些都与数据科学密切相关。但是它们之间有什么关系呢?要称自己为数据科学家,您需要了解多少?乍一看,这似乎很难理解,但如果你对数据科学运作的学科有一个很好的总体了解,你就不太容易受到干扰,对自己的道路更有把握。

最后,你需要了解数据科学的核心要求和基本技能。你可以在基本技能的基础上再接再厉,专攻某个领域,但不是没有坚实的基础。尽管如此,即使在你专注于基本技能之后,知道以什么样的顺序去解决和学习它们也是有帮助的。我称之为技能矩阵。了解所需的技能,学习它们的顺序,并清楚它们如何有助于你的学习,这将使你在竞争中领先。

在数据科学入门迷你课程中,我帮助你选择数据职业并对其充满信心,解释人工智能的学科以及数据科学和其他流行词汇如何适应这种情况,解释数据科学管道,并谈论成为数据科学家所需的必备技能。这是一门免费课程,你可以使用我的网站中的表格报名参加。

毕竟,在学习数据科学的同时,保持 it 的高效和智能是您的责任。用正确的观点武装自己,没有什么能阻挡你。

您是否打算转行从事数据科学职业,但不确定从哪里开始?通过我的网站免费参加我的数据科学入门课程。

本课程旨在帮助您:

  • 阐明您的数据职业目标,
  • 明白努力的方向,
  • 了解必要的技能,
  • 在您的学习旅程中做出明智的决定

此外,我每周发表文章、采访数据专业人员和免费资源,以帮助专业人员有效地将他们的职业生涯转向数据科学。如果你对你需要学习的东西感到迷茫,对所有声称自己是最好的课程感到困惑,觉得没有一门课程对你的目的来说足够完整,我的网站就是为你准备的。

每天的数据科学:我们的月刊现在是每日精选!

原文:https://towardsdatascience.com/data-science-every-day-our-monthly-edition-is-now-the-daily-pick-74a800bdf8d5?source=collection_archive---------82-----------------------

大家好!

我们希望帮助您养成每天学习数据科学的习惯。

我们不断地发布由不可思议的作者撰写的令人惊叹的文章,保持对我们所提供的一切的了解是一项挑战。为了帮助您轻松了解数据科学的最新动态,我们决定用新的每日简讯取代我们的每月简讯,您将在周一至周四收到。

我们将继续出版我们的月刊,并在《数据科学》上进行专题报道,在那里很容易找到。每日精选将精选精心策划的帖子,我们认为你会喜欢的。让我们一篇一篇地帮助您学习数据科学。

每日精选从下周一开始。我们希望你喜欢它!如果你不想收到它,可以在这里 取消订阅

TDS 团队

如果你不想收到我们的 每日快讯 ,你可以直接订阅我们的 每周文摘 。如果你只想看我们的月刊,最好的办法是每月来我们的刊物一次。你会在我们的主页上找到它。

数据科学用…做饭来解释?

原文:https://towardsdatascience.com/data-science-explained-with-cooking-1a801731d749?source=collection_archive---------22-----------------------

你从未意识到的惊人的相似之处

数据科学和烹饪是我的两大爱好。在做了这两方面的大量工作后,我发现这两个领域有大量的共同点。制作新菜肴的过程几乎直接反映了数据科学项目的生命周期。随着时间的推移,我开始用烹饪/数据科学的类比向那些不在这个领域工作的人解释我的工作。

假设品尝

当厨师开始做一道新菜时,他必须了解当前菜单缺少什么。他需要弄清楚什么样的盘子可以完成选择或者替换掉被移走的盘子。

作为数据科学家,我们也需要从一个问题开始。通常是通过商业理解。我们需要找出哪些机会可以为我们的组织创造最大的价值。

成分=数据

在厨师决定了他想做什么类型的菜后,他去冰箱收集配料。如果他没有必要的原料,他会去商店收集。

作为数据科学家,我们的数据点就是我们的配料。我们手头可能有一些,但我们可能还需要通过网络抓取、SQL 查询等收集更多。

就像原材料一样,数据本身通常不是很有用。一旦我们结合了我们的数据并对其进行分析,我们最终会发现它的真正价值。盐本身一般不会被消耗掉,但是几乎每一餐都少不了它。

清洗你的食物和数据

食物可能会被灰尘、杀虫剂或其他有害物质覆盖。重要的是在食用前清洗配料,以避免不良味道和疾病。

这对我们清理数据也很重要。质量差的“脏”数据会给我们的模型带来灾难性的结果。诚然,我们清理数据的方式与厨师清理蔬菜的方式略有不同。我们需要专注于清理数据类型、输入空值和移除异常值。

风味工程

有时,厨师需要在将食材放入菜肴之前调整它们的成分。在烹饪之前,他们敲碎鸡蛋,切洋葱,切肉。

这一过程与数据科学中的特征工程非常相似。有时,我们需要更改数据,以便为我们的模型产生最佳结果。我们可以对数据进行分组、缩放、编码或转换。这些变化有助于提高我们输出的可解释性和准确性。

品尝和探索

当从头开始烹饪时,大多数厨师边做边品尝食物。他们需要了解每种配料的味道,以及这些配料混合在一起的味道。在理解了这些关系之后,他们将能够决定在最后一餐中包含哪些配料。

对于数据科学家来说,在构建模型之前探索我们的数据也很重要。我们必须了解变量之间的关系,以避免多重共线性(在某些模型中)。

Sous Vide =深度学习?

在厨师准备好配料后,就该选择如何烹饪了。有许多烹饪选择,他可以选择烤,烤,煮,嫩煎,烧烤,腌制…你明白了。根据他做的菜,他可能知道这些选项中哪一个会产生最好的结果。

这与我们的模型选择没有什么不同。根据我们试图解决的问题(回归、分类或聚类),我们知道哪些模型可能是最好的,但我们仍然必须从那里缩小范围。我们最感兴趣的是尝试其中的几种,看看哪一种能产生最好的结果。

调整你的烤箱

厨师一旦选择了烹饪介质,就不会善罢甘休。他们还必须弄清楚要煮多久,在什么温度下煮。这些变量是这顿饭成功的关键。

这与机器学习模型的模型调整过程非常相似。我们必须对我们的算法进行一些调整,以确保我们得到最好的结果。不幸的是,我不认为有烹饪方法的 gridsearch 还没有。

美味交叉验证

我们的厨师已经做好了他的饭,但是他还没有做完!他需要检查结果。他想确定不只是他觉得好吃。让厨房里的其他厨师品尝这道菜对他来说很重要。如果他只迎合自己的口味,他的饭菜可能不会像他希望的那样有广泛的吸引力。

这很像数据科学中的交叉验证过程。我们希望确保我们的模型能够很好地推广,所以我们在新数据上测试它,并比较结果。

电镀艺术

如果食物符合可接受的标准,重要的是在上盘时使其具有吸引力。对食物进行电镀增加了厨师的客人的感官体验。

在数据科学中,我们必须向业务利益相关者解释我们的模型。我们必须产生美丽的视觉效果,增加对我们工作的理解。

电镀和数据可视化都可以被认为是他们自己的领域,因为他们有巨大的深度。

记录你的口味

最后,如果厨师喜欢这个结果,并且想要重现这顿饭,他需要写下一份食谱。他还应该培训厨房里的其他厨师来达到同样的效果。

对于数据科学家来说,记录我们的代码并构建系统来重复执行我们的模型是非常重要的。

在烹饪和数据科学中,再现性是长期成功的基础。

你的厨房应该是一个 API

经营餐馆时,对顾客来说,过程极其简单是很重要的。他们应该能够点一顿饭,而且饭菜应该始终如一地送到他们手中。他们不需要知道饭菜是怎么做的,厨师在做什么,甚至不需要知道厨房里发生了什么。

这就是模型 API 端点在数据科学中的工作方式。您应该能够向它发送请求(订单),并获得可靠的响应(饭菜),而不必担心香肠是如何制作的。

面向分析思维的数据科学|简介

原文:https://towardsdatascience.com/data-science-for-analytical-minds-introduction-8900b8d2477f?source=collection_archive---------48-----------------------

你是这样的人吗:

  • 学过统计学、计量经济学或数学的概念。
  • 喜欢推理,创造疯狂的假设,发现你的概念或理论中的缺陷?
  • 计划在数据科学领域开始职业生涯*或寻找加速数据科学职业生涯的方法?

如果是的话,那么你已经登陆了正确的 5 部分博客系列,它将为你提供从数据中获取真实生活价值所需的所有实用信息。

数据科学对我有意义吗?

我想是的。作为 Atlan 的经济学研究生和首席数据科学家,我将数据科学视为经济学和计算机科学的美丽产物,它吸取了双方的精华,形成了自己的形状和个性。

作为经济学家,我们被训练去理解和发现所有层次的模式——微观的和宏观的——以及跨越不同的领域,如发展经济学、农业经济学、环境经济学等等。我们接受过将这些模式转换成数学方程的培训,以便进行经验测试,并与相关的利益相关者交流结果。

数据科学家拥有训练有素的经济学家的专业知识、处理大数据的知识、高效利用计算机能力的诀窍以及扼杀所有可重复任务的工程态度。

如果你也觉得自己理解了数据科学的一些组成部分,并且对数字、模式和思维的分析很有一套,那么你可以很容易地在数据科学中为自己创造一个位置,就像我一样。😃

数据科学的职业前景如何?

来源:艾登梅森,via: g iphy

数据科学正在以新的创新迅速改变各种行业的面貌。在整个组织中,数据现在是一项核心职能,就像销售、营销或产品和设计一样。

任何采用数据科学的公司都比行业中的其他公司具有竞争优势,因为业务突然变得有能力获得大量知识、更快的学习和过程修正。根据金雅拓的 2018 数据安全信心指数,89%的受访者知道,如果他们能够学会正确分析自己的信息,他们将拥有竞争优势。

在学术界,研究部门正在学习数据科学,并聘请专家来扩展他们的研究。2018 年诺贝尔经济学奖获得者 Paul Romer从 STATA 和 Mathematica 转到 Python,以便能够受益于其处理海量和各种类型数据集的能力,并获得在开源社区分享其工作的机会。

选举正在利用数据科学的力量在世界各地进行竞争,无论是英国退出欧盟竞选还是剑桥分析公司(Cambridge Analytica)完成的美国竞选。

在世界范围内,这导致了对数据科学专业人员需求的激增。2019 年, LinkedIn 将数据科学选为最有前途的职业。

现有的供应无法满足所有这些需求。indeed 2019 年 1 月的报告显示,对数据科学家的需求同比增长 29%,自 2013 年以来增长 344%——这是一个戏剧性的增长。但是,尽管需求以职位发布的形式出现爆炸式增长,精通数据科学的求职者的搜索增长速度较慢(14%),这表明供需之间存在巨大且不断增长的差距。

数据科学家的一天是怎样的?

让我们举一个数据科学问题的例子来更好地理解这一点。

想象一下,你或你的公司得到了一笔资金,用于预测未来两年印度每个村庄和城镇的每月疟疾病例。

鉴于一系列因素可能导致或加速疟疾的发病率,您需要来自各种数据源的大量不同数据指标:气象信息卫星、村庄位置空间目录、道路网络等,医院目录、收入估计、卫生记录等 PDF 或 excel 格式的统计数据库。所有这些数据集都包含不同的数据类型、地理粒度和更新频率。

作为在职的数据科学家,您应该能够:

  • 对问题陈述进行背景研究,并制定一个执行计划,考虑您和您的团队的有限时间表、资源和技能组合。
  • 根据问题陈述,找到并整理映射到所需指标的正确数据集
  • 处理和清理所有不同的数据类型,并将它们绑定在一起
  • 进行解释性分析,为您的预测/预测模型找到正确的指标/特征。
  • 建立适用于空间数据、时间序列数据以及横截面数据的模型。
  • 编写一个脚本,该脚本可以在最少的人工干预下每月运行一次,完成所有步骤,包括数据源、数据清理、主数据库创建、运行预测模型
  • 创建一个定期更新的可视化仪表板,以便相关利益相关者可以使用和分享这些见解。

看着问题陈述,你们中的大多数人,对疟疾发生和预测进行研究后,将能够设计解决方案和工作流程,但将这变成现实是数据科学家的工作。

那么,一名优秀的数据科学家需要具备哪些技能呢?

背景图片来源: unDraw

工作,工作,工作…

在博客系列的后续部分中,我们将深入探讨每一个组件。现在简单说一下:

从全球来看,数据科学家通常将 80%的时间花在数据清理和准备上。这是为什么呢?这是因为数据科学家必须处理不同数据类型、文件格式、清理过程、更新频率、聚合级别、数据大小和其他维度的数据集。在进入分析或建模部分之前,通常需要进行大量耗时的数据处理过程来理解任何数据。因此,正确自动化数据处理的能力是任何数据科学家最需要的技能之一。

这将涉及对统计学和数学的深入理解,以建立和使用各种分析或预测的 ML 模型。任何学习和喜欢数学和统计学的人,都知道基本原理。来吧,现在就在你的脑海里背诵所有的 OLS 假设,你就会明白我的意思..但是,我们没有学到先进的 ML 技术,如 XGboost、支持向量机、神经网络等等。当我开始在工作中学习这些技术时,我意识到这些只是同样的统计和数学模型的更强大的扩展,如逻辑回归、线性优化和贝叶斯概率,这些都是我们在课程中学习的一部分。我们计划在以后的博客系列中深入研究这些技术。

数据科学需要大量的数据争论、多模型测试和优化以及可视化,以得出正确的见解、做出推论、进行预测或做出决策。更重要的是,组织内每天都需要处理不同的数据规模和容量。因此,对于任何数据科学家来说,了解能够最好地自动化和优化工作(从数据清理到可视化)的脚本编程语言是必不可少的。r 和 python 是数据科学家最常用的编程语言,但是还有更多我们将在下一节详细讨论的。在一些大学,经济学家或统计学家主要学习 STATA 和 R 或 python 等语言的基础知识,这是一个很好的敲门砖,但在学习如何编写针对敏捷性和速度进行优化的 R 或 python 脚本方面,还有很长的路要走。

  • 处理大规模数据-

与我们通常进行数据清理、ML 模型测试等的测试环境相比,大数据和生产算法需要高度优化的环境。
这个优化的环境包括选择正确的数据库或数据仓库来存储你的数据,选择正确的机器配置来运行脚本,选择正确的库和包来执行脚本中的特定任务,等等。并非所有这些任务都必须由数据科学家来完成,他们更关心的是数据工程师,但作为一家小公司或独立研究人员,你可能没有这种奢侈,所以拥有工作知识将是有用的。

  • 检测模式&领域知识-

这些大概是你进入数据科学领域最应该自豪的技能。数据科学的所有其他组成部分都是技术密集型的,但这些更依赖于人的直觉和对该领域的研究,离自动化还很远。这里的固有技能是形成开箱即用的假设,寻找模式并通过数据支持它们,批判性地检查工艺流程中的每一步,并将数据和数学模型与行业需求联系起来。这些都是优秀的经济学家、数学家或统计学家所固有的技能,只要你对某个领域充满热情,这些技能就可以应用于任何行业或领域。

  • 沟通&可视化-

对于任何数据科学家来说,沟通都是一项重要的技能。鉴于工作的性质,数据科学家需要将他们构建的模型或预测转化为可供非技术决策者采取行动的见解,这些决策者将根据数据设计行动方案。良好的沟通是各种属性的函数,我们将在下一篇文章中讨论,但真正有助于沟通的一个工具是观想。

当数据科学家必须获取大量数据、复杂模型和输出,并让时间和注意力有限的观众能够理解它们时,可视化就来了。正如他们所说,“一幅画胜过千言万语”,在我看来,一个好的观想值一百万。这也来自于人类天生对模式和符号的理解比其他任何语言都要好。

  • 开源社区-

数据科学社区是建立在一些令人敬畏的开源工具、语言、框架、书面文章、维基、博客和书籍之上的。因此,我们都通过我们能做的方式做出贡献真的很重要——写博客,为 R、python 或任何开源语言做出贡献,在研讨会上发言,建立公共数据仪表板(如 COVID19 的仪表板),为开放数据仓库如 OSM 或任何其他你喜欢的方式贡献数据。

那么,下一步是什么?

接下来是阅读和动手操作。正如托马斯·爱迪生的名言——“没有执行的愿景是幻觉”。

我和我的合著者安基塔·马图尔在这个博客系列中,我希望能帮助你开始走上成为一名数据科学家的道路。在这篇介绍性博客之后,本系列还会有 4 篇博客:

  1. 脏数据 -质量评估&清理措施
  2. 统计机器学习中的皮索 n
  3. 扩大规模——编程语言、数据存储&协作
  4. 传播知识——交流&社区

期待这些博客向您介绍数据科学的不同方面,同时为您提供可靠的资源来开始您的数据科学培训。黑客快乐!

帮助你起步的资源-

*在数据科学下,我们正在考虑所有相关的职业,如数据科学家、数据分析师、业务分析师、ML 从业者、统计学家等。成为它的一部分。

特别感谢我们这个系列的杰出编辑- 艾西瓦娅·比德卡尔🎉

自动驾驶的真实数据科学

原文:https://towardsdatascience.com/data-science-for-autonomous-driving-a1bf28208946?source=collection_archive---------38-----------------------

通过迁移学习创建的图像(ostagram.me)

理解大数据

我定义数据科学在自动驾驶汽车中的作用的旅程

博世和梅赛德斯于 2017 年携手打造自动驾驶(AD)技术。两家知道如何制造汽车的成功的大公司现在正联合起来。这听起来真的非常非常令人兴奋。

那一年,我加入博世,成为该集团聘用的第一名“数据科学家”。当时,我不确定我作为数据科学家的角色在实践中意味着什么,但我有一个乐观和一个悲观的猜测:我可能会对核心人工智能算法(“功能编码”)做出贡献,或者我只会做数据分析。

一晃两年过去了,我领导的数据科学团队现在已经发展到 10 人,我可以证明这两种情况听起来都很幼稚。

以下是我在组建这个团队的过程中以及我们参与的一些项目中学到的一些东西。

1。DS 车型不跑 AD 车

我不得不与我团队中许多新雇佣的数据科学家进行一次“我们必须坐下来谈一谈”的谈话。是的,对象预测非常有趣,我知道 Coursera 展示了如何端到端地做这件事。但我也知道,在一个有数百名专家参与的项目中,为 AD 开发核心功能并不是“通用 ds”的职责。像感知和融合这样的团队已经对这些问题进行了多年的修补。在这里,我们有 5 年经验的博士独自研究像停车检测这样的小课题(大声喊出来,马克!你的工作受到重视!).汽车中运行的一切都需要以此为目的进行设计,这意味着:它可能需要用类似 C++的语言编写,具有有限的数据速率,并通过 GPU 特征向量直接分配内存。你用过 GPU 特征向量吗?我很怀疑,这是我瞎编的。要点是:AD 的功能开发通常需要大量的领域知识和软件开发技能,而一般的数据科学家没有受过这方面的培训;他们也不会特别感兴趣。

那么,DS 能为 AD 做些什么呢?

2。没有 DS 车型,AD 车辆无法行驶

我们团队经历了一个自我定义的过程。我们开始在汽车内部的算法和数据接收后应用的算法之间划一条线,汽车内部的算法主要是领域和实现的。最终,问题变成了“,哪些缺失的数据驱动方法可以支持 AD 的功能团队?”。我们带着这个问题,在与团队领导、管理层和开发人员的会议中四处巡视。我们现在问了一个稍微不同的问题。
From :我们如何应用 ML 来解决你的问题?
:你的问题空间周围的界限是什么?
不久之后,请求开始接踵而至。我们讨论了项目,两年后,我确信我们的 DS 团队和其他团队一样是这个项目成功的关键。

在此期间,我们建立了一个数据中心,为开发人员和管理层提供按需和常规数据分析。我们开发了基于规则和概率的根本原因分析解决方案来支持取证团队。我们已经创建了一个特性库来支持各种 ML 项目。一个是场景识别,我们用于 KPI 估算、验证&确认,以及问题跟踪。特征库的另一个用途是用于异常检测。

—>所有这些项目都将在我 2020 年 4 月在波士顿 ODSC 的演讲中详细介绍。

3。说到底,不是模特的问题。

与这个领域的任何人交谈,你都会听到广告是而不是一个已经解决的问题。在一个不断学习和快速变化的环境中,数据科学家也需要这样做。面试中没有提到的技能会对你的工作效率产生影响。我们使用 dockers,我们编译,我们使用各种机器人框架,我们必须为 C++制作 python 绑定器。在某些时候,我们需要对你的 KPI 仪表板前端进行更改,重新启动你在 Kubernetes 上的作业,为你的 GPU 排除 Cuda 驱动程序的故障(这不是我编造的);所以我们学会了所有这些技能。这是让我们快速迭代并跟上项目的原因。另一方面,我们的项目中也有“核心科学家”。他们会花至少几周的时间分析任何问题,并使用他们在研究生院熟悉的工具。他们提供了出色的报告,是无价的,但正是前一种类型的 DS 帮助定义了我们的身份。

最终,无论我们谈论的是自动驾驶还是广告,数据科学家的工作都是让自己变得不可或缺。

结束了。

免责声明:本文所表达的观点和意见均为作者个人观点和意见,不一定代表本文所报道的任何公司的官方政策或立场。

初学者的数据科学

原文:https://towardsdatascience.com/data-science-for-beginners-66e6c51ce066?source=collection_archive---------29-----------------------

来源: Pixabay

进入数据科学,我们需要什么?

  • 像 SQL 这样的查询语言
  • 像 R/Python 这样的编程语言
  • 可视化工具,如 power bi/Qliksense/Qlikview/Tableau 等。
  • 机器学习的基本统计学
  • 机器学习算法(确保你在你希望成为专家的领域,如销售、金融、人力资源、运营等领域尝试用例。所有人的用例都不同)
  • 实践和实施

a)查询语言

你可以学习的查询语言类型: SQL 无疑是市场上最好的语言,它不会消失。

您可以学习的另一种查询语言是 elasticsearch。如今它被广泛使用。我通过一门业余课程学会了它。SQL 和 elasticsearch 的区别在于,在 elasticsearch 中,您有一个数据框架,其中不是每一行都有相同的列值。例如数据库车。比方说,对于一些汽车,我们只有型号名称、价格和颜色信息。对于一些,我们可能有颜色,型号,价格,型号数量,母公司等。对于另一种类型的汽车,我们可能只有型号和名称等信息。在 SQL 中,这是通过在缺少字段的地方放置 NAN 值来捕获的。在 elasticsearch 中,没有 NAN 这个概念。

学习来源:你可以从 W3Schools/Tutorialspoint 或任何地方学习,因为学习 SQL 几乎不需要一周时间。如果您无法访问数据库进行练习,您可以加载任何 csv 文件作为数据库进行练习。

可以通过相同的网站学习 Elasticsearch /Kibana。同样,你可以参加 Udemy 的课程,因为这比 SQL 更难学。

环境:如果你正在学习 SQL,可以安装 MySQL/PostGRESQL,开始练习。对于 elasticsearch,您可以安装 Kibana 并进行练习。

为什么查询语言对数据科学很重要?

在数据科学中,我们有庞大的数据集,有数百万行和数百万列。对于分析,你不需要所有的数据。我们需要使用查询语言提取相关数据,然后进行分析。

大数据:还可以学习 Scala、Hadoop/MapReduce 等大数据语言或技术。然而,这对于大多数 D.S .工作来说是好的,而不是必须的。这更像是锦上添花。大数据是数据工程的一部分,通常涉及编码,这与融合了统计学、数学、编码和领域知识的数据科学不同。大数据应该在你彻底掌握数据科学之后学习。

b)编程语言

流行的语言:有两种主要的语言:R 和 python。r 是由统计学家和数学家设计的语言。Python 是一种编码语言。两个都好。然而,现在 Python 更受欢迎,因为它有来自编程世界的强大支持生态系统,更好的可扩展性,以及与 API 和其他完整产品代码的更好集成。

学习来源:通过 Coursera 学习 Python。课程名称是“数据科学的 Python”也可以通过 tutorialspoint 和 W3schools 学习。不仅仅是课程,我还通过主要和次要的项目了解到我们应该做的,作为我们证书的一部分。

我通过 Udemy 学会了 R。数据科学研究高级课程。深入学习一种语言并对另一种语言有一个大致的了解是有好处的。这是因为在一个团队中,你将与许多数据科学家一起工作。有些人会习惯使用 R,有些人会习惯使用 python。

环境 : Anaconda Navigator,Pycharm,Spyder 或者 Jupyter 笔记本。

环境是一个你基本上编码和实现你的代码的地方。

我个人最喜欢的环境是 Jupyter 笔记本。Jupyter 笔记本可以让你输入 R/Python/HTML 等等。,因此您可以使用特定语言的最佳库或技术,并在 Jupyter 中使用它。此外,如果两个人使用不同的语言,那么您可以使用 Jupyter 笔记本轻松地进行协作。

查询解析: Stackoverflow 和 Stackexchange 是询问语言问题的好地方。人们通常在 5 分钟到 24 小时内回复。

c)可视化工具

可以学习的工具:Tableau/PowerBI/Qliksense/Qlikview 是最常见的工具。PowerBI 和 Tableau 应用最为广泛。

PowerBI 几乎就像 excel 的高级版本,非常容易学习。excel 的唯一问题是它会崩溃,并且在处理大量数据时会变得很慢。也没有太多的选项可用于惊人的观想。这一切在 PowerBI 中都是可能的。另一个好处是 PowerBI 是免费的。对于 Tableau,您可以下载 30 天的试用版,但对于 PowerBI,您可以想用多久就用多久(PowerBI 的免费版本中提供了大多数功能)。Apple 不支持 PowerBI/Qliksense/Qlikview,因为它们是基于 windows 的产品。

学习来源:通过 Udemy 学习了 PowerBI。我根据评分来选择课程。任何评分在 4.3 以上的课程都很酷。我通过 Tableau 网站学习 Tableau。

d)数据科学统计学:

你应该知道的基本术语:标准差、均值、中位数、众数、偏度、假设检验、中心极限定理、总体对样本、z 得分、置信区间、p 值、统计显著性、临界值、比例检验、双尾、单尾、帕累托原理、卡方检验、z 检验、t 检验、正态分布、高斯分布等。

学习来源:Kirill Eremko 的 Udemy 数据科学统计课程,R 中的统计学习介绍或任何统计基础书籍。

e)机器学习算法:

最常用的算法类型: XGBoost、RandomForest、深度学习、神经网络、时间序列、决策树、聚类和分类算法。

学习来源:机器学习 Udemy 上的 Kirill Eremko 课程很惊艳。Otxts 书是 ML 可视化算法的好书。这是一个免费的资源,也是网上最好的资源之一。https://otexts.com/fpp2/graphics-exercises.html

R 中的统计学习介绍对 ML 中的统计和应用的基础很有帮助

如何决定实施哪些算法:

首先,了解您的问题的用例。你想干嘛?你的产出是连续变量吗?(取值 1、3、10 等。基本上任何值)或者它是二元决策还是你想把人们聚集在一起,为一群人做一些决定?

在一个项目中,我不得不从事金融领域的信用风险分析。你必须决定一个人是否有能力偿还贷款。所以这是一个二元决策。在这种情况下,您需要一个分类算法,因为您希望将一个人分类为违约者或非违约者。所以我使用逻辑回归(当输出为二进制是/否等时使用)、XGBoost 或决策树。你基本上可以使用任何分类算法。这里可以使用的其他分类算法有 SVN、朴素贝叶斯等。(你可以谷歌分类算法获得完整列表)。

如果在一个项目中,我需要预测股票或房子的价值,那么它可以取从 10 卢比到 1,000,000 卢比或更多的任何值,等等。(连续变量)。这里我将使用回归。回归可以是多种类型,简单线性、多元线性、多项式、SVR 等。通过检查 r 平方误差(预测值与实际值相差多远),可以找到正确的回归技术。

同样,如果我需要找出目标细分市场,我将需要使用聚类算法。k 均值和层次聚类都是聚类算法的例子。

所以首先要学习算法(至少一个分类算法,一个聚类算法,一个回归算法),然后看看你需要什么算法来解决手头的问题,然后开始分析。

我应该学习什么类型的项目和算法:

首先,选择你的域名。例如,我的领域是金融和营销。所以我可以在这里谈论这些。虽然清单是无穷无尽的,我将只写下我学到的最重要的算法

营销:时间序列建模(主要是 ARIMA 建模),预测未来的销量、数量和价值。时间序列建模意味着你有一件事的数据,比如说一家公司一段时间(可能是几个月、几年、几天等)的销售数据,你可以预测该公司未来几年/几个月/几天的销售情况。

聚类算法对目标群体进行聚类,并为每个群体设计单独的类别。

流失建模,以决定有多少现场工作人员将留下,有多少将离开管理工作流程。

金融:分类算法像逻辑回归(逻辑回归和线性或多元回归完全不同,只是名字相似),SVN,朴素贝叶斯,XGBoost 等。进行信用风险分析,找出谁会违约。

资产评估回归(股票价值、抵押资产等。)

f)实施

如何运用你的知识:

  • Coursera、Udemy 等课程中的项目
  • Vidhya,Kaggle 等分析的黑客马拉松,看看你在人群中的位置。
  • 实时项目
  • 在公司和工作中

希望这有所帮助!

使用 Python 的电子商务数据科学

原文:https://towardsdatascience.com/data-science-for-e-commerce-with-python-a0a97dd7721d?source=collection_archive---------7-----------------------

我为电子商务行业准备了一份广泛的数据科学应用指南。

马克·柯尼希在 Unsplash 上的照片

商业是目前世界上发展最快、最具活力的行业之一。随着数字交易的便利和快速的送货上门,它的受欢迎程度一直在迅速增长。大型科技公司收入的一个主要来源来自其底层专有算法的交互,这些算法在很大程度上由数据科学提供支持,因此了解用于维持和增加客户数量的方法是非常重要的。

在本文中,我将向您介绍这个令人惊叹的行业是如何应用数据科学和 Python 脚本来实际展示这个案例的。数据集和脚本都可以通过这个链接在我的 GitHub 上找到。

目录:

1.数据和数据科学介绍(1 分钟阅读)

2.数据科学的电子商务应用(1 分钟阅读)

3.推荐系统(1 分钟阅读)

4.客户分析(2 分钟阅读)

5.使用 Python 进行数据探索性分析(4 分钟读取)

1.数据和数据科学简介

数据的定义仅仅是原始事实的集合,如数字、文字或观察结果,而数据科学是处理数据研究的科学学科。

照片由弗兰基·查马基Unsplash 上拍摄

如今,大多数电子商务平台在不妨碍客户体验的情况下收集大量用户数据。收集的数据存储在结构化的或列表化的表格中,以便于分析和解释。不仅存储结构化数据,还存储非结构化数据,如图像、视频或文档,这些数据在研究用户偏好时也有很大价值,但通常更难处理和分析。

数据分析为这些公司提供了不断变化的洞察力指标,使他们能够打造更好的产品。

对数据科学的兴趣大爆发的原因是由于数据量和计算能力的增长而被广泛采用。数据的增长与广泛的数字化和互联网渗透以及移动设备的大规模采用直接相关,移动设备在没有人工干预的情况下持续生成数据。另一方面,计算能力使数据科学家能够以高效的方式存储、处理和研究大量数据。

如今,不仅是大型科技公司,如谷歌、脸书、苹果、亚马逊或微软,正在充分利用其核心业务,而且小型和本地企业以及初创公司也逐渐采用数据科学来增加其业务价值。

2.数据科学的电子商务应用

电商代表电子商务,代表网络版实体零售店。它允许世界各地的人们通过在线平台购买、浏览和销售产品。

虽然从客户的角度来看,这似乎是一个相当简单的过程,但为了提供无缝的在线购物体验,需要克服几个障碍,例如与过程相关的障碍,包括产品订购、交付和公平定价。

然而,随着越来越多的人希望在网上购物,电子商务行业正在迅速扩张。这也意味着越来越多的传统企业正在将其商业模式转换或补充到电子商务中。

在电子商务行业发展的背景下,数据科学有助于从这些平台的大量可用数据中获得最大价值,并有助于将重点转向客户参与和体验。它侧重于:

  • 用户产品推荐。
  • 客户趋势和行为分析
  • 预测销售和库存物流。
  • 优化产品定价和支付方式。

这些应用中的每一个都涉及大量数据的存储和解释,其中数据分析技术派上了用场。

照片由 Pixabay 发自 Pexels

3.推荐系统

在案例研究中应用数据分析技术的一个例子是该公司的推荐系统,这是一种根据用户以前在平台上的购买或搜索来预测用户对某个商品的偏好的方法。

推荐系统被战略性地用于提高转化率、提升客户体验和扩大用户参与度。

一个被证明有效的大规模推荐系统是亚马逊的数据驱动和个性化营销方法,通过智能推荐给用户来提高平台的销量。据《麦肯锡洞察》杂志报道, 亚马逊 35%的收入是由其推荐引擎 产生的。这一成就之所以成为可能,是因为推荐系统应用于电子邮件宣传活动及其网站的大部分页面,包括站内和站外推荐。

有两种类型的推荐系统:

  1. 基于内容的推荐:根据产品的属性或特征进行推荐的方法。例如,如果一个产品与另一个产品共享属性,在用户购买第一个产品的情况下,系统应该推荐第二个产品,因为用户的偏好与第二个产品匹配的可能性更高。
  2. 协同推荐:这种方法基于多个用户显示的交互进行推荐。例如,如果几个客户同时购买了一种产品和另一种产品,系统应该相互推荐每一种产品,因为以前的客户在以前的场合一起购买了这两种产品。

4.客户分析

客户是任何电子商务公司的关键因素,强调为客户提供良好的客户体验和满意度应该是首要关注的问题。为了达到这样的服务水平,有必要了解客户及其偏好。

电子商务平台有可能跟踪客户从进入网站到离开的活动,无论这是在购买或销售某些产品之后,还是在浏览产品之后。基于这种了解客户的必要性,它采取的每一个行动都必须被记录和存储为潜在的有用数据,以确定客户的概况。

从收集到的数据中生成关于客户的可行见解的过程称为客户分析。

客户分析有助于了解客户行为的趋势和变化,以便修改业务战略,并相应地做出关键业务决策。它还提供了一种方法来分析哪些获取和保留客户的渠道实际上是有效的,哪些是无效的。

为了建立客户分析平台,电子商务公司必须关注客户的关键特征,包括:

  • 客户描述和细分:可以根据客户的偏好、购买和浏览模式对客户进行分组,以建立个人档案并在此基础上提供推荐。此外,这种分析有助于建立目标受众、个性化产品,甚至适用于每个群体的营销策略。
    这也有助于将重心转移到最赚钱的客户,以建立更好的客户关系。客户可分为地理特征、行为平台、人口特征和心理特征。
  • 情感分析:这是确定一组单词或句子背后的情感的过程,目的是通过产品评论或支持票来识别客户对其购买或销售的产品所表达的情感。
    情感分类器可以是正面的、负面的或中性的,有助于回应投诉和改善客户服务等。
  • 流失分析:这是根据客户在平台中的活动,分析客户购买产品的可能性的过程,旨在优化现有的获取和保留策略。流失率的提高可以极大地影响业务的增长甚至可持续性。
  • 终身价值预测:这是客户在与平台建立关系期间将为企业提供的估计总收入。该估计是使用早期交易模式、交易频率和交易量等因素进行的。
    预测终生价值预测,有助于规划向什么样的客户投入业务资源,以从他们身上获取最大价值。

5.使用 Python 的数据探索过程

分析数据集之前的第一步是预览它包含的信息。为了轻松处理这些信息,我们将使用 Pandas ,这是一个用于数据操作和分析的 Python 库,它提供了用于操作数值表和时间序列的数据结构和操作。

对于不熟悉 Python 的人来说,它是一种强调编码效率、可读性和脚本重用性的高级通用编程语言。

数据集和脚本都可以通过这个链接在我的 GitHub 上找到。下面,我将包含在您的计算机上运行分析所需的代码:

# Imports 
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import seaborn as sns
import numpy as np

在导入必要的库之后,继续创建包含数据集信息的 pandas 数据框架,并研究它:

# Read dataset and preview
data = pd.read_csv('e_commerce.csv')# Exploring data
data.info()

通过在“数据”变量中应用 info()方法的结果,我们可以访问数据集内的信息,该数据集由电子商务平台中的一系列交易组成,我们已经为这些交易确定了用户 ID、购买产品 ID 和许多在该过程中有用的描述性数据。

在继续分析之后,我们继续清理数据帧中的空特征。正如我们在下面的代码中看到的,产品 2 有 173.638 个空字段,这意味着用户在这种情况下不会购买一个以上的产品。此外,产品 3 有 383.247 个空字段:

# Count null features in the dataset
data.isnull().sum()

现在,让我们继续用零值替换空要素,因为我们需要一个干净的数据集来对其执行操作:

# Replace the null features with 0:
data.fillna(0, inplace=True) # Re-check N/A was replaced with 0.

在数据框架中,我们有客户进行的所有交易,其中包括每个人进行的每笔交易。为了确定在我们的平台上花费最多的用户,让我们按用户 ID 分组并合计花费金额:

# Group by User ID:
purchases = data.groupby(['User_ID']).sum().reset_index()

此外,我们还可以访问每个用户 ID 购买的产品,让我们用用户 ID 1.000.001 试试:

data[data['User_ID'] == 1000001]

在确定了消费最多的用户之后,让我们提取这些用户的年龄范围以及每个年龄组的平均销售额:

purchase_by_age = data.groupby('Age')['Purchase'].mean().reset_index()

年龄在 51-55 岁之间的用户群是在平台上花费最多的人群,所以也许我们应该将营销活动瞄准他们。让我们来看看用户年龄的图形分布:

plt.figure(figsize=(16,4))
plt.plot(purchase_by_age.index, purchase_by_age.values, color='purple', marker='*')
plt.grid()
plt.xlabel('Age Group', fontsize=10)
plt.ylabel('Total Purchases in $', fontsize=10)
plt.title('Average Sales distributed by age group', fontsize=15)
plt.show()

作者图片

另一方面,它将有兴趣找出哪个年龄组和性别进行更多的交易。这两个事实很容易用几行代码计算出来:

# Grouping by gender and age
age_and_gender = data.groupby('Age')['Gender'].count().reset_index()
gender = data.groupby('Gender')['Age'].count().reset_index()# Plot distribution
plt.figure(figsize=(12,9))
plt.pie(age_and_gender['Gender'], labels=age_and_gender['Age'],autopct='%d%%', colors=['cyan', 'steelblue','peru','blue','yellowgreen','salmon','#0040FF'])
plt.axis('equal')
plt.title("Age Distribution", fontsize='20')
plt.show()

作者图片

# Plot gender distributionplt.figure(figsize=(12,9))
plt.pie(gender['Age'], labels=gender['Gender'],autopct='%d%%', colors=['salmon','steelblue'])
plt.axis('equal')
plt.title("Gender Distribution", fontsize='20')
plt.show()

作者图片

另外,我们可以计算出平台的客户所展示的那些职业中,哪些是购买产品较多的职业。看一看下面的代码:

# Group by occupation:
occupation = data.groupby('Occupation')['Purchase'].mean().reset_index()# Plot bar chart with line plot:
sns.set(style="white", rc={"lines.linewidth": 3})
fig, ax1 = plt.subplots(figsize=(12,9))
sns.barplot(x=occupation['Occupation'],y=occupation['Purchase'],color='#004488',ax=ax1)
sns.lineplot(x=occupation['Occupation'],y=occupation['Purchase'],color='salmon',marker="o",ax=ax1)
plt.axis([-1,21,8000,10000])
plt.title('Occupation Bar Chart', fontsize='15')
plt.show()
sns.set()

作者图片

最后,我们可以确定平台中最畅销的产品:

# Group by product ID
product = data.groupby('Product_ID')['Purchase'].count().reset_index()
product.rename(columns={'Purchase':'Count'},inplace=True)
product_sorted = product.sort_values('Count',ascending=False)# Plot line plot
plt.figure(figsize=(14,8))
plt.plot(product_sorted['Product_ID'][:10], product_sorted['Count'][:10], linestyle='-', color='purple', marker='o')
plt.title("Best-selling Products", fontsize='15')
plt.xlabel('Product ID', fontsize='15')
plt.ylabel('Products Sold', fontsize='15')
plt.show()

作者图片

结论

我写这篇文章的目的是提供一种直觉,让人们了解全球公司如何应用数据科学来获取、保留和发展他们的客户群。除此之外,我还想对电子商务中涉及的理论提供一个实用的解释,包括推荐系统和客户分析。

如果你喜欢这篇文章中的信息,不要犹豫,联系我分享你的想法。它激励我继续分享!

深入了解数据科学的相关文章:

神经网络在烟囱溢流剖面中的应用:

[## 根据你的个人资料,你应该学习哪种技术?

根据堆栈溢出用户的标签,利用网络分析和 Python 来找出您应该…

medium.com](https://medium.com/swlh/which-technology-should-you-learn-according-to-your-profile-e081cf35d72f)

纽约 Airbnb 租房数据分析:

[## Airbnb 租房——使用 Python 分析纽约

发现最方便的租赁方式,以便继续实施具有良好可视化效果的数据分析。

towardsdatascience.com](/airbnb-rental-analysis-of-new-york-using-python-a6e1b2ecd7dc)

使用漂亮的可视化工具增强指标、KPI 和数据解释:

[## 用 Python 实现商业智能可视化

我准备了一份详尽的指南来展示漂亮的可视化效果,以增强度量、KPI、预测和其他…

towardsdatascience.com](/business-intelligence-visualizations-with-python-1d2d30ce8bd9)

感谢您花时间阅读我的文章!如果您有任何问题或想法要分享,请随时通过我的电子邮件联系我,或者您可以在以下社交网络中找到我以了解更多相关内容:

参考

使用数据科学轻松处理企业资源规划数据

原文:https://towardsdatascience.com/data-science-for-erp-data-2b414028f9b6?source=collection_archive---------45-----------------------

用数据管理

面临分析公司数据的挑战,厌倦了巨大的 Excel 文件?用一个简单的 Jupyter 笔记本给他们写信

Dmytro Karabash 一起创建

信用:斯科特·格雷厄姆@ unsplash

介绍

你现在是老板了。你有一个团队或一个业务部门在做咨询。可能是一群帮助客户的顾问,一些项目经理以敏捷或其他方式领导你的项目。每个人都填写他们的时间表(如果他们不填写,你会削减他们的奖金)——时间是向客户收费的,你也有固定费用的项目。也许更小的团队也是你组织的一部分——你可以领导 10 人、100 人或 1000 人(嘿,伙计——你管理一个有 1000 名员工的单位?不要读这篇文章——找一个读过的人。你甚至可能有一个 ERP(企业资源规划)或什么的,在一个可爱的角落办公室里有一个 CFO。你有没有一个很好的方法来估计每个团队成员和项目带来多少利润,以及如何合理精确地预测它?如果你有一个像样的 ERP 仪表板,它能给你所有这些,那么你是幸运的,你也不需要这篇文章。你有可能在年底得到一个简单的计算结果——比如“让我们假设你的项目在一年内的所有收入融资和 800 美元的人工日成本得到你的单位盈利能力”。800 美元可能看起来高得离谱,也可能低得不可接受,这取决于你从事的行业。所以这就是你计算你的团队给公司带来的钱的精确度?需要我们提醒你这是你工作存在的原因之一吗?

你还能得到什么?所有的时间表项目都有预算,你甚至可以得到大概的成本(我们以后再讨论)——一年的大量数据,即使是 10 人的团队。我们向您展示的是,您不需要 ERP 来完成剩下的工作 Jupyter 中的笔记本就可以了。请记住这一点——管理始于衡量。如果你手头没有他们的数据,你怎么能监督你的团队和项目呢?

为什么这里需要数据科学?好吧,你可以在你的手指上有所有的数据。最终,你会希望像这样计算你的利润

profit **=** revenue **-** cost

不仅是减去两个数字,而且是在表的层次上——所以上述语句的输出可以是一个表,其中包含每个顾问每月的利润,如下所示:

或者通过下面的陈述获得 3 月份计费时间最多的 3 个人的列表

t**.**where**(**t**[**'Billable'**]** **&** **(**t**[**'month'**]** **==** '2020-03'**)**
        **).**groupby**([**'User'**])[**'effort'**].**sum**().**nlargest**(**3**)**

但是我们为你创建了一个 Jupyter Notebook ,你可以在那里玩代码,让它在几个段落中工作(感谢fast pages——我们的帖子和笔记本是一回事)。是的,需要学习一些 python。与您自己做的任何事情(ERP 报告、Excel、其他工具)的巨大区别在于,任何分析都保留在笔记本中,并且可以在您的数据更改后重新应用。

数据科学

所以,让我们把这件事做完。首先,是的,你需要了解一点 python 来获取文件。基础水平就可以了。如果你是 2020 年的经理,却不能写一个简单的脚本——嗯,你可能错过了一些东西。我们的目标不是构建 ERP,甚至不是拥有一个易于使用的工具包——我们希望向您展示如何为自己制作一个工具包(但是可以随意重用我们的代码)。你将看到的是一组简单的例子——花一两个小时将你的文件载入笔记本,然后开始玩它——只需做出你想要的分析。你最终可以检查一些数字或者构建你的图表和仪表板。没关系,即使你为一家公司工作(那是你最需要它的地方)——只要安装 Anaconda 并下载笔记本就可以了。所以,我们首先获取并转换我们的输入文件(如果你想了解文本和所有代码——在 colab 上阅读)。

我们加载的数据

让我们在这里总结一下——如果你是团队领导或业务部门经理,最有可能的情况是——你很少有字典

  • 每个地区的成本或“外部”贡献者的默认成本
  • 不属于你的项目每小时的平均收入
*# show roles*
roles **=** data**[**"roles"**]**
roles

我们需要设置默认值,并将其转换成易于使用的格式,这在 python 中非常容易:

default_revenue **=** 1200
default_cost **=** 850*# wide to long format*
roles_long **=** pd**.**melt**(**roles**.**reset_index**(),**
                     id_vars**=[**'Position'**,** 'Seniority'**],**
                     var_name**=**'region'**,**
                     value_name**=**'cost'**)**
roles_long

现在,人数数据

  • 你的员工名单,以及他们的等级(或费用)
  • 参与模式(员工或承包商)
*# show head count*
headcount **=** data**[**"Employees"**]**
headcount **=** headcount**.**merge**(**
    roles_long**[[**'Position'**,** 'Seniority'**,** 'region'**,** 'cost'**]],**
    how**=**'left'**,**
    left_on**=[**'Seniority'**,** 'Position'**,** 'Country'**],**
    right_on**=[**'Seniority'**,** 'Position'**,** 'region'**])**
headcount**[**'cost'**]** **=** headcount**[**'cost'**].**fillna**(**default_cost**)**
headcount

  • 有预算、工作量估算、日期、收入确认类型(时间和材料、固定费用或其他)等的项目
*# show projects*projects **=** data**[**"Projects"**]**
projects

您的团队/项目的时间表。其他团队可能会参与您的项目,而您的团队可能会在外部项目中工作

*# show timesheets*timesheet **=** data**[**"timesheet"**]**
timesheet

这里的 EXT 用户不在我们的人数之内(假设我们没有获得真实姓名,但在这种情况下,我们从 ERP 获得了一些 id)

为什么不直接用 ERP 来做呢?你的 ERP 可能没有很好地呈现你想要在你的层面上控制的参数(否则,你无论如何也不会读这篇文章)。到 2025 年,可能会有一个项目在进行改进——也许四大律所之一正在面试你的要求。如果您驾驶这艘船的时间足够长,您可能会得到快速而肮脏的计算、对 SAP 的 SQL 查询(字段名仍然是德语)或 Excel 文件。为什么?你的老板不在乎——他们已经雇佣了你,而且更好的 ERP 将在 2025 年到来。所以他们想知道你的团队赚了多少钱(最好是每个人、每个月、每个项目,有图表、预测和比较),并想知道为什么它不那么有利可图(因为它从来都不是)。

为了简化您的工作,我们将从时间表中创建一个时间序列,这有点复杂,所以您现在可以跳过它,稍后再回来,但关键是,最终,您将获得一个可爱的每月熊猫数据框架。在数据科学中,拥有一个可以轻松分组和过滤的大数据框架(类似于 excel 表或 SQL 表)是很常见的。它是有帮助的,因为它使事情变得非常容易。

收益性

时间表和项目预算通过这种方式得到了简化,您可以在几条简单的语句中以您想要的方式操作它们。如果你学过 excel 公式,你也可以这样做。现在,让我们以最简单的方式来看看盈利能力。作为经理,我们建议你这样做来为你的团队设定基准。因此,利润就是收入——成本,我们希望保持简单。你可以实现你喜欢的计算。

收入:比方说,对于一个&材料项目,你产生的收入与你开出的账单(按照约定的费率)一样多,一直到它的预算。我们不做任何固定费用确认公式。不同的公司有不同的做法,你要么需要历史数据,要么需要实际认可的价值,这取决于你的经营方式。

我们还假设我们只对人数中的用户感兴趣(所以我们过滤掉所有分机用户)。

*# revenue calculation for a person for a month* 
*# (SUM REV of all timesheet records * corresp project rates)*
revenue_df **=** timeseries**[[**'User'**,** 'Project'**,**
                         'Billable'**,** 'effort'**,** 'date'**,** 'month'**]]**
revenue_df **=** revenue_df**.**merge**(**projects**[[**'Project'**,** 'Daily Rate'**]],**
                              how**=**'left'**,**
                              on**=**'Project'**)**
revenue_df**[**'Daily Rate'**].**fillna**(**default_revenue**,** inplace**=True)**
revenue_df **=** revenue_df**[(**revenue_df**[**'User'**].**str**[:**3**]** **!=** 'EXT'**)** **&**
                        **(**revenue_df**[**'Billable'**])]**revenue_df**[**'daily_revenue'**]** **=** revenue_df**[**'Daily Rate'**]** ***** \
    revenue_df**[**'effort'**]**
revenue **=** revenue_df**.**groupby**([**'User'**,** 'month'**])[**
    'daily_revenue'**].**sum**().**unstack**().**fillna**(**0**)**
revenue **=** revenue**[**revenue**.**sum**(**1**)** **>** 0**]**
revenue**.**head**()**

我们每个月都有人均收入。不会太复杂吧?

成本:让我们从这样一个事实开始:仅仅使用“默认成本率”是不够的——每当利润受到压力时,你应该做得更好。你可能有在不同国家工作的人,他们的水平完全不同。和你的财务团队谈谈,从他们那里得到一些估计(或者一起做)。如果你被任命管理一个团队或业务部门,我们会说他们欠你很多。我们假设你在每个国家都得了几分。每个人的成本也很好。这个工具的美妙之处(与自己做 Excel 相比)在于你可以直接添加它——它只是几行代码。让我们来计算每月的直接成本:这里我们检查张贴在时间表上的工作成本,假设它们是满的——也可以检查一个月中的工作日数并进行比较。我们对外部资源不感兴趣,所以我们将再次过滤掉它们。

*# cost calculation for a project* 
*# (SUM COST of all timesheet records * corresp cost rates - see roles)*
cost_df **=** timeseries**[[**'User'**,** 'Project'**,** 'effort'**,** 'date'**,** 'month'**]]**
cost_df **=** cost_df**.**merge**(**headcount**[[**'Name'**,** 'cost'**]],**
                        how**=**'left'**,** left_on**=**'User'**,** right_on**=**'Name'**)**
cost_df **=** cost_df**[**cost_df**[**'User'**].**str**[:**3**]** **!=** 'EXT'**]**
cost_df**[**'daily_cost'**]** **=** cost_df**[**'cost'**]** ***** cost_df**[**'effort'**]**
cost **=** cost_df**.**groupby**([**'User'**,** 'month'**])[**'daily_cost'**].**sum**()**
cost **=** cost**.**unstack**().**fillna**(**0**)**
cost **=** cost**[**cost**.**sum**(**1**)** **>** 0**]**
cost**.**head**()**

现在,我们可以通过对数据帧的操作来获得每个用户每月的利润。在这里它结出了一些果实。利润=收入—成本。事实上,它需要先清理一些数据——但不是太多

profit **=** revenue **-** cost
profit**.**head**()**

这是我们承诺过的,对吗?好的,第二个——在三月份输入最多计费时间的人

t **=** timeseries  
t**.**where**(**t**[**'Billable'**]** **&** **(**t**[**'month'**]** **==** '2020-03'**)**
        **).**groupby**([**'User'**])[**'effort'**].**sum**().**nlargest**(**3**)**

还有什么?

现在,让我们看看如何将一些 python 和数据科学技术(我们将在下一篇文章中获得更多细节)应用于您在上面看到的数据,以及如何很好地将其可视化。

首先,让我们采取一个项目经理,并设想他/她的项目每月的收入。

**%matplotlib** inlinepm_selected **=** "CATHY THE NEW MANAGER"
drawdt **=** revenue**.**loc**[**pm_selected**].**Tplt**.**bar**(***range***(***len***(**drawdt**.**index**)),** drawdt**.**values**,** color**=**"green"**,**
        width**=**1**,** align**=**'center'**,** edgecolor**=**'black'**);**
plt**.**xticks**(***range***(***len***(**drawdt**.**index**)),** drawdt**.**index**);**
plt**.**ylabel**(**"Revenue / month: "**+**pm_selected**);**

这很简单。然后,对于那些稍微了解高级 python 的人来说,这是一件有趣的事情——您可以用几行代码制作一个交互式图表。好吧,作为团队领导,你可能不会这么做。抱歉。让我们做一些计算。首先,让我们确定输入的“可疑”时间(例如,一个人在一个给定的项目上连续三天以上做同样的工作,而不是 8 小时)——这是您自己做的一个快速检查,不需要问 PMO 任何事情,也不需要将它正式化。我可以说这是可疑的,因为我们工作的性质(你的可能会不同,所以你寻找另一种模式)使得你不太可能连续几天在一个项目上花费相同的时间(除非你被指派全职)。你正在做的事情很可能只是以某种方式将你的工作时间分配给你的项目。

*# remove the weekend*
working **=** timeseries**[(**timeseries**[**'workweek'**]** **==** **True)**
                     **&** **(**timeseries**.**Billable**)].**copy**()**
working **=** working**.**groupby**([**"User"**,** "Project"**,** "date"**]).**sum**().**sort_index**()**
working**[**'value_grp'**]** **=** **(**working**.**effort**.**diff**(**1**)** **==** 0**).**astype**(**'int'**)****def** **streak(**df**):**  *# function that finds streak of 1s: 0,1,1,0,1 -> 0,1,2,0,1*
    df0 **=** df **!=** 0
    **return** df0**.**cumsum**()-**df0**.**cumsum**().**where**(~**df0**).**ffill**().**fillna**(**0**).**astype**(***int***)** working**[**'streak'**]** **=** streak**(**
    working**[**'value_grp'**])**  *# streak of identical effort*
result **=** working**[(**0 **<** working**.**effort**)** **&**
                 **(**working**.**effort **<** 1**)** **&**
                 **(**working**[**'streak'**]** **>** 3**)].**reset_index**()**result **=** result**[**result**.**User**.**str**[:**3**]** **!=** 'EXT'**].**groupby**([**'User'**,** 'Project'**]).**last**()**
result**[[**"effort"**,**"date"**,**"streak"**]]**

需要明确的是,基于以上所述,我们不建议发送主题为“时间可疑者名单”的电子邮件。人们可能会改变他们的行为,你可能不容易找到下一个模式。作为一名经理,你挖掘数据,发现见解,并以你认为合适的方式采取行动。你不会告诉你十几岁的孩子现在你知道他把香烟藏在哪里了吧?

用例

这里有一些上面提到的有用的例子——我们将在下一篇文章中讨论其中的一些。

  • 决策——例如,确定最大的亏损项目
  • 确定需要管理层关注的项目——在这里也应用机器学习,并确定你将自己挑选的项目
  • 更好地分析非计费工时
  • 识别可疑行为—异常检测
  • 基于现有模式的收入和工作预测,当计划偏离时不突出显示
  • 整合的按需分析(例如盈利能力预测、收入预测、未分配容量),以防您的 ERP 无法做到这一点

关键是加载你的数据(excel、CSV、TSV——无论什么)很简单,操作也很简单——比在许多 excel 文件中操作更直接,比等待 PMOs 更快。

请继续关注我们的下一篇文章。

最初发表于 Y 我们的数据博客

面向所有人的数据科学

原文:https://towardsdatascience.com/data-science-for-everyone-177482b5e140?source=collection_archive---------36-----------------------

开始从事数据科学的灵感

海威的座右铭

E 每个人都对数据科学充满热情——大多数人只是不知道。根据我自己在大数据、建模、分析等方面的经验。,数据科学有时候会觉得势不可挡;或者至少,只留给那些高级数学家和编程天才。虽然从外表上看,这个场可能是这样的,但实际上,它并不是无处不在。

这并不是说那些有数学倾向的人不会有数据/建模的倾向,但这种倾向并不是入门所需要的。也许在某一点上,拥有广泛的统计或建模背景实际上是利用数据的先决条件,但今天,事情发生了变化。

今天,似乎最阻碍人们进入数据科学的是信息量和概念的复杂性。可以理解,这个领域是由那些已经建立了分析思维模式的人建立的——许多概念或教程可能有点高层次。

你不知道,你所不知道的——还有很多你不知道的

通常,一个问题的答案只会让你有三个额外的问题,以此类推。

试图学习如何有效地利用数据,很快就会感觉自己对它一无所知。如果你的第一课是你实际上什么都不知道,并且你觉得其他人什么都知道,你就不太可能有效地理解新信息。

事实是,开源共享、堆栈溢出、GitHub 的美妙之处,以及数据科学中信息交换的普遍速度也是促使新人离开这个领域的原因。冒名顶替综合症猖獗。

相对于在汹涌的河流中踩水,学习如何在游泳池中游泳要容易得多

这并不是说数据科学的基本性质应该改变。恰恰相反。取而代之的是指出某样东西越难学,它最终产生的知识就越有价值。

养成健康的习惯

人们出于本能而好奇,我们只是在探索好奇心的方式上做出了不同的选择。生物学家探索自然和生命的基本机制,物理学家探索现实的运作和边界,艺术家探索人类的思维及其与他人的关系。几乎每个行业或领域都在探索我们生活的某个特定方面,并以独特的方式突破界限。我认为数据科学可以让你量化和理解所有这些探索。

如果知识就是力量,那么数据就是原始的未开发和未成型的知识

数据是现代世界中最重要的商品。每个企业和行业都想最大限度地利用它。为什么?因为数据是物化的知识。它有效地增强了决策能力。它总是干净整洁的吗?当然不是。容易组织和理解吗?很少。但事实上它无处不在,现代竞赛是看谁能最有效地利用它——看谁能根据最聪明的见解以最快的速度做出最好的决定。

没有任何生物能以今天最慢的计算机的速度处理、加工或操纵信息。我们已经开发了一种方法来消化无数的输入,以前所未有的速度接收深不可测的输出。实际上,我们有办法具体回答你能想到的几乎任何问题。你想知道什么?大多数商家想知道什么?

科学和计算是你得到答案的方式。但是计算机是迷人的,因为它们可以在几分之一秒内解决复杂的方程,但可能不理解你最简单的意图。它们同时是这个星球上最深奥和最愚蠢的创造。这是因为,实际上,它们是一种工具,而工具只能和用户一样有效。如果计算机真的如此强大,我们为什么要把自己的见识局限于一个普通用户呢?

数据科学在每个领域都有应用,每个问题都有解决方案。从信息的角度来看,没有什么比这更强大或更重要了。这对每个行业都至关重要,也是最终达成任何解决方案所必需的。这是我们能得到的最接近客观真理的东西。

数据科学和分析是收集、处理、利用和解释这些知识的方式。这是现代决策背后的产业。因此,毫无疑问,这就是未来。

决策需要大量的思考。人脑和计算机哪个处理思想的速度更快?

所以一个一般人达到这个认识,试图进入这个领域,立刻就不知所措了。有些人立即放弃。要学的东西太多,太复杂,太难。然而,那些不可避免地会成功的企业仍能保持活力。

即使是追求数据科学的行为,尤其是当它来之不易时,也是一个至关重要的区别。一个人必须是一个问题解决者,一个人必须能够自己处理含糊不清的问题,陷入深深的困惑,然后独立地找到澄清。这是有经验的数据科学家经常面临的问题,也是试图学习建模技术的人第一次遇到的问题。但它的价值无可估量。你获得了一种内在的动力,去寻找一些真正非凡问题的最佳答案。你成为未来的问题解决者。

数据专家不只是带着一堆知识醒来。他们通过实践和经历来学习。专家通过频率成为专家。他们与初学者的区别在于,他们比大多数想尝试第一次的人尝试得更多,失败的次数也更多。拥抱失败并从中吸取教训。这几乎适用于每个行业——但在数据科学中,你可以很快从失败中吸取教训,因为你可以立即判断出你是否失败了。此外,你可以在几个小时内发现你失败的确切原因。答案就在那里。

丘吉尔雕像

“成功不是最终的,失败不是致命的,重要的是继续下去的勇气。”"成功是跌跌撞撞地从一次失败走向另一次失败,却不丧失热情"

——温斯顿·丘吉尔

做出了明智的决定,而人们只看到那个决定。事实上,这个决定是基于无数组信息精心设计的。数据科学家是决策制定背后的工程师。

作为一名数据科学家,坚持不懈是你成功的关键。保持对你想要的答案的渴望。保持对最佳化的驱动力。对你尚未发现的事物保持好奇和热情。

最成功的人是那些以最快速度做出最明智决定的人。那些利用每一点信息做出最佳选择的人。

历史数据科学:远程阅读

原文:https://towardsdatascience.com/data-science-for-history-distant-reading-b072e4f6d055?source=collection_archive---------51-----------------------

历史数据科学最有前途的应用之一是数字人文学科中被称为“远程阅读”的技术。远距离阅读是对更熟悉的术语“近距离阅读”的有意颠倒,意思是对文本细节的仔细、精细的检查。相比之下,远程阅读包括使用自动化对大量文本进行归纳。我在上一篇文章中用入侵文学的例子暗示了这一点,但现在我想借此机会详细说明什么是远距离阅读以及它是如何工作的。

远距离阅读的现代体现归功于意大利文学学者弗朗哥·莫雷蒂(Franco Moretti),他在 21 世纪初震惊了文学界,建议文学学者完全放弃近距离阅读。他创造了这个术语,并写了一本关于远程阅读的书(字面意思为),但量化文本的方法早在他之前就有了,正如泰德·安德伍德在他 2017 年的文章《远程阅读的谱系》中指出的那样。像数据科学本身一样,远程阅读独立于数字人文学科而存在,并声称其血统远远超出了现代计算的出现,但数字化已将其提升到一个新的水平,并以前所未有的方式将其纳入主流。虽然当前的化身起源于文学学者,遥远的阅读适用于历史方法,好像不是更容易。

远程阅读的核心概念是通过从大量的文学作品中收集见解,而不是依赖于从有限的“伟大”作品中进行细读。莫雷蒂认为这种方法的主要好处是能够更好地识别超越国界和流派的大规模模式,开拓研究范围,包括传统经典以外的作品,以及远距离阅读是客观的,而近距离阅读最终是主观的事实。前两点显然是对的,对于历史资料来说更是如此,因为传统资料的“正典”只占可用资料的很小一部分。然而,关于第三点,我必须建议谨慎行事。远距离阅读比近距离阅读更客观,提供了确凿的证据,但它是完全客观的,而不是完全客观的。处理数据是一门艺术,也是一门科学,只要涉及到人类(剧透:总是),就会有一定程度的主观性。文集的作品是怎么选出来的?你是如何决定使用哪种模型的?你找到的东西在多大程度上取决于你正在寻找的东西?远程阅读既不是完全客观的,也不是神奇的灵丹妙药,无论弗朗哥·莫雷蒂如何试图说服你。最好不要单独使用,而是与细读和其他更传统的技巧结合使用。

不要成为这种人(感谢 XKCD 的兰德尔·门罗

现在来看看远距离阅读到底有多有效。文本分析属于数据科学的一个分支,称为自然语言处理(NLP)。NLP 是数据科学家知道数字人文主义者所说的“远程阅读”的名称。NLP 涉及通过对文档进行矢量化来分析文档,也就是说,将文档转换成可用于训练预测模型等的数值集。最基本的矢量化是通过计数。对于文档中的每个单词,取该单词出现的次数,并将其视为该单词的值。将接下来发生的事情可视化的最简单的方法是一个简单的二维散点图。假设我们从图书馆拿了 10 本书,并计算“狮子”和“老虎”这两个词在每本书里出现了多少次。然后,我们将“狮子”数量作为一个维度,将“老虎”数量作为另一个维度来绘制它们。结果看起来像这样:

只统计了两个单词(而且数据是由你真实地在现场编造的)这显然是一个非常粗略的分析,但是仅仅根据这个情节,我们就可以对这些书的内容做出一些猜测。在左上角,我们有书上老虎出现的频率比狮子高得多。也许这些书是关于老虎的,或者重点介绍了老虎。在右下角我们看到了相反的情况,那里的书更多的是描写狮子而不是老虎。在右上角有狮子和老虎的高计数(也许是关于大型猫科动物的书?)在左下角,两者都很少——很可能这些是关于其他东西的书。现在想象一下,我们为单词“bear”的计数增加了第三个维度同样的逻辑仍然适用——书籍根据其内容移动到情节的不同区域,点与点之间的距离可能被解释为意义。现在想象我们增加了第四维度……但你无法想象,因为我们生活在一个三维世界(至少在空间方面)。令人欣慰的是,数学仍然有效——就计算机而言,你可以继续增加维度,得到的点之间的距离概念仍然有一些意义。有了足够多的词汇,你可能不仅能分辨出一本书是关于狮子还是老虎,还能分辨出它是悲观还是乐观,是写于 19 世纪还是 20 世纪,或者它属于哪种类型。开始问这类问题,弄清楚它们是如何相互作用的,很快,你就可以进行远距离阅读了。

计数矢量化只是一个开始。还有其他形式的矢量化,如 tfi df(TtotalFfrequencyInverseDdocumentFfrequency)矢量化,它使用相对于整个语料库中的频率的频率,而不是原始计数。其他方法考虑一个术语旁边出现的单词来衡量上下文和含义。不同的预处理方法,如删除过于常见的“停用词”或通过词干化或词汇化将词缩短为更通用的词根形式,可以用来影响矢量化的结果。还有多种不同的方法可供选择。例如,情感分析技术旨在识别文档的语气,而主题分析旨在确定文档在谈论什么。所用的方法一如既往地取决于所提的问题。

这就是你的介绍——欢迎来到遥远阅读的奇妙世界!请记住,它不是魔术,它不会创造纯粹的客观真理,但如果使用正确,它会是一个非常强大的工具。不要放弃近距离阅读(对不起,佛朗哥·莫雷蒂),而是尝试远距离阅读——你不会后悔把它加入你的工具包。

造福社会的数据科学

原文:https://towardsdatascience.com/data-science-for-social-good-a88838bc8ed0?source=collection_archive---------20-----------------------

变更数据

超越我们想看什么类型的电影,到我们想生活在什么类型的世界。为社会公益做数据科学的资源、例子和机会。

照片由哥鲁达Unsplash 上拍摄

五年前,美国前总统巴拉克·奥巴马(Barack Obama)将 DJ Patil 博士介绍为联邦政府的首位首席数据科学家,并号召数据科学家加入到改善国家和世界的努力中来(主题视频)。

但是,如何通过数据科学让世界变得更好呢?

最常见的是,我发现了一些关于它的方法和技术如何在商业环境中有所帮助的例子。然而,由于我的背景是评估公共政策和项目,我想更多地了解如何使用数据科学来确定项目或政策的影响,或者设计基于证据的公共政策。

因此,我开始了一项搜索任务,以找出那里有什么资源,真实的用例是什么样的,以及数据科学如何用于社会公益。以下是我在资源、用例示例和机会方面的发现,适用于那些希望提高自己在该领域的技能并努力获得更大社会影响力的人。

卡内基梅隆大学数据科学和公共政策中心:在他们的网站上,你可以找到数据科学在社会科学和公共政策中产生重大影响的项目实例。他们能够做出贡献的领域有:刑事司法、教育、经济和劳动力发展、能源、环境、公共卫生、交通和基础设施、公共安全。一些真实的使用案例包括:用于预防不利的警察事件的早期干预系统、预防圣何塞的住房违规事件、通过行为和数据分析减少供水中断、减少艾滋病毒感染和提高艾滋病毒医疗护理的参与度等。每个项目都在他们的网站上有详细的描述,因此它们可以作为那些希望获得灵感的人的伟大用例。

[## 主页

www.datasciencepublicpolicy.org](http://www.datasciencepublicpolicy.org/)

更棒的是,他们每年都会组织社会公益数据科学夏季奖学金,通过该奖学金,他们将来自世界各地的有抱负的数据科学家聚集在卡内基梅隆大学,与非营利组织和政府机构合作开展为期 3 个月的数据科学项目,并向经验丰富的导师和项目经理学习。在项目期间,所有的研究员都有工资,并提供住房。要注册,请访问他们的网站,因为他们的注册过程在每年年初进行。

[## 卡内基梅隆大学数据科学公益暑期奖学金

数据科学为社会公益奖学金是一个全职的夏季计划,培训有抱负的数据科学家工作…

www.dssgfellowship.org](https://www.dssgfellowship.org/)

英国国家数据科学和人工智能研究所 艾伦图灵研究所 也复制了这个成功的程序。今年,由于新冠肺炎的原因,DSSGx 似乎将在遥远的地方举行。

艾伦图灵研究所的网站和博客也提供了与数据科学应用对社会影响相关的有趣和有用的材料。而且,从今年开始,他们已经开始实施一个新的实习项目——图灵实习网络,通过这个项目,他们将工业界和博士生联系起来。不幸的是,这些实习只针对那些拥有在英国工作权利的人。

[## 主页|艾伦图灵研究所

我们相信数据科学和人工智能将改变世界。我们是先锋;训练下一个…

www.turing.ac.uk](https://www.turing.ac.uk/)

DataKind,哪些主要陈述是“利用数据科学的力量为人类服务”和“…使用数据不仅可以更好地决定我们想看什么样的电影,还可以更好地决定我们想看什么样的世界”:微笑。如果你是这个领域的新手,并且希望获得经验,你可以申请他们的志愿者项目。对于更有经验的数据科学家来说,志愿服务可以作为回报社会和做有意义工作的一种方式。他们的一个优势是,除了总部在纽约之外,他们在班加罗尔、三藩市、新加坡、英国和 DC 华盛顿都有分部。DJ Patil 和许多其他杰出的数据科学家也是他们的顾问。

[## 数据种类

了解 DataKind 网络中发生的情况

www.datakind.org](https://www.datakind.org/)

****。org** ,一家来自英国的非营利组织,自称是一个跨学科和跨部门讨论政府部门数字革命的影响和潜力的全球论坛。他们组织年度会议,提交的论文在 Zenodo 平台上的a 社区中公开发表。涵盖的主题包括:数据驱动的城市系统,促进可持续的智能城市发展;使用机器学习减少公共采购中的腐败:欺诈检测模型;如何用机器提取档案数据等。**

** [## 政策 CIC 的数据

我们正在招募一组志愿者来协助国际政策的第五次数据运行…

dataforpolicy.org](https://dataforpolicy.org/)

微软研究院数据科学暑期学校— 我最后添加这个机会,因为尽管它很特别,但它只面向来自纽约市地区的大学生。暑期学校包括一个为期四周的数据科学实践介绍强化课程,入选学生还将因参与该课程而获得津贴。

[## 微软研究院数据科学暑期学校-微软研究院

2020 年重要更新:由于新冠肺炎,我们将举办今年的虚拟暑期学校,它将…

www.microsoft.com](https://www.microsoft.com/en-us/research/academic-program/data-science-summer-school/)

评估和数据科学

农业、卫生和教育是大数据影响最大的领域。

[## 衡量大数据时代的结果和影响:评估、分析和…

我们生活在一个越来越依赖于大数据和数据科学的世界,在我们个人生活的方方面面…

www.rockefellerfoundation.org](https://www.rockefellerfoundation.org/report/measuring-results-and-impact-in-the-age-of-big-data-the-nexus-of-evaluation-analytics-and-digital-technology/)

对于那些对公共政策和项目评估感兴趣的人来说,值得一读的是 BCT 合伙人公司的首席数据科学家皮特·约克和发展评估顾问迈克尔·班贝格今年出版的一本书,这本书可以在网上免费找到,因为它的出版得到了洛克菲勒基金会的支持。令人高兴的是,这份报告更深入地研究了大数据和数据科学如何服务于影响评估,方法方面,整合数据科学和评估的必要条件,趋同领域,以及分歧点。它还包括一个案例研究,说明如何通过使用机器学习、预测分析和其他大数据技术来提高儿童福利计划的绩效。

此外,我在研究数据科学如何在公共部门中发挥作用时看到的一篇非常有用的文章是由 Alex Engler 写的关于所有政策分析师需要了解的关于数据科学的知识。亚历克斯是布鲁金斯研究所的研究员,研究人工智能和新兴数据技术对社会和治理的影响。我发现他的工作值得效仿。

[## 所有政策分析师需要了解的数据科学知识

由于公共政策不能在实验室里进行,所以实验在政策研究中很少见。实验需要…

www.brookings.edu](https://www.brookings.edu/research/what-all-policy-analysts-need-to-know-about-data-science/)

政府数据来源

现在让我们来谈谈数据的来源,以防你想检查它们,甚至试着使用它们。

好消息是,越来越多的政府正在开放他们的数据,并提供给任何人免费下载和使用。

下面,我们可以看到经合组织发布的一张图表,向我们展示了各国在数据可用性、数据可访问性和政府支持数据再利用方面的表现。毫不奇怪,韩国正处于领先地位,因为它甚至在最近向世界展示了它如何使用大数据和人工智能来对抗新冠肺炎(在 TDS 上发表的文章中给出了很好的描述)。

资料来源:经合组织,公开政府数据

这些只是一些例子。如果你想知道哪些国家加入了开放政府伙伴关系,你可以查看他们的成员名单。

如果你知道任何其他有用的资源和例子,请写评论给我,我会把它们添加到列表中。**

用于社会公益的数据科学:免费开放数据的最佳来源

原文:https://towardsdatascience.com/data-science-for-social-good-best-sources-for-free-open-data-5120070caf02?source=collection_archive---------12-----------------------

类型、优点以及在哪里可以找到它们

Viktor Forgacs 在 Unsplash 上拍摄的照片

内容

  1. 简介
  2. 什么是开放数据?
  3. 开放与免费与在线数据
  4. 去哪里找公开数据?
  • 国际组织
  • 美国
  • 欧洲
  • 拉丁美洲
  • 亚洲
  • 其他开放数据源(谷歌公共数据浏览器、Kaggle、FiveThirtyEight、UCI 机器学习库等。 )

5。结论

介绍

数据科学有能力为建设我们想要生活的世界做出巨大贡献。已经有许多用例展示了如何利用它来解决现实世界中的问题。

在我以前关于这个主题的文章中也可以找到一些这样的例子:

[## 造福社会的数据科学

超越我们想看什么类型的电影,到我们想生活在什么类型的世界。资源、示例和…

towardsdatascience.com](/data-science-for-social-good-a88838bc8ed0)

然而,为了做到这一点,我们需要可以自由重用的数据,并以有用的格式进行组织。在本文中,我将介绍一些在这方面可以使用的最著名和最重要的门户网站。

什么是开放数据?

“开放数据”是指不受版权、专利或其他控制机制限制的免费数据。 ( 联合国儿童基金会数据 )

在这种情况下,仅仅在硬拷贝报告中公开共享数据是不够的。要使数据被认为是完全开放的,它必须遵循一定的原则,使其效用最大化:

  • 使用国际公认的分类(国家适用 ISO-3166)进行组织;
  • 使用非专有文件格式(如 JSON 或 CSV);
  • 通过符合标准的通信接口(如 SDMX-JSON)提供;
  • 并用适当的元数据来描述它。

开放数据是一个更大的运动的一部分,它还包括开源软件、开放教育资源、开放访问、开放科学、开放政府等。

越来越多的特定类型的数据开始被视为的“公共产品”,当这些数据可供使用、重用和免费分发时,可以带来更好的政策制定、更明智的决策、价值创造和以公民为中心的服务。而就是这样,开放政府数据理念和一套政策也出现了。

开放式政府是一种理念,根据这种理念,公民应该能够获得政府文件和数据,以进行有效的公共监督。通过公开政府数据,公共机构在它们所服务的公民面前展现了透明度和问责制。

我遇到的一个令人惊讶的例子来自韩国首尔,在那里,开放数据已经成为常态,被用来解决城市和市民面临的真正挑战。在首尔,不仅公共机构在使用他们收集的数据,而且任何企业、非营利组织或普通公民都可以访问这些数据,如果他们希望利用这些数据或只是出于问责原因检查这些数据的话。

市政厅的目标之一是向市民提供开放数据,以便他们可以使用这些数据并在此基础上进行建设。通过这样做,它有助于创造一个新的行业,其中许多初创公司使用提供的数据来开发创新的解决方案,以应对城市面临的一些挑战。

想了解更多关于韩国和其他国家的例子,请看《经济学人》的视频:

开放数据、免费数据和在线数据

开放数据是没有限制的数据。免费数据是可以免费获得的数据。通常,开放数据也是免费的。但当涉及到在线数据时,并不是所有的数据都可以免费或无限制地使用。在许多情况下,它是受版权保护的,是其创造者的专有权利,它需要许可或支付费用。

即使数据没有版权,事情也不是完全清楚的。我们可以想到从 LinkedIn 上删除数据。2019 年,美国上诉法院驳回了 LinkedIn 阻止分析公司 HiQ 抓取其数据的请求。即便如此,LinkedIn 不喜欢任何人试图从它的平台上抓取数据,并且在一些文章中警告不要这样做

去哪里找开放数据?

现在,让我们进入这篇文章的核心:在哪里可以找到公开的数据;无论是政府的还是其他类型的。下面,我介绍了国际组织提供的数据源、特定区域(美国、欧洲、拉丁美洲、亚洲)的数据源以及其他类型的全球相关数据源。

国际组织

世界银行公开数据

* [## 世界银行公开数据

世界银行公开数据来自世界银行:数据

data.worldbank.org](https://data.worldbank.org/)

通过这一门户,世界银行提供了免费和开放的途径,获取有关全球各国发展的大量数据。这是因为他们相信,通过提供更广泛的数据访问,他们可以提高透明度和问责制,并有助于帮助决策者做出更明智的决策。

用户可以按照国家和地区或指标浏览 4593 个数据集,这些数据集是围绕不同部门(农业、教育、性别、基础设施、环境、城市发展等)组织的。).

他们的搜索门户更有价值的是,它提供了对各种类型数据的访问,如时间序列、微观数据(从抽样调查、人口普查和行政系统中获得),以及地理空间数据

此外,如果你想更好地了解可以从他们的数据集中提取的信息类型,可以看看他们的 191 种可视化效果,涵盖的主题包括没有用上电的人数、全球二氧化碳排放量的增加、资源枯竭、获得改善的水源等。

经合组织数据

[## 经合组织数据

查找、比较和分享最新的经合组织数据:图表、地图、表格和相关出版物...最新的经合组织中期…

data.oecd.org](https://data.oecd.org/)

经合组织的数据门户网站提供了 875 个数据库,可以根据感兴趣的国家或主题(农业、发展、经济、教育、能源、环境、金融、政府、卫生、创新和技术、就业、社会)进行搜索。

该门户网站的好处之一是,它还提供长期记录的数据,有时早在 1959 年。一个不利之处是,它主要涵盖了与经合组织成员国相关的数据。例如,罗马尼亚不是其中的一部分。

如果你还不想下载数据集,只是想探索他们的存储,你可以在他们的数据仓库中的大型数据库上进行自己的查询。统计

联合国数据

[## UNdata

人口人口,表面积和密度国际移民和难民人口增长,生育率,寿命…

data.un.org](http://data.un.org/)

联合国数据门户的创建源于这样一种信念,即统计应被视为一种公益,可以为循证政策和更好的知情决策服务。

该门户网站旨在提供对联合国编制的 32 个大型数据库中的 6000 多万个数据点的免费访问,与其他国际机构在单一入口点的访问一样。来源组织的例子有:粮食及农业组织、世界卫生组织、世界银行、经合组织、国际货币基金组织等。

搜索引擎允许用户根据更大的数据集、数据源或主题来查找信息。每个这样的元素都有一个下拉菜单,在我看来,可以方便用户导航。

此外,联合国数据通过单独的门户网站提供对三个专门的 UNSD 数据库的访问,如联合国国际贸易统计数据库、在线统计月报和众所周知的可持续发展目标指标。 联合国商品贸易统计数据库 是官方国际贸易统计数据、相关分析表格和出版物的资料库。 MBS Online 提供全球 200 多个国家和地区的经济社会统计数据。它包含 55 个表格,100 多个指标,涵盖各种主题,记录了 80 年。

联合国全球可持续发展目标数据库 提供了对 460 个数据系列的访问,这些数据显示了在实现可持续发展目标方面取得的进展。门户网站上的搜索可以按目标及其具体目标和指标进行过滤,也可以按地理区域(因为它还包括国家概况)和年份(2000 年至 2019 年)进行过滤。

联合国数据门户网站提供的其他一些功能包括访问作为《联合国统计年鉴》一部分制作的流行统计表以及国家(地区)和区域的统计概况。

儿童基金会数据

[## 公开数据-儿童基金会数据

“开放数据”是指不受版权、专利或其他机制限制的免费数据…

data.unicef.org](https://data.unicef.org/open-data/)

儿童基金会的数据门户网站是为那些希望专门处理儿童和妇女数据的人而设的。他们的 数据仓库 包括与儿童死亡率、儿童贫困、儿童保护和发展、教育、性别、孕产妇、儿童和新生儿健康、移民、营养、向工作过渡等主题相关的数据集。同样,数据也可以按国家过滤。

GHO 数据仓库——世界卫生组织

[## GHO

GHO 数据库是世卫组织 194 个成员国获取卫生相关统计数据的门户。它提供对…的访问

www.who.int](https://www.who.int/data/gho)

就数据而言,世卫组织的覆盖率很高,因为它与来自六个区域的 194 个会员国合作。通过全球卫生观察站,世卫组织提供了其监测的 1000 多项指标,这些指标可以根据可持续发展目标卫生和卫生相关目标下的主题、类别或国家进行导航。它提供的数据类型包括:道路交通伤害、非传染性疾病和精神健康、环境污染死亡率、烟草控制、清洁城市、健康公平监测等。

作者在谷歌数据集搜索上拍摄的标题

美国

数据。政府

[## Data.gov

今天标志着老年人健康数据收集的启动-一个新的资源编目超过 200 个联邦数据集…

www.data.gov](https://www.data.gov/)

美国政府的开放数据门户帮助用户浏览来自不同政府机构的超过 225 079 个数据集,这些数据集可以与工具和其他资源一起用于进行研究、开发 web 和移动应用程序、设计数据可视化等。

使用它的一个优点是,它允许根据位置(在地图上)、主题、格式、数据类型(地理空间或非地理空间)、组织、组织类型、局和出版商来过滤数据。

该门户的一个缺点是,尽管大多数数据集都有有效的元数据,但仍有一些数据集没有允许下载的有效 URL。

美国人口调查局

[## Census.gov

人口普查局的使命是作为美国人口和经济的高质量数据的主要提供者。

www.census.gov](https://www.census.gov/)

美国人口普查局负责产生关于美国人民和经济的数据,因为它的主要任务是每十年进行一次美国人口普查。它收集的数据然后被各级决策者使用——联邦、州或地方。

它提供的工具包括:美国事实查找工具、人口普查数据浏览器和 Quick Facts,这些工具允许用户根据自己的兴趣搜索和可视化数据。

欧洲

欧盟开放数据门户

[## data . Europ . eu

欧洲数据门户收集公共数据门户上可用的公共部门信息的元数据…

data . Europ . eu](https://data.europa.eu/)

欧盟开放数据门户网站提供免费获取广泛主题的数据,如:教育、环境、经济和金融、农业、林业、食品、卫生、政府和公共部门、司法、能源、科学和技术、交通等。 15 561 个数据集(截止日期)来自所有欧盟机构、团体和机关(如欧盟统计局、欧盟统计局、联合研究中心、欧洲投资银行、欧盟委员会总司、环境署等。).

门户网站上提供的大多数数据都可以免费重复使用,无论是用于非商业目的还是商业目的,前提是注明来源。而且只有少数数据集有特殊的再利用条件,这是出于保护第三方知识产权的需要。

作为奖励,该门户还提供对可视化目录的访问,该目录包括一系列可视化工具培训材料[数据可视化研讨会和网络研讨会,涉及使用 D3.js、Qlik Sense、Webtools Maps、PowerBI 等工具以及可重用可视化工具

欧洲数据门户

[## 主页|欧洲数据门户

欧洲数据门户对欧洲开放数据的现状进行年度基准评估…

www.europeandataportal.eu](https://www.europeandataportal.eu/en)

该门户由欧洲联盟出版办公室管理,收集欧洲各国公共数据门户上的公共部门信息元数据。迄今为止,它涵盖了 36 个国家、81 个目录和 1,089,978 个数据集,人们可以根据类似于欧盟开放数据门户使用的类别进行搜索。

此外,它还包括关于提供数据和重新使用数据的好处的信息。

开放所有欧盟成员国的政府数据网站

加上不再是欧盟一部分的英国:

[## 开放式政府

英国第四个开放政府国家行动计划 2019-21 (NAP),在第六届开放政府期间发布…

www.gov.uk](https://www.gov.uk/government/collections/open-government)

亚洲

亚洲开发银行数据库

[## 亚行数据库|亚洲开发银行

亚行鼓励网站和博客链接到其网页。文章可以不加修改地重新发布…

data.adb.org](https://data.adb.org/)

亚洲开发银行成立于 1966 年,有 68 个成员,其中 49 个来自亚洲和太平洋地区。它的数据库有一个非常直观的搜索系统,通过这个系统,人们可以按主题或国家进行浏览。该存储库包含(迄今为止 ) 234 个数据集、45 个仪表盘和 10 个数据故事。涵盖的主题包括:金融部门、贫困、人民、公共部门治理、经济学和其他。

我在亚行最近的评估会议上了解到的另一个有趣的亚行产品是 EVA ,这是一个人工智能引擎,它扫描评估和其他类型的文件,以确定亚行在其成员国开展的业务中的经验教训。

韩国开放政府数据门户

[## 대한민국 정보공개 포털

编辑描述

open.go.kr](http://open.go.kr/)

在开放数据方面,韩国是最佳实践的一个很好的例子。然而,他们的网站是专为母语人士设计的。

拉丁美洲

数字促进发展

[## 美洲开发银行

探索一个国家的主要发展指标与其宏观经济概况、全球…

data.iadb.org](https://data.iadb.org/)

数字促进发展是美洲开发银行的开放数据门户,展示了拉丁美洲和加勒比地区的社会经济指标。它建立在七个数据源之上:Agrimonitor(跟踪农业政策)、INTrade(区域贸易)、Latin Macro Watch(宏观经济、社会问题、贸易、资本流动、市场和治理)、公共管理、社会脉搏(生活状况)、SIMS(劳动力市场)、Sociometro(社会经济状况)。搜索过程可以按国家或指标过滤。

下面,我添加了一篇有趣的文章,内容是关于大数据和开放数据以前在拉丁美洲国家是如何用于社会公益的:

[## 大数据和开放数据如何改变拉丁美洲

我们使用 cookies 来改善您在我们网站上的体验。通过使用我们的网站,您同意所有 cookies 符合…

www.weforum.org](https://www.weforum.org/agenda/2018/03/latin-america-smart-cities-big-data/)

拉丁美洲国家的开放数据门户

其他开放数据源

谷歌公共数据浏览器

[## 谷歌公共数据浏览器

谷歌公共数据浏览器使大型数据集易于探索、可视化和交流。因为图表和地图…

www.google.com](https://www.google.com/publicdata/directory)

谷歌公共数据浏览器在某种程度上是一个搜索引擎,方便访问由国际组织(如本文前面所述)、国家统计局、非政府组织和研究机构提供的数据集。此外,其背后的团队希望为用户提供更多,这就是为什么他们的目标是使公众感兴趣的大型数据集更容易探索、可视化和交流,即使是非技术受众也是如此。

作者在谷歌公共数据浏览器上拍摄的标题

除了谷歌公共数据浏览器之外,还有 谷歌数据集搜索 引擎,它使用户能够通过简单的关键字搜索找到存储在网络上的数据集。当使用它时,可以应用与下载格式、使用权、主题相关的过滤器,或者根据最近的更新。数据源在搜索返回结果中对其数据集进行排名的一个标准是引用了某个数据集的学术文章的数量。

作者在谷歌数据集搜索上拍摄的标题

五三八

[## 我们的数据

我们正在分享一些文章和图片背后的数据和代码。

data.fivethirtyeight.com](https://data.fivethirtyeight.com/)

FiveThirtyEight 是来自新闻领域的高质量数据的非常全面的来源。涵盖的主题包括:政治、体育、科学与健康、经济和文化。

卡格尔

[## 查找开放数据集和机器学习项目| Kaggle

下载数千个项目的开放数据集+在一个平台上共享项目。探索热门话题,如政府…

www.kaggle.com](https://www.kaggle.com/datasets)

在开放数据源中,Kaggle 可能是数据科学家最熟知的,因为它围绕它建立了社区。

Kaggle 支持数据集的各种发布格式,但他们也鼓励数据集发布者尽可能以可访问和非专有的格式共享数据。支持的文件类型包括:CSV、JSON 和 SQLite。

对于数据科学新手来说,Kaggle 的一大优势是,它通过围绕每个数据集创建社区来支持学习,在社区中,每个感兴趣的用户都可以通过解决与该数据集相关的任务来做出贡献,提交他们的结果并参与讨论,接收和提供反馈。

DBpedia

[## DBpedia

与我们联系。成为 DBpedia 协会的成员,加入我们的各种委员会或帮助开发一个…

wiki.dbpedia.org](https://wiki.dbpedia.org/)

DBpedia 是基于维基百科中最常用的信息框构建的,其本体目前包含 4 233 000 个实例,例如,其中 1 450 000 个是个人,241 000 个是组织。它的数据此前已使苹果、谷歌和 IBM 等公司受益,用于它们一些最重要的人工智能项目。

UCI 机器学习知识库

加州大学欧文分校机器学习知识库包含 557 个数据集,可用于机器学习算法的实证分析。它创建于 1987 年,一直被学生、教育工作者和研究人员用作机器学习数据集的主要来源。他们最新上传的数据集涵盖的主题包括:脸书大型网页网络、两栖动物、早期糖尿病风险预测、比特币等。自 2007 年以来,最受欢迎的五大数据集是指:鸢尾植物的种类,根据人口普查数据预测收入是否超过 5 万美元/年,使用化学分析确定葡萄酒的原产地,诊断乳腺癌,患者是否患有心脏病。

结论

在浏览上述门户网站时,我惊讶于它们所提供的大量信息,以及其中一些提供给公众使用的附加工具。数据真的可以很美。

随着世界上可用的数据量越来越大,我相信我们有越来越多的机会将它们用于更高的目的,帮助塑造一个更美好的世界。

感谢您的阅读。我希望内容是有用的。如果你认为还有其他开放数据的来源值得添加,请在评论中提及。*

为理解而丢失的数据科学艺术

原文:https://towardsdatascience.com/data-science-for-understanding-vs-data-science-for-prediction-ffe846ee11e1?source=collection_archive---------31-----------------------

通过将我们的领域局限于预测数据科学,我们使得这个领域更少人性化——结果是更难接近

用于理解的数据科学和用于预测的数据科学之间存在巨大差异。

前者是理解人们为什么使用🙃表情符号和他们试图传达的情绪状态——以及这在不同文化和年龄组之间有何不同。

后者预测,如果有人以一定的顺序键入某些单词,那么他们将键入的下一个表情符号是🙃。

前者需要丰富的跨学科技能——主要是人类的技能——正如我 2016 年在宾夕法尼亚州立大学演讲中首次提出的。

后者是一个纯粹的技术问题,甚至可能是一个微不足道的技术问题,只是端到端数据科学过程的一部分。

没有好奇心,就不会有理解🤔

不幸的是,“预测者”主导了当今数据科学领域的流行概念——尤其是围绕机器学习和人工智能的炒作。

每个人都想掌握最新的技术和建模技术,却不了解我们正在建模的潜在现象。

不仅没有理解,连一点好奇心都没有。

多年来,我最喜欢问数据科学学生的一个问题是,如果他们可以访问世界上所有的数据,他们会做什么。在过去,他们会说“我会寻求理解恒星的诞生,或社会的进步,或抑郁症的原因。”

现在,他们说“我会寻求学习计算机视觉,或深度学习,或神经网络。”

我们把所有的注意力都放在工具上,而忽略了我们试图解决的问题。杰出的德国心理学家埃里希·弗洛姆(Erich Fromm)在 1947 年就预见到了这一点,他写道:“我们已经陷入手段之网,看不到目的。”

不仅如此,当涉及到数据科学时,我们已经使这个领域变得更不人性化,因此更不容易接近。

数据科学是帮助我们了解世界的工具🌍

这几乎肯定是一个有争议的——很可能是少数——立场,但我甚至不确定用于预测的数据科学是否应该被视为数据科学——或者是否应该被视为工程学的一个分支。

公平地说,我主要认为自己是一名将数据科学作为理解世界的工具的研究人员,而不是我研究的对象本身,这一观点是由这一背景驱动的。

在我的职业生涯中,我一直感兴趣的问题基本上都是人类的问题。广告如何影响购买行为?我们如何让人们投票给我们的候选人?为什么人们会使用特定的表情符号,它们是什么意思?

这些都是涉及完整的端到端数据科学流程的问题。为了解决这些问题,我们需要有活力、有远见、跨职能的科学家,他们有天生的好奇心,热衷于了解世界和推动影响。

由于对预测的狂热关注,以及数据科学教育的卡格勒化,这些天我办公桌上的大多数数据科学简历都是学生们急切地寻求在最尖端的技术上超越彼此。

然而,他们简历上的几乎所有东西都是定义明确的项目,别人为他们做了最艰苦的工作。其他人定义问题,其他人收集、处理和组合数据。在他们建立了一个模型之后,其他人决定了这个模型的含义和下一步该做什么。

需要说明的是,当然有一些数据科学的工作只专注于构建模型,而且大多数工作报酬都很高。

但对我来说,这些工作并没有体现出数据科学的真正潜力和前景——增进我们对周围世界的了解。

只专注于机器学习会让我们的领域变得不那么多样化🖥

如果今天的数据科学家被视为整天坐在电脑后面,调整超参数的人,那么我们已经大大削弱了我们的领域,并因此使其更加多样化。

当我第一次进入数据科学(通过生物统计学的方式)——当哈尔·瓦里安第一次在 2009 年说“未来十年最性感的工作将是统计学家”——我们设想的人是一个有远见的布道者,让人们对这个迷人的新领域的潜力感到兴奋。

就连瓦里安也形容这个人有“获取数据的能力——能够理解数据、处理数据、从中提取价值、可视化数据、进行交流。”

我们是如何从 2009 年的那个起点走到今天的,当时我的一个同事半开玩笑地对我说,“我永远不会信任一个数据科学家去做一个 Powerpoint。”

我最近遇到了一位年轻的数据科学家——她向我坦白说,她有很多处理数据的经验,但对机器学习来说是新手,她甚至不确定自己是否应该成为数据科学家。

我不知道现在的学校在教什么,也不知道硅谷的招聘实践在传达什么,但这是一个非常新的现象!

我在 2012 年开始面试数据科学的工作,机器学习会作为一种事后想法出现,而且很少。

对于我面试的几乎每一个职位——初创公司和大型科技公司都是如此——我只是偶尔会被问及机器学习。我会笑着说我只知道聚类和分类的区别。招聘经理会说,这已经足够了😂

我们如何吸引充满活力、全面发展、充满好奇心的思考者进入我们的领域?🤓

在几乎所有情况下,数据科学中涉及模型拟合的部分通常是该过程中最不有趣、难度最小的部分。这一部分在两边都被动态和令人兴奋的问题空间所包围:将现实世界的问题转化为数据科学问题,获取、准备和清理数据,在左边和右边,找到见解并将其编织成一个产生影响的故事。

过去几年,我职业生涯中最大的收获之一是我有多爱“数据侦探工作”——这也是我对新闻业的热情派上用场的地方。追踪不同的数据来源,理解它们的含义,分析数据,并了解其来源。我觉得这一切太迷人了!

如果 80%的数据科学都是在清理数据,那么我们也需要热爱这一部分的人,而不仅仅是把它视为麻烦的人。

如果我们只将这个领域缩小到机器学习和预测,我们能够吸引那些充满活力、充满好奇心、有条不紊和坚持不懈的思想家吗?

还是说,这只会导致那些可能成为最佳大图数据科学家的人被吓得退出这个领域?这是否会导致工程导向型的人进入这个领域,期望一直做所有的 ML,而对实际的数据科学大部分时间是什么样子感到不满,并离开这个领域?

我不假装知道所有的答案,甚至不知道其中的任何一个,但我确实认为我们需要重新利用数据科学的价值来理解世界,而不仅仅是预测未来。

迈向数据科学的一小步为了理解:2016 选举日的顶级表情符号

在家学习数据科学

原文:https://towardsdatascience.com/data-science-from-home-b06042781799?source=collection_archive---------71-----------------------

图片由吉尔·威灵顿皮克斯拜拍摄

意见

该领域将如何应对新常态?

随着新冠肺炎局势的持续和新常态的可能性,一旦最糟糕的情况减轻,企业将寻求改变他们的流程。在不久的将来,我们可以预期的最大变化之一是在家工作选项的扩散,即使在封锁放松之后。很大一部分员工在家工作的频率可能会增加。

那么,这对数据科学领域及其从业者意味着什么呢?

在过去的一个半月里,我一直在家工作。我可以对自己说,我在时间管理方面有困难,不能面对面地与他人交流,并且面对持续不断的真正可怕的消息。在所有这些过程中,我还试图对我们的工作在数据科学方面的未来有所了解。

寻找新的机会

照片由海登·邓塞尔Unsplash 上拍摄

我们做生意的方式需要彻底改革。因为世界已经改变,我们的许多旧业务流程也需要改变,以适应新的现实。对于零售业来说,这意味着创造新的购物方式,既融入社交距离措施,又能减少恐慌性购买。运输、优化、定价和供应链模型将有更大的人员和能力限制。更复杂的是,购买模式在最近几个月发生了巨大变化,这种情况的新鲜感意味着我们不能依赖过去的数据来寻找模式。我们现在需要回答的一个重要问题是,在完全没有足够的过去数据的情况下,如何在灾难期间实时识别模式。

零售业也不是唯一会受到影响的行业。想想银行的信贷模型。现在,这些信用模型是否足够准确,足以决定一个人是否应该获得贷款?

或者,我们能相信当前的欺诈模型能捕捉到疫情事件后我们可能开始看到的所有新型欺诈吗?

我可以指出许多例子,在这些例子中,我们过去的数据不再具有代表性,我们需要想出新的方法来做有效的工作。过去,我经常想:“数据科学家还有什么可发明或创新的呢?一切都已经做好了!”现在我意识到情况不再是这样了。尽管这不是任何人希望它发生的方式,但我们有一个巨大的机会来塑造数据科学的未来。

每个人现在都很紧张,这是有原因的。这个世界正在经历一场巨变,与大多数人记忆中的任何事情都不一样。但我们也可以将这些时间视为创新的机会,为数据科学专业提出新的想法。我们现在所做的工作可能被证明是至关重要的,在大流行后的世界中找到一个位置。

每个人现在都是从零开始。

当这一切都过去后,让我们寻找方法让我们的领域变得更好。

不要养成坏习惯

照片由 sps 环球Unsplash 上拍摄

任何数据科学项目的很大一部分都是交流。无论你是与你的商业伙伴讨论项目的需求,还是在你的团队内部讨论潜在的想法,清晰的沟通在每一步都是至关重要的。我已经意识到冠状病毒的爆发已经严重影响了这一传播链。它减少了由即时讨论产生的大量调查工作的可能性。我不能只是四处看看,然后让团队中的某个人给我拿些东西,或者讨论项目的各种方法。相反,我需要为我需要讨论的所有事情安排一个时间,不管这些事情有多小。

由于这些沟通问题,我们很有可能回到一堆坏习惯,这些坏习惯是我们在新冠肺炎时代之前的世界里意识到它们不起作用后积极劝阻的。例如,我现在的很多时间都被会议和电话占用了,而不是在我的项目上工作。会议时间的增加尤其令人沮丧,因为已经很好地证实了过多的会议与更高的生产率并不相关。

我们养成的另一个坏习惯是侵蚀工作和家庭生活的界限。

现在,随着笔记本电脑进入我们的卧室,工作时间和停工时间之间没有明确的界限。缺乏真正的、有意义的休息时间会导致精疲力竭和压力增加。现在,我在不同的地区看到了这种情况。在印度工作,我可以看到我在美国的商业伙伴在不恰当的时间回复询问;我也是如此。

我们必须采取大胆的行动来避免这些坏习惯压倒我们的能力。首先,我们需要在召开足够多的会议以便有效沟通和召开太多的会议以至于没有人有时间完成工作之间找到一个平衡。不要安排整个会议,看看你和你的同事是否能通过即时消息或电话处理简单的问题。

虽然人们不再这样使用手机,但我记得手机主要是用来给别人打电话的。

此外,我发现在家里努力保持一个独立的工作空间也有助于设定清晰的界限。

最关键的是,你睡觉的地方不应该有工作。

我自己在书房角落里有一个很好的显示器和一把符合人体工程学的椅子,让它尽可能接近我以前的办公环境。这些简单的改变极大地提高了我的生产力。我一整天都保持良好的姿势,并且在工作时有很多屏幕空间。这种设置也有助于在一天结束时从工作中解脱出来。你的家不是为你的数据科学工作而设计的。专用的工作空间确实有助于您创建一个能有效满足您整体工作需求的工作环境。

你的家不是为你的数据科学工作而设计的。专用的工作空间确实有助于您创建一个能有效满足您整体工作需求的工作环境。

文档现在至关重要

斯科特·格雷厄姆Unsplash 上拍照

过去,我们的环境为我们提供了多种协作方式,让我们可以提出自己的想法。我们可以面对面地与人们交谈,或者召开会议来解释我们的想法。我们可以去同事的办公桌前询问一段特定的代码。我们可以与其他数据科学人员召开工作会议,让一些东西发挥作用。在某种程度上,办公环境提供了很多透明度和对他人工作的洞察力,有助于你自己的项目。但是现在,由于我们仅限于尝试通过协作工具如 Slack、Zoom、吉拉和其他工具进行交流,我们需要获得一些新的习惯。

虽然文档一直是数据科学工作中的一个重要方面,但由于缺乏这些过去的共享途径,它的重要性已经成倍增加。

这包括代码注释,给你的商业伙伴写详细的电子邮件,坚持不懈地记录每一个过程。过去,数据科学家总是在场,完整地解释他们的分析和结果。但是在我们目前的情况下,在没有白板和演示等工具的情况下,彻底跟踪一切并记录甚至最简单的部分有助于清楚地表达我们的想法。现在,我不仅在我的项目的 confluence 页面上记录我每天所做的事情,而且每当我觉得需要更多地了解他们的项目时,我也会看看其他人的 confluence 页面。尽管这种文档工作每天都要多花一点时间,但这有助于我理解我的工作,也有助于每个相关人员以更有意义的方式理解和做出结论。它的额外好处是进一步减少了许多不必要的会议。此外,好的文档有助于您的项目经理跟踪项目,提供想法和建议,并快速掌握重要信息和结果。

找到一种适合你的应对方法

安德烈·班达拉在 Unsplash 上拍摄的照片

让我强调一下,如果你现在感到工作压力太大,这真的没关系。我们都是。随着持续的不确定性,企业对少花钱多办事的需求不断增长,以及我们周围不可避免的绝望感,很难不经历某种程度的倦怠。

请记住,在家工作时,你会有好的一天,也有坏的一天,就像我们在办公室工作时一样。我们都有自己处理办公室不愉快的方式。一些人和朋友出去,而另一些人可能只是在不好的感觉中睡觉。但是现在,我们很多人第一次面临糟糕的工作日渗透到我们的家庭生活中。在这种新常态下,见朋友是不可能的,睡觉熬过这场磨难可能也不是一种选择。因此,虽然我们都在期待这场噩梦结束的那一天,但我们也需要与 24/7 的新闻周期保持健康的距离,偶尔把我们的注意力从事情上转移开。我已经强调要限制我接触新闻。我早上一次,晚上一次回顾一天的事情。就我个人而言,写作也是一种有益的治疗活动,因为我试图保持理智。你可以用不同的方式去做,无论是散步,锻炼,或者只是和你的朋友和家人聊天。但重要的是找到一种适合你的应对方法。

这是艰难的时刻,每个人都需要很强的意志力才能在保持理智的情况下度过难关。

在这篇文章中,我提供了一些处理这种情况的方法。本质上,我们需要寻找创新的机会,创造新产品,有效地管理我们的时间,准备好对会议说不,激烈地记录,并找到应对严峻考验的方法。然而,也许最重要的是,我们需要记住,当我们犹豫不决时,要原谅自己。

如果你想学习数据科学,我想调出吴恩达的这个 精品课程 。这是我开始的原因。

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

此外,一个小小的免责声明——这篇文章中可能会有一些相关资源的附属链接,因为分享知识从来都不是一个坏主意。

这个故事最初发表于 此处

从零开始的数据科学

原文:https://towardsdatascience.com/data-science-from-scratch-4343d63c1c66?source=collection_archive---------13-----------------------

作为一个完全的初学者如何步入数据科学

乌列尔·索伯兰斯在 Unsplash 上拍摄的照片

数据科学,也被称为本世纪最性感的工作,已经成为我们许多人的梦想工作。但对一些人来说,这看起来像一个具有挑战性的迷宫,他们不知道从哪里开始。如果你是其中之一,那么继续读下去。

在这篇文章中,我将讨论如何从头开始你的数据科学之旅。我将详细解释以下步骤。

  1. 学习 Python 编程的基础知识
  2. 学习基础统计学和数学
  3. 学习 Python 进行数据分析
  4. 学习机器学习
  5. 项目实践

学习 Python 编程的基础知识

如果您来自 IT 背景,您可能熟悉 Python 编程,在这种情况下,您可以跳过这一步。但是如果你还没有感受到编码的乐趣,你应该开始学习 Python。它是所有编程语言中最容易学习的,广泛用于开发和数据分析。

首先,你可以搜索免费的在线教程来帮助你理解 Python 的基础知识。我列出了几个链接,在这里你可以在短时间内自学 Python。你可以试试这些,自己选择。

这个列表并不详尽,您可以在网上找到更多的资源来帮助您开始学习 Python 的基础知识。你还可以找到很多 YouTube 频道,上面有针对初学者的 Python 教程。

一旦熟悉了语法和其他编程基础,就可以继续学习 Python 的中级和高级水平。虽然要擅长数据科学,但我还是建议你至少完成中级水平,这样你才能熟悉 Python 中的数据结构和文件系统。

让我们进入下一步。

学统计学和数学

数据科学是分析数据并得出有用且可行的见解的技能。为此,你必须具备基本的统计学和数学知识。我并不是要求你成为一个伟大的统计学家,但是你应该知道一些基本的知识来理解一些重要的事情,比如数据的分布和算法的工作。说了这么多,还是来看看你需要学什么吧。

首先,检查一下你的高中统计数据,这样你就可以再次接触基础。为此,我推荐可汗学院的一系列高中统计(如果你对它很透彻和熟悉,可以选择)。

复习完高中概念后,你可以开始阅读以下任何一本书:

上面的链接会直接带你到这些书各自的 pdf 版本。您也可以在方便的时候购买纸质版本。读完这些书之后,你也会熟悉数据分析的基础知识,这将在下一步帮助你。

N ote: 虽然我要求您学习 Python 来开始您的数据科学之旅,但在学习过程中,您会遇到其他几个工具,如 R,它们也用于统计计算和数据分析。我的总体建议是,无论你遇到什么,都要保持开放的心态。如果你用两种不同的语言执行一个任务,基本的工作和逻辑通常是相同的。这只是语法和框架的问题。

说到这里,让我们继续我们的第一次数据分析尝试。

学习 Python 进行数据分析

这就是有趣的地方。现在,您已经了解了 Python 编程的基础和所需的统计数据,是时候动手了。

如果你想免费学习,只需在 Udacity 上注册一个帐户,并报名参加他们的免费课程— 数据分析简介。本课程将向您介绍有用的 Python 库,如数据分析所需的 PandasNumpy 。你可以按照自己的进度学习,并在几周内轻松完成课程。

Udacity 上还有很多其他课程供你探索。你也可以找到由 Udacity 提供的纳米学位课程,通常你需要付费。如果你放心付费学习,有很多好的平台比如 CourseraDataquestDatacamp 等。尽管我强烈建议你查看一下 数据营的职业轨迹。 你可以根据自己已经知道的多少,找到最适合自己的赛道。

到这一步结束时,你应该熟悉一些重要的 Python 库和数据结构,如系列数组数据帧。您还应该能够执行诸如数据争论、得出结论、矢量化运算、数据分组以及组合来自多个文件的数据等任务。

虽然你现在已经准备好了下一步,但是在继续前进之前,还有一件事需要学习。弥合分析和机器学习之间差距的最后一把钥匙——数据可视化

数据可视化是数据分析的重要组成部分,因为它可以帮助您得出结论并可视化数据中的模式。因此,学习如何可视化数据是非常必要的。最好也是最简单的方法就是通过 Kaggle 的数据可视化课程。在这之后,你将熟悉一个重要的 Python 库— Seaborn。

N 注: Kaggle 是一个受全世界数据科学家欢迎的网站。它适时举办竞赛来挑战数据专家的技能,还提供免费的互动课程来帮助像你们这样的初露头角的数据爱好者。

太好了!您已经完成了学习数据科学的一半以上。让我们进入下一步,即机器学习。

学习机器学习

机器学习,顾名思义就是机器(计算机)自我学习的过程。它是通过经验自动改进的计算机算法的研究。您主要使用预定义的算法来构建模型,这取决于您所面临的数据类型和业务问题。这些模型根据给定的数据训练自己,然后用于根据新数据得出结论。

学习机器学习最简单的方法是按照给定的顺序完成 Kaggle 上的以下课程:

  1. 机器学习简介
  2. 中级机器学习
  3. 特征工程(改进您的模型)

虽然有许多其他方法来学习机器学习,但我提到了最简单的一种方法,你不必为此付费。如果钱不是你的制约因素,你可以在 DataCampCoursera (数一数二)、Udacity 等相关平台上探索各种课程。

到这一步结束时,你会明白监督机器学习非监督机器学习的区别。你也会知道各种重要的算法,如回归分类决策树随机森林等。

厉害!你刚刚破解了迷宫,加入了数据科学俱乐部。现在你要做的就是变得更好,爬上梯子。

项目实践

如果你还在读这篇博客,你真的具备了成为一名成功的数据科学家的条件。一旦你掌握了所有的知识,你就必须通过尽可能多的练习来保留和增强它。要做到这一点,你可以找到工作项目和要解决的业务问题。

保持练习的最好方法之一是参加卡格尔竞赛和解决问题。Kaggle 为您提供了需要解决的问题和需要处理的数据。如果是竞赛,你可以提交你的结果,并根据你的分数在排行榜中排名。

你也可以从事个人项目,建立自己的投资组合。您可以尝试以下资源来探索数据集:

为了练习,我建议您在本地机器上下载并安装 Anaconda 。这是做数据科学项目的一个很好的工具包。你会发现 Jupyter Notebook 是 Anaconda 中的一个工具,这是一个构建 Python 项目并在你的作品集中展示它们的好方法。

我确信,遵循这篇博客中的指导方针会帮助你实现学习数据科学的目标。你也可以查看下面我在 Coursera 上写的顶级数据科学课程的链接。在这个领域有很多东西要学,甚至有更多东西要探索。敬请关注。

[## Coursera 上的最佳数据科学课程

找出今年最适合你的 Coursera 课程

datasciencewithsan.medium.com](https://datasciencewithsan.medium.com/best-data-science-courses-on-coursera-2dabb62d4687)

2020 年的数据科学

原文:https://towardsdatascience.com/data-science-in-2020-afdcb2f6979f?source=collection_archive---------69-----------------------

什么保持不变,什么有所不同?

裘德·贝克在Unsplash【1】上的照片。

目录

  1. 介绍
  2. 什么保持不变?
  3. 有什么不同?
  4. 摘要
  5. 参考

介绍

2020 年当然有太多的不幸事件影响到几乎每个人。但是科技行业受到了怎样的影响,更具体地说,2020 年的数据科学受到了怎样的影响?根据您居住的地方、从事的行业以及您是哪种类型的数据科学家,这些异同可能适用于您,也可能不适用于您。下面,我将讨论这些影响,以及它如何在今年余下的时间里影响你。

什么保持不变?

Gabriel BenoisUnsplash【2】上拍摄的照片。

因为数据科学大部分时间都是技术领域的一部分(或者说,与其他工作相比,这个角色本身几乎不需要那么多的亲自参与的工作),所以日常工作中有一些部分幸运地保持不变,没有负面干扰。以下是数据科学过程中保持不变的相似之处或部分:

  • 视频会议的使用

当然,视频会议现在非常普遍,但根据我的个人经验,以及数据科学社区中其他密友的已知经验,视频会议在过去已经在大多数日常工作中占据突出地位。在我之前的一些公司,我和我们的团队需要在整个工作周通过视频进行几次通话,甚至每天都要打几次电话。进行这种沟通的原因是,虽然我们的团队亲自密切合作,但我们的利益相关者却没有。我们不再花 30 分钟到一个小时开车到其他有不同部门的办公室——更多的是围绕业务和非技术焦点,而是开一个视频会议。这样,当我们今年真的需要做同样的工作方法时,它实际上与我们以前的日常工作没有太大的变化。

  • 跨职能协作

与我上面所说的类似,无论是过去还是现在,都需要不仅仅是一个数据科学团队的协作,还需要其他几个团队的协作。一些例子是与市场营销、商业分析、客户服务等领域的利益相关者合作。同样的合作今年也很突出。

  • JIRA 和其他产品管理工具的使用

作为与利益相关者合作的一种方式,我们将使用 JIRA 或其他类型的产品管理工具进行交流。我们会创建票证,并在头脑中记着 sprint 目标来完成它们。今年也是如此。

有什么不同?

马库斯·斯皮斯克Unsplash【3】上拍摄的照片。

由于数据科学家的一些日常工作保持不变,今年的日常工作也发生了重大变化。

  • 更多视频会议

尽管我们已经在数据科学领域的许多合作中进行了视频会议,但今年我们还是进行了视频会议。起初,这有点让人不知所措,因为你必须学习视频交流的礼仪(尽量不打断,但必要时也要参与)。但是现在,已经司空见惯,意料之中,所以一直是慢慢变得正常的差异。

  • 不再有面对面的工作(对于许多公司,而不是所有公司)

伴随着以上一点,没有亲自动手。今年我甚至开始了我的工作,完全是在遥远的地方。这绝对是一次独特的经历,但随着每一天的到来,它变得越来越正常。

这种变化也促使企业首先询问自己是否需要办公室。

然而远程工作有时也有消极的一面——懒惰、工作量减少等等。现在,它得到了更多的尊重,一些公司甚至看到了更多的进步。

  • 你工作的时间

今年远程工作的一个更独特的副作用是,你不再需要正常的上午 9 点到下午 5 点的工作时间。有些日子你可以晚一点开始,但随后你会发现自己在家里的办公室工作到晚上 7 点,只是因为你没有被提醒要设法避开交通,并在正常的社会驱动的下午 5 点下班时间离开。当然,这可能是积极的,也可能是消极的,取决于个人和公司。

  • 新的工作时间

上面提到的一个可能的积极因素是,当你整天在家工作时,你会发现自己产生了更多的结果,做了更多的研究。你获得的新的工作时间可以是一个积极的变化,因为你不再花 30 分钟到 2 小时去上班——在我住的地方和其他大城市,交通会感觉好像永远都在工作,到你去工作的时候,你实际上已经筋疲力尽了,只是在你离开的时候又要做一次。因此,积极的一面是能够在仅仅清醒几分钟后就投入工作,完成更多的工作,也许是在下午 3 点而不是下午 5 点完成远程工作。

摘要

如您所见,对于数据科学家来说,2020 年有哪些保持不变,哪些发生了变化,有几个关键要点。这些要点也可以应用到其他护理人员和行业。总结一下,这些要点如下:

**Stayed the same:***Use of video conferencing**Cross-functional collaboration**Use of JIRA and other product management tools***Is now different:***Much more video conferencing**No more in-person work (for a lot of companies, not all)**The hours you work**The new amount of time you get for working*

感谢您的阅读!我希望你喜欢我的文章,并学到一些新东西。欢迎在下面评论你在 2020 年作为数据科学家的经历。什么对你来说保持不变,什么变了?哪些变化你不喜欢,哪些你喜欢?

参考

[1]照片由裘德·贝克Unsplash(2019)上拍摄

[2]Gabriel Benois 在 Unsplash 上拍摄的照片,(2020)

[3]2017 年 Markus SpiskeUnsplash 拍摄的照片

后危机时代的数据科学

原文:https://towardsdatascience.com/data-science-in-a-post-crisis-world-8d1a477d38f7?source=collection_archive---------26-----------------------

过去不一定能预测未来

来源: 约翰·霍金斯【COVID 仪表板

十年前,我刚刚开始涉足生物信息学,不知疲倦地学习统计学和计算。我开始学习 R 和数据库,用二手的 Pentium IIIs 搭建了一个集群进行并行计算,看了入门的机器学习文献。一切感觉就像昨天一样,却又是永远的过去。我很幸运,根本无法想象几年后我会在数据、科学和计算领域做些什么。过去几年可能是参与这一技术和方法演变的最佳时期;工具从未如此之好,数据从未如此之丰富,职业前景从未如此之乐观。从**久负盛名的* 旗/方到新兴的五人初创企业,数据科学这个术语随处可见。突然间,感觉我们拥有了解决癌症、贫困和各种社会政治问题的所有知识和工具,坐在自动驾驶汽车里,飞向月球。*

事实证明,只有最后一个愿望可能很快就会实现。2020 年初是一系列的警钟。疫情在短短几周内摧毁了世界,随之而来的是大规模的隔离、关闭、社会运动和动乱。随着经济引擎的燃料供应被切断,公司采取一切手段以求生存。不幸的是,数据科学部门发现自己很早就面临裁员,这可能与技术角色相对更能抵御经济危机的传统观念相矛盾。这要归咎于疫情,但可能不是所有的裁员;重组和整合是下意识的反应。这一过程的一部分可能是加速一场迟到的学习——当公司正在考虑如何迎接风暴并为复苏做准备时,一个不成比例的大数据科学团队可能被认为不太重要。

那么,为什么数据科学仅仅用了几个月的时间,就从 21 世纪最性感的工作变成了商业中不那么重要的工作呢?我们来深入探讨一下。还要注意,我将使用数据科学这个术语来涵盖更多的 技术领域,比如机器学习、统计学习、因果推理、AI,为了方便起见。此涵盖基本分析、报告、数据工程或商业智能,因为这些功能通常是全面需要的。不区分可能会使我的两美分过于宽泛,不能涵盖所有的细微差别,所以请原谅我。

数据科学的价值,解释

数据科学不是魔法,也不能凭空创造价值,尽管有些人可能不这么认为。为了让数据科学释放其全部潜力,至少有三个先决条件:

  • 业务正处于稳步增长的上升轨道,有一个巨大的基线,即使 1%的增量也足以证明大量数据科学投资的合理性;
  • 领导层真正了解数据,并愿意将数据的声音纳入战略构建,而不是利用数据来强化预先确定的决策;
  • 工程平台和运营团队成熟且可扩展,因此数据产品可以快速迭代和部署以实现收益。

我将详细解释这三个先决条件,但假设我的观点与事实相差不远,为了让数据科学大放异彩,需要具备很多能力。指望聘请一位知名研究人员担任首席数据科学家并立即产生回报,可能是不现实的。此外,这样一个高素质的团队甚至可能不是企业所必需的。

所以事不宜迟,让我们详细讨论一下这三个先决条件。

一个稳定增长的大企业

这在开始时可能不是不言自明的,因为世界经济的大部分在过去五年中都处于某种形式的增长或超增长状态,所以我们无法观察到反事实:当业务萎缩时,数据科学将如何发挥作用。过去的几个月表明,很少有人对减缓出血感兴趣;利用数据将周环比增长率从-20%降至-10%可能并不值得称赞。当衰退开始时,需要实施激烈的策略,例如暂停某些产品供应,分配过大的折扣,采取强有力的保留和重新激活措施,转向新的收入流等。由于这种策略以前很少执行(即使执行了,也可能被认为是异常值),过去的学习很难预测未来的结果,更不用说与市场中其他参与者同时移动所产生的二阶效应了。最终结果是数据科学的价值可能会迅速减少。

公司还可能意识到,这种战略和市场的不稳定性可能会在复苏阶段延续足够长的时间,因此,在未来几个月或几年内,可能不太需要全面的数据科学/机器学习团队。另一方面,如果业务以每月 20%的速度增长,投资于扩展产品功能、加强工程基础设施,甚至扩大物流和客户服务以进一步推动增长,可能会比大量投资于最先进的数据科学以改善现状更好。简单的目测分析和建模可能就足够了。例如,从战略上来说,投资 100 万英镑在未来 6 个月内将服务扩展到一个新的城市可能是一个更好的选择,而不是扩大当前的数据科学团队,这可能会也可能不会带来与优化现有城市业务相同的回报。另一点需要注意的是,随着最近数据科学的繁荣和人才的供过于求,公司可能有信心缩小数据科学部门的风险很低。尽管顶级人才仍然有很高的溢价,但从零开始相对快速地重建一个有能力的团队可能不会太具挑战性。

现在我们已经看到,在危机期间和危机过后,企业可能不需要大规模的数据科学存在。那么,数据科学发挥作用的最佳场景是什么?我认为企业可能需要:

  • 不缩水:利用数据减少整体损失并不是一件值得庆祝的事情。资本和资源可以更好地引导到强有力的支点。
  • 不过度增长:投资新功能可能比优化更可取,此外,过去的经验可能无法预测未来,因为业务变化可能非常快。在数据科学有效发挥作用之前,可能还有许多技术债务需要偿还。
  • 不平坦:如果业务进入缓慢增长和平台期,那么可能没有足够的增长/参与度来利用。事实上,最近科技领域数据科学的裁员可能部分归因于增长缓慢,因此可供探索的增量较小。

业务和产品也需要有足够的复杂性,以便机会不是肉眼直观的,而是只能通过复杂的数据分析和建模来发现。如果一个商家只在网上向客户销售一种产品,那么可能没有多少数据科学魔法可以施展。在一个由卖家、商品和买家组成的三方在线市场中,一种算法可以真正超越简单的规则系统,获得可观的利润,尽管回报在减少。第一种算法可能比简单规则高出两位数,比如 10-20%,但随后的改进可能会小得多,与现状相比通常不到 5%,代价是复杂性和可扩展性/维护挑战日益增加。如果你查看任何 Kaggle 竞赛,基线通常是随机森林或 xgboost 模型,获胜的解决方案通常是数百个模型的混合,结合外部数据和多轮仔细调整。然而,这种性能差异在商业上可能没有实质性的意义。对于不断增长的业务规模和复杂性,对数据科学功能的大量投入有时是一种前期投资,因此增长部分是投资假设的一部分。

也许实施这种非常复杂的方法来实现不到 5%的增量收益的唯一逻辑原因是,考虑到所有相关的直接成本和机会成本,5%的增量对业务来说必须足够重要。这意味着基线收入,或任何代理指标,如每日活跃用户,需要是巨大的。即使年收入达到 1 亿英镑,500 万英镑的 5%增量可能也只能维持 20 人强大数据科学团队的收支平衡,而且无法保证这种增量在未来几年能够实现。基线可能需要数十亿,在这种情况下,舞台上只剩下几个大玩家(脸书、苹果、亚马逊、谷歌、腾讯、阿里巴巴等)。对于较小的公司来说,投资于工程、销售、营销和分析,而不是技术密集型数据科学,可能会在短期内带来更好的回报。我过去曾在非常早期的阶段(不到 10 人)与相当多的公司交谈过,业务和产品处于早期开发阶段,雄心勃勃地计划建立一个数据科学/机器学习功能。现在还为时过早,这个团队更有可能被用来吸引投资者,而不是做有意义的工作。他们可能会花大部分时间进行特别分析,以回应领导的好奇心或建立数据管道。这并不是说这些不是关键任务,但这不是使用这种招聘的最佳方式。

您可能已经感觉到,数据科学是一个相当微妙的有机体,需要微妙的业务养分才能生存。它需要更多的内部和外部因素才能茁壮成长;进一步阅读。

精通数据科学的领导层

学术界和工业界的一个显著区别是,一个好的纸上研究是否能在合理的时间内在生产环境中实施,并有明确可衡量的结果。要做到这一点,领导层必须 1)全面了解数据科学产品,它能做什么,不能做什么,以及所有相关的风险、偏见和陷阱;2)支持所有级别的基于数据的思维和决策,并为数据科学提供有效的发言权;3)尊重数据的客观性;不要通过寻找有利的信号来将数据科学武器化。这些看似简单,但实际上很难做到始终如一。

成功的第一要素是领导者理解数据科学:数据是如何收集、汇编和提炼的;什么是抽样偏差;捕捉到了什么,更重要的是,没有捕捉到什么;分析和建模是如何完成的,假设和权衡是什么,等等。如果一位数据科学家分析了一项实验,并报告说一项新功能可能会增加 1%的用户参与度,那么这种说法通常会有很多假设。这种假设通常会在讨论、电子邮件链和总结中丢失,从而导致较大广播半径下的保真度降低。几度分离之后,人们可能会将一个估计解释为一个事实,将一个地区性实验的结果混淆为一个全球性实验,做出错误的推断,在错误的上下文中引用这样的数字来支持某些论点,等等。领导者需要意识到并促进数据科学研究的正确解释和使用,并在必要时进行纠正,有时甚至要介入并管理叙述。否则,误解可能会迅速发生,从而损害数据科学组织的可信度。

第二个要素是为数据科学提供合适的话语权。在过去,我目睹了两种情况,一种是数据科学家把从数据中发现的东西作为最终的真理来否定其他人的论点,另一种是数据科学家坐在决策桌的末端投下名义上的一票。这两种情况都不健康。理想情况下,数据科学应该为正在讨论的问题带来独立、客观(尽最大可能)和正交的观点,与其他各方(如工程师、设计师、消费者洞察、财务等)拥有平等的发言权。对数据的过度依赖可能会成为数据谬误的牺牲品,例如抽样偏差——被认为是对世界的客观描述实际上可能不具有代表性。名义上对数据的依赖会让数据科学团队无能为力。很难取得平衡,但肯定可以做到。

第三个要素是保持数据科学的客观性,不要只强迫有利的发现。从复杂而丰富的数据集中寻找预期的结果,在特征选择过程中冒泡某些特征或编造相关性,通常并不困难。领导者很容易从数据科学功能中找到额外的决策保证。有些人甚至认为只报道有利的发现而隐瞒测试不一定是撒谎。领导者需要意识到这一点,并尽快采取正确的行动,因为这不仅对内部和外部的数据科学职能部门,而且对所有合作者都极具破坏性。领导者应该明确并以身作则,这是一条永远不应该跨越的红线。

成熟的工程/运营平台

即使满足了所有这些先决条件,成熟的工程平台也是有效执行数据科学的必备条件。与数据科学相关的工程能力并不少见,如数据平台、审计、模型部署、实验工具包等。不断降低优先级,以便为更关键的产品功能开发腾出空间。因此,数据科学研究部署之间往往会有差距。数据科学团队可能会编译一些数据,离线运行研发,然后返回一个可能会产生重大业务影响的模型。不幸的是,由于缺乏基础设施开发,甚至可能需要 3-6 个月的时间才能部署。当部署准备就绪时,整个业务可能已经转移,这可能会使之前的研究变得无关紧要。因为数据科学产品依赖于如此多的移动部分,所以解决数据接收、编译、模型部署、可扩展性和产品集成的成熟平台对于允许数据科学团队自助服务至关重要。否则,数据科学团队将别无选择,只能等待许多其他团队来铺平道路,然后才能交付任何东西。要做到这一点,不仅需要一个强有力的精通数据的领导层,还需要一个规模足够大的公司,以便能够留出资源来投资开发这种能力。较小的参与者通常没有这种奢侈,因此不得不继续依赖不太理想和更特别的解决方案。

所以现在你可能会问——我们到了吗?仍然可能缺少一个组成部分——一个能够执行战略并交付成果的强大的基层运营团队。想象一个客户服务优化工具,就像优步的 COTA 一样,让人类参与其中:客服人员需要训练有素才能使用这个工具来实现它的价值。仓库优化模型可能会假设工人可以以一定的速度重新进货和运输货物,这在现实中可能是真的,也可能不是真的(这可能会给地面上的人增加压力和紧张)。数据科学产品的预期增量回报和实现的增量回报之间存在巨大差异并不罕见,调试整个生命周期也不是小事。每一部分都必须完美无缺地运行,从这个意义上说,数据科学确实是火箭科学的翻版。

现金蜜月的结束

一系列危机以及近期独角兽的表现不佳和破灭,给不惜一切代价追逐增长的狂热浇了一桶冷水。投资者可能会更加保守,盈利能力而不是收入/活跃用户群现在可能会成为关键指标。数据科学人才的囤积可能会降温——几年前,这几乎是吸引投资者的必备条件,因为 FOMO、人才供应缺乏,以及数据科学在资本回报方面可以实现的宏伟愿景。雇主的热烈追捧吸引了许多专业人士转向数据科学,随着数据科学项目和训练营的过剩,人才供应不断增加。不可避免地,这将导致数据科学市场进入和修正的更高门槛。

我记得几年前,我参观了堪萨斯城,和一个当地人交谈。我依稀记得那里一个城镇兴衰的故事(细节我可能说错了)。由于汽车行业非常火爆,其中一家制造商建立了一个中心来培训特定技能的工人,并保证了就业。许多人为了职业前景蜂拥而至,但由于供过于求,整个项目仅在几年内就摇摇欲坠。现在,数据科学市场正在走一条类似的道路,尽管没有那么严重。我和训练营的一些人聊过,虽然他们对他们刚刚建立的可以区分猫和狗的模型非常满意,并且对他们在几个小时内取得的成就印象深刻,但许多人不知道他们在做什么,也不知道为什么猫/狗模型在任何情况下都有意义。数据科学如此简单以至于任何人都可以做的错误印象,再加上它是这十年中最好的工作之一的看法,可能会使人们匆忙做出决定集体放弃他们目前的职业并对自己进行快速训练,最终却发现他们所学的已经过时,他们不得不与许多经历过类似快速训练过程的人竞争。**

在后危机时代的未来几年,这对数据科学意味着什么?我认为它将继续繁荣,但以不同的方式。度过危机的公司将准备好复苏,许多破坏性的公司将出现在新的领域,尤其是医疗保健和教育领域。工具会继续变得更好,自动化程度更高,可伸缩性更强。数据科学将进一步民主化,但变得更加两极化——任何人都可以很快入门,但要成为顶尖人物需要付出更多努力。要真正脱颖而出,需要技术知识、实践经验、领域知识、工程技能、沟通、商业意识、战略眼光的良好组合,最后但同样重要的是,一些好运气。

一些预测

作为 Scott Galloway 教授的支点的粉丝,我愿意做一个无耻的模仿者,自己做一些预测。这毕竟是我做的事情;这次不同的是,我可能没有很多数据来佐证我的直觉。

  • 数据科学市场可能会降温,尤其是入门级职位。企业可能会减少长期投资(自动驾驶、计算机视觉等)。),但更侧重于分析和报告的自动化。对于应届毕业生来说,这将是一个艰难的时期,因为投资减少,创业公司的空缺会减少。另一方面,传统行业如制造业、酒店业、批发和杂货业、大品牌零售业等。可能认为这是培养数据科学能力并为下一轮竞争做好准备的好机会。此外,随着新冠肺炎的余波,许多新的机会可能会出现在纽约、波斯顿和旧金山湾区等科技中心之外。因此,从这些非典型的技术中心开始可能是一个不错的选择。
  • 领域知识将受到强烈的追捧。无论是运筹学、计量经济学、生命科学、医疗保健、物理学还是其他。许多看似不相关的深度研究实际上可以转化为解决前所未见的挑战,在未来五年内,我们将有大量这样的研究。新冠肺炎,移民政策和去全球化等政治因素,以及研究经费的缩减将减少 STEM 博士的数量。随着数据科学在研究中更广泛的应用和强大的领域知识,美国下一轮毕业的博士可能会受到私营部门的热烈追捧。另一方面,私营部门专门的人工智能研究角色的数量实际上可能增长更慢,因为公司更有可能在短期内投资,并寻求不一定需要最先进的技术和理论能力的问题解决者。最好的仍然会在市场上非常火爆,但可能会出现较少的机会。
  • 数据科学家的角色将进一步分化。面向业务的分析师、因果推理数据科学家、机器学习工程师和研究科学家的角色将被明确定义,而不是作为一把瑞士刀。由于领域知识的不断丰富,从一个轨道到另一个轨道的角色转换可能更加困难,类似于今天 UI 和后端工程师的分歧。全栈仍然是可能的,但可能不会在大公司中发现它的巨大效用。顶尖人才至少会有一个非常深的“初级技能轨迹”。这就像玩角色扮演游戏:平均分配你的技能点不会让你走得很远。你需要选择你是想成为一名战士,一名法师,还是一名巫师。

拥抱不确定性

对我来说,数据科学最吸引人的一点是,未来并不是一成不变的。这是一个新的、快速发展的领域,有很多不确定性。这很有压力,但也非常令人兴奋,因为我们每个人都可能有自己的方式来开拓自己的轨迹。然而,不确定性是我们的一种自然结构,我们的工作就是做出预测。

所以有些建议:

  • 如果你对 2020 年的数据科学感兴趣,请做好准备,这可能没有捷径可走。参加训练营或速成班可能只会让你进入职场,但不要指望它能保证你之后马上找到一份理想的工作。你需要花几年时间在实践中学习,并逐渐增强你的能力。人才供应的增加和招聘的减少也意味着进入最负盛名的公司的门槛更高,并且不是所有的差距(成熟度、驾驭复杂和微妙的商业环境、沟通、技术权衡)都可以通过教科书学习来弥合。这将是一次长征,而不是冲刺。
  • 对于已经加入的人来说,更深入更广泛,成为一个真正的问题解决者。我们不能成为只会一招的小马,而是必须继续了解我们的领域,同时也要关注我们周围发生的事情。既然时间有限,就需要做出选择;无论是关于你想发展哪种数据科学(分析 vs .机器学习),获得哪种第二技能(商业 vs .产品开发),还是追求职业目标(IC vs .技术领导力),你都必须尽早做出一些决定,并坚持你的计划。根据短期的变化做出相应的调整,但要努力长期坚持下去。
  • 充满激情和好奇心,确保你热爱你所做的事情。大量的数据科学工作并不有趣,臭名昭著的数据清理可能是最乏味和耗费精力的。如果你没有恋爱,那么你很可能不会走得很远。放弃并尝试不同的东西是可以的,我知道有些人发现数据科学不适合他们,于是转向工程或产品,后来获得了巨大的成功。你在这个过程中学到的技能不会被浪费,而且会长期受益。适应,适应最终会存活下来。

以前的数据科学博客:

免责声明及注释:

  • 本文中的观点是我个人的观点,与我的雇主无关。
  • 我妻子读了初稿,并提供了许多建设性的反馈。我做了许多相应的修改,并特别感谢她。

衰退中的数据科学

原文:https://towardsdatascience.com/data-science-in-a-recession-b8205ff783f7?source=collection_archive---------39-----------------------

照片由奎诺·阿尔Unsplash 上拍摄

这个时髦的领域遇到了第一个主要的经济障碍

数据科学领域非常年轻,这将是它的第一次衰退。毫无疑问,这将是对我们所有人的考验。这让我想起沃伦·巴菲特的一句话:

只有当潮水退去时,你才知道谁在裸泳。

但这也是一个机会——一个审视我们领域的各个方面并保留好的同时清除坏的方面的机会。这就是经济衰退的后果。在大金融危机(2008 年)之前,最热门的领域是量化金融(数据科学的精神前身)。金融肯定在危机中受到冲击,尤其是因为其有缺陷的风险模型是危机发生的部分原因。但事实证明,经济衰退对该领域是有利的。这个职业变得更精简,更经得起战斗考验,没有意义的理论被怀疑和削弱(尽管许多可疑的理论仍然存在)。

因此,让我们试着想象一下,数据科学领域可能会受到当前冠状病毒衰退的影响和改变。

整合和失业

这是痛苦的部分。虽然我们数据科学家很幸运,因为我们可以远程工作,但在如此严重的经济危机中,休假和失业是不可避免的。对整体就业、消费支出和经济增长的打击太大,任何职业都无法幸免,更不用说一个可以说是过热走向衰退的职业了。

预算和人员将被削减,几乎没有产生现金流潜力的外围项目将被搁置或取消。这一点都不好玩,但它将迫使整个行业诚实地评估自己的附加值。公司将询问并尝试回答以下问题:

  • 我的数据团队到底需要多大?
  • 我需要数据科学家吗?
  • 数据科学项目的预期 ROI(投资回报)是多少?

这些问题的答案因公司而异。拥有财务缓冲、专有数据和愿意进行长期思考的管理层的公司,会比现金短缺的公司更积极地回答这些问题。当一家公司陷入绝境时(由于债务和/或销售崩溃),目光短浅是很容易的,有时甚至是必要的。

那么我们这些员工应该做些什么准备呢?可悲的是,决定谁被解雇往往是一个非常主观的决定,并不由我们控制。它通常主要是一个人挣多少钱的函数(最终目标是降低成本)。我也不会告诉你让自己变得不可或缺——那是不现实的,也不是几周就能完成的事情(此时你要么已经是不可或缺的,要么不是)。

更确切地说,是时候变得积极和现实,而不是消极和愚蠢的希望。研究你公司的财务和单位经济。你的公司,即使在最好的时候,也只能勉强收支平衡。它需要投资者一轮又一轮的注资才能维持下去吗?如果是这样,那就该去寻找其他机会了。好消息是,现在招聘的公司肯定既有竞争力又有财力;坏消息是,在这些职位竞争激烈的同时,这样的职位却少得多。

照片由杨奇煜·巴赞内格Unsplash 上拍摄

打破模式的范式转变

当我们最终完成封锁时,我们回到的世界将与我们躲藏时离开的世界感觉非常不同。仅在 8 周前还很有意义的商业模式在中短期内可能不再可行(例如 StubHub、Airbnb)。

这意味着后冠状病毒时代的消费者行为也可能会非常不同。不幸的是,这降低了大量数据集的价值。现在一个简单的赌注是许多模型(无论是推荐引擎、用户行为模型、时间序列预测等等。)将在未来几个月打破。

“范式转换”这个词经常被提起,而且通常是没有根据的。但是冠状病毒和它引起的衰退是真正的范式转变。在出现疫苗之前,我们互动、做生意和工作的方式将会大不相同。基于昨日数据训练的模型将不再具有预测性,有时预测性会大大降低。

关于这一点以及它如何使数据科学的未来更具挑战性和更令人兴奋,我有 3 个随机想法:

  1. 在新的世界(社会距离和经济衰退)中,建立解释用户行为的模型的竞赛正在进行。样本很小,聪明的推论和直觉将是关键。一些心理学的基础知识和对压力和焦虑如何影响行为的理解可能会在某个时候派上用场。
  2. 这也不意味着过去的模式已经过时了。即使疫苗需要很长时间,随着时间的推移,人们的行为将开始向正常方向转变(希望不会以更高的感染率为代价)。恐惧倾向于消退久而久之,我们习惯了世界的新状态;这将我们推回到我们的正常状态(但可能不是全部;足够严重的事件,如经济萧条,可以永久地改变人们的行为)。
  3. 在一个高度不确定的世界里,将会有更多的机会推动人们变得更好或更坏。数据科学模型既有解释或预测的功能,也有建议的功能。推荐引擎的全部目的是改变人们的行为(通过将他们推向我们希望他们购买的产品或服务)。随着世界和人们的心态开始回到某种新的、有些不同的常态的漫长旅程,对于公司来说,将会有独一无二的、也许一生只有一次的机会在这种新常态中赢得一席之地 —在这种黑暗时期向客户展示真正的价值,投资回报可能是巨大的。

照片由海伦娜·洛佩斯Unsplash 上拍摄

给公司(和首席执行官)的一个建议—现在就建立您的数据专业知识!

危机是做最好的自己的机会。具有讽刺意味的是,在繁荣时期花费数十亿美元用于公关、碳信用、公司飞机和股票回购的公司,在经济衰退期间却能如此冷漠地转身解雇四分之一的员工。

是的,我理解对破产的恐惧。但关键是要在繁荣时期建立一个缓冲区,这样你就可以在其他人都逃之夭夭的时候投资。因此,首席执行官们,如果你在财政上一直很负责,现在现金充裕,考虑投资于员工的善意。像飞机、工厂和数据中心这样的资本货物并不是唯一的投资,你的员工和他们的长期发展才是你的公司最重要的投资。

这种疫情和衰退不会永远持续下去——如果你培养和发展你的分析和数据科学团队,而其他人都放弃和解雇他们的团队,想象一下几年后当业务开始再次繁荣时,你可以拥有巨大的竞争优势。

在过去的几年里,每个人都雇佣了数据科学家和数据工程师,试图通过“大数据”获得竞争优势,但这多少有些徒劳。但是和其他人做同样的事情并不能让你获得优势。你需要与众不同(在好的方面)才能超越别人。当其他人都在犹豫不决时,危机是一个难得的宝贵机会——当其他人都专注于短期错误时,投资、建设和行动要着眼于长期。为此,我对首席执行官和首席数据官有两点建议:

  1. 向刚毕业的学生和陷入困境的有经验的人提供带薪实习。在我看来,数据科学面试过程总是很偶然,假阴性率很高。相反,根据好奇心和求知欲快速筛选候选人,然后通过实习给他们一个展示自己的机会(并赚取美元和一份全职工作)。
  2. 我并不是主张公司付钱给数据人员让他们什么都不做。相反,拥抱黑客马拉松的心态。在正常时期,每个人都忙于扑灭现有客户的火灾,并接纳新客户。经济衰退(当需要服务的顾客少得可怜时)是一个专注于开发新想法和产品(并强化现有产品)的机会。所以我的建议是建立和测试一堆新的东西。这样,当经济开始复苏时,你的公司就能迅速运转起来。

太阳会再次照耀

在接下来的几个月里,我们会遇到一些困难,但是不要犯错误,我们会好起来的,尽管会有一些伤痕。数据科学领域和职业也是如此。经济衰退有一种抖松双手的习惯。2008 年,许多纯粹为了薪水而工作的金融家彻底离开了这个行业。同样的事情现在可能会发生在数据科学家身上(我的猜测是,对少数工作的激烈竞争将导致这些工作的薪酬越来越低;基本供求)。但是如果你真的对这个领域感兴趣,坚持下去,做好努力工作的准备,最终,你会找到机会的。

干杯,大家注意安全!

无服务器世界中的数据科学

原文:https://towardsdatascience.com/data-science-in-a-serverless-world-d04632e07a67?source=collection_archive---------31-----------------------

来源

利用托管服务构建数据产品

在大公司中,通常有单独的团队来训练机器学习模型,并将这些模型投入生产。数据科学团队可能负责特征工程、模型选择和超参数调整,而机器学习工程团队负责构建和维护服务于训练模型所需的基础设施。随着云平台提供越来越多的托管服务,这种关注点的分离不再必要,数据科学家现在可以构建生产系统。处于数据科学和机器学习工程交汇点的数据科学家通常被称为应用科学家,这是一个可以为公司提供重要价值的角色。

谷歌云平台(GCP)和其他云提供商现在为数据库、消息传递、监控、容器、流处理和许多其他任务提供无服务器和完全托管的解决方案。这意味着团队可以快速构建端到端的机器学习管道,同时减少供应和监控基础设施所需的时间。In 使数据科学家能够构建生产级的数据产品,其中设置了监控,并且系统可以从故障中恢复。除了只关注模型训练,应用科学家还可以构建服务于 ML 模型的生产系统。

为什么单个团队能够利用托管服务构建端到端的机器学习管道非常有用?

  • 快速开发:让一个团队负责模型构建和模型部署通常会导致项目更快的迭代,从而在扩展系统之前产生更多的原型和测试。使用托管服务,如 GCP Redis 上的 Memorystore,使团队能够用应用程序数据库制作数据产品的原型,而不必担心启动和监控基础架构。
  • 简化翻译:当不同的团队执行模型构建和模型部署时,通常会使用不同的工具集,并且可能需要将使用 Python 训练的模型翻译成不同的编程语言,例如 Go。当团队同时负责这两项任务时,通常会使用相似的工具来完成这两项任务,比如使用 Python 来进行模型训练和模型服务。这种翻译的减少对于构建实时系统特别有用。
  • 发展专业知识:构建端到端系统意味着数据科学家将获得使用标准工具之外的工具的实践经验,例如使用 NoSQL 工具和 Kubernetes。

虽然让单个团队使用托管服务构建数据产品有几个优点,但也有一些缺点:

  • 成本:当您达到一定规模时,托管服务通常比托管解决方案更昂贵。例如,无服务器功能非常适合原型开发,但是对于大容量管道来说成本太高。
  • 缺失功能:云提供商可能没有针对您需要使用的服务的完全托管产品,或者该产品可能无法提供应用所需的性能要求。例如,一些组织使用 Kafka 代替 PubSub 进行消息传递,因为延迟要求较低。
  • DevOps: 让一个数据科学团队构建和部署机器学习管道意味着该团队现在需要数据产品,这可能不是该角色的期望。对于关键应用程序,与工程或云运营团队合作非常有用。

数据科学团队使用托管服务构建端到端数据产品会是什么样子?我们将概述在 GCP 上为移动应用程序服务的实时模型。

数据收集管道

数据收集

为这个数据产品设置的第一个组件是从移动应用程序收集事件的管道。我们需要将数据从移动设备传输到 BigQuery,以便为训练模型提供历史数据。对于模型应用,我们将使用 Redis 来执行实时特征工程。我们需要为这个管道创建两个组件:一个 web 服务将 HTTP post 事件转换成 JSON 消息并将事件传递给 PubSub,一个数据流作业将 PubSub 设置为数据源,将 BigQuery 设置为数据接收器。web 服务可以使用 Python 中的 Flask 或 Java 中的 Undertow 编写,而数据流作业可以使用 Python 或 Java 编写。我们可以使用以下服务通过 GCP 上的托管服务来构建收集管道:

  • 负载平衡:该服务提供第 7 层负载平衡,以提供一个端点,移动设备可以调用该端点来发送跟踪事件。要设置负载平衡器,我们首先需要在 Kubernetes 上部署跟踪服务,并使用节点端口公开该服务。
  • Google Kubernetes 引擎(GKE): 我们可以使用 Docker 将 web 服务容器化,并使用托管的 Kubernetes 托管服务。该服务接收 HTTP posts 形式的跟踪事件,并将 post 有效负载转换为 JSON 字符串,然后传递给 PubSub。
  • PubSub: 我们可以使用 PubSub 作为消息代理,在管道中的不同服务之间传递数据。对于收集管道,消息从 web 服务传递到数据流作业。
  • 云数据流:数据流作业定义了一组要在数据管道上执行的操作。对于这个管道,作业将执行以下操作:使用来自 PubSub 的消息,将 JSON 事件转换为 BigQuery 记录,并将记录传输到 BigQuery。
  • BigQuery: 我们可以使用 BigQuery 作为托管数据库来存储来自移动应用程序的跟踪事件。

一旦这些组件建立起来,我们就有了一个收集跟踪事件的管道,可以用来建立机器学习模型。在下面列出的帖子中,我提供了类似管道的代码示例。

[## 简单且可扩展的分析管道

收集关于应用程序使用和用户行为的数据,如玩家在游戏中的进度,对于产品来说是无价的…

towardsdatascience.com](/a-simple-and-scalable-analytics-pipeline-53720b1dbd35)

模型培训渠道

模特培训

有了 GCP,我们可以使用 Google Colab 作为托管笔记本环境,通过 scikit-learn 等库来训练模型。我们可以使用 Python notebook 环境来训练和评估不同的预测模型,然后将性能最佳的模型保存到 Redis 中,供模型应用程序服务使用。如果应用服务不是用 Python 编写的,那么使用诸如 ONNX 这样的可移植模型格式是很有用的。下面的帖子介绍了 Google Colab 平台。

[## Google Colab 入门

沮丧和困惑的基本教程

towardsdatascience.com](/getting-started-with-google-colab-f2fff97f594c)

模型服务管道

特征工程和建模服务

一旦我们有了一个我们想要服务的训练好的模型,我们将需要构建一个应用程序,该应用程序将基于跟踪事件实时更新每个用户的特征向量,并且还实时服务于模型预测。为了将编码跟踪事件的特征向量存储到用户配置文件中,我们可以使用 Redis 作为一个低延迟的数据库,在这里我们检索和更新这些值,如下面列出的博客文章中所述。对于模型服务,我们需要构建一个 web 服务,该服务从 Redis 获取用户配置文件,应用存储在 Redis 中的模型,该模型是使用 Google Colab 训练的,并将模型预测返回给模型应用程序,在模型应用程序中,模型预测可用于个性化应用程序。与跟踪管道类似,通过将这些应用程序容器化,web 服务可以托管在托管的 Kubernetes 上。

[## 实时特征工程和 ML 模型的 NoSQL

使用流式数据构建用户配置文件

towardsdatascience.com](/nosql-for-real-time-feature-engineering-and-ml-models-93d057c0a7b8)

监控组件

监视

为了监控应用程序,我们可以使用通过 Stackdriver 提供的 GCP 中的日志和监控托管服务。我们可以记录来自 GKE 上托管的服务的事件,以及从数据流作业到堆栈驱动程序日志的事件。我们还可以将这些服务的自定义指标发送到 Stackdriver monitoring,在那里可以根据阈值设置警报。通过设置这些数据流,可以设置对管道的监控,其中触发警报并将其转发给 Slack、SMS 或 PagerDuty,并且可以使用 Stackdriver 查看应用程序日志。下面的帖子中提供了使用 Stackdriver 进行监控和日志记录的代码示例。

[## 与 GCP 合作开发数据科学

为模型服务部署生产级容器

towardsdatascience.com](/devops-for-data-science-with-gcp-3e6b5c3dd4f6)

结论

使用托管服务可以减少设置和监控基础架构所需的开发运维工作量,从而使数据科学团队能够着手将模型投入生产。虽然支持数据科学团队构建端到端管道可以加快数据产品的开发,但过度依赖托管服务可能会大规模推高成本。在本帖中,我们讨论了一些在 GCP 可用的托管服务,数据科学家可以利用这些服务来构建实时 ML 模型。

本·韦伯是 Zynga 的一名杰出的数据科学家。我们正在招聘

黑天鹅时代的数据科学

原文:https://towardsdatascience.com/data-science-in-black-swan-times-part-1-understand-your-causal-chain-9d45355c8e2c?source=collection_archive---------47-----------------------

第 1 部分:理解你的因果链

图片鸣谢迪克·丹尼尔斯:https://commons . wikimedia . org/wiki/File:Black _ Swan (Cygnus _ atratus) rwd . jpg

在他的书《黑天鹅》中,作者纳西姆·塔勒布将黑天鹅事件描述为那些不可预测的、带来严重后果的事件,而人们事后将其描述为完全可预测的。我认为这三个条件都适用于新冠肺炎造成的疫情是合理的。在这段时间里,实际上日常生活的每一部分都被改变了。这就提出了大多数预测模型有效性的问题。在这种时候,评估你的模型的潜在假设是特别重要的,有一个统计背景是有帮助的。

重温链式法则

在我成为数据科学家之前,我是一名粒子物理学家。粒子物理学是独一无二的,因为你研究的是肉眼看不见的现象。信号极其稀少。通过组合留在各种电子检测器中的签名来识别信号事件,得到的电子签名被很好地描述为随机事件。虽然机器学习正被用来更有效地识别这些类型的罕见事件的信号,但这些技术并没有很快被采用。除了物理学家的固执之外,这个事实的原因是在这个领域中,潜在的一连串事件被很好地模拟了。理解这些潜在过程的变化本身就很有趣,因为它可以表明一种新的物理现象的存在。

对随机的,通常是罕见的事件进行分类是机器学习最适合的任务之一,也是它最普遍的应用。然而,与上述场景不同,机器学习通常应用于中间步骤没有得到很好研究的场景。在大多数情况下,最终结果的有效模型是有用的,即使因果链中的每一步都没有被完全理解。虽然电子以光速穿过气体听起来很难建模,但它甚至没有触及人类行为带来的复杂问题的表面。

例如,考虑一个应用于医疗保险人群的模型,该模型试图预测某个成员是否会因流感住院。作为一个功能集,您将利用患者的医疗账单历史以及人口统计信息。虽然看起来这是一件简单的事情,但实际上在这个过程中会发生很多事情。首先,一个人需要接触流感。第二,这种暴露导致感染严重到需要住院治疗。当然,即使这张图片也过于简化了,但它对于说明性的目的是有用的。

作者图片

当我们训练一个模型时,它只是简单地学习 P(I|M),而不是对过程中的中间步骤进行建模。大多数情况下,这是可以的,因为有理由假设大多数人在每个流感季节都会接触到流感,而我们真正了解的是 P(即|E,M)。在这个社会距离越来越远的时代,最初的假设是站不住脚的。在正常情况下,P(E|M)将被建模为高常数。然而,在疫情期间,这一假设将不再成立。因果链中的第二步,P(即|E,M ),在这段时间内很可能不会发生变化。

理解含义

所有这些都有点理论化,但是这些想法对模型的有效性有现实世界的影响。社会距离的测量已经使关于 P(E|M)的最初假设无效。连锁反应是整个医疗保健系统的利用率急剧下降。真正的问题是,你需要重新培训你的模型吗?答案是它依赖于上下文,特别是围绕模型部署的上下文。

医院部门可能会使用流感模型的一个用例来尝试预测住院资源的总体负载。我们模型的输出将给出我们人口中各种成员住院的概率,当与一些简单的算法(或一些奇特的蒙特卡罗模拟)结合时,可以产生对预期医院负荷的预测。这是一个模型部署的例子,由于违反了因果链中的初始链接,该模型部署将完全无效。解决这个问题将会非常复杂。如上所述,在正常情况下,P(E|M)可以被建模为一个高常数。社会距离措施对这种分布的影响非常不均衡。虽然这将是一个净减少,一些群体不太能够自我隔离。您可能需要结合当前数据重新训练模型。

一个完全独立的用例是基于人群进行预测,并确定如果感染流感最有可能出现急性并发症的个体。如今,大多数人对去医院接受非急症治疗保持谨慎,这是理所当然的。这种行为对大多数人来说是谨慎的。也就是说,对于那些最容易患流感并发症的人来说,注射流感疫苗仍然是个好主意。对于大多数人来说,知道他们是否接种流感疫苗会更好是一个艰难的决定,大多数人会默认呆在家里。在这种情况下,因果模型保持不变。尽管个人暴露于流感的概率没有很好地建模,但在此应用中,这不是考虑的主要问题。利用这种模式的护理管理团队实际上是在试图传达因果链 P(即 M)中的第二步。即使抛开数学不谈,你也可以想象护理经理向会员传达的信息可能是这样的:“虽然我们希望你保持安全,但我们认为如果你今年患了流感,那么你就有出现不良反应的风险。”护理经理会合理地传达因果模型的第二部分,而不提供任何这样做的想法。在这种情况下,模型完成了它的工作,它在这个上下文中的应用不会受到影响。

接下来呢?

如果上下文没有把你的模型放进垃圾箱,并不意味着你应该仔细检查它。在我的下一篇文章中,我将讨论数据漂移,并看看我们如何评估模型的基础条件是否已经改变到需要重新训练模型的程度。

原载于 2020 年 10 月 8 日https://closed loop . ai

电晕时代的数据科学

原文:https://towardsdatascience.com/data-science-in-corona-times-9671c5aefa5a?source=collection_archive---------66-----------------------

现在我们都被安全地锁在家里,一个新的危险正在逼近。我们失去了重心,不再为企业创造价值。

今天,世界上几乎所有的数据科学家都在家里工作。我们的工作不要求我们去任何地方,但要有稳定的互联网连接。我们可以自由地做我们最擅长的事情:在笔记本电脑屏幕后面生成代码、数据、特性和模型。

但是危险正在逼近。我们与那些我们正在——或者应该——传递的人失去了联系。我们钻研细节,忘记了推动业务向前发展。我们忘记了我们的价值取决于我们设法增加的价值。我们忘记了我们发现的重要信息需要到达前线防御。

🇨🇭·克劳迪奥·施瓦茨| @purzlbaum 在 Unsplash 上拍摄的照片

数据科学主要是通信…

…通信需要发送者和来源。

数据科学项目需要对某个主题进行深入研究,理解数据。检查再检查。并再次检查。数据科学家通常在这一领域非常全面和熟练。他们的分析非常细致,直到他们对自己的发现有百分之百的把握。通常这是好的,你会发现商业利益相关者对你的交付很苛刻,在这里我们找到了一个微妙但重要的平衡:准确性和交付。

数据科学就像在严谨和交付之间走钢丝。

企业促进了创新、改变、测试和尝试新事物的需求。分析团队促进对数据、数据质量和建模技术的深入了解。尽管通常会有紧张,但正是在这个十字路口,我们可以交付重要的项目

然而,持续的危机已经极大地改变了企业和商业格局。顾客的行为有所不同。公司的经营方式也跟着改变了。由于每个人都在家工作,会议变得不那么活跃,在咖啡机旁遇到某人变得更加困难(除了一个你仍然被允许亲密接触的室友)。

每天在办公室里,你会有无数的偶遇。偶遇换了部门的同事或者项目中见过一面的人。虽然它们可能发生在任何地方,但咖啡机仍然是最有可能获得这些意外收获的地方。这些相遇给我们带来的不仅仅是愉快的社会交往。它们让我们看到其他地方正在发生的事情,并有机会看到项目之间潜在的重叠;如果必须的话,协同作用。

改变消费者,改变企业…

这些不断变化的景观对团队创建的许多分析或模型都有影响。通常是因为数据科学家假设(或不得不假设)世界的行为相当有规律。甚至不规则性也被刷成某种总体规则性。去年夏天发生的事情,今年将再次发生。我们称之为季节性效应。

甚至不规则性也被刷成某种总体规则性。

因此,一个人天真地认为世界行为相当有规律,外部性是静态的。这种想法在危机时刻很快就破灭了。现在,情况不再是这样了。一切都可能不同。

顾客们迅速购买旅游保险,希望能以此为由索赔未来被取消的假期。或者顾客对取消的航班同时向保险公司和航空公司提出索赔——两者都有超负荷的要求。

我们的业务,我们的模型都在一些(通常是隐含的)规律性概念下运作。我们认为我们了解事情是如何运作的,因为它们在过去是如何表现的。但是这些变化的时代意味着我们应该更新我们的模型,包括技术和心理上的。我们应该更重视过去的事情,我们应该将这些变化告知企业。

进入客户洞察中心...

为了给企业提供“实时”洞察,我们在建立了一个客户洞察中心。这是一个数字化的地方,我们可以在这里分享关于顾客的信息,关于我们看到的不同或奇怪的行为,关于顾客购买的变化以及所有相关(或无关)的事情。总而言之,这是一个技术人员可以向商业观众展示技术成果的地方。

实际上,这是一个团队渠道,我们在这里分享新的发现,但由集成的 PowerBI 仪表板支持。商界人士可以订阅该频道,随时了解最新消息。更重要的是,他们可以分享自己的轶事证据,并激励数据科学家和分析师去创造新的见解。在咖啡机旁搭起偶遇的桥梁。

各种清单…

  • 让团队采取修补完成事情的心态。对你来说可能微不足道的事情对其他人来说可能是一个启示,所以分享你的发现。
  • 主动接触业务利益相关者——他们现在比以往任何时候都更需要你的洞察力。即使他们没有向你伸出手,也要向他们伸出手。
  • 问问你自己,你是否有任何信息需要与其他团队、经理或领导分享?如果答案是肯定的,那就上吧!
  • 检查你的发现,问问你自己你会根据这些信息提出什么建议。给出建议和你的数字,这对企业来说通常更容易和更可行。

注意安全,呆在家里,保持理智!

金融中的数据科学

原文:https://towardsdatascience.com/data-science-in-finance-56a4d99279f7?source=collection_archive---------18-----------------------

Python 中历史股价数据的移动平均策略回溯测试

马库斯·斯皮斯克在 Unsplash 上的照片

在这项工作中,我将从 Yahoo Finance 中提取特定股票代码的历史价格数据,并检查一个简单的策略,看看它是否可以盈利。你可以通过我的 Github 账号访问这部作品的源代码。

几年前,当我想投资股票市场时,在没有 python 知识的情况下测试一个策略会花费我在各种网站上订阅的费用。坦率地说,在大多数情况下,我对数据筛选和入围的标准并不满意。

让我们定义一些将在这项工作中使用的概念:
简单移动平均线(SMA):这是一个趋势跟踪指标,可以通过对一组给定的值进行算术平均来计算。换句话说,一组数字或者金融工具的价格相加,然后除以这组数字中的价格数(更多细节请参见 i nvestpedia )。

例如:如果我们想计算当前点的 SMA_20 值,我们可以将过去 20 天(或其他时间间隔)的收盘价相加,然后除以 20。

移动平均线策略建议当短均线穿过长均线时买入,当短均线穿过长均线时卖出。下图是买入信号(SMA_20,红线穿越蓝线,SMA_50)和出场点,反之亦然。

1-数据提取和准备

历史股价数据可以从各种来源找到,但最简单的是雅虎财经。为此,我们需要导入 yfinance 库和其他相关的库,它们将用于使用 pandas 进行数据操作。

import numpy as np
import pandas as pd
import yfinance as yf
import datetime as dt
import matplotlib.pyplot as plt
import mplfinance as mpf

首先,我们需要定义我们将检查策略的时间范围。要使用 yfinace 库,日期格式应为 YYYY-MM-DD。将开始日期定义为你最喜欢的时间。你可以对结束日期做同样的事情,但是我更喜欢今天作为结束日期。我们可以将其定义如下:

start = '2016-01-01'                # format: YYYY-MM-DD
end = dt.datetime.now()             # today

在下一步中,将您最喜欢的股票代码 ticker 字符串存储在 stock 变量中。我们打算用它在雅虎财经库中作为数据框下载:

stock='AMD'
df = yf.download(stock,start, end, interval='1d')
df.head()

在这里,我选择了 AMD ticker (Advanced Micro Devices,semiconductor)并使用 yfinance 的下载属性将价格数据存储在数据帧中。有几个参数,我们应该包括如股票名称,开始和结束日期。默认的采样间隔是一天,但是您也可以选择其他间隔。数据框的最后一列是开盘价、最高价、最低价、收盘价、调整后收盘价和交易量。

要查看我们可以为下载功能定义哪些参数,我们可以在 jupyter 笔记本(如下图)中点击功能括号内的 shift + Tab 键。如果你向下滚动,它也有每个参数的解释。

2- 移动平均计算

我们来定义短、长简单移动平均线,SMA 变量,并把它们存储在这里名为 SMAs 的列表中。

short_sma= 20
long_sma = 50
SMAs=[short_sma, long_sma]

我们可以使用滚动和均值函数逐个计算每个 SMA 的移动平均值,但是为了使它更灵活地用于两个以上的 SMA,我们可以使用 for 循环,例如:

for i in SMAs:
    df["SMA_"+str(i)]= df.iloc[:,4].rolling(window=i).mean()

这一行代码表示,将在预定义的时间窗口中使用滚动函数计算每个 SMAs,调整后的收盘价位于数据框的第 5 列。然后,每个 SMA 将被添加为一个新列,名称为 SMA,后缀为我们准备的时间窗口。

为了检查结果,我们可以调用 tail 函数来查看数据帧的最后几行。增加了 SMA_20 和 SMA_50。

3- SMAs 相对位置识别

这部分是均线策略回溯测试的主干。应该定义这两个 SMA 的相对位置,以识别趋势方向。它有简单的基本原则:如果短均线高于长均线,我们在上升趋势区域,在相反的条件下建仓卖出。让我们看看代码:

position=0 # 1 means we have already entered poistion, 0 means not already entered
counter=0
percentChange=[]   # empty list to collect %changes 
for i in df.index:
    SMA_short=df['SMA_20']
    SMA_long =df['SMA_50']
    close=df['Adj Close'][i]

    if(SMA_short[i] > SMA_long[i]):                          #line 9
        print('Up trend')
        if(position==0):
            buyP=close   #buy price
            position=1   # turn position
            print("Buy at the price"+str(buyP))

    elif(SMA_short[i] < SMA_long[i]):
        print('Down trend')
        if(position==1):   # have a poistion in down trend
            position=0     # selling position
            sellP=close    # sell price
            print("Sell at the price"+str(sellP))
            perc=(sellP/buyP-1)*100
            percentChange.append(perc)                      #line 23
    if(counter==df["Adj Close"].count()-1 and position==1):
        position=0
        sellP=close
        print("Sell at the price"+str(sellP))
        perc=(sellP/buyP-1)*100
        percentChange.append(perc)counter+=1
print(percentChange)

这是一个 for 循环代码块,它将迭代我们先前读入 df 变量的数据集。在从数据框架中定义收盘价、短和长 SMA 后,它将根据短和长 SMA 值使用 if 语句进入两个不同的分支(第 9 行)。如果短均线在长均线之上,它打印出趋势方向(“上升趋势”),如果投资组合中没有现有头寸,它将根据当天的收盘价买入头寸(信号)。如果短 SMA 的读数比长 SMA 的读数小,则它处于下降趋势。如果我们已经有头寸,我们应该以调整后的收盘价卖出。使用 pandas 中的 append 函数(第 23 行),我们将把结果存储到一个 percentChange 变量列表中,如前一行所定义的。块代码的最后一部分,从第 24 行开始,是检查是否有一个开放位置,我们正在向下计数到数据帧的末尾。

在上图中,你可以看到屏幕打印的 lat 部分,它显示了趋势打印、买入和卖出信号以及存储在列表中的所有交易。

4-统计

在定义了一些变量(如收益和损失)和它们的数量后,我们可以对 perecntChange 中的单个值再次使用 for 循环来找出统计信息。列表中的正值表示增益,将在增益变量中累加。负值是损耗,将存储在损耗变量中。我们可以将总回报以百分比的形式打印出来,并将数值四舍五入到小数点后两位。

gains=0
numGains=0
losses=0
numLosses=0
totReturn=1
for i in percentChange:
    if(i>0):
        gains+=i
        numGains+=1
    else:
        losses+=i
        numLosses+=1
    totReturn = totReturn*((i/100)+1)
totReturn=round((totReturn-1)*100,2)
print("This statistics is from "+str(df.index[0])+" up to now with "+str(numGains+numLosses)+" trades:")
print("SMAs used: "+str(SMAs))
print("Total return over "+str(numGains+numLosses)+ " trades: "+ str(totReturn)+"%" )

在这个例子中,这个策略建议了 2016 年初的 10 笔交易。这只股票的总回报率超过 850%。

为了计算平均收益和损失,我们可以简单地使用 if 语句来查看收益的数量是否大于零。如果是这样,平均增益可以通过增益除以增益数来计算。如果损失数量为正值,它还会计算平均损失。最大的收益和损失也是交易策略的一个吸引人的地方。

if (numGains>0):
    avgGain=gains/numGains
    maxReturn= str(max(percentChange))
else:
    avgGain=0
    maxReturn='unknown'if(numLosses>0):
    avgLoss=losses/numLosses
    maxLoss=str(min(percentChange))
    ratioRR=str(-avgGain/avgLoss)  # risk-reward ratio
else:
    avgLoss=0
    maxLoss='unknown'
    ratioRR='inf'
print("Average Gain: "+ str(avgGain))
print("Average Loss: "+ str(avgLoss))
print("Max Return: "+ maxReturn)
print("Max Loss: "+ maxLoss)
print("Gain/loss ratio: "+ ratioRR)

在这个例子中,一支股票的平均收益是 62 美元,平均损失几乎是 8 美元。最大收益 153,最大亏损 16 美元。

击球率的计算方法是将收益数除以总交易数。对于 0 到 1 之间的位置范围,这可能是输入准确性的标志。1 是最准的蝙蝠。

if(numGains>0 or numLosses>0):
    batAvg=numGains/(numGains+numLosses)
else:
    batAvg=0
print("Batting Avg: "+ str(batAvg))

在这个例子中,击球率是 0.6。

5-绘图

虽然您可以使用 seaborn 或 matplotlib 库来绘制股票价格,但是 mplfinance 库是专门为绘制股票价格而设计的。它的函数接受各种属性,如图形大小、价格绘图类型(直线、蜡烛线等)和移动平均线。

mpf.plot(df, type = 'ohlc',figratio=(16,6), 
         mav=(short_sma,long_sma), 
         volume=True, title= str(stock), 
         style='default')

结论

使用 python 和其他库,我们能够提取历史股票价格数据,并检查数据上的各种策略。均线策略是一个简单的概念,基于短期和长期均线的价格趋势以及它们之间的相对位置。在这项工作中,我们展示了使用 for 循环和 if 语句方法,我们可以很容易地在历史数据集上检查这种策略。

如果您有问题或需要更多的澄清,请随时与我联系。

声明:这篇文章不是财务建议。它有教育目的。

食品安全中的数据科学

原文:https://towardsdatascience.com/data-science-in-food-safety-80ffe02f5f8c?source=collection_archive---------70-----------------------

MDX 食品安全黑客马拉松

大卫·坎特利在 Unsplash 上拍摄的照片

[## aastha 12/MDX-食品安全-黑客马拉松

这个知识库是我提交给迪拜米德尔塞克斯大学组织的食品安全黑客马拉松的一部分。那里…

github.com](https://github.com/aastha12/MDX-Food-Safety-Hackathon)

介绍

每年,世界上几乎十分之一的人因食用受污染的食物而生病。不安全的食品对每个人都构成了全球性的健康威胁,尤其是婴儿、幼儿、孕妇、老人和有潜在疾病的人。食品安全的重要性可以从以下事实中得到理解:食源性疾病给卫生保健系统带来压力,损害国民经济、旅游业和贸易,从而阻碍社会经济发展。不安全的食物造成了疾病和营养不良的恶性循环。因此,很明显,食品安全、营养和可持续经济发展是密不可分的。对于我们来说,改善当前的食品安全措施变得至关重要,不仅可以减少食源性疾病,还可以改善经济和社会背景。

为了参与改善当前的食品安全措施,米德尔塞克斯大学与 RUBICS Smart Solutions、DataCon Dubai 2020 和 Beinex 合作组织了“食品安全分析黑客马拉松”,该黑客马拉松的目标是开放的,但也给了我们一个发挥创造力的机会,提出创新和可持续的解决方案来改善食品安全措施。

目录

  1. 数据
  2. 方法论
  3. 第 1 部分:探索性数据分析
  4. 第二部分:逻辑回归
  5. 第 3 部分:将警告案例自动化为 WhatsApp 消息
  6. 第 4 部分:将我们的模型部署为 web 应用程序
  7. 结果和讨论

数据

作为黑客马拉松的一部分,我们获得了 10 个 csv 文件:

  1. 警报级别
  2. 属性
  3. 日期
  4. 设备
  5. 位置
  6. 阅读
  7. 服务
  8. 存储单元

“Reading”文件有 200 多万行,包含主数据集,而其他文件就像查找表一样。

我最初尝试使用 Dask(一个流行的并行计算库-https://dask.org/)来组合所有的表,并使用整个数据集进行分析,但是我无法这样做。Dask 能够合并所有的表,但由于内存问题,我无法将其转换为 pandas 数据框架,因此我无法处理整个数据集。

相反,我决定对数据集进行随机抽样(原始数据集的大约 10%)。我连接了所有的表,最终的数据集有 271,897 行。

然后,我继续清理数据集,删除任何空值,并确保所有列都是正确的格式。

以下是最终数据集的快照:

清理的数据

注意:最终数据集的列数比上面快照中描述的多。

方法学

我将首先执行探索性数据分析,以更好地理解我们的数据,并从数据中找到任何有趣的观察结果。然后,我将尝试执行逻辑回归来将案例分类为警报或不警报,并使用它来预测警报案例的概率。

我还将尝试使用 python 自动处理 WhatsApp 消息,这样无论何时我们的模型预测到一个警报案例,健康和安全主管都会首先得到通知。

我还在一个 web 应用程序上部署了逻辑回归模型,这样任何人都可以访问它(链接:预测预警案例 Web 应用程序)。最后,我将讨论分析的结果和推论。

第一部分:探索性数据分析

我将根据以下内容分析数据:

组名与警报名称类型

针对集团名称的案例分布

从上面的图中,我们可以看到最高的警报和警告案例是在冰柜和水果冷藏器中,最低的是在果汁冷藏器中。

存储名称与警报名称类型

根据存储名称分配案例

最高警戒级别的案例(左图)在小冰箱、房间 4 和房间 2 中,而最高警告级别的案例(右图)在房间 3、房间 2 和房间 4 中

位置名称和服务名称

根据位置名称分配案例

根据服务名称分配案例

从左图中,我们可以推断出大多数警报和警告发生在储藏室。从右图中,我们可以推断出所有警报和警告案例都是由于违反最佳温度水平而发生的。

设备名称

根据设备名称分布病例

从左图中,我们可以看到最大警报案例来自 SF-冷却器、R4-冷冻机和 R2-冷冻机。从右边的图中,我们可以看到最大的警告案例来自 R3 冷冻机、R2 冷冻机和 R4 冷冻机。

警报类型与小时

每小时案件分布

从左边的图中,我们可以看到最高的警报案例是在上午 11 点到下午 4 点。从右边的图中,我们可以推断出最高的警告案例发生在上午 9-11 点和晚上 9-10 点。

警报类型与夜间

夜间病例分布

大多数警报和警告案例发生在白天,这可能是因为阿联酋白天的温度较高,而且冰柜在一天中会多次打开,从而降低冰柜中的温度,进而导致警告或警报案例。

警报类型与当月周

现在,让我们来看一下警报和警告案例在每月某周的分布情况。

按月周分布案例

一个月中警报案例几乎是不变的,但是接近月末时警报案例会下降。虽然在第一周警告案例较少,但随后开始增加,但接近月底时警告案例也会下降。有趣的是,警报和警告案例似乎在本月的最后一周下降。

案例类型与季度

预警和警告案例在年初(即第一季度)较少,在第三季度最多。

案例对比季度

预警案例 vs 值

预警案例分布对比值

当该值为-9.9 时,出现了最高的警报案例。进一步的调查显示,所有值为-9.9 的警报案例都发生在储藏室的冷冻室中,而-9.9 表示温度,这意味着最佳温度。没有得到满足。可能的情况是,该冷冻箱需要适当的维护,以确保冷冻箱内保持最佳温度。

第二部分:逻辑回归

我从数据集中注意到的一个缺点是,我们只能在警报案例发生后才能识别警报案例。但是,使用机器学习算法,您可以根据某些输入参数预测某个案例是否会成为警报案例。这种方法将帮助组织从分析过去的数据以了解发生了什么以及为什么会发生的思维模式转变为更加复杂和具有前瞻性思维的思维模式,在这种思维模式下,我们可以预测将会发生什么?这将有助于组织提前识别任何威胁。

为了实现这一点,我使用逻辑回归将案例分类为警报案例(1)或非警报案例(0)。该模型能够预测一个案例是否会成为警报,它还会告诉我们一个案例成为警报案例的概率,准确率为 97%

分类报告和混淆矩阵

分类报告

混淆矩阵

-精度是精度的度量,假设已经预测了类别标签。它由下式定义:精度= TP / (TP + FP)

——回忆是真阳性率。它被定义为:召回= TP / (TP + FN)

  • F1 得分:F1 得分是精度和召回率的调和平均值,其中 F1 得分在 1 时达到最佳值(完美的精度和召回率),在 0 时最差。这是一个很好的方式来表明一个分类器具有良好的召回率和精确度。

最后,我们可以知道这个分类器的平均准确度是两个标签的 F1 分数的平均值,在我们的例子中是 0.97 (即 97% )。

第 3 部分:将警告案例自动化为 WhatsApp 消息

黑客马拉松直播( Youtube 黑客马拉松直播)中提到的一个关键问题是,工程师是监控案例的人,大多数时候他们不知道哪个案例需要紧急关注,因为他们不是食品健康和安全方面的专家。为了提高这个过程的效率,我认为如果健康&安全主管能够在 WhatsApp 上获得警报案例,那么我们可以减少任何延迟,这将是有帮助的。

因此,对于这个项目,我已经发送了我们的分类器已经预测到警报的案例,以及该案例成为警报案例的概率%。

我在这个项目中使用了 Twilio API。你可以在这里阅读更多信息- Twilio 文档

为了这个项目,我已经把我的号码,我将发送的情况下,该案件的概率是一个警报是 100%。让我们在 WhatsApp 上发送通知,以便在实际警报发出之前立即采取行动。

WhatsApp 截图

从上面的截图可以看出,我收到了案例为警报案例的概率为 100%的案例的索引号。现在从上面的截图中,你可以看到这个信息不是很丰富,但是我们可以调整这个信息来包含更多的细节。

第 4 部分:将我们的模型部署为 web 应用程序

网络应用

为了让我们的项目被其他人实际使用,我们需要在应用程序上部署我们的模型。我们不能给组织中的每个人发送代码文件,并期望他们运行它并解释结果。因此,我在一个 web 应用程序上部署了逻辑回归模型(link:Predict Alert Cases Web App)。该应用程序的设计不是很美观,也不是用户友好的,因为 css 不是我的专业知识,但该应用程序功能齐全,可以用来预测一个案例是否会成为警报案例。显然,如果这要在一个组织中实现,我们将不得不对它进行一点调整,使它对用户更加友好。

结果和讨论

从我们的分析中,我们注意到最高的警报和警告案例发生在冷冻和水果冷藏组。

我们还注意到,警报级别最高的案例出现在小冰箱、房间 4 和房间 2 的存储单元中,而警报级别最高的案例出现在房间 3、房间 2 和房间 4 的存储单元中。这表明【T12 号房& 4 号存储单元可能存在一些技术或维护困难,因此我们看到了大量的警报和警告案例。

我们还推断,所有警报和警告案例都是由于最佳温度水平的突破而发生的。

大多数警报和警告案例发生在白天,这可能是因为阿联酋白天的温度较高,而且冰柜在一天中会被打开多次,从而降低冰柜中的温度,进而导致警告或警报案例。

一个月中警报案例几乎是恒定的,但是接近月末时警报案例下降。虽然在第一周警告案例较少,但随后开始增加,但接近月底时警告案例也会下降。有趣的是— 警报和警告案例似乎在本月最后一周下降

最高警报案例发生在值为-9.9 时。进一步的调查显示,所有值为-9.9 的警报案例都发生在储藏室的冷冻室中,而-9.9 表示温度,这意味着最佳温度。没有得到满足。可能的情况是,该冷冻箱需要适当的维护,以确保冷冻箱内保持最佳温度。

现在来看我们的逻辑回归模型,我们能够以 97%的准确率预测一个案例是否会成为警报案例,以及它成为警报案例的概率。该模型将帮助组织在警报案例实际发生之前识别任何警报案例,并允许他们使用其数据将其转化为未来的见解。

我们还能够通过 WhatsApp 自动发送最有可能(即 100%概率)的警报案例,以减少延迟。

最后,我们还能够将我们的模型部署到一个 web 应用程序中,这样每个人都可以访问它。

跃至榜首

高增长公司中的数据科学

原文:https://towardsdatascience.com/data-science-in-high-growth-companies-a6208480d101?source=collection_archive---------39-----------------------

苹果 | 谷歌 | SPOTIFY | 其他

Solmaz Shahalizadeh 在 TDS 播客

背景图片由萨曼莎·加德斯拍摄

编者按:迈向数据科学播客的“攀登数据科学阶梯”系列由 Jeremie Harris 主持。Jeremie 帮助运营一家名为sharpes minds的数据科学导师初创公司。可以听下面的播客:

在过去的几个月里,我看到越来越多的主题之一是数据科学中产品思维的重要性。随着新的和有抱负的数据科学家深化他们的技术技能,并投入无数时间在 leetcode 上做练习题,产品思维已经成为许多申请人的一个非常严重的盲点。随着新工具的出现,这个盲点变得越来越重要,这些新工具抽象出了大量过去数据科学的日常工作,让数据科学家有更多时间发展主题专业知识,并专注于产品等式的商业价值方面。

如果有一家公司因在数据科学领域引领以产品为中心的思维而闻名,那就是 Shopify。如果 Shopify 有一个人在以产品为中心的数据科学方面花了最多时间,那就是 Shopify 的数据科学和工程主管 Solmaz Shahalizadeh。Solmaz 有着令人印象深刻的职业生涯,包括在 2013 年 IPO 前加入 Shopify,并见证了 Shopify 数据科学团队从少数几个人成长为一个关键的组织范围的努力,成千上万的商家今天依靠它谋生。

Solmaz 非常友好地加入了我的最新一集《走向数据科学》播客。以下是我最喜欢的一些外卖食品:

  • Shopify 在以产品为中心的数据科学领域取得成功的关键之一是其数据科学角色的垂直整合。在 Shopify 中,一名数据科学家不仅负责数据清理和模型构建,还负责将机器学习部署到生产中的每一步。在某种程度上,Shopify 的数据科学家是完全的产品所有者 Solmaz 认为这很重要,可以确保他们可以将他们正在处理的整个问题保存在 RAM 中,并利用从内外了解您的堆栈中获得的所有见解。
  • 复杂的模型并不总是最好的解决方案。事实上,他们通常不是。Solmaz 指出,在预测的可靠性非常重要的情况下(在 Shopify 就是如此,商家的生计依赖于此),简单且易于解释的模型通常是最好的。这并不是说 Shopify 不做深度学习或前沿 ML——但这不是他们的首选。毕竟,当一个简单的模型——甚至一个基于规则的系统——就足够好的时候,为什么要建立一个有许多活动部件的花哨模型呢?
  • Solmaz 鼓励有抱负的数据科学家建立他们关心的项目,而不是通过 Kaggle grinder。如果你处于学习过程的早期阶段,股票数据集是不错的,但只有当你进入你关心的数据集(最好是你自己收集的数据集)时,你才能展示你构建有用东西的能力,而不是 AUC 分数高但没有明确商业价值的模型。
  • Shopify 正在招人😀你可以访问他们的职业页面这里

查看 Shopify 的数据科学与工程博客,或者点击这里在 Twitter 上关注他们。

你也可以在 Twitter 上关注 Solmaz 这里,在这里关注我。

心理健康中的数据科学

原文:https://towardsdatascience.com/data-science-in-mental-health-ccd09ba2148a?source=collection_archive---------14-----------------------

变更数据

机遇和进步

照片由来自派克斯深靛拍摄

医疗保健数据科学几年来一直在快速发展,尽管使用数据来理解和解决心理健康问题已经落后于该领域的其他部分。然而,在许多方面,精神健康完全适合数据科学方法:美国精神疾病的负担是巨大的,往往没有得到解决,也没有被完全理解,这为数据驱动的研究和解决方案创造了巨大的潜力。在这篇文章中,我将强调将数据科学方法应用于精神健康问题的重要性,浏览代表该领域重要进展的 3 个案例研究,并描述我自己的一个使用谷歌搜索数据评估自杀行为的研究项目。

医疗保健中的数据科学

随着新数据源和分析技术的出现,数据科学在医疗保健领域的地位越来越重要。尽管几十年来一直是医疗保健不可或缺的一部分的学术研究和临床试验与“数据科学”新保护伞下的工作之间的界限有些模糊,但不可否认的是,新技术和数据源在医疗保健中的使用已经蓬勃发展。

除了传统的医疗保健数据来源,如患者病历、手写医生笔记、账单和索赔数据以及来自临床试验的数据,研究人员和数据科学家现在还可以访问基因组数据、电子病历(EMR)数据、来自可穿戴和移动设备的数据,以及代表社交媒体和互联网活动的数据。计算机化的发展和自然语言处理等分析技术的发展释放了现有数据源的新潜力,通过使用新数据源本身以及与这些现有数据源相结合,可以收集更多的见解。

数据科学在医疗保健领域最突出的三个应用如下:

  1. 用于诊断目的的图像识别(例如,恶性肿瘤和器官异常)
  2. 使用基因组学数据(如美国国立卫生研究院的 1000 个基因组项目)的精准医疗发展,倾向于关注心脏病和糖尿病等慢性病
  3. 医院运营分析,通常看起来像标准的业务分析(例如,预测急诊室何时需要更多员工)

这三个例子代表了医疗保健数据科学的重要发展,但也证明了医疗保健数据科学通常专注于慢性疾病和医疗保健的业务方面。虽然有了很大的进步,但是心理健康方面的数据科学却落后了。

心理健康问题的负担

在美国,精神疾病的负担是非同寻常的。大约五分之一的美国人患有精神疾病,在年轻人、女性、LGBTQIA+人群和某些少数群体中,这一比例甚至更高。在 10 至 34 岁的人群中,自杀是第二大死因

图片来自:https://www . nimh . NIH . gov/health/statistics/mental-disease . shtml

不幸的是,大多数有心理健康问题的人没有得到适当的治疗。2018 年,只有 43.3%患有精神疾病的成年人接受了治疗。在那些最终接受治疗的人中,症状出现和治疗开始之间的平均延迟是惊人的 11 年。虽然这种治疗差距有几个促成因素,但无法获得精神卫生服务提供者是最重要的因素之一。大约 40%的美国人生活在指定的精神卫生保健短缺地区,低收入美国人无法获得许多精神卫生专业人员,因为他们没有参加保险计划。

图片由 rhi hub(https://www.ruralhealthinfo.org/charts/7)许可使用,数据来自健康资源和服务管理局(HRSA)。

精神疾病得不到治疗会给患者及其社区带来巨大的后果。有心理健康问题的人更有可能出现心血管和代谢疾病等身体状况,辍学,失业,无家可归,并被监禁。

数据科学如何提供帮助

很明显,在美国有巨大的心理健康需求没有得到满足。数据科学可以通过两种主要方式帮助弥合这一差距。

首先,数据科学可以帮助我们更好地理解心理健康问题。谁在经历心理疾病?哪些体征和症状是重要的诊断线索?是什么让一个人更有可能参与并坚持治疗?不同人群的心理健康问题是什么样的?

能够回答这些问题的数据越来越多,或者至少有可能收集。来自可穿戴设备的数据可以用于识别与精神疾病相关的生理标记,社交媒体和互联网活动可以提供对精神健康行为方面的洞察,医生和治疗师的笔记可以越来越多地使用自然语言处理进行分析,大脑扫描可能是诊断图像识别的理想候选。

其次,数据科学可以帮助我们更好地理解和有效地实施心理健康问题的治疗。许多患者在找到适合自己的方法之前,尝试了许多治疗师、治疗技术和药物。考虑到大多数患者在接受任何护理之前要等待多长时间,以及与尝试多种选择相关的成本和情感困难,这种寻找适当护理的广泛过程尤其成问题。因此,重要的是能够评估一种给定的治疗方法(正式的精神病治疗或其他)是否有效。如果是,它为谁工作?怎样才能让更多人接触到?

这些问题中的一部分可以通过标准的临床试验来解决,尽管它们经常受到小样本和非代表性样本的限制。评估自我指导治疗应用程序和聊天服务等新技术的分析对于评估这些干预措施的质量也至关重要。最终,基因组学和精确医学的进步可能会帮助患者找到一种比标准方法更有效地满足他们个人需求的治疗方法。此外,基于机器学习的聊天机器人和其他相关的人工智能仍处于起步阶段,但已经显示出作为最终治疗替代方案的巨大潜力。

使用数据科学改善精神卫生保健状况的机会很多,但更多的公司、提供商和个人必须推动这些可能性成为现实。

挑战 s

在推进心理健康数据科学的道路上,有几个值得注意的挑战,尽管它们远非不可克服。

精神健康问题仍然被高度污名化,这既提出了资金问题,也提出了数据问题。尽管对精神健康的兴趣和意识肯定在增长,但对癌症这样的疾病仍然没有广泛的支持。此外,相对于与其他健康问题相关的数据,患者可能更关心如何使用代表其精神健康问题的数据。对许多人来说,考虑正在分析的最近一次膝盖手术的医生笔记,可能比考虑最近一次治疗会议的笔记更容易接受。与治疗师相比,患者也更容易对他们的骨科医生诚实,所以这些治疗记录实际上可能是质量较低的数据。这种耻辱也有助于保持心理健康相关数据的私密性和安全性。

此外,我们现有的治疗和诊断能力还有很大的改进空间。虽然随着时间的推移,数据科学肯定可以帮助解决其中的一些问题,但使用数据来诊断我们完全了解的疾病要比我们不了解的疾病容易得多。如果有明确的生物标志物或其他指标可以用来衡量治疗效果,那么评估治疗也更容易。许多研究现在依赖于患者的自我报告,这可能无法真正捕捉特定治疗的影响。

最后,仍然很难获得好的数据。当然,有用的数据比以往任何时候都多,而且有很多事情要做,但维护和共享精神卫生保健相关数据的基础设施往往很差。HIPAA 法律通常也会给获取任何医疗保健数据带来一些挑战。使数据质量进一步复杂化的是,大多数人没有接受精神健康问题的治疗,这意味着任何治疗数据都代表接受治疗的人口,而不是需要治疗的人口。

个案研究

尽管心理健康领域的数据科学不如医疗保健其他领域的数据科学发达,但这一领域已经开始了极其重要和令人难以置信的工作。下面,我将描述 3 个有前景的案例研究,它们展示了数据科学在彻底改变美国精神卫生保健状况方面的巨大潜力。

案例研究 1:危机文本行

危机短信热线由训练有素的志愿者通过短信提供免费的全天候危机咨询。自 2013 年热线开通以来,这些志愿辅导员已经处理了超过 500 万次短信对话。作为一家技术公司,Crisis Text Line 认为使用他们的数据来改善他们提供的护理并增强我们对心理健康问题的更广泛理解非常重要。

有时,需要危机干预的短信发送者数量超过了可用的志愿者。虽然这种情况对任何需要帮助的人来说都是不理想的,但危机短信热线知道,有些人比其他人更迫切需要帮助。该公司使用机器学习模型来识别表明自杀风险较高的单词和表情符号,使他们能够将最高风险的短信发送者移到队列的前面。这些模型使用了导致积极救援(即使用紧急服务)的文本对话数据,这是一种新的非常重要的数据。众所周知,预测自杀企图和自杀死亡是非常困难的,该领域缺乏有效的筛选工具或其他有效的预测机制。因此,具有通过文本消息行为预测这些事件的能力,具有最终以更广泛的方式解决这种诊断弱点的巨大潜力。

这些机器学习模型产生的发现强调了在心理健康中使用数据驱动方法的重要性,因为较高自杀风险的指标不是特别直观。事实上,使用“Advil”和“Ibuprofen”这两个词比使用“cut”、“die”、“suicide”或“kill”这两个词对自杀企图的预测性要高 14 倍,而哭丧着脸的表情符号比“自杀”这两个词的预测性高 11 倍依靠数据而非直觉,危机短信热线能够更准确、更高效地识别处于严重危机中的人员,并更迅速地提供援助。

除了开发这种风险检测工具,危机文本热线还致力于将他们的数据用于精神健康的整体改善。除了发布从他们的数据中收集的见解的常规博客之外,危机文本热线还拥有一个根据他们的数据构建的互动仪表板,允许用户探索美国各地情绪困扰的模式。用户可以按主题和地理区域进行过滤,以探索共同出现的问题、地理差异、时间序列模式以及描述特定问题的常用语言:

www.crisistrends.org 的屏幕截图

危机短信热线也采取措施,确保短信发送者与他们分享的敏感数据的安全。发短信的人可以随时要求删除他们的数据,一个内置的算法删除个人身份信息,比如姓名、电话号码和地点。

案例研究 2:三维聊天机器人埃莉

艾莉在行动:https://www.youtube.com/watch?v=ejczMs6b1Q4

上图中的“埃莉”是由南加州大学创新技术研究所的研究人员创造的。该项目由国防高级研究计划局资助,目标是解决退伍军人中的 PTSD 问题。

艾莉的创造者基于她的身体语言和言语模式来自描述现实生活中心理健康专家的许多小时的录制视频,她允许病人比他们在真人面前更开放和诚实。如果患者害怕被评判或识别,他们通常不愿意透露信息,这在退伍军人中尤其如此,因为在这个群体中,精神疾病被视为一种强烈的耻辱。

Ellie 不能取代传统治疗,而是被设计成一个“数据收集器”来改进诊断过程。当患者对 Ellie 说话时,会收集关于他们语速和回答问题前停顿时间的数据,以及患者脸上 66 个独特点的运动和位置。这一过程表明,患有创伤后应激障碍的患者比没有创伤后应激障碍的患者更频繁地触摸他们的头和手,如果没有埃莉收集和分析的大量数据,这一诊断线索可能会被完全遗漏。事实上,在一项针对阿富汗患者的研究中,埃莉发现了比标准的退伍军人部署后健康评估更多的 PTSD 症状。

目前,Ellie 是一个非常有价值的、数据驱动的治疗支持工具。然而,这一模型的成功提供了希望,即类似人工智能的进步可能能够为传统疗法提供替代方案。这种技术可以增加获得护理的机会,并解决美国如此普遍的治疗短缺问题。

案例研究 3:四方健康

Quartet Health 是一家总部位于纽约的心理健康科技公司,致力于通过四管齐下的综合方法提高心理健康护理的质量和可及性。

他们模式的第一部分包括与需要精神保健的人建立联系。这可以通过提供者转介、直接患者注册和对可能需要护理的人进行筛查来实现。这种创新的筛选过程是数据科学的切入点,因为机器学习模型被应用于患者的病史和行为模式,以寻找未诊断的精神健康问题的迹象。这种分析策略导致了几项有趣的发现,例如,一名患者反复测试心脏问题呈阴性表明他可能患有焦虑症

接下来,识别出的病人被匹配到适当的护理形式。在选择护理类型时,患者的个人偏好、临床适应症和保险范围都要考虑在内。可能性包括传统疗法和精神护理,以及在线项目。

四方模型的第三个方面与该公司使用数据驱动的决策来改善精神卫生保健的整体方法相一致。一旦患者被纳入护理,这种护理的质量是由四方监测随着时间的推移。通过持续收集和分析关于患者情况的数据,Quartet 可以快速识别治疗方法何时不起作用,并调整给定患者正在接受的护理。

最后,四方确保在整个过程中支持登记的患者。转诊提供者通常不会收到任何有关其患者精神健康治疗经验的更新,但 Quartet 将转诊提供者和精神健康护理提供者联系起来,以确保这些至关重要的利益相关者之间的沟通。四方还通过他们的“关爱导航员”团队为那些需要帮助的人提供额外的支持

这种数据驱动的模式已经被证明是有效的,并且正在被保险公司采用。Quartet 已经能够识别在困难的诊断或治疗后可能有心理健康问题的患者,已经将一些患者的急诊次数减少了 15-25 %,并且与传统方法相比,在更短的时间内将更多的患者与心理健康护理联系起来。

使用谷歌搜索数据理解新冠肺炎对自杀的影响

我的最后一个例子来自一项我个人参与的研究。随着新冠肺炎在 3 月和 4 月迅速在美国蔓延,我和我的团队开始好奇这种病毒以及用于遏制它的封锁可能对自杀倾向和自杀风险因素产生的影响。

我们推测疫情可能影响以下自杀风险因素:财务紧张和失业、孤独、焦虑、悲伤和压力水平增加。出于几个原因,我们决定使用谷歌搜索(通过谷歌趋势数据)来评估这些风险因素。首先,谷歌趋势数据在 4 月份可以立即访问,并且不依赖于被新冠肺炎患者淹没的医疗系统。此外,有重要的前期研究建立了谷歌搜索行为和自杀行为之间的联系。

我们分析了代表四个领域的 18 个查询:

  • 自杀特定查询:自杀小队,自杀,自杀,自杀方法,自杀,快速/简单/快速/无痛自杀
  • 求助查询:危机短信热线、全国自杀预防热线+全国自杀热线、灾难求助热线+灾难求助热线
  • 一般心理健康查询:抑郁、惊恐发作、焦虑
  • 财务困难查询:失业、失业、下岗、休假、贷款
  • 未分类查询:孤独

我们使用了从 2020 年 3 月 1 日到 2020 年 4 月 18 日的每周搜索数据,出于这项研究的目的,我们将这一时期定义为早期疫情时期。自回归综合移动平均(ARIMA)模型根据一年的数据(2019 年 3 月 3 日至 2020 年 2 月 29 日)进行训练,并用于预测疫情早期的每周相对搜索量。然后计算观察值和预期值之间的百分比差异:

对于所有包含的查询,95% CIs 的百分比差异。图片作者。

具有 95% CIs 的百分比差异,限于具有较小百分比差异的查询,用于可视化目的。图片作者。

从上文可以看出,代表经济困难(自杀的一个已知风险因素)和灾难求助热线(在疫情早期得到广泛推广)的查询大幅增加。财务困难查询的提升尤其令人担忧,一项研究甚至发现搜索“下岗”是延迟 2 个月的实际自杀的最强预测因素。

当我们放大那些与金融查询的变化相比相形见绌的查询时,我们看到与自杀明确相关的搜索实际上适度减少了。这可能是因为在疫情的早期阶段,我们都在一起努力应对眼前的压力,形成了国家的社区意识。这种模式是有先例的,因为在国家灾难(如 911 袭击)后,自杀率下降。然而,不幸的是,在 1918 年的流感和 2003 年的非典爆发后,自杀死亡人数出现了长期增长,我们预计,如果不采取适当的干预措施,自杀和自杀死亡人数可能会出现长期增长。

像我们这样的研究很重要,因为它们已经被用来吸引注意力和资源来研究新冠肺炎对精神健康的影响。我们的研究发表在 2020 年 7 月 24 日的《PLOS 一号》上,可以在这里找到。

结论

尽管心理健康领域将从数据科学使用的增加中受益匪浅,但该领域的发展落后于医疗保健其他领域。也就是说,一些组织已经取得了令人振奋的进步,如危机短信热线、南加州大学创新技术研究所和四方健康组织。这些项目的成功强调了数据科学应用在心理健康中的重要性和潜在益处。

生产中的数据科学:构建 Flask APIs 以最佳实践服务 ML 模型

原文:https://towardsdatascience.com/data-science-in-production-building-flask-apis-to-serve-ml-models-with-best-practices-997faca692b9?source=collection_archive---------14-----------------------

由 Jay Kachhadia 与 Canva 一起建造

在我之前关于全栈数据科学:下一代数据科学家群体的博客获得大量关注后,我决定开始一个关于生产中的数据科学的博客系列。本系列将介绍技术栈和技术的基础,您可以熟悉这些技术,以面对真正的数据科学行业,例如机器学习、数据工程和 ML 基础设施。这将是一个如何通过部署你的模型和用行业中使用的最佳实践创建 ml 管道来把你的学术项目带到下一个层次的演练。

生产中的数据科学

听起来可能很简单,但这与在行业中为你的副业项目或学术项目实践数据科学是非常不同的。它在代码复杂性、代码组织和数据科学项目管理方面要求更多。在这个系列的第一部分中,我将带你们了解如何通过构建 API 来服务于 ML 模型,以便你们的内部团队可以使用它,或者你们组织之外的任何人都可以使用它。

在课堂上,我们通常会从 Kaggle 获取数据集,对其进行预处理,进行探索性分析,并建立模型来预测一些或其他事情。现在,让我们进入下一个层次,将您构建的模型和对数据的预处理打包到 REST API 中。嗯,什么是 REST API?等等,我很快会详细说明一切。让我们从定义我们将使用什么和它背后的技术开始。

REST APIs

API 是应用程序编程接口,这基本上意味着它是一个计算接口,帮助您与多个软件中介进行交互。什么是休息?REST 是代表性的状态转移,是一种软件架构风格。让我用一个简单的图表向你们展示我所说的:

图片来自 astera.com

因此,在我们的情况下,客户端可以通过使用我们构建的模型与您的系统进行交互以获得预测,并且他们不需要我们构建的任何库或模型。如果你参加面试或申请高等教育,展示你的项目会变得更加容易。这是他们可以看到的工作,而不是写在你简历上的三行狗屎之类的东西。

在这里,我们将构建服务于我们的机器学习模型的 API,我们将在 FLASK 中完成所有这些工作。Flask 也是 python 的一个 web 框架。你一定听说过业内的两个大公司,Flask 和 Django。Flask 和 Django 都是令人惊叹的 python web 框架,但是在构建 API 时,Flask 速度非常快,因为它不太复杂,设计也很简单。Wohoo!因此,我们将再次经历行业中普遍使用的一些东西。在不浪费更多时间的情况下,让我们开始研究一些代码,并为 ML 模型构建我们的 API。

设置您的环境

第一步总是设置您自己的项目环境,这样您就可以将您的项目库及其版本与本地 python 环境隔离开来。有两种方法可以专门为你的项目设置 python 环境: VirtualenvConda 。只是为了保持一致,我将在整个项目中使用 Python 3.8.3,但你可以使用任何版本,这应该没问题。

用 pip 和 virtualenv 创建虚拟环境

用公寓创建虚拟环境

在您的终端中执行上述任何命令后。您将处于项目自己的虚拟环境中。如果你想在虚拟环境中安装任何东西,它就像普通的 pip 安装一样简单。在您从事任何项目时,创建虚拟环境始终是业内的标准做法。

一旦你进入虚拟环境,使用来自 github repo 的 requirements . txt:https://github.com/jkachhadia/ML-API

[## jkachhadia/ML-API

将机器学习模型作为 API。在 GitHub 上创建一个帐户,为 jkachhadia/ML-API 开发做贡献。

github.com](https://github.com/jkachhadia/ML-API)

请确保将 requirements.txt 文件从 repo 复制到您的项目文件夹中,因为我们稍后将使用它,我还将向您展示如何创建您自己的 requirements.txt 文件。将文件复制到项目文件夹并确保您处于刚刚创建的环境中之后,在终端中运行以下命令来安装项目所需的所有依赖项。

现在,一切都准备好了。

构建您的 ML 模型并保存它

对于这个项目,我们的主要目标是以 API 的形式打包和部署我们构建的 ML 模型。因此,我们将使用 Kaggle 的初始数据集和一个带有特征工程的基本逻辑回归模型来构建我们的模型。如果你想知道我是如何构建基本模型的。代码可以在这个 Github repo 上找到。你可以在 model_prep.ipynb ipython 笔记本中找到代码(假设你熟悉 ipython 笔记本)。这段代码的灵感来自于我发现的一个 kaggle 内核,因为这不是这里的主要目标。

我们将使用 pickle 库来保存模型。反过来,您的模型是一个 python 对象,包含所有的方程和超参数,可以用 pickle 序列化/转换成字节流。

保存模型的示例代码

上述代码也可以在 model_prep 笔记本中找到。

有趣的部分——Flask API 创建和文件夹管理

我们现在将创建一个具有最佳实践的 Flask API。什么最佳实践?例如,如何创建一个干净的代码,可以交付到生产环境中,并且在出现任何问题时易于调试。

因此,首先,我们将创建一个 helper_functions python 脚本,其中包含我们需要的所有预处理模块。同样,这是您将在 model_prep 笔记本中找到的相同的预处理代码,但是我们用它来创建函数,以便在其他任何地方重用。

helper_functions.py 的代码

现在,我们不会硬编码我们将在最终 API 脚本中使用的变量或名称。因此,我们可以创建一个名为 configs.py 的单独的 python 文件,出于安全目的,它将基本上存储我们的所有变量。

让我们开始构建我们的 API。我们将从一个简单的开始:只是 hello world 的一个新版本。创建一个名为 app.py 的新文件,让我们导入启动和运行 API 所需的所有库。

我们已经导入了上述代码中的所有库,以及所有的帮助函数和变量配置。现在让我们初始化一个 flask 应用程序实例。

首先,让我们编写一个简单的 flask 类型 hello world,并为我们的 flask 应用程序创建一个新的路由。路由通常是功能支持的 URL。

恭喜你。你写了你的第一个烧瓶路线。现在让我们通过运行我们用 Flask 启动的 app 对象来运行它。

是啊!我们差不多完成了我们的第一次迷你演出。让我们在本地运行这个。打开您的终端并运行 app.py(确保您位于 app.py 所在的项目文件夹中,并且您位于我们之前创建的虚拟环境中)

呜哇!我们的 Flask 应用程序应该运行在 http://127.0.0.1:5000 上。如果你用浏览器去那个网址。我们应该得到我们在第一个路由中添加的消息:“你好,来自泰坦尼克号数据的 ML API!”。超级爽!

让我们开始构建我们的新路线,这将是我们展示 ML 模型的方式。

在上面添加了预测/的新路径中,如果有人向 flask 应用程序的 URL 发送 get 请求以及 JSON 形式的原始数据,我们将按照创建模型的方式预处理数据,获取预测并发回预测结果。

request.get_json()将基本上为我们提供与 get 请求一起发送的 json 数据。我们将数据转换成数据帧,使用我们辅助函数 preprocess()来预处理数据帧,使用配置文件中的 model_name 和列名来加载带有 pickle 的模型,并对切片的数据帧进行预测。

做出预测后,我们将创建一个包含预测和预测标签元数据的响应字典,最后使用 jsonify 将其转换为 JSON,并将 JSON 返回。记住 200 是因为它是成功的。编辑后保存 app.py 后,仍在运行的 flask 应用程序将自动更新其后端以合并新的路线。

在本地测试我们的 API

为了在本地测试我们的 API,我们将只编写一个小的 ipython 笔记本,或者您可以在 github repo 中使用一个名为 testapi.ipynb 的笔记本

如果您在 python 终端或 ipython 笔记本中运行上述代码,您会发现您的 API 工作起来非常神奇。万岁!您已经成功地公开了您的模型,但是在本地:(

在 Heroku 上部署 ML API

Heroku 是一个云平台,帮助你在他们的云上部署后端应用。是的,我们将在云中部署我们的 ML 模型 API。

让我们开始吧。在 heroku.com 的上创建您的账户。一旦你这样做,并前往仪表板,你将不得不创建一个新的应用程序。

Heroku 仪表板上部

你点击创建新的应用程序,并相应地命名为我命名为' mlapititanic '

我的不可用,因为我已经创建了它:p

厉害!现在,你可以点击你的应用程序,进入设置,将 python 添加到你的 buildpack 部分。

你也可以通过安装 Heroku CLI 来实现这一点,我们最终将不得不这样做来部署我们的应用。

安装 CLI 后,您还可以从命令行创建一个应用程序,如下所示:

我喜欢 CLI 方式,因为我已经是一个 Ubuntu/Mac 用户 5 年了。

现在,我们将向该文件夹添加两个文件,即 Procfile 和 runtime.txt。

那是我的版本,但是你的可以不同

Procfile 基本上会用 gunicorn 运行你的应用。确保您的虚拟环境中安装了该软件。现在,正如我告诉你的,我们将讨论如何创建你自己的 requirements.txt 文件。

这基本上会将您的所有应用程序/虚拟环境的依赖项转储到 requirements.txt 文件中。

现在,如果你去 heroku 的部署部分,他们有关于如何部署的非常清楚的说明,但我会把它们放在下面。

这些命令会将您的代码推送到 heroku cloud,并使用依赖项构建您的 flask 应用程序。恭喜你!您已经将 ML API 部署到云/生产中。

现在你可以进入 https:// .herokuapp.com/

现在我们将测试部署的 API!

如果它正在运行。你都准备好了!呜哇!

结论

因此,我们用行业中使用的最佳实践构建了我们自己的 ML 模型 API,这可以用在你的其他项目中,或者你可以在你的简历中展示它,而不仅仅是像以前那样填写。这是真实的,互动的,证明你真的建立了一些东西。

在 gmail dot com 的[我的名字][我的名字]上提问,或者在 LinkedIn 的上联系我们

生产中的数据科学:使用 Dash 为您的数据科学项目快速构建交互式用户界面

原文:https://towardsdatascience.com/data-science-in-production-quickly-build-interactive-uis-for-your-data-science-projects-with-dash-6568e7df5528?source=collection_archive---------26-----------------------

这篇博客讲述了如何使用机器学习创建 dash 应用程序,以及如何将您的数据科学项目部署到云中。

封面由 Jay Kachhadia 和 Canva 共同设计

在我之前的一篇关于全栈数据科学:下一代数据科学家群体的博客获得大量关注后,我决定开始一个关于生产中的数据科学的博客系列。本系列将介绍技术栈和技术的基础,您可以熟悉这些技术,以面对真正的数据科学行业,例如机器学习、数据工程和 ML 基础设施。这将是一个如何通过部署你的模型和用行业中使用的最佳实践创建 ml 管道来把你的学术项目带到下一个层次的演练。这是本系列的第二部分,你可以在这里看一下第一部分:生产中的数据科学:构建 Flask APIs 来服务具有最佳实践的 ML 模型

这篇博客将讲述如何快速构建使用机器学习的交互式 web 应用程序,以及如何将这些应用程序部署到 Heroku cloud 中。简历上任何可以展示的东西都比仅仅是文本的东西增加了 10 倍的价值。

Dash:构建数据科学应用的 web 框架

Dash 是由 Plotly 专门为数据科学和人工智能应用而构建的开源 web 框架。通常需要前端、后端和 DevOps 团队的全栈应用程序可以由数据科学家使用 Dash 在几个小时内完成构建和部署。是啊!你可以用 Python 做任何事情,这就是 beautiful❤.

我们将从头开始建造这整个东西(用 Canva 创建)

Dash 构建在 Flask、Plotly.js、React 和 React Js 之上,但在本练习中,我们将用 python 编写大部分代码,并嵌入一些 html 和 css 元素。

设置您的环境

第一步通常是建立您自己的项目环境,这样您就可以将您的项目库及其版本与本地 python 环境隔离开来。有两种方法可以专门为您的项目设置 python 环境: VirtualenvConda 。只是为了保持一致,我将在整个项目中使用 Python 3.7.3,但你可以使用任何版本,这应该没问题。

用 pip 和 virtualenv 创建虚拟环境

用 Conda 创建虚拟环境

在您的终端中执行上述任何命令后。您将处于项目自己的虚拟环境中。如果你想在虚拟环境中安装任何东西,它就像普通的 pip 安装一样简单。在您从事任何项目时,创建虚拟环境始终是业内的标准做法。

进入虚拟环境后,使用 app 文件夹中 github repo 的 requirements . txt:https://github . com/jkachhadia/IPL-prediction/tree/master/app

[## jkachhadia/IPL-预测

此时您不能执行该操作。您已使用另一个标签页或窗口登录。您已在另一个选项卡中注销,或者…

github.com](https://github.com/jkachhadia/ipl-prediction/tree/master/app)

现在,一切都准备好了!

预处理和构建模型

让我们让这变得更有趣一点,所以我们将为板球比赛建立预测模型,我们将使用来自 https://www.kaggle.com/nowke9/ipldata 超级联赛(IPL)上的 Kaggle:的数据集。IPL 时钟达到 4.62 亿,第 12 季电视观看时间为 3380 亿分钟。

[## 2008-2019 印度超级联赛

逐球印度超级联赛(IPL)板球数据集

www.kaggle.com](https://www.kaggle.com/nowke9/ipldata)

如果你已经克隆了上面分享的 repo,这里有一个 ipython 笔记本,向你展示如何预处理一个球接一个球的数据和匹配数据。这有点复杂,所以我不会在这里解释预处理步骤,因为这不是我们的主要目的。该笔记本产生 6 个预处理数据集,我们稍后将在 Dash 应用程序中使用这些数据集。我们将以这样一种方式构建应用程序,任何用户都可以调整模型参数来获得所需的预测。我们将建立 3 个模型:分数预测器,第一局后的获胜概率预测器,以及还剩 10 局时的获胜概率预测器。

构建我们的 Dash 应用程序

我们现在将开始处理一些代码来构建我们的 dash 应用程序。让我们创建一个名为 app.py 的新文件,并从导入我们需要的库开始。

现在让我们声明我们将在多个函数中使用的所有全局变量。

我们将导入所有预处理的训练数据,以节省我们的应用程序在预处理上的时间。所有的预处理步骤都在 ipython 笔记本中。

现在,让我们用一个外部 css 样式表启动我们的 dash 应用程序(样式表部分不是必需的)

设计应用布局

我们现在将使用 dash 的内部 html 组件定义来设计 web 应用程序的外观。有一些 html 和 css 知识是很好的,但不是必要的,因为它并不太复杂。

我们想要设计的布局

这是我们想要设计的 webapp 的布局,在 UI 设计方面非常简单。我们必须在 dash 布局中定义 UI 中的每一个元素。我们必须指定每个元素的 id 和样式,以便能够控制和获取数据,并在后端进行处理。理解的一个好方法是阅读和编写下面的代码,并与上面的 UI 进行比较。

我们想让它完全动态,这样当随机森林或神经网络被选中时,我们就可以选择调整模型参数,否则看不到它们。因此,当下拉选项改变时,我们将使用回调来动态地改变 UI。

这六个回调将使参数设置的可见性完全动态化,并且非常容易,因为当算法的下拉列表发生变化时,只需要一些条件语句来检查值和设置属性。

为 ML 添加逻辑

现在,我们将进行有趣的部分,即制作动态 ML 组件,当我们更新特征或模型参数时,该组件将快速更新预测。当特性或参数组件发生变化时,我们将再次使用 dash 回调来更新页面的预测组件。

正如你在上面看到的,我们增加了 3 个回调来更新预测。现在您需要的只是一些运行服务器的代码。

是啊!我们差不多完成了我们的第一次迷你演出。让我们在本地运行这个。打开您的终端并运行 app.py(确保您位于 app.py 所在的项目文件夹中,并且您位于我们之前创建的虚拟环境中)

Wohoo!您的应用应该在 http://127.0.0.1:8050/ 上启动并运行!

在 Heroku 上部署 IPL 预测应用

Heroku 是一个云平台,帮助你在他们的云上部署后端应用。是的,我们将在云中部署我们的 dash 应用程序。

让我们开始吧。在 heroku.com 的上创建您的账户。一旦你这样做,并前往仪表板,你将不得不创建一个新的应用程序。

Heroku 仪表板上部

你点击创建新的应用程序,并相应地命名为我的命名为“iplpredict”

我的不可用,因为我已经创建了它:p

厉害!现在,你可以点击你的应用程序,进入设置,将 python 添加到你的 buildpack 部分。

你也可以通过安装 Heroku CLI 来实现这一点,我们最终将不得不这样做来部署我们的应用。

安装 CLI 后,您还可以从命令行创建一个应用程序,如下所示:

我喜欢 CLI 方式,因为我已经是一个 Ubuntu/Mac 用户 5 年了。

现在,我们将把两个文件 Procfile 和 runtime.txt 添加到 app 文件夹中。

Procfile

runtime.txt

Procfile 基本上会用 gunicorn 运行你的应用。确保您的虚拟环境中安装了该软件。现在,我们将介绍如何创建自己的 requirements.txt 文件。

这基本上会将您的所有应用程序/虚拟环境的依赖项转储到 requirements.txt 文件中。

现在,如果你去 heroku 的部署部分,他们有关于如何部署的非常清楚的说明,但我会把它们放在下面。

这些命令会将您的代码推送到 heroku cloud,并使用依赖项构建您的 flask 应用程序。恭喜你!您已经将 dash 应用部署到云/生产环境中。

现在你可以进入 https:// .herokuapp.com/。还有,你可以在这里查看我的 app 版本:http://iplpredict.herokuapp.com

如果它正在运行。你都准备好了!呜哇!

结论

因此,我们构建了我们自己的 dash web 应用程序,这可以用于您的其他项目,或者您可以在您的简历中展示它,而不仅仅是像以前一样填写您所做的内容。这是真实的,互动的,证明你真的建立了一些东西。Dash 还提供许多其他功能,比如构建实时可视化和仪表盘。

在 gmail dot com 的[myLastName][myFirstName]上提问,或者在 LinkedIn 的上联系我们

你准备好成为数据科学家了吗?

原文:https://towardsdatascience.com/data-science-in-school-vs-at-work-2aebda0ccb23?source=collection_archive---------54-----------------------

学校与工作中的数据科学

伊万·班杜拉在 Unsplash 上的照片

3 年前,我毕业于一所大学,获得了商业分析(大数据)学士学位。我渴望成为一名数据科学家,并希望应用我在学校学到的所有机器学习模型来改变世界。是的,“改变世界”甚至是我在那段时间的许多采访中使用的短语,因为我相信如此。

现在回顾过去 3 年,我会说我太年轻,对数据科学在现实世界中的应用过于理想化。在这篇文章中,我想谈谈数据科学在学校和实际工作中的区别。我希望这篇文章能够引起一些当前数据科学家的共鸣,也有助于为未来渴望成为数据科学家的人设定期望。

因素 1:数据可用性

对于数据可用性,我指的是数据数量和数据质量。它分解成多个问题。

我们有没有首先需要的数据?

我们是否有足够数量的案例数据来创建有效的机器学习模型(用于训练和测试数据集)?

数据质量如何?(缺失数据?良好的行业分布?)

数据集的更新程度如何?

数据是否以您想要的格式存在?

在学校:老师会提供一个数据集,或者我们需要去寻找自己的数据集。即使我们被要求找到我们自己的数据集,我通常做的是去世界银行,使用它的一个宏观经济数据集。这是因为世界银行的数据集是完整的,而且通常质量良好。

我们的大部分努力都集中在建立机器学习模型上,而不是找到一个好的数据集或清理数据。

不幸的是,除非你属于谷歌或脸书这样的科技巨头,否则数据集不容易获得,尤其是高质量的数据。我们需要从网上搜集数据或者从第三方供应商那里购买数据。

由于样本大小或预测因子数量的数据限制,有时我不能应用随机森林算法或甚至训练测试分裂,因为它们需要最少的数据行或列。此外,如果我从事数据科学项目,我大约 90%的时间都在做数据工程或清理数据集,以确保它处于良好状态。

因素 2:业务需求

图片来自 Unsplash的 Sharon McCutcheon】

这听起来有点不公平,因为学校并不是一个正常的商业实体。然而,这正是不同之处。学校并不依赖你的机器学习模型来盈利,因此启动项目所需的业务水平存在很大差异。

在学校:我可以拿起任何问题陈述,用我的机器学习模型去解决。尽管由于实现的难度,这个问题可能没有太大的价值,但我仍然可以做到。

例如,在学校,我将 GDP 与预期寿命联系起来,这似乎没有直接的商业价值。

在工作中:人们做的每一个项目都会得到报酬,公司绝对不想把钱浪费在低商业价值的项目上。在我们开始一个数据科学项目之前,我们需要确保这是一个值得探索的问题陈述,或者理想情况下,问题陈述应该来自业务所有者。

在项目过程中,我们会不断地与企业主就我们正在建设的东西进行沟通,并检查我们是否朝着正确的方向前进。这是因为最终企业主将是使用你的产品或见解的人。

因素 3:数据科学或数据分析或数据可视化

这与前面的业务需求因素有关。当你有一个问题陈述和数据集时,你会应用机器学习模型或简单的数据分析还是简单地在 Tableau 上可视化数据?这肯定取决于具体的使用案例,但在学校和工作中可能会有所不同。

在学校:作为一名数据科学的学生,我曾经把尽可能多的机器学习模型放到学校的项目中。

好的,我们可以在这里进行情感分析,对数据集进行聚类,然后对每个聚类进行回归

这听起来很酷,但是有时问题可以通过不同组的简单平均来解决。

不,那太简单了,不酷,教授不会喜欢的

工作中:我会努力寻找最简单的解决方案。最后,我意识到许多问题可以通过数据可视化来解决,比如散点图或简单的数据集合。在现实生活中,许多数据问题并不复杂,也不适合使用数据科学方法。

因素 4:结果的呈现

我的代码输出结果(左)影响房价的因素——你更喜欢哪个?作者的简单图解(右)

我喜欢这个话题。当我第一次在工作中向业务部门展示我的数据科学结果时,我使用了 Jupyter 笔记本中我的回归模型结果的截图,并向他们解释了我的 R 平方、P 值等。当我看着他们的脸,我知道有什么不对劲…

在学校:如果你以前上过学校的统计或数学模块,你可能会遇到以下几件事:

  1. 一本很厚的教科书(我家里还有一本叫《概率》的,我现在用它来增加显示器的高度)
  2. 一页一页的公式和证明
  3. 教授可能会在黑板上绘制一些图表,这些图表对用户不友好,可读性差,并试图向我们解释每一个细节。

是的,当人们在学校听到我关于数据科学项目的报告时,可能会有这种感觉。我可以创建许多幻灯片,其中许多是证明概念的数学公式。当谈到解释的结果时,通常只是代码结果的截图,很少强调业务接下来可以做什么。遗憾的是,如果我们在做小组陈述,我们总是让一个弱势的队友来陈述“发现或后续步骤”,因为这很容易解释。

在工作中:我们应该避免在演示中使用技术术语,因为观众很可能一点也不懂。如果我们向企业展示,他们并不关心我们做了多少艰苦的工作才得出这样的结论,比如造了多少模型,创造了多少新功能。他们想听到的只是结果和他们如何利用你的模型的见解。我们应该避免使用回归结果的截图,而是使用用户友好的图表来说明变化或差异。

因素 5:模型性能预期

很抱歉,我不得不在这里使用一些术语。回归模型的 r 平方表示模型可以解释的目标变量的变化百分比。R 平方越高,你的模型越好。

在学校:我通常会选择质量好、能给我带来好结果的数据集。我不想在一个项目上花几个星期,最后得出的结论是没有相关性。对于我的回归输出,我通常可以得到 R 平方≥0.8,这意味着 80%的变量变化可以用模型来解释。我记得有一次我的模型只给了我 0.3 R 平方,我想谁会使用这种模型< 0.5 R 平方。

工作中:对于工作中的第一个数据科学项目,我的最佳调整 R 平方是 0.1,这意味着该模型只能解释 10%的变化。我非常失望。原来我至今在工作中的数据项目中,从来没有得到过任何模型≥0.8 R 平方的。有一定的道理因为如果 R 平方这么大,可能意味着结论或多或少是常识,然后为什么我们首先需要开始这个项目。这里的要点是,我们不应该期望我们的机器学习模型在我们的工作中达到同样的健康水平和令人敬畏的性能,因为现实生活中有太多意想不到的因素或噪音。

结论或建议:

我并不是想阻止人们成为数据科学家,不同公司的情况可能不同。但是,我觉得当人们作为数据科学家进入职场时,有一个合理的预期是好的。我从 3 年的工作经验中学到的几点:

  1. 数据工程很重要。即使你不渴望成为一名数据工程师,掌握一些这方面的知识和技能也是很好的,也是必要的。
  2. 数据可视化非常重要。人们可能不理解你的模型,但大多数人更容易接受可视化图表和图形。我喜欢使用 Tableau,因为它是交互式的和简单的,但是 Python 库也是免费的和强大的。
  3. 模型结果的解释和展示非常重要。如果你不能很好地解释一个模型,它是没有用的。即使你的预测准确率是 99%,如果你不能很好地解释这些发现或见解,它也不会被采纳。
  4. 在我个人看来,理解商业问题是最重要的。我们应该就数据科学模型能够带来什么以及用户需要什么达成一致。我们应该用最简单有效的方法来解决用户的问题,这可能需要领域知识。

如果您对想要阅读的新数据主题有任何反馈或建议,请在评论框中提出!感谢阅读!

加速时代的数据科学

原文:https://towardsdatascience.com/data-science-in-the-age-of-accelerations-37517ff128e9?source=collection_archive---------35-----------------------

一个数据科学家的日记

数据科学家、他们的经理和高管如何在数据科学的加速跑步机上保持不变

穆罕默德·马哈茂德·哈桑插图

2004 年,谷歌发布了一份描述 MapReduce 的白皮书,这是一种用于并行处理大数据的创新编程模型。2013 年,作为一名数据科学家,我的公司出资让我参加了 MapReduce 课程。但到了 2014 年,谷歌已经放弃将 MapReduce 作为其处理大数据的主要模型,这引发了一些问题,比如,MapReduce 已经过时了吗还是过时了吗?与更新的替代产品相比,使用它有什么好处吗?【MapReduce 还有未来吗?

作为一名数据科学家,在短短的 7 年时间里,我见证了许多技术的发展和消亡。有些,像 MapReduce,我不得不关注它们的衰退和废弃。其他的,比如计算笔记本,我作为一个从业者开始使用,并且一直使用到今天。然而,对于像深度学习框架这样的新框架,我管理的数据科学家有时间和接触来掌握它们,而我只对它们的设计和使用提供战略建议。

这些技术的加速生命周期部分是由于数据科学的婴儿期和我进入管理领域的进展,但它在很大程度上反映了我们的世界如何工作的彻底的结构性转变。正如托马斯·弗里德曼在 谢谢你迟到:一个乐观主义者的加速时代繁荣指南 中所说,世界正在经历一系列加速——跨越技术、全球化和气候变化——随着世界在许多领域发生变化,这要求人们更多更快地适应。

数据科学作为一种职业也不例外。

为学习而优化

作为一种职业,数据科学的加速发展对数据科学家的工作方式以及他们的经理和高管如何雇用、指导和留住他们产生了重大影响。具体来说,他们要求每一个小组都进行优化学习。

数据科学家

我毕业后的第一份工作是在华特·迪士尼公司做数据科学家。它要求我用 SAS 编程,建立生产级别的机器学习模型,并向客户咨询。在我工作的第一天,我从来没有在 SAS 中编写过代码,做过顾问,或者构建过这样的模型。

随着我事业的发展,事情并没有改变。在担任高级数据科学家的第二份工作之前,我从未领导过数字分析团队。在担任首席数据科学家之前,我从未为银行建立过欺诈模型。在担任数据科学主管之前,我从未发展和领导过数据科学实践。在我目前管理一个专注于法律经济学的数据科学团队之前,我没有与律师或经济学合作过。

在整个过程中,我不得不为学习而优化:直接和间接从更高级的同事和直接经理那里吸收知识,从 StackOverflow 等问答网站和 Coursera 等学习平台在线自学,阅读技术书籍,参加数据科学会议活动和会议。

我没有尽可能快地学会所有我应该学会的东西,但我学会了足够多的东西来成长为一名数据科学家,并最终成为一名数据科学经理。一路上我犯了很多错误,但我从每个错误中吸取了教训,并没有随着时间的推移而重复错误。这并不总是容易或简单的,但为学习而优化帮助我作为一名数据科学家继续前进。

数据科学经理

每次我被聘为数据科学家时,我都缺乏一种关键的角色或特定领域的专业知识,而这种专业知识是我获得成功所必需的。作为一名招聘经理,我也面试和聘用过一些数据科学家,他们并不具备在我的团队中工作所需的全部经验。我写的工作描述和我与我的团队创建的面试流程都预见到了这一点。

我不能总是雇佣已经做过同样工作的人——有时,工作类型对已经做过的人来说太新了。我也不能总是雇用有完美证书的人——大多数专业数据科学家没有数据科学学位,这是一个相对较新的现象。

即使我找到了一位以前做过相同工作的数据科学家,或者拥有适合这份工作的数据科学学位,一年后我聘用他们的角色可能会有所不同:这将需要新颖的技能,使用新技术,并涉及解决不同的问题。

作为一名招聘经理,我的目标是找到并雇用好奇的修补者:具有求知欲和一般资质(技术或其他方面)的数据科学家,以确定他们的工作需要的技能,以及足够快和足够好地掌握这些技能的热情和能力。

我试图将学习优化从招聘扩展到指导:为我团队中的数据科学家提供时间、空间和资源,以满足他们对修补的好奇心。我期望在他们工作的技术细节、他们为自己的角色带来的背景以及他们在工作中获得的新技能方面不如他们精通。但我的目标是就他们提出的问题、他们优先考虑的学习内容、他们如何应用知识以及他们如何交流工作来指导他们。

米勒·戴维斯有句名言,“不是你弹的音符,而是你没弹的音符。”同样,作为一名数据科学经理,我经常需要弄清楚团队中的数据科学家何时比我知道得更多或更好,这样我就可以避开他们。

数据科学高管

作为迪士尼的一名数据科学家,我很幸运有一位了解优化学习重要性的经理和执行领导。他们为我参加的技术课程付费,并给我时间来修补他们团队中新的编程语言,最终同意我的工作应该包含这些不同的语言。

在 Capital One 和优步,高管层投资于企业版在线学习平台,供像我这样的数据科学家学习和提高技能。这些公司还为我提供津贴,让我参加数据科学会议并在会上发言,在会上我可以了解最新的最佳实践,并向其他数据科学家学习。

团队或组织中有数据科学家的高管通过提供可用资源和建立制度化的流程来优化学习,并鼓励在职学习。这使得数据科学家的工作成果与他们职业的加速变化保持同步,使他们随着时间的推移更加有效和高效。

但这也成为雇佣和留住数据科学家的竞争优势。如果你雇佣了或者正在雇佣合适的人,数据科学家将会热衷于在工作中学习,并且不想停止成长。

数据科学是一台加速的跑步机

我在自己的职业生涯中亲身经历过,也在我的同事和团队中的数据科学家的职业生涯中看到过。我们进化——而且很快——否则就会落后。我很幸运从指导我的同事和经理以及尊重并认识到数据科学不断变化的雇主那里受益匪浅。

截图来自 YouTube

数据科学的这一特征并不是该行业独有的,但在数据科学家如何工作以及他们的经理和高管如何雇用、指导和留住他们的过程中,认识到这一点并尊重它是非常重要的。

数据科学不会停止加速发展。快速适应,坚持跑,尽量不要掉下来。

云中的数据科学

原文:https://towardsdatascience.com/data-science-in-the-cloud-239b795a5792?source=collection_archive---------5-----------------------

Azure vs AWS vs GCP

Unsplash 上由 Max Duzij 拍照

数据科学领域是多种多样的,如今在这个过程中涉及到许多不同的角色和职责。数据科学工作通常涉及处理非结构化数据、实施机器学习(ML)概念和技术、生成见解。这一过程通常以数据驱动的洞察力的可视化呈现结束。

机器学习是该过程的关键要素,但训练 ML 模型通常是一个耗时的过程,需要大量资源。过去,获取 ML 资源既困难又昂贵。今天,许多云计算供应商提供云中数据科学的资源。

本文回顾了 AWS、Azure 和 FCP 上的机器学习选项,以帮助您决定哪种资源满足您的 ML 需求。

云计算对数据科学的重要性

机器学习和深度学习模型的训练涉及成千上万次迭代。您需要这些大量的迭代来产生最精确的模型。例如,如果您有一组只有 1TB 数据的训练样本,该训练集的 10 次迭代将需要 10TB 的 I/O。当计算机视觉算法处理高分辨率图像时,输入数据集的大小非常大。您可以通过消除任何相关的网络延迟来减少处理时间。这可以帮助您确保读取源数据的最佳 I/O 性能。

云计算使您能够模拟存储容量和大规模处理负载,或者跨节点扩展处理。例如,AWS 提供具有 8–256 GB 内存容量的图形处理单元(GPU)实例。这些实例按小时定价。GPU 是专门为复杂图像处理而设计的处理器。Azure 为高性能计算算法和应用提供 NC 系列高性能 GPU。

AWS 机器学习服务和工具

亚马逊提供了几种机器学习工具和服务。这些服务使组织和开发人员能够提高计算密集型和高性能计算模型的性能。下面的列表回顾了其中的一些服务。

亚马逊 SageMaker

SageMaker 是一个完全托管的机器学习平台,面向数据科学家和开发人员。该平台运行在弹性计算云(EC2)上,使您能够构建机器学习模型、组织数据和扩展运营。SageMaker 上的机器学习应用包括语音识别、计算机视觉和推荐。

AWS 市场提供您使用的模型,而不是从零开始。然后,您可以开始训练和优化您的模型。最常见的选择是像 Keras、TensorFlow 和 PyTorch 这样的框架。SageMaker 可以自动优化和配置这些框架,或者您可以自己训练它们。您也可以通过在 Docker 容器中构建算法来开发自己的算法。你可以使用 Jupyter 笔记本来构建你的机器学习模型,并可视化你的数据。

亚马逊 Lex

Lex API 旨在将聊天机器人集成到应用程序中。Lex 包含基于深度学习的自然语言处理(NLP)和自动语音识别功能。

API 可以识别口头和书面文本。Lex 的用户界面(UI)使您能够将识别的输入嵌入到许多不同的后端解决方案中。除了独立的应用程序,Lex 还支持为 Slack 、Facebook Messenger 和 Twilio 部署聊天机器人。

亚马逊认知

Rekognition 是一种计算机视觉服务,它简化了图像和视频识别应用程序的开发过程。Rekognition 使公司能够根据业务需求定制应用程序。Rekognition 的图像和视频识别功能包括:

  • 对象检测和分类 —使您能够在图像和视频中找到并识别不同的对象。例如,您可以检测正在跳舞的人或正在灭火的火。
  • 人脸识别 —用于人脸检测和匹配。例如,你可以用它来检测图像和视频中的名人面孔。
  • 面部分析 —用于分析面部表情。你可以检测微笑,分析眼睛,甚至定义视频中的情感情绪。
  • 不当场景检测 —使您能够确定图像或视频是否包含不当内容,如露骨的成人内容或暴力。

Azure 机器学习服务和工具

与 AWS 相比,Azure 机器学习产品在开箱即用的算法方面更加灵活。Azure 机器学习产品可以分为两大类——Azure 机器学习服务和 Bot 服务。

Azure 机器学习(Azure ML)服务

Azure ML 是一个巨大的预训练、预打包的机器学习算法库。Azure ML 服务还提供了一个环境来实现这些算法,并将它们应用到现实世界的应用程序中。Azure ML 的 UI 使您能够构建结合多种算法的机器学习管道。您可以使用 UI 来训练、测试和评估模型。

Azure ML 还为人工智能(AI)提供解决方案。这包括可视化和其他可以帮助理解模型行为的数据,并比较算法以找到最佳选项。

Azure ML 服务产品包括:

  • Python 包 —包含用于计算机视觉、文本分析、预测和硬件加速的函数和库。
  • 实验 —使你能够构建不同的模型,比较它们,将项目设置为特定的历史配置,并从那时起继续开发。
  • 模型管理 —提供一个环境来托管模型、管理版本和监控运行在 Azure 或内部的模型。
  • 工作台 —一个简单的命令行和桌面环境,带有仪表盘和模型开发跟踪工具。
  • Visual Studio Tools for AI —使您能够添加用于深度学习和其他人工智能项目的工具。

Azure 服务机器人框架

Azure Service Bot 提供了一个使用不同编程语言构建、部署和测试 Bot 的环境。Bot 服务不一定需要机器学习方法,因为微软提供了五个预定义的 bot 模板。这包括基本、形式、主动、语言理解和问答。只有语言理解模板需要先进的人工智能技术。

您可以使用 Node.js 和。NET 技术来用 Azure 构建机器人。你可以在 Skype、Bing、Office 365 电子邮件、Slack、Facebook Messenger、 Twilio 和 丨t丨e丨l丨e丨g丨r丨a丨m丨s丨 等服务上部署这些机器人。

谷歌云机器学习服务和工具

谷歌在两个层面上提供机器学习和人工智能服务——面向经验丰富的数据专业人士的谷歌云机器学习引擎和面向初学者的 Cloud AutoML 平台。

谷歌云汽车

为没有经验的用户构建的基于云的机器学习平台。您可以上传数据集、训练模型并将其部署到网站上。AutoML 集成了谷歌的所有服务,并将数据存储在云中。您可以通过 REST API 接口部署训练好的模型。

您可以通过图形界面访问许多可用的 AutoML 产品。这包括结构化数据、图像和视频处理服务的培训模型,以及自然语言处理和翻译引擎。

谷歌云机器学习引擎

Google Cloud ML 引擎使您能够大规模运行机器学习训练作业和预测。你可以使用谷歌云 ML 通过利用 GPU 和张量处理单元(TPU)基础设施的来训练一个复杂的模型。您还可以使用该服务来部署外部培训的模型。

Cloud ML 自动执行所有监控和资源配置流程,以运行作业。除了托管和训练,Cloud ML 还可以执行影响预测准确性的超参数调整。如果没有超参数调整自动化,数据科学家需要手动试验多个值,同时评估结果的准确性。

张量流

TensorFlow 是一个开源软件库,使用数据流图进行数值运算。这些图中的数学运算由节点表示,而边表示从一个节点传输到另一个节点的数据。TensorFlow 中的数据表示为张量,即多维数组。TensorFlow 通常用于深度学习研究和实践。TensorFlow 是跨平台的。您可以在 GPU、CPU、TPU 和移动平台上运行它。

结论

您很容易迷失在云中各种可用的数据科学解决方案中。它们在算法、特性、定价和编程语言方面有所不同。此外,解决方案列表总是在变化。很有可能你会选择一个供应商,突然另一个供应商会发布更适合你的业务需求的产品。选择的时候,先搞清楚你想用机器学习达到什么目的,然后选择能帮助你完成目标的服务。

大数据分析在控制方面有哪些优势和障碍?

原文:https://towardsdatascience.com/data-science-in-the-real-world-d53af9ba7230?source=collection_archive---------49-----------------------

现实世界中的数据科学

控制中的大数据分析

在我们关于大数据分析在控制中的第一篇博客中,我们分享了关于大数据分析在控制中的当前成熟度的结果,这在德国处于初级阶段。近年来,大数据分析在控制中的使用有所增加,但分析工具的潜力比目前已知的更大。将大数据分析纳入控制仍面临众多障碍和阻碍,这可能是一些受访者对未使用大数据分析且仍未拥有自动化流程的控制者评价很低的原因。在这篇博客中,我们将分享我们关于大数据分析在控制方面的潜在障碍和优势的发现。

最近的研究表明,虽然数字化影响了整个公司,但管制员面临着新的潜力和挑战。财务总监可以利用数据分析技术来回答有关潜在销售发展的问题。

特别是预测分析软件解决方案已经在组织中获得了关注。预测分析可以被视为商业智能的一部分,商业智能侧重于未来预测,以实现更好的规划和决策,而商业智能侧重于报告和分析历史数据。

在竞争激烈的行业中,准确的销售预测对于通过预测销售数据来管理风险至关重要。预测准确性会影响公司规划流程的效率、目标实现程度、总成本和客户需求满足程度。文献中广泛记载了导致错误销售预期的失败预测过程。

对使用数据的兴趣导致采用大数据分析来改善决策过程的趋势日益增长。大数据分析被定义为“高级分析技术在大数据集上运行的地方”。回归分析、机器学习和模拟等各种大数据分析技术有助于分析数据并提供新的见解。越来越多的组织将投资集中在大数据分析上,以获得有价值的见解,从而为管理会计部门带来竞争优势。

由于数据驱动市场的竞争日益激烈,企业正在采用最先进的信息技术来获得竞争优势。控制或管理会计部门的的角色直接受到大数据分析工具的影响,因为在使用信息支持管理方面,控制者是公司的核心单位。挑战之一是从这些无处不在的信息量中获得洞察力。然后,收到的见解将用于制定决策和调整组织流程以产生价值。

大数据分析对控制的影响

虽然“审计员”一词在德语国家很常见,但“管理会计师”在美国和英国等英语国家是一个公认的术语。在比较这两种职业时,审计员的任务通常在一个范围内考虑,不仅侧重于会计问题,也侧重于管理问题。在我们的博客中,术语“控制者”和“管理会计”的意思是一样的,在控制和管理会计文献中很常见。

近年来,技术发展对管理会计的影响在国际上得到广泛的规范分析。最近的研究表明,尽管数字化影响了整个公司,但管理会计面临着新的潜力和挑战。大数据分析的成功使用需要技术的实施,技术可以处理、存储和收集大量涉及数据多样性、可变性、速度和价值的数据。这些技术使这项任务能够从各种未开发的数据源中发现以前未知的模式、相关性和信息,从而通过及时和更明智的决策,在利润和效率、速度和服务、产品方面提高竞争力。

利用预测分析的组织将投入大量资源来收集、处理、准备并最终分析预测数据,因此期望获得更深入的见解和知识。对于任何类型的数据来说,除了大小之外,最重要的是高质量。

公司中的人员需要开发支持性的文化、适当的能力以及知识,而结构(即协作和组织部门结构)需要支持预测分析计划。特别是,IT 相关部门和业务部门的协作对预测分析起着重要作用,因为组织应该将技术和领域知识结合起来。

大数据分析的功能有助于高级分析从分散在不同数据库中的琐碎信息构建事件、场景或感兴趣的对象的图片。公司,特别是其控制单位,可以应用他们从大数据分析中获得的洞察力来增强他们的决策流程,以成功实现他们的业务目标。大数据分析的总体重点是提取基本见解,它基于数据挖掘和统计技术。以前基于直觉的高管行动现在可以通过数据驱动的数学模型来实现。

现在,管制员还可以利用大数据分析场景,并考虑季节性波动。预测的准确性会影响公司规划过程的效率、目标实现的程度、总成本和满足客户需求的水平。

随着新的预算实践的出现,大数据和信息在预算编制中可能是有用的。企业资源规划系统数据可以与外部和非财务数据相结合,预算编制可以有新的发展。

因此,公司的决策是基于来自分析结果的证据,而不仅仅是他们经理的直觉。还必须考虑商业文化方面和技术方面,例如合适的基础设施和用户友好的界面,以获得大数据分析的竞争优势。

大数据分析在控制方面的障碍和优势

在国际管制员协会(ICV)的“管制员大会”期间,我们通过调查收集数据。这次会议于 2019 年 5 月在慕尼黑举行,口号是“为你的未来做好准备——想法。学习。网络”。它被认为是欧洲最大的控制会议。

使用大数据分析当然有一些优势,但也涉及风险。必须考虑到,并非所有受访者都指出了一个或多个优势或风险。因此,这项研究假设受访者在每种情况下在我们的关系。我们刚刚在第一篇博客中看到,组织已经慢慢采用大数据分析。

为了确定采用大数据带来的潜在好处,我们的调查问道:“如果您的组织实施了某种形式的大数据分析,使用大数据分析会带来哪些好处?”最有可能的益处(见图 2 顶部)是调查受访者最常选择的,随着列表的向下进行,益处的可能性下降

实现高效快速的控制:最常见的输入是效率的提高(25%)。在做决策时,用精益(9%)和自动化流程(9%)来指导业务会是一个巨大的优势。及时获得信息并尽早做出决定至关重要。

获得透明度:就管理公司而言,预测是最重要的学科之一。16%的受访者提到预测是一项优势。此外,还提到了通过大数据分析获得洞察力(9%)。

为控制者赋权:在控制者向业务合作伙伴转变角色方面,对新能力的渴望(13%)似乎是在控制中实施大数据分析的一大优势。

图二。大数据分析在控制方面的优势

为了了解哪些障碍比其他障碍更有可能,该报告的调查问道:“在您的组织中,实施大数据分析的最大潜在障碍是什么?最有可能的障碍(见图 3 顶部)是调查受访者最常选择的障碍,随着列表向下,障碍的可能性下降。

高实施成本:毕竟,实施这种大数据分析工具的成本最有可能被提及(32%)。

技能不足:调查受访者指出缺乏专业知识(24%)是不使用大数据分析的原因。

错误指示和质量差:最常见的情况是,缺乏工具作为决策的依据,导致错误决策(17%)。也许还造成了糟糕的数据质量(17%)。

图三。大数据分析在控制方面的障碍

本文旨在通过提出一个理论上成立的解释模型,整合来自不同学科现存研究的经验验证的发现,来提供对观察到的发现背后的基本原理的增强理解。根据定量研究的结果,成本被确定为最大的挑战。行业内的公司似乎不准备为这样的实现支付高成本。因此,他们将无法看到使用大数据分析的可持续优势。

最常提到的好处是效率的提高。通过大数据分析应用程序获得的洞察力可以使公司经理实时获得需求预测,自动做出更换决策,并确定成本低效率的根本原因。这些措施可以减少交付周期、成本、延迟和流程中断,从而最终创造价值。此外,从供应商方面来看,可以通过分析供应商的数据来监控绩效,从而提高质量或价格竞争力。因此,本文假设这些优势可以节省成本,但是高昂的投资成本仍然是一个障碍。

网络图和风险资本

原文:https://towardsdatascience.com/data-science-in-venture-capital-8c13ec0c8458?source=collection_archive---------35-----------------------

如何使用网络图来监控风险投资基金之间的共同投资

介绍

风险投资家努力投资有潜力在未来引领市场的新兴公司。尽管投资于科技公司,但风投基金的日常活动过去过于手工化,基于感觉和印象,而不是数据。

当然,大多数时候,数据是不可用的,决策必须由主观方面来指导。在这种情况下,经验和基金的网络非常重要。有时,数据是可用的,创投资本家可以用它来指导他们的决策。

在本文中,我将展示如何根据共同投资来可视化风险投资基金之间的联系。为此,我们将借助网络图。

网络图—示例

为什么是网络图?

我们的网络图对希望了解竞争对手互动的风险投资基金、打算创建多元化投资组合的基金的基金,甚至是计划路演的初创公司都很有用。网络图也是进行详细聚类分析的好工具。

在这里,我们将关注算法,解释将在第二篇文章中详述。我们将使用 Python 和库 Networkx,它非常灵活,适合我们的需要。在我们的无向网络图中,每个节点代表一个风险投资基金,边厚表示两个基金之间共同投资的数量。

边缘颜色:

  • 黑色虚线:1 个共同投资
  • 蓝色:2 项共同投资
  • 绿色:3 项共同投资
  • 红色:4 项共同投资
  • 紫色:5 项共同投资
  • 7 项共同投资
  • 橙色 16:共同投资

你可能想知道为什么联合投资的数量从 7 跳到 16(最大值)。这是两家政府支持基金的特例。

下图显示了我们网络图的一部分。我们可以看到,一些基金有许多共同投资,根据共同投资标准,有三个主要类别。

网络图—输出

在继续之前,让我们了解我们的数据来源!

数据

数据只来自 Crunchbase。在现实生活中,我们从不同的来源收集数据,如风投基金网站、媒体和公开文件。这很重要,因为相关比例的投资并不在 Crunchbase 的平台上。

在这篇文章中,我只关注巴西的基金和创业公司,但它可以很容易地复制到任何其他国家。l 也没有考虑每个基金的投资或投资组合公司的数量,但它可以很好地反映在节点大小中。

数据清理

我们来编码吧!

现在我将展示如何根据 Crunchbase 的输出来组织数据。

首先,我们导入所有的库。

import matplotlib.pyplot as plt
import networkx as nx
import pandas as pd
import numpy as np
from itertools import combinations

我们需要读取两个数据集。df_investors 包括总部设在巴西且至少有一项投资的所有机构风险资本基金的名称。df_startups 包括资金总额超过 30 万美元的巴西初创公司的名称,以及它们的投资者的名称。

# Investors datasetdf_investors=pd.read_csv("Investors.csv")
print(len(df_investors))# Startups datasetdf_startups=pd.read_csv("companies.csv")
print(len(df_startups))

让我们看看数据集是什么样子的。

df_investors.head()

df_startups.head()

df_startups 数据集中的列“Investors”包括所有的投资者。我们将筛选出巴西投资者。

# each investors in one row 
# we will use .split() and .stack()df_startups = (pd.DataFrame(df_startups.Investors.str.split(',').tolist(), index=df_startups.Organization)
               .stack().reset_index([0,"Organization"]))df_startups.rename({0: 'Investors'}, axis=1, inplace=True)
df_startups["Investors"] = df_startups["Investors"].str.lstrip()# merging the datasets to get only the brazillian investorsdf=pd.merge(df_startups, df_investors, how="outer")df=df[df["Location"]=="Brazil"].dropna().drop(["Location"],axis=1).reset_index(drop=True)df.sample(5)

有更有效的方法来获得上面的结果,但是当我们有不同的数据源时,合并数据集很容易实现。

现在我们将排除只有一个投资者的创业公司,因为它们与我们的分析无关。

# we only want startups with more than one investor# df_aux with the number of investors per startup
df_aux=pd.DataFrame(df["Organization"].value_counts().reset_index())
df_aux.rename({"Organization": 'Number_of_investors',"index":"Organization"}, axis=1, inplace=True)# merging the datasets 
df=pd.merge(df, df_aux, how="outer")# filtering the dataset to get only the startups with more than one investors 
df=(df[df["Number_of_investors"]>=2].sort_values(by=['Organization','Investors'])).drop(["Number_of_investors"],axis=1)df.head()

现在我们有 207 条记录,代表了导致至少一个联合投资的投资数量。实际数字比这个大,但由于我们的数据来源和采用的标准,这就是我们的数字。

在继续之前,让我们创建一个投资者所有可能组合的列表。很快就有用了。

# unique investors name
comb=df["Investors"].sort_values().unique()# list with all the combinations of investors
cc = pd.Series(list((combinations(comb,2))))

印刷(梳)

cc.head()

现在,我们将创建一个字典,其中每个键代表一个风险投资基金,值将是该基金支持的初创公司。

# creating a dictionary 
# each key represents one investorsco_investments = { i : None for i in comb }for investors in df["Investors"]:
    co_investments[investors]=set()# each value represents the investments     
for startups,investors in zip(df["Organization"],df["Investors"]):
    co_investments[investors].add(startups

现在,我们将创建一个新的数据框架,它将负责存储风险投资基金之间的共同投资计数。“共同投资”列是投资者的 2 长度组合,“ #共同投资”显示每个组合的共同投资数量。每个创业公司有两个以上投资者是很常见的,我们正在考虑。

感谢Daniel Gribel,帮助我修正和完善这一步!

#let's create a new df, which will be in charge to store the countage of the co-investments# new data frame 
data=pd.DataFrame(data = {'Co-investment': cc.apply(lambda x: str(x)[1:-1].replace("'",""))})
data=pd.concat([data, data["Co-investment"].str.split(', ', expand=True)], axis=1).rename({0:'Fund1', 1:'Fund2'}, axis=1)#let's count the intersection among the investments
count=[]
for fund1,fund2 in zip(data["Fund1"],data["Fund2"]):
    count.append(len(co_investments[fund1].intersection(co_investments[fund2])))

data["# Co-investments"]=count# filtering to get only the pairs with co-investments 
data=data[data["# Co-investments"]!=0]data.sample(5)

上面的数据框将作为网络图的输入。

绘制图表

Networkx 使用 Dijkstra 算法在加权网络中寻找最短路径。让我们从创建一个无向图开始。

G = plt.figure(figsize=(30,15))
G = nx.Graph()

现在,我们将读取数据帧 df_network_1,以在图中添加加权边。我们还将设计我们的图表,根据共同投资的数量,在边缘添加不同的颜色和厚度。

# adding the edges with the information from df_network_1
    for i,j,w in zip(data["Fund1"],data["Fund2"],data["# Co-investments"]):
        G.add_edge(i,j,weight=w)# weights represents the number of co-investments 
    # the max values is 16 co-investments 
    s1 = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] == 1]
    s2 = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] == 2]
    s3 = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] == 3]
    s4 = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] == 4]
    s5 = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] == 5]
    s6 = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] == 7]
    s7 = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] == 16]pos = nx.spring_layout(G)  # positions for all nodes# nodes
    nx.draw_networkx_nodes(G, pos, node_size=50, node_color="gray")# edges
    nx.draw_networkx_edges(G, pos, edgelist=s2,
                           width=2, alpha=1, edge_color='blue')nx.draw_networkx_edges(G, pos, edgelist=s1,
                           width=1, alpha=1, edge_color='black',style="dashed")nx.draw_networkx_edges(G, pos, edgelist=s3,
                           width=3, alpha=1, edge_color='green')nx.draw_networkx_edges(G, pos, edgelist=s4,
                           width=4, alpha=1, edge_color='red')nx.draw_networkx_edges(G, pos, edgelist=s5,
                           width=5, alpha=1, edge_color='purple')

    nx.draw_networkx_edges(G, pos, edgelist=s6,
                           width=7, alpha=1, edge_color='pink')nx.draw_networkx_edges(G, pos, edgelist=s7,
                           width=16, alpha=1, edge_color='orange')plt.axis('on')

网络图:至少一个共同投资

上图是我们最终的结果!为了更好的可视化,我隐藏了这些名字,但是它们在详细的分析中很有用。我们可以注意到,一些基金有很强的联系,这意味着它们有许多共同投资。

我在图表中突出显示了一些组。第一组包括第一批巴西风险投资基金,他们从政府那里筹集资金来培育生态系统。第二组包括最活跃的基金,那些有大量投资、退出和独角兽的基金。第三组包括私人风投和政府支持的风投,它们通过投资农业综合企业初创公司而联系在一起。

下图是从flouring输出的,这是一个平台,它允许我们在不编码的情况下将电子表格转化为交互式在线图表。

网络图—蓬勃发展

最终意见

上面的图表代表了巴西风险投资基金之间的联系,为了获得结论性的结果,我们需要寻找除 Crunchbase 之外的其他数据来源(funds 的网站就是一个很好的来源!).跨时间的网络图也是一个很好的方式来形象化新资金是如何进入市场的。

监控共同投资的网络图只是风险投资如何在日常活动中使用数据的一个例子。自从我开始从事数据驱动型风险投资基金的工作以来,我发现了几种利用公开和专有数据丰富投资决策的方法。

如果你发现任何错误,请不要犹豫联系我!我最近开始在数据科学世界中冲浪,尽管我热爱它,但我是一个业余爱好者。

数据科学基础设施和 MLOps

原文:https://towardsdatascience.com/data-science-infrastructure-and-mlops-ba0da1c4d8b?source=collection_archive---------27-----------------------

苹果 | 谷歌 | SPOTIFY | 其他

卢克·马斯登在 TDS 播客

编者按:迈向数据科学播客的“攀登数据科学阶梯”系列由 Jeremie Harris、Edouard Harris 和 Russell Pollari 主持。他们一起经营一家名为sharpes minds的数据科学导师创业公司。可以听下面的播客:

你训练你的模型。您可以使用验证集来检查它的性能。你调整它的超参数,设计一些特征,然后重复。最后,您在测试集上试用它,它工作得非常好!

问题解决了?嗯,可能不会。

五年前,您作为数据科学家的工作可能已经结束了,但数据科学生命周期正在逐渐扩展,包括基本测试之后的步骤。这不应该令人惊讶:现在机器学习模型正被用于生死攸关和任务关键的应用程序,数据科学家和机器学习工程师面临越来越大的压力,以确保可靠地解决特征漂移等影响,确保数据科学实验是可复制的,以及确保数据基础设施是可靠的。

这一集的嘉宾是卢克·马斯登,他让这些问题成为了这部作品的焦点。卢克是数据基础设施初创公司 Dotscience 的创始人兼首席执行官,该公司正在为数据科学版本控制开发一个类似 git 的工具。Luke 在职业生涯中的大部分时间都致力于解决大规模基础设施问题,并对数据科学和 MLOps 的发展方向有很多看法。以下是我最大的收获:

  • 在传统的软件工程中,版本控制允许开发人员在不影响彼此的情况下为相同的代码库做出贡献。这是一个重要的工具,但它在数据科学中的对等物要难得多。这是因为除了静态代码,数据科学版本化还必须考虑不同的数据集版本和不同的超参数值,所有这些都需要指定,以确保结果的可重复性。
  • 在生产环境中,模型性能不会随着时间的推移而保持不变。当然,你的模型在第一天可能会工作得很好,但是随着世界的变化,或者用户需求的发展,一个曾经工作得很好的推荐器或者预测模型在将来可能会变得完全不可靠。这就是为什么持续的性能监控是生产过程中的一个关键因素。
  • 开源是一件值得参与的大事,尤其是在数据科学领域。Luke 的建议是从摘容易摘到的果子开始(即使是一个简单的改进文档的拉请求也会帮你弄脏你的手!).
  • 尽管工作描述在不断变化,但科学家今天需要的许多基本技能数据在未来很可能仍然至关重要。这些通常包括数据分析、统计和定量推理的能力。
  • 额外收获:如果你对学习一些 git 感兴趣,Luke 推荐 katacoda,一系列互动教程,你可以从你的浏览器中探索。

你可以在推特上关注卢克在推特上关注我在推特上关注我

我们正在寻找能与我们的观众分享有价值的东西的客人。如果你碰巧知道谁是合适的人选,请在这里告诉我们:publication@towardsdatascience.com

数据科学实习面试问题

原文:https://towardsdatascience.com/data-science-internship-interview-questions-c4e56740d3e4?source=collection_archive---------28-----------------------

图片来自 Pixabay

介绍

数据科学是一个有吸引力的领域。这很有利可图,你有机会从事有趣的项目,而且你总是能学到新东西。因此,进入数据科学领域竞争非常激烈。开始数据科学职业生涯的最佳方式之一是通过数据科学实习。

在这篇文章中,我们将看看要求的一般知识水平,典型面试流程的组成部分,以及一些面试问题示例。请注意,强调“一般”一词是因为具体情况因公司而异。

数据科学实习面试需要什么?

数据科学实习面试和全职数据科学家之间的最大区别是,通常不会期望你知道关于机器学习或深度学习概念的极其具体的细节。

然而,您将被期望拥有能够在其上构建的基本构建块——这包括 Python、R 或 SQL、统计和概率基础,以及基本的机器学习概念。

下面是一个基本知识和技能的列表,它将使你成为一个有吸引力的候选人:

Python 还是 R

来自 TechVidan 的 Python 数据科学库

你应该有脚本语言的编程经验,最好是 Python 或 r。如果你是 Python 程序员,你还应该对流行的库有基本的了解,如 Scikit-learnPandas。

你应该知道的:你应该知道如何编写基本的函数,对各种数据结构及其用途有基本的了解。您还应该了解 Scikit-learn 的基本(但也是必不可少的)功能,如 test_train_split 和 StandardScaler。对于 Pandas 来说,您应该能够轻松地操作数据帧,就像使用 SQL 编写查询一样。

例如,您可能需要构建一个简单的机器学习模型来预测产品的销售量。在这种情况下,如果您是 Python 用户,理解 Scikit-Learn 库将非常有用,因为它已经提供了许多预构建的函数,就像上面提到的那些。

如何准备:尝试 Kaggle 上的数据科学项目或面试查询上的带回家作业,以了解您可能需要完成的项目。

为了更好地了解 Scikit-Learn,使用它建立一个简单的机器学习模型或浏览一些其他人已经完成的数据科学项目将是一个好主意。

最后,尝试在面试查询中练习 Python 问题,以了解他们可能会问你什么。 了解更多 如何解决 Python 数据科学面试题

结构化查询语言

来自黑客和黑客的 SQL 数据库

你不需要在关系数据库方面有太多的经验,但至少你应该知道 SQL 是如何工作的。如果你在竞争一份数据科学家的实习工作,那么你很可能会为一家拥有海量数据的公司工作。你需要自己浏览这些数据来解决问题。

你应该知道:你应该能够编写基本的查询,你应该知道如何使用 SQL 查询操作数据。公司将 SQL 纳入他们的家庭案例研究中是非常常见的,因此您非常了解 SQL 是非常重要的。

例题:

编写一个 SQL 查询,从表中获取第二高的薪水。例如,给定下面的雇员表,查询应该返回第二高的薪水。如果没有第二高的薪水,那么查询应该返回

如何准备:模式为学习基础 SQL 提供了很棒的资源,在这里可以找到。此外,您可以在网上找到大量的 SQL 练习题和练习案例研究。

查看我们的SQL 面试问题终极指南

统计与概率

图片来自 Unsplash

你应该知道的:你应该对基本概念有一个坚实的理解,包括但不限于概率基础、概率分布、估计和假设检验。统计学的一个非常常见的应用是条件概率,例如,假设客户购买了产品 C,那么他们购买产品 B 的概率是多少?

如何准备:如果这些概念对你来说听起来很陌生,你可以利用一些免费的资源,比如可汗学院或佐治亚理工学院。

机器学习概念

来自福布斯的机器学习

虽然不指望你成为专家,但你应该很好地理解基本的机器学习模型和概念。如果工作描述说你将从事建筑模型的工作,这种情况尤其明显。

你应该知道的:这包括但不限于线性回归、支持向量机和聚类等概念。理想情况下,你应该对这些概念有一个基本的理解,并且明白什么时候使用各种机器学习方法是合适的。

例如,您可能需要对产品的价格点进行线性回归,以确定销售量。也就是说,作为实习生,你不需要生产或部署机器学习模型。

了解如何应对不同的 机器学习面试问题这里

领域知识

你应该拥有你所申请的领域的领域知识(如果你没有,你应该去学)。

例如,如果你申请营销部门的数据科学职位,了解不同的营销渠道(如社交媒体、联盟、电视)以及核心指标(如 LTV、CAC)将是一个好主意。

数据科学实习面试流程

图片来自 Unsplash

同样,面试过程最终取决于你申请的公司。但是一般来说,大多数公司(如果不是全部的话)在面试过程中都有一般的步骤,我会在下面解释。

作为一名实习生,你能做的最糟糕的事情就是不去研究这家公司做什么,以及它的文化使命和价值观。

初步筛选

通常,公司的招聘人员或招聘经理会进行初步筛选(通常是电话筛选)。这样做的目的是让受访者更好地了解角色,面试官也能更好地了解受访者。

你应该预料到他们会问你对这个职位和公司的兴趣,为什么你认为你很适合,以及与你过去经历相关的问题。在极少数情况下,你也可能会被问到一两个简单的技术问题。

面试官只是想确定你真的对这家公司感兴趣,你是一个很好的沟通者,并且你没有发出危险信号。

带回家的箱子

对于现在的许多数据科学实习来说,公司会要求你完成一项带回家的挑战。这意味着他们会给你一定的时间来完成他们给你的案例研究,这通常反映了你在实际工作中会遇到的问题。

这样做是为了看看你将如何处理一个问题(即你的思维过程),以及你是否具备解决这个问题所需的基本知识。案例的例子包括清理数据集建立机器学习模型以做出给定的预测,或者查询数据集分析数据,或者两者的结合。

现场面试

最后是现场面试,包括一到六轮面试。这些面试由行为和技术面试问题组成。在其中一轮比赛中,你可能还需要当场完成一个案件。

虽然他们试图确保你对成功担任该角色所需的基础知识有深刻的理解,但他们也会评估你的行为、动机,并最终评估你是否适合该团队。确保你有最好的表现,但不要忘记做你自己!

面试问题

下面是 10 个你应该知道的面试问题:

  • 什么是 p 值?
  • 什么是正规化,它试图解决什么问题?
  • 你怎么能把年龄和收入之间的关系转换成线性模型呢?
  • 如果你有两个重量相等的骰子,得到和为 4 的概率是多少?
  • 在争论和清理数据集时,您会采取哪些步骤?
  • 什么是交叉验证,为什么需要交叉验证?
  • 举例说明在确定机器学习模型的有效性时,准确度何时不是最佳指标。
  • 内部连接和外部连接有什么区别?

感谢阅读

原载于 2020 年 7 月 14 日 https://www.interviewquery.com

数据科学面试问题—初学者指南

原文:https://towardsdatascience.com/data-science-interview-questions-beginners-guide-7b3034373ccb?source=collection_archive---------33-----------------------

在数据科学面试中,你应该期待什么样的问题?

塞巴斯蒂安·赫尔曼在 Unsplash 上的照片

各位数据从业者好
众所周知,数据科学正在崛起
我相信你们很多人都知道,数据科学家被称为 21 世纪最性感的工作,不管这意味着什么。

数据科学家的谷歌趋势

这很酷,但数据科学行业仍然相对较新,在这个行业中,流行词汇被公然抛出,责任模糊,头衔凭空产生。

想想吧。

数据科学是关于数据如何工作的知识。让我们回到 20 世纪,在那个时代,企业没有我们今天拥有的奢侈技术。企业用笔和纸记录下他们的交易,以后他们会用这些来了解他们的业务。

  • 一周中的哪一天,企业产生的收入最多?
  • 在所有的产品中,哪一个卖得最好?
  • 客户通常会花多少钱购买该业务?

这些类型的问题可以通过一点数学计算和数据处理来轻松回答。那时,企业雇佣你所谓的“统计学家”来做这件事。因此,统计学家和数学家从那时起就继承了的报告角色,这就是为什么数学和统计学是今天成为报告数据分析师的一些核心先决条件。

然而,事情发生了变化。随着互联网的发展,商家开始在网上经营。人们把大部分时间花在互联网上,这就是为什么你现在正在阅读我的文章。

根据 digitalcommerce360 。仅电子商务市场一项就稳步上升。
随着每年约 20%的支出增长,
电子商务市场在 2019 年达到了超过 3.46 万亿美元。

现在,企业经营网站和应用程序,而不是实体店。现在可以在数据库中找到数据,而不是纸和笔。

这就是你进来的地方。

克里斯蒂娜@ wocintechchat.com 在 Unsplash 上的照片

数据科学家

你应该拥有足够的数学知识来处理数据,以及编程知识来知道如何以一种有效的方式存储、操作和建模数据。

时至今日,大多数雇主都雇佣数据科学家来管理、组织他们的数据,并从中提取真知灼见,用于描述性分析和预测性分析。
他们中的少数人

将工作分成数据工程、数据分析和数据科学,在这些领域中,角色得到了更好的定义。
因此,如果你想得到这样一个职位,你需要具备广泛的数据知识。

如果你仍然对数据科学家的角色感到困惑,
我会在这里深入讨论这个角色

** [## 为什么数据工程师与数据科学家同等重要

数据工程师重要吗?

towardsdatascience.com](/why-are-data-engineers-equally-as-important-as-data-scientists-545898929444)

为什么你应该关心

作为一个新兴行业,数据科学的角色在公司中的定义并不严格。
你问问周围,不同公司的数据科学家职责不同。

他们中的一些人管理整个数据仓库,包括 ETL/ELT 管道、仓库架构和表结构

其中一些更加面向分析,产生惊人的可视化效果并与企业主交流

他们中的一些人通过建模数据创造数据产品如图像和音频识别

他们中的一些人做到了以上所有的事情

因此,与通常会收到编码问题的传统软件工程师不同,没有人真正知道在数据科学面试中会遇到什么——这就是为什么你应该从曾经经历过的人那里收集经验。

我的背景

您可以在这里 查看我的作品 的完整作品集。

我叫梁家杰。
我是我国访问量最大的网站/应用之一的商业智能/数据团队的一员,该网站/应用为用户提供了一个买卖二手物品的市场。我在这里已经快两年了。

现在,我的角色包括一些核心职责。我已经完全构建并设计了 ELT 管道,它从相关来源提取数据到我们的数据仓库中,方便业务分析师使用。
我已经在这里写了

[## 数据工程 Apache 气流的基础——构建您的第一条管道

如果你从事技术工作,你很有可能需要管理数据。

towardsdatascience.com](/data-engineering-basics-of-apache-airflow-build-your-first-pipeline-eefecb7f1bb9)

我在改进我们的数据仓库功能方面做了很多工作,包括实现流管道、适当的元数据管理、表结构等等。我还大量参与了 机器学习项目 的技术角色,将新的数据产品引入我们的网站和 app。除此之外,我还执行相关的分析以协助产品经理做出商业决策,并维护所述分析的自动化以备将来使用。

在此之前,我在两家大型金融机构工作,其中一家是我国最大的银行。两个角色都在数据团队中,第一个是实习生,第二个是业务分析师。

在我所有的工作转换中,我接触到了大量与数据科学相关的面试,从首席执行官最近可能涉及或可能不涉及欺诈案件的大型航空公司,到销售床垫的中型公司。

当我开始的时候,我不知道在这些采访中会遇到什么,也不知道当时在网上能找到什么有用的资源。因此,我将分享我对数据科学面试问题的看法,揭示面试官经常问的问题和期望。

让我们深入研究一下。

你的工作

制造商在 UnsplashNESA 的照片

他们通常从平常开始。你的背景、你的激情和你的目标。一旦解决了这个问题,他们就会想要检查你的一些工作。

我总是会想到这样的问题:

  • 你做过什么样的项目?
  • 在你目前的职位上,你的职责是什么?
  • 到目前为止,你有哪些显著的成就

我知道,你认为这太明显了,不是所有的面试官都会问这些问题吗?

好吧,如果这是显而易见的,为什么大多数受访者缺乏一个平台/空间来展示他们的工作?
有备而来,如果你能主持一个网站,用适当的文档代码展示你所有的成就,那会给你加分不少。你会惊讶于如今这种情况是多么罕见。
如果你是应届毕业生,展示一些你的项目。这是引出话题的好方法。

如果你缺乏前者,你需要非常好地解释你的工作。
尽量避免先确立你的团队已经取得的成就。相反,更多地关注你做了什么,越具体越好。
确保提及您使用的技术,如 GCP 平台和神经网络。

技术问题

照片由 Clément HUnsplash 上拍摄

我参加过一些面试,他们一个技术问题都不问。另一方面,我参加过一些面试,为了获得面试机会,我不得不完成一个 4 小时的技术测试。各不相同。

如果你能像我之前提到的那样有效地展示你的作品,我就不会那么担心这部分了。但是,一个数据科学家在技术上受到考验是很正常的。因此,你可以期待这类问题。

结构化查询语言

数据科学家必须从某个地方获取数据。公司通常将所有数据存储在 SQL 数据仓库中,供像你这样的分析师查询。

如果你不能流利地使用 SQL,这是你面试失败的危险信号之一。

除了基础知识,以下是你应该知道的主要话题:

  • 连接
  • 总计
  • 过滤器
  • 联盟
  • 案例陈述

他们通常测试你的方式是给你一个数据集,并要求你给出一个结果作为回报。下面是我遇到的最棘手的一个例子:

Given customerID, date and revenue columns. 
For each date, how do I show the highest revenue row for each customer?

如果你能在脑子里算出答案,并立即读出来,而不是试图写出答案,这会给你加分。

Select * from (
Select
date,
customerID,
revenue,
sum(1) over (partition by date order by revenue desc rows unbounded preceding) as row_num
from dataset ) where row_num = 1

理论问题也会冒出来。像“左连接是如何工作的”这样的问题根本不应该促使你写出任何解决方案。相反,你的解释显示了你对 SQL 的理解程度。下面用我自己的话回答一下。

left join works by joining 2 tables with a key while keeping all the rows from the left table.

我也遇到过无法回答的问题,比如:

How does an outer join work?

我友好地回答说,我以前从未在查询中使用过外连接,
,因此无法回答这个问题。

有许多方法来解决一个 SQL 查询。我通常想到的解决方案涉及左连接和内连接,这就是为什么我缺乏外连接知识。
不要害怕承认你不知道某事,只要你能很好地解释你的理由。

请记住,数据科学仍然是一个不断发展的行业
甚至对于谷歌云平台,在撰写本文的几个月前他们刚刚发布了一个新的管道解决方案谷歌云融合
不可能有人知道最新的每一个技术编程语言。因此,只要你有选择,承认这一点是可以的。

数据操作

WebarooUnsplash 上拍摄的照片

在获得数据后,数据科学家通常不得不
操纵数据成他们想要的形式。使用什么方法并不重要,但是复杂的操作至少需要某种编程语言。

根据您的角色,对编程语言的要求会有所不同。如果你更多的是在业务方面工作,普通的 excel 可能会有用。如果你更多地从事工程方面的工作,公司可能会要求你掌握某些编程语言。

这是由于该公司正在使用的技术堆栈的限制。
这里有一个例子,一家公司正在使用谷歌云数据流将数据摄取到谷歌 BQ 中。默认情况下,数据流只允许 JavaPython 作为它们的编程语言。因此,如果你的角色涉及数据流,你将需要掌握其中一种语言。

数据科学家角色的要求

有些公司要求你掌握特定的编程语言来进行数据操作。如果你能用不同的语言展示你的能力,你就能很快学会第二种语言,一定要告诉他们这一点。

以下是我被问到的关于处理数据的主要话题:

  • 自然语言处理
  • 熊猫
  • Numpy
  • 矩阵
  • 列表和词典
  • For 循环+ If/else
  • 正则表达式

这些主题可能会出现理论问题。
类似这样的事情:

  • 什么是矩阵的转置?
  • 普通链表和 Numpy 数组有什么区别?
  • 什么是 tokenize?

有些公司会针对这一部分进行代码测试
我通常会得到一个包含特定主题数据的 CSV 文件。
然后他们会要求具体的调查结果作为回报。
这里有一个例子。

样本数据集

Given the CSV file regarding searched queries, what are the top 5 keyword phrases that has the highest click-through-rate on weekends? Document your steps and demonstrate the method you have used

我不会详细讨论这个解决方案,因为它太长了。
涉及的步骤有:

  1. 使用自然语言处理来识别关键词
  2. 写一个函数来识别周末
  3. 为 CTR 创建新列
  4. 可视化结果

这个问题需要很强的熊猫和自然语言的知识。
这里有一篇关于 熊猫 的文章,可能会帮助你掌握基础知识

[## 用于数据科学的 Python 熊猫指南

10 分钟内完成数据探索指南

towardsdatascience.com](/python-for-data-science-basics-of-pandas-5f8d9680617e)

机器学习

安迪·凯利在 Unsplash 上拍摄的照片

啊是的。大家最喜欢的话题。

忘掉人工智能吧——在大数据这个勇敢的新世界里,我们应该提防的是人工白痴。——汤姆·查特菲尔德

在处理了描述性的(过去的)数据之后,我们现在有能力使用机器学习来预测未来的价值。代替 if-else 语句,我们让机器通过提供数据来发现数据集中的规则。

机器学习带来了许多可能性。然而,它仍然是一门新的学科,只有很少一部分数据从业者能做好。
因此,当你知道机器学习与你的角色有关时,用机器学习的核心知识来武装自己就显得尤为重要。

理论

我多次被问到机器学习的问题,
通常是从我进行过什么样的机器学习项目开始,如果有的话。
我的回答永远是是的,我一定会给他们看我的作品。对话就是从这个时候开始的。

例如,我给他们看了我做的一个分类项目这里

[## 用于数据科学的 Python 分类机器学习指南

如何正确执行分类机器学习并对其进行评估

towardsdatascience.com](/python-for-data-science-a-guide-to-classification-machine-learning-9ff51d237842)

他们通常以此为基础开始提问。他们通常会问一些理论性的问题,比如:

  • 分类回归有什么区别?
  • 回归算法有哪几种?
  • 你为什么选择使用这种特殊的算法?
  • 如何处理不平衡数据

如果你了解机器学习的核心,你应该能够流利地回答这些问题。这里有几个可供阅读的主题:

  • 机器学习算法
  • 数据预处理
  • 取样操作
  • 特征选择
  • 培训模型
  • 评估模型

之后,他们会决定你是否能胜任这个角色。一些公司也为机器学习分发代码测试。我已经得到了一些,让我给你看一个例子。

**Prediction Model development****Problem Statement:** Based on customer search behaviour you have to predict whether a customer will buy additional products/services.

机器学习数据集

我不会详细介绍这个解决方案,因为它是一个全面的机器学习过程。
涉及的步骤有:

  1. 处理数值分类数据
  2. 培训模型
  3. 评估模型&拣选算法
  4. 视觉化的发现

我还被详细问到如何评估我的模型。
仅仅回答准确性是不够的,你必须明白它们是评估你的模型的多种不同的指标

  • 精确
  • 回忆
  • f1-分数

产品

Kon KarampelasUnsplash 上拍摄的照片

作为一名数据科学家,您也应该对产品有一些基本的了解。在实现您的模型/数据产品之后,您应该知道如何跟踪该产品的成功

你的沟通技能在这里发挥了巨大的作用,因为你通常需要向非技术人员传达你的发现。并不总是非黑即白。通常是来来回回的讨论来找出你对事物产品方面的思考过程。

这里有一个产品问题的例子。

A **classifieds** business company had just revamped their site from legacy stack into the new react stack. Hence, the website looks different aesthetically. There are some function changes as well, for example, a page usually displays 20 listings, but now it displays 10 per page.**Explain how you would prove that the revamp of the site is a success.****Explain how functions like the listing change affects our metrics.**

同样,答案是主观的。

I would start off by asking what are the success metrics the business was tracking before the revamp and continue tracking those. The usual metrics would be daily/weekly/monthly active users and time spent on site. We should also look at page load times, as new revamps may cause performance issues.For the function changes, we should look at them separately. For the listing change, I assume the listings are bigger due to the decrease in amount. Hence, it may cause an increase of CTR into the listings. That’s the first thing I would look at.Having lesser listings will also mean that customers spend less time on a page and more time navigating through pages. Hence, I will also look at the time spent per page and pagination clicks.

他们可能会用一些假设/论点反驳你。这是你的思维过程和经历(如果有的话)闪耀的地方。
产品知识需要经验。通常情况下,如果你是这个行业的新人,你不会被问及这个问题。

摘要

卡洛斯·阿瑟·M·R 在 Unsplash 上拍摄的照片

谢谢你走了这么远。这意味着你真的对在数据行业谋得一个职位充满热情。我很高兴。

请理解我不可能在这篇文章中包括所有的内容。相反,这些是我的个人经历,也是我被问得最多的话题。我知道有些话题没有被提及。

  • 重数学相关
  • 深度学习(严重依赖经验)
  • 深度可视化

这样的例子不胜枚举。请记住,数据是不断发展的,每天都会有新的技术需要学习。这是工作描述的一部分。这就是它的有趣之处。

如果你已经掌握了我在这篇文章中提到的所有主题。你从根本上为在数据行业工作做好了准备。自信一点,打扮一下,展示一下。在朋友面前练习,你就可以开始了。记住,不是他们寻找合适的人选,而是你寻找合适的公司。

最后,拒绝是完全正常的。
听我的。在我的团队中,我们在某个时间点突然需要更多的人数,但是没有任何候选人。如果有人提交申请,他们会马上被录用。另一方面,我看到更多合格的候选人申请我的团队,但我们没有能力接纳他们。

求职就是在正确的时间出现在正确的地方。不要把拒绝放在心上,保持一致。

在你走之前

我们的数据之旅还没有结束。在这个行业缺乏人才的情况下,用适当的数据和机器学习知识来教育自己将使你在获得数据角色方面具有优势。请继续关注,在我的下一篇文章中,我将讨论如何为自己创建数据科学投资组合,以及更多数据行业的故事、指南和经验。与此同时,请随意查看我的其他文章,以暂时填补您对数据的渴望。

像往常一样,我引用一句话作为结束。

消费者数据将是未来两到三年的最大区别。谁能打开大量数据并战略性地使用它们,谁就能赢。”——安吉拉·阿伦茨

订阅我的时事通讯,保持联系。

感谢 的阅读!如果你想与我取得联系,请随时通过 nickmydata@gmail.com 或我的 LinkedIn 个人资料 联系我。你也可以在我的Github中查看之前写的代码。**

数据科学面试复习者

原文:https://towardsdatascience.com/data-science-interview-refresher-34b254c497a?source=collection_archive---------29-----------------------

在大型面试前刷新

我创建了个人学习指南,以确保在华盛顿特区的一家领先咨询公司获得数据科学职位

照片由 Ridwan MeahUnsplash 上拍摄

介绍

我从多个来源精心制作了这个学习指南,以使它尽可能全面。这个指南帮助我为招聘公司的面试做好了技术和行为方面的准备。请注意,本指南并不详尽,也不是初学者指南,而是作为常见数据科学术语和算法的 复习工具 ,并帮助您准备一些行为问题的答案。对于有大量参考资料和资源的更详细的解释,我强烈推荐这个指南

我使用的资料来源 是其他媒体文章(通篇超链接)、在线学术期刊以及我本科应用机器学习课程的个人笔记。

指南概述

  1. 一般问题和答案
  2. 常用术语
  3. 机器学习算法和概念
  4. 附加个人准备
  5. 面试后要问的问题

第 1 部分:一般问题和答案

在指南的第一部分,我准备了一些面试官可能会问的与数据科学作为一种职业相关的常见问题以及常见的行为问题。

什么是数据科学?可能答案:数据科学是将数据转化为可操作的见解。这些见解有助于公司赚更多的钱,优化工作流程以提高效率,并做出计算数据驱动的业务决策。

怎样才能成为一名优秀的数据科学家? 可能 答案:能够与一个非技术人员交流技术问题和解决方案,是成为一名优秀数据科学家的关键。将不同的数据点转化为可操作的见解的行为可能会很复杂;传达这些结果对于对业务产生有意义的影响至关重要。

其他需要思考的常见行为问题:

  • 说说你自己吧。
  • 你的优点和缺点是什么?
  • 你认为自己在 5-10 年后会怎样?
  • 告诉我你不得不向一个非技术人员解释一个技术问题的时候。
  • 为什么公司【x】

第 2 节:常用术语

在下一部分中,我将定义一些常见的数据科学术语,面试官可能会要求您定义这些术语来检查您的基础知识。

  • 过拟合与欠拟合: 使用过拟合模型,您可以对训练数据进行非常准确的预测,但对测试和真实世界数据的预测却不太准确。当模型过于复杂并捕捉到数据的噪声时,就会发生过度拟合。欠拟合模型过于简单;它不会找到数据的潜在模式。训练和测试结果中都存在不准确的预测。覆盖所有组合的数据不足或不恰当的随机化可能会导致模型拟合不足。
  • 归一化与标准化与正则化: 归一化将参数值的范围重新缩放到设定的范围(例如,[0,1]或[-1,1])。标准化将方差“标准化”。标准化将单位方差转换为平均值为 0、标准差为 1 的标准正态。异常值表示为平均值以上的 3 个标准差。正则化是在你的模型中建立一个惩罚来防止过度拟合的想法。例如,我们不想要一个过度拟合的模型,所以我们添加了一个惩罚模型复杂性的参数。即 L1-诺姆(拉索)和 L2-诺姆(山脊)。 点击此处了解更多信息
  • 偏差与方差: 偏差会导致过度简化/欠拟合。就是预测值和实际值的差距。方差是你的预测相互之间的分散程度。低方差会导致过度拟合,因为模型遵循异常值或数据中的噪声。总的来说,随着模型复杂性的增加,方差也增加(过度拟合增加)。随着模型复杂度的降低,偏差也随之降低(欠拟合增加)。目标是找到这种权衡之间的平衡。
  • 监督与非监督学习: 监督学习使用标记数据训练模型。我们知道因变量和我们试图预测的值,例如随机森林、SVM 和线性回归。无监督学习不需要你训练一个模型。您不知道因变量,例如 K-均值聚类。
  • 分类 vs 回归: 分类预测一个离散的类标签输出,例如:高、中、低→多分类或正/负→二元分类。回归预测连续的数量输出,例如温度。
  • 熵: 随机性/方差的度量。数值越高,越难下结论。熵为 0 的结果意味着完美的分类。一种贪婪算法试图通过减少熵来快速均匀化数据。
  • GIT(版本控制): Commit —将更改添加到本地存储库,Push —将提交转移到远程存储库,Pull Request —用指定分支上的内容更新主/主要分支
  • I 型与 II 型错误:I 型→假阳性(数值分类为阳性,实际为阴性)。类型 II →假阴性(数值被分类为阴性,但实际上是阳性)
  • 接收机工作特性(ROC): 分类问题的性能度量。ROC 曲线是不同阈值下真阳性率和假阳性率之间对比的图形表示。曲线下面积(AUC) 值为 0.5 表示随机。小于 0.5 的值意味着模型预测的是相反/倒数。 点击此处了解更多信息

FP =假阳性, FN =假阴性, P =全部阳性, N =全部阴性

  • 错误率= (FP+FN)/(P+N)
  • 准确度= (TP+TN)/(P+N)
  • 精度= TP/(TP+FP)
  • 灵敏度/召回率(真阳性率)= TP/P
  • 特异性(真阴性率)= TN/N

第三节:机器学习算法

本节从较高的层面讨论常见的 ML 算法。我已经列出了我认为面试官希望你知道的几点。

决策树

  • 主要用于解决分类问题,但也可用于回归问题。
  • 这些树从一个根节点开始,接着是产生分支的分裂。分支然后链接到形成决策点的叶子。
  • 当叶子不再产生新的分支并导致终端节点时,进行最终分类。
  • 目的是让决策树尽可能小。选择一个起始变量,以最佳方式将数据分成同类组(最小化分支中的熵)。 点击此处查看示例

增压

  • 将弱模型合并成一个强模型。最常见的情况是,单个决策树聚集在一起。
  • 为每棵树使用随机选择的输入构建多个决策树,这些输入已经用替换进行了采样。注意:该算法并不总是必须这样做,例如,正常的梯度增强使用所有数据在增强过程的每一步建立梯度。
  • 初始决策树(或其他基础算法)是数据的不良预测器,但它使用权重进行迭代。
  • 基于先前树中的误分类情况,将较高的权重添加到树中;正确的分类权重较小。这种类型的提升被称为 AdaBoost ,因为它沿着细化的样本权重迭代。 点击此处了解更多信息
  • 由于重复以前的错误,升压容易导致过拟合。对于包含异常值的更复杂的数据,随机森林更好(见下文)。

梯度增强

  • 梯度推进不是为每棵树(或其他基本算法)选择变量的随机组合,而是选择变量来提高每棵新树的准确性。
  • 算法通过在每次迭代中计算梯度来最小化定义的损失函数。
  • 树是按顺序生长的(非平行),因为每棵树都是从前一棵树派生而来的。
  • 重复这个过程,直到误差很小。最终结果是所有预测的加权平均值。

装袋

  • 自举聚合 的简称
  • 使用随机选择的输入为每棵树构建多个决策树(或其他基本算法),这些输入已经用替换进行了采样。通过平均(回归)或投票(分类)来组合结果。
  • 自举分量来自对不同的树输入进行采样时固有的变化和随机性。
  • 这种方法对于处理异常值和降低单个决策树发现的方差是有效的。

随机森林

  • 与 bagging 相关,因为两种算法都利用了自举采样和随机化。
  • 通过限制考虑的变量数量,人为地限制变量的选择。他们不能在每个分区考虑 n 个变量。
  • 这意味着由于随机性,最终的树是可变的。
  • 随机森林是一种弱监督学习技术,其中所有的树被一起并行训练(非顺序)。
  • 建议从 100 到 150 棵决策树开始。

神经网络:

  • 当一项任务对人来说很容易,但对计算机来说很难时使用。当您拥有包含复杂模式的大型数据集时也很有用。
  • 第一层是输入数据(值、文本、像素等)。)并分为节点。每个节点通过网络的边缘向下一层发送信息。
  • 网络中的每条边都有一个数字权重,可以根据经验进行更改。如果连接边的总和满足一个阈值,称为 激活函数 ,这将激活下一层的神经元。
  • 如果它不满足阈值,则功能失败,这导致全部或什么都没有的安排。
  • 边上的权重是唯一的,这阻止了相同的结果。
  • 神经网络可以被监督。在这里,算法将结果与实际输出进行比较,并计算成本。降低成本,直到预测与实际产出相匹配。这是通过逐步调整网络权重直到获得最低成本来实现的。
  • 反向传播:从右边的输出层反向滚动到左边的输入层。
  • 卷积(CNN): 为图像制作。接受固定大小的输入并返回固定大小的输出。非常适合图像和视频处理。
  • 轮回(RNN): 为序列制作。处理任意长度的输入/输出数据。可以使用内存来处理任意序列的输入。他们使用时间序列信息(即,我最后说的话会影响我接下来说的话)。非常适合文本和语音分析。

K-最近邻聚类

  • 对新数据点进行分类的监督算法。
  • 类似投票制或者人气大赛。
  • 选择邻居的数量( k )至关重要。过低的 k 会增加偏差,过高的 k 会使算法计算量大增。将 k 设置为奇数,这样在投票过程中就不会出现平局。
  • 不适合大型数据集。
  • 例如,我们正在尝试将新点分类为红色或蓝色:如果 k =3,并且新点周围的 3 个点中有 2 个是蓝色的,那么它将变成蓝色。继续这样做,并添加新的点,直到它们都被分类(分组)。

K 均值聚类

  • 用于识别新数据点组的无监督算法。
  • 选择一个 形心。 然后使用欧几里德距离将点分配到最近的质心。质心被更新以反映聚类的平均值。一旦没有数据点在聚类之间切换,算法就完成了。
  • 用一个 小块图 (肘法)确定 k 。它比较每个总分类计数的误差平方和(SSE)。随着发现更多的簇,SSE 下降。也可以设置 k = sqrt(n/2)。

支持向量机(SVM)

  • 用于回归和分类的监督算法。如果你的训练数据集中有 n 个特征, SVM 会尝试在 n 维空间中绘制这些特征,每个特征的值就是一个特定坐标的值。
  • SVM 使用 超平面 根据提供的核函数分离出不同的类。超平面是帮助分类数据点的决策边界。
  • 超平面的维数取决于特征的数量。如果输入特征的数量是 2,那么超平面只是一条线。如果输入特征的数量是 3,则超平面变成二维平面。当特征的数量超过 3 时,变得难以想象。
  • 支持向量 是距离超平面较近的影响超平面位置和方向的数据点。使用这些支持向量,我们最大化分类器的余量。
  • 在 SVM 算法中,我们希望最大化数据点和超平面之间的间隔。
  • 不同的内核:线性(基地),sigmoid,径向,多项式和更多。非线性核将图抽象成更高维度,其中数据可以用平面或其他东西而不是线来分隔。

主成分分析

  • 当您希望减少变量数量时使用;确保变量相互独立。
  • 用于特征提取的技术 —它以特定的方式组合输入变量,然后丢弃“最不重要”的变量,同时仍然保留所有变量中最有价值的部分。
  • PCA 后的每个“新”变量都是彼此独立的,这是因为线性模型的假设。

第 4 部分:额外的个人准备

除了了解上面的术语和算法,我还建议研究和准备以下内容:

  • #1 最重要的——过去的项目:这绝对是你需要完成的最重要的个人准备。无论你是在争取大学实习还是在申请你的第五份新工作,你都需要能够清晰地说出你过去参与的项目。如今,经验比学位更受重视,所以熟练地交流你所做的工作不仅会展示你的沟通技巧,还会真实地展示你对工作的理解和你的能力。如果你没有可以参考或交流的项目,可以考虑在空闲时间开始一个新的项目,提供令人信服的数据集和有意义的分析。
  • 了解你的简历:确保对你的简历了如指掌。视频面试时,我面前放着一份拷贝,以备不时之需。了解你的技能和成就很重要,并且能够回答任何关于它们的问题,或者提供展示它们的例子。一定不要在简历上夸大任何东西;风险远高于回报。
  • 公司信息:了解公司的规模,他们的总部在哪里,关于他们的其他办公室,他们的核心价值观和使命是什么,他们做什么类型的工作,他们的客户是谁。你可以在公司的网站上找到很多这方面的信息。我鼓励你浏览他们的网站,寻找任何你在面试中可以参考的有用信息——这将显示出你的积极主动和充分准备。向面试官证明你很适合这家公司是最重要的,所以确保你知道他们的使命并理解公司文化。
  • 案例研究(如果适用):我申请的那家公司在其网站上有数据科学案例研究,这些研究是由他们的员工策划的。这很有用,原因有几个。我能够 1)了解该公司的更多工作,2)在面试中简要引用这些案例研究以显示主动性,3)将这些案例研究中使用的关键词和语言与我的面试对话相匹配。

第 5 部分:要问的问题

我认为这些问题显示了你的兴趣,并且在面试结束时问这些问题很重要。总是问问题。

  • 这个角色的日常工作是怎样的?
  • 团队有多少人,他们是什么角色?例如,数据科学家、全栈开发人员、数据工程师、业务分析师等。
  • 你喜欢在【x】、公司工作吗?你喜欢什么?
  • [特定咨询]客户在哪里,我需要多久去一次他们的办公室?我多久会和他们直接交流一次?
  • 面试过程的下一步是什么?
  • 我什么时候能得到你的消息?

对新的数据科学职位的面试可能会很复杂。你不仅需要了解这份工作的技术方面,还需要准备好展示你的能力和对公司的了解,回答行为问题,展示能力和主动性等等——所有这些都要在一个小时左右的时间内完成。不要忘了给你的面试官发一封感谢信,如果有机会的话,就和他谈一谈你的薪水/福利。我希望这份复习资料能在你准备下一次面试时对你有所帮助。

数据科学访谈:机器学习

原文:https://towardsdatascience.com/data-science-interviews-machine-learning-d9080e7185fb?source=collection_archive---------38-----------------------

机器学习技术指南和 20 个挑战性问题

马库斯·温克勒在 Unsplash 上拍摄的图片

概观

这篇文章将在数据科学访谈中提供关于机器学习理论的技术指导。它并不全面,但旨在突出每个主题中的关键技术点。讨论的问题来自这个数据科学采访时事通讯,其中有来自顶级科技公司的问题,并将涉及到即将出版的

数学先决条件

随机变量

随机变量是概率和统计中的一个核心话题,面试官通常希望了解原理和操纵它们的基本能力。

对于任何给定的随机变量 X,它具有以下性质(下面我们假设 X 是连续的,但是类似的情况适用于离散的随机变量)。期望值(平均值)由下式给出:

方差由下式给出:

对于任何给定的随机变量 X 和 Y,协方差(关系的线性度量)由下式定义:

协方差的归一化是 X 和 Y 之间的相关性:

概率分布

概率分布有很多种,面试官通常不会测试你是否记住了每种分布的具体属性(尽管了解基本属性很有帮助),但更多的是为了让你能够将它们恰当地应用到具体的情况中。正因为如此,数据科学面试中最常讨论的一个就是正态分布,它有很多现实生活中的应用。对于单个变量,均值和方差参数的概率密度由下式给出:

对于拟合参数,有两种通用方法。在最大似然估计(MLE)中,目标是在给定似然函数的情况下估计最可能的参数:

由于 X 的值被假定为 i.i.d .,则似然函数变为:

取对数是很方便的(因为 log 是一个单调递增的函数,最大化对数似然等于最大化似然):

拟合参数的另一种方式是通过最大后验估计(MAP ),其假设先验分布。

其中以前的相似对数似然适用。

线性代数

一般来说,除非有具体的机器学习重点,否则面试官不会指望你深入钻研线性代数。然而,复习基础知识仍然是有帮助的,因为它有助于理解各种算法和理论基础。线性代数中有许多子主题,但有一个子主题值得简单讨论,那就是特征值和特征向量。在力学上,对于某些方阵 A,我们有一个向量 x 是 A 的一个特征向量,如果:

由于矩阵是线性变换,特征向量是这样的情况,即矩阵在该向量上的结果变换产生与之前相同的方向,尽管有一些比例因子(特征值)。特征值和特征向量有很多现实生活中的使用案例:例如,识别大型数据集的方向(在 PCA 中讨论),或者对于动力系统(系统如何振荡以及它将多快稳定)。

将方阵分解成其特征向量称为特征分解。注意,虽然不是所有矩阵都是正方形的,但是通过奇异值分解(SVD ),每个矩阵都有一个分解:

尽管数学细节超出了本文的讨论范围,但在技术面试之前,特征分解和奇异值分解都值得仔细研究一下。

偏差-方差权衡

由于过度拟合和模型选择的相关性,这是采访中偶尔会问到的话题。对于任何模型,我们通常都试图估计一个真实的基础:

其中 w 通常是零均值和高斯随机变量的噪声。如前所述,MLE 和 MAP 是推断参数的合理方法。为了评估模型的拟合程度,我们可以将 y 的误差分解如下:

  1. 偏差(这些值与真实的潜在 f(x)值的接近程度)
  2. 方差(基于训练输入的预测变化量)
  3. 不可减少的误差(由于固有的噪声观测过程

在偏差和方差之间有一个权衡,这是一个思考不同模型如何运作的有用框架。总体目标是控制过度拟合(而不是从样本中很好地概括)以产生稳定和准确的模型。

线性回归

这种方法是最常教授的方法之一,有许多现实生活中的应用,从预测房价到研究医学试验的功效。面试官问这个问题通常是为了评估你对基本公式的理解,偶尔也会评估一些理论与现实生活应用的相关性。

在线性回归中,目标是估计以下形式的 y = f(x ):

其中 X 是数据点矩阵,β是权重向量。在最小二乘法中,线性回归使残差平方和(RSS)最小,其计算公式如下:

在回归分析中,可以通过多元高斯函数使用 MLE 来估计β值:

这导致与最小化 RSS 相同的结果。对于映射上下文,可能存在β的先验,这导致岭回归,该岭回归惩罚权重以防止过度拟合。在岭回归中,目标函数变成最小化:

降维

主成分分析

这个话题在采访中不太常见,但在讨论数据预处理或特征工程时经常被提及。将数据分解成更小的变量集对于汇总和可视化数据非常有用。这个整体过程被称为降维。一种常见的降维方法是主成分分析(PCA),它将数据重构到一个较低的维度设置中。它寻找向量 x(假设它是 p 维的)的少量线性组合来解释 x 内的方差。更具体地说,我们希望找到权重的向量 w,以便我们可以定义以下线性组合:

受以下条件限制:

因此,我们有下面的过程描述,其中首先我们找到具有最大方差的第一个分量,然后找到与第一个分量不相关的第二个分量,并迭代地继续这个过程。这个想法是以 k 维结束

使用一些代数,最终结果是 X 的协方差矩阵的特征分解,由此第一主分量是对应于最大特征值的特征向量,等等。

分类

总体框架

由于现实生活中的大量应用,分类是面试中经常被问到的问题。科技公司喜欢询问如何将客户和用户分成不同的类别。

分类的目标是将给定的数据点分配到 K 个类中的一个,而不是一个连续值(如在回归中),有两种类型的模型。第一种是生成型,它对 X 和 y 之间的联合概率分布进行建模。也就是说,对于输入 X,我们希望使用以下类标签对任意数据点 X 进行分类:

X 和 Y 之间的联合分布由下式给出:

对于每个给定的 k 类,我们有:

最大化后验概率的结果意味着类之间将存在决策边界,其中所得后验概率相等。

第二种是鉴别性的,其通过选择最大化后验概率分布的类来直接学习决策边界:

所以这两种方法最终都选择了一个最大化后验概率的预测类;区别只是在方法上。

逻辑回归

一种流行的分类算法是逻辑回归,在面试中经常与线性回归一起被问到,作为一种评估分类算法基础知识的方法。在逻辑回归中,我们采用线性输出,并使用 sigmoid 函数将其转换为 0 到 1 之间的概率:

在矩阵形式中,决策如下所示,其中如果输出至少为 0.5,则 1 是目标类:

逻辑回归的损失函数是对数损失:

注意,后验模型是直接建模的,因此逻辑回归是一个判别模型。

线性判别分析

线性判别分析(LDA)在面试中不是一个常见的话题,但却是一个有趣的话题,因为它是一个生成模型,而不是判别模型(如逻辑回归)。它假设给定某个类 k,来自该类的任何数据的分布遵循多元高斯分布:

回想贝叶斯规则,最大化标签上的联合概率等同于最大化后验概率,因此 LDA 的目标是最大化:

特别是,我们有:

其中每个 k 的 f(x)是类密度函数。LDA 假设密度是多元高斯的,并且还假设协方差矩阵在所有类中是公共的。产生的判定边界是线性的(因此得名),因为也有二次判别分析,其中边界是二次的。

决策树

决策树和随机森林在面试中经常被问到,因为它们是灵活的,在实践中通常表现良好的模型。特别是,它有助于对两者如何被训练和使用,以及特征分裂如何发生(熵和信息增益)有一个基本的理解。

培养

决策树是一种可以用树的方式表示的模型,其中在每次分裂时,都有基于特征的分离,从而产生各种叶节点,由此产生结果(分类或回归)。在本次讨论中,我们将重点讨论分类设置。它们从根开始以贪婪和递归的方式被训练,其中目标是选择增加特定数据点属于哪个类的最大确定性的分裂。

随机变量 Y 的熵量化了其值的不确定性,对于具有 k 个状态的离散变量 Y,由下式给出:

对于简单的伯努利随机变量,当 p = 0.5 时该量最高,当 p = 0 或 p = 1 时该量最低,这与定义直观一致,因为如果 p = 0 或 1,则结果没有不确定性。一般来说,如果一个随机变量具有高熵,那么它的分布比偏斜分布更接近均匀分布。

考虑任意拆分。我们有 H(Y)从开始的训练标签,并说我们有一些特征 X,我们想分裂。我们可以用信息增益来表征不确定性的降低,信息增益由下式给出:

该数量越大,通过在 x 上进行分割,Y 中的不确定性减少得越多。因此,一般过程是评估考虑的所有特征,并选择最大化该信息增益的特征。然后,递归地继续两个结果分支的过程。

随机森林

通常,单个决策树可能容易过度拟合,因此在实践中,随机森林通常会产生更好的样本外预测。随机森林是一种集合方法,它利用许多决策树并对它们的决策进行平均。它通过两种方法来减少过拟合和树之间的相关性:1) bagging(自举聚合),其中一些 m < n(其中 n 是总数)的数据点通过替换被任意采样并用作训练集,2)在每次分裂时考虑特征的随机子集(以防止总是在任何特定特征上分裂)。

使聚集

聚类是一个受欢迎的采访主题,因为有许多现实生活中的应用。这通常是为了数据可视化,并可用于识别异常值,这在欺诈检测等情况下很有用。这也有助于对在这种情况下如何学习参数有一个基本的了解,与先前的 MLE/MAP 方法相比。

概观

聚类的目标是将数据集划分为仅查看输入要素的各种聚类。这是无监督学习的一个例子。理想情况下,聚类有两个属性:

  1. 给定聚类内的点彼此相似(高聚类内相似性)
  2. 不同聚类中的点彼此不相似(低聚类间相似性)。

k 均值聚类

k-均值聚类将数据划分为 k 个聚类,并通过任意选择 k 个聚类中每个聚类的质心开始。迭代地,它通过将点分配到最近的聚类来更新分区,更新质心,并重复直到收敛。

数学上,K-means 通过最小化以下损失函数(给定点和质心值)来解决以下问题:

迭代过程继续,直到聚类分配更新不再促进目标函数。

高斯混合模型

高斯混合模型(GMM)是一种模型,其中对于任何给定的数据点 x,我们假设它来自 k 个聚类之一,每个聚类具有特定的高斯分布。

也就是说,在我们拥有的 K 类中:

其中,π系数是聚类的混合系数,经过归一化处理,总和为 1。设θ表示 K 个类别中每个类别的未知均值和方差参数,以及 K 个混合系数。那么可能性由下式给出:

因此对数似然是:

可以使用期望最大化(EM)来迭代计算参数,这将在下面讨论。

期望最大化

期望最大化(EM)是一种估计潜在变量参数的方法,例如上面的 K-means 和 GMMs 的两个例子,其中一些变量可以直接观察到,而其他变量是潜在的,不能直接观察到。特别是,对于聚类,聚类分配是潜在变量,因为它不是直接观察到的。一般步骤如下,以 Z 为潜变量,X 为观测变量,未知参数θ。

假设电流参数由下式给出:θ’。第一步是估计:

使用当前的参数估计。第二步是估计最有可能使数据对数似然最大化的θ*,计算公式如下:

并且迭代地继续直到收敛。

20 个机器学习面试问题

  1. 假设我们有一个分类器,它为特定贷款申请欺诈的可能性产生一个介于 0 和 1 之间的分数。在这种情况下:a)什么是假阳性,b)什么是假阴性,以及 c)就美元而言,它们之间的权衡是什么,以及应该如何相应地对模型进行加权?
  2. 假设您需要为欺诈检测生成一个二元分类器。您会查看哪些指标,每个指标是如何定义的,每个指标的解释是什么?
  3. 你会得到一个非常大的单词库。你如何识别同义词?
  4. 描述生成模型和判别模型,并分别给出一个例子。
  5. 什么是偏差-方差权衡?它是如何用方程式表达的?
  6. 定义交叉验证流程。使用它的背后动机是什么?
  7. 假设您正在对新上市公司的年收入进行建模。你会使用哪种功能?需要采取什么样的数据处理步骤,运行什么样的模型?
  8. 什么是 L1 和 L2 正则化?两者有什么区别?
  9. 定义函数凸的含义。一个机器学习算法不是凸的例子是什么,并描述为什么是凸的。
  10. 描述梯度下降和随机梯度下降背后的动机。
  11. 解释什么是决策树中的信息增益和熵。
  12. 描述助推背后的理念。举例说明一种方法,并描述它的优缺点。
  13. 假设我们正在运行概率线性回归,它很好地模拟了一些 y 和 x 之间的潜在关系。现在假设所有输入都添加了一些噪声ε,这与训练数据无关。新的目标函数是什么?你是怎么计算的?
  14. k-means 聚类中对于 k 个聚类和 n 个样本点使用的损失函数是什么?使用 1)批量梯度下降,2)使用学习率ε对聚类 k 的聚类均值进行随机梯度下降来计算更新公式。
  15. 假设我们使用高斯混合模型(GMM)对欺诈性交易进行异常检测,将传入的交易分为 K 类。用公式描述模型设置,以及如何评估后验概率和对数似然。我们如何确定一项新交易是否应被视为欺诈?
  16. 什么是期望最大化?它什么时候有用?用公式描述设置的算法。
  17. 阐述 SVM 背后的背景,并展示其旨在解决的优化问题。
  18. 在机器学习的背景下描述熵,并在数学上展示如何在假设 N 个状态的情况下最大化熵。
  19. 假设您正在运行线性回归,并将误差项建模为正态分布。说明在这种设置中,最大化数据的可能性相当于最小化残差平方和。
  20. 假设 X 是一个单变量高斯随机变量。X 的熵是多少?

感谢阅读!

如果你有兴趣在数据科学面试中进一步探索概率和统计,请查看这份简讯,它每周三次向你发送练习题。另外,请留意即将出版的

数据科学访谈:概率与统计

原文:https://towardsdatascience.com/data-science-interviews-probability-and-statistics-31b9d03309c4?source=collection_archive---------16-----------------------

要研究的主题和 20 个要检查的问题

布雷特·乔丹在 Unsplash 上的图片

概观

概率和统计是每个数据科学家都应该熟知的重要领域。所有数据分析的基础是概率和统计,它们构成了发展和评估假设的批判性思考的基础。

不要指望很快学会所有的主题,许多主题涉及许多子主题,这些子主题本身就是一个终身学习的过程,但一般来说,拥有强大的统计背景对大多数数据科学面试来说很重要。这篇文章将提供一些非常高层次的主题和两个主题中的 10 个示例问题。讨论的问题来自 https://datascienceprep.com/的,涵盖了顶级科技公司的面试问题。

概率基础和随机变量

概率的开端是从思考样本空间、基本计数和组合原理开始的。虽然没有必要了解组合学的所有细节,但了解基础知识和简化问题的某些方法是有帮助的。这里的一个经典例子是“星条”计数法。

另一个要研究的核心话题是随机变量。了解期望、方差、协方差等很重要。以及基本的概率分布。无论是做简单的例子还是专注于应用方面,熟练掌握基本计算通常会对面试很有帮助。

概率分布

对于随机变量建模,了解各种概率分布的基础知识是必不可少的。理解离散和连续的例子,结合期望和差异,是至关重要的。采访中讨论的最常见的分布是均匀分布和正态分布,但也有许多其他众所周知的特定用例分布(泊松分布、二项式分布、几何分布)。

大多数情况下,知道基本知识和应用程序就足够了——抛硬币属于哪一种情况?等待一个事件呢?诸如此类。然而,能够对期望值,方差,或者其他更高的矩进行求导并没有坏处。这很可能会出现,尤其是如果面试非常注重数据的话。

假设检验

这是统计推断背后的支柱,可以分解成几个主题。第一个是中心极限定理,在研究大样本数据时有重要作用。接下来包括假设检验的核心要素:抽样分布,p 值,置信区间,I 型和 II 型错误,等等。理解这里的数学细节对于掌握底层机制是很重要的。每一个都有重要的数学细节需要理解,还有计算问题之外的应用。最后,值得看看各种涉及比例的测试,以及其他假设测试。

这些概念中的大多数在 A/B 测试中起着至关重要的作用,这是面试中经常被问到的话题,也是所有实验的基础。因此,不仅要理解技术细节,还要从概念上理解 A/B 测试是如何操作的,假设是什么,可能的陷阱,在实际产品中的应用等等,这些都是很有用的。

建模

凭借对概率分布和假设检验的深刻理解,建模大量使用了这两种方法,并添加了特定的理论概念和技术。由于这是一个相当宽泛的术语,我们将称之为建模,因为这些领域通常与 ML 有很强的统计交集,并且包括诸如线性回归、最大似然估计、贝叶斯统计等主题。其中的每一个都会涉及许多数学细节和其他理论细节。

在许多实际应用中使用的统计方法的理论基础中,每个领域都起着重要的作用。对于专注于建模和机器学习的面试来说,了解这些话题是必不可少的。

概率问题

  1. 你和你的朋友正在玩游戏。你们两个将继续扔硬币,直到出现序列 HH 或 TH。如果 HH 先出现,你就赢了。如果 TH 先出现,你的朋友就赢了。你赢的概率有多大?
  2. 七场系列赛到 7 场的概率是多少?
  3. 假设你画一个圆,随机选择两个和弦。那些弦相交的概率是多少?
  4. 1/1000 的人患有某种特定的疾病,如果你患有这种疾病,有一个测试是 98%正确的。如果你没有这种疾病,有 1%的错误率。如果有人检测呈阳性,那么他们患病的几率有多大?
  5. 有 50 张 5 种不同颜色的卡片。每种颜色都有编号从 1 到 10 的卡片。你随机抽取 2 张牌。它们不是同一颜色也不是同一号码的概率是多少?
  6. 西雅图的三个朋友,每个人都告诉你下雨了,每个人都有 1/3 的概率说谎。西雅图下雨的概率有多大?假设西雅图任何一天下雨的概率是 0.25。
  7. 假设你掷三个骰子,一个接一个。你以严格递增的顺序获得 3 个数的概率是多少?
  8. 在看到第一张王牌之前,你希望从一副标准牌中抽出多少张牌?
  9. 假设你得到一枚不公平的硬币,不知道是正面还是反面。你如何用这枚硬币产生公平的赔率?
  10. 假设您有 N 个参数为μ和σ的正态分布的独立同分布图。那些抽牌中 k 大于某个值 Y 的概率是多少?

统计问题

  1. 用通俗易懂的语言描述 p 值。
  2. 假设您正在运行多元线性回归,并且相信有几个相关的预测因子。如果回归结果确实相关,它们会受到什么影响?你会如何处理这个问题?
  3. 解释权力背后的统计背景。
  4. 描述 A/B 测试。有哪些常见的陷阱?
  5. 求均匀分布 U(a,b)的均值和方差。
  6. 你从均匀分布[0,d] n 次取样。你对 d 的最佳估计是多少?
  7. 推导几何分布随机变量的期望。
  8. 一枚硬币被抛 1000 次,550 次都是正面朝上。你认为硬币有偏差吗?为什么或为什么不?
  9. MLE 和 MAP 有什么区别?用数学描述一下。
  10. 给定一个随机伯努利试验生成器,如何返回从正态分布中采样的值?

感谢阅读!

如果你有兴趣在数据科学面试中进一步探索概率和统计,请查看这份简讯,它每周三次向你发送练习题。

数据科学访谈:SQL

原文:https://towardsdatascience.com/data-science-interviews-sql-94dc33d58e73?source=collection_archive---------10-----------------------

SQL 技术指南和 10 个需要检查的问题

图片由 Alexandra Acea 在 Unsplash 上拍摄

概观

当你听到“数据科学家”时,你会想到建模、有见地的分析、机器学习和其他酷词。所以,让我们不要拐弯抹角:数据库和 SQL 不是数据科学家最“有趣”的部分。这可能不是你面试时最担心的。但是也就是说,因为您将大量使用数据,这意味着您将编写许多查询来检索数据并将其转换为有意义的数据。

这篇文章将在数据科学访谈中提供 SQL 的技术指南。讨论的问题来自这个数据科学采访时事通讯,其中有来自顶级科技公司的问题,并将涉及到即将出版的

一般工作流程

大多数工作流分析的第一步都涉及到快速分割 SQL 中的数据,因此能够高效地编写基本查询是一项非常重要的技能。尽管许多人可能认为 SQL 只涉及选择和连接,但强大的 SQL 工作流还涉及许多其他操作符和细节。例如,利用子查询很重要,它允许您操作数据的子集,通过这些子集可以执行后面的操作,而窗口函数允许您在不使用 GROUP BY 显式组合行的情况下剪切数据。SQL 中提出的问题通常对手头的公司非常实用——像脸书这样的公司可能会问各种用户或应用分析,而像亚马逊这样的公司会问产品和交易。

基本命令

这里有一些你绝对应该知道的基本但重要的 SQL 命令。让我们首先讨论它们是做什么的——稍后您将通过示例看到实际的语法和代码。

  • CREATE TABLE:该命令在关系数据库中创建一个表。您可以使用这个命令定义一个表的模式(这是可选的,取决于您使用的数据库,例如 MySQL)。
  • INSERT:这将一次向给定的表或一组行中插入一行。
  • 更新:当您需要修改已经存在的数据时,使用该命令。
  • 删除:从数据中删除一行(或多行)。
  • SELECT:从表中选取和获取某些列。这在大多数查询中使用。
  • 内部连接:将多个表组合在一起,它将保留两个表中列值匹配的行。单词 INNER 是可选的,很少使用(通常省略)。
  • 左外连接:通过匹配提供的列将多个表组合在一起,但保留连接的第一个表中的所有行
  • 完全外部连接:通过匹配列将多个表组合在一起,但保留所有行(外部连接是可选的)。
  • GROUP BY:对指定列或一组列中具有相同值的行进行分组/聚合。
  • 其中:在应用任何分组之前,提供筛选条件。
  • HAVING:在应用任何分组后,提供筛选条件。
  • ORDER BY:按特定的一列或多列对结果进行升序或降序排序。
  • DISTINCT:仅返回不同的值。

在实践中,面试官会评估你能否回答一个简单的问题(通常是一个业务用例),并提出正确的问题。

有用的花絮

一般来说,SQL 查询会涉及到以下几个部分:

  1. 聚合:对结果行集使用 COUNT()、SUM()或任何聚合函数
SELECT COUNT(*) FROM users..

2.连接:常用于多个表之间的查询。例如,下面是用户名花费的总时间:

SELECT users.name, SUM(sessions.time_spent) AS total_time_spent  FROM users u JOIN sessions s ON u.user_id = s.user_id GROUP BY 1

3.过滤:有各种方法来测试相等性,其中最常见的是使用=和<>(不等于)、or >和

SELECT * FROM users  WHERE username <> 'unknown' OR username LIKE '%123%'

4.公用表表达式(cte)和子查询:

CTEs 允许您定义一个查询,然后在以后使用别名引用它——对于分解大型查询或者对于编写的各种查询有自然顺序的情况非常有用。例如,我们可以对用户子集进行快速 CTE,然后使用这些特定用户进行简单分析:

WITH (SELECT * FROM users WHERE join_date > '2020-01-01') AS u   SELECT u.name, SUM(sessions.time_spent) AS total_time_spent  FROM u JOIN sessions s ON u.user_id = s.user_id GROUP BY 1

子查询内嵌在查询本身中,只能使用一次:

SELECT * FROM users AS u JOIN  (SELECT user_id, time_spent FROM sessions   WHERE session_date > '2020-01-01') AS s  ON u.user_id = s.user_id

查询问题通常围绕着一组与公司相关的表——在脸书是用户和使用情况表,在优步是乘客和司机表,等等。因此,除了熟悉查询之外,理解数据库的基本概念也很重要(将在下面介绍):主键、外键、索引等等。这样做的一个好方法是考虑公司应该使用的潜在表,以及哪些操作是有用的。

例如,想象你在脸书工作,有用户和帖子以及对帖子的反应。这些表看起来会是什么样子,你用来连接表的外键是什么?表中的哪些列将被索引,为什么?

窗口功能

窗口函数是跨一组行进行计算的函数(像聚合函数一样),但不将这些行分组(像聚合函数一样)。它们涉及一个聚合函数和一个 OVER 子句,您可以通过使用 PARTITION BY 来缩小窗口:

SELECT *, SUM(time_spent) OVER 
(PARTITION BY user_id ORDER BY join_time ASC) 
FROM sessions

在这个特定的示例中,我们获得了会话数据中行级别花费的总时间(不需要按每个 user_id 分组)。

请注意,您不能在同一个查询中使用窗口函数和聚合函数,但是它们在各种情况下都很方便。当您看到需要聚合时,您会希望让它们参与进来,但是要维护行。

10 个 SQL 面试问题

  1. 假设你有一个关于应用分析的表格(应用标识,事件标识,时间戳)。写一个查询,得到 2020 年每个 app 的点击率。
  2. 假设给你一个按设备分类的观众情况表(用户标识、设备类型、观看时间)。将“移动”定义为平板电脑和手机的总和。编写一个查询来比较笔记本电脑和移动设备上的收视率。
  3. 假设您有一个来自用户的收入表(user_id,spend,transaction_date)。编写一个查询来获取每个用户的第三次购买。
  4. 假设您有一个按产品类型(order_id、user_id、product_id、spend、date)划分的支出活动表。编写一个查询,按时间顺序计算每种产品在一段时间内的累计花费。
  5. 假设给你一个用户发推文的表格(tweet_id,user_id,msg,tweet_date)。编写一个查询来获取 2020 年内发布的 tweet 计数的直方图。
  6. 假设您有两个表:1)用户(user_id,date)和 2)用户帖子(post_id,user_id,body,date)。编写一个查询来获取用户发布的帖子数量的分布。
  7. 假设您有一个按产品类型(order_id、user_id、product_id、spend、date)划分的支出活动表。编写一个查询,按时间顺序计算每种产品在一段时间内的累计花费。
  8. 假设您有一个关于用户操作的表(user_id、event_id、timestamp)。编写一个查询,按月获取活动用户保持率。
  9. 假设您从用户那里得到一个会话表(session_id,start_time,end_time)。如果一个会话与另一个会话在开始和结束时间上重叠,则它们是并发的。编写一个查询来输出与最大数量的其他会话并发的会话。
  10. 假设您有两个表,分别是 1)用户注册(user_id,signup_date)和 2)用户购买(user_id,product_id,purchase_amount,purchase_date)。编写一个查询来获取上周加入的用户的转换率,这些用户从那以后至少购买了一件商品。

感谢阅读!

如果您有兴趣在数据科学访谈中进一步探索 SQL,请查看这份简讯,它每周三次向您发送练习题。另外,请留意即将出版的

数据科学是一个谎言

原文:https://towardsdatascience.com/data-science-is-a-lie-d9157b9ed29c?source=collection_archive---------20-----------------------

你一直被欺骗着

约书亚·赫内Unsplash 拍摄的照片

所以你认为你可以预测未来…

很难做出预测,尤其是对未来的预测

丹麦谚语

数据科学就是为预测创建模型(并围绕数据创造故事,稍后会详细介绍)。逻辑似乎很可靠:我们有数据,我们发现模式,我们将这些模式投射到未来,我们获利。这背后的理论一点也不新:它被称为统计学,并且至少已经流传了两个世纪。随着时间的推移,许多术语来描述预测任务的一些方面,如数据挖掘、分析、商业智能、运筹学和房间里最新的大象,称为数据科学。但是让我们不要深究statistics == data_science这个话题,也不要对那些为了从数据中获取信息的过程而创造出来的无数流行语吹毛求疵。我想谈一些更现实的东西。

TL;大卫:你无法预测未来。是的,你已经知道了。尽管如此,你还是假装你在一次会议上展示了那张漂亮的图表。你相信所有这些数据中一定有一些知识。稍微有点错误的地图总比没有地图好,对吧?

纳西姆·塔勒布在他最著名的书中,用了一个简单的比喻来证明我们以前的知识在预测未来方面是多么的脆弱。几个世纪以来,旧世界的人们认为黑天鹅不存在,因为他们从未见过黑天鹅。只有当第一批探险者到达澳大利亚时,他们才意识到天鹅可能有黑色的羽毛。

这就足以推翻流传了几个世纪的“白天鹅理论”:一只黑色的家禽。这不是一个新的理念。哲学家卡尔·波普尔(1902-1994)将科学理想化为伪造理论并且从不宣称它们是真实的事业。波普尔说,理论只能是错误的,因为我们需要无限的证据来证明理论的完全真实性,而这是不可能的。

我几乎能听到你说“不错的鸟类哲学,伙计,可惜我生活在勇敢的现实世界里!”。所以让我们实际一点,好吗?看看国际货币基金组织(IMF)2020 年 1 月的 GDP 增长预测:

国际货币基金组织对截至 2020 年 1 月的 GDP 增长预测

以下是 2020 年 4 月的预测:

国际货币基金组织对截至【2020 年 4 月的 GDP 增长预测

他们怎么能在几个月内如此突然地改变自己的预测呢?如果你在文章发表后不久读到这篇文章,你可能知道答案。2019 年 12 月 31 日,中国当局报告了武汉市发生“连续系列不明原因肺炎患者”,武汉市将在几周内被命名为新冠肺炎,并被世界卫生组织认为是疫情。通过人类接触传播,它将关闭几乎整个世界的经济。

国际货币基金组织是预测经济的主要机构之一,它可以如此迅速地改变主意,这一事实应该会让你对你可能遇到的任何预测产生怀疑。如果你碰巧是一个所谓的“数据科学家”,我希望你也把这种怀疑应用到你自己的预测中。

你可能会辩称,IMF 从未打算完美预测未来。他们的预测仅仅是对可能情况的估计,以帮助决策者。我同意你,但那不是重点。关键是,一个有可能将持续的经济增长转变为疯狂的过山车的事件根本没有被考虑在内。在接下来的几个月里,他们的“单纯估计”错过了对任何决策者来说最重要的事情。国际货币基金组织这样做不是因为无能或恶意,而是因为他们不可能预料到这一点。这就是塔勒布想说的:最重要的事件是无法预测的,因为我们没有导致它们发生的信息。数据既不隐藏也不难以获取。就是不在那里!

所以,祝你好运,在下一次疫情、自然灾害或热核战争之前几周,你要知道,这些事件才是真正重要的。对于黑天鹅来说,数据——即使你称之为大数据——也帮不了你。

为什么我还是不富裕?

股票市场预测了过去五次衰退中的九次。

—保罗·萨缪尔森

如果你仍然被数据科学的魔力所诱惑,你应该马上停止你正在做的一切。是的,别再看这篇文章了。把你的时间花在更有利可图的事情上:股票市场。

对于数据科学家来说,没有比股票市场更好的场景了。有大量的数字数据,公开可用且格式良好。事实上,一些关于机器学习的介绍性文本都是以股市预测为主要任务的。继续努力,尽你所能建立最好的模型。如果你的预测是正确的,你就有资格赚一大笔钱。卖出下跌的股票,买入上涨的股票。冲洗并重复。我已经可以想象你坐在自己的私人飞机上。

可悲的是,这是行不通的。我敢打赌。

根据 T2(一家跟踪全球市场股票价值平均值的公司)的说法,“积极管理的基金在短期和长期内往往表现不佳”。主动管理型基金是那些雇人预测市场趋势并建议应该买入或卖出哪只股票的基金(如果你愿意,你可以称他们为金融数据科学家)。尽管如此,他们还是不能超过他们的基准,这意味着任何人只要在市场上买一点股票就能获得平均回报,就会做得更好。

试图利用过去的数据预测股票市场在交易中有着悠久的传统,被称为技术分析(也被称为更好的名字图表)。这是一个有争议的话题,直到今天,一些人还信誓旦旦地说这是有效的。他们认为,已经证明市场存在趋势,更重要的是,有一些千万富翁将他们的财富归功于对数据信号的利用。

也许他们是对的。也许股票市场的图表中有趋势。但是,80%的公司,其唯一的工作是战胜市场,不能利用这一点,即使这是真的。都是因为旧的趋势消失了,新的趋势出来了。原来世界不是静止的。事情变化太快,任何预测都变得毫无用处。在这种情况下,投资者最好根本没有地图。

数据科学方法在股票市场预测上的明显失败很能说明问题。现在将上面故事中的“股票市场”改为“公司收入”、“用户偏好”或你的老板让你预测的任何感兴趣的东西。你还对你提供的数字有信心吗?

目前的情况是,我们无法预测最重要的事情——即使它们即将发生——对于我们可以预测的不太重要的事情,我们可能无法从中提取任何价值。但是如果我们设法产生好的、可操作的预测呢?

数字和叙述

未来无法预测,但未来可以被发明。

—丹尼斯·加博尔

【好的】你说“我还是想玩我的玩具,因为,如果有的话,它们在正常时间工作”。我问:他们有吗?

正如我前面所说的,我们从数据中提取信息的业务已经持续了至少整整两个世纪。所以我们一定非常擅长预测所谓的正常时期的事情。如果我们称某人为专家,那么,他一定是他所在领域的最佳预测者之一,对吗?

Philip Tetlock 调查了这种情况是否属实,并询问了许多专家对未来重大事件的预测。不仅专家的表现和外行人几乎一样,所有人都勉强胜过随机猜测。

为什么我们仍然称一个记录如此糟糕的人为专家?我的理论是,虽然那些人不太擅长预测,但他们擅长创造叙事。他们到处挑选一些数据来创造一个故事。我们喜欢故事!

专家们也足够谨慎,不会做出事后容易引起争议的预测,而且他们从来不会精确预测时间。他们说“我们将面临困难时期”,但对困难的时间和程度却有不同的解释。

所以,是的,我们可以用数字(对别人或自己)撒谎,这里没有什么大新闻。但是,数据科学家并没有把它作为一个主要问题来解决,而是把它作为他们工作的一个重要部分。说故事,他们说。显然,现在它被认为是一种用数字说服人们的技能。或者,正如我最喜欢的 TED 演讲者所说的那样,“为了在这里添加更多的填充符,我将给出几个数字供您考虑”

在任何公司,员工都会面临交付成果的压力。因此,在泰特洛克的意义上,数据科学家处于成为数据“专家”的特殊地位。在所有的企业政治游戏中,不难想象一些分析师会使用各种各样的讲故事技巧来提出他们能够做出的最佳预测,即使它来自一些虚假的相关性,除了测试数据集之外没有任何预测能力。

我甚至不会谈论人类在处理数据时容易受到的所有偏见,无论是在生成预测还是解释预测时。维基百科上列出的所有认知偏见都以某种形式适用于数据科学世界。

如果你是从数据科学家那里获得预测的人,问问你自己:这些数字告诉我一些重要的东西吗,或者它们是为了显示你想要的东西而特设的程序的结果?没办法说实话。这就是为什么学术界的严肃研究需要一个预注册协议。一个研究者应该在寻找答案之前问这个问题,否则他可能会被诱惑去回答数据显示的任何问题。我并不是说一家公司应该作为一项科学事业来经营。我要说的是,你至少应该接受这些数字可能是胡言乱语,不管它们背后的模型有多复杂。

结论

所有的模型都是错的,但有些是有用的。

—乔治·博克斯

归根结底,这就是数据科学家给公司带来的价值:

  • 一个无法解释最重要、最意想不到的事件的预测——记住黑天鹅。
  • 即使在地平线上没有意外事件,并且数据中有一些重要的模式,该模式也可能不再可用,因为当你看到它时,世界已经发生了变化——记住主动基金。
  • 即使趋势看起来足够一致,可以被利用,预测也可能是精心编造的谎言的结果——记住“专家”。

这并不是说数据科学没有地位。人们会做出决定,不管是基于 T2 午餐吃了什么还是基于数据。我会选择后者。如果有的话,数据科学鼓励实验,这导致更快地发现错误。

但是如果你已经被炒作所迷惑,变成了一个数据迷,你就做错了。独角兽创业公司是否在这么做并不重要,因为(1)相关性并不意味着因果关系(也许他们的成功是出于另一个原因),以及(2)你没有考虑到所有不折不扣地遵循数据圣经的失败公司(用塔勒布的话说,它们被埋葬在字母的墓地里)。

我在这篇文章中相当讽刺的语气有一个目的:把你从数据驱动世界的乌托邦中带下来。模型的输出不能代替人类比机器做得更好的事情:思考。数据科学不是银弹,有许多缺陷,应该持保留态度。如果你假装不知道,我预测你最终会远离你每天钻研的数据池中的任何真相。

数据科学是一项团队运动

原文:https://towardsdatascience.com/data-science-is-a-team-sport-1164545da7a2?source=collection_archive---------40-----------------------

(以及我们如何在 Kaggle WiDS2020 数据马拉松中赢得第一名)

尽管官方数字在增长,但女性仍占世界数据科学家的少数。尽管学术界多次试图吸引女性,并在计算机科学课程中建立性别平等,但像 WIDS 这样的组织的活动在激发兴趣和为女科学家打开大门方面卓有成效。

一年一次,一些全球性的活动和比赛有助于提升女性在数据科学领域的地位(WIDS)。其中一项活动是名为“WiDS Datathon 2020”的 Kaggle 竞赛,这已经成为许多有抱负的女性数据科学家的传统。

今年比赛的目标是预测一名入院病人是否能在重症监护室存活(二元分类问题),假设他或她的 24 小时入院图表和个人人口统计数据的数据记录是可访问的。

竞争者被提供了来自患者的超过 130,000 个医院重症监护病房(ICU)访问记录的数据集。在一年的时间内,从阿根廷、澳大利亚、新西兰、斯里兰卡、巴西的医院到美国的 200 多家医院,跨越了不同的地理区域。

自然地,这种类型的预测模型(患者的存活概率)可以有益于在重症监护病房中治疗患者的紧急程度的优先化和决策过程。它可能有助于对抗这些单位的发病率(尽管今天,冠状病毒的情况可能会影响模型的准确性,因为训练的统计分布不包括冠状病毒感染的患者!).

这是一场发人深省的基于表格分析的比赛!来自世界各地的 951 组数据科学家参加了一场紧凑的比赛。

作为机器学习中典型的表格分类问题,我们必须在流水线的每个阶段使用一些技巧。同时,我们还为表格数据整合了最先进的集成技术和创新的测试时间扩充(TTA)。要深入了解我们的解决方案,请点击此处的链接。

ML 经典管道(来源:Nurit Cohen Inger)

在本文中,我想分享一些与数据科学开发生命周期高度相关的关键成功因素

首要因素—团队合作

首先,谁在我们的团队里?

我们的团队由几个 Kaggle 福音传道者组成:首先是已经是 Kaggle 比赛大师的 Seffi Cohen、Dan Ofer、Noa Dagan (MD .)和我(Nurit)。让这个团队如此独特的是,所有成员都有广泛的实用数据科学背景和强大的医疗保健背景。

数据科学是一项团队运动(来源:帕斯卡·斯威尔在 T2 大学的照片)

简单概述一下我们的攻击方式,将有助于处理类似的问题:

我们的攻击计划是“分而治之”。我们将工作量分配给团队成员,每个人都专注于自己的特定任务。碰巧的是,每个部分单独在排行榜上得分都很高(交叉验证得分和排行榜)。

然而,最终——我们将不同的提交整合成一个中心管道。我们将这些模型整合到最终提交的作品中,从而得到了迄今为止最出色的分数。

以最小的重叠划分工作量,并提前计划每个结果的集成是非常重要的。

第二个因素—领域专业知识

幸运的是,我们船上有一名医生!我们的队员诺亚。

我们在管道的第一阶段投入了大量的精力,通常称为探索性数据分析(ed a)。

我们探索了 183 个独立特征(协变量)中的每一个,以及它们与二元目标变量“医院 _ 死亡”的相关性。这给了我们超越其他团队的优势,因为我们发现了隐藏在特征下的真正宝藏。我们竭尽全力寻找性能最佳的型号。

有了这些领域知识,我们计划了 ML 管道的下一部分;我们聪明地估算缺失值并提取新特征。所有这些都极大地提高了我们的排行榜分数!

例如,我们创建了一个名为【mosely _ dead】的“黄金”特征,它将来自不同生物功能或与生命不相容的测量的洞察力进行分组(并提供了一个出色的结果分离)。

大部分死亡和全部死亡有很大区别;大部分是死的,小部分是活的。所有人都死了,通常你只能做一件事。(来源:公主新娘)

长话短说,领域专家的参与对于在数据科学开发过程中获得更好的结果至关重要!

第三个因素—强大的功能工程

《福布斯》的一项调查声称,“数据科学家花费大约 80%的时间来准备和管理用于分析的数据。76%的数据科学家认为数据准备是他们工作中最不愉快的部分”。

清理大数据:最耗时、最不愉快的数据科学任务(来源:福布斯)

嗯,是真的。考虑到比赛的时间框架(6 周),我们花了很多时间来创建我们认为可以预见的完美功能工程程序。

健壮的特征工程是非常有益的。

我可以证明这个事实。一个模特就能让我们在这场比赛中获得第 14 名!

因此,如果你能在这个阶段分配足够的时间做到最好,即使有时它可能被认为是最不愉快的一个阶段,请放心,这将是非常有益的。

第四个因素— AutoML 工具还不够,但是…

我们尝试了各种自动机器学习(AutoML)工具。他们的成绩平平(在交叉验证阶段和排行榜上)。但是,如果您只想在致力于开发基于数据科学的项目之前尝试接受或拒绝某个假设时使用这些工具,那么所有这些工具都足够好了。我想对于一些项目来说,这些工具的结果已经足够好了。

我们确实使用了一些先进的技术来增强 H2O 管道的编码。那对我们的成功有一点贡献。我们还使用 Sparkbeyond 来“强力”提取特征。

总而言之,竞争是激烈的。获胜者是根据浮点后的第五位数字来判断的,足够好并不简单。在人类数据科学家的参与下使用 AutoML 工具的某些部分可能有帮助,也可能没有帮助。

Kaggle 竞争大约是浮点之后的第五位数(来源:Nurit Cohen Inger)

第 5 个因素——组装总是有效的

当然,我们在 100 多个不同的实验中尝试了数百个模型实例的组合。此外,新的和不规则的实现测试时间增加(TTA)的表格数据。

这个众所周知的、被证明有效的技巧在比赛中总是奏效。我们使用了不同的数据集——插补技术、特征和数据生成。此外,特征选择阶段从 7 种不同的方法进行。

因此,除了我们上面提到的强大的功能工程,这可能会使我们排在第 14 位,还有一个优雅,新颖的合奏让我们排在第一位…

外卖食品

有竞争总会推动你走向卓越,你尽最大努力,然后每天都有所改进;)

总结一下我从这次激动人心的经历中得到的收获:我认为我们的秘方是不同方法和队友的集合。两人都为在此次竞赛中成功找到数据科学问题的解决方案做出了巨大贡献。

选择正确的团队是至关重要的,因为不同的技能和专业知识给了我们不同的观点和方法。当然,准确的团队合作,因为数据科学是一项团队运动!

旧金山,我们来了!(图片来源:Nurit Cohen Inger)

努里特·科恩·英格

白天是数据和人工智能战略家,晚上是热情的卡格勒

感谢 什洛莫·卡沙尼 的启发性言论

数据科学即将开花结果。但是它的根已经在这里很久了。

原文:https://towardsdatascience.com/data-science-is-about-to-blossom-but-its-roots-have-been-here-for-a-very-long-time-e1f05be0774e?source=collection_archive---------62-----------------------

“数据分析的未来可能包括巨大的进步、真正困难的克服,以及为科学和技术的所有领域提供巨大的服务。会吗?”

约翰·图基,来自《数据分析的未来》

Unsplash 上由 Franck V. 拍摄的照片

1962 年,数学家约翰·图基在他的论文《数据分析的未来》中指出,“很长一段时间以来,我一直认为自己是一名统计学家……但随着我对数理统计发展的观察……我逐渐感到,我的主要兴趣在于数据分析……”。然后,他将数据分析描述为“一门科学,一门由普遍存在的问题而非具体主题定义的科学”。在这些话中,图基陈述了数学仅仅是一组定义好的先验真理;数据分析是一门经验科学,知识可以通过不断的实验获得。图基似乎或多或少地将统计学定义为数学和数据分析的子集。根据图基,“数理统计的个别部分必须向数据分析或纯数学寻找它们的正当性”。

我们可以看到 Tukey 的观点在今天得到了回应,因为“数据科学”一词正在成为科技界的日常行话。此外,许多老牌大学只是在过去五年才开设了“数据科学”学位课程。这些项目中的许多都是现有统计学课程的延伸。可以肯定地说,这个领域已经很快成为它自己独特的学科。图基在论文结尾对数据在未来随着计算存储能力变得更强而发挥的重要性进行了预见性的理解:“……在有些情况下,计算机使原本完全不可行的事情变得可行……在这些情况下,提供答案的速度和经济性使计算机对大型数据集至关重要,对小型数据集非常有价值”。

快进到 1994 年。商业周刊发表了一篇题为数据库营销的文章。这篇文章详细描述了 80 年代商店中使用的新的结账扫描仪技术的兴起。设想是每台扫描仪将创建一个交易记录,存储每件购买商品的数据。反过来,这可以让零售商根据客户需求和购买历史了解广告内容。然而,最终,这种结账扫描仪热潮并没有实现它的承诺。公司根本没有技术基础设施或计算能力来处理这些海量数据,更不用说从中获得洞察力了。

然而,重要的是要注意,这个实验,即使失败了,也代表了一个非常重要的概念的早期版本。它代表了利用大规模分析来预测客户需求的愿景。这是在 80 年代,那时互联网还不是主流。事实上,到了 90 年代,一些公司已经能够在这种技术处于萌芽阶段时使用它。例如,Blockbuster Video 利用其会员和交易数据库来测试一个计算机化的系统,根据以前的租赁情况推荐电影。在所有公司中,Blockbuster 是内容推荐算法的早期研究人员,这简直是异想天开!

这篇文章中的以下引文听起来几乎像是今年的一篇文章:“公司正在收集关于你的大量信息,分析这些信息以预测你购买产品的可能性,并利用这些知识来精心设计营销信息,以使你这样做”。

那么,在过去的二十年里,是什么让数据和分析在几乎每个技术组织中都扮演了重要角色呢?

曼努埃尔·盖辛格在的照片

简而言之,技术能力呈指数增长,而且是在相对较短的时间内。互联网成为企业和个人使用的主流工具。还记得收集数据的收银台扫描仪吗?在这个时代,存储海量数据基本上没有障碍。今天,我们收集了无数的数据,并且可以随时进行分析。而这些数据来源于无数独特的领域。这可能是医疗保健数据、社交媒体数据、客户数据;这样的例子不胜枚举。企业渴望利用他们的计算能力来分析这些数据,因为这是他们成功的关键。

存储和处理这些数据的计算能力如何?今天,GPU 能够以超乎想象的速度处理数据和执行数据密集型算法。⁴最重要的是,数据中心提供了异地数据存储的仓库。然后,云计算供应商可以按需向企业和个人提供这种存储。在 之上,全新的大数据分析范式被创造出来。实现这一目标的最著名的项目是 Apache Spark,这是一个始于加州大学伯克利分校 AMPLab 的开源实验。Spark 的出现彻底改变了大数据计算的格局;因为它完善了多机处理的范例。这允许数据分布在多个集群之间,并被并行处理,以最大化运行时效率。⁵此外,Spark 项目通过引入弹性分布式数据集(或 rdd)作为其基本数据结构,完善了 MapReduce 编程范式。⁶

这些企业的目标到底是什么?数据是“他们成功的关键”吗?

bongkarn thanyakij 在像素上拍摄的照片

嗯,可能性真是无穷无尽。数据科学几乎渗透到每个领域。⁴:虽然“机器学习”这个时髦词经常与令人兴奋的人工智能世界联系在一起,但在现实世界中,它大多只是一种向股东提供见解的手段。如前所述,用例非常丰富。

首先,数据可以对公司的广告策略产生非常积极的影响。数据分析的科学效率可以节省公司的广告费。这是因为浪费在未经计算验证的策略上的钱更少了。⁷:过去,你没有足够的数据存储能力来对如此庞大的数据集进行分析。现在,当对历史客户和交易记录进行分析时,公司可以确保他们的算法正在对需要优先考虑的确切营销策略进行分类。

接下来考虑医疗领域。也许一家制药公司想预测一种新药被采用的可能性。然后,他们可以挖掘历史索赔数据,并基于各种人口统计属性的诊断模式创建预测器。

数据甚至可以在航空安全方面取得进展。例如,西南航空公司和美国宇航局合作开展了一个文本挖掘项目,通过研究空中交通管制记录和飞机产生的数据内容来识别潜在的危险。⁸

我将暂时停止列出用例。但关键是,如果我想,我可以永远继续下去。你可以写一本关于每个业务领域和用例数据科学影响的百科全书。它对组织目标的影响已经真正地 深远了。无论企业的目标是提高投资回报率还是促进公众福祉,数据都会以某种形式发挥作用。

旁白:人工智能对自动化

图标信用: Freepik

以上用例比较符合 AI,机器学习,分类。但是在我们继续讨论自动化的用例之前,重要的是要注意自动化不要和人工智能混淆。而人工智能(及其子集,机器学习)旨在模仿人类可以 识别 的东西;自动化意味着不断模仿人类可以 的任务。换句话说,虽然人工智能算法必须对洞察力进行分类,但自动化算法必须不断模拟重复的任务。

然而,我们还必须考虑到这两者并不一定是相互排斥的,它们经常是携手合作的。说明这种想法的最佳用例是自动驾驶技术。在这种情况下,您正在自动执行长时间不间断驾驶的任务。然而,这项任务并不像简单的复制粘贴那么简单。有许多外来因素,如交通灯、标志和其他车辆。这就是人工智能被补充到组合中的地方。汽车将需要实现分类器来留意这些无关的因素,并学习如何对它们做出反应。

稍后,当我们谈到数据策略和策略的主题时,我可能会互换使用这两个术语。因为这两个术语确实不同,但它们紧密相关。既然我们已经清除了这个困惑,让我们继续更多的业务目标。

企业希望通过自动化实现什么样的结果?

照片由 Marco Verchflickr 上拍摄

自动化的主要目标是纯粹的效率和生产力。据麦肯锡称,仅自动化一项就可以将全球年生产率从 0.8%提高到 1.4%。几个劳动部门已经在使用自动化。例如,澳大利亚矿业公司力拓(Rio Tinto)推出了自动化拖运卡车和钻机,极大地提高了生产率。⁴

至于长途货运,它很可能是下一个被自动化严重破坏的劳动力部门。想想美国 70%的货物都是通过长途卡车运输的。⁹:如果你可以用自动驾驶技术自动化所有卡车,让它们不间断地连续运行,那么你将拥有一个非常高效的供应链,尽管这曾经是不可能的。像这些纯粹依赖劳动密集型任务的行业,总是会看到自动化技术提高了效率。

但是自动化甚至可以应用到需要更多人际交流的行业。以客户服务领域为例。据估计,现在大多数客户服务交互都是自动化的。⁰亚马逊和花旗银行只是两家大公司,它们的客户服务基础设施在某种程度上依赖于虚拟助理。顾客服务自动化也在食品服务行业大量实施。例如,麦当劳在 2018 年制定了一项计划,到 2020 年,每个季度在 1000 家商店中增加自助服务亭。今天,我们看到了结果,因为售货亭在他们的餐馆里非常普遍。一份工作是否需要社交方面并不重要。自动化注定会以某种方式破坏它。

我们讨论了商业目标。但是“第四次工业革命”可能带来哪些负面影响呢?

罗布森·哈苏卡米·摩根在 Unsplash 上的照片

我们经常看到人工智能的出现与黑暗联系在一起。我们经常听到工厂工作和长途卡车驾驶等许多必不可少的劳动密集型工作将很快被 AI 取代。这无疑是一个需要考虑的重要伦理问题。虽然过去的工业革命创造了新的工作机会,取代了旧的工作机会,但人工智能革命似乎将彻底消除某些行业。预计取代它们的工作将是繁重的数学、计算和批判性分析。这些白领工作与他们即将取代的劳动密集型蓝领工作大相径庭。

培训老员工将会很困难,不仅因为他们正在适应全新的技能组合;而是因为他们可能根本没有兴趣学习这些新技能。想想这样一个事实,美国的卡车司机一般是接近退休的中年人,可能没有大学文凭。在这个年龄,这些人大概没有学习编程的欲望。最重要的是,他们正处于人生的关键时刻,这份工作是他们身份的重要组成部分。当我们经历人工智能革命时,这些都是需要解决的问题。我甚至可以说,政府需要制定人工智能战略来应对这些现象。

政府和公司如何合作实施人工智能战略?

插图鸣谢:由rawpixel.comFreepik 上设计

我们已经通过人工智能和自动化的主要优势——生产力——广泛地讨论了它们。但现在,我们必须将这一点与潜在的伦理含义相调和。根据麦肯锡的说法,政策制定者实际上有很大的动机为了他们的经济和选民的福祉而接受这些技术:“这种(生产率增长)将有助于确保未来的繁荣,并创造可用于帮助工人和社会适应这些快速变化的盈余”。⁴

换句话说,生产力和效率可以导致剩余和繁荣。随着商品和服务产出的快速增长,私人和公共部门都会产生经济盈余。麦肯锡提出了“公私合作”的理念,这种理念可以通过数字化让发展中国家摆脱贫困。⁴:但我想更进一步,说这种伙伴关系同样可以帮助发达国家。

毕竟,来自这些项目的更多私人收入可能意味着政府的更多税收,这些税收可以通过各种政府运营的举措回馈给人民。还记得对某些蓝领工人永久失业的担忧吗?政府也许可以用这笔钱为那些失业工人提供社会安全网或普遍的基本收入。⁴:也许这些下岗工人中的一部分可以选择参加一些政府资助的 STEM 培训项目。更好的是,这些项目也可以提供给年轻学生,让他们为日益增长的劳动力做好准备,这些劳动力迫切需要新的人才。

世界各国都已经在实施 AI 战略。2018 年,韩国承诺提供 20 亿美元用于人工智能研究、就业、人才和政府与“人工智能领域的初创企业和公司”的合作。同年,谷歌在加纳开设了非洲首个人工智能研究机构,致力于“与当地大学和研究中心合作,并与政策制定者合作研究人工智能在非洲的潜在用途”。⁴虽然人工智能革命确实有一些沉闷的影响;如果实施得当,它可以提供一个新的繁荣周期,让企业、政府和公民都能交换想法和收入。

John Tukey 所说的“数据分析的未来”是什么?

照片由像素上的科迪·金拍摄

数据、人工智能和自动化将成为自计算机和互联网以来最大的技术颠覆者。它们不仅会扰乱技术领域,还会决定未来几年政策的走向。我们探讨了技术能力的快速提升开启了数据时代的观点。但这回避了一个问题:这些数据驱动的技术是如何在所有行业和企业中如此一致地崛起的?

每个公司都试图走在新技术的最前沿。亚马逊使电子商务成为主流。因此,实体公司开始大量投资于自己的电子商务运营,以便跟上步伐。同样,谷歌、脸书和 LinkedIn 等科技巨头显然拥有极其强大的数据基础设施。这促使实体店之王沃尔玛(Walmart)等公司开发自己的数据战略。难怪从 1990 年到 2010 年,分析和数据科学领域的职场新人比例增加了 10 倍。⁵,这只会越来越多。

我将引用谷歌首席经济学家哈尔·瓦里安 2009 年的预言来结束我的演讲:“我一直在说,未来十年最性感的工作将是统计学家。人们认为我在开玩笑,但是谁会想到计算机工程师会是 20 世纪 90 年代最性感的工作呢?获取数据的能力——能够理解它、处理它、从中提取价值、可视化它、交流它——将是未来几十年非常重要的技能。⁶,这是真的。目前,有许多学生在学习,为甚至还不存在的工作做准备。数据、人工智能和自动化的主流性质相对较新。一旦这些工作有了成果。它们将是丰富的,而且对我们整个社会的运作是必不可少的。

引用和来源:

[1]:约翰·w·图基,《数据分析的未来》《数理统计年鉴》,第 33 卷,第 1 期,1962 年,第 1–67 页。,doi:10.1214/aoms/1177704711。

[2]:贝里,乔纳森。“数据库营销。”Bloomberg.com,彭博,1994 年 9 月 5 日,www . Bloomberg . com/news/articles/1994-09-04/database-marketing。

[3]:按,吉尔。“数据科学的非常短的历史。”福布斯,福布斯杂志,2014 年 10 月 15 日,www . Forbes . com/sites/Gil press/2013/05/28/a-very-short-history-of-data-science/。

[4]:“分析、人工智能和自动化的现在和未来。”McKinsey.com,麦肯锡&公司,2019 年 5 月 11 日,www . McKinsey . com/featured-insights/digital-disruption/whats-now-and-next-in-analytics-ai-and-automation。

[6]:“弹性分布式数据集(RDD)。”Databricks.com,Databricks,2020 年 5 月 15 日,databricks.com/glossary/what-is-rdd.

[7]:阿格拉瓦尔,AJ。“为什么数据对公司很重要,为什么创新即将到来。”Inc.com公司,2016 年 3 月 24 日www . Inc . com/aj-agr awal/why-data-is-important-for-companies-and-why-innovation-is-the-way . html

[8]:“数据挖掘工具让飞行更安全、更高效。”Nasa.gov,美国宇航局,2013 年,spinoff.nasa.gov/Spinoff2013/t_3.html.

[9]:韦特海姆,乔恩。"自动化卡车运输上路了,这是一个技术里程碑,可能会扰乱成千上万的工作岗位."Cbsnews.com,哥伦比亚广播公司新闻,2020 年 3 月 15 日,www . CBS News . com/News/无人驾驶卡车-可能-尽快-2021-60-minutes-2020-03-15/扰乱卡车运输业。

[10]:施耐德,克里斯蒂。“人工智能驱动的自动化客户服务是未来的 10 个理由。”沃森博客,IBM,2017 年 10 月 16 日,www . IBM . com/blogs/Watson/2017/10/10-reasons-ai-powered-automated-customer-service-future/。

[11]:哈夫纳,乔希。“麦当劳:你从触摸屏售货亭买的东西比一个人还多。因此,期待更多的售货亭。”Usatoday.com《今日美国》2018 年 6 月 7 日讯www . USA Today . com/story/money/nation-now/2018/06/07/McDonalds-add-kiosk-citing-better-sales-over-face-orders/681196002/。

[12]:基尔卡尔,肖恩。"人口统计学正在改变卡车司机管理."【Fleetowner.com】,FleetOwner,2017 年 9 月 20 日,www . FleetOwner . com/resource-center/driver-management/article/21701029/demographics-is-changing-truck-driver-management。

[13]: 政府将在国家人工智能项目上花费 2.2 万亿韩元。朝鲜中央日报,2018 年 5 月 15 日,koreajoongangdaily.joins.com/news/article/article.aspx?aid=3048152。

[14]:克拉布特里,贾丝汀娜。"谷歌的下一个人工智能研究中心将是它在非洲大陆的第一个。"Cnbc.com,美国消费者新闻与商业频道新闻,2018 年 6 月 14 日,www . CNBC . com/2018/06/14/Google-ai-research-center-to-open-in-加纳-非洲. html.

[15]:帕蒂尔,DJ。“建立数据科学团队。”2011 年 9 月 16 日,radar.oreilly.com/2011/09/building-data-science-teams.html?奥赖利,Radar.oreilly.comutm_source=feedburner。

[16]:“哈尔·瓦里安谈网络如何挑战管理者。”McKinsey.com,麦肯锡&公司,2009 年 1 月 1 日,www . McKinsey . com/industries/technology-media-and-telecom munications/our-insights/Hal-varian-on-how-the-web-challenges-managers。

数据科学正在成为软件工程

原文:https://towardsdatascience.com/data-science-is-becoming-software-engineering-53e31314939a?source=collection_archive---------7-----------------------

苹果 | 谷歌 | SPOTIFY | 其他 | 剪辑

亚当·沃克斯曼在 TDS 播客

编者按:迈向数据科学播客的“攀登数据科学阶梯”系列由 Jeremie Harris、Edouard Harris 和 Russell Pollari 主持。他们一起经营一家名为sharpes minds的数据科学导师创业公司。可以听下面的播客:

当我想到过去几年我在数据科学中看到的趋势时,也许最重要也最难忽视的是对模型的部署和生产的日益关注。当然,并非所有公司都需要将模型部署到生产中,但在那些需要的公司,数据科学团队在提供软件工程和机器学习解决方案方面面临越来越大的压力。

这就是为什么我想和 Foursquare 的核心技术负责人 Adam Waksman 坐下来谈谈。Foursquare 是一家建立在数据和机器学习基础上的公司:它们是第一批完全规模化的社交媒体推荐服务之一,获得了真正的牵引力,现在帮助超过 5000 万人在世界各国找到餐馆和服务。

我们的谈话涵盖了很多领域,从软件工程和数据科学之间的互动,到他对新员工的要求,再到整个领域的未来。以下是我的一些最佳建议:

  • 软件工程师和数据科学家的技能正在趋同,至少在面向产品的数据科学应用方面是如此,比如构建推荐系统。数据科学家被要求负责部署和生产,软件工程师被要求扩展他们的技能集以包括建模。
  • 作为一名数据科学家,确保你明智地利用时间的最佳方式是将数据科学视为一项产品开发职能。你的模型必须有多精确?尽可能让你的用户体验顺畅,可能不会更好。
  • 历史上,数据科学和软件工程并没有像今天这样紧密结合,特别是在 Foursquare 这样的公司。随着时间的推移,集成似乎可能会继续,因此数据科学家开发良好的软件工程技能比以往任何时候都更重要。
  • 然而,商业智能和分析可能仍然是软件工程和数据科学之外的一个独立部门,因为它对于促进高层战略决策是必要的。
  • 数据科学经常被过分强调的一个方面是模型调优。作为一名数据科学家,你很少会专注于让一个模型好 1%;通常,获得一个“足够好”的模型并呈现在用户面前要重要得多,这就是为什么软件工程和部署技能比模型调整越来越重要。
  • 创业公司和大公司在招聘时有非常不同的风险。因为他们需要快速招聘,初创公司在招聘新的数据科学家时容易犯更多的假阳性错误(所以他们愿意冒险聘用更多不寻常的申请人),而企业规模的公司,职业生涯更长,角色更稳定,倾向于聘用他们有信心会留下来的人。

你可以在推特上关注我!我是 @jeremiecharris 😃

夹子

我们正在寻找能与我们的观众分享有价值的东西的客人。如果你碰巧知道谁是合适的人选,请在这里告诉我们:【publication@towardsdatascience.com】T4。

数据科学已经死了。商业科学万岁!

原文:https://towardsdatascience.com/data-science-is-dead-long-live-business-science-a3059fe84e6c?source=collection_archive---------0-----------------------

商业科学

任何人都可以从不起眼的鲑鱼身上学到的 5 课

马库斯·斯皮斯克Unsplash 上拍摄的照片

数据是一个不可靠的朋友,它几乎没有任何东西是科学的。那又怎样,数据科学?

在过去的 5 年里,我已经面试了 1000 多名数据科学家候选人,争夺 Evo Pricing 的一系列职位。在这个过程中,我了解到媒体正在描绘一个关于这个职业的基本谎言:向现成的算法扔数据真的不是重点。

从根本上重新思考是合适的,而且很可能早就应该进行了。

70 年的历史,2 段 1 图

从本质上来说,数据科学是一系列广泛的数字处理活动的崇高名称,这些活动大多是很久以前发明的,但最近通过应用大大增强的技术设备获得了新的生命:更多的数据、更强的处理能力、更合理的结果以及更低的价格。

三波人工智能根据 Evo 定价,基于 DHL 研究

随着存储和处理数据的成本下降,收集的数据量上升:非常简单的供求法则,或者你可以称之为数据的价格弹性。价格下降,交易量上升。有人将不得不对所有这些东西做些什么。进入数据科学。

围绕数据科学的常见误解

Xcdk 漫画由 Nicholas Olehblogspot (CC)上创作

什么是数据科学

根据伯克利的说法:对专业技术人员来说,这是最有前途和最受欢迎的职业道路之一。

在我看来,“数据科学”这个名字暗示了在寻找问题的过程中作为解决方案的特殊方法。这里,一些数据;我们能用它做什么,任何事?

实际上,这听起来不太理想,不仅是为了建立自己的职业生涯,也是一种商业策略:让我们投入大量资金收集所有这些数据,总有一天会有好的结果。

不幸的是,19 世纪的工业革命让我们的学校和大学培养了大量的蓝领工人,以便高效地为预先包装好的问题提供统一的答案;从那以后几乎没有什么变化。

不如训练人类问正确的问题,让机器找到答案?

数据科学可能是职业生涯的死胡同

即使数据科学的许多风格越来越受欢迎,如人工智能和所有其他与之相关的营销宣传,该职业通常只对早期终身学习者有好处。

年薪超过 8 万英镑的良好前景听起来可能很有吸引力,但平均水平掩盖了挑战的复杂性。要想在数据方面取得真正的成功,一个人必须擅长于具体的、有影响力的和定义明确的问题,而不是成为数据方面的通才专家,或者更糟糕的是成为科学方面的专家,从学术角度来看,后者大多已经过时了——如开篇图片所示。

数据和算法是强有力的工具。但是,就像任何工具一样,它们的好坏取决于人们如何使用它们。

发展商业科学以取得成功

如何利用数据取得成功?关注要解决的问题,要做的工作,而不是数据。

对于那些关注盈利用例的人来说,商业科学给出了所有正确的想法:

  • 待定义、研究的业务问题&已解决
  • 科学、数据驱动的方法
  • 业务影响:可衡量的、客观的结果。

对于非营利和其他用例,逻辑是相似的:从问题/假设开始,使用严格的方法,然后回到学习标准/问题,验证任何影响是否被证明。冲洗并重复,不要分心。

现在的问题是如何完成工作?我们可以直接从一个显然很搞笑的类比中学到很多。

三文鱼第一课:从末端开始

照片由 freejabber 拍摄

不起眼的鲑鱼,除了味道鲜美之外,在其5-10 年的寿命中也做了很多事情:它首先从末端(河口)开始,然后才回到源头(河泉)产卵/产卵,然后为下一代鲑鱼留出空间。

小鲑鱼在泉水旁边出生,然后随着它的成长向下游游去,了解海洋中发生的所有令人兴奋的事情,然后返回河流,在那里它可以坚持自己的生殖权利。

普通的数据科学家可以从不起眼的鲑鱼身上学到很多东西。花太多时间在数据上,然后游向越来越多的数据,可能会让你游得很舒服(智力懒惰),但这是一种幼稚的策略,不会带来长期的成功。

更成熟的鲑鱼会从下游开始,在开始缓慢而痛苦地逆流而上,同时逐渐缩小它们游过的数据量(水)之前,敏锐地专注于确定它们计划解决的问题(河流)以及它们想要产生的影响。

三文鱼第二课:拒绝瀑布方法

我在麦肯锡&公司做了 10 年的管理顾问。在我任职期间,我严格遵循传统的瀑布方法:前期投入大量的时间、精力和客户预算。深入研究一切。煮沸海洋,如果你愿意的话——在这个过程中,杀死所有可怜的鲑鱼!

照片由 Evo 定价 (CC)提供

总的来说,当时我的团队会制定一个初始假设,然后寻找适当的数据来证明或反驳这一点。叫做假设驱动思维。最好的情况是,一种有效的准科学方法;最糟糕的是,这是一个昂贵的确认偏差的例子,数据被用来证明一个事先已经达成共识的决定是正确的。

这一理论可能适合高度战略性的长期计划,但肯定不会让客户知道明天早上和后天该做什么,因为世界变得更快、更复杂、更混乱。正如我的董事长罗伯特·戴蒙德喜欢说的那样,企业像电影一样运行,而不是像照片一样运行。

这种方法可能会回答错误的问题,而且肯定无法创造出自我学习的反馈,而这种反馈对于在市场不断动荡的情况下继续取得成功至关重要。今天的数据是模型

归根结底,这就是为什么敏捷开发的整个概念被发明出来。允许增量调整。

三文鱼第三课:80/20 避开熊

在每一个令人尊敬的瀑布顶端,即使是敏捷的鲑鱼也必须面对它的克星,那种毛茸茸的大野兽。

小心熊。图片:死亡之跃作者彼得·斯塔尔(版权所有)

在逆流游泳时,每条鲑鱼都可能面临意想不到的挑战,显然是不可逾越的障碍,可怕的捕食者。过去看起来平静的水流变成了翻滚的瀑布,突然变得难以驾驭。

在不顾一切地试图超越自己的力量时,大马哈鱼遇到了它的克星,等待午餐的长毛大熊。

完美主义 是商业科学家的克星。

完美主义是一种让生活成为成就或外表的无尽成绩单的特质。这可能是通向不快乐的快速而持久的途径。

水(数据)可能很快成为熊咬的藏身之处。一个淹死的地方,而不是畅游的地方。最好采取不同的、更务实的方法。

80/20 是治疗方法——专注于真正重要的事情,绕过障碍,而不是试图穿过它们。游来游去,寻找躲避熊的方法。边缘案例通常对业务影响很小甚至没有影响!所以何必呢?

三文鱼第四课:少(数据)就是多(讲故事)

应该花更多的时间准备数据驱动的结果,而不是研究它们。这是更多的时间,实际上是更多的时间,而不是最后一分钟匆忙的时间。

大马哈鱼出生在水很少的地方(数据)——提出一个狭窄的问题;然后进入研究的广阔海洋,有大数据和大水帮忙;但之后又回到了小水域。因为解释一个结果意味着挑选和设计影响。

数据驱动的工作是自下而上的;但是沟通必须自上而下才能有效。

在某种程度上,商业科学家应该停止煮沸数据的海洋,开始思考信息:从零开始,如何独自传达信息?从自下而上切换到自上而下模式。

不创建花哨的数据,即高度动态和混乱的数据,因此只对技术人员感兴趣。但实际上,提炼出信息。更少的数据和更多的时间来规划沟通。

有效的沟通总是从所以什么开始,因此也是从最后开始,然后再回到这个断言的百万个理由,以及支持这个结论的百万个数据点。

我强烈推荐阅读芭芭拉·明托金字塔原理来深入了解使用事实进行有效的逻辑叙事。

三文鱼策略 5:布丁中的证据

从最后开始,从有形的影响及其衡量方法开始,是赢得认可和获得信心的关键,否则可能会被认为是模糊的算法能力 pro se 。确定黑盒是否工作需要使用。

你只能通过实际使用卫星导航来了解它的工作原理,而不仅仅是通过研究它。

我特别热衷于定价和供应链应用,在这两种情况下,最大的收获往往是在上游完成的战略工作:规划、设计。但是有一个但是。如果你不能迅速展示出有形的价值,你永远也不会接触到这类东西。

所以我建议从生命周期结束时开始,比如再订购(对于供应链)和降价(对于定价)。即使我非常清楚,例如,最好的降价是你根本不提供的,因为计划从一开始就是准确的。但是,如果没有先在一些有形的东西上赢得人心,打乱计划会有多难呢?

做一个真正的商业科学家,钱会随之而来

学习其他人都在学习的完全相同的数据科学技术,或者投资学习直觉无法与数据驱动的影响相竞争的特定、不受欢迎的业务应用程序,会更有回报吗?

先找到自己的利基,忘掉机器学习,直到你会有一个你想解决的令人兴奋的问题。离开麦肯锡后,为了开始实施我的商业科学理念,我在一个下午就自学了我需要了解的所有知识,但我真的很清楚自己想做什么吗?

在那一天之前,我可能花了十多年的时间,才达到一种专业水平,让我对自己想要处理的特定问题感到舒服。

**要获得博士学位,你首先需要一个研究问题——不像理科硕士,别人会给你所有的问题。

**要成为企业家,你首先需要一个独特的商业想法——不像职业生涯,别人会给你所有的问题。

这是一种人生哲学。

敢于逆流而上,而不是仅仅成为另一名数据科学家,选择追求更有成就感&回报丰厚的商业科学家职业。

快乐的鲑鱼游泳!

PS 如果对商业科学这个话题感兴趣,更多阅读与见解:

* [## 数据科学如何揭示新冠肺炎期间隐藏的定价机会

使用 4 & 9 框架检测无人提及的 20%的价格上涨,等等

towardsdatascience.com](/how-to-monitor-pricing-professionally-444ecff7a450) [## 时尚被打破了。科学正在修复它

转变 5 个核心时尚流程

towardsdatascience.com](/fashion-is-broken-science-is-fixing-it-b771b1ab5b59) [## 20 门新的商业科学课程现已免费开放

介绍 Evo 大学,第一所由公司全团队打造的人人免费大学

medium.com](https://medium.com/datadriveninvestor/20-new-business-science-courses-now-live-for-free-7c300200b566)

Get free access to your monthly summary of Business Science, new software and University-level learning:[**Free access**](https://evouser.com/register)Any questions? Feel free to connect with me on [Linkedin](https://www.linkedin.com/in/fabrizio-fantini/)

数据科学并不适合所有人

原文:https://towardsdatascience.com/data-science-is-not-for-everybody-7486e51d970f?source=collection_archive---------9-----------------------

21 世纪最性感的工作可能不适合你,没关系

马里奥·普里西克在 Unsplash 上的照片

数据科学适合你吗?

2012 年,《哈佛商业评论》称数据科学为“21 世纪最性感的工作”

将近十年后,这个领域仍然没有失去它的魅力。

互联网上有成千上万的视频和文章,围绕数据科学领域描绘了一幅美丽的画面。

他们会告诉你这个领域提供的丰厚薪水和灵活的工作时间。

他们会说:“你所要做的就是学习技能 A、B 和 C。”。"报名参加训练营,学习三门在线课程。那你就准备好找一份数据科学的工作吧!”

由于围绕数据科学的大肆宣传,许多人最终对该领域的真实情况抱有不切实际的期望。

在没有做适当研究的情况下,他们最终做出了一个可能永远改变他们生活的职业决定。

这篇文章并不是要诋毁数据科学领域。我不想阻止任何人从事这一领域的职业。

我个人认为只要你投入适量的工作和时间,任何人都可以成为数据科学家。然而,你需要享受你正在做的事情。

如果你一头扎进这个领域,在对自己将要进入的领域知之甚少的情况下匆忙进行职业转换,你可能会在做自己不喜欢的事情上浪费掉生命中的几年时间。

如果你是一个有创造力、有艺术倾向的人,你会选择艺术专业还是科学专业?

照片由王思然·哈德森Unsplash 上拍摄

我猜你会选择艺术专业,因为这是你喜欢做的事情。

当我面临做出这个决定时,由于周围的大肆宣传,我选择了追求数据科学的职业生涯。我对这个领域的内涵知之甚少甚至一无所知。

和我数据科学班上的几乎所有其他学生一样,我在选择专业之前没有做适当的研究。

对我来说幸运的是,这个决定证明是一个好的决定。我真心喜欢我的工作。但每个人都是不同的,我班上的很多学生都后悔自己的决定,想转专业。

正如我上面提到的,这一切都归结为一件事。不管你是否对你的工作充满热情。

在本文中,我将分解数据科学领域。我会给你一个清晰的描述,告诉你这个领域到底是什么,而不会提到你能得到的估计工资或者工作前景。

我将解释您可以在数据科学领域追求的不同职业道路,并描述每个领域需要什么。

如果这些角色对你有吸引力,那么无论你的职业或教育背景如何,你都应该选择数据科学。

数据科学下的角色

免责声明:“数据科学家”是一个总括术语,用于描述各种不同的角色。这些角色是可以互换的,并且可能会根据您所在的组织而有所不同。这只是一些最常见的数据科学角色的简要概述。

数据工程师

Unsplash 上拍摄的 ThisisEngineering RAEng

如果你以前没听说过,“ 真实世界的数据是杂乱的。 “它是从各种不同的来源收集的——你的手机、闭路电视和其他设备。

这些数据是非结构化的。它需要被清理和流水线化,并以结构化格式存储,以便数据科学家和分析师可以对其进行处理。

一个数据工程师不需要知道机器学习或者数据分析。他们的工作是创建管理大数据的基础设施。

技能: 通常情况下,一个数据工程师需要编写非常复杂的查询来管理大型数据集。因此,他们需要非常了解查询语言。根据他们合作的公司,这可以是 SQL 或 NoSQL 语言。

工具: MySQL、MongoDB、Cassandra 等。

数据分析师

照片由马丁纽霍尔Unsplash 上拍摄

数据分析师是从数据工程师清理过的数据中获得洞察力的人。

为了回答复杂的数据问题,分析师在数据中寻找模式和异常值,并得出意义。

分析师在公司中的角色:

想象一下,A 公司销售糖果。他们想知道在封锁期间糖果销售是否有任何变化。

然后,分析师将查询数据,并查看封锁之前、期间和之后的糖果销售趋势。

为了呈现这些数据,分析师还可以想出可视化的方法——描绘糖果销售增加或减少的图表和图形。

这是一个非常简单的例子,但足以描述公司中数据分析师的角色。

数据分析师可能还需要具备一些业务领域的知识,以便理解客户的请求并根据他们的需求进行交付。

分析师不需要具备机器学习知识,也不需要创建或做任何类型的预测建模。

技能 :分析师需要知道一种查询语言,根据所在公司的不同而不同。了解一种或多种编程语言至关重要。分析师的主要任务是从数据中获得洞察力,因此没有必要创建或写入数据表。可视化工具的知识将是有用的。

工具: MySQL、Hive、Python、Tableau、Excel、PowerBI(这些会根据你工作的公司不同而有所不同)。

数据科学家

亚历克斯·康德拉蒂耶夫在 Unsplash 上拍摄的照片

数据科学家是应用机器学习技术来提出预测模型的人。

这是设计算法并根据提供的数据做出预测的人。他们建立统计模型,并做一些事情,如创建推荐系统或欺诈检测。

根据他们所在的公司,数据科学家可能还需要具备分析师的技能,即接受业务请求、获得洞察力和提出可视化的能力。

数据科学独角兽 这个术语最近被频繁使用。

数据科学独角兽 是一个有能力的人:

  • 提出机器学习模型并做出预测。
  • 拥有特定领域的知识和将业务请求转化为数据问题的能力。
  • 分析数据并提出商业见解。
  • 向客户展示/传达这些见解。

总之,数据科学独角兽是指知道 机器学习数据分析 ,拥有 领域知识 ,并且能够 传达其见解 的人。

然而,在大多数数据驱动的公司中,这些工作是分开的。数据科学家的主要任务是制作机器学习模型,并提出预测。

技能 :一门或多门编程语言,较强的数学背景,统计学,机器学习。

工具: R、Python(Caret、Scikit-Learn 等包)。

你应该选择什么角色?

照片由凯勒·琼斯Unsplash 上拍摄

在数据科学生命周期中,有更多的角色开始发挥作用,包括机器学习工程师和商业见解团队。

我把重点放在了三个主要角色上,但是在做出职业决定之前,你应该对其他角色进行研究。

我上面提到的所有角色都需要一些编程和查询的知识,这些知识很容易学会。你可以参考我写的这篇关于学习如何为数据科学编码的文章。

数据工程可能是这三个角色中技术含量最高的,比任何一个都要重编程。如果你更倾向于编程,了解数据库的来龙去脉,你应该考虑成为一名数据工程师。

数据科学家的角色更偏重于数学。如果你喜欢数学,并有兴趣在统计学方面打下坚实的基础,你应该考虑成为一名数据科学家。如果你想成为一名数据科学家,你需要更强的学术背景,并花更多的时间学习。你将需要知道一些编程(用 R 或 Python),并使用包来建立机器学习模型。

最后,数据分析师是需要从数据中获得并展示洞察力的人。要成为一名分析师,你需要知道如何查询数据,并找到符合客户需求的见解。这可能是所有三个领域中最有创造性的。您需要将业务请求转化为洞察力,并创建可视化。你可能还需要向客户展示这些见解。如果你是一个有创造力的人,有良好的表达和沟通技巧,那么数据分析可能适合你。

本文到此为止!如果你想进入数据科学领域,我希望这个分类能帮助你更好地理解数据科学家的角色。

不要根据周围的炒作来选择职业道路,因为炒作会逐渐平息。

十年后,一个新的领域将会出现,成为新的热潮。

你希望每天早上醒来都期待着你的工作,而不是害怕它。在一天结束的时候,你需要做你喜欢的事情。

做任何让你开心的事

德国数据科学就业市场:演变与存在的问题

原文:https://towardsdatascience.com/data-science-job-market-in-germany-evolution-and-present-problems-5a388f3c2d92?source=collection_archive---------13-----------------------

三份工作简介进入了德国市场

欧洲最大经济体数据科学家就业市场概览。

在过去的三年里,我确实写了并寄出了 200 多份求职申请。作为一个非欧盟公民,我有很大的就业压力,以保持我留在欧洲的权利。我三分之一的邮件都以面试告终。

从统计角度来看,这个数字应该是 1.500 左右。我总是在找到新工作之前就找到了。尽管如此,我还是想总结一下我的印象,并勾勒出德国三个最典型的数据科学工作。

作为德国电子商务现象的数据分析

在过去的三年里,德国的数据科学就业市场呈现出两个主要发展趋势。它从描述性分析转向编程,然后转向云工程。

当我第一次决定我的统计知识不应该安息时,那是 2016 年。

德国以前就有结合数据科学和商业分析的职位描述。他们被称为“WirtschaftsinformatikerIn”,意思是“信息系统经济学家”。时至今日,它仍然是德国大学的热门专业。这些工作主要是由大型工业公司发布的,这些公司拥有足够的数据来进行有意义的分析。

在 21 世纪初,网上商店几乎成为了每一种商业形式的必需品。十年后,许多人注意到他们已经收集了大量的客户数据。他们开始寻找有效利用数据的方法。

这就是两个新职位如何加入德国就业市场的原因。数据分析师会处理各种类型的数据,并有广泛的目标。商业智能专家将关注收入、利润、投资、现金流、物流和成本。

过了一段时间,很明显,简单的表格很无聊,不能让利益相关者满意。另一种工作出现了:数据可视化专家。这个下降得很快。除了几家大型咨询公司,没有一家公司有这么多图表要做。你不需要一个全职员工来做这件事。此外,从各种意义上来说,几乎不可能从你以前没有做过的数据中得出任何有根据的结论。一个可视化只是分析的一部分,而不是一门独立的艺术

在数据可视化从招聘信息板上消失后不久,商业团体面临下一个问题。

数据工程的兴起

网上商店的数据太复杂了,无法用你花钱买到的大多数可视化工具来处理。编程语言脚本必须在原始数据和漂亮的图表之间架起桥梁。那时,雇主开始发布 R 和 Python 程序员的招聘信息。

顺便说一下,在极少数情况下,您会使用 R 或 Python 进行统计建模。这样的工作在德国仍然很少见,雇主更喜欢猎头而不是等待应聘者。你不会在招聘栏上看到很多这样的公告。

原始数据和数据可视化之间的差距缩小后,一个新的差距被确定。原始数据的纯度和可信度长期以来被认为是理所当然的。但是在你的在线平台上追踪顾客是一件复杂的事情,因为有许多竞争者提供他们的工具。

每家公司都不时感到有必要从一种技术转向更好的技术。结果,数据迁移成了你在采访中经常听到的一个新词。

渐渐地,数据科学家不能接受公司的第三份工作,这一点变得很明显。他需要数据工程师的支持。他们将构建提取-转换-加载流程,检查数据一致性,并执行数据迁移。

在所有这些波动中,这些公司同时收集的数据变得更加庞大。德国电子商务商业界迎来了云时代。云和数据工程师融为一体。

那么,让我总结一下。

我们有:

  • 商业分析师
  • 一个数据科学家,实际上是一个统计学家
  • 数据和/或云工程师。

这些是目前德国就业市场上最常见的职位。

定义问题和就业

然而,这些并不完全是杜撰的简介。就业市场更倾向于提供不同比例的业务、数据和云任务的职位。

我的观点是,数据总是有相同的生命周期,即收集、处理和分析。许多雇主确实认为,这三种人只是最好的拥有者。

有时候会很困惑。一则公告说,一家电子商务公司招聘一名商业分析师。在面试中,你意识到他们没有任何合适的数据来开始。此外,许多人没有认识到干净数据的重要性,在拥有工程师之前需要一名分析师。

许多人认为数据工程和数据分析可以在相同的数据上并行运行。当然,分析师和工程师会相互交流,但分析师永远是数据业务价值创造链的最后一环。

如果我们至少有三个工作剖面,我们可能需要一个好的项目经理或产品负责人来协调它们。我的印象是,德国的一些公司认识到了数据驱动项目的组织复杂性。我偶然发现了一些数据经理的招聘公告,但这种情况并不多见。

我没有说“我们需要一个团队领导”。根据项目的不同,上面提到的三者会或多或少甚至毫无关系。我们不希望在每天的团队会议上,领导只和一个人说话,而其他人感到厌烦。此外,如果你有一个人,他能理解这三者,让他代替你的 CTO。

云宇宙

一些当代的云设法创造了整个生态系统,你呆在里面,就像在一个泡泡里。Salesforce 和 AWS 只是最近的两个例子。

与这样的云一起工作的人变得过于狭隘专业化。你必须记住许多特性,因为它们中的许多很快就会从你的平台上退出。你无法跟上替代技术的发展。大云通过提供培训、课程等来帮助他们的超级用户。其中一些甚至是免费的,比如 Salesforce Trailheads。

雇主夸大或错误地认为自己是一名熟练工人,对一个大平台有丰富的经验。许多雇主认为证书是申请人的必备条件。这使得人们投入更多的时间来建立和维护他们与单一平台的联系。因此,他们减少了申请需要其他技术的工作的机会。

数据人员停止相互交流。相反,他们会参加由他们目前所在的特定平台安排的活动和社区。

公司从大云购买许可证,因为大老板希望有可靠的支持。他们相信一个完美的案例队列比 GitHub 更能解决他们的问题。在那里,你没有排队,但必须主动寻找解决方案。

大云分离数据工程师。

需要在电话中澄清的问题

所以,我的建议是找一家使用开源技术的公司。此外,在申请工作或去面试之前,有几个问题你可以在电话里问:

-你要用什么数据?

-它从哪里来?

-数据准备好进行分析了吗?

-有正在进行的项目吗?他们怎么样了?

-你将参与什么项目?

-数据团队有多大(如果有)?

-其他人是做什么的(工程、项目管理、建模等。)?

-有领队吗?他是技术人员还是管理人员?

-如果没有团队领导,谁是你的直接上司?

和你未来的老板或同事打个电话可以为双方节省很多时间。

在我看来,很多公司都痴迷于“数据科学”这个词,因为它听起来很好听。你必须确保你最终会进入一个能为公司和你的未来创造价值的环境。

新冠肺炎期间的数据科学求职技巧

原文:https://towardsdatascience.com/data-science-job-search-tips-during-covid-19-c440c2eadb00?source=collection_archive---------35-----------------------

安娜·奥扎在 Unsplash 上的照片

2016 年 5 月 13 日,本该是快乐的一天。在经历了紧张而愉快的九个月后,我从伯克利获得了硕士学位。与其他早晨不同,我完全忽略了臭名昭著的贪睡按钮,迅速打开了我的收件箱,因为里面有可能决定我一天成败的消息。我几乎没有睁开眼睛,闹钟响个不停,我疯狂地打开邮件,里面有我几天前参加的一次现场面试的结果。

“感谢您抽出时间申请我们的数据科学…。”,我看够了。在那一瞬间,毁灭和绝望吞噬了我半醒的身体,耗尽了我阅读其余部分的能量,我知道这只是一种说我不够好的好方式。底线仍然是我在毕业前没有找到工作,我只想认输。那天我确实放弃了,但我没有放弃第二天或下个月。我继续努力工作,终于在毕业一个月后获得了一个惊人的机会。快进到今天,老实说,我感谢星星的拒绝,因为如果我走过那条路,我不会有同样程度的成功。

生活是考验我们毅力的专家。虽然对我来说,将我的沮丧与当前在全球疫情中找工作的沮丧进行精确的比较是不公平的,但要知道没有人会预料到这一点。这只是对宇宙随机性的一个证明,这是对你坚韧不拔的又一次考验。然而,要知道你并不孤单,每个人都和你有相似的处境,几乎每个地方都在挣扎。如果你正在找你的第一份工作,被解雇了,或者试图找一份新工作,事情可能会变得非常棘手和不确定。以下是一些在这段时间里寻找工作的小技巧:

提示 1 —应用应用应用

老实说,找到你的第一份工作或向新角色进行职业过渡通常是一场数字游戏。你运用得越多,你听到反馈的可能性就越大。我的意思是,那是在一切正常的时候,在这个时候,你需要做 10 次。找到每一个可能的工作机会并申请。使用你的大学职业网站 LinkedIn、的确WayUpAngelList ,申请申请申请。如果你没有多年的工作经验或工作描述中列出的所有技能,不要担心,只要申请就可以了,这样你的简历就在那里了。它出现的越多,就越有可能引起别人的注意,得到回应的机会也就越大。

此外,查看级别的实时名单。仅供参考坦诚了解哪些公司仍在招聘或暂停招聘。

提示 2-网络

这真的取决于你找到工作的时间框架。如果你的工作时间接近 1-2 个月,那么我会建议你利用技巧 1,只尝试在 LinkedIn 上为你真正感兴趣的公司建立联系和网络。现在每个人都在家,所以人们有更多的时间,也更愿意帮忙。联系相关人员,问他们是否可以和你谈谈他们的工作,然后提出向你推荐他们公司一个空缺职位的可能性。即使他们不能,为未来建立联系总是很棒的。就像申请工作一样,你发出的联系请求越多,成功的机会就越大。此外,请记住,在你的 LinkedIn 请求中一定要包含个性化信息。

另一个有用的资源是虚拟办公时间。他们每周与数据科学家、数据工程师、分析师、产品经理等举行虚拟问答会议,这是回答您具体问题的好方法。

技巧 3——拓宽你的求职资料

随着现在供应的增加和需求的减少,数据科学的空缺可能会更具竞争力和更难获得。因此,建议你通过寻找相关的工作简介来拓宽视野。数据分析师、业务分析师、产品分析师、营销分析师都是具备数据科学技能的人非常适合的角色。虽然这可能不完全是你想做的工作,但它有助于你迈出第一步。以后总会有机会在公司的团队中流动,也有机会在任何与数据相关的职位中应用您的数据科学技能。

技巧 4——学习技巧

鉴于目前的情况,我可以说,在你的整个生活中,再也不会有其他时间一直坐在家里是既酷又正确的事情了。在研究生院时,对我来说最大的难题是想出去玩,还是坐在家里学习以获得一份好的职业。当你在大学门口拥有这个充满活力的学生社区时,很难有长远的想法。但在这样一个没有社会压力或承诺的时代,利用你拥有的额外时间来学习新的数据科学技能。阅读一些你不知道的话题,参加一个在线课程或者做一个项目来充实你的简历。相信我,就像在熊市投资一样,你的时间投资从长远来看肯定会有回报。

你可以做的另一件事是向小型创业公司伸出援手。许多大学都有创业加速器和孵化器项目,许多创业公司都需要帮助。在你寻找其他全职机会的时候,这是积累一些有用的实践经验的好方法。这在你的简历上肯定会很好看。

提示 5——持怀疑态度(仔细检查公司和行业)

这是一个不确定的时代,我们正处于一个未知的经济领域,所以即使你得到了一份工作或实习机会,也要仔细研究它所在的公司和行业。你希望为一家拥有强大资产负债表或资金的公司工作,能够度过这场风暴,并在后冠状病毒时代取得成功。例如,旅游、零售和运输可能不是现在进入的最佳行业,但任何大型科技公司或 Slack 或 Zoom 这样在家中工作的公司可能是更好的选择。仔细审查给你工作机会的公司。你不希望最终出现这样的情况:你得到了一份工作,但随后又被取消,或者你被解雇了几个月,然后又回到起点。

总之,我所能说的是,现在绝对是艰难的时期,这是你必须变得更坚强的时候。老实说,坚持做一些事情,任何与上面五个建议相关的事情,放弃是你现在可能犯的最大的错误。更重要的是,即使说了这些,也要记住生活的第一条规则是活着。你的健康应该是你的头等大事。照顾好自己和他人,对社会负责,锻炼身体,学习技能,建立关系,努力工作,努力工作,向世界展示你在困难时期坚持不懈的决心,像我一样,总有一天你会有一个好故事可以讲述。很有可能,甚至更好。

你能行的!

希望这有帮助!你可以在这里了解更多关于我的数据科学之旅。如果你有任何问题,可以通过 LinkedIn 联系我——www.linkedin.com/in/joelprince。聊的开心!

数据科学学习路径

原文:https://towardsdatascience.com/data-science-learning-path-88fa39c469fb?source=collection_archive---------36-----------------------

学习数据科学、机器学习和深度学习的可靠计划

来源

对学习数据科学、、机器学习、深度学习感兴趣?这里有一个坚实的计划来做到这一点。

用于数据科学的 Python

Python 是数据科学、机器学习和深度学习中最常用的语言。这很容易理解。所以我建议你从熟悉这门语言开始。不过,需要理解的最重要的概念是数据结构Python 函数

数值计算的数值

一旦掌握了 Python,现在就可以继续学习 NumPy 了。NumPy 是一个用于数值计算的软件包,例如平均值等。大多数其他数据科学软件包也是基于它构建的,因此这是一项必备技能。这里要理解的最基本的一项是 NumPy 数组 和它们上面的操作

查看 Python 中的完整数据科学&机器学习训练营立即开始学习。

熊猫的数据操作

接下来,你需要一个用于数据清理操作的工具。熊猫就是一个建立在 NumPy 基础上的工具,它可以做到这一点。由于大多数数据通常不干净,这是一个你必须拥有的工具。这里要理解的最重要的事情是熊猫数据帧以及如何操纵它们

用 Matplotlib 可视化

既然你可以清理和操作你的数据,如果你能以一种可视化的方式分享你的分析就好了。输入 Matplotlib。这是一个可以用来可视化数据分析结果的工具。你可以用它来可视化类别分布关系——仅举几例。

Seaborn 的美丽可视化

Seaborn 构建在 Matplotlib 之上,将会给你比 Matplotlib 更好看的视觉效果。这个工具很容易使用。然而,重要的是要注意,如果你想执行非常复杂的视觉效果,你可能必须回到 Matplotlib。

使用 Plotly 进行交互式可视化

Plotly 允许你创建可以互动的视觉效果。例如,当你悬停在某个区域上时,可以看到更多信息,而可以放大和缩小你的可视化效果。您还可以使用与 Plotly 集成的 Mapbox 进行高级可视化操作,如映射

使用 Dash 的交互式 Web 应用程序

Dash 是一个 web 框架,它将使您能够使用 Plotly 构建交互式数据科学应用。任何在 Plotly 中实现的可视化也可以在 Dash 中实现。该工具通过标签经由 Dash HTML 组件提供所有 Html。它应该通过 Dash 核心组件提供高级交互视觉效果。其工作原理是破折号回调。你通常会给这些回调函数提供一些输入输出。每当输入发生变化,Dash 就会启动回调函数。很神奇,对吧?

使用 Streamlit 的数据科学应用

如果你正在寻找 Dash 的替代品,那么 Streamlit 就是你的选择。这是一个开源框架,数据科学家和机器学习工程师可以在几个小时内创建出漂亮的高性能的应用。

使用 Power BI 台式机构建仪表板

如果你不想写任何代码,那么你可以看看 Power BI Desktop 。尽管如此,在将数据导入到 Powe BI Desktop 之前,您仍然需要找到一种清理数据的方法,我想不出比使用 Python 更好的方法了。

参加 Python 中的完整数据科学&机器学习训练营立即开始学习。

机器学习

接下来你可以做的就是深入机器学习的世界。在这里,你将学到进行监督非监督机器学习的最酷的技巧。开源的 Scikit-Learn 包将提供你需要的所有工具。这里你的重点将是了解数据如何准备用于机器学习模型,数据分割以及评估你的机器学习模型。

关联规则挖掘

这是一种用于发现产品之间关系的技术。如果你在超市等零售领域工作,你会发现它很有用。这项技能可以帮助你通过识别经常一起购买的物品来增加销售额。例如,在药房中,您可能会发现购买药物 A 的患者也购买了药物 B。询问购买了药物 A 的患者他们的处方中是否也有药物 B 才有意义。你已经在网上商店或学习平台上看到了这种技术,其形式是经常一起购买部分。

自然语言处理

如今我们有如此多的文本形式的数据。这些数据可以从博客以及 Twitter 等社交网站上获得。在这个世纪,从数据中获取意义的能力是一项不可或缺的技能。然而,处理文本数据并不容易。你必须找到一种用数字形式表示文本数据的方法。好消息是,有很多工具可以让你做到这一点。

深度学习

一旦你掌握了机器学习的复杂性,现在是你研究深度学习的时候了。这只是机器学习的一个实现,涉及到神经网络的应用。这些网络模仿人脑的工作。当你有一个大的数据集时,深度学习是最常用的。它还广泛用于计算密集型过程,如图像分类、图像分割物体检测。最流行的工具是 TensorFlowKerasPyTorch

自动化机器学习

这是一个相当新的领域,但它正像风暴一样席卷全球。想象一下,如果你可以把你的数据输入一个模型,它会为你做任何事情。这包括数据处理调整模型以获得最佳结果。这是 AutoML 的承诺。能够让你做到这一点的工具包括 自动学习自动 Keras

查看 Python 中的完整数据科学&机器学习训练营立即开始学习。

最后的想法

希望这能让你了解你的数据科学学习之路会是怎样的。这只是冰山一角,一旦你学会了这些,你会惊奇地发现你仍然可以在互联网上找到大量的数据科学工具和技术。不过,关键是要开始。

如果你想了解所有这些以及更多,请使用这一有限的优惠优惠券参加 Python 中的 数据科学&机器学习训练营。

如何使用 SQL 从表中选择数据

原文:https://towardsdatascience.com/data-science-lesson-2-selecting-data-using-sql-3aaf8258619d?source=collection_archive---------30-----------------------

在保持社交距离的同时学习数据科学

以行尸走肉为例,说明如何使用 SQL 来选择感兴趣的数据

丹尼尔·延森Unsplash 上拍照

介绍

虽然在家里自我隔离,但我和我的朋友们决定作为一个小组一起学习数据科学。到目前为止,我们已经上了一节课,我对这个团队的热情感到非常高兴。通过提问,我的朋友们帮助我解释得更清楚,并互相帮助学习。希望我们能够保持这一势头,并继续共同开发新的数据科学技能。

如果您想在全球疫情期间加入我们学习数据科学,请随时关注。你可能想回到上一课以便从头开始。否则,如果您对学习如何使用 SQL 从表中选择数据特别感兴趣,那么您就来对地方了。

前一课

上一课中,我们学习了如何使用 SQL 创建一个表并将一些数据放入其中。这是使用 CREATE TABLE 和 INSERT INTO 关键字完成的。为了好玩,我们在示例中使用了儿童节目 Bluey。

这一课

现在我们已经知道了如何从第一课创建数据表,让我们学习如何访问它。

使用 SQL 关键字 SELECT,您可以访问表中的所有数据、特定的列或特定数量的记录。在本课中,我们将逐一介绍这三种情况。此外,我们将练习如何使用 SELECT DISTINCT 关键字选择数据而不包含重复值。

与上一课中作为例子的儿童节目不同,本周我们将使用《行尸走肉》。当然不是给孩子们的😉

我们想要解决的问题

在《行尸走肉》第一季中,有一些好人和一些坏人,还有一些介于两者之间。但是我们想找出最致命的前 5 个角色。

为了找出谁最擅长杀人,我们需要找出我们想要使用的标准。《行尸走肉》中的人物出动了很多‘行尸’,但也有相当一部分还杀死了几个人类。

我们将把最致命的角色定义为杀死最多僵尸的角色。然后,如果杀死僵尸的人数有一个平手,杀死最多人类的人将被誉为两人中最致命的角色。

数据

我们有一个包含《行尸走肉》中角色信息的表格,我们将用它来解决我们的问题。数据集主要来自这篇文章。我稍微改变了一些数字,以说明本课的一个要点。

因此,现在我们需要找出如何从表中选择正确的数据,找出谁是最致命的。

从表中选择所有数据的语法:

就像我们在第一课中看到的,您可以使用星号来表示您想要选择表中的所有数据。运行查询时,将返回表中所有可用的列。

SELECT
    *
FROM 
    name_of_table;

这是您可以编写的最简单的查询之一。

为什么代码中会有缩进?

缩进在 SQL 中不做任何事情。我这样做只是为了让我的代码更容易阅读。一般来说,你应该遵守你的组织风格指南中的缩进规则。然而,我们没有一个风格指南,所以你可以用任何你喜欢的方式来组织你的代码。重要的是要知道在其他编码语言中,比如 Python,缩进是有效的。如果你没有在 Python 中使用正确的缩进,你的代码将会抛出一个错误。

选择特定列的语法:

如果只想从较大的表中选择特定的列,可以列出希望从查询中返回的列的名称。

SELECT 
    name_column_one, 
    name_column_two, 
    name_column_five
FROM
    name_of_table;

这非常有用,特别是对于非常宽的数据集,其中的列比结果表中显示的要多得多。例如,如果您正在查看人口普查数据,但只对许多可用列中的几列感兴趣,那么如果您只选择感兴趣的那些列,就更容易看到您想要的值。

问题 1: 你能说出上表中有多少列吗?

选择特定数量记录的语法:

关键字 LIMIT 可用于选择特定数量的记录。当使用 LIMIT 时,从表的顶部开始,只返回指定数量的记录。如果您的数据按特定顺序排列,这将非常有用。

如果您想按感兴趣的列对数据进行排序,可以使用 ORDER BY 关键字。ORDER BY 放在 FROM 语句之后。若要使用 ORDER BY,您需要指定要使用哪一列来决定数据返回的顺序。

您还可以分别使用 ASC 或 DESC 来决定是按升序还是降序排列。

SELECT 
    *
FROM
    name_of_table 
ORDER BY
    name_column_one DESC
LIMIT 10;

上面的代码将从表中选择所有的列,并返回前 10 条记录。这是在根据第一列中的值对它们进行降序排列之后。

没有重复值的选择语法:

SELECT 和 SELECT DISTINCT 的语法是相同的。不同之处在于它返回的结果。

SELECT DISTINCT
    name_column_one
FROM
    name_of_table;

SELECT DISTINCT 只返回所选列的不同值,因此所有重复项都将被删除。如果您只选择一列,这很容易理解。但是,您也可以使用 SELECT DISTINCT 来选择列的唯一组合。

SELECT DISTINCT
    name_column_one,
    name_column_five
FROM
    name_of_table;

因此,使用上面的代码,您将得到第一列和第五列中的值的不同组合。即使第一列中有重复的值,如果在相同的行中第五列有不同的值,也将返回这两行。

现在让我们试着解决我们的问题

  1. http://sqlfiddle.com/(或者你可以用https://www.db-fiddle.com/,因为我发现 SQL fiddle 最近停机了一段时间)
  2. 在左边的框中放入创建表并插入到下面的查询中
CREATE TABLE walking_dead(
    first_name varchar(255),
    last_name varchar(255),
    hair_colour varchar(255),
    walker_kills int(255),
    human_kills int(255),
    number_of_hands int(255)
);INSERT INTO walking_dead (first_name, last_name, hair_colour, walker_kills, human_kills, number_of_hands)
VALUES
    ('Maggie', 'Greene', 'brown', 64, 5, 2),
    ('Carol', 'Peletier', 'grey', 57, 27, 2),
    ('Merle', 'Dixon', 'dark blonde', 20, 6, 1),
    ('Tyreese', 'Williams', 'black', 59, 0, 2),
    ('Morgan', 'Jones', 'black', 40, 3, 2),
    ('Glenn', 'Rhee', 'black', 185, 5, 2),
    ('Michonne', '', 'black', 141, 10, 2),
    ('Andrea', 'Harrison', 'blonde', 39, 0, 2),
    ('Sasha', 'Williams', 'black', 73, 4, 2),
    ('Abraham', 'Ford', 'red', 49, 4, 2),
    ('Shane', 'Walsh', 'brown', 28, 3, 2),
    ('Daryl', 'Dixon', 'brown', 185, 22, 2),
    ('Rick', 'Grimes', 'brown', 216, 35, 2),
    ('Philip “The Governor”', 'Blake', 'brown', 26, 30, 2)
;

3.单击“构建模式”按钮

4.在右边的框中输入您的问题

5.运行下面的查询,看看它是否会返回您所期望的结果:

SELECT
    hair_colour, 
    number_of_hands
FROM
    walking_dead
ORDER BY
    hair_colour ASC, number_of_hands DESC;

提示:注意列的排列顺序以及结果中的重复值

6.运行下面的查询,看看它是否会返回您所期望的结果:

SELECT DISTINCT
    hair_colour, 
    number_of_hands
FROM
    walking_dead
ORDER BY
    hair_colour ASC, number_of_hands DESC;

提示:注意添加 DISTINCT 关键字如何改变返回的结果

7.运行下面的查询,看看它是否会返回您所期望的结果:

SELECT
    first_name, 
    human_kills
FROM
    walking_dead
ORDER BY
    human_kills DESC
LIMIT 10;

提示:注意返回记录的顺序和数量。

8.运行下面的查询,看看它是否会返回您所期望的结果:

SELECT
    first_name, 
    human_kills
FROM
    walking_dead
ORDER BY
    first_name ASC
LIMIT 10;

提示:注意与之前的查询相比,返回的结果有所不同。

练习 1: 编写一个查询来选择该表中的所有数据

练习 2: 编写一个查询来创建数据集中所有不同姓氏的列表

练习 3 :编写一个查询,创建该数据集中所有不同姓氏、头发颜色组合的列表

练习 4: 选择前 5 名最致命角色的全名、行者 _kills 和人类 _kills。这是基于杀死僵尸是最重要的,其次是杀死人类的标准。

我们是如何学习这一课的

我们学习小组里至少有一个《行尸走肉》的超级粉丝。她很高兴得到一个僵尸为基础的教训😜

该小组的一些成员比我们最初计划的时间表晚了一点,他们仍在学习这一课。但是当学校放假的时候,你有三个孩子要照顾,你能做什么呢?或者你正在努力让你的公司和员工度过这次金融危机。与我一起学习数据科学的女性在她们的生活中有很多其他事情要做,所以我完全理解她们有时会妨碍我。

话虽如此,但每个人在力所能及的情况下,似乎仍然热衷于完成这一课。我的伙伴们这周已经完成了课程,他们做得非常好。他们似乎很好地掌握了从表格中选择的基本知识。我迫不及待地想看看,当我们转到一些稍微复杂一点的 SQL 方法时,它们会怎么样。

下一课

在下一课中,我们将重点关注数据过滤。在 SQL 中有许多不同的方法来过滤表,但是我们将集中学习使用关键字 WHERE、AND、OR、LIKE、in、BETWEEN 和 NOT。

除了数据,我的另一个爱好是绘画。你可以在 www.katemarielewis.com 的找到我的野生动物艺术

社交距离学习数据科学的所有课程(LDSWSD)

[## Ldswsd -走向数据科学

阅读《走向数据科学》中关于 Ldswsd 的文章。共享概念、想法和代码的媒体出版物。

towardsdatascience.com](https://towardsdatascience.com/tagged/ldswsd)

如何使用 SQL 过滤数据集

原文:https://towardsdatascience.com/data-science-lesson-3-filtering-data-using-sql-45d90986487f?source=collection_archive---------12-----------------------

在保持社交距离的同时学习数据科学

以 Charmed 为例,说明如何使用关键字 WHERE、AND、OR、LIKE、IN、BETWEEN 和 NOT 使用 SQL 从表中过滤数据

卢多维克·沙雷特Unsplash 上拍摄的照片

介绍

在过去的几周里,我一直在帮助我的一小群朋友学习 SQL。他们想学习数据科学,因为他们被困在社交距离中,有更多的空闲时间。我认为这是一个伟大的想法,并提出帮助指导他们通过它。

这是我们使用 SQL 的第三课。如果你想加入学习,请随时回到第并投入其中。或者,如果您只是想学习如何使用 SQL 过滤数据,我希望这一课对您有所帮助。

前一课

上一课中,我们重点介绍了从表中选择数据的不同方法。以行尸走肉为例,我们从一个表中选择所有数据,选择特定的列,选择有限数量的记录,选择不同的值,并对结果进行排序。我们使用 SELECT、SELECT DISTINCT、LIMIT、ORDER BY 关键字来实现这一点。

这一课

这一课我们可以真正了解 SQL 的一些更常用的函数。既然我们已经知道了如何制作一个表,将一些数据放入其中并选择数据,那么我们可以学习如何在选择数据时操作数据。我们将重点学习筛选表。

最重要的是,我们将学习 WHERE 语句的作用。此外,我们将练习使用关键字 AND、OR、LIKE、In、BETWEEN 和 NOT 与 WHERE 连用。

我们想要解决的问题

《魅力》是我成长过程中最喜欢的电视节目之一。我过去常常把每一集都录下来,然后和我妹妹一起看几遍,然后在下一周我们就会看到新的一集。这就是为什么我选择用《魅力》中的角色作为本周的例子。

我们有一个关于 charmed 中一些角色的数据表,但我们只想选择表中的一部分。我们的问题是,我们只想要有血缘关系的姐妹的信息,只想要 2001 年之前透露的她们的活跃力量的信息。

在这节课中,我们将学习从魅力信息表中选择感兴趣的数据所需的技巧。

数据

下表包含了《魅力》中角色的数据。如果每个角色有多重能力,他们可以在表格中有多行。此外,我们还有关于这些异能的额外信息,比如异能的类型和显现时间。

使用 WHERE 过滤数据的语法

向查询中添加 WHERE 语句意味着将对表进行筛选,以便只返回满足 WHERE 语句后的条件的记录。我以前写过一篇文章比较 SQL 中的 WHERE 和 HAVING,以防你想阅读如何使用 WHERE 的另一个例子。

下面你可以看到 WHERE 子句的一个最简单的版本。

SELECT 
    *
FROM
    name_of_table
WHERE
    name_column_one = value_of_interest
;

Equals 不是唯一可以用于 WHERE 语句的运算符。其他常见的运算符包括:

因此,根据您想要达到的结果,您可以使用任何适合您的目的的操作符。

如果您希望您的结果满足多个条件,该怎么办?

您可能希望筛选数据,使其满足两个或更多条件。在这种情况下,您可以使用和。例如,如果希望一列等于感兴趣的值,而另一列只包含大于另一个感兴趣的值的值,则可以用 and 分隔这两个条件。在这种情况下,将只返回满足查询中所有条件的记录。

SELECT 
    *
FROM
    name_of_table
WHERE
    name_column_one = value_of_interest
  AND
    name_column_five > second_value_of_interest
;

如果只需要满足可用条件中的一个呢?

如果你不需要你的过滤器非常严格,只需要满足一个或另一个条件,那么你可以使用 or。通过用 OR 替换 AND,这意味着如果一个记录满足可用条件之一,那么它将被返回,而不是它必须满足查询中的两个条件。

SELECT 
    *
FROM
    name_of_table
WHERE
    name_column_one = value_of_interest
  OR
    name_column_five > second_value_of_interest
;

如果你想变得有点棘手,你甚至可以一起使用 OR 和 and。您只需要在 OR 部分加上括号,这样首先满足条件,然后也需要满足 and 条件。

SELECT 
    *
FROM
    name_of_table
WHERE
      (name_column_one = value_of_interest
    OR
      name_column_five > second_value_of_interest)
  AND
    name_column_two != third_value_of_interest
;

如果不知道利息的确切值呢?

如果您不想精确匹配某个值,而是希望条件查找模式匹配,可以使用 like。

SELECT 
    *
FROM
    name_of_table
WHERE
    name_column_one LIKE pattern_of_interest
;

您可以使用许多不同的模式。要编写它们,您可以使用由%或 _ 组成的通配符。%用于表示一个、多个字符或根本不表示字符。%通配符非常通用。相反,_ 仅用于表示单个字符。因此,它允许你在创建模式时更加具体。

下表显示了您可以使用通配符创建的一些示例模式:

如果你有很多感兴趣的价值观呢?

在许多情况下,您可能希望根据值列表来筛选数据。这就是中的 SQL 关键字发挥作用的地方。它的工作方式与您在带有多个 OR 条件的 WHERE 语句中使用等号的方式相同。这只是编写查询的一种更加干净和简单的方式。返回的记录只需要与 in 语句中列表中的一个值匹配。

SELECT 
    *
FROM
    name_of_table
WHERE
    name_column_one IN (value_1, value_2, value_3, value_4, value_5)
;

如果您想变得更复杂,您甚至可以将另一个查询放入括号中来选择值列表。另一个查询中的这种类型的查询称为子查询

SELECT 
    *
FROM
    name_of_table
WHERE
    name_column_one IN (
        SELECT 
            name_column_two 
        FROM 
            name_of_table)
;

如果你有一大堆感兴趣的价值观呢?

如果您有大量感兴趣的值,并且不想列出包含所有值的列表,您可以使用关键字 BETWEEN。在这种情况下,您需要提供起始值和结束值。这两个值由 AND 关键字分隔。

许多不同的数据类型可以用作 BETWEEN 的起始值和结束值。例如,您可以使用整数、浮点数、日期或字符串。

SELECT 
    *
FROM
    name_of_table
WHERE
    name_column_one BETWEEN value_1 AND value_2
;

如果您有多个想要排除的值,该怎么办?

如果希望排除而不是包含特定的值,可以使用关键字 NOT。在这种情况下,我在 In 子句前放 NOT。正如您所料,只有不匹配列表中任何值的记录才会被返回。

SELECT 
    *
FROM
    name_of_table
WHERE
    name_column_one NOT IN (value_1, value_2, value_3, value_4, value_5)
;

NOT 也可以用于其他条件,而不仅仅是 IN。但我认为这是使用 NOT 的最有用的例子之一。

现在让我们试着解决我们的问题

  1. http://sqlfiddle.com/的(或者你可以用 https://www.db-fiddle.com/的,因为我发现 SQL fiddle 最近停机了)
  2. 在左边的框中放入创建表并插入到下面的查询中
CREATE TABLE charmed(
    first_name varchar(255),
    last_name varchar(255),
    power varchar(255),
    power_type varchar(255),
    power_revealed date
);INSERT INTO charmed(
    first_name,
    last_name,
    power,
    power_type,
    power_revealed
)
VALUES
    ('Phoebe', 'Halliwell', 'premonition', 'passive', '1998-10-07'),
    ('Piper', 'Halliwell', 'freeze time', 'active', '1998-10-07'),
    ('Prue', 'Halliwell', 'telekenesis', 'active', '1998-10-07'),
    ('Prue', 'Halliwell', 'astral projection', 'active', '2000-01-13'),
    ('Leo', 'Wyatt', 'healing', 'active', '1999-02-17'),
    ('Leo', 'Wyatt', 'orbing', 'active', '1999-02-17'),    
    ('Paige', 'Matthews', 'orbing', 'active', '2001-10-04'),
    ('Phoebe', 'Halliwell', 'levitation', 'active', '2000-10-05'),
    ('Piper', 'Halliwell', 'molecular combustion', 'active', '2001-05-03')
;

3.单击“构建模式”按钮

4.在右边的框中输入您的问题

5.运行下面的查询,看看它是否会返回您所期望的结果:

SELECT 
    *
FROM
    charmed
WHERE
    power_type = 'active'
;

6.运行下面的查询,看看它是否会返回您所期望的结果:

SELECT 
    *
FROM
    charmed
WHERE
    power_type = 'active'
AND
    power_revealed!='1998-10-07'
;

7.运行下面的查询,看看它是否会返回您所期望的结果:

SELECT 
    *
FROM
    charmed
WHERE
    power_type = 'active'
OR
    power_revealed!='1998-10-07'
;

注意:将这个查询的结果与前一个查询的结果进行比较。所改变的只是“或”被“和”所取代

8.运行下面的查询,看看它是否会返回您所期望的结果:

SELECT 
    *
FROM
    charmed
WHERE
    first_name LIKE 'P%'
;

9.运行下面的查询,看看它是否会返回您所期望的结果:

SELECT 
    *
FROM
    charmed
WHERE
    power IN ('orbing', 'healing')
;

10.运行下面的查询,看看它是否会返回您所期望的结果:

SELECT 
    *
FROM
    charmed
WHERE
    first_name NOT IN (SELECT 
                           first_name
                       FROM
                           charmed
                       WHERE
                           first_name LIKE 'P%')
;

11.运行下面的查询,看看它是否会返回您所期望的结果:

SELECT 
    *
FROM
    charmed
WHERE
    first_name NOT LIKE 'P%'
;

注意:将这个查询的结果与前一个查询的结果进行比较

12.运行下面的查询,看看它是否会返回您所期望的结果:

SELECT 
    *
FROM
    charmed
WHERE
    power_revealed BETWEEN '1999-01-01' AND '2000-12-31'
;

13.运行下面的查询,看看它是否会返回您所期望的结果:

SELECT 
    *
FROM
    charmed
WHERE
    power BETWEEN 'astral projection' AND 'healing'
;

练习 1: 编写一个查询,该查询过滤表以仅包括血亲(Prue,Piper,Phobe,Paige),仅包括有效的异能,并且仅包括 2001 年之前显示的异能。

练习 2: 看看是否有其他方法可以编写不同的查询来选择与第一个练习中相同的数据。你能想到的不同方法越多越好。尽可能多地使用本课中不同的 SQL 关键字。

我们是如何学习这一课的

我觉得在这一课中,在过去几周的介绍性课程之后,我们真正进入了 SQL 能做什么的实质内容。我们的学习小组在我们的进展中有点分散,因为人们有许多其他的承诺。所以全组还没有完成这一课。

然而,那些做得很好的人。人们似乎喜欢练习 2 的开放性和用几种不同方法解决同一问题的挑战性。

希望小组中忙碌的成员能够赶上其他人,这样我们就可以很快再次学习同一课。

下一课

现在我们知道了如何筛选数据,下一课我们将学习如何汇总数据。我们将使用关键字 MIN、MAX、COUNT、AVERAGE 和 SUM,并以辣妹为例进行说明。

除了数据,我的另一个爱好是绘画。你可以在 www.katemarielewis.com 的找到我的野生动物艺术

社交距离学习数据科学的所有课程(LDSWSD)

[## Ldswsd -走向数据科学

阅读《走向数据科学》中关于 Ldswsd 的文章。共享概念、想法和代码的媒体出版物。

towardsdatascience.com](https://towardsdatascience.com/tagged/ldswsd)

数据科学,机器学习还是人工智能:我应该从哪里开始?

原文:https://towardsdatascience.com/data-science-machine-learning-or-ai-where-should-i-start-32a860564387?source=collection_archive---------23-----------------------

图片由 StartupStockPhotos 来自 Pixabay

剧透:答案往往是“以上都不是”。

这些天,人们几乎可以在看新闻时不接触到数据科学、机器学习或人工智能。而且有一个很好的理由——通过互联传感器和设备收集的数据的爆炸,加上人工智能的突破,加上计算能力的急剧增长,已经将这些主题推到了每个科技公司的优先事项清单的首位。由此产生的对具有这些技能的技术人才的需求有据可查——根据 LinkedIn 2019 年的“新兴工作”报告,在过去四年中,需要这些技能的职位的招聘量每年增长 74%。数据科学家和人工智能工程师的平均工资远高于 10 万美元,该领域的顶级专家的工资高达几十万美元。

因此,各种各样的大学和私人教育课程如雨后春笋般涌现,以满足快速增长的行业对这一人才的需求,从私人训练营到数据科学、机器学习或人工智能方面的大学硕士和博士课程。随着各年龄段的人被该领域令人兴奋的工作机会和高薪所吸引,对这些项目的需求正在激增。但是,对于那些希望进入这个领域或扩展自己技能的人来说,一个核心问题往往是不清楚的:

我应该学习数据科学、机器学习还是人工智能?真的有区别吗?

对上述问题的简短回答是“是”。但是差异并不总是清晰的,它们之间的界限有时是模糊的。许多大学提供“数据科学”、“机器学习”或“人工智能”(或三者的某种组合)的研究生课程,他们自己在解释他们的重点方面做得很差,偶尔会与同行大学不一致地应用这些术语。这使得许多感兴趣的学习者不清楚他们应该关注这些领域中的哪一个。如果不清楚这些术语,新的学习者就会不知从哪里开始涉水阅读这些主题的大量文章、书籍、在线课程和视频。不幸的是,很容易从错误的地方开始,很快就超出了你的能力,并因其复杂性而气馁。

那么这些术语之间有什么区别呢?

我们先从“数据科学”说起。数据科学是指收集分析数据的方法、工具和实践,以获得见解,从而支持决策。数据科学是一个宽泛的术语,因此,真正的数据科学家必须具备广泛的技能,包括编程、数学/统计以及所需应用领域的领域知识。

数据科学维恩图。由引来康威

成功的数据科学家能够将强大的编程技能与数学和统计知识以及关于他们正在解决的问题的足够深入的领域知识相结合。数据科学家为组织执行一系列活动,包括数据收集和处理、分析建模和机器学习以及数据可视化。数据科学家研究广泛领域的问题,从社会科学到农业再到消费品。因此,数据科学家的就业市场在公司、政府和非营利组织中都很广阔。

“机器学习”通常被认为是计算机程序通过示例而不是显式编程的规则来“学习”或提高性能的能力。机器学习是数据科学家用来分析和解释数据的关键工具之一。反过来,应用机器学习的软件工程师依赖数据科学的技术和工具来准备用于 ML 的数据。虽然一些组织已经创建了专门的 ML 工程师角色,但在许多其他组织中,创建 ML 模型的责任落在了软件工程师或数据科学团队身上。无论一个人是专门的 ML 工程师还是负责实施 ML 模型的软件开发人员,组织中的这一功能都需要强大的数学基础、对机器学习理论及其算法的理解以及对编程的合理熟练程度的结合,以用代码实施模型。虽然每个行业都有需求,但 ML 工程师最常见于网络/科技公司和特定行业的软件公司。

“人工智能”通常用于描述能够复制与人类思维相关的认知能力的机器。该领域作为一个研究领域可以追溯到 20 世纪 50 年代中期,并由几个子领域组成,如计算机视觉和机器人技术。“人工一般智能”或广义上复制人类思维的能力,与“狭义人工智能”之间通常有所区别,在狭义人工智能中,机器学习完成一项非常具体的任务。人工智能领域的许多最新进展都是使用机器学习技术实现的,尽管该领域还包括专家系统或智能搜索等领域。

数据科学和人工智能领域都使用机器学习作为中心工具。在数据科学中,机器学习通常被用作数据分析工具,以揭示数据中的模式,有时还进行预测。在人工智能领域,机器学习是创造智能代理的关键。通常在人工智能中,用于机器学习的数据来自硬件或传感器,机器学习工具被近乎实时地使用,以使机器能够采取行动。连接所有三个领域的另一个关键要素是,数据科学的工具被用来清理、处理和分析作为输入的数据。虽然数据来源可能不同,但通常使用相同的技术和编程工具。

该学哪个?

这个问题的答案很大程度上取决于你的目标是什么。对于在不同领域从事数据分析的科学家和研究人员来说,彻底了解数据科学的工具是一个很好的起点。对于寻求将智能构建到软件或硬件产品中的工程师来说,机器学习或更一般的人工智能可能是一条逻辑路径。

如果你不确定你想去哪里,只是想开始,从数据科学基础开始(同时复习编程和微积分/线性代数/统计)很难出错。最终,数据是在所有这些领域取得成功的关键,因此,一套强大的处理、清理、分析和可视化数据的技能,以及这样做所需的统计知识,将会很好地为您服务,无论您最终走向何方。

然而,在你开始学习任何这些领域之前,我会确保你在你渴望应用这些技术的领域/行业有足够坚实的领域知识基础。如果你正在进入大学或刚刚开始你的职业生涯,在花时间学习数据科学/机器学习/人工智能之前(或至少同时),建立你的领域知识是很重要的。除非你计划以构建新算法的 ML/AI 研究为职业,否则你将在自己感兴趣的领域内使用这些工具作为应用的一部分。也许你能够成功做到这一点的最大贡献者是拥有足够的领域知识来彻底理解你试图解决的问题以及数据科学/ ML / AI 如何在解决问题中发挥作用。

我们很幸运生活在这样一个时代,在每一个领域都有各种各样的内容。挑战在于如何最好地在其中导航。希望这个总结能让你更好地了解从哪里开始。祝你好运,祝你旅途愉快!

数据科学,认识数据透视表

原文:https://towardsdatascience.com/data-science-meet-pivot-tables-a55db867225c?source=collection_archive---------65-----------------------

图片来自 Pixabay。

试用 Excel 最强大的数据分析工具之一

介绍

所有数据科学家都认识到拥有一个组织有序、干净整洁、随时可以分析的数据集的重要性。在 Python 和 Pandas 中,或者在 R 和 TidyR 中,数据可以被排序到可访问的行和列中,但是排序数据、过滤特定值和设置特定块以供查看的过程可能会很繁琐,并且会产生错误。使用 Excel 中的数据透视表,可以以简单省时的方式组织、过滤和重新过滤数据,并对其进行操作。本教程将介绍如何在 Excel 中创建数据透视表,以及它们提供的简单数据操作能力。

创建数据透视表

首先在 Excel 中打开数据集,如果数据集是. csv 文件,将其保存为 Excel 工作簿(。xlsx)。只选择你的数据,点击右上角的“格式为表格”按钮,选择你喜欢的任何配色方案。这应该将你所有的数据着色并组织成一个整洁有序的表格。这里有一个关于假“冰淇淋店”数据的小例子:

现在,是时候创建数据透视表了!单击电子表格上的任意位置,从插入选项卡中,单击“数据透视表”按钮。在“表格/范围”中输入表格的名称,如下所示。您可以通过单击表格并转到出现的“表格”选项卡来找到表格的名称—名称在最左侧。单击确定。

一个带有“数据透视表字段”侧栏的新工作表弹出,但是还没有创建数据透视表。这是有趣的部分!数据透视表允许您按照自己的意愿组织数据,并轻松切换分类。下面是我如何组织数据的一个例子:

流程是选中一个框,将线条向下拖动到四个字段之一,然后根据需要对类别进行排序/操作。在这个例子中,我首先在 Rows 字段中列出 cone,然后是 flavor,所以我的数据是按 cone 类型分组的,然后是该类别中的 flavor(类似于 group-by 函数)。值(或列)是每种口味和甜筒类型的利润总和,我可以通过单击“I”并选择不同的计算方法,将该字段更改为平均利润、最大/最小利润、中间利润等。

真的就这么简单!—通过拖动一些框并将 Sum 改为 Average,我可以快速制作一个完全不同的表格,并真正操作任何东西来满足我的数据分析需求。

相同的数据,新的表格。

结论

就是这样!整个过程到此结束——在不到 5 个步骤的时间里,您就有了一个整洁有序的数据表,您可以根据需要轻松地对其进行操作、计算、过滤和组织。图片使用代码创建此数据框:生成平均值、对行内的行进行分组以及查找总计的过程需要冗长的代码,并且需要数据科学家投入过多的时间和精力。Excel 将整个过程压缩到一个数据透视表工具中,使数据分析既简单又省时。我鼓励每个人至少尝试一次用 Excel 进行数据分析!—这些能力真的很简单,但却很强大。

数据科学遇上 UFC:一个斗士的姿态真的给了他们优势吗?

原文:https://towardsdatascience.com/data-science-meets-ufc-does-a-fighters-stance-really-give-them-an-advantage-fdc6141f6e29?source=collection_archive---------25-----------------------

试图定量回答格斗运动中的一个古老问题。

安德留斯·彼得鲁塞尼亚(https://www.flickr.com/photos/andriux_uk_events/18781656035)授权重新使用的图像

康纳·麦格雷戈对何塞·奥尔多是 UFC 历史上最快的淘汰赛之一,结果爱尔兰人仅用了 13 秒就赢了。它让一个极具天赋的左撇子(麦格雷戈)对阵巴西不败的东正教徒,后者被一些人认为是有史以来最伟大的 MMA 轻量级选手。裁判大个子约翰·麦卡锡宣布比赛时间到后几秒钟,奥尔多向前冲去,挥出一记左勾拳。康纳后退一步,用自己一记完美的左钩拳反击。奥尔多躺在地板上,康纳继续用拳头猛击他,这时裁判宣布比赛结束。

就这么简单。(【https://giphy.com/conormcgregor】T2

那么,康纳的胜利有多少可以归因于他的非正统立场呢?本文采用定量方法回答以下问题:

"拥有一个非正统的姿势会让一个拳手在拳击场(或八角场)有优势吗?"

如果有读者不熟悉格斗运动中的各种姿势,我会给你留一个谷歌,现在给你一个简短的描述:

  • 正统的拳手大多惯用右手站立时左肩向前,右肩向后。
  • 左撇子个人通常左撇子站立时右肩向前,左肩向后。
  • 转换拳手可以被认为是双手灵巧并且有能力在正统和左撇子姿势之间无缝转换。
  • 存在一些其他的姿态,但它们非常罕见,这将在后面的分析中看到。

人们常说,非正统的战士有优势;这通常被认为是因为他们人数较少,这意味着当他们最终面对一个非正统的对手时,一个战士不太能够预测他们的非正统对手的行动。据信,在网球、板球和棒球等其他运动中也存在同样的优势。为了给出一些数字背景,德国奥尔登堡大学的 Florian Loffing 博士在 2009 年至 2014 年间进行了一项研究,他收集了羽毛球、壁球、网球、乒乓球、板球和棒球前 100 名球员的名字和惯用手。他的发现是,在男子棒球比赛中,30%的人是左撇子,而在女子网球比赛中,这个数字是 19%。这些数字远远高于总人口,男性和女性分别约为 10.3%和 7.7%。

这种优势实际上存在于 MMA 领域还是只是一种普遍的误解?如果它确实存在,仅仅是因为战士们对非正统的对手准备不足,还是有比看起来更多的原因?

在接下来的部分中,我将带您了解我解决这些问题的方法,从数据收集、清理和特征工程,到分析,最后是我对结果的解释。

如果您想了解代码,请访问以下链接中的 GitHub 库:

https://github.com/ravimalde/ufc_fighter_stance

数据收集—网络搜集

在对正统派和非正统派战士进行任何比较之前,我需要掌握一些数据。方便的是,UFC 维护着一个网站,上面有该组织中每个战士的详细资料。这以表格的形式呈现,如下所示。

http://ufcstats.com/statistics/events/completed?page=all

至关重要的是,这张表中包含的信息是关于战士的立场,以及他们的胜利,失败和平局。由此有可能衡量每个拳手的成功,并确定两种姿势之间是否有显著差异。

我使用了 BeautifulSoup 和 requests 库来抓取,因为这为解析 HTML 提供了一个简单的框架。从上面的图片中可以看出,字母表中的每个字母都有一个网页,如果我要获得每个战士的信息,所有这些都需要被抓取。“A”、“B”和“C”页面的 URL 如下:

http://www.ufcstats.com/statistics/fighters?char=a】T4&page = all

“char= a & page”中的“a”变为“b”…

http://www.ufcstats.com/statistics/fighters?char=b&page = all

然后' char= b & page '中的' b '变成了' c'…

http://www.ufcstats.com/statistics/fighters?char=c】T4&page = all

对字母表中的每个字母如此类推。

下面的代码片段展示了如何在一个遍历字母表的 for 循环中完成网页抓取,每次更新 url 以遍历每个页面。

要了解数据是如何被组织成 pandas 数据帧的,请查看本节之前链接的 GitHub 知识库。为了简洁起见,这里不概述这个过程。下图显示了创建的数据帧的前 5 行。

数据争论—清理和功能工程

刮擦是成功的。我现在有了 UFC 组织中每个战士的信息,甚至更好的是,这些数据是由组织本身提供的,因此这些数据必定是高质量的,并且可以随时进行分析。

不完全是。

从上面的数据图可以看出,很多信息都丢失了。对于一些战士来说,诸如身高、臂展和站姿等细节是缺失的,尽管这些是最基本的数据。由于分析的重点是姿态,所有在姿态栏中没有输入的战斗机都被忽略了。不幸的是,这将数据集中包含的战士数量从 3405 减少到 2571。哎哟!

然后是一些特征工程,这意味着将原始特征(胜、负、平)转换成对分析更有用的新特征。我需要创建一个标准化的标准来衡量每个战士的成功率。我想到了两种方法:

  1. 赢:输比率(总赢数/总输数)
  2. 胜利:总战斗比率(总胜利数/总战斗数)

赢:输比率的问题是,如果一个战士是不败的,这个比率将是无限的,因为将有一个除以 0。因此,胜率:总战斗率是我选择的衡量标准。然而,新的战斗机也给这种方法带来了问题。如果 UFC 家族的新成员在第一次战斗后有 100%的胜率,这将会扭曲结果并降低分析的质量。我只想要在分析中充分证明自己的拳手,所以我删除了所有少于 5 场比赛的个人。这将数据帧中的行数从 2571 减少到 2421。

其余数据集的细分如下:

  • 正统——1886 年战士
  • 左撇子——430 战斗机
  • Switch — 98 战斗机
  • 开放姿态— 6 架战斗机
  • 侧身— 1 战斗机

到目前为止,数据清理已经间接移除了除了一个侧身格斗者之外的所有人和几乎所有的开放式格斗者。由于这两个类别的样本量很小,我从分析中去除了这些物质。

统计分析—是时候回答问题了!

这些数据经过了反复推敲和争论,现在已经准备好进行可视化了。乍一看,正统拳手和左撇子拳手的胜率分布非常相似。这令人惊讶,因为左撇子通常被认为是一种优势。看起来转换拳手比正统拳手和左撇子拳手都更成功。这并不令人惊讶。

作为一名数据科学家,我不能接受我对箱线图的解释是事实,这可能只是因为对换战士赢的次数更多。为了确定是否存在统计学上的显著差异,需要进行单向 ANOVA(方差分析)测试。要使单向方差分析成为该数据集的有效分析方法,必须满足两个假设:

  1. 残差的分布(每个数据点与其组的平均值之间的差)必须是正态的。
  2. 这些组必须是同方差的。

为了检查残差的分布,我使用 statsmodels 库创建了一个 Q-Q 图。这将绘制理论分位数(正态分布)与样本分位数的关系图。该图是相当线性的,这意味着分布接近正常。单向 ANOVA 检验足够稳健,可以处理轻微违反正态条件的情况,因此我认为第一个假设得到了满足。

为了测试同质性,我使用了 scipy 库中的 Levene 测试。这返回了大于我设置的阈值 0.05 的 P 值,意味着这些组是同异方差的,并且满足 ANOVA 的第二个条件。

方差分析检验的两个假设如下:

  • H0(零)——正统拳手、左撇子拳手和转换拳手的胜率没有区别。
  • 哈(另类)——正统、左撇子和转换拳手的胜率是有区别的。

我再次使用 statsmodels 库进行方差分析。它返回的 P 值低于预定的阈值 0.05,即使考虑 Bonferroni 校正以减少假阳性的机会。这意味着我应该拒绝零假设,并且在姿态的胜率之间确实有显著的差异。然而,ANOVA 测试并没有告诉我们哪些组之间存在差异。

为了找出哪些姿势的表现彼此不同,我进行了 Tukey 的 HSD 测试,也是来自 statsmodels 库。下表显示,对于正统转换比较和左撇子转换比较,应该拒绝零假设。对于正统-左撇子的比较,应该接受零假设;也就是说,正统拳手和左撇子拳手的胜率没有显著差异。

接下来,使用 Cohen 的 d 公式计算显著成对比较的效应大小。这产生了以下结果:

  • 正统转换:d = 0.46
  • 左撇子开关:d = 0.45

小于 0.2 的效果大小被认为是小的,大于 0.8 的值被认为是大的。效应大小越大,变量之间的关联越强;这意味着大约 0.5 的影响大小表明,当考虑到转换与正统和左撇子时,拳手的姿势和胜利:总战斗比率之间有相当强的关系。

每种姿态平均胜率如下:

  • 东正教:0.70
  • 左撇子:0.70
  • 开关:0.76

结果的解释

Loffing 博士对左撇子运动员的研究发现,在时间压力较大的运动中,左撇子的代表性更强。他发现棒球、板球和乒乓球是节奏最快的运动,而且这些运动中左撇子运动员的数量也最多。阿伯泰大学的斯科特·哈迪博士提出,这“可能是由于左撇子能够处理快节奏信息的方式”,从而导致更快的反应时间。

答案可能在于左撇子和右撇子的认知差异吗?https://unsplash.com/photos/3KGF9R_0oHs

《神经心理学杂志》2006 年发表的一项奥地利研究发现,左撇子的半球间 times⁴(大脑左右半球之间的交流)明显更快。因此,科学发现表明,左撇子运动员可能有一些认知优势,但这尚未证明是职业体育运动中左撇子过多的主要原因。

从数据集中有姿势信息的拳手中,我发现 22%是左撇子。这是一般人群中左撇子代表的两倍多!这是因为他们的反应时间更快吗?有可能,但如果是这样的话,我们也希望看到他们比正统战士有更高的胜率,但我们没有。正如本文开头所提到的,另一个可能的原因是,在较低水平的竞争中,战士较少接触非正统的对手,因此给了非正统的个人一个优势,从而在精英水平上有更高的代表性。然而,一旦达到这种精英水平,他们的成功并不比其他姿态高,因为战士们在训练营中不懈地准备对抗与他们战斗之夜对手风格相似的陪练。这可能会消除左撇子的任何意外优势。

那么为什么转换战士比其他姿势有更高的胜率呢?原因可能正如人们所料:

  • 第一个是,换装战士的箭筒里可能有更多的箭。他们能够从更多的角度进攻和防守,当他们在比赛中途改变立场时,可以打乱对手的比赛计划。
  • 第二个原因是,当准备一个转换对手时,一个拳击手必须花时间准备一个正统的对手和一个左撇子对手,这导致对两种风格的准备不足。

抱歉,康纳,左撇子拳手在八角形拳台上不太成功。(https://giphy.com/conormcgregor

改进和未来项目

正如你可能已经注意到的,switch 战斗机的样本量对于这次分析来说是非常小的。对于任何统计分析,更大的样本量总是首选的,因为它减少了机会在你的任何发现中所起的作用。如果有人对自己进行类似的分析感兴趣,我建议扩大你的数据来源,包括其他 MMA 组织,如 Bellator 和 One Championship。事实上,分析的范围可以扩大到包括其他战斗运动,如拳击和泰拳,因为同样的原则适用于战士的立场。

展望未来,我的个人目标是创建一个 UFC 战斗预测器。这将允许用户输入来自该组织的任何两名战士,并使用机器学习算法输出每个战士获胜的百分比机会。如果你对此感兴趣,请在接下来的几个月继续关注。目前,感谢您的阅读!

引文

[1]Florian loff ing 博士,精英互动球类运动中的左撇子和时间压力(2017)

[## 精英互动球类运动中的左撇子和时间压力

频率依赖性选择可以确保动物和非动物物种中多态性的维持[ 1,2]。在…

royalsocietypublishing.org](https://royalsocietypublishing.org/doi/10.1098/rsbl.2017.0446)

[2] UFC 战斗机统计

[## 统计| UFC

编辑描述

www.ufcstats.com](http://www.ufcstats.com/statistics/fighters?char=a&page=all)

[3]《卫报》:斯科特·哈迪博士

[## 为什么左撇子擅长某些精英运动而不擅长其他运动?

从板球运动员瓦西姆·阿克兰到棒球投手克莱顿·克肖和乒乓球明星丁宁,体育界…

www.theguardian.com](https://www.theguardian.com/science/2017/nov/22/why-do-left-handers-excel-at-certain-elite-sports-but-not-others)

[4] Cherbuin N,Brinkman C,“左撇子个体的大脑半球相互作用是不同的”( 2006)

[## 左撇子的大脑半球互动是不同的。

神经心理学。2006 年 11 月;20(6):700-7.

www.ncbi.nlm.nih.gov](https://www.ncbi.nlm.nih.gov/pubmed/17100514)

数据科学模型构建生命周期

原文:https://towardsdatascience.com/data-science-model-building-lifecycle-78d7564d80d7?source=collection_archive---------47-----------------------

图 1:通过syzygyedu.com拍摄的照片

介绍

当我们遇到一个商业分析问题时,不承认绊脚石,我们继续执行。在意识到不幸之前,我们试图实现和预测结果。

但是这些结果揭示了解决问题的策略吗?

答案是。我们无法提出一个对业务理解没有任何意义的解决方案。为了提高产品质量,创造市场战略,建立品牌认知,提升客户满意度,我们必须消除复杂性。

在本文结束时,您将了解数据科学建模生命周期中涉及的解决问题的步骤。此外,您可以预测更有意义的解决方案,帮助组织提高生产力。

目录

  1. 问题定义
  2. 假设生成
  3. 数据收集
  4. 数据探索/转换
  5. 预测建模
  6. 模型部署
  7. 关键要点

让我们深入了解每个模型构建步骤,

数据科学是从海量数据中提取有意义见解的过程。数据驱动的科学由统计数据、预定义的科学功能、分析方法和可视化技术组成,以传递信息。

图 2:通过datasciencecentral.com拍摄的照片

数据科学模型构建生命周期包括一些需要遵循的重要步骤。如果您对开发数据科学模型感到焦虑,那么只需坚持以下步骤。

1.问题定义

图 3:照片通过freepik.com

构建模型的第一步是更全面地理解工业问题。在商业中,直到客户在使用服务时遇到任何困难,问题才会发生。

为了确定问题的目的和预测目标,我们必须适当地定义项目目标。因此,为了进行分析,我们必须首先认识到障碍。记住,优秀的结果总是取决于对问题的更好理解。

2.假设生成

图 4:通过campuscareerclub.com拍摄的照片

假设生成是一种猜测方法,通过这种方法我们可以得到一些与预测目标有显著相关性的基本数据参数。在收集数据之前,我们找出影响目标变量的重要特征。

你的假设研究必须深入,考虑所有利益相关者的每一个观点。我们寻找能够影响结果的每一个合适的因素。假设生成侧重于您可以创建的内容,而不是数据集中可用的内容。

我们举一个贷款审批预测的例子。我们必须获得一些关键的数据特征,这些特征将决定是否批准申请人的贷款请求。这里我们介绍一些特性:

  • 收入:如果申请人收入较高,应该很容易获得贷款。
  • 教育:教育程度越高,收入越高,因此我们可以批准贷款请求。
  • 贷款额度:额度越小,贷款获批几率越高。
  • 工作类型:永久或临时
  • 以前的历史:如果申请人尚未偿还其最后一笔贷款金额,则不能批准额外的贷款请求。
  • 房产面积:寻找申请人的私有房产面积(城市/农村)。
  • EMI:EMI 支付越少,贷款获批的可能性越高。

如您所见,我们已经构建了一些可能影响贷款批准请求的因素。记住,模型的智能将直接取决于你研究的质量。

3.数据收集

图 5:通过mafrome.org拍摄的照片

如果您已经很好地生成了一个假设,那么您就知道要从各个来源收集哪些数据。数据收集是从与分析问题相关的来源收集数据,然后我们从数据中提取有意义的见解进行预测。

收集的数据必须:

  • 回答假设问题的熟练程度。
  • 详细阐述每个数据参数的能力。
  • 有效性来证明你的研究。
  • 准确预测结果的能力。

图 6:照片通过questionpro.com

为了做出有效的决策,我们从已有的资源中收集数据。在上图中,我们列出了您可以从中收集数据的所有主要和辅助数据收集方法。在无数个瞬间收集关于产品需求、服务、当前趋势和客户反馈的数据。

4.数据探索/转换

图 7:照片通过analyticsindiamag.com

您收集的数据可能是不熟悉的形状和大小。它可能包含不必要的特性、空值、意外的小值或巨大的值。因此,在将任何算法模型应用于数据之前,我们必须首先探索它。

通过检查数据,我们可以了解数据中明显的和隐藏的趋势。我们找到了数据特征和目标变量之间的关系。你可能听说过一些技术:“探索性数据分析和特征工程”,属于数据探索。

通常,数据科学家投入 60–70%的项目时间来处理数据探索。

数据探索涉及几个子步骤:

特征识别:

  • 您需要分析哪些数据功能可用,哪些不可用。
  • 识别独立变量和目标变量。
  • 确定这些变量的数据类型和类别。

单变量分析:

我们逐一检查每个变量。这种分析取决于变量类型是否是分类的和连续的。

  • 连续变量:我们主要寻找数据集中的统计趋势,如均值、中值、标准差、偏斜度等。
  • 分类变量:我们使用频率表来了解每个类别的数据分布。我们可以应用 value_counts()values _ counts(normalize = True)函数测量值的出现次数和频率。

多变量分析:

双变量分析有助于发现两个或多个变量之间的关系。我们可以找到相关性热图在连续变量和分类变量的情况下,我们寻找它们之间的关联和分离。

填充空值:

通常,数据集包含空值,这会降低模型的潜力。对于连续变量,我们使用特定列的平均值或模式来填充这些空值。对于出现在分类列中的空值,我们用最频繁出现的分类值替换它们。请记住,不要删除这些行,因为您可能会丢失信息。

特征工程:

我们从现有的过滤数据中设计更有意义的输入数据,以加强机器学习模型。在这里,我们结合了两个数据特征,将分类参数转换为连续参数,缩小了连续变量的范围,等等。有一些有意义的特征工程技术,例如,

  • 宁滨
  • 对数变换
  • 一键编码
  • 缩放
  • 分组
  • 异常值处理
  • 特征分割

阅读这里的了解更多关于特征工程技术的信息。

5.预测建模

图 8:通过disrubtionhub.com的照片

预测建模是一种基于输入测试数据创建统计模型来预测未来行为的数学方法。

预测建模涉及的步骤:

算法选择:

当我们有了结构化数据集,并且我们想要估计连续的或分类的结果时,我们使用监督机器学习方法,如回归和分类技术。当我们有非结构化数据,并希望预测某个特定输入测试样本所属的项目群时,我们使用无监督算法。一个真正的数据科学家应用多种算法来获得更准确的模型。

列车型号:

在分配算法并方便地获得数据后,我们使用应用首选算法的输入数据来训练我们的模型。这是确定独立变量和预测目标之间的对应关系的动作。

模型预测:

我们通过向训练好的模型提供输入测试数据来进行预测。我们通过使用交叉验证策略或 ROC 曲线来测量准确性,ROC 曲线可以很好地导出测试数据的模型输出。

6.模型部署

图 9:qrvey.com 通过的照片

没有什么比在实时环境中部署模型更好的了。它有助于我们获得对决策过程的分析见解。为了让客户满意,您需要不断地用额外的特性更新模型。

为了预测商业决策、规划市场战略和创造个性化的客户兴趣,我们将机器学习模型集成到现有的生产领域中。

当你浏览亚马逊网站,注意到产品推荐完全基于你的好奇心。和亚马逊一样,网飞根据你的观看历史和几个兴趣给你电影的建议。您可以体验到利用这些服务的客户参与度的提高。这就是部署的模型如何改变客户的心态,并说服他购买产品。

7.关键要点

图 10:digitalag.osu.edu 通过拍摄的照片

通过阅读文章,我们总结出以下几点:

  • 理解商业分析问题的目的。
  • 在查看数据之前,先提出假设。
  • 从众所周知的资源中收集可靠数据。
  • 将大部分时间投入到数据探索中,从数据中提取有意义的见解。
  • 选择签名算法来训练模型,并使用测试数据进行评估。
  • 将模型部署到生产环境中,以便用户可以使用它,并制定策略以有效地做出业务决策。

最终路线图

图 11:通过datarobot.com的照片

所有人都在这里,

在我的下一篇文章中再见。

你好👋我希望你能从我的文章中获得知识。如果你愿意支持我,请随意给我买些咖啡🙏☕

https://www.buymeacoffee.com/amey23】T5T6

或通过 ameypband23@gmail.com 联系我

乐意为您效劳。

数据科学、音乐和体育。第 1 部分:数据收集-假设检验

原文:https://towardsdatascience.com/data-science-music-and-sports-part-1-data-collection-hypothesis-testing-2f2b85406726?source=collection_archive---------60-----------------------

一项评估音乐对跑步的影响的实验,并开发一个推荐系统来提高成绩

照片由 作者

可穿戴设备和移动设备被广泛用于记录和提供与健康和身体表现相关的许多活动的实时信息。在下面的文章中,我们描述了我们为评估音乐对跑步的影响所做的实验。通过同步时间序列的统计分析和机器学习,我们开发了一个个性化的歌曲推荐系统,可以提高您的运行性能。

在第 1 部分(你在这里)中,我们介绍了实验设置、数据收集和处理,以及音乐对跑步影响的初步评估。

第二部分 中,我们介绍了特征工程、验证模式、回归模型以及推荐系统的构建。

你有没有想过锻炼时听的音乐对你的表现有什么可测量的影响?试图找到这个问题的答案是一个很好的动机,通过几周的禁闭和未来不确定和主要是单独训练课程的前景来锻炼。在这些博客文章中,我们描述了一个案例研究,目标是开发一个音乐推荐系统来提高运动成绩。我们结合使用流行的流媒体应用程序对音乐记录的分析,以及通过知名运动手表品牌在跑步锻炼中记录的身体数据。我们关注完整解决方案工作流程背后的数据科学构建模块,而不是编码。然而,我们指出了一些有助于在 Python 环境中重现工作流的库和函数。嗯,只有在你锻炼了几个星期的跑步能力之后;).

我们在这里介绍的数据科学原理适用于利用时间序列实现多种目的的解决方案:监控健康状态;提高驾驶安全;在敏感活动中提高注意力;提高工作绩效;或者只是为了获得你最喜欢的运动训练。它们适用于供应链需求、销售预测、贸易或医疗和药物测试等领域的解决方案,更不用说现实世界的应用了。

实验设置

为了实验,我们记录了几周的跑步锻炼数据。此处引用的图和数字基于单个转轮( N=1 统计分析);我们对第二个流道进行了类似的设置,以进一步验证该过程。

随着智能设备的运行,我们已经在处理任何数据科学项目中最具挑战性的部分之一:数据记录。这项研究包括 52 份不同的锻炼记录。来自运动手表的数据包含 GPS、加速度计和心率传感器数据(光学手腕传感器)。同时,我们收集并同步在练习期间流传送的音乐的数据(如果有的话)。我们还从离训练地点最近的气象站收集气象数据。这导致时间序列组合具有一秒的采样率,除了天气数据,其在跑步锻炼中的变化我们忽略。

处理完数据后,我们首先尝试一个简化的假设检验来评估音乐对跑步表现的影响。其结果表明,多变量分析是必要的。因此,我们训练一组回归算法,旨在预测跑步锻炼的每个下一个时间间隔中的跑步表现。他们将预测建立在截至该时间点的所有记录数据的基础上。我们检查增加与锻炼中播放的音乐相关的特征是否提高了算法的预测能力。我们为此研究(调整后的)决定系数,因为该系数说明了响应变量(运行性能)和预测器特征之间的依赖强度。通过研究音乐特征是否提高了系数,我们可以评估音乐对跑步的实际影响。我们利用回归器,构建一个解决方案,由选择在每次跑步练习中最大化性能的歌曲,推荐给进行流式播放。

图片由 作者

在这个过程中有很多需要注意的地方,我们会在整篇文章中讨论。其中最具限制性的是实验参与者的样本。只有两名跑步者参加了这项活动,所以这里的结果说明了音乐对他们跑步表现的影响。此外,一个可推广的实验设计应该以跑步练习的重复为目标,将所有条件的变化最小化,除了正在播放的音乐的变化。也就是说,在一天中的同一时间,在相同的天气条件下,在相同的预赛疲劳程度下,在相同的跑道上进行固定距离和高度的锻炼,并进行相同类型的测试。为一个人保持这样一个单调的设置和几千分钟的跑步时间会挫败我们尝试自己的动力。相反,我们决定按照不同的跑步计划进行训练。虽然这在评估音乐对表现的影响时会有影响,但是概括这个实验并不在最初研究的范围之内。我们仍然希望管道,工作流程和讨论的想法,将激发未来的通用方法。

数据收集:带有极坐标的运动数据

极地访问链接 API

对于每一次跑步练习,我们都使用 Polar 设备(Polar Vantage M)来记录跑步的物理变量。类似的实验也可以用其他设备进行,例如 Garmin 或 Suunto 的设备。对于每次锻炼,运动手表会以每秒的采样率记录 GPS 轨迹、心率和跑步节奏。将设备与 Polar flow 应用程序同步后,记录的数据可供用户使用。

对于自动数据收集,我们使用官方的 Polar Accesslink API 。对于几个开发的函数,我们利用了 API 周围的公共 python 包装器。API 在事务模式下工作以获取记录的数据,仔细研究数据可用性的含义和检索练习的最佳实践。为了获取任何用户数据(包括锻炼记录),每个用户必须在数据收集之前接受开发的应用程序的相关访问权限。只有这样,新的应用程序才能访问新的练习。

一次跑步锻炼的时间序列。我们显示了用 Polar Accesslink API 收集的速度、心率、高度和节奏;导出的间隙效率;以及通过 Spotify API 收集的在锻炼过程中流动的歌曲的基调、能量和节奏。

如上图中的练习所示,使用 API,我们从几个 Polar 设备传感器中恢复数据。对于这个实验,我们没有使用原始的 GPX 轨迹文件,而是消耗了 API 直接提供的速度,以及心恨、海拔跑步节奏。每次锻炼的平均持续时间(距离)为 56 分钟(11 公里),总记录为 2200 分钟(给定装置采样率 131974 秒)。我们决定遵循一个不同的训练计划,而不是重复完全相同的练习。锻炼包括基础跑、渐进跑、速度跑、爬坡跑和法特莱克跑(如图中的锻炼情况)。课程的结构通常是相似的:大约 25 分钟的热身,主要的运动,最后是短暂的恢复跑。这三个阶段可以在上图中观察到。

事实上,我们没有以可控的方式测试运行性能,这增加了实验的复杂性。我们如何定义和衡量跑步表现?在跑步训练中,我们的目标不是在特定的跑道上跑得尽可能快。这意味着,我们不能仅仅用完成一条赛道所需的时间来衡量成绩。相反,我们需要定义一个对所有不同的法特莱克跑、基础跑、渐进跑、速度跑和坡道跑都有效的跑步表现指标。

差距效率:一个运行绩效指标

为了定义跑步表现指标,我们研究了心率和跑步速度。正如可以在文献中找到的那样(看一下这里的和其中的参考文献),这两个变量之间的关系可以与锻炼的改善相关。这个想法是,在高强度跑步期间,如果我们设法保持恒定的速度,心率往往会随着时间的推移而增加。相反,如果我们以恒定的心率跑步,速度会随着时间而降低。此外,在耐力训练后,稳态亚极量运动期间的心率随时间而降低。因此,我们可以假设心率和速度之间的关系是评估跑步表现和长期训练效果的代理。我们从一个简单的指标定义开始,我们称之为运行效率:

有了合适的单位,效率就是我们每次心跳前进的距离。请注意,当观察两个不同的跑步者时,比较他们以这种方式定义的效率可能对评估谁是更好的跑步者没有用处。然而,这里我们总是比较跑步者在某个时间的效率和其他时间的效率。这样,效率的显著提高可能与性能的提高有关。

到目前为止,这个定义忽略了一个重要的变量:仰角增益。为了包括它的影响,我们使用了一个等级调整步速 (GAP)模型。这些模型的想法是找到一个跑步者用同样的努力可以达到的等效速度,但是是在平地上跑,而不是在实际的坡度上。至于具体的差距模型,我们基于斯特拉发这里展示的模型。给定当前和先前时间戳的高度和距离,我们计算梯度。梯度通过查看间隙模型曲线来设置步速调整;一旦乘以速度,我们就得到间隙速度。这确实是我们用于最终定义的量。在一些经验观察之后,我们还决定使用跑步者的心率相对于静息脉搏的差异:

如上图所示,我们展示了之前相同法特莱克练习的差距效率分布。我们注意到,我们用于实验的运动手表设备没有气压计。高度是基于 GPS 信号测量的,这是不确定性的来源。为了处理这一点,我们训练了一个简单的基于k-means聚类方法的异常检测算法。我们通过观察速度、心率和海拔来决定海拔测量是否有效,或者是否是不精确的测量。如果不被接受,间隙校正被设置为 1,因此间隙速度只是原始速度。此外,我们将最大修正值设置为 17%的梯度,因为这是我们根据已知的赛道地图计算出的最大梯度。在任何情况下,大多数练习都是平的,以避免不正确的海拔读数或不适合在山上跑步而导致的偏差。

作为练习开始后时间的函数的差距效率。散点图包括所有记录的练习。以 1 分钟的间隔对值进行采样,这些点描述了该分钟内的平均间隙效率。

在上图中,我们展示了一名参与者所有锻炼的差距效率与锻炼时间的散点图。对于该图,我们采用一分钟内的平均间隙效率对间隙效率进行重新采样。我们减少了没有足够运动的时间,这对应于热身后拉伸的阶段。在组合所有不同的记录练习之后,不再有明显的练习结构。与上图中的 fartlek 相反,其相位在间隙效率图中仍然有些可见。散点图中显示的是差距效率随练习时间而降低的趋势:请注意绘制点上的负趋势。鉴于差距效率的定义和上述发现,这是预料之中的。纵轴上的变化是训练类型、天气条件、预赛疲劳以及我们将要评估的音乐流的结果。这些变化也是由于持续的耐力训练。经过几周的实验,我们的差距效率有上升的趋势。

我们注意到,锻炼的平均间隙效率与 Polar 提供的 跑步指数 之间存在明显的相关性。在陡坡跑步中出现了一些差异,因为跑步指数似乎低估了与间隙效率相关的努力(反之亦然)。然而,所有练习的总体趋势是一样的。

极坐标数据技术细节

除了polar-access link包装器之外,练习数据的处理可以用 Pandas、 来完成,包括时间序列的常用函数(如 shiftrolling ),加上 datetime 模块中的一些函数,以及您首选的 k-means 的实现(例如从

来自极性传感器的异常读数的处理可能具有挑战性。其中一些读数是运动手表有限的精确度所固有的,比如我们已经讨论过的高度测量。速度和心率测量通常是稳定的,问题较少。请注意,在锻炼时暂停手表会阻止与音乐流媒体应用程序记录的数据进行任何准确的同步。我们避免暂停设备上的锻炼记录,而是使用了分段选项。因此,在一些锻炼阶段需要特殊处理:刚开始后,拉伸时,在红绿灯处停下来等。为我们在第二部分中描述的回归模型找到并纠正这些需要一点想象力,再加上一些更反常的检测。不过不要太复杂。

数据收集:Spotify 的音乐数据

Spotify 和 Spotipy

对于音乐唱片,我们使用 Spotify 应用程序。请注意,一小部分练习是在没有任何音乐的情况下完成的,以便与无声练习进行比较。使用官方的 Spotify API 自动检索跑步时播放的音乐。对于一些函数,我们使用一个公开可用的 Python 包装器, Spotipy 。从 API 中检索任何数据都必须遵循一个授权模式。特别是,由于我们感兴趣的不仅仅是音乐特性,还有特定用户播放的歌曲,这些必须事先提供适当的许可。

为了获得一个练习的音乐特征,我们检索相应用户最近播放的歌曲。请注意,由于配额相当有限,最好在每次练习后自动获取歌曲。一旦我们播放了歌曲(以及它们的时间戳),我们需要获得一些歌曲特征。这些是一些量化的描述符来描述歌曲,这样我们就可以估计它们对跑步表现的影响。为此,任何音乐爱好者都会觉得 Spotify API 很吸引人,因为它提供了大量的音乐信息。音乐分析确实是一个充满活力的领域,有着广阔的发展前景,例如最近使用深度学习的音乐一代的发展。然而,对歌曲的深入分析超出了这个实验的最初重点。相反,我们直接使用 Spotify API 计算和提供的音乐功能列表。在这里看看他们的定义

歌曲特色

歌曲特征包括基本描述符,如歌曲的 持续时间 (需要同步 Polar 和 Spotify 记录)、速度、使用数字符号的估计总体(标准音高类别)、模态、拍号 录音 响度能量这样的东西被定义为一种强度和活动的知觉尺度;,*与歌曲上人声的存在有关;一个与检测一张唱片上的受众有关的特征,***声学还有节奏的其他方面的特征,如歌曲的。****************

对这些特征的计算缺乏控制似乎是一种限制。然而,它们可以通过 API 直接获得,并且它们被链接到直观的定义,这对于我们最初的解决方案的范围来说是足够的。我们把对另类音乐特性的深入探索留给了未来。在上图的底部,我们描绘了在法特莱克练习中播放的歌曲的基调、能量和节奏。这些是类似阶跃的时间序列,因为不考虑歌曲内的变化。我们让 Spotify 根据几个不同性质的播放列表播放歌曲。我们主动选择播放不同的音乐来丰富实验。

Spotify 数据技术细节

除了使用 Spotify API,你可能还需要 熊猫 。需要特别注意将音乐数据与运动手表记录同步。

自相关时间序列的假设检验

一旦数据收集过程就绪,我们将继续研究在播放音乐的练习和没有播放音乐的练习之间,测量的间隙效率值是否存在差异。对于两种类型的练习,间隙效率的分布显示出相似的形状。然而,有音乐的练习的平均间隙效率比其他练习的稍大。为了评估这种差异的统计意义,我们进行了假设检验。我们首先要处理的事实是,间隙效率表现出相当大的自相关性。这种情况在 45 秒左右的滞后时尤为明显。它们是基于心率定义的间隙效率的结果,心率是对跑步努力的反应。

左图:上述 fartlek 练习的差距效率自相关函数。右图:学生 t 检验的 p 值,用方差膨胀系数进行了调整,这些值是针对可变的最低要求速度(km/h)显示的。

这在上图的左面可以看到。在那里,我们显示了用于说明的跑步练习的间隙效率自相关函数。自相关减少,并在大约 45 秒的滞后之后不再显著。由于练习的结构,有一些次要的峰值。对于上面的法特莱克,大约 360 秒的滞后有显著的正自相关。以及在大约 120 秒处的第三(几乎)显著的负自相关。这是因为 fartlek 分为 6 个高强度的 4 分钟间隔,然后是 2 分钟的慢速跑步。请注意,当将所有练习放在一起考虑时,不同结构的法特莱克、基础、进度、速度和坡道跑的组合,除了小滞后的初始自相关之外,消除了任何显著的自相关。

自相关的存在会影响统计检验的结构。学生的 t 检验例如假设测量样本是独立的,但是当存在相当大的自相关时,这就不成立。由此产生的结果是低估了样本方差,因为我们会错误地认为测量值比实际测量值多。当方差出现在检验统计量的分母中时,它会被夸大,导致对零假设的不合理拒绝。简单地说,如果我们不考虑自相关性,通过一个普通学生的 t 检验,我们可以得出结论,音乐练习与其他练习的差距效率有显著差异。为了解决这个问题,我们实现了一个如这里所描述的适应性测试。这个想法是为了说明自相关计算方差膨胀因子包含在测试统计中。这些校正也被称为时间去相关或调整后的有效样本大小。

经过这种调整后,修正 t 检验的结果表明,当包括所有记录的数据点时,有音乐和无音乐锻炼之间的差距效率差异在统计上不显著。然而,这仍然是一个过于简化的测试。这个测试没有考虑实验中所有其他变量的影响。如果我们根据跑步速度来比较音乐对差距效率的影响呢?这就是我们在上图右侧面板中显示的内容。我们将来自方差膨胀 t-test、p 值描述为最小所需速度的函数,以将数据点包括在测试中。有趣的是,一旦我们开始关注速度更快的运动阶段, p 值就会下降。这就是,听不听音乐之间的差异变得更加显著。这种情况发生在 16km/h 左右,此时差值接近 95%的置信水平。对于更高的速度,差异开始变小,并且 p 值再次增加。

一个合理的解释是,当我们考虑所有数据点时,包括缓慢阶段(热身、恢复等),测试显示音乐对间隙效率没有显著影响。但当我们加速到次最大努力时,音乐流会发挥一些作用,差距效率的差异变得更大。直到我们达到一个速度(和努力)太高,音乐不再发挥作用。这与一些现有的关于音乐对体育运动影响的文献是一致的,检查分离这里。虽然解释很有趣,但我们所做的测试仍然过于简单,无法得出结论。但它指出,需要对变量进行整体考虑,以评估音乐对跑步表现的影响。这进一步激发了我们在本博客系列的第 2 部分中提出的使用回归变量的多元分析。****

变量之间的相关性研究和其他初始描述性分析,揭示了这些差异。但是为了限制这篇文章的篇幅,我们没有在这里明确地展示它们。这些发现反映在博客系列的第二部分中。

自相关数据技术细节

为了计算自相关函数,我们使用stats model模块中的函数,例如 plot_acf。对于方差膨胀t-检验我们实现了我们自己的检验,但是使用了scipy . stats模块用于t-检验累积分布函数。****

展望

可穿戴设备为我们提供了在体育锻炼中连续记录数据的可能性。我们已经描述了如何收集和处理 Polar 设备和 Spotify 应用程序记录的跑步锻炼数据。我们已经对音乐对跑步表现的影响进行了简单的分析。我们构建的数据集将在博客系列的第二部分中使用,以进一步评估这一点,并构建一个可以提高我们运行性能的音乐推荐系统。

第二部分 :回归与推荐系统

此处提到的品牌都没有直接参与本实验

数据科学、音乐和体育。第二部分:回归推荐系统

原文:https://towardsdatascience.com/data-science-music-and-sports-part-2-regressions-recommender-system-75ea9dd4d803?source=collection_archive---------63-----------------------

一项评估音乐对跑步的影响的实验,并开发一个推荐系统来提高成绩

照片由 作者

便携式记录设备的日益普及导致了人工智能解决方案在多个领域的兴起,如体育科学。在这一系列的博客文章中,我们描述了我们为评估音乐对跑步的影响而进行的实验。通过对跑步锻炼记录的统计分析,我们开发了一个个性化的歌曲推荐系统,可以提高你的跑步成绩。

在第 2 部分(你在这里)中,我们介绍了机器学习框架:特征工程和验证模式。我们描述了使用回归来评估音乐对跑步表现的影响,并且我们构建了一个个性化的音乐推荐系统来增强它。

第一部分 中,我们介绍了实验设置、数据收集和处理,以及音乐对跑步影响的初步评估。

可穿戴设备记录的数据是健康和体育行业应用的强大资源。在这个博客系列中,我们描述了一个利用跑步锻炼中收集的数据的案例研究。我们使用 Polar 运动手表来记录身体数据,而 Spotify 应用程序则播放音乐。使用相关的 API,在第 1 部分中,我们构建了数据集并介绍了实验设置。我们定义了一个指标来评估运行性能(差距效率),讨论了数据集的多个方面。我们的结论是,要确定音乐对运动表现的影响,多变量分析是必要的。所有的数据都准备好了,我们现在开始分析。

我们构建了一个机器学习解决方案,将跑步锻炼中记录的数据作为输入,直到特定的时间点。该解决方案处理该数据并预测锻炼的下一个时间间隔的跑步表现。它基于回归算法,这些算法是按照为时间序列定制的验证模式对之前的锻炼记录集合进行训练的。通过这个过程,我们建立了算法的初始能力,以利用收集的数据集预测未来的运行性能。接下来,我们添加与流传输的音乐相关的输入特征,并量化这种添加对回归预测能力的影响,特别是对调整后的决定系数的影响。当这种添加导致显著改善时,这表明音乐可能对跑步表现变量有真正的影响。我们展示了如何在每个相关时间找到最大化预测间隙效率的歌曲解决方案变成了音乐 推荐系统来 提升运行性能。

这篇文章中的方法和技术适用于处理时间序列的许多问题,例如销售或需求预测。我们关注数据科学概念,而不是编码实现。然而,我们在整篇文章中列出了在 Python 环境中重现工作流的相关库和关键函数。

特色工程

数据重述和重采样

练习的数据由 Polar 以每秒的采样率记录,有关数据收集的详细信息,请参见第一部分。在我们的实验中,有几个原因需要重新采样。首先,间隙效率被定义为涉及速度和心率的比率:

由于心率对努力的变化是反应性的,这些变化只有在一段时间后才会在间隙效率中显示出来。第二,一秒钟的采样率对运动手表传感器的有限精度更敏感。当速度、心率或海拔高度的异常读数在一段时间间隔内下降时,处理这些读数会更容易。第三,我们有兴趣研究跑步时听一段时间歌的效果。解决方案必须在该时间范围内提供建议,没有必要每秒都提供建议。有了这些动机,我们将锻炼数据重新采样成 90 秒的间隔

从跑步锻炼到 1.5 分钟间隔的时间序列。我们描绘了根据极坐标数据计算的速度、心率和间隙效率;以及从 Spotify 数据中播放的歌曲的调、能量和节奏。

有了这些时间窗,差距效率不再仅仅主要由先前的样本工作给出。累积疲劳的影响(通过自锻炼开始以来的速度、海拔增益或心率的记录)、相同时间间隔内的努力或听音乐的影响都将对算法的预测能力产生更大的影响。初看起来,重采样的具体大小可能是任意的。我们试验了各种大小,结论是 1.5 分钟是一个很好的平衡选择。它超过了 45 秒的阈值,此时间隙效率自相关不再重要。它给我们留下了足够的记录数据点来训练回归者。

在上图中,我们展示了我们在本博客系列的第 1 部分中用于演示的 fartlek 练习的一些重采样分布。对于每 1.5 分钟的时间间隔,这些值被定义为该时间内记录数据的平均值。

滞后、滚动和扩展窗口

利用重采样数据,我们给出了特征工程过程。我们遵循一种基于多种大小的移动时间窗口的方法。窗口的大小取决于数据与 t 的接近程度。这个想法是,我们越回溯到过去,数据就越不需要详细。为了让回归变量预测跑步锻炼时间 t 的差距效率(回归变量目标,我们输入以下信息:

  • t-1、t-2、t-3、t-4t-5 的心率、速度、步频、间隙速度、仰角增益和间隙效率
  • t-6t-15 这些变量的平均值。
  • 从开始到 t-1,这些变量的平均值。
  • 从开始到 t-1 运行的时间和距离
  • 之前练习的平均间隙效率。
  • 温度、湿度、风速和大气压

这些加起来有 49 个输入特征。这种构造起初看起来有点武断,我们实际上测试了几种变化。我们添加和删除变量,我们包括更多和更少的滞后,增加和减少移动窗口大小等。在每个数据科学项目中,特征工程是建模最重要的部分之一。特性的最终选择源于验证阶段本身,因为添加更多的特性不一定能提高性能。我们输入足够的信息特征,同时避免让模型面临维数灾难及其所有后果

为了预测跑步锻炼在时间 t 的差距效率(回归量目标),回归量特征根据之前时间间隔的信息以及天气信息构建。参见正文中的描述。

编码技术细节

对于重采样和特征工程过程,我们使用 熊猫。 时间序列的一些有用函数是滞后特征的 sshift,移动平均窗口的 rolling ,可变大小窗口的 expanding

训练和验证:锚定前向链接

验证模式

在特征工程过程之后,我们有来自许多跑步练习的多个数据点来训练。因此,解决方案涉及多个时间序列(每个跑步练习一个),我们需要一个仔细的模式来选择和验证模型。天真的交叉验证过程很容易导致数据泄露,因为我们最终可能会使用未来的数据点来训练一个预测过去的模型。这似乎不像销售预测、交易或供应链需求等其他预测问题那样敏感。但是考虑到我们在第一部分中描述的长时间耐力训练对差距效率的影响,我们在这里也需要小心。

对于验证过程,我们使用一个叫做锚定前向链接的嵌套交叉验证模式。这个过程(和变化)也被称为日前向链接,或滚动原点重新校准评估。正如在任何数据科学问题中一样,我们首先分离一些最近的运行练习来构建测试集。这些仅在最后使用,以估计样本外的估计模型性能。来自其余跑步练习的数据点构建了训练和验证集。我们需要一直保持这些跑步练习时间顺序。这些多个时间序列用于执行模型选择:

  • 我们选择第一训练阶段的跑步练习次数。在下图中,我们从训练和验证集中一半可用的跑步练习开始。
  • 对于每个模型和超参数选择,我们在来自该选择的数据点集合上训练回归器。一旦被训练,模型上预测来自训练和验证集中下一个可用锻炼记录的数据点。
  • 我们将最后一次跑步练习添加到我们用于训练的练习集合中,然后依次重复这个过程。
  • 一旦我们穷尽了训练和验证集中可用的跑步练习,我们就平均所有计算的验证指标(在下面的例子中,V1 到 V9)以获得特定模型和超参数选择的验证指标。

这些验证指标用于选择模型和超参数的最优选择。为了评估样本外的性能,我们继续进行一个类似的正向链接过程,添加我们在测试集中分离的跑步练习,并在最后对指标进行平均。

我们决定锚定训练窗口,始终包括第一次记录的练习的所有内容。通过这种方式,我们最大化了我们在每一步用于训练的数据点。或者,我们可以在每个步骤上实现固定大小的滚动窗口,确保我们总是使用等量的最近记录的练习进行训练。然而,随着我们向前发展,拥有更多数据点的影响超过了拥有旧数据的影响,因为耐力训练对差距效率的改善是缓慢的。

锚定正向链接:每个块代表一个跑步锻炼记录(它本身包含多个数据点)。最近的跑步练习被分开以测试估计的模型性能。其余跑步练习的数据点构建了我们用于模型选择的集合。正文中描述了顺序过程。

回归度量

为了评估添加额外输入特性的影响,我们研究了常规和调整后的决定系数 ( r )。我们还研究了平均绝对误差(MAE ),而不是平方误差,因为我们不希望指标过多地受到异常值的影响。

回归模型

作为第一个基准,我们考虑一个简单的解决方案,它只是预测在时间 tt-1 观察到的间隙效率。如果我们不能改进该模型的结果,这将表明在实验中缺乏预测能力。幸运的是,这里的情况并非如此。

至于机器学习回归器池,我们考虑一族具有组合 L1(拉索)和 L2(岭)正则化项的线性模型。它们结合了线性和多项式特征,以允许非线性关系。由于它们不是数据饥渴算法,我们考虑支持向量回归,测试几个内核。我们训练随机森林回归器,因为它们通常有助于设定合理的模型基准。我们还基于 XGBoost 训练梯度推进回归模型。正如我们将看到的,这些通常会导致对稀缺数据集的过度拟合。

转到日益复杂的模型,我们研究了卷积神经网络 (CNN)和长短期记忆 (LSTM)网络的性能。对于这两种情况,代替上述的特征工程过程,我们在跑步练习中直接输入记录到预测时间 t 的重新采样的跑步变量。CNN 的想法是将变量的光谱视为具有多种颜色的图像(每个特征一种颜色)。我们预计这些是数据饥渴模型,暂时在实验中扮演次要角色。一旦我们积累了更多的训练数据,我们期待有一个深入的探索。

对于所有模型,有限的数据集给带来了额外的压力,以确保适当的正则化技术到位。请注意,一些正则化过程需要进行特征缩放。

模型技术细节

线性回归是从scikit-learn(elastic net)。从那里,我们使用管道、多项式特征、 缩放器、mean_absolute_error、r2_score 函数,以及RandomForestsRegressorsSVR 。对于梯度增强,我们依赖于 xgboost ,而神经网络是使用 Keras 实现的。我们使用 itertools 到实现嵌套的交叉验证模式。

差距效率预测

基本输入功能

验证后,最佳模型的表现优于朴素模型,验证 MAE 为 0.14,比朴素模型小 47%。跑步锻炼数据中的部分模式因此被这个最佳模型恰当地捕获。由于累积的疲劳、慢步速阶段后间隙效率的增加、海拔增益的影响或天气变量,这些都是练习中间隙效率差异的部分原因,所以练习期间间隙效率的总体负趋势。如最佳决定系数r0.3 所示,而对于简单模型,该系数为负。尽管如此,最佳模型值仍然不太乐观。

正如我们在第 1 部分中解释的,我们遵循了不同的跑步计划,包括法特莱克跑、基础跑、渐进跑、速度跑和爬坡跑。与我们在固定轨道上反复运行的设置相比,变化的计划有许多好处,但它有一个众所周知的缺点。间歇效率受心率和跑步速度的影响。在一个多变的计划中,跑步的速度是不断变化的,而且几乎所有的时间都由跑步者的意愿决定。例如,在上述图中的 fartlek 中,在从 11 公里/小时到 13 公里/小时的渐进热身后,fartlek 以大约 15 公里/小时的目标速度跨越 6 个 4 分钟的间隔,每个间隔之后是大约 10-11 公里/小时的低速 2 分钟,最后是 11 公里/小时的恢复阶段。这些目标速度是训练计划的一部分,它们根据具体的跑步时段而变化。由于我们没有向回归算法提供这些信息,因此这些速度上的变化,以及间隙效率上的大部分变化,对于回归模型来说是随机的。

添加速度

因此,为算法提供一些额外的信息似乎是合理的。理想情况下,我们将输入跑步锻炼的类型(法特莱克、进度、节奏等),以及不同阶段的目标速度。这里,作为其代理,我们提供在时间实际速度作为输入。**这样,在 t 预测间隙效率变得与已知速度下的心率预测相关。我们使用实际速度而不是计划速度的事实可能会使预测有一点偏差。但是由于这个实验是关于在次最大努力下的跑步表现,目标速度和实际速度在 1.5 分钟的时间间隔内没有太大差别。随着这一增加,模型的预测能力增加,最佳模型预测间隙效率的验证 MAE 为 0.11,系数 r ~0.69。

音乐功能

最后,我们添加歌曲特性,如我们在第 1 部分中所述。这些是一首歌曲的定量描述符列表:持续时间、音调、调式、速度、拍号、响度,加上一些 Spotify 计算的特征:能量、乐器性、语速、活跃度、声音、效价和可跳性。所有这些特征在这里定义。为了预测在时间间隔 t,的间隙效率,我们为在同一时间间隔 t 期间流传送的音乐添加特征。由于时间窗口的大小是 1.5 分钟,我们期望音乐的潜在效果已经在同一窗口中可见。检查我们在第一部分中讨论的解离的内容。

一旦添加了音乐特征,嵌套交叉验证后的最佳模型导致预测能力的明显增加。验证平均误差降低到 0.097,决定系数增加到 r ~0.71。该系数表示响应变量(间隙效率)和预测特征之间的依赖强度。这是通过计算与输入要素的方差相关的间隙效率的方差比例来实现的。因此,这种改进看起来很有希望,因为系数的增加可能表明音乐对跑步表现的实际影响。

然而,在给定当前数据集的情况下,改进仍然不具有统计显著性。尽管调整后的决定系数也有所增加,但验证 MAE 和 r 的改进都小于估算时的不确定性。现在抛弃这些改善不仅仅是统计上的侥幸还为时过早。可能的情况是,当我们收集更多的数据时,我们会得到一个具有统计学意义的结果。但即使在那种情况下,我们仍然需要进一步的探索。决定系数通常是因果分析的一部分,但对它的改进并不直接意味着因果关系。此处介绍的研究将通过进一步的领域专业知识、更一般化的实验和深入的因果推理研究(包括扩展的敏感性分析)进行补充。目前,我们假设预测能力的增加与音乐对跑步成绩的影响有关,这样我们就可以继续构建推荐系统。

上图中记录的 fartlek 练习的差距效率(橙色)、最佳模型的预测(棕色)以及使用推荐系统的预测(深绿色)。

模型可解释性

嵌套交叉验证后的最佳模型是支持向量和线性回归的集合,具有结合 L1 和 L2 项的相当大的正则化因子。线性回归消耗高达三次的多项式特征的组合,而二次和三次组合被严格过滤为交互项的小选择。在验证过程中,通过监控调整后的决定系数来优化过滤过程。这种组合击败了更复杂的算法,如 XGBoost 树或我们构建的神经网络。我们还考虑了一个基于梯度推进线性回归的模型,但它倾向于过度拟合和模糊模型的可解释性。最终的集合是基于平均的

至于特征对预测的总体影响,最大的影响是由于时间 t. 处的速度,预测也受到包括心率、速度和几个滞后处的间隙效率的组合的严重影响。最近滞后的要素对预测的影响更大,影响随着时间的推移而减小。近期心率和速度与预测负相关,而近期间隙效率与预测正相关。累积的高度增益也有助于预测,在这种情况下,较大的值会降低间隙效率:跑步时爬坡会增加很多疲劳。至于天气特征,风越大,预测的间隙效率越低。考虑到风对疲劳的影响,这是意料之中的。有趣的是,大气压越高,间隙效率越高。这与文献中的发现一致,检查那里的中长跑结果。

对于这项研究中的跑步者,最大的音乐特征效果由能量给出。Spotify 将这一变量定义为强度和活动的感知指标。它越大,预测的间隙效率越高。与速度的相互作用项为正,这意味着这种影响随着速度的增加而增加。这与第 1 部分的p 值图的讨论一致。由于乐器演奏度语音演奏度越大,间隙效率越小,因此避免乐器和/或主要语音音轨可以获得更好的运行性能。对于具有更大的可跳舞性的歌曲,间隙效率往往更高,这也具有与速度的正交互项。最后,键越低(标准节距等级),预计该转轮的间隙效率越高。这是我们用这种方法得出的结论类型的简要概述。正如我们在第一部分中强调的,这些仅适用于本次实验的跑步者(N=1 统计分析)。类似的过程将被用于对任何其他人的记录进行个性化。

推荐系统

我们使用训练好的模型来构建一个音乐推荐系统。在新的跑步锻炼中,每当一首歌曲将要结束时,该解决方案都会处理到该点为止的所有锻炼记录数据。当假设在选定的池中流式传输每首歌曲时,它对跑步锻炼的下一个间隔中的间隙效率进行预测。从这些中,系统找到并推荐导致最高间隙效率预测的歌曲因此,最大化预测行驶性能。一旦下一首歌曲将要结束,系统就用更新的跑步锻炼记录重复这个过程。

歌曲库由随机选择的 100 首跑步者在训练中听的歌曲组成。我们的目标是最大限度地提高性能,同时保持推荐符合跑步者的口味。请注意,建议是为特定跑步者定制的,而也是为跑步锻炼的特定条件定制的。这些是天气、记录的速度、心率、步频、仰角增益和到 t 的间隙效率,以及跑步者为下一阶段训练计划的速度。

在上图中,您可以看到我们在整个博客系列中用于说明的 fartlek 的预计间隙效率。实际记录的间隙效率以橙色显示,包括音乐特征的上述最佳模型的预测是棕色线。在深绿色中,我们描绘了预测的间隙效率,如果跑步者没有听实际跑步锻炼记录中的音乐,而是听了推荐者建议的歌曲。对于这种特殊的练习,平均间隙效率的改善大约为 1%。在下图中,我们展示了记录中一次连续运行的三条差距效率曲线,以及同一次运行的系统建议。

渐进运行记录的差距效率(橙色),最佳模型的预测(棕色),以及推荐系统的预测(深绿色)。

为推荐器设计一个完全功能性的解决方案超出了这个初始实验的范围。这需要与 Polar 设备和 Spotify 应用程序进行实时集成,以便根据实时运行条件更新推荐的音轨。我们将对这种解决方案及其推广的深入探索留到将来。

以上渐进跑推荐歌曲。截图自Spotify for Linux

展望

我们已经描述了如何使用来自跑步锻炼的数据来构建音乐推荐系统。我们已经从 Polar 设备和 Spotify 应用程序的记录中展示了功能工程流程。我们已经详细介绍了为选择最佳回归模型而构建的训练和验证模式。这些算法根据锻炼时间点之前的可用数据预测未来的跑步表现。音乐功能的加入提高了算法的预测能力。我们利用这一点开发了一个推荐系统。它会在每次跑步锻炼中推荐最能提高跑步成绩的歌曲。

如上所述,结果仍然没有统计学意义。我们将继续收集数据,用更大的数据集重新评估它们。这将允许我们深入构建一个完整的解决方案。

这里提到的品牌都没有直接参与过这个实验

Linux 2 的 Windows 子系统上的数据科学——什么、为什么和如何?

原文:https://towardsdatascience.com/data-science-on-windows-subsystem-for-linux-2-what-why-and-how-77545c9e5cdf?source=collection_archive---------6-----------------------

为数据科学建立一个 WSL 2 环境是很耗时的,但是非常值得。

吉菲,https://giphy.com/gifs/ZS8GB00AWC6kw

你想用 Windows 编程!?

当一名崭露头角的数据科学家决定为大学购买一台新的笔记本电脑时,他们不可避免地会向他们的朋友、同学或 Stack Overflow 提出这样的问题:“我应该为数据科学使用什么操作系统?”这个问题在程序员中就像“我应该使用制表符还是空格”一样有争议如果你问我,这个问题没有单一的最佳答案。每个人的答案基于个人偏好、经验和外部限制。

对某些人来说,答案可能是 Windows。比如,你是否因为工作场所的要求而局限于 Windows?你没有预算换一台新的苹果机器吗?您是否没有时间或知识在您的 PC 上安装 Linux 操作系统?Windows 和微软 Office 套件是你最熟悉的吗?或者,您可能不想更换所有花了一大笔钱购买许可证的 Windows 软件。

Windows 可以处理数据科学,尤其是如果你除了用一些常用的包安装 Python、Anaconda 和 R 之外,没有做太多的事情。如果你是大学一年级的学生,这种设置会非常好。但是,你的工作变得越复杂,你在 Windows 上遇到的缺点就越多。你可能会遇到速度问题,兼容性严重不足,调试比它应该的要困难得多,几乎每个栈溢出帖子都给你指示只有才能在 Unix/Linux 中工作。

为什么要用 Linux 的 Windows 子系统?

为了克服在 Windows 中编程的限制,您可以在同一台机器上双引导 Linux 和 Windows,并根据您的任务需要在分区之间切换。但是你可能对这个过程不太适应,而且每次切换任务时登录和退出是多么痛苦啊。因此,接下来您可能会考虑在 Windows 中启动虚拟机环境。尽管它们被认为是与 Windows 操作系统隔离的,但它们通常难以设置、难以复制,并且充满了兼容性问题。

如果您想极大地改善您在 Windows 上的开发体验,我建议您放弃前面提到的选项,转而考虑 Linux 的 Windows 子系统(WSL)。你不仅可以获得更好的性能和更少的问题,还可以训练自己在一个非常接近完整的 Linux 或 Apple OS 的环境中编程。稍后切换到这些系统之一,或者将您的代码转移到这些系统之一应该很容易。

但是,如果您刚刚开始使用命令行,并且完全不熟悉命令行,那么这个选项可能对您来说太多了。WSL 2 目前不支持 Linux 中的 GUI 应用程序。(尽管微软计划在未来支持它们。)因此,虽然您可以通过命令行 100%地使用 Anaconda,但您将错过一些有用的 GUI,如 Anaconda Navigator。最终,你会想要脱离 GUI 工作——如果不是为了速度,而是为了让家人和朋友相信你是超级黑客的那种不可思议的感觉。但这种转变会随着时间的推移而到来,在跑之前先学会走并没有错。

Tenor,https://tenor . com/view/patience-young-grasshopper-gif-10391979

那么 WSL 2 到底是什么?

WSL 的最初版本是在 Windows 之上的一个层,允许你在 Windows 10 上运行 Linux 可执行文件。这是一个好的开始,但是仍然不能提供完全的 Linux/GNU 支持。真正的魔力来自微软 2019 年发布的 WSL 2。这种新的架构提供了自己的 Linux 内核,而不是兼容层。因此,您可以获得更快的性能,对系统调用的完全兼容性,在 Linux 内核上运行更多应用程序(如 Docker)的能力,并且更新将会发布,而无需等待微软为 WSL“翻译”更改。

基本上,有了 WSL 2,您将能够在 Windows 上的全功能 Linux 环境中流畅地工作!还有一些功能将两种系统完美地融合在一起。您可以让 Linux 环境像您的浏览器或 IDE 一样打开 Windows 程序。您可以使用普通的文件资源管理器或命令行浏览 Windows 和 WSL 文件系统中的文件。在某些 IDE 上,即使 IDE 软件安装在 Windows 中,您也可以使用 Linux 内核来运行和调试您的代码。

哇!听起来棒极了。我如何尝试它?

遵循微软关于如何安装 WSL 2 的说明。必须是 Windows 10,必须更新到版本 2004,build 19041 或更高版本。获得此更新可能有点棘手。对于一些用户(比如我自己),检查更新和安装最新的可用版本仍然不能让我得到这个需要的版本。如果发生这种情况,您可以按照指示使用 Windows Update 助手手动安装所需的内部版本。

您需要选择一个 Linux 发行版来安装。这可以在以后更改,如果您愿意,您甚至可以安装多个发行版。如果不熟悉或者没有偏好,选择 Ubuntu。请务必记下您为发行版设置的用户名和密码。您的 Linux“home”文件夹将位于“\wsl$\Ubuntu\home{username}”,您的密码将用于需要管理员权限的命令。

呃,但是我怎么用 Linux 呢?

目前,你几乎必须通过命令行终端、文件浏览器和运行在浏览器中的应用程序(如 Jupyter Notebook)来做所有事情。尽管微软已经宣布计划增加 GUI 应用程序支持以及 GPU 硬件加速。

终端应用程序和终端外壳有多种风格。我建议从 Windows 终端开始。这个最近发布的微软应用程序使用起来很快,允许你自定义主题、按键绑定和覆盖默认行为。最棒的是,你可以在一个窗口中为不同的环境打开标签式终端。因此,您可以拥有单独的概要文件来轻松启动 Powershell、Ubuntu、Bash、Anaconda 或许多其他受支持的环境。

Windows 终端环境选择

使用微软 GitHub 上的指令来安装 Windows 终端,然后点击向下插入符号和设置来编辑你的 settings.json 文件。你可以阅读文档来熟悉设置选项,或者查看我的设置文件的要点。

默认包含 WSL 发行版和 Powershell 的配置文件。要自定义这些概要文件并添加更多,请编辑 settings.json 中的“概要文件”对象。“默认”对象将默认设置应用于所有配置文件。

“profiles”: {
  “defaults”: {
    “acrylicOpacity”: 0.85000002384185791,
    “background”: “#012456”,
    “closeOnExit”: false,
    “colorScheme”: “Solarized Dark”,
    “cursorColor”: “#FFFFFF”,
    “cursorShape”: “bar”,
    “fontFace”: “Fira Code”,
    “fontSize”: 12,
    “historySize”: 9001,
    “padding”: “0, 0, 0, 0”,
    “snapOnInput”: true,
    “useAcrylic”: true,
    “startingDirectory”: “%USERPROFILE%”
 }
}

接下来,您需要在“列表”数组中添加特定终端应用程序的配置文件设置。列表中的每一项都需要一个用大括号括起来的唯一 guid 标识符。通过在 Powershell 中键入new-guid或在 Ubuntu 中键入uuidgen来生成新的 guid。然后,您可以自定义选项卡的名称和图标,使用哪个可执行文件打开命令行,以及从哪个目录开始。一定不要在列表的末尾留下任何逗号,因为这是无效的 json 语法,并且会抛出错误。

“profiles”: {
  “defaults”: {
    ...
  },
  "list: [
    {
      “guid”: “{2c4de342–38b7–51cf-b940–2309a097f518}”,
      “name”: “Ubuntu”,
      “source”: “Windows.Terminal.Wsl”,
      “startingDirectory”: “//wsl$/Ubuntu/home/nadev”
    },
    {
      “guid”: “{61c54bbd-c2c6–5271–96e7–009a87ff44bf}”,
      “name”: “PowerShell”,
      “tabTitle”: “PowerShell”,
      “commandline”: “powershell.exe”
    }
  ]
}

通过在 settings.json 的顶层将其 guid 和括号设置为“defaultProfile”来选择默认情况下将在新标签中打开的配置文件。

“defaultProfile”: “{2c4de342–38b7–51cf-b940–2309a097f518}”

现在您已经设置好了,可以开始使用 Linux 的 Windows 子系统了!

查看一些常见的终端命令来学习如何从命令行导航目录。

现在,进入环境设置

我将向您简要介绍我在 WSL 中为数据科学安装的应用程序。

代码编辑器或 IDE

就像终端应用一样,有大量的代码编辑器可供选择。每个人都有自己的偏好,无论你的偏好是什么,在尝试了几个之后,都是非常好的! Visual Studio 代码非常受欢迎,它的特色是一个专门为 WSL2 设计的扩展。我很轻松地获得了 Jupyter 笔记本、Python 代码和使用 WSL2 的调试器。

如果您想尝试一些更奇特的 Python 编码,请查看 JetBrains 产品套件中的 PyCharm 。与 VS 代码不同,只能使用付费许可的 PyCharm 或者申请免费学生许可。PyCharm 允许您使用 WSL Python 作为您的解释器,现在在您的 WSL2 文件系统中支持 Git 。这个系统可能需要更多的工作才能与 WSL2 完全兼容。例如,我不能让调试器或 Jupyter 工具窗口工作。

饭桶和饭桶狂欢

Git 是跟踪代码变更、版本控制和备份存储库文件的标准。Windows 和您安装的每个 Linux 发行版都有不同的文件系统,您需要在每个发行版上安装 Git。

对于您的 Windows 文件系统,安装 Git for Windows 并选择推荐的选项。这个安装还包括 Git Bash 终端应用程序。我喜欢使用 Git Bash 而不是 Powershell,因为命令语法就像 Linux 中的 Bash,所以你在任何地方都使用相同类型的命令。Powershell 更适合编写自动化脚本和使用 Windows 服务器的用户。因为我们要经常使用这个新的终端应用程序,所以将它作为新的配置文件添加到您的 Windows 终端设置中。

“profiles”: {
  “defaults”: {
    ...
  },
  "list: [
    ...,
    {
      “guid”: “{8d04ce37-c00f-43ac-ba47–992cb1393215}”,
      “name”: “Git Bash”,
      “tabTitle”: “Bash”,
      // the -i -l commands below are added to load .bashrc
      “commandline”: “\”%PROGRAMFILES%\\git\\usr\\bin\\bash.exe\” -i -l”,
       “icon”: “%PROGRAMFILES%\\Git\\mingw64\\share\\git\\git-for-    windows.ico”
    }
  ]
}

在 Linux 发行版上,git 通常已经包含在内,但是您可以在 Windows 终端的 Ubuntu 概要文件中运行sudo apt-get install git来安装它或者更新到最新版本。

如果您没有帐户,请立即创建一个。你可能想进入你的 GitHub 帐户设置>电子邮件,隐藏你的个人电子邮件地址。在这种情况下,您将获得一个生成的电子邮件地址,以便在配置 Git 时使用。这让你可以在不向公众透露你的个人邮箱地址的情况下提交给 GitHub。下一次你尝试推送 GitHub 时,会要求你输入用户名和密码,这些凭证会被保存起来以备将来使用。

一旦你创建了一个 GitHub 账户。在 Ubuntu 和 Git Bash 中运行下面的命令,在 Git 中配置您的姓名和电子邮件地址。该配置将存储在一个名为的文件中。gitconfig 位于您的主目录中。

git config --global user.name "Your Name"
git config --global user.email "your_email@domain.com"
git config --global credential.helper store

我还将在这里多提一点关于 Bash 的内容。在 Windows 和您的发行版中,会有一些文件在 Bash 打开时被执行。这些是。巴沙尔。bash_profile ,以及可选的。轮廓。如果您在文件浏览器中看不到它们,您可能需要将隐藏文件设置为可见。要在命令行中查看它们,输入 lsls -a(- a 选项显示所有文件,包括隐藏的文件)。我将让您研究这些文件的用途,但通常前两个文件会自动生成,您将在中编辑个人别名和环境变量。轮廓。在更改这些文件之后,您需要运行source ~/.bashrc来加载更改。

康达

如果您计划使用 Python 和 R 进行数据科学方面的工作,conda 使管理环境和包变得更加容易。你可以安装 Miniconda 来获得你需要的启动程序,或者安装 Anaconda ,它已经预装了大量的软件包。不过,如果安装在 WSL 中,Anaconda Navigator GUI 将无法工作,只能安装在 Windows 中。我用以下命令在 Ubuntu 中安装了 Python 3 的 Miniconda,但有些人也在 Windows 中安装它。(如果你知道为什么人们在两种环境下安装,而不仅仅是 WSL,请在评论中告诉我。)

# To install Anaconda for Python 3wget https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh
sh ./Anaconda3-2020.02-Linux-x86_64.sh# To install Miniconda for Python 3

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe
sh ./Miniconda3-latest-Windows-x86_64.exe

完成安装后,关闭并重新打开 Ubuntu 终端,输入which pythonwhich conda。根据您安装的软件包,您应该获得以下路径集之一。

# Path to Python executable in Anaconda
/home/{username}/anaconda3/bin/python
/home/{username}/anaconda3/bin/conda# Path to Python executable in Miniconda
/home/{username}/miniconda3/bin/python
/home/{username}/miniconda3/bin/conda# Then update all installed packages
conda update --all

如果没有,打开。配置并适当添加以下导出行之一,输入source ~/.bashrc,然后重试。

# Add Anaconda Python to PATH
export PATH=/home/{username}/anaconda3/bin:$PATH# Add Miniconda Python to PATH
export PATH=/home/{username}/miniconda3/bin:$PATH

现在您已经准备好使用 conda 来创建环境了。最好将包放在您的基础环境之外,并为不同类型的项目创建一个新环境。这防止了兼容性问题。有关管理环境的更多信息,请参见文档。

# To create an environment called 'pandasenv' with the pandas package installed.conda create --name pandasenv pandas

Jupyter 笔记本

要向他人展示您的作品,您可能会从使用 Jupyter 笔记本开始。该工具允许您在 conda 环境中运行 python 代码,用 markdown 注释代码,并显示图表和其他视觉效果。Anaconda 预装了 Jupyter 笔记本。在 Miniconda 上,打开您的 Ububtu 终端(您的基本 conda 环境将被自动激活),并键入以下内容进行安装。

conda install jupyter

与我们检查使用正确的 python 可执行文件的方式类似,我们还想使用which jupyter检查 jupyter。

# Path to Jupyter executable in Anaconda
/home/{username}/anaconda3/bin/jupyter# Path to Jupyter executable in Miniconda
/home/{username}/miniconda3/bin/jupyter

对我来说,这条路是不正确的,需要一些调查才能找到问题。在安装 Miniconda 的过程中,它的 bin 目录被添加到了*内的\(PATH 中。bashrc* 。这很棒,因为它告诉操作系统在运行命令时搜索该目录中的可执行文件。但是我的本地 bin 目录也被添加到了*中。轮廓*。这导致了\)HOME/。在$HOME/miniconda3/bin 之前检查 local/bin 中的可执行文件。为了解决这个问题,我将 Miniconda 导出行移到最后执行,方法是在 /home/{username}/中创建我的文件的一部分。轮廓如下图所示。

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi# set PATH so it includes miniconda's bin
if [ -d "$HOME/miniconda3/bin" ] ; then
    PATH="$HOME/miniconda3/bin:$PATH"
fi

当使用jupyter notebook命令启动 Jupyter Notebook 时,你会注意到弹出一条警告消息,要么你的浏览器无法启动,要么它试图启动一个无法显示 Jupyter Notebook 的文件。为了解决这个问题,我们需要做一些事情。首先,通过向添加以下内容,向您的路径添加一个浏览器变量。轮廓

# Path to your browser executableexport BROWSER='/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe'

接下来,通过生成 Jupyter 配置文件并取消注释下面列出的行,告诉 Jupyter Notebooks 不要试图使用在 WSL2 中不起作用的重定向文件来启动。

# Generate a config file at /home/{username}/.jupyter/jupyter_notebook_config.pyjupyter lab --generate-config# Uncomment the linec.NotebookApp.use_redirect_file = False

就是这样!您的 Jupyter 笔记本现在应该可以在浏览器中正确启动,网址为 http://localhost:8888/

我希望这个系统能为你服务,也能为我服务。如果您有任何问题或改善这种环境的建议,请在下面留下评论。

虚拟环境之外的数据科学是搞乱你的机器的好方法

原文:https://towardsdatascience.com/data-science-outside-a-virtual-environment-is-a-great-way-to-mess-up-your-machine-770d72f77e66?source=collection_archive---------40-----------------------

在自己的虚拟环境中运行 Jupyter 笔记本电脑

照片由克里斯蒂娜·莫里洛派克斯拍摄

在做创业数据科学的时候,我看到过机器由于全局安装软件包而陷入无用的状态。

在一种情况下,

  • Spacy 的最新版本用于本地开发。
  • 旧版本是在“无代码”供应商服务器上构建模型(在幕后)。
  • 还有一个版本运行在 AWS 服务器上。

不仅两者之间存在兼容性问题,而且在没有虚拟环境的情况下,需要在本地不同时间卸载和重新安装不同版本才能使其工作。

此外,全局安装使得在进行部署时很难知道哪些版本应该实际安装在生产服务器上。

很容易避免这种废话。

给每个项目一个自己的环境。

你有几个选择。但是如果你刚开始,使用pipvirtualenv

现在,我将带您在虚拟环境中设置 jupyter 笔记本电脑。

密码

确保您安装了 python。

$ python3 --version

应该返回类似 *Python 3.8.5* 的东西。

如果没有,那么安装 python3。

$ brew install python

获取 python 的位置

$ which python3

应该返回类似 */usr/local/bin/python3* 的东西。

创建虚拟环境

$ virtualenv --python=/usr/bin/python3 venv

将它指向上一步中 python 的位置。

激活您刚刚创建的环境

$ source venv/bin/activate

安装 jupyter

$ pip3 install notebook

这允许创建笔记本。

很好的进步,但是你还没有完成!如果您现在使用 pip 安装软件包,您的笔记本仍将静默使用全局安装的软件包。而不是您在这个新环境中安装的内容。

创建 jupyter 内核

$ pip3 install ipykernel

指向虚拟环境

$ python3 -m ipykernel install --user --name=venv

现在你可以打开 Jupyter 了

$ jupyter notebook

单击右上角的“New ”,然后选择您的虚拟环境。

您的笔记本现在将使用安装在这个新环境中的包。

漂亮!

结论

我希望你觉得这很有用。并且它将其他人从与上述噩梦相似的命运中拯救出来。

毕竟,它是如此的简单,并且允许你与团队中的其他人共享精确的版本。

如果你有任何关于软件包管理的问题,请告诉我,我会尽力帮助你的!

你的机器学习模型有可能失败吗?

原文:https://towardsdatascience.com/data-science-planning-c0649c52f867?source=collection_archive---------25-----------------------

b 理解大数据

规划过程中要避免的 5 个失误

Artem MaltsevUnsplash 上拍摄的照片

TL;博士 —在机器学习中产生出色的统计分析和突破的意图中,不要被数据科学规划过程中的这五个常见错误绊倒。

作为一名联邦顾问,我与从事科学研究、支持退伍军人、提供医疗服务和维护医疗供应链的美国政府机构合作。数据科学是一个非常重要的工具,可以帮助这些团队推进他们的任务驱动的工作。我在确保我们不会在数据科学模型上浪费时间和精力方面投入了大量精力:

  • 不要投入生产
  • 不要提供可操作的见解
  • 不要让某人的生活变得更容易

根据我的经验,我将分享来之不易的关于数据科学规划过程中的五个失误的教训,如果你遵循这些建议,就可以避免这些失误。

  1. 关注敏捷性和多样性
  2. 针对最终用户需求的设计
  3. 生产计划
  4. 了解数据债务
  5. 追求机器学习之外的选择

动机

就像可见光光谱一样,我们作为数据科学家所做的工作构成了更广泛范围的一小部分。数据科学家对数据生命周期的盲目会导致他们的机器学习项目失败。

数据科学只是支持组织中数据科学活动所需工作的一小部分。

数据生命周期跨越从规划归档的整个旅程。在大型组织中,可能有一个单独的团队负责将数据整理成可用于高级分析的形式所需的数据操作工作。可能还有另一个团队 DevSecOps ,负责将模型投入生产的工作。在小型组织中,数据科学家可能负责管理端到端的数据管道。

无论您的组织处于这个范围的哪个位置,数据科学家在项目规划过程中拥有对数据生命周期的清晰观点都是有益的。在这篇文章中,我分享了五个建议,以支持项目规划所有阶段的高级分析、机器学习和模型部署。

首先,如果数据所有者、消费者和利益相关者共享基本水平的数据素养会很有帮助。 数据管理知识体系 是很好的参考资料。

这个 600 多页的页面在我的数据科学咨询工作中仍然非常有用,并且在有人试图就数据管理的重要性与我争论时也非常有用。

阅读更多关于如何获得数据管理技能:

[## 你从未听说过的最好的数据科学认证

数据策略最有价值培训实用指南。

towardsdatascience.com](/best-data-science-certification-4f221ac3dbe3)

#1 —关注敏捷性和多样性

敏捷方法指的是一套价值和实践来增强软件开发的灵活性和责任性。敏捷宣言的四个价值观:

  1. 个人和互动 超过流程和工具
  2. 工作软件 综合文档
  3. 客户协作 合同谈判
  4. 响应变更 超过遵循计划

一个由 17 个白人发明的项目规划规程与推进多元化有什么关系?敏捷鼓励与代表整个组织中不同职能角色的利益相关者频繁互动

[## 敏捷方法能释放多样性吗?

在过去十年左右的时间里,有很多研究表明,多元化提高了团队的创新能力…

medium.com](https://medium.com/iamtech-series/can-agile-methodology-unlock-diversity-6dd4db28d689)

正如从商业角度来看,多样性会导致更好的软件的产生——性别、种族、民族和其他个人特征的多样性可以增强创造性解决问题的能力。

敏捷方法重视对变化的响应。它需要快速的迭代周期,这依赖于团队内部的信任和开放。像回顾和回顾这样的会议结构可以帮助团队停下来反思他们是否在为所有团队成员推广有效的工作方式。总之,敏捷团队应该利用这些实践和价值观,目的是充分享受多样性的好处。

用 Booz Allen Hamilton 首席数据科学家兼该组织非裔美国人网络职业发展委员会主席 Sian Lewis 的话说:

无数研究表明,你的团队越多元化,他们就越成功。我把多样化等同于成功。我是一个人——我享受成功。

阅读更多关于多元化对业务成果的影响:

[## 多元化赢了:包容有多重要

《多元化必胜》是麦肯锡调查多元化商业案例系列的第三份报告,紧随《为什么…

www.mckinsey.com](https://www.mckinsey.com/featured-insights/diversity-and-inclusion/diversity-wins-how-inclusion-matters)

如何关注敏捷性和多样性:

  • 在你的工作流程中设计短迭代并且在每次迭代中获得涉众的反馈
  • 积极寻求多样性促进不同的思维方式
  • 通过经常与你的团队讨论工作方式,创造一个开放和信任的环境

#2 —为最终用户的需求而设计

数据科学文化鼓励玩具项目Kaggle 竞赛探索新的想法,磨砺技能,磨练舞蹈战斗技能。虽然这些能力很重要,但数据科学家还需要练习项目范围界定的关键技能。斗争#2 指的是认为数据科学计划可以在一开始没有彻底调查最终用户需求的情况下取得成功。

数据科学家应该采用 以人为中心的设计 的方法,通过访谈直接向最终用户学习,然后反复测试并设计一个考虑了他们反馈的解决方案。虽然 HCD 的工作可以由大型组织中的独立团队来完成,但如果可能的话,数据科学家最好直接与用户合作。

HCD 也是打开技术问题解决工具巨大新市场的钥匙。v ia 99%隐形

与谷歌的下一个 10 亿用户计划合作, 99%不可见团队为全球新用户探索了软件开发的潜在陷阱:

  • 技术出错— 试图将小店主的交易分类账数字化,而没有先咨询店主是否需要解决这个问题
  • 技术做得好— 通过电影车提供基于网络的教育和娱乐

HCD 原则可以帮助产生快乐的技术体验,确保机器学习应用和人类用户之间的无缝交接,以及 尽可能最大程度地减轻负反馈循环

阅读更多关于HCD 对全球获取技术的影响:

[## 下一个十亿用户:超越西方的数字生活

下一个十亿用户:西方之外的数字生活 Amazon.com。符合条件的免费运输…

amzn.to](https://amzn.to/3pKrafk)

如何根据最终用户的需求进行设计:

  • 在项目早期创建一个面试时间表
  • 确保数据产品为最终用户解决问题
  • 在每个迭代周期寻求反馈

我只能想象这就是 Kaggle 如何决定决胜局。通过 giphy

#3 —生产计划

87%的数据科学产品从未投入生产 。这些问题包括:

  • 不切实际的利益相关者期望
  • 未能使用敏捷方法和 HCD 进行计划
  • 缺乏开发运维部署技能,如修剪和容器化

再加上一点数据科学的修补工作(“我想我的 Jupyter 笔记本电池出了故障”)——毫不奇怪,10 个数据科学项目中有 9 个永远见不到天日。

[## 又一个 AI 冬天?

如何部署更多的 ML 解决方案——五种策略

towardsdatascience.com](/the-last-defense-against-another-ai-winter-c589b48c561)

鉴于到目前为止我部署的唯一数据产品是这个基于集群的 Neighborhood Explorer dashboard,我将把它留给更有经验的人来指导您完成部署过程。优利系统公司的机器学习顾问丽贝卡·比尔布罗,也是黄砖软件包的共同创建者,她写道:

数据科学家应该了解如何部署和扩展他们自己的模型…过度专业化通常是一个错误。

她为数据科学推荐了 Kubernetes 上的课程和阅读材料。这个容器管理工具代表了云部署中的主导力量。容器化允许应用程序组件在各种环境中运行——例如其他计算机、服务器、云——并提供了虚拟机的轻量级替代方案,因为容器与主机操作系统共享资源,而不需要客户操作系统。

在开发中,容器有助于克服数据科学家、软件工程师和 DevOps 从业者使用的多种环境带来的挑战。在生产中,容器向客户交付微服务以响应网络请求。

在云计算原生计算基金会调查的公司中,84%的公司在 2019 年使用容器进行生产,78%的公司使用 Kubernetes 来管理他们的部署。Kubernetes 提供了供应、联网、负载平衡、安全性和伸缩性——使容器部署简单、一致和可伸缩的所有必要元素。

随着容器化日益成为主流,这种方法为数据科学模型部署开辟了新的领域。缩放资源可以让一个模型更好地服务 需求高峰。此外,Kubernetes 支持在边缘上进行部署——减少延迟,节省带宽,改善隐私,并在总体上支持更智能的机器学习。此外,它还可以管理部署策略,如 A/B 测试、蓝绿部署和金丝雀发布

阅读更多来自 Caleb Kaiser 的关于如何优化你的生产模型的内容:

[## 如何降低机器学习推理的成本

优化推理成本的完整清单

towardsdatascience.com](/how-to-reduce-the-cost-of-machine-learning-inference-4b466be90ba4)

如何计划生产化:

#4 —了解数据债务

如果您在进行 EDA 时发现了数据质量问题,然后默默地继续进行您的数据科学项目,那么您正在使您组织的数据债务永久化。据数据战略家约翰·拉德里:

即使是最简单和最基本的数据管理,拖延的时间越长,都会产生巨大的成本。

术语数据债务为衡量与低质量数据相关的成本提供了量化和基本原理。它基于技术债务的概念,指的是选择快速和肮脏的解决方案而不是更深思熟虑的长期解决方案的影响。

正式的数据治理文档应该通过提出报告数据问题的计划来解决数据债务问题。这样,它们就可以在上游得到纠正。再次引用约翰·拉德里的话:

像所有的债务一样,数据质量问题最终必须偿还——要么随着时间的推移慢慢偿还(带利息),要么一大笔钱还清债务。

在问题的源头解决问题要比在分析阶段进行临时修补好得多。一个有效的数据质量报告过程可以采取内部网门户的形式,在那里问题可以被发送到指定的数据质量团队(或者至少发送到数据源所有者)。

补救数据债务的行动不足是第四个难题,因为数据科学从业者通常没有接受过有效数据管理方面的足够培训。与软件开发和数据工程等更成熟的领域相比,很少有认证计划被视为数据科学家的标准。我真的希望在数据策略 中看到更多对正式培训的强调。

阅读更多关于如何将软件工程的最佳实践应用于机器学习的信息:

[## 5 篇必读的数据科学论文(以及如何使用它们)

让你在机器学习游戏中保持领先的基本理念。

towardsdatascience.com](/must-read-data-science-papers-487cce9a2020)

如何避免数据欠账:

  • 将高质量数据的好处和低质量数据的风险与您的组织的战略目标联系起来
  • 授权最终用户通过正式的数据质量报告流程向指定团队或数据源所有者报告数据质量问题
  • 进行数据质量评估,包括评估元数据的质量

#5 —追求机器学习之外的选择

我们已经讨论了三个关键流程(敏捷方法以人为中心的设计、和数据质量报告)以及两个支持数据科学的关键团队(数据操作开发安全操作)。

冒着用我 3 磅重的 数据管理知识体系 副本打你脑袋的风险,设置高级分析需要大量的幕后工作。麦肯锡的数据科学顾问同意的观点,并警告说,不应该以科学项目的心态来对待计划。

艾肯数据框架通过 数据管理知识体系

与马斯洛的需求层次一样,如果不首先满足数据治理、数据架构、数据质量、元数据等方面的生理和安全需求,就无法实现数据科学。艾肯金字塔的基础层

在假设需要用数据科学来解决组织挑战之前,有必要调查一下,在直接分析之后,将精力投入到数据质量改进项目中是否更好。据商业情报专家罗布·柯利:

最令人震惊的是我们要走多远。和我们一起工作的人都会说‘我们这里真的很原始’。我们远远落后于形势,”

但是每个人都这么说。当我在 X 公司工作时,我认为世界上其他公司都把基础工作做好了。他们没有。

每个人都还处于黑暗时代。

不是所有的问题都是数据科学的问题。组织的数据成熟度可能不足以进行高级分析。这没关系——正如罗伯所说:

下一件大事:有史以来第一次把基础做好。

数据科学是更大生态系统的一部分,是业务改进的重要组成部分,也是数据驱动行动的核心要素。它代表了数据相关活动的顶峰。因此,它需要得到强大的数据管理实践的支持。

阅读有关数据科学基础知识的更多信息:

** [## 如何进入数据科学领域

今年,我完成了一个训练营,并立即获得了一份数据科学的工作。如果我不得不回到过去,通过…

towardsdatascience.com](/new-data-science-f4eeee38d8f6)

如何追求机器学习之外的选择:

  • 通过 学习 SQL 和理解 数据建模 来投资您的数据工程技能
  • 投资于您执行直截了当的分析和传达结果以进行有效决策的能力
  • 确保数据科学概念证明是为部署而非学习而设计的**

摘要

从事数据科学工作听起来很棒。通过帮助组织利用他们的数据作为战略资产,有很大的潜力让世界变得更美好。避免这 5 个潜在的问题将有助于提高您解决问题的能力,以交付有效的数据产品。

****如果你喜欢这篇文章,请在 MediumLinkedInYouTubeTwitter 上关注我,了解更多提高你的数据科学技能的想法。当“ 资源在 2021 年增强您的数据科学 ”发布时,请注册以获得通知。

免责声明 : 本文包含了一些书籍的附属链接,如【DMBOK】CDMP 考试所需的参考指南。通过这些链接购买书籍有助于支持我在数据科学和数据策略方面的写作——提前感谢。

在部署机器学习模型的道路上,你担心哪些漏洞?请在评论中告诉我。

提升 Python 技能的文章

** [## 10 项被低估的 Python 技能

使用这些技巧来改进您的 Python 编码,以获得更好的 EDA、目标分析和功能,从而提升您的数据科学水平

towardsdatascience.com](/10-underrated-python-skills-dfdff5741fdf) [## 面向临床文本的命名实体识别

使用 pandas 将 2011 i2b2 数据集重新格式化为用于自然语言处理(NLP)的 CoNLL 格式。

medium.com](https://medium.com/atlas-research/ner-for-clinical-text-7c73caddd180) [## 如何利用 Spotify 的 API 并在 Streamlit 中创建用户界面

如何交互式可视化 Spotify API 数据的演练

towardsdatascience.com](/how-to-utilize-spotifys-api-and-create-a-user-interface-in-streamlit-5d8820db95d5) [## 我看到你没有戴面具…

我如何使用 Keras 制作我的第一个图像分类模型

towardsdatascience.com](/so-i-see-that-youre-not-wearing-a-mask-6631746c7559) [## 越狱

我们应该如何设计推荐系统

towardsdatascience.com](/how-to-design-search-engines-24e9e2e7b7d0)**

数据科学生产管道-分布式设计方法

原文:https://towardsdatascience.com/data-science-production-pipelines-distributed-design-approach-d1e9dd6e6c3b?source=collection_archive---------29-----------------------

针对生产环境的大规模数据科学管道中涉及的“如何”和“什么”设计方法的系统指南(但也可用于开发/测试环境)。

生产级数据科学应用程序的架构设计非常类似于将正确的部分放在正确的位置,同时考虑很少的前进。

来源:像素

案例研究-建立分类模型,根据声纳信号检测表面是金属还是岩石

代码脚本、数据信息和配置可在https://github . com/bmonikraj/medium-data science-pipeline-tutorial找到

我们将在讨论各种部署方法的架构风格,更多地关注这些方法的优缺点,并强调这些方法的关键领域。因此,我们不太关注代码中到底发生了什么。如果你想讨论更多关于分布式开发模式和机器学习实现的内容,请发邮件到 bmonikraj@gmail 进行进一步讨论。

我仍然建议您浏览上述 Github 库,并按照 README.md 文件中提到的说明,在您的机器上尝试这些,只是为了让您的手有点脏!

在阅读了 Github 存储库中的 README.md 之后,我将强调其中的要点,这些要点对我们的讨论至关重要:

  1. 经过训练,其中一个工件组是{ predictor.py,clf_model.sav }。这可以被视为一个逻辑工件单元,我们在下文中将其称为 PREDICTOR
  2. 另一个工件组是{ service.py }。这也是一个逻辑工件单元,我们在下文中称之为 SERVICE
  3. 最后一个脚本(不会把它当成神器:D)是{ client.py },可以用来测试:基本上是 CLIENT ,此后。

泰勒·维克Unsplash 上拍摄的照片

我们的重点领域—

我们试图将重点放在部署 ML/数据科学模型即服务(MLaaS/DSaaS)的用例上。

设计(1)——服务于 ML 服务的 REST APIs

架构图-> 使用 ML 服务作为 REST APIs 的阻塞调用机制| 来源:作者设计

建筑-

  • CLIENT 是使用输入进行呼叫的客户端(HTTP 客户端,可以是脚本、web 应用程序、移动应用程序、桌面应用程序等)。
  • 对作为 REST 端点的 SERVICE 进行的 HTTP 调用
  • SERVICE 对同一平台内的 PREDICTOR ML 服务/函数/脚本进行远程过程调用/基于进程间通信的调用。
  • 响应以相反的方向流动,从 _ PREDICTOR _--> _ SERVICE _--> _ CLIENT _。
  • 更容易实现授权/身份验证模型,因为 SERVICE 充当实现控制的业务层。
  • 模型应该是静态的。

优点-

  • 易于实现,非常熟悉各大开发商
  • 没有分布式设计,因此没有令人头痛的同步问题
  • SERVICEPREDICTOR 保持在相同的平台上,因此没有平台间通信(服务器间)的开销。
  • 设计得相当快。
  • 适用于预测时间非常快的用例(可以使用分析器进行验证)
  • 更容易实现授权/身份验证模型,因为 SERVICE 充当实现控制的业务层。

缺点-

  • 服务和预测者之间的往返时间必须小于客户端和服务之间的 HTTP 超时时间
  • 需要较长时间的 ML 预测在这些情况下很难实现,因为它将面临超时。
  • 大多数情况下,不适合大数据使用情形。

设计(2)——为 ML 服务的网络套接字

架构图-->使用 ML 服务作为套接字的非阻塞调用机制| 来源:作者设计

建筑-

  • CLIENT 是使用输入进行呼叫的客户端(Web Socket 客户端,可以是脚本、Web 应用程序、移动应用程序、桌面应用程序等)。
  • 对 WS 服务器 SERVICE 进行的 WS 调用。
  • SERVICE 在同一平台内对 PREDICTOR ML 服务/函数/脚本进行远程过程调用/基于进程间通信的调用。
  • 响应以相反的方向流动,从 _ PREDICTOR _--> _ SERVICE _--> _ CLIENT _
  • 更容易实现授权/身份验证模型,因为 SERVICE 充当实现控制的业务层。
  • 模型应该是静态的。

优点-

  • 实现起来并不困难,对主要的开发者非常熟悉,并且在 WS 实现上有很好的社区支持。
  • 没有分布式设计,因此没有令人头痛的同步问题
  • SERVICE and PREDICTOR 保持在同一平台上,因此没有平台间通信(服务器间)的开销。
  • 设计得相当快。
  • 适用于预测时间非常快的用例(可以使用分析器进行验证)
  • SERVICEPREDICTOR 之间的往返时间并不重要,因为无论何时响应就绪,它都会被发送到 CLIENT by SERVICE 中。因此,对客户端的响应是从服务推送的,而不是从服务拉取的。
  • 更容易实现授权/身份验证模型,因为 SERVICE 充当实现控制的业务层。

缺点-

  • CLIENTSERVICE 之间的通信不是无状态的,因此 SERVICE platform 的内存需求很高。
  • 对于在一个时间单位内有多个连接的用例来说,这并不好,因为 SERVICE 迟早会与 multiple CLIENT 有非常多的打开连接。
  • CLIENT 需要在 Socket base 的“发送”—“接收”机制中实现。

设计(3)——服务于 ML 服务的 Web Sockets 和 MQ[这在上面提到的 Github 库中实现]

架构图-> 使用 ML 服务作为套接字的无阻塞调用机制与 MQ| 来源:作者设计

架构-

  • CLIENT 是使用输入进行呼叫的客户端(Web Socket 客户端,可以是脚本、Web 应用程序、移动应用程序、桌面应用程序等)。
  • 对 WS 服务器 SERVICE 进行的 WS 调用。
  • SERVICE 将输入消息发布到 MQ 上商定的主题,由 PREDICTOR 使用,处理并再次将结果发布到 MQ 上的主题,由 SERVICE 使用。
  • 响应以相反的方向流动,从 _ PREDICTOR _--> _ SERVICE _--> _ CLIENT _
  • 更容易实现授权/身份验证模型,因为 SERVICE 充当实现控制的业务层。
  • 模型应该是静态的。
  • MQ 需要高度可用和可靠,因为它可以作为单一的故障源。

优点-

  • 分布式设计,因此可以通过云原生应用的 12 因素应用原则轻松实现云原生。
  • SERVICE and PREDICTOR 可以在不同的平台上,因此通过设计进行分布。可以垂直和水平缩放。
  • 每个应用程序,如 SERVICE and PREDICTOR 都可以打包为 docker,并在 K8s、Docker Swarm、AWS EKS 等上进行编排,从而实现扩展。
  • 适用于预测时间不太快的用例(可以使用分析器进行验证)
  • SERVICEPREDICTOR 之间的往返时间并不重要,因为无论何时响应就绪,它都会被发送到 CLIENT by SERVICE 中。因此,对客户端的响应是从服务推送的,而不是从服务拉取的。
  • 更容易实现授权/身份验证模型,因为 SERVICE 充当实现控制的业务层。

缺点-

  • 对于分布式应用程序,通过 MQ 进行通信,输入和它们各自的响应之间的同步变得至关重要,需要小心处理。
  • 应用程序必须以相当云本地和 Devops 友好的方式编写。
  • CLIENTSERVICE 之间的通信不是无状态的,因此 SERVICE platform 的内存需求很高。
  • 在进程间通信的 MQ 模型中,异步通信和回调没有什么困难。
  • CLIENT 需要在 Socket base 的“发送”—“接收”机制中实现。

设计(4) —为 ML 服务的 MQ

架构图-> 使用带有 MQ 的 ML 服务的非阻塞调用机制| 来源:作者设计

建筑-

  • CLIENT 是带有输入的发布消息(客户端可以是脚本、web 应用、移动应用、桌面应用等)。
  • SERVICE 已经不存在了。
  • CLIENT 将输入消息直接发布到 MQ 上商定的主题,由 PREDICTOR 使用,处理后将结果再次发布到 MQ 上的主题,由 CLIENT 使用。
  • 响应以相反的方向流动,从 _ PREDICTOR _--> _ CLIENT _
  • 难以实施授权/身份验证模型,因为它必须完全分布式且专门用于实施控制。
  • 模型应该是静态的。
  • MQ 需要高度可用和可靠,因为它可以作为单一的故障源。

优点-

  • 分布式设计,因此可以通过云原生应用程序的 12 因素应用程序原则轻松实现云原生。
  • PREDICTOR 可以是“n”个不同平台,因此通过设计来分布。可以垂直和水平缩放。
  • PREDICTOR 可以打包为 docker,并在 K8s、Docker Swarm、AWS EKS 等平台上进行编排,从而实现扩展。
  • 适用于预测时间不太快的用例(可以使用分析器进行验证)
  • CLIENTPREDICTOR 之间的往返时间并不重要,因为无论何时响应就绪,它都会被发送到 CLIENT by PREDICTOR 中。因此,对 CLIENT 的响应是从 PREDICTOR 推入的,而不是从 PREDICTOR 拉出的。
  • 架构变得无状态。

缺点-

  • 难以实现授权/认证模型 as SERVICE 充当用于实现控制的业务层。
  • 对于分布式应用程序,通过 MQ 进行通信,输入和它们各自的响应之间的同步变得至关重要,需要小心处理。
  • 应用程序必须以相当云本地和 Devops 友好的方式编写。
  • 在进程间通信的 MQ 模型中,异步通信和回调没有什么困难。
  • CLIENT 需要在 MQ 协议的“发布”—“订阅”模型中实现。

正如在许多 ML 讲座、演讲、博客、书籍和文章中多次提到的,没有一个盒子适合所有尺寸。作为开发人员,我们必须正确理解业务用例、瓶颈、难点、需求、SLA 和成本,以选择一种部署拓扑。

毫无疑问,由于分布式、云原生和松散耦合拓扑以及 MQ 是服务间通信的核心,所以在 MQ 节点/集群的可靠性、高可用性和安全性方面需要非常小心。

正如我在上面重点介绍的“静态”模型一样,为了简单起见,当业务用例需要“动态”模型、需要频繁重新训练的模型、基于强化学习的不断变化的模型以及具有流和连续输入数据的模型时,我们甚至需要考虑“训练”阶段的分布式体系结构,其中有一个集中的模型存储位置,PREDICTOR_ 可以从中提取模型并进行预测。我们可以再次使用 RabbitMQ、Kafka、SQS 等 MQ 通过流接收数据,运行预定的后台作业(可能使用芹菜气流)来训练模型,并在中央模型库为 PREDICTOR consumers 发布模型。同样,这需要同步的另一个方面,这是需要注意的。

除此之外,使用基于 MQ 的分布式体系结构,如果需要,您可以实现“警报”机制。

在结束语上,感谢大家耐心看完这篇文章。对于讨论任何与本文相关的,甚至与本文无关的,带有一些令人毛骨悚然的 ML/部署用例/问题/障碍的内容,请不要犹豫,发送邮件至 bmonikraj@gmail

乔恩·泰森在 Unsplash 上的照片

能让你得到这份工作的数据科学项目

原文:https://towardsdatascience.com/data-science-projects-that-will-get-you-the-job-805065e7260?source=collection_archive---------6-----------------------

我是如何在自学数据科学四个月后获得实习机会的

照片由 Unsplash 上免费使用声音

就在几周前,我参加了亚洲最大的电信公司之一的数据科学实习面试。

我下周开始上班。

我是怎么得到面试机会的?

提示:不是因为我的教育背景(我甚至还没有完成我的 CS 学位)。也不是通过我曾经努力收集的数据科学证书。

我被叫去面试,因为我的数据科学作品集,以及我在那里展示的项目。

申请数据科学工作可能会非常困难,因为几乎不可能完全适合你申请的公司。

我的建议是——不要试图去学习现有的每一种工具,而是用你所知道的去构建一些有用的东西。那是你学习最多的地方。然后,向全世界展示你的项目。围绕它讲一个故事。

创建你热爱的项目不仅仅是展示你的技能。它显示了你对自己工作的热爱。

你将不得不花上几周(有时甚至几个月)的时间,试图将一个想法变成现实。这将是几个小时盯着你的笔记本电脑,试图修复你的代码,每次你试图运行它时抛出一个错误。

有时候,你会意识到花一个月的时间完成项目是不可能的。

没有办法提高你的模型对实际用户数据的准确性,因为你的数据集是有缺陷的。

那是一个月的努力付诸东流,你将不得不重新开始。

只有真正热爱自己工作的人才能坚持到底。

这会让雇主相信你能完成工作。即使你不完全符合职位描述,你也是有能力解决手头任务的人。

在本文中,我将带您了解一些您应该做的数据科学项目。这些项目不仅会提高你作为一名数据科学家的技能,还会在你的简历上看起来很不错。

我假设你已经学过一两门数据科学的课程,并且掌握了一些编程和数据分析技能。(如果没有,可以点击 此处 查找有助于获得所需专业知识的免费课程列表)。

卡格尔

项目一开始就很棒,因为干净和结构化的数据就在你面前。

分析结构良好的数据并对其运行机器学习模型是非常容易的。

如果你是初学者,Kaggle 是你最适合动手的地方!

杰西·奥里科Unsplash 上拍摄的照片

做 Kaggle 项目最大的好处是网上有大量的指导。

每个人都在这样做,并竞相获得最高的精度。人们发布博客、GitHub 知识库和 YouTube 视频,展示他们解决问题的方法。

Kaggle 还提供了一些初学者友好项目的教程,这些在刚开始时会非常有帮助。

如果你是这个领域的新手,这里有一些你应该做的 Kaggle 项目。

当你是初学者时,Kaggle 项目是很好的开始。更少的时间浪费在数据收集和清理上,更多的时间可以用于开发您的机器学习技能。

然而,如果你的目标是创建一个令人印象深刻的数据科学投资组合,那就远离 Kaggle。

为什么?

真实世界的数据是杂乱的。

在为一家公司工作时,你不会像在 Kaggle 那样得到一个干净和结构化的数据集。

事实上,数据科学家大约 80%的工作都花在清理数据上,只有 20%花在模型上。

通过展示您的 Kaggle 项目,您只展示了完成工作所需技能的一小部分——创建高度精确的模型(有时)。

那么你应该怎么做呢?

展示各种技能

照片由内森·杜姆劳Unsplash 上拍摄

是的,现在一个潜在的雇主知道你可以创建很棒的监督学习模型,做出高度准确的预测。

还有…还有什么?

确保创建不同类型的项目,展示各种各样的技能——数据清理、分析、可视化、机器学习和通信。

如果您在另一个领域拥有特定领域的知识,那么如果您将这些知识集成到您的数据科学项目中,您就有更大的机会脱颖而出。

展示你的激情

伊恩·施耐德在 Unsplash 上拍摄的照片

你需要热爱你的工作。你可能不一定喜欢编码、数学或机器学习,但这没关系。

你需要做的是——在你热衷的领域找到使用数据的方法。

也许你喜欢音乐(我是说,谁不喜欢呢?)

你可以尝试创建一个音乐分析项目,通过分析趋势和预测行业的下一个大热门!

事实上,有一整页致力于数据科学的音乐分析。

如果你创建的数据科学项目与你热衷的事情相关,那么即使遇到困难,你也更有可能坚持下去。这比你不感兴趣的项目更容易完成。

例子

我一直对揭示社会问题感兴趣,比如气候变化、性别不平等和种族差异。

有什么比数据更好的方法来洞察这些问题呢?

这促使我创建数据分析项目,例如:

还有,我爱读书。哈利波特系列是我年轻时的最爱,所以我创造了一个哈利波特性格预测模型

这些只是一些关于如何将数据和激情结合起来创建数据科学投资组合的例子。

沟通

最重要的是,确保沟通你的项目。

如果代码放在你的 GitHub 库中,没有任何解释,那么创造一个令人惊叹的产品是不够的。

创建一个数据科学项目后,围绕它讲一个故事。

你为什么决定开始这个项目?完成它的步骤是什么?你的数据发现是什么?

用简单的术语交流你的项目,这样任何试图阅读它的人都能很容易理解。

你可以创建一个 GitHub pages 网站来解释你的项目,给媒体出版物写信,甚至开始你自己的博客。

数据科学组合

最后,你需要一个地方把你所有的工作放在一起。我建议创建一个数据科学组合网站来展示这一切。

当我申请实习的时候,我只发了一个链接到我的作品集网站。我附上了我的 GitHub 和 Medium 账户的链接,并写了一份关于我所做的所有项目的简要总结。

您可以点击此处了解如何创建一个简单的数据科学组合网站。我只用了一天就做好了。

开始吧!

如果你已经参加了几门在线课程,但不确定下一步该做什么,我建议你应该开始做一个数据科学项目。

做一些研究,选择一个数据集,然后开始。给自己一个期限,并努力在此之前完成。

祝你好运!

数据科学拉请求—一种数据科学审查和合并的方法

原文:https://towardsdatascience.com/data-science-pull-requests-a-method-for-data-science-review-merging-66bd68e17138?source=collection_archive---------57-----------------------

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

MLOps 和开放源代码数据科学向前迈进了一步

数据科学拉请求。资料来源: DAGsHub

今天,我很高兴在 DAGsHub 上介绍数据科学拉请求(DS PRs),这是为数据科学(DS)工作流重新设计的拉请求(PRs)。这项新功能开启了数据科学团队的标准审查流程,使他们能够跨不同分支合并数据,并接受跨分支的数据贡献。这为数据科学组织中的团队提供了更好的协作体验,并实现了真正的开源数据科学(OSDS)项目。

更多详情,请继续阅读…

介绍

当我们创建 DAGsHub 时,我们专注于使数据科学协作成为可能。具体来说,我们深深地关心依赖开源软件(OSS),我们开始着手一项使命,让 OSDS 像今天的 OSS 一样普及。

这意味着我们关心数据科学项目和实验的 可发现性 、实验环境的、实验结果的,最后,代码、数据和模型的 贡献性 被改回原始项目。**

回顾这些流程和现有解决方案时,有些事情变得很清楚:

  • 可发现性 表示能够回答问题下一步该怎么做?“—找到一个要做的项目,并在该项目中找到哪些实验可能是有趣的或重要的。它主要通过实验跟踪系统来解决,其中许多系统使用难以理解和移植的专有或黑盒格式。DAGsHub 通过创建一个依赖于简单开放格式(YAMLCSV)的实验跟踪系统超越了这一点。这意味着您不需要添加晦涩的代码行——一切都是通过自动扫描和分析推入平台的 git 提交来工作的。
  • 可理解性 意思是能够回答问题“我应该怎么做我想做的事?“—这通常包括回顾为什么、如何以及在一个项目或实验中已经做了什么。这一步的解决方案大部分是手动的,依赖于自我记录自己的工作和与合作者的讨论。DAGsHub 在这方面有所改进,它为项目的代码、数据、模型和管道提供了一个方便的接口,为用户提供了一个了解项目组件以及它们如何相互交互的窗口。
  • 再现性 指的是建立一个你想要进行的实验的精确副本。很多时候,这个过程被简化为 Git 提交和实验参数(记录在实验跟踪系统中)。然而,再现性的真正标准包括 轻松地 检索相同版本的数据、模型和其他工件。最好通过使用 Git 和一些专用的数据版本控制解决方案来解决这个问题。DAGsHub 通过依赖 Git 和 DVC 等开源工具来解决这个问题,提供上面讨论的标准——用一个(或两个)命令完成项目(代码、数据、模型、参数和其他工件)的完整副本。
  • 贡献性 是指你可以拿一个新的实验或结果,把它们重新整合到你开始的项目中,这样你就不需要单独维护你的结果了。今天,这是完全手动的,充满摩擦,从根本上不存在

我们还有更多的东西要构建,但是很明显有一个方面需要首先被覆盖——一个 贡献 机制。

贡献—数据科学拉取请求

合作过程的最后一步可以说是最重要的一步。没有它,工作流是片面的,独白,这意味着协作不会发生。实际上, 投稿 可以分解为两个任务——审阅合并投稿。

在软件中,审查和合并都是拉请求过程的一部分,但是他们的焦点仅仅在代码上。

数据科学拉取请求让你 审核实验, 代码,数据,模型, 和你的 管道 ,以及 自动将它们全部合并修改。

数据科学评论

如果您曾经与其他人一起从事过数据科学项目,或者尝试过审查其他人的数据科学工作,您就会知道获得理解其他人的工作或解释自己的工作所需的信息有多难,这样审查过程才有意义。这个过程是缓慢的和手工的,因为系统不是为审查而构建的。

自动审查过程意味着可以更快地讨论变更和更新,并将其集成到您的项目中。你需要迅速看到发生了什么变化,在上下文中讨论它,并决定如何前进。

这在实践中意味着什么:

  • 在上下文中对实验进行评论——您可以查看作为 DS PR 的一部分提供的新实验,并将它们与原始项目中的基础实验进行比较。查看所有可视化内容和信息,并在公关讨论中添加评论,并提供相关比较/可视化内容的链接。

评论 DS PRs 中的实验。来源: DAGsHub

  • 查看哪些数据和模型发生了变化(不仅仅是代码)—查看添加、删除或修改了哪些数据、模型和工件文件。这意味着您可以轻松地找出变化,并将讨论集中在重要的方面。

数据对比示例。来源: DAGsHub

  • 并排比较和区分笔记本电脑-笔记本电脑是许多数据科学项目的重要组成部分。然而,在很长一段时间里,他们在审查过程中没有得到足够的处理,依赖于原始JSON文件的差异,而这些差异大多是不可读的。作为 DS PR 的一部分,您现在可以在直观的 UI 中查看这些更改。这样做的另一个好处是,如果您需要一个特殊的可视化,您可以提交一个具有该可视化的笔记本,并方便地查看更改。

笔记本不同的例子。来源: DAGsHub

在回顾了合作者的工作之后,我们需要一种方法来自动地合并那些变更。这就是我们建立数据科学融合的原因。

数据科学融合

使用 Git 合并代码是可能的,但是正如我们已经讨论过的,这并不是数据科学项目的全貌。使用 DS PRs,您也可以合并您的数据和其他工件。

数据合并

每个人都知道代码中的错误,但是你也可能有你没有意识到的数据错误。例子包括数据不是最新的,有偏见的,或贴错标签的。假设您发现了这样一个 bug,并且想要修复它——这通常意味着您需要同意并执行一些手动操作来更新或添加新数据。有了数据合并,一旦你接受了一个 DS PR,新的数据将会在一个完全自动化的过程中被自动复制到你的项目中。

伪像合并

这不仅限于原始数据— 数据合并允许您合并模型和数据管道中的任何其他工件(例如,预处理数据或 3d 模型)。举一个例子,管道中的一个步骤需要 2 周的时间来运行,并产生一些经过训练的模型或经过处理的数据集。如果只有原始数据被合并,您将不得不再次运行那个痛苦的 2 周过程。工件合并意味着在一个 DS PR 被合并之后,产生的项目和最初的贡献一样是可复制的。

在接受 DS PR 之后,你处于 DS 项目的相同状态,就像你在软件项目中接受 PR 之后一样。

数据科学合并—请注意,在接受此 DS PR 时,将复制 171 MB 的数据。来源: DAGsHub

数据合并意味着您可以轻松地接受来自贡献者的数据和模型,而不必让每个人都完全访问您的数据存储。这可以减少摩擦,加快团队努力。

最后一种能力对 OSDS 特别有用。

这对 OSDS 意味着什么?

开源数据科学(OSDS)有潜力对世界产生类似的影响,就像开源软件(OSS)一样。这是 DAGsHub 的既定目标,以促进 OSDS 和建立技术,使它尽可能容易。OSDS 必须排在第一位,行业工作流程将反映 OSDS 项目中的工作流程,就像他们对开放源码软件所做的那样。

但是让我们面对现实吧——OSDS 还没有真正的 T2 T3。如果你维护着某个 OSDS 项目,你想接受人们的贡献(就像你对 OSS 所做的那样),你必须完全手动完成,或者求助于只接受代码变更(没有办法接受数据错误修复——我们都知道有很多)。

从个人贡献者的角度来看,如果你想通过为一些 OSDS 项目做贡献来提高你的 ML 投资组合,你也会被卡住。您必须要么放弃项目,不贡献您的更改(这意味着它们的质量永远不会被审查——您不会学到太多),要么经历艰苦的手工努力。

DS PRs 通过提供标准界面和工作流程来审核和接受来自任何人、任何地点、任何类型的数据科学组件的贡献,使 OSDS 成为可能。

**我们非常乐意支持希望接受社区数据科学贡献的开源数据科学项目。如果这与您相关,请致电 osds@dagshub.com**联系我们

谢谢大家!

感谢所有在我们建立 DS PRs 之前和期间给我们反馈的人。我们也很乐意收到您关于如何为社区改进 DS PRs 的反馈——最好的方法是加入我们的 Discord channel 。期待听到您的想法,并看到人们用开源数据科学构建了什么。

面试准备的数据科学问题(机器学习概念)——第二部分

原文:https://towardsdatascience.com/data-science-questions-for-interview-prep-machine-learning-concepts-part-ii-b7b58e74a1b7?source=collection_archive---------25-----------------------

这一部分包括主成分分析,聚类方法和基于树的方法。

在前一部分中,我们介绍了模型评估技术、正则化方法、逻辑回归和偏差方差权衡。在这一部分,我们将涉及一些最常见的关于最大似然算法的面试问题。

注意:这些不是真正的面试问题,但很接近面试中问的问题。它们确实涵盖了面试者可能热衷于测试的几个方面/概念。请随意评论更多的背景,我一定会努力。

1.PCA 是做什么的?第一主成分轴是如何选取的?

PCA 代表主成分分析。这是一种降维技术,它将一大组相关变量(基本上是高维数据)总结成数量较少的代表性变量,称为主成分,它解释了原始数据集中的大多数可变性。

选择第一主成分轴的方式使得它解释了数据中的大部分变化,并且最接近所有 n 个观察值。

来源

2.主成分分析中的主成分代表什么?

它代表数据变化最大的一条线或一个轴,也是最接近所有 n 个观察值的线。运筹学

观察变量的线性组合形成一个轴或一组轴,解释了数据集中的大部分可变性。

从数学上来说,就是第一主成分的特征向量。距离的平方和是 PC1 的特征值,特征值的平方根是 PC1 的奇异值

3.主成分的系数告诉你什么?

如果我们把所有的点都投影到主成分上,它们会告诉我们变量 2 的重要性是变量 1 的 N 倍

4.可以用 PCA 进行回归吗?什么时候使用主成分分析进行回归是可取的?

是的,我们可以使用主成分进行回归设置。当前几个主成分足以捕捉预测因子的大部分变化以及与响应的关系时,PCA 将表现良好。这种方法的唯一缺点是,在应用主成分分析时,新的简化特征集将忽略响应变量 Y 进行建模,虽然这些特征可以很好地解释 X 的变化,但如果这些变量不能解释 Y 的变化,模型的性能将会很差。

5.我们可以用 PCA 进行特征选择吗?

不要!PCA 不是一种特征选择技术,因为如果你想一想,任何主成分轴都是所有原始特征变量集的线性组合,它定义了一组新的轴,解释了数据中的大多数可变性。因此,虽然它在许多实际设置中表现良好,但它不会导致依赖于一小组原始功能的模型的开发。

6.五氯苯甲醚有哪些注意事项?

确保数据在相同的比例上

确保数据居中

主成分的最大数量等于变量的数量。数据集中的每个变量都有一个主成分或 PC。然而,如果样本数少于变量数,那么样本数就为特征值大于 0 的 PC 数设定了一个上限

7.什么是层次聚类?

分层聚类顾名思义是一种无监督的机器学习算法,用于聚类。最常见的聚类技术称为自底向上聚类。它生成一个树状图,从树叶开始,根据某种相似性度量,如欧几里德距离或相关性,将它们组合成树干上的簇。与靠近树顶部融合的实例相比,在树状图底部融合/组合的实例彼此非常相似。

8.什么是 K-means 聚类?

该算法从选择 K 值开始,K 值决定了该算法形成的聚类数。然后,随机地将一个样本分配给每个聚类。此外,基于平方欧几里德距离将剩余的观察值分配给 K 个聚类之一,即,根据欧几里德距离最接近的观察值被聚类在一起。一旦所有的观察值被分配给 K 个聚类中的每一个,每个聚类的类内方差被计算和求和。这个过程被重复,通过开始一组新的观察,直到我们找到一个组内变化最小的组。

9.K-means 和层次聚类有什么区别?

k-均值聚类试图将数据聚类成用户定义数量的聚类。因此,根据 k 的选择,最终输出可能是也可能不是所期望的。而分级聚类生成自底向上的树或树状图,即 n 个聚类,其中 n 等于样本大小,这允许用户试验聚类的数量,并选择给出更好的解释/分离的数量。

10.解释一下 K 近邻算法?

K-nearest 是一种算法,它可以通过基于距离度量(如欧几里德距离)将新实例与 K 个最近邻居进行比较,并将新实例分配给 K 个中具有最大最近邻居的聚类,从而将未知实例分配给预定义的聚类。在新实例不确定的情况下,可以通过选择 K 的奇数值来打破平局。K 的低值可能会受到离群值的影响,从而导致不正确的预测。 但是如果 K 非常大,那么具有几个样本/实例但是非常接近未知实例的聚类有可能被其他类别投票否决。

11.解释分类问题的决策树?使用决策树有哪些缺点?

分类问题的决策树从从特征空间中选择一个变量作为根节点开始。基于像基尼指数或熵这样的杂质测量来选择该节点,基尼指数或熵测量由该节点产生的分离。更清楚地分隔数据的变量被选作根节点。我们进一步重复这个过程,直到我们到达一个点,在这个点上分裂一个叶节点不能进一步改善分离。现在,当变量是分类变量时,可以使用基尼指数,但如果变量是数字,我们可以取连续数字之间的平均值,并选择给出更好分离的平均值。

12.比较 adaboost 和随机森林。两者的三个主要区别是什么?

Adaboost 构建树桩或弱学习者的森林,而随机森林构建完整大小的决策树。

在 AdaBoost 中,每个新树都是以一种考虑到以前的树所犯的错误或错误分类的方式来构建的,而在随机森林中,每个树都是独立构建的。

在 AdaBoost 中,每棵树在最终预测中获得的权重是其产生的错误分类的函数,即,如果一棵树产生的错误分类较少,则与产生更多错误的树相比,它在最终预测中获得更大的发言权,而在随机森林中,每棵树获得相同的投票。

13.解释 Adaboost 模型的工作原理

Adaboost 从建立一个树桩或弱学习者的森林开始。只有一个节点或一个预测器和两片叶子的树称为树桩。adaboost 构建的每个树桩都有不同的权重,权重由它产生的错误数决定。森林中生成的每棵树在最终预测中都有发言权,但发言权的大小取决于每棵树获得的权重。

14.解释回归的梯度推进

梯度增强与 adaboost 相似,我们构建一组从其前辈学习的树。但是,梯度增强从 y 值的平均值叶节点开始,然后使用叶节点的值计算数据中每一行的残差平方和。在下一步中,它建立一个全尺寸的树,该树考虑了由先前的树/叶产生的误差,并试图预测残差。我们预测残差,因为最终输出是每个梯度提升树生成的预测的总和。我们可以限制这棵树的叶子数量。此外,像 adaboost 一样,梯度增强会缩放所有的树,但与 adaboost 不同,它会均等地缩放所有的树。我们继续这个过程,直到树不断提高模型的准确性,或者我们达到一个停止标准,比如要建立的树的数量。通过将学习率加权的叶节点的值相加来进行预测。我们需要学习率,这样我们就不会过度拟合我们的训练数据,所以学习率的目的是增加一些偏差。学习率通常取 0 到 1 之间的值,选择一个小的学习率是个好主意,这样我们就不会超调。这也意味着我们正在朝着正确的方向迈出更小的步伐。

15.解释用于分类的梯度增强

用于分类的梯度增强通过取对数(odds)来获得初始叶节点的值。残差是通过取观察值和预测值/概率之间的差来计算的。观察值取值(0/1)用于分类,而预测值只是每个类别的概率。剩下的过程与回归过程相似。

16.什么是梯度下降?

梯度下降是一种用于优化机器学习模型参数的技术。它首先假设参数值并计算每个参数值的损失函数,直到找到使损失函数值最小的参数值。它好的原因是因为,梯度下降不是尝试一堆参数值,而是在远离最小值时以更长的步长开始,在接近最小值时以小步开始。步长由学习速率决定。在简单线性回归的情况下,我们想要估计参数 b0,b1,损失函数是残差平方和。

17.什么是随机梯度下降?

如果样本量很大,普通梯度下降法可能需要更长的时间来计算参数的最佳值。这就是随机梯度下降的由来。它从数据集或小批量数据中随机选择一个小样本,并在每次迭代参数估计时在这个小样本集上拟合模型。简而言之,如果 n 和要估计的参数的数量很大,梯度下降在计算上可能是昂贵的。

请务必阅读本系列的第一部分。另外,如果你有任何问题或建议,请随时留言。

面试准备的数据科学问题(机器学习概念)—第一部分

参考:

乔希·斯塔默的 stat quest

数据科学快速提示#003:使用 Scikit-学习管道!

原文:https://towardsdatascience.com/data-science-quick-tip-003-using-scikit-learn-pipelines-66f652f26954?source=collection_archive---------23-----------------------

教你如何结合适当的数据转换器和预测算法在一个好的,干净的方式

又见面了,可爱的人们!本周,我们将带着另一个数据科学快速技巧回来,这个技巧分为两部分。在第一部分中,我们将介绍如何通过 Scikit-Learn 的准系统转换器使用 Scikit-Learn 管道,在下一部分中,我将教您如何在这个管道框架中使用您自己的定制数据转换器。(敬请关注那篇帖子!)

在进入正题之前,让我为这篇文章分享一下我的 GitHub,以防你想更深入地了解。我还包括了我们将要使用的数据。在此链接查看所有内容

像往常一样,让我们从直觉开始,为什么你会想利用这样的东西。我假设您已经熟悉预测模型经常被导出到二进制 pickle 文件中的概念。这些二进制文件随后被导入到 API 等其他地方使用。这样,当您通过所述 API 接收数据时,您的反序列化 pickle 可以执行预测,并将结果发送回您热切而微笑的用户。

但是并不总是这样,您的数据将随时进入您的 API!在许多情况下,您必须做一些预处理工作,然后才能将它适当地放入模型中进行预测。我说的是像 one-hot 编码、缩放、输入等等。Scikit-Learn 包提供了许多这样的转换器,但是如果不使用管道,就必须序列化每个转换器。最后,您可能会得到 6–7 个序列化的 pickle 文件。不理想!

幸运的是,这正是 Scikit-Learn 的管道来拯救我们的地方。使用管道,您可以让数据一步一步地通过它需要采取的每个必要步骤,并最终通过模型,所有这些都在一个地方完成。在管道的最后,您得到一个序列化的 pickle 文件,它将为您完成所有适当的转换。得心应手!第一次看到这些管道时,了解它们可能会有点棘手,但是一旦掌握了窍门,就可以用它们做很多强大的事情。

所以对于我们今天在这里的项目,我们将利用来自 Kaggle 的泰坦尼克号数据集。这是一个用于学习目的的常用数据集,因为它通常容易理解。正如你可能猜测的那样,是的,我们确实在谈论由利奥迪卡普里奥和凯特温丝莱特主演的臭名昭著的电影《泰坦尼克号》。(是的,他让我叫他利奥。)

该数据集包含了船上每个乘客的综合特征,以及他们是否幸存。大多数人使用这个数据集作为学习监督学习的手段,因为我们有一个明确定义的目标变量(“幸存”)。虽然我们对学习如何使用 Scikit-Learn 的管道感兴趣,但我不会说我们现在对获得高度准确的结果过于感兴趣。事实上,我们将从这个数据集中省略掉如此多的特征,以至于你绝对不应该指望我们的模型比掷硬币更好。

为了开始这个项目,我们将导入我们将使用的所有库以及训练数据集。我们还将继续将训练数据集分成训练集和验证集,这样您就可以看到稍后推理将如何工作。别担心,我们进口所有这些东西可能看起来令人生畏,但相对而言,每一件在这里都起着很小的作用。

# Importing the libraries we'll be using for this project
import pandas as pd
import joblib
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score, accuracy_score, confusion_matrix# Importing the training dataset
raw_train = pd.read_csv('data/train.csv')# Splitting the training data into appropriate training and validation sets
X = raw_train.drop(columns = ['Survived'])
y = raw_train[['Survived']]
X_train, X_val, y_train, y_val = train_test_split(X, y, random_state = 42)

好的,如前所述,我们将保持这个项目非常简单。对于我们的管道,我们将有三个基本步骤:数据预处理、数据缩放和使用随机森林分类器的预测建模。

首先,让我们通过对单个特征进行非常基本的转换来处理数据预处理。“性别”特征包含数据集中每个人的二元“男性”或“女性”特征,因为我们知道我们的模型需要处理数字数据,所以我们将对该特征执行简单的一次性编码。让我们设置我们的数据预处理器来做这件事。

# Creating a preprocessor to transform the 'Sex' column
data_preprocessor = ColumnTransformer(transformers = [
    ('sex_transformer', OneHotEncoder(), ['Sex'])
])

同样,这在现实世界中是一件非常糟糕的事情,因为我们只利用了一个单一的特性,但是我们这样设置我们的转换器的原因是因为我们可以在以后将定制的转换器添加到这个相同的数据预处理器中,以便用更多的特性做一些额外的有趣的事情。现在,我不想在一篇文章中做太多的事情,所以我们将在下一篇文章中讨论这个问题。

一般来说,数据预处理步骤是最复杂的,这也是我们将它分离出来的原因。其他步骤非常简单,现在我们已经创建了数据预处理器,我们可以将数据缩放器和 RandomForestClassifier 捆绑到一个统一的管道中。管道将按照您的顺序让数据通过每一个步骤,所以请确保您的步骤顺序正确!(不要担心模型超参数。我只是复制/粘贴了我曾经做过的另一个东西。)

# Creating our pipeline that first preprocesses the data, then scales the data, then fits the data to a RandomForsestClassifier
rfc_pipeline = Pipeline(steps = [
    ('data_preprocessing', data_preprocessor),
    ('data_scaling', StandardScaler()),
    ('model', RandomForestClassifier(max_depth = 10,
                                     min_samples_leaf = 3,
                                     min_samples_split = 4,
                                     n_estimators = 200))
])

和朋友,差不多就是这样。这个新的管道对象非常容易交互,因为它继承了与管道中最后一步相关的函数。在我们的例子中,这意味着就像我们用不在管道中的 RandomForestClassifier 拟合数据一样拟合我们的数据。您还可以在输出中看到管道在适当拟合数据时所经历的步骤。

# Fitting the training data to our pipeline
rfc_pipeline.fit(X_train, y_train)

将数据拟合到管道中

既然我们已经将数据放到了管道中,那么就可以对其进行序列化并用于推理了。为了说明这是成功的,我将模型转储到一个序列化的 pickle 文件中,将 pickle 文件反序列化到一个新的模型对象中,并针对我们的验证集使用新的模型对象。

# Saving our pipeline to a binary pickle file
joblib.dump(rfc_pipeline, 'model/rfc_pipeline.pkl')# Loading back in our serialized model
loaded_model = joblib.load('model/rfc_pipeline.pkl')# Checking out our predicted results using the validation dataset
pipeline_preds = loaded_model.predict(X_val)val_accuracy = accuracy_score(y_val, pipeline_preds)
val_roc_auc = roc_auc_score(y_val, pipeline_preds)
val_confusion_matrix = confusion_matrix(y_val, pipeline_preds)print(f'Accuracy Score: {val_accuracy}')
print(f'ROC AUC Score: {val_roc_auc}')
print(f'Confusion Matrix: \n{val_confusion_matrix')

使用反序列化模型对验证集执行推理

有趣的是,我们的准确性和 ROC AUC 分数并不太差,但我仍然知道这是一个糟糕的模型预测。尽管如果我没记错的话,我相信女性在泰坦尼克号的救援中被优先考虑,所以也许性别本身并不是一个坏的预测因素,就像我们在上面看到的那样。尽管如此,我永远不会把我的鸡蛋扔到单一功能的篮子里。

这篇文章到此结束!希望大家从了解 Scikit-Learn 的管道特性中获得一些价值。如上所述,请继续关注下一篇文章,这篇文章将进一步在这个管道框架中使用定制转换器。那我们就真的要用煤气做饭了!

数据科学快速提示#004:在 Scikit 中使用自定义转换器-学习管道!

原文:https://towardsdatascience.com/data-science-quick-tip-004-using-custom-transformers-in-scikit-learn-pipelines-89c28c72f22a?source=collection_archive---------37-----------------------

了解如何在同一个 Scikit-Learn 管道中使用定制数据转换器

大家好。关于如何创建 Scikit-Learn 管道,我们又回来了,这是上一篇文章的后续文章。如果你错过了,你现在可以点击链接查看。(它现在正式发布到《走向数据科学》。w00t!)和往常一样,如果你想直接跟随这篇文章的代码,你可以在我的个人 GitHub 找到

为了快速结束上一篇文章,我们已经成功地创建了一个 Scikit-Learn 管道,它在一个干净的小包中完成了所有的数据转换、缩放和推理。但是到目前为止,我们不得不在我们的管道中使用 Scikit-Learn 的默认转换器。虽然这些变形金刚很棒,但是如果我们可以利用自己的自定义变形,那不是很棒吗?当然了!我认为这不仅很棒,而且很有必要。如果你还记得上周的帖子,我们建立了一个基于单一特征的模型。那可不太好预测啊!

因此,我们将通过添加两个转换器来转换训练数据集中的两个额外字段,从而解决这一问题。(我知道,从 1 个功能增加到 3 个功能仍然不是很好。但是,嘿,至少我们增加了 300%?)我们开始时的原始变量是“性别”(又名性别),现在我们将为适当的“年龄”列和“上船”列添加 transformers。

在我们开始新的定制变形金刚之前,让我们先导入库。你可能还记得上一篇文章中的许多内容,但是我们增加了一些额外的内容。不要太担心它们现在是什么,因为我们将在后面的文章中进一步讨论。

# Importing the libraries we’ll be using for this project
import pandas as pd
import joblibfrom sklearn.preprocessing import OneHotEncoder, StandardScaler, FunctionTransformer
from sklearn.impute import SimpleImputer
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score, accuracy_score, confusion_matrix

我们将继续快速导入我们的培训数据。

# Importing the training dataset
raw_train = pd.read_csv(‘../data/titanic/train.csv’)# Splitting the training data into appropriate training and validation sets
X = raw_train.drop(columns = [‘Survived’])
y = raw_train[[‘Survived’]]X_train, X_val, y_train, y_val = train_test_split(X, y, random_state = 42)

好了,从现在开始,我们实际上不会改变 Scikit-Learn 管道本身。当然,我们会对其进行添加,但是请记住,我有意将我的数据预处理器设计成易于添加的方式。简单回顾一下上一篇文章,下面是构建原始管道的代码。

# Creating a preprocessor to transform the ‘Sex’ column
data_preprocessor = ColumnTransformer(transformers = [
   (‘sex_transformer’, OneHotEncoder(), [‘Sex’])
])# Creating our pipeline that first preprocesses the data, then scales the data, then fits the data to a RandomForestClassifier
rfc_pipeline = Pipeline(steps = [
   (‘data_preprocessing’, data_preprocessor),
   (‘data_scaling’, StandardScaler()),
   (‘model’, RandomForestClassifier(max_depth = 10,
                                    min_samples_leaf = 3,
                                    min_samples_split = 4,
                                    n_estimators = 200))
])

当然,在将自定义转换器添加到管道之前,我们可以做的第一件事是创建函数转换器!因此,正如您可能已经猜到的那样,定制转换器是建立在常规函数之上的,因此您可以为转换器编写任何您想要的 Python 函数。****(我们稍后将讨论所有这些星号……)

好了,我们讨论了为两个新变量添加两个转换器,现在让我们开始创建两个自定义 Python 函数吧!首先触及“年龄”列,我们将对这个变量有一点额外的乐趣。现在,我真的不知道年龄本身是否是一个预测变量,但我猜想,如果“年龄”可以以任何有意义的方式预测,它将是年龄类别/年龄箱。也就是说,我将年龄划分为“儿童”、“成人”、“老人”等类别。同样,我不知道这是否会比使用直接整数更有性能,但它让我们可以做一些有趣的事情!下面是这样的代码:

# Creating a function to appropriately engineer the ‘Age’ column
def create_age_bins(col):
    ‘’’Engineers age bin variables for pipeline’’’

    # Defining / instantiating the necessary variables
    age_bins = [-1, 12, 18, 25, 50, 100]
    age_labels = [‘child’, ‘teen’, ‘young_adult’, ‘adult’, ‘elder’]
    age_imputer = SimpleImputer(strategy = ‘median’)
    age_ohe = OneHotEncoder()

    # Performing basic imputation for nulls
    imputed = age_imputer.fit_transform(col)
    ages_filled = pd.DataFrame(data = imputed, columns = [‘Age’])

    # Segregating ages into age bins
    age_cat_cols = pd.cut(ages_filled[‘Age’], bins = age_bins, labels = age_labels)
    age_cats = pd.DataFrame(data = age_cat_cols, columns = [‘Age’])

    # One hot encoding new age bins
    ages_encoded = age_ohe.fit_transform(age_cats[[‘Age’]])
    ages_encoded = pd.DataFrame(data = ages_encoded.toarray())

    return ages_encoded

好了,接下来是“上船”专栏。现在,这已经几乎准备好进行直接的热编码了,但是我们不能直接跳到那里的原因是因为这个列中有一些空值。这些需要首先解决,所以这里是我们将在这里使用的自定义转换器。

# Creating function to appropriately engineer the ‘Embarked’ column
def create_embarked_columns(col):
    ‘’’Engineers the embarked variables for pipeline’’’

    # Instantiating the transformer objects
    embarked_imputer = SimpleImputer(strategy = ‘most_frequent’)
    embarked_ohe = OneHotEncoder()

    # Performing basic imputation for nulls
    imputed = embarked_imputer.fit_transform(col)
    embarked_filled = pd.DataFrame(data = imputed, columns = [‘Embarked’])

    # Performing OHE on the col data
    embarked_columns = embarked_ohe.fit_transform(embarked_filled[[‘Embarked’]])
    embarked_columns_df = pd.DataFrame(data = embarked_columns.toarray())

 return embarked_columns_df

既然我们已经编写了自定义函数,我们终于可以将它们添加到管道中了。你可能不知道,但是 Scikit-Learn 有一个特殊的方法来处理这些特殊的自定义转换器,叫做 FunctionTransformer 。这很容易实现,所以让我们看看当我们把它添加到我们原来的管道时是什么样子。

# Creating a preprocessor to transform the ‘Sex’ column
data_preprocessor = ColumnTransformer(transformers = [
    (‘sex_transformer’, OneHotEncoder(), [‘Sex’]),
    (‘age_transformer’, FunctionTransformer(create_age_bins, validate = False), [‘Age’]),
    (‘embarked_transformer’, FunctionTransformer(create_embarked_columns, validate = False), [‘Embarked’])
])# Creating our pipeline that first preprocesses the data, then scales the data, then fits the data to a RandomForestClassifier
rfc_pipeline = Pipeline(steps = [
    (‘data_preprocessing’, data_preprocessor),
    (‘data_scaling’, StandardScaler()),
    (‘model’, RandomForestClassifier(max_depth = 10,
                                     min_samples_leaf = 3,
                                     min_samples_split = 4,
                                     n_estimators = 200))
])

很简单,对吧?使用 Scikit-Learn function transformer 指向正确的自定义函数,并在指定的列上使用它,这很简单。从现在开始,这是模型的简单导出。

# Fitting the training data to our pipeline
rfc_pipeline.fit(X_train, y_train)# Saving our pipeline to a binary pickle file
joblib.dump(rfc_pipeline, ‘model/rfc_pipeline.pkl’)

*** * * 回到星号时代!!!*

所以……..使用定制变压器也有不好的一面…

序列化模型不存储任何自定义 Python 函数的代码本身。(至少…不是以我还没想出来的方式。)也就是说, 为了利用这个反序列化的模型,pickle 必须能够引用为其自身二进制值 之外的函数转换器编写的相同代码。或者通俗地说,您需要将您的定制 Python 函数添加到您为这样的模型编写的任何部署脚本中。

现在,这是不是有点烦人?是的。但是这给了我一个不使用定制转换的理由吗?这是一个简单而坚定的答案。我知道为管道运行提供额外的定制代码不太方便,但代价是进行转换,这可能会使模型的性能比其他情况好得多。

所以,是的,这有点糟糕,但嘿,我会选择包括自定义变形金刚每次最有可能。大多数数据集包含广泛的特征,这些特征肯定不会分解成简单的转换,如插补或一次热编码。真实的数据是杂乱的,经常需要大量的特殊清理,而这些定制的转换器正好适合这项工作。

这就是这篇文章的全部内容!希望你喜欢。如果你想让我在以后的帖子中涉及任何具体的内容,请告诉我!我脑子里还有更多的想法,所以请继续关注。😃

成为优秀数据分析师的 4 个步骤

原文:https://towardsdatascience.com/data-science-reflections-lessons-from-5-months-as-an-analyst-c9843132ecf?source=collection_archive---------18-----------------------

TLDR;不要做一只查询猴。

杰米·霍顿在 Unsplash 上的照片

5 个月前,我从新加坡南洋理工大学毕业,在新加坡一家科技公司找到了一份数据分析师的工作。作为一名数据新手,我几乎没有接受过计算机科学或统计方面的正式技术培训,对工作中被数据专家包围的前景感到紧张,但也非常感谢有机会向他们学习。

五个月后,我花了一些时间反思我作为分析师学到的东西。

什么是数据分析师?

作为一名数据分析师,我使用数据来量化和发现业务问题的洞察力。数据分析师发现数据中的趋势和异常,这些都是业务问题的表现。这些问题可能包括

新产品的推出有意义吗?

“我们如何根据用户的行为对他们进行细分,”

这个产品有多成功?

沃洛季米尔·赫里先科在 Unsplash 上的照片

数据分析师不是独立工作的。相反,他们通常与领域专家一起解决业务问题。这些领域专家是来自不同团队的内部客户,他们可以从战略、营销、运营到产品……作为主题专家,他们是识别要解决的问题陈述的一线人员。

为了量化问题,数据分析师会仔细考虑问题陈述的相关指标,并提取必要的数据和见解,然后再提交结果来解决问题陈述。

挖掘洞察力。由阿尔伯特·希塞尼Unsplash 上拍摄的照片

提取洞察力的过程与寻找贵金属的过程并无不同。就像贵金属专家知道金属矿在哪里一样,内部客户知道业务问题是什么。他们将数据分析师介绍给金属矿,并与他们合作提取贵金属。

在得知矿区的坐标后,数据分析员使用他/她可支配的工具挖出贵金属和泥土的混合物(原始数据)。然后,数据分析师从混合物中去除污垢,以获得纯化的有价值金属(见解和发现)。

是什么造就了一个糟糕的数据分析师?

当我刚开始做分析师时,我是一只查询猴子。查询猴子是糟糕的数据分析师的一个例子。它接收来自内部客户的请求,并在不了解业务问题的情况下满足这些请求。因此,查询猴子像膝跳反应一样执行 SQL 查询。它也没有提供见解和建议——因为它太忙于执行查询。

不要做一只查询猴。昆腾·德格拉夫在 Unsplash 上的照片

为了避免陷入变成查询猴子的陷阱,数据分析师应该积极地遵循这些步骤,重点关注第 1、第 3 和第 4 步。

  1. 与业务涉众一起理解业务问题。
  2. 高效提取原始数据。
  3. 提取见解和建议。
  4. 直观地展示发现。

今天,我们将讨论数据分析师的角色,并一起完成这些步骤!

有一天,您收到了一封来自产品利益相关者的电子邮件,内容如下。

产品团队刚刚构建了一个新的聊天机器人,显示在主页上。数据团队能否计划一个实验,告诉我们是否应该推出新的聊天机器人?附件是新聊天机器人的样子。

界面无(左)和有(右)聊天机器人。作者插图。

现在,让我们开始吧。

1.与业务涉众一起理解业务问题。

理解业务问题非常重要,因为它允许数据分析师提供符合业务需求的分析。在不了解问题的情况下执行请求充其量是徒劳的。

我喜欢把商业问题想象成冰山。当我们第一次遇到业务问题时,我们只会看到来自内部客户的简要说明问题的电子邮件。在这一点上,这个问题比我们所能观察到的要复杂得多。

一个商业问题的冰山类比。作者插图。

虽然听起来很老套,但它发现使用 5W1H 框架来阐明任务是有帮助的。

数据的 5W1H

  • 谁是这些数据的最终用户?
  • 这部作品的影响是什么?
  • 相关时期是什么时候?
  • 我能从哪里得到数据?
  • 我们为什么需要这个?
  • 将如何使用数据分析?

澄清任务后,我们对任务的背景有了更多的了解。

(为什么提出请求)最近,我们发现在网站上购物的用户数量减少了。产品团队假设用聊天机器人推广产品将有助于增加购买用户的数量。

(从哪里获取数据)由于这是一个全新的功能,所以没有关于这个新功能的现有数据集。我们需要计划一个实验并收集新的数据。

(谁是客户+将如何使用分析)这将提交给业务团队,他们将决定这个新的聊天机器人功能是否有商业意义。

(这项工作的影响是什么)如果我们能够提高转化率,我们就有可能将该产品的收入提高 X 美元。

这澄清了我们的思考过程,并为我们如何采取下一步行动提供了新的思路。

2.提取原始数据并收集数据

为了获得聊天机器人是否会增加购物用户数量的原始数据,我们计划进行一项实验或 A/B 测试。

在设置 A/B 测试时,我们将登陆主页的用户分为大小相等的 A 组和 B 组。A 组用户将看到没有聊天机器人的旧界面,而 B 组用户将看到有聊天机器人的新界面。我们的目标是看看 A 或 B 中是否有更多的用户进行购买。

在计划实验的过程中,我们确定要检验的假设,然后根据显著性水平和检验的预期功效,使用统计方法计算所需的样本量。想了解更多,可以参考下面的视频,了解 AB 测试的简短介绍。

为了计划实验,我们需要通过 SQL 从数据库中提取数据。

在做了 5 个月的分析师后,我意识到生成高效可读的 SQL 的技能对于数据专业人员来说非常有价值。事实上,SQL 是数据科学家、数据工程师和数据分析师的通用语言。不熟悉 SQL 的数据分析师将很难与其他数据同事交流,也很难驾驭组织中的数据环境。

如果你是一名有抱负的数据科学家,并且你对通过查询数据收集数据的想法嗤之以鼻,你可能需要重新考虑你的决定:根据 Anaconda 对全球 2360 名数据科学家的调查,一名数据科学家花费高达 19%的时间加载(提取)他们的数据。

这么多数据,这么少时间。作者插图。

SQL 初学者应该熟悉以下简单的 SQL 函数…

  • 选择过滤和选择的位置
  • 计数、总和、最大值、分组依据、聚集数据的 HAVING
  • DISTINCT、COUNT DISTINCT 用于生成有用的不同列表和不同聚合
  • 外部(如左)和内部连接何时/何地使用

然而,当我学会了以下几点后,我发现我的工作效率大大提高了:

  • 临时表
  • 用联合处理空值
  • 子查询及其对查询效率的影响
  • 窗口功能,如分区、超前、滞后
  • 用户定义的函数

正如我在上一篇文章如何在 2020 年学习数据科学中提到的,我从 Datacamp 和 Dataquest 中学习了 SQL 的基础知识,它们并没有深入到这些中间概念中。

唉,当我第一次开始时,我求助于复杂的嵌套查询,这看起来很痛苦,因为我不知道子查询的漂亮语法。子查询的使用使得整个查询更加模块化,可读性更强,并且更容易排除故障。

为了说明这一点,让我们比较两个查询。

前一个嵌套查询具有查询中的查询,而后一个查询具有明确描述的查询。作者插图。

我用来学习这些中间函数的一些资源包括 Zachary Thomas 的 SQL 问题Leetcode 。他们极大地帮助了我作为分析师的角色。

3.为分析增加洞察力

假设我们已经收集了数据并进行了实验。下一步:我们计算 A/B 组之间是否有统计学上的显著差异。在这种情况下,问题是

用户界面的不同是否增加了购买的用户数量?

假设结果如下所示:

治疗组在实验中表现较差…作者插图

我们可以将转化率计算为进行购买的用户数量与对照组和治疗组登录主页的用户数量的比例。我们看到接受聊天机器人界面的治疗组的转化率较低。

在这一点上,一个查询猴子会报告这个表,并得出结论,聊天机器人并没有帮助增加购买的用户数量…但我们已经学会了不做一个查询猴子。

分析师的主要目标之一是提供洞察力。大多数时候,洞察力来自对数据中观察到的数字的解释。

提供没有洞察力的数据就像在金矿中发现不纯的黄金。要得到真正的金子(洞察力),我们需要多做一点工作。

此时,我们可以回答的最重要的问题是

为什么新界面的转化率比旧界面差?

这是一个开放式的问题,不一定容易回答。为了回答这个问题,我们可以把问题分解成更小的部分,

我们可以从逻辑上将这两个步骤进一步分解成更小的部分,并寻求按顺序回答它们。下面的例子说明了我们如何解决这个问题:

分解问题以获得洞察力的过程。作者插图。

检查数据的有效性

预实验

  • 错误的实验设计:实验设计正确吗?我们是否正确地计算了样本量?我们使用了正确的测试统计数据吗?

实验期间

  • 错误数据:数据收集是否正确?例如,数据库是否正确记录了两组用户的点击?

岗位实验

  • 不正确的分析:检验统计应用正确吗?

寻找新旧用户界面之间的差异

为了找出新旧用户界面之间的差异,我们可以仔细检查新旧界面的外观和性能之间的差异。这可能为我们提供了一个新界面性能较差的解释。例如,我们可以留意:

  • 颜色:新界面的颜色是否比旧界面的少了些吸引力?
  • 延迟:新接口是否比旧接口慢?如果是,增加多少?
  • 支持:手机或浏览器支持新功能吗?

我们可以探索更多的不同之处。

一旦我们找到了解释转化率差异的原因,我们就可以对下一步做什么实验提出建议。

底线是:作为一名分析师,不断地问自己…

我可以进一步解释这个数据吗?我能从中获得更多的见解吗?

这可以通过将问题分解成更小的部分,并有逻辑地回答它们来实现。

4.直观地展示发现

提取见解后,数据分析师需要展示他或她的发现。这通常以数据可视化和演示的形式出现。在这个例子中,我们将向产品和业务团队展示我们的发现,聊天机器人并没有增加网站的销售额。

当我向非数据利益相关者做演示时,我发现以下几点特别有用。

委婉地介绍问题陈述。

如果与会者不理解演示文稿的商业价值,他们很容易就放弃了。如果你能把这个问题作为一个重要的、高价值的问题来介绍,那就太好了,这样我们就能从一开始就抓住他们的注意力。在这里,如果转换率增加,我们可以通过显示收入的增加来转换分析的影响。

尽可能向与会者提供更多的背景信息。

与会者对新产品的了解可能没有你多。因此,提供关于产品的相关背景信息可以让与会者跟上进度。在这个例子中,我们可以提供聊天机器人流程的图片。

直观地解释度量和概念。

与会者可能没有技术背景,并且可能不理解您可能在演示中使用的一些技术术语。避免技术术语可能有助于与会者更好地理解你的演示。

在适当的时候暂停一下,允许中途提问。

通过让与会者尽早澄清他们的疑问,我们可以帮助他们理解演示的逻辑。

这些只是要遵循的指导方针,并且是特定于上下文的。在以后的文章中,我将记录更多数据表示的良好实践。

不要做一只查询猴。

这是我做分析师 5 个月来最大的教训。为了避免成为猴子,我确保遵循以下步骤:

  1. 与业务涉众一起理解业务问题。
  2. 高效提取原始数据。
  3. 提取见解和建议。
  4. 直观地展示发现。

我还有很多东西要学,我期待着在未来的数据领域中有更多的时间。通过下面的评论,让我知道你作为数据科学家或分析师在最初几个月学到了什么。否则,请随时在 LinkedIn 上与我联系,这样我们可以一起学习!

[## Travis Tang -数据分析师

www.linkedin.com](https://www.linkedin.com/in/voon-hao-tang)

其他读物

如果你喜欢这篇博文,请随意阅读我关于机器学习的其他文章:

参考

[1]《蟒蛇》(2020 年)。【2020 年数据科学的现状:从宣传走向成熟。检索于 2020 年 11 月 5 日。

确认

非常感谢我的导师(杰拉尔丁和雷扎)和朋友(埃多、迪克夏、阿迪提、Flo、奥尔森、基、YC、米纳克什、乐嘉和汤米)。如果没有他们的帮助和耐心,作为一名分析师,我不会学到这么多。

数据科学简历要避免错误

原文:https://towardsdatascience.com/data-science-resume-mistakes-to-avoid-2867460659ac?source=collection_archive---------10-----------------------

来增加你获得面试的机会

数据科学简历不会让你得到一份工作。面试过程中还有很多更重要的部分。也就是说,一份出色的简历可以为你赢得一次面试机会,帮助你在公司见你之前避免被拒绝。通常,简历是一个筛选标准。如果雇主没有看到他们想要的某些东西,他们会把你的扔进拒绝堆里。如果你想增加进入第一轮面试的机会,避免以下错误。

凯利·西克玛在 Unsplash 上的照片

错误 1:你没有包括链接

你的简历不仅仅是一张纸。在 2020 年及以后,它是你的全部在线内容。如果你想给自己最好的机会,你应该包括一个到你的 github、你的 kaggle 个人资料和你的 LinkedIn 的链接。我认识许多数据科学经理,如果他们在简历上看不到其中至少一项,他们会自动通过。

评估一个人未来工作潜力的最好方法是考察他过去的工作。你的 github 或者你的 kaggle 是面试官获得这种了解最实际的地方。如果你活跃在这些平台上,这将大大提升你获得面试的概率。

错误 2:你的简历太普通了

你的简历应该迎合你申请的职位。雇主正在寻找能胜任某个特定职位的候选人。有些技能与角色极其相关,而有些则可能不相关。你应该着重强调你与相关技能相关的经验。

做到这一点的一个方法是有一份主简历,其中你有 5-10 个项目或经历。针对每项工作,选择 3 个最适合该职位的选项。

错误 3:你关注算法而不是结果

数据科学家很重要,因为他们创造了商业价值。我看到许多数据科学家更关注他们使用的方法,而不是他们工作的结果。不管你用什么复杂的算法,如果它产生一个糟糕的结果。你的项目和工作经历的所有要点应该包括你分析的最终结果。

错误 4:你使用模糊的描述

作为一名数据科学家,你需要关注可衡量的结果。不要说你增加了你公司的网站流量,你应该说你在 3 个月内增加了 5%。量化是数据科学不可或缺的一部分,你需要在简历中展示出来。

错误 5:你说了但没表现出来

就像错误 4 一样,你需要关注如何展示信息。你应该向雇主展示你有一项技能,而不是告诉他们。这增加了可信度。不要告诉我你擅长 python,告诉我你已经用这种语言做了 5 个项目。展示远没有那么主观,它有助于建立你的个人故事。

错误 6:你的简历缺乏个性

你希望你的面试官记住你。做到这一点的最好方法是包括让你突出的东西(以积极的方式)。你可以通过独特的项目/工作经验,或者通过分享自己的一些有趣的事情来做到这一点。包括学校的课外活动、志愿者工作或兴趣小组都有助于给面试官留下印象。我是一个狂热的读者,所以我通常会收录过去几个月我读过的 5 本最好的书。

错误 7:你犯语法错误

虽然我在我的博客中肯定对此感到内疚,但这在简历中是不可接受的。作为一名数据科学家,你需要在工作中注重细节,不恰当的语法或术语可能会对你不利。

如果英语不是你的第一语言,这一点尤为重要。我建议让朋友仔细阅读你的简历,以避免任何措辞错误。

错误 8:你没有包括项目工作

如果你真的对数据科学这一职业充满热情,我相信你至少应该在空闲时间做一点。项目可以显示你的组织水平、兴趣和创造力。

如果你读过我的其他材料,你就会知道我相信这些是让你与众不同的东西。如果你想了解更多关于数据科学项目的信息,请阅读以下内容:获得数据科学工作应该做的项目

如果你改正了这些错误,我相信你进入第一轮面试的机会会大大增加。在面试过程中,你也会被问到很多基于简历的问题,所以要确保你能详细谈谈你的经历。

如果您更喜欢观看视频:

数据科学革命和我们的未来

原文:https://towardsdatascience.com/data-science-revolution-and-our-future-f79680edc7c6?source=collection_archive---------33-----------------------

关于未来我们应该问自己的问题。

数据科学是应用数学和计算机科学的领域,用于理解和解释算法和机器产生的数据。这包括为利用任何数据或试图理解数据的含义而创建的类比和工具。2020 年是一个完美的时间来问我们应该如何为我们自己的利益利用数据科学。

数据科学革命

什么是数据科学

数据科学是一种用于大规模数据分析的软件和技术,用于根据非常少量的数据发现模式和开发统计模型。数据科学的核心是数据。多年来,为了提高数据分析的可扩展性,开发了许多工具、流程和材料。

数据科学有许多不同的方法。算法方法通常包括几个步骤。第一步是标准化。这是将数据转换成更容易处理的格式的时候。然后,数据被转换成计算机代码(例如,Python 脚本、另一种编程语言)并执行处理。一个重要的问题是模型应该做什么是否有限制。不允许做某件事的算法可能不如能做所有事的算法有用。

例如,如果法律或法规禁止将输出温度降低到 0 摄氏度,这可能会使任务变得无聊和不可能。相反,该解决方案可以在机器学习算法中实现,该算法是专门设计来遵循这些法律和法规的。

一个例子是有一个参数,称为权重,可以代表一个单独的网站的重要性。在这样的系统下,每个网站都将根据用户的评分获得权重。该模型将能够在每个网站和用户之间进行互动。然后,每个网站可以使用权重的影响来评估用户满意度,并决定是提升还是否决。与线性统计模型相比,这种系统对于监控单个网站的受欢迎程度和监控用户活动更有用。

处理多变量的一个优雅的框架是贝叶斯建模。给定模型和一些底层数据(可能包括数字和通信信号),计算模型的复杂度。数据转换为模型的方式(例如,依赖关系的形式)决定了复杂程度、参数数量以及模型与真实数据进行比较的次数。

例如,假设我们想知道镇上最受欢迎的餐馆的分数。该模型将基于客户的一些信息,如位置和评级数量。但这些信息对于真实衡量餐厅的受欢迎程度毫无价值。这需要更深入的知识来计算一个模型,比如你在什么时候提供什么样的菜肴,你的餐厅有多大,价格有多贵等等。

数据分析和数据科学有几种方法。一个简单的方法是运行一个传统的统计模型。但是,要找到具有大量数据的模式,有可能使用机器学习方法。

数据科学革命

我们正处于一场以数据方式出现的计算机革命之中。

您需要数据来构建业务视角并提取可操作的见解。如今,数据和数据科学可以说是成功创新的最关键因素,因为自动化创造了任何一个人都无法实现的更高效的替代方案。

数据可能是最必要的东西。数据科学家可以帮助人们可视化和理解数据,并获得基于证据的见解,以显示改进

个人计算的出现使得直接从世界任何地方收集数据成为可能,而最常用的数据点之一就是理解图片的能力。

另一个重要趋势是以低成本获取大数据。世界上有超过 10 亿人现在可以监测他们的健康状况或出于各种原因去医院就诊。数码摄影已经成为无处不在的图像来源,让我们能够快速了解我们周围的世界。

数据分析已经一次又一次地证明,它在解决严重问题方面做得非常好,例如贫困、违法犯罪、教育和事故预防。

想想大数据吧。让我们面对现实:并不是所有的数据都是有用的,尽管我们可以也应该聚合更多的数据。然而,当你分解数据时,你看到的是一幅充满噪音和中性的大图。所谓中立,我的意思是它与数据的实际意义无关。以股票期权和市场噪音为例,每天你都可以通过跟踪交易获得大量数据,如果你再加上所有的新闻,你就真正看到了大数据,而不是所有的数据都同样重要。

由于数据收集技术一年比一年好,数据科学家越来越难找。

数据科学教育的现在和未来

每个孩子都应该获得高质量的物理和数字教育,他们可以根据自己的兴趣自由选择学习内容。

政府应增加对自然灾害和重大灾害相关数据的研究支出,以便为人们提供更好的预防解决方案。

人们应该被允许消费他们想看的书或电影的内容,不管版权如何(或有一些豁免),以更好地了解世界各地正在发生的事情。

数据应基于多个来源(如年龄、性别、位置和其他特征)归属于特定的人。这将允许我们控制数据科学模型中可能出现的任何偏差。

由于可视化是数据可以用来帮助人们理解他们周围发生的事情的主要领域之一,这样的方法可以应用于社会和文化。此外,算法几乎不可能掌握特定人的现实,在这方面,人工干预是必要的。但算法擅长平均,并对我们的需求给出一个“近似的好答案”。这就是为什么在我们的模型中考虑偏见是重要的。

从这个角度来看,我们要提出的主要问题是,什么是好的数据科学家。答案很简单:视情况而定。但是这需要平衡技能,背景,学习的意愿,改变,实验,失败,继续实验来理解问题的现实以及技术如何帮助解决问题。如果我们能够实现这种平衡,优秀的数据科学家将为我们提供这些服务。

数据科学有广泛的应用

然而,有几个领域的数据是特别重要的。

最重要的一个很可能是教育。我们在学校收集的大量数据可以用来帮助孩子们学习数学和数据科学,以及更多。基于数据的教育变革将惠及所有人。此外,教育和数据驱动的决策,如建立公共机构,在社会运作中往往是联系在一起的。

第二个最重要的领域是医疗保健。在数据领域有无数创新的医疗保健方法,如在疾病情况下生成特定数据的干预措施。数据对于制定疾病预防战略以及对某些疾病的高级监测和监控也非常有用。它还应该能够创建由受影响的个人管理健康数据的个人系统。

第三个最重要的领域是我们的社交生活。地理信息形式的数据可以提供与公共交通、购物等相关的信息。它允许我们通过建议我们可能有兴趣购买的东西来优化我们的路线或购物时间。只要数据不被用于经济利益,也必须考虑数据隐私。

第四个最重要的领域是与教育、卫生保健和技术相关的研究。总会有创新的领域,我们总会需要数据。为了确保以最有效的方式使用数据,我们在推动与数据相关的趋势时必须非常小心,以免以后搬起石头砸自己的脚。

教育我们自己需要什么是了解我们的问题并找出解决方案的最好方法。

如果你想学习数据科学,可以看看我的两篇关于你可能想读的书的文章:

数据科学不应该等待

原文:https://towardsdatascience.com/data-science-shouldnt-wait-c5d696c7e306?source=collection_archive---------31-----------------------

与其他计划并行启动数据科学

数据科学不应被推迟到数据治理和其他支持计划实施之后。虽然这需要利益相关方的额外努力,但数据驱动思想的增加、组织对数据科学工作流的熟悉程度以及对底线的影响都超过了成本。

来源:作者通过入口实验室

简介

实施数据驱动型转型的企业通常从数据成熟度较低的点开始。由于孤岛式数据、糟糕的数据文档以及不熟悉数据计划等特征,在这些环境中有效实施数据科学项目非常困难。解决这些问题需要一个长期战略,包括数据治理、数据管理和合适的 IT 基础设施。但是,这并不意味着应该采取线性方法,将数据科学推迟到这些计划完成之后。相反,关键的数据科学项目应该同时实施。这使得组织能够更快、更有效地实现数据科学的竞争优势。

大多数老牌企业都没有以数字技术和分析为核心的战略。这意味着他们现有的业务结构、程序和政策既没有优化到开发数据科学解决方案,也没有得到最好的利用。这与当前的初创公司形成对比,后者从一开始就被设计为面向数据的。能够有效和高效地使用数据需要强调这些能力。没有开发这些能力的组织将具有较低的数据成熟度。

尽管数据成熟度通常应用于组织级别,但采用更细粒度的视角是有用的,尤其是在组织规模增加的情况下。这是因为不同业务部门的数据成熟度可能不同。在这里,我们考虑环境级别的数据成熟度,其中环境是根据上下文以适当的规模度量的。这使我们可以讨论这样的情况:一个组织在一个业务单元中使用数据时可能非常复杂,但在另一个业务单元中却不成熟。

本文中的低数据成熟度环境将由两个因素来定义。第一个因素是很少的数据科学能力,指的是可用于选择合适的数据科学项目并端到端实施它们的专业知识。第二个因素是缺乏数据治理/管理,这意味着没有流程来确保数据的可访问性、可用性和可靠性。

在这些环境中部署数据科学团队需要他们克服额外的障碍。可用于构建模型的数据可能不完整,收集时没有考虑背景,并且存在质量控制问题。及时获取数据通常很困难。这可能源于 IT 基础设施,因为数据存储在不同的系统中,这些系统之间可能无法互操作。对完整数据集的访问可能不会立即实现自动化。在管理方面,孤立的数据通常存在于多个利益相关者之下。获取所有相关数据可能需要协调多个业务和技术利益相关方。

鉴于这些困难,数据科学项目应该在低数据成熟度环境中开始吗?是否最好等到数据治理和数据管理等计划完成之后?

与这些计划同时启动数据科学项目提供了两个关键的业务优势。首先,尽管存在上述困难,但数据科学团队可以交付直接影响底线的产品。他们可以创造的价值通常大于在低数据成熟度环境中运营的额外成本。其次,早期项目是管理层、IT 和数据团队习惯于彼此合作的基础机会。每个企业都有独特的运营环境,需要一个将数据科学集成到工作流和流程中的迭代流程。

早期数据科学项目可以提供出色的投资回报

最初的数据科学工作可以提供出色的投资回报。一个好的方法是针对那些被忽视的或以初级方式解决的问题。它不应取代关键业务产品、服务或运营。经验表明,这类问题普遍存在于没有强大数据能力的企业。等到基础数据计划就绪后再解决这些问题的成本比立即着手解决这些问题的成本更高。

等到基础数据计划就绪后再应对挑战的成本比立即着手应对挑战的成本更高。

例如,在自然资源领域,许多机械设备现在都配备了物联网传感器,可以提供关于当前操作条件的实时信息。早期的数据科学项目可以识别数据中的异常情况,建议操作员检查特定的组件。这个项目的输出可以在以后用于数据驱动的预防性维护计划,从而最大限度地减少维修成本和停机时间。

在零售银行等行业,公司提供多种产品,其中只有一小部分与特定客户相关。这个子集随着时间和客户环境的变化而变化。虽然银行在处理风险时是高度复杂的数据用户,但许多小型和区域性银行尚未将数据驱动的营销方法列为优先事项。在这种情况下,最初的数据科学项目可以确定营销产品的下一个最佳行动。

数据科学也与管理决策相关。领导者经常用直觉来指导他们的决策,但是他们也被要求用数据来支持直觉。在最简单的层面上,数据科学团队可以用来报告相关数据,并通过汇总统计和可视化有效地交流内容。例如,在教育领域,大学需要在几年的时间内分配资源并规划固定容量的基础设施。报告允许基于当前登记和简单的历史趋势进行规划。一个更先进的数据科学项目允许对不同的场景进行建模,纳入人口变化和新政府政策等因素的影响。然后,管理层可以考虑一系列可能的结果,以及不确定性是什么。尽管存在不确定性,还是需要做出决策,因此即使早期项目提供了部分答案,它们仍然是有价值的。

融入数据科学是一个教育过程

构建数据科学能力对于数据科学家和组织来说都是一个教育过程。像所有的学习一样,这是一个需要时间、经验和实验的过程。在数据驱动型转型的早期推进数据科学项目将推动成熟度,并确保数据团队和组织拥有“软”技能来利用改善数据治理和管理的成果。这种教育包括什么?

构建数据科学能力是对数据科学家和组织的一个教育过程。像所有的学习一样,这是一个需要时间、经验和实验的过程。

数据科学家需要了解企业如何运营、企业的战略计划以及市场定位。这为他们的工作提供了背景。没有这些知识,项目很可能交付不足,或者没有交付价值。数据科学项目失败的一个常见模式是,实施了强大的技术解决方案,但未能获取重要的业务知识。例如,一家户外运动零售商可能在 8 月份收到其装运的滑雪设备,但在冬季到来之前不会将它们存放在零售场所。在漫长的秋天,这可能不会发生,直到 11 月。一个先进的库存管理系统,天真到滑雪的季节性,已经把滑雪板在 11 月清仓,因为事实上有限的库存在那之前已经卖完了。他们的工作环境将数据科学家与组织寻求的商业价值联系起来。

成功的数据科学需要数据科学家、技术利益相关者和业务所有者之间的协调。信任是成功的关键因素。与其他计划同时开始数据科学项目可以为发展关系留出时间。被带入组织的数据科学家可能以前没有在特定部门工作过,并且其可能的业务所有者以前没有与数据科学家合作过。这要求两个团队在术语、沟通以及观点方面保持一致。这些不同的利益相关者之间的对话不仅对于执行项目至关重要,对于找到一组既符合数据科学又能创造商业价值的项目也是如此。

来源:作者通过入口实验室

数据是数据科学项目成功的关键。但是由于数据通常是孤立的,最初很难理解哪些数据是可用的。记录的或认为收集的数据与数据库中实际发现的数据之间往往存在差异。收集数据的真实世界条件和数据收集的背景很重要。数据科学家需要了解这两者,因为它们会影响数据的质量及其对不同分析的适用性。尽早启动数据科学项目有助于确定是否应该收集额外的或不同的数据,以及是否应该通过替代数据源来扩充内部数据。数据科学家和企业所有者都需要时间来评估组织中数据收集的对象、内容、原因、地点和方式。

完成初始数据科学项目的过程将揭示价值创造的潜在未来方向。新的想法通常来自于处理数据,以及接近业务流程。数据科学家在准备和探索数据集时,往往会发现意想不到的见解。数据科学的工作就是对数据和业务流程保持好奇。在与业务利益相关方的合作中,数据科学项目可以成为创新的重要驱动力。尽早开始几个关键的数据科学项目将会为未来的项目发现新的机会。

数据科学项目不会随着分析或算法的创建而结束。输出需要在生产中实现,才能具有商业价值。在最后一英里实施数据科学将需要新的工作流程和思维。例如,嵌入在产品中的输出(例如推荐引擎)与开发人员熟悉的标准软件或 web 产品有不同的需求。对于一线员工或不习惯使用数据产品的决策者,可能需要更多时间来接受解决方案。早期数据科学项目将有助于清除这些障碍。

结论

数据科学不应被推迟到数据治理和数据管理计划实施之后。虽然这将需要利益相关者的额外努力,但两个关键的好处超过了成本。首先,即使在数据成熟度较低的环境中,数据科学团队也可以交付具有净收益的产品。其次,将数据科学集成到组织中的过程对于数据科学家和组织都具有重要的教育意义。这种教育所需的“软”要求只能通过实施数据科学项目来开发。

最初发表于T5【https://inletlabs.com】

数据科学街头智慧:在信息海洋中导航

原文:https://towardsdatascience.com/data-science-street-smarts-navigating-the-sea-of-information-24091785fadb?source=collection_archive---------52-----------------------

如何保持最新状态,同时又不失去对自己工作的关注。

照片由奥斯汀·尼尔Unsplash 拍摄

数据科学领域是一个快速变化的领域:没有一个星期没有一些令人兴奋的新发展。作为该领域的专业人士,我们努力与酷孩子保持同步——同时不失去对自己工作的关注。

几周前,在不可思议的 2020 WiDS TLV 大会上,我主持了一场关于这个话题的圆桌讨论。我和与会者讨论了这一挑战、应对这一挑战的不同方式,以及我们为实现这一目标所使用的各种资源。我们还分享了自己的经历和奋斗,并讨论了我们可能如何实现这个圣杯:探索新主题和日常工作之间的完美平衡。

我很幸运地得到了一个见解深刻、知识渊博且充满好奇心的小组,我们领导的讨论有一些很好的建议,这些建议可能对任何数据科学家都有用。因此,似乎有必要与社区的其他人分享它们。

那我把它带到你面前。让我们来看看。

数据科学街头智慧—主要讨论话题

保持最新的资源

筛选重要的东西

我们如何过滤掉那些不值得我们花费时间的项目?

实现这一点的一些可选方法:

  • 话题热度筛选(即如果一个话题被广泛谈论,那么它很可能值得学习)。
  • 物品流行度筛选(大量的分享/转发意味着很多人觉得这很有趣——也许你也会觉得有趣)。
  • 作者筛选。就我个人而言,我有一些最喜欢的作者——我已经认识并信任的提供高质量内容的人。你知道吗?
  • 关注大玩家(例如 Google AI)发表的论文。
  • 当研究一个特定的主题时:从寻找调查论文开始,这些论文给出了关于该主题的所有当前知识的概述。
  • 当阅读一篇具体的论文时:略读一下而不是全部阅读,尤其是在决定它是否值得我们去读的时候;把重点放在摘要、讨论和算法部分,而不是从头到尾读一遍。

我们努力寻求什么样的平衡

不同的方法学途径:

  • 静态(如“每周 2 小时”)与动态(忙的时候一点都不做,有时间的时候一周 2 天)。如果你喜欢静态的,考虑让它成为你日程中的一个固定时段。这使得它更容易成为你日常生活的一部分。
    但是,如果你更喜欢动态方法,请考虑一下如何确保这真的发生。这些东西太容易溜走了。
  • 计划好的和预先考虑好的顺其自然
    这真的可以让你随心所欲。你可以制定一个两年一次的计划,详细列出小时数、要掌握的不同主题、要参加的聚会等等——或者你可以看看生活会带你去哪里。到现在为止,你可能已经知道哪种方法更适合你的情况了。我给你个小提示?如果你选择后者,每隔一段时间检查一下自己,确保你坚持你的目标。

归根结底——我们希望将多少工作时间用于探索新领域和发展?

  • 参与者说他们的目标是平均每周 3-5 小时。
  • 一些人试图更频繁地奉献一小段时间(例如,每天早上 30 分钟),而另一些人喜欢每周/两周/月一次的更长时间的会议。

一些技巧和窍门

  • 如果你在社交媒体上花了很多时间,你可以关注一些相关页面/用户(例如 Twitter 中的走向数据科学脸书)将你的 ds 更新推送到你的 feed 上。
  • 保持一份最新的你偶然发现的和你不熟悉的术语/概念的列表。当你有时间学习新东西的时候,马上列出清单。
  • 在选择阅读哪些论文时,别忘了考虑每篇论文的引用次数
  • 最重要的是:没有人知道一切,你也不应该知道。如果有疑问,就去问。这是最好的学习方法。

在哪里找到时间——来自你的真诚的最后一句话

讨论中反复出现的一个问题是哪里有时间做所有这些事情,这是否是我们应该在周末晚上做的事情&以及如何与我们的经理处理这件事。

强调这一点非常重要:如果你是一名雇员,让自己在工作领域保持最新是你工作的一部分。它给你的雇主带来价值,任何好的工作场所都应该鼓励你这样做。这不是你应该感到内疚的事情,你也不应该觉得有义务在业余时间做这件事。

关于时间管理,最好的处理方式是保持透明度,并与你的经理开诚布公地交流。一个好的经理应该欣赏你的奉献精神和责任感,并且在知道你确保自己的工作符合高专业标准时会感到自信。

走到这一步了?很好。

我很想听听你的意见——你觉得哪些有用?你不同意什么?你在日常生活中使用了哪些别人可以借鉴的习惯或技巧?你可以在下面的评论中分享(或者,在脸书邮报上,你可能首先点击这里)。

在 WiDS TLV 2020 会议上,我很高兴主持了这次讨论,我希望您也能愉快地阅读这篇文章。如果你学到了任何新的东西,考虑让更多的人加入到讨论中来——讨论规模越大,我们就越能利用它来学习、自我提高,并尽可能成为最好的数据科学家。

初创企业的数据科学成功

原文:https://towardsdatascience.com/data-science-succes-for-start-ups-53a2867a9f6c?source=collection_archive---------49-----------------------

为什么成功始于业务决策而非数据

一旦一家公司达到一定的成熟度,他们通常会通过数据科学来寻求下一个增长,成为人们常说的数据驱动型组织。在已经成立但规模较小的公司或成熟的初创企业的背景下,做出承诺成为数据驱动型组织的决定通常是在开发生成数据的服务或平台之前,这通常已经存在多年,这意味着也应该有相当大的数据集。这也可能意味着这样的公司将拥有现有的数据实践,如一些仪表板和某种级别的数据基础设施。公司的历史数据通常成为数据驱动计划的起点。

卢卡斯·布拉塞克Unsplash 上拍摄

然而,这种转变并非没有困难,近年来,人们对这种举措越来越失望,因为对许多公司来说,真正的数据驱动价值已被证明比预期更具挑战性,如果不是完全难以实现的话。这反过来又导致重点从数据科学作为直接焦点转移到数据工程,即首先构建基础设施。这源于对数据科学不在真空中工作的理解,尤其是因为数据科学高度依赖于已建立的基础架构。这部分是由于在生产中创建、部署和维护一个训练有素的模型的复杂性。

我很高兴看到这样的重新评估,因为它代表着行业内有意义的成熟,以及对真正的数据驱动价值的理解。然而,我会把一家公司的重点,尤其是一家在数据驱动的计划中迈出第一步的公司的重点,再往后推一个阶段:最初的重点应该是从数据科学的角度充分理解现有的业务决策。也就是说,在考虑您想要进行的分析之前,在考虑基础架构之前,甚至在考虑您拥有的数据之前,您需要考虑现有的业务决策是否适合数据科学项目的环境。

在我们深入讨论之前,有必要说明一下我所说的“商业决策”是什么意思。就我们的目的而言,这将被理解为为实现商业价值(如收入)而采取的任何具体行动或流程。例如,如何处理和回复客户电话,或者如何在供应商之间进行选择。

仅有数据是不够的

为什么仅仅拥有大量数据通常不足以成功交付有意义的数据科学项目,这一点可能并不清楚。这有两个主要原因,一个是背景,一个是理解。

首先,到目前为止,除了简单的绩效指标之外,公司内部可能没有人有责任真正考虑收集的数据。例如,人们可能普遍意识到每日活跃用户是一个值得跟踪的 KPI,但是没有一个系统的框架来告诉我们它对公司意味着什么,是好是坏,或者它与什么指标相关。换句话说,数据没有放在上下文中。

其次,与此相关的是,可能没有收集数据来帮助回答一个特定的分析问题,所以对这些数据的精确假设仍然不清楚。特别是,如果数据本身与正在进行的活动无关,那么从历史数据中获得的任何见解都将在很大程度上是没有意义的,因为没有未来的行动可以做出响应。这些数据并不意味着对该领域的任何具体理解。

照片由米卡·鲍梅斯特Unsplash 上拍摄

为成功奠定基础

一个成功的数据科学项目必须与具有现有闭环反馈的业务决策相关。也就是说,任何候选业务决策都必须,

  • 可重复且可测试,
  • 产生反馈,以便我们知道成功是什么样的,并且可以验证商业价值,
  • 导致可以及时实施的行动,因此我们知道如何根据新知识采取行动。

在这种情况下,业务决策是作为反馈循环的一部分采取的行动,这正是我们希望根据数据科学项目的输出结果进行调整的内容。

具体来说,通过关注现有的业务决策,我们还可以解决另外两个相关的问题。首先,考虑到项目与现有决策相关,应该对如何交付决策、收集相关信息以及如何以量化的方式确定成功或失败有一些技术上的理解。后一点通常被认为是指存在一个可用的、有数据支持的、可访问的明确定义的指标。如果不是这种情况,则应联系关键利益相关方制定一个定义的指标。其次,任何数据科学项目中的一个关键步骤是收集反馈,以确定任何引入的创新的影响,这意味着应该有可能非常频繁地重复任何此类过程。

想象一下,取而代之的是为一个全新的产品或业务功能确定一个项目的范围,我们会很快发现自己很难定义成功是什么样子的,因为没有历史数据或流程可以使用。

这最后一段也暗示了为什么历史数据,尽管对一个数据项目来说是不够的,但仍然是有价值的。我们仍然可以使用这些数据来检查我们对问题区域可能有的任何初始假设,或者验证改进的程度是现实的或可实现的。例如,如果我们正在计划客户服务系统的自动化元素,我们可能能够看到客户愿意等待响应的最大可能时间长度,并努力确保我们达到该值。

有了已定义的度量标准和对一组业务决策的数据源的理解,项目优先级排序就可以开始了,对项目提案的重要性、风险和可能的好处有了共同的理解。至少,确定合适候选人的过程将有助于防止将宝贵的资源投入到错误的业务领域。

总结一下:成功始于首先考虑业务决策,其次才是数据。

如需更多数据科学文章,请务必查看我的博客

数据科学@纽约时报

原文:https://towardsdatascience.com/data-science-the-new-york-times-66721350b389?source=collection_archive---------32-----------------------

活动讲座

克里斯托弗·威金斯| TMLS2019

来自多伦多机器学习峰会的演讲:【https://torontomachinelearning.com/

关于演讲者

克里斯·维金斯是哥伦比亚大学应用数学副教授,也是《纽约时报》的首席数据科学家。在哥伦比亚大学,他是数据科学研究所执行委员会、应用物理学和应用数学系以及系统生物学系的创始成员,并且是统计学的附属学院。【https://www.linkedin.com/in/wiggins/

关于谈话

《纽约时报》的数据科学小组开发和部署机器学习解决方案,以解决新闻编辑室和业务问题。将现实世界的问题重新构建为机器学习任务,不仅需要适应和扩展模型和算法以适应新的或特殊的情况,还需要足够的广度来知道针对正确挑战的正确方法。演讲者将首先概述如何非监督,监督和强化学习方法越来越多地用于人类的应用,分别为描述,预测和处方。然后,演讲者将把重点放在“规范”案例上,展示强化学习和因果推理文献中的方法如何对工程、商业和更普遍的决策产生直接影响。

数据科学@纽约时报

数据科学技巧#005:执行 One-Hot 编码的两种正确方法!

原文:https://towardsdatascience.com/data-science-tip-005-two-correct-ways-to-perform-one-hot-encoding-7c21e1db7aa2?source=collection_archive---------27-----------------------

教你两种不同的正确方法来执行一键编码(和一种“错误”的方法)

大家好,大家好!我希望你们都享受一个愉快的劳动节周末。我个人也在周五休假,将周末延长到四天,在过去的几天里,我和女儿们度过了许多美好的时光。但是你知道我,我总是渴望保持一定的生产能力!

在我们开始这篇文章之前,请务必参考我的个人 GitHub 中我们将在下面讨论的所有代码。这很简单,但是如果你想在一个简洁的 Jupyter 笔记本中学习,那么我鼓励你去看看。为了简洁起见,我不打算在这篇文章中讨论什么是热门编码,而是鼓励你查看我以前的一篇文章,在那里我会更彻底地讨论这个问题。

好的,所以当我第一次学习一键编码时,我很好奇的被告知一种我认为是数据科学领域“错误”的做法。这并不是说它不能产生编码的特征,而是它对于应用机器学习来说还不够。感觉我在遇到的所有教程中一遍又一遍地看到这种特殊的方法。

那种不正确的方式?熊猫的“get_dummies”功能。

为了演示为什么不使用 Pandas 的“get_dummies”以及为什么使用我将推荐的其他选项,让我们首先通过导入必要的 Python 库来快速设置我们的项目,并使用假动物数据创建一个微小的数据帧。(我将在下面解释我们正在导入的内容,以及如果您以前没有安装第二个选项,如何安装它。)

# Importing the required libraries
import pandas as pd
import joblib
from sklearn import preprocessing
from category_encoders import one_hot# Creating a small DataFrame with fake animal data
animals_df = pd.DataFrame({'animal': ['cat', 'dog', 'bird', 'monkey', 'elephant', 'cat', 'bird']})

如您所见,我故意复制了几个值来证明我们的编码可以工作。有了我们的数据框架,让我们继续,看看当我们使用基本的熊猫“get_dummies”函数时会发生什么。

# Performing one-hot encoding with Pandas' "get_dummies" function
pandas_dummies = pd.get_dummies(animals_df['animal'])

你可能会想,问题出在哪里?这不是对我们有用吗?虽然它在这个非常特殊的实例中确实有效,但是这个方法允许推理管道中的未来转换。J 就像我们为推理转换导出模型或数据缩放器一样,有方法来导出一些东西以执行一致的一键编码。不幸的是,熊猫的“get_dummies”不允许这样做。(为什么这一点没有在更多的数据科学课程中讲授得更好,这让我感到困惑!)

幸运的是,有一些方法可以解决这个问题,我将向您展示其中的两个方法!

第一个正确的方法内置在 Scikit-Learn 中。就像任何 ML 算法一样,有一个名为 OneHotEncoder 的 Scikit-Learn 库,它允许您将数据与实例化的编码器对象相匹配,然后根据需要转换类似的数据以适当填充所有列。

但是事情是这样的…我对 Scikit-Learn 的实现并不狂热。它可以工作,技术上也是正确的,但是它有一点点…不完整?自己看看下面的代码。

# Instantiating the Scikit-Learn OHE object
sklearn_ohe = preprocessing.OneHotEncoder()# Fitting the animals DataFrame to the Scikit-Learn one-hot encoder
sklearn_dummies = sklearn_ohe.fit_transform(animals_df)# Using the output dummies and transformer categories to produce a cleaner looking dataframe
sklearn_dummies_df = pd.DataFrame(data = sklearn_dummies.toarray(), 
                                  columns = sklearn_ohe.categories_)# Dumping the transformer to an external pickle file
joblib.dump(sklearn_ohe, 'sklearn_ohe.pkl')

正如您在 Jupyter 截图中看到的,转换后的数据帧的直接输出不是数据帧。它实际上是一个浮点值的稀疏矩阵。使用该输出确实可以生成一个数据帧,但是需要做一些额外的工作。不是不可能,但也不直观。我第一次了解这一点时,花了几个小时来思考这个输出。此外,它在结果中生成浮点值,而不是原始数据集中的整数值,这并不是预期的行为。但是这是可以改变的,所以我们仍然可以称它为正确的方法。

执行一键编码的第二个正确方法是使用一个叫做类别编码器 的特殊 Python 库。如果你以前没有用过,你所要做的就是快速安装 pip 或 conda。为了方便起见,我将相应的 shell 命令粘贴在下面。

pip install category_encodersconda install -c conda-forge category_encoders

我实际上是在日常工作中被一些数据科学家同事介绍到这个库的,我个人更喜欢它,而不是 Scikit-Learn 的实现。我认为在下面的代码中原因很明显。这是关于 OneHotEncoder 的 Category Encoder 版本的具体文档

# Instantiating the Category Encoders OHE object
ce_ohe = one_hot.OneHotEncoder(use_cat_names = True)# Fitting the animals DataFrame to the Category Encoders one-hot encoder
ce_dummies = ce_ohe.fit_transform(animals_df)# Dumping the transformer to an external pickle file
joblib.dump(ce_ohe, 'ce_ohe.pkl')

如您所见,将数据拟合到转换器的输出产生了一个漂亮、干净的数据帧。此外,它将原始的“animal”列名附加上该列中的值,以生成干净的列名。现在,我实际上认为这是一个更好的实现,因为当您开始一键编码多个特性时,最好能在输出中知道它们最初来自哪个特性!

(如果有任何不好的地方,Scikit-Learn 的实现所转储的 pickle 文件要小得多,但是大小几乎可以忽略不计。我们在这里谈论的是字节对千字节,这几乎是什么,但我觉得我还是要与大家分享。)

为了证明这些变形金刚正在做我们希望它们做的事情,我从它们导出的 pickle 文件中重新导入了它们,并在一个新版本的动物数据帧上进行编码。它和原来的非常相似,但是我重新排列了值。

# Creating a newly ordered animals dataframe
new_animals_df = pd.DataFrame({'animal': ['cat', 'cat', 'dog', 'monkey', 'elephant', 'cat', 'bird', 'dog']})# Importing the exported pickle files
imported_sklearn_ohe = joblib.load('sklearn_ohe.pkl')
imported_ce_ohe = joblib.load('ce_ohe.pkl')# Running the new animals DataFrame through the Scikit-Learn imported transformer
loaded_sklearn_dummies = imported_sklearn_ohe.transform(new_animals_df)
loaded_sklearn_dummies_df = pd.DataFrame(data = loaded_sklearn_dummies.toarray(), 
                                         columns = imported_sklearn_ohe.categories_)# Running the new animals DataFrame through the Category Encoders imported transformer
loaded_ce_dummies = imported_ce_ohe.transform(new_animals_df)

瞧,成功了!当我们对原始数据集执行转换时,每个输出的转换都具有我们第一次看到的相同特征。我没有在这篇文章中演示它,但它甚至有一些内置的特性,这些特性规定了当传递未知值或空值时会发生什么样的正确行为。整洁!

这就结束了另一篇文章!尽管 Pandas 的“get_dummies”功能很好,但你真的不应该将它用于应用 ML 目的。它在类似 API 的东西中导致了一个非常容错的、不完整的实现,无论如何,使用 Scikit-Learn 或 Category Encoder 的 one-hot 编码器都更容易使用。希望你们都喜欢这个帖子!请务必查看我过去的提示,并在未来的帖子中推荐任何您想看到的内容!在那之前,我要结束了,祝你劳动节周末快乐。

使用数据科学和机器学习预测泰坦尼克号幸存者

原文:https://towardsdatascience.com/data-science-titanic-challenge-solution-dd9437683dcf?source=collection_archive---------28-----------------------

海量数据下 K 近邻分类器(KNN)和决策树分类器的比较

照片由 Alonso ReyesUnsplash 上拍摄

介绍

这项挑战的目的是预测 20 世纪初泰坦尼克号灾难的幸存者和死亡人数。我们将使用两种机器学习算法来完成这项任务,K-最近邻分类器(KNN)和决策树分类器。我们将执行基本的数据清理和特征工程,并比较这两种算法的结果。

你会学到什么?

您将在这里练习两种分类算法,KNN 和决策树。您将学习如何通过清理数据和高级特征工程来准备数据以获得最佳结果。

问题定义

我们有两组数据。一个用于训练(train.csv ),包含我们将用于训练模型的生存和死亡信息。一个用于测试(test.csv),没有生存和死亡信息,我们将使用它来测试我们的模型。

逐步解决方案

如果你还没有为数据科学设置你的电脑,请阅读我的文章如何为数据科学设置你的电脑

创建项目文件夹

在电脑上为一个名为“泰坦尼克号-挑战”的项目创建一个文件夹。

从 Kaggle 下载 train.cs 和 test.csv 数据集

https://www.kaggle.com/c/titanic/data

将这些数据集放在项目文件夹中名为“data”的文件夹中。

开始新的笔记本

通过在终端/命令提示符下键入命令,进入此文件夹并启动 Jupyter Notebook:

$ cd “Titanic-Challenge”

然后

$ jupyter notebook

点击右上角的新建,选择 Python 3。

作者图片

这将在您的浏览器中打开一个新的 Jupyter 笔记本。将未命名的项目名称重命名为您的项目名称,您就可以开始了。

作者图片

如果您的计算机上安装了 Anaconda,那么您的计算机上已经安装了这个项目所需的所有库。

如果你正在使用 Google Colab ,打开一个新的笔记本。

加载库和设置

在新笔记本中,我们通常做的第一件事是添加我们在项目中需要使用的不同库。

加载泰坦尼克号数据

现在我们需要将数据集从我们下载的文件中加载到变量中,作为 Pandas 数据帧。

探索性数据分析

查看数据总是一个好习惯。

我们来看一下训练和测试数据。它们之间唯一的区别是幸存者一栏,该栏显示乘客是否在灾难中幸存。

下面也是对数据集中每个字段的解释。

作者图片

  • PassengerId:乘客的唯一 Id
  • 幸存:0 =否,1 =是
  • Pclass:乘客等级 1 =第一,2 =第二,3 =第三
  • 姓名:乘客的姓名
  • 性别:乘客的性别
  • 年龄:乘客的年龄
  • SibSp:船上兄弟姐妹或配偶的数量
  • Parch:船上父母或孩子的数量
  • 票证:票证 ID
  • 票价:为车票支付的金额
  • 客舱:客舱号
  • 装船:装船港(C =瑟堡,Q =皇后镇,S =南安普顿)

现在让我们来看看列车数据帧的维度。

# Output
(891, 12)

我们可以看到训练数据集有 891 条记录和 12 列。

让我们对测试数据集做同样的事情。

作者图片

# Output
(418, 11)

测试数据集的唯一区别是记录数为 418,列数为 11。我们在测试数据集中缺少了幸存的列。我们将使用我们将要构建的机器学习模型来预测幸存的列。

# Output
There are 1309 passengers in both data sets.
891 in train data set.
418 in train data set.

我们还可以看到,我们的数据集中有一些缺失数据(NaN 值)。为了让我们的分类模型有效地工作,我们必须对丢失的数据做些什么。我们将详细检查这一点,稍后再处理它,但现在让我们只看一下 Pandas info()函数,这样我们就可以了解丢失的值。

# Output
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  891 non-null    int64  
 1   Survived     891 non-null    int64  
 2   Pclass       891 non-null    int64  
 3   Name         891 non-null    object 
 4   Sex          891 non-null    object 
 5   Age          714 non-null    float64
 6   SibSp        891 non-null    int64  
 7   Parch        891 non-null    int64  
 8   Ticket       891 non-null    object 
 9   Fare         891 non-null    float64
 10  Cabin        204 non-null    object 
 11  Embarked     889 non-null    object 
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB

我们可以看到在训练数据年龄上船有一些缺失值。

# Output
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 418 entries, 0 to 417
Data columns (total 11 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  418 non-null    int64  
 1   Pclass       418 non-null    int64  
 2   Name         418 non-null    object 
 3   Sex          418 non-null    object 
 4   Age          332 non-null    float64
 5   SibSp        418 non-null    int64  
 6   Parch        418 non-null    int64  
 7   Ticket       418 non-null    object 
 8   Fare         417 non-null    float64
 9   Cabin        91 non-null     object 
 10  Embarked     418 non-null    object 
dtypes: float64(2), int64(4), object(5)
memory usage: 36.0+ KB

我们在测试数据集中也有类似的情况。

我们还可以使用 isnull() 函数检查空值

# Output
PassengerId      0
Survived         0
Pclass           0
Name             0
Sex              0
Age            177
SibSp            0
Parch            0
Ticket           0
Fare             0
Cabin          687
Embarked         2
dtype: int64
# Output
PassengerId      0
Pclass           0
Name             0
Sex              0
Age             86
SibSp            0
Parch            0
Ticket           0
Fare             1
Cabin          327
Embarked         0
dtype: int64

这证实了我们之前的发现。

现在,让我们更详细地看一下,以便了解其中的内容。

一个好的方法是从数据中画一些图表。

在我们的项目中,我们将使用 Matplotlib 库来显示图表。

我们主要对幸存或未生还的乘客的特征感兴趣。

我们现在将创建一个函数,根据指定的特征显示乘客是否在泰坦尼克号灾难中幸存。

我们将只使用训练数据集,因为只有在这个数据集中我们才有生存信息。

现在,让我们为选定的功能构建图表。

作者图片

我们可以看到存活下来的雌性明显多于雄性。我们对那些没有幸存下来的乘客有更重要的结果,女性与男性相比只占很小的比例。

现在让我们看看乘客级别。

作者图片

我们可以看到,三等舱的乘客比一等舱的乘客更有可能死亡,一等舱的乘客有更高的生存机会。

特征和存活率之间的这些和其他关系对我们和我们的机器学习模型非常重要。

特征工程

一旦我们加载了数据集,并且很好地理解了我们正在处理的数据,我们将执行一些特征工程。

特征工程是为了提高机器学习模型的性能而从数据集中的现有特征中提取特征的过程。

通常,这意味着不仅要创建新的特征,还要替换丢失的值并移除对模型性能没有贡献的特征。

让我们再看一下我们的训练数据集中缺失的值。

# Output
PassengerId      0
Survived         0
Pclass           0
Name             0
Sex              0
Age            177
SibSp            0
Parch            0
Ticket           0
Fare             0
Cabin          687
Embarked         2
dtype: int64

作者图片

用列的中值替换缺失值

“年龄”列中有许多缺失值。我们将用年龄列的中值来填充该列中所有缺失的值。中值是列的“中间”值。为了使数值更准确,我们将分别计算每个性别的中值。我们还将对训练和测试数据集执行此操作。

作者图片

我们可以看到所有的 NaN 值都被替换成了数字。

# Output
PassengerId      0
Survived         0
Pclass           0
Name             0
Sex              0
Age              0
SibSp            0
Parch            0
Ticket           0
Fare             0
Cabin          687
Embarked         2
dtype: int64

并且我们在训练数据集中不再有空值。

我们还将在这里对年龄做的是,我们可以使用一种称为数据宁滨的技术,将不同年龄的人放入不同的箱(组)中。这通常会提高机器学习模型的性能。

我们将把乘客分为四个年龄组:

  • 1:(年龄<= 18)
  • 2: (age > 18、<= 40)
  • 3: (age > 40、<= 60)
  • 4: (age > 60)

我们将对训练和测试数据执行此操作。

作者图片

作者图片

因为机器学习模型只对数值进行操作,所以我们需要用数字替换列 Sex 的测试值,以创建数字类别。这些将是我们的类别:

  • 0:男性
  • 1:女性

作者图片

另一件有用的事情是提取 Title 信息,如(先生女士小姐。)并创建与我们对年龄列所做的类似的框(组),然后删除姓名列。

让我们显示创建的值。

# Output
Mr          517
Miss        182
Mrs         125
Master       40
Dr            7
Rev           6
Col           2
Major         2
Mlle          2
Sir           1
Mme           1
Ms            1
Countess      1
Capt          1
Don           1
Jonkheer      1
Lady          1
Name: Title, dtype: int64
# Output
Mr        240
Miss       78
Mrs        72
Master     21
Col         2
Rev         2
Dr          1
Ms          1
Dona        1
Name: Title, dtype: int64

正如我们所看到的,我们这里实际上只有三个主要组,先生、小姐和夫人。我们将在这里为这些组创建四个箱(组),并将其他所有内容放入其他类别。我们的小组看起来像这样:

  • 1:先生
  • 2:小姐
  • 3:夫人
  • 4:其他一切

现在让我们看看标题为数据的图表。

作者图片

正如我们所看到的,拥有头衔先生的人很少有机会生存,这对我们的机器学习模型来说应该是一个有用的信息。

删除不必要的功能

现在,让我们删除我们认为不需要训练模型的特征。在我们的示例中,它将是姓名、机票、费用、舱位、登机。我们仍然可以从中提取一些额外的特征,但现在我们决定删除它们,并在没有它们的情况下训练我们的模型。

作者图片

现在,我们需要准备我们的训练数据和幸存者的目标信息,以训练我们的机器学习模型。为了做到这一点,我们需要创建另一个没有幸存列的数据集,并创建一个只有幸存信息的目标变量。这就是机器学习模型通常需要用于训练的数据的方式——输入(或 X 或自变量)和输出(或 Y 或因变量)。

作者图片

构建和训练机器学习模型

现在,我们已经准备好构建和训练我们的机器学习模型。

我们将使用两种不同的算法,并比较结果,看看哪种算法的性能更好。

我们将使用K-最近邻(KNN) 分类器和 决策树 分类器来自 Scikit-learn 库。

k 近邻(KNN)分类器

我们将创建具有 13 个邻居 (n_neighbors = 13) 和交叉验证技术的 KNN 模型,通过混洗数据并将其分成 k 个折叠来训练我们的模型。交叉验证技术有助于防止在训练机器学习模型时出现无意的排序错误。

我们将最终获得几个机器学习分数,我们需要对这些分数进行平均,以实现模型性能的最终结果。

# Output
[0.82222222 0.76404494 0.82022472 0.79775281 0.80898876 0.83146067
 0.82022472 0.79775281 0.82022472 0.84269663]
# Output
Our KNN classifier score is 81.26%

决策树分类器

我们将对决策树模型进行同样的操作,并使用交叉验证技术。

# Output
[0.8        0.79775281 0.78651685 0.78651685 0.86516854 0.78651685
 0.84269663 0.80898876 0.78651685 0.84269663]
Our Decision Tree classifier score is 81.03%

正如我们所看到的,我们的两个模型都取得了相似的结果,我们已经取得了非常好的精度结果,两个模型都达到了大约 80% ,这很好。

通过对票价客舱装载列执行更多的功能工程,这个结果可能还会得到改善,我鼓励你这样做。

测试

现在,我们可以对测试数据运行我们的模型来预测值。

# Output
array([0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, [...], 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1])

我们现在可以将结果保存到文件中。

如果你愿意,你可以在这里上传你的结果(https://www.kaggle.com/c/titanic)并参加卡格尔泰坦尼克号比赛。

要阅读和显示您的结果,您可以使用以下代码。

如果你想了解更多并尝试 Python 和数据科学,你可以看看我的另一篇文章用 Python 分析药品销售数据用 MNIST 介绍计算机视觉用 Python 进行图像人脸识别

为了巩固您的知识,请考虑从头开始再次完成任务,不要查看代码示例,看看您会得到什么结果。这是巩固你的知识的一件极好的事情。

Jupyter 笔记本中的完整 Python 代码可在 GitHub 上获得:
https://GitHub . com/pj online/Basic-Data-Science-Projects/tree/master/5-Titanic-Challenge

编码快乐!

还没有订阅媒体?考虑报名成为中等会员。每月只需 5 美元,你就可以无限制地阅读媒体上的所有报道。订阅 Medium 支持我和其他作家在 Medium 上。

2020 年的数据科学趋势

原文:https://towardsdatascience.com/data-science-trends-for-2020-9b2ee27af499?source=collection_archive---------17-----------------------

新十年的关键数据科学趋势

弗兰基·查马基在 Unsplash 上拍摄的照片

数据科学是让数据变得有用的学科。

毫无疑问,这十年在人工智能领域购买了大量的创新。除了人工智能,我们还见证了从数千个来源生成的数据的巨大增长。数以百万计的设备造成了如此巨大的数据峰值,这一事实将我们带到了智能利用的话题上。

数据科学领域带来了各种科学工具、流程、算法和从结构化和非结构化数据中提取知识的系统,用于识别其中有意义的模式。

数据科学也有利于数据挖掘和大数据。数据科学在 2001 年成为主流,此后一直在发展,并被评为有史以来最令人兴奋的职业道路之一。

走向数据科学 报道:

  • 目前,每天的数据输出超过 2.5 万亿字节。
  • 在不久的将来,“地球上的每个人每秒将产生 1.7 Mb 的数据。”
  • 各种各样的数据科学角色将推动这些海量数据负载。

谷歌搜索过去 5 年“数据科学”的受欢迎程度。由谷歌趋势生成。

数据科学的趋势

随着数据问题和需求的多样化,出现了各种各样的创新解决方案。这些解决方案通常会带来大量的数据科学趋势,为企业提供所需的灵活性,同时让他们能够更深入地了解自己的数据。下面简要介绍了其中一些顶级数据科学趋势:

1.图表分析

随着数据从各个方向流入,分析变得更加困难。

图形分析旨在通过充当灵活而强大的工具来解决这个问题,该工具使用图形分析复杂的数据点和关系。使用图表背后的意图是抽象地表示复杂的数据,并以一种更容易理解和提供最大洞察力的可视化格式表示。图表分析应用于众多领域,例如:

  • 过滤社交媒体上的机器人,以减少虚假信息
  • 识别银行业中的欺诈
  • 预防金融犯罪
  • 分析电力和供水网络,寻找缺陷

2.数据结构

数据结构是一个相对较新的趋势,其核心是封装从大量来源收集的组织数据,如API可重用数据服务管道语义层,提供可转换的数据访问。

创建数据结构是为了帮助数据的业务上下文,并以用户和应用程序都可以理解的方式保存数据,数据结构使您能够在灵活的同时拥有可伸缩的数据。

通过这样做,您可以根据需要以前所未有的方式处理、管理、存储和共享数据。商业智能和数据科学严重依赖于数据结构,因为它可以顺畅、干净地访问大量数据。

[## 什么是数据结构?| NetApp

数据结构是一种体系结构和一组数据服务,可跨多种选择提供一致的功能…

www.netapp.com](https://www.netapp.com/us/info/what-is-data-fabric.aspx)

3.设计的数据隐私

数据隐私设计的趋势采用了一种更安全、更主动的方法来收集和处理用户数据,同时在其上训练您的机器学习模型。

企业需要用户数据来训练他们在现实世界场景中的模型,他们从各种来源收集数据,如浏览模式和设备。

联合学习背后的想法是收集尽可能少的数据,通过给用户选择退出和随时删除所有收集的数据的选项,让用户了解情况。

虽然数据可能来自大量受众,但出于隐私原因,必须保证不可能对原始数据进行任何逆向工程来识别用户。

4.增强分析

增强分析 是指通过排除任何不正确的结论或偏见,从手头的数据中获得更好的洞察力,以优化决策。通过注入人工智能和机器学习,增强分析帮助用户规划新模型。

通过减少对数据科学家和机器学习专家的依赖,增强分析旨在提供相对更好的数据见解,以帮助整个商业智能流程。

这种人工智能和机器学习的微妙引入通过自动化数据科学的许多方面对传统的洞察发现过程产生了重大影响。增强分析在提供更好的决策,避免分析中的任何错误和偏见方面越来越重要。

5.Python 是数据科学的事实语言

照片由 Hitesh ChoudharyUnsplash 上拍摄

Python 是一种绝对的全能编程语言,如果你有兴趣进入人工智能和数据科学的世界,它被认为是一个值得的切入点。

有了支持性的在线社区,您几乎可以立即获得支持,Python 中的集成只是冰山一角。

编写 Python 代码的乐趣应该在于看到短小、简洁、易读的类,这些类用少量清晰的代码表达了大量的动作——而不是让读者厌烦得要死的大量琐碎代码。

——吉多·范·罗苏姆

Python 集成了众多的编程语言 ,这使得它成为一个极好的选择,比如说,为手头的问题创建一个快速原型,或者深入大型数据集。

它的一些最流行的库是-

tensor flow,用于机器学习工作负载和处理数据集

scikit-learn,用于训练机器学习模型

py torch,用于计算机视觉和自然语言处理

Keras,作为高度复杂的数学计算和运算的代码接口

SparkMLlib,像 Apache Spark 的机器学习库,用算法、实用程序之类的工具让机器学习变得人人轻松

Python 初学者课程—

[## 3 免费 Python 初学者课程:2020 版|黑客正午

如果你正在寻找可以用来扩展你的 Python 知识的最好的免费 Python 课程,你已经来到…

hackernoon.com](https://hackernoon.com/3-free-python-courses-for-beginners-2020-edition-j7c23y3u) [## Python 训练营:学习 Python 编程和代码培训

这是 Udemy 上最全面、最直接的 Python 编程语言课程!你是否…

www.udemy.com](https://www.udemy.com/course/complete-python-bootcamp/?LSNPUBID=JVFxdTr9V80&ranEAID=JVFxdTr9V80&ranMID=39197&ranSiteID=JVFxdTr9V80-lB6TwxSdouentAk36.qjmw)

6.数据科学中广泛的自动化

时间是至关重要的组成部分,任何时间都不应该花在重复的任务上。

随着人工智能的发展,其自动化能力也在扩大。自动化领域的各种创新正在让许多复杂的人工智能任务变得更加简单。

数据科学领域的自动化已经简化了大部分流程,如果不是全部的话。数据科学的整个过程包括识别问题、数据收集、处理、探索、分析以及将处理后的信息分享给他人。

7.会话分析和自然语言处理

自然语言处理和对话分析通过简化我们与机器互动和在线查找信息的方式,已经在数字世界掀起了巨大的波澜。

NLP 极大地帮助我们进入了一个时代,在这个时代,计算机和人类可以用共同的自然语言进行交流,使两者之间能够进行持续而流畅的对话。

NLP 和对话系统的应用随处可见,比如聊天机器人,智能数字助理。据预测,基于语音的搜索的使用将在很短时间内超过更常用的基于文本的搜索。

8.云中的超大规模数据科学

从那时起,人工智能的出现以及由此产生的数据量一直在飙升。随着企业网上业务的增长,数据量从几千兆字节增长到几百千兆字节。

这种对数据存储和处理能力日益增长的需求催生了数据科学,以实现数据的受控和精确利用,并推动全球范围内的组织选择云解决方案。

各种云解决方案提供商,如 、谷歌亚马逊微软提供大量云计算选项,包括企业级云服务器功能,确保高可扩展性和零停机时间。

9.减轻模型偏差和歧视

没有一个模型完全不受偏见的影响,由于缺乏足够的数据、历史偏见和不正确的数据收集实践等因素,它们可以在任何阶段开始表现出歧视性行为。偏见和歧视是模型的常见问题,并且是一种新兴趋势。如果及时发现,这些偏差可以在三个阶段得到缓解:

  • 预处理阶段
  • 加工阶段
  • 后处理阶段

每个阶段都有自己的一套校正方面,包括算法和技术,以优化模型的公平性,并增加其准确性,以消除任何偏差的机会。

10.内存计算

内存计算 是一种新兴趋势,与我们传统的数据处理方式有很大不同。

内存计算处理存储在内存数据库中的数据,这与使用硬盘和带有查询语言的关系数据库的传统方法相反。该技术允许实时处理和查询数据,以进行即时决策和报告

随着内存变得越来越便宜,企业越来越依赖于实时结果,内存计算使他们能够拥有更丰富、更具交互性的仪表板应用程序,这些仪表板可以提供更新的数据,并且几乎可以立即准备好进行报告。

11.数据和分析中的区块链

区块链,简单来说,就是由一群计算机管理的带有时间戳的不可变数据集合,而不是由任何单一实体管理。这里的链指的是使用加密算法绑定在一起的每个块之间的连接。

与数据科学逐渐类似,区块链对于维护和验证记录至关重要,而数据科学则致力于数据的收集和信息提取部分。数据科学和区块链是相关的,因为它们都使用算法来管理其处理的各个部分。

结论

随着业务开始增长,他们会产生更多的数据,数据科学可以帮助他们分析他们需要改进的领域。随着上面提到的几个值得注意的数据科学趋势,一些人开始认为数据科学是继经验、理论和计算之后的第四种科学范式。跟上更新的趋势是企业实现最大效率和保持竞争优势的绝对必要条件。

更多资源—

我希望这篇文章对你有用!如果您有兴趣了解更多信息,以下是附加资源:—

走向数据科学——2020 年人工智能趋势精选清单

business 2 community—2020 年值得关注的 10 大数据和分析趋势

Analyticsindiamag—未来 5 年数据科学家的工作趋势

Codeit—2020 年顶级数据分析趋势

关于作者

克莱尔 D 。在digital ogy是一个内容制作者和营销人员。这是一个技术采购和定制匹配市场,根据全球各地的特定需求,将人们与预先筛选的&顶尖开发人员和设计师联系起来。连接DigitalogyonLinkedinTwitterinsta gram**

数据科学家 vs 数据分析师。区别就在这里。

原文:https://towardsdatascience.com/data-science-vs-data-analysis-heres-the-difference-4d3da0a90f4?source=collection_archive---------5-----------------------

数据科学家和数据分析师的主要区别和相同点是什么?阅读下面的概要分析。

克里斯蒂娜@ wocintechchat.com 在Unsplash【1】上的照片

目录

  1. 介绍
  2. 数据科学家
  3. 数据分析师
  4. 类似
  5. 差异
  6. 摘要
  7. 参考

介绍

尽管数据科学和机器学习领域在工作描述、雇主和公众之间存在混淆,但数据科学和数据分析之间的差异更容易区分。然而,这两个领域和工作岗位之间仍然存在相似之处和主要差异。有些人会说,要成为数据科学家,数据分析角色是成为数据科学家的先决条件。

本文旨在阐明作为数据科学家和数据分析师意味着什么,以及这两个领域的专业人士。

当我在学习成为一名数据科学家时,作为一名工作数据分析师,我意识到数据科学理论与数据分析理论有很大不同。这并不是说数据科学与数据分析不共享相同的工具和编程语言。人们也可以认为数据科学是数据分析的一种形式,因为最终,你是在与数据打交道——转换、可视化并得出可操作的变化的结论。那么如果它们如此相似或者一个在另一个之下,为什么要写一篇关于这两个热门领域的文章呢?原因是,进入这两个领域的人都可以从这里学到东西——他们将从这两个职业中获得什么——或者人们普遍感到好奇,并进一步展开讨论。下面,我将概述数据科学家或数据分析师的主要相似之处、不同之处,并举例说明这意味着什么。

数据科学家

拟合数据科学模型和预测的示例。作者截图[2]。

惊呼——这个 DS 部分只有我从上一篇关于数据科学与机器学习的文章中收集的一些信息,以及新的信息[3]:

[## 数据科学 vs 机器学习。区别就在这里。

数据科学家和机器学习工程师的主要区别和相同点是什么?阅读以下内容,了解…

towardsdatascience.com](/data-science-vs-machine-learning-heres-the-difference-530883d6de3a)

数据科学可以被描述为一个自动化统计领域,以模型的形式帮助分类和预测结果。以下是成为数据科学家所需的顶级技能:

  • Python 或者 R
  • SQL
  • Jupyter 笔记本
  • 算法/建模

Python——以我个人的经验,我相信大部分公司都在寻找 Python 多于 R 作为主要编程语言。工作描述可能会列出这两者;但是,大多数和你一起工作的人,像机器学习工程师、数据工程师、软件工程师,都不会对 r 很熟悉,所以,我相信,做一个更整体的数据科学家,Python 会对你更有利。

SQL 起初看起来更像是一种数据分析师技能——的确如此,但它仍然应该是一种用于数据科学的技能。大多数数据集不是在商业环境中给你的(相对于学术环境而言),你必须自己制作——通过 SQL。现在,SQL 有很多子类型;像 PostgreSQL,MySQL,微软 SQL Server T-SQL,Oracle SQL。它们是同一种查询语言的相似形式,由不同的平台托管。因为它们非常相似,所以拥有其中任何一个都是有用的,并且可以很容易地转换成稍微不同形式的 SQL。

Jupyter 笔记本 ,一个数据科学家同时进行编码和建模的游乐场。一个研究环境,如果你愿意的话,允许快速简单的 Python 编码,可以合并代码外的注释,代码本身,以及一个从有用的库中构建和测试模型的平台,如 sklearn、numpy。

算法 —数据科学家的主要职能是利用算法快速准确地预测、分类和建议数据输出。当您将数据接收到模型中时,就会产生一个新的结果。关键算法类型的例子通常在非监督学习(例如,聚类)和监督学习(例如,分类/回归)中被分类。一些特定的关键算法:

  • 随机森林(集合分类)
  • 逻辑回归(分类—非回归)
  • K-Means ( 聚类)
  • k-最近邻(分类/回归)

总体而言,数据科学家可以从事多种工作,但主要职能是:

— meet with stakeholders to define the business problem— pull data (*SQL*)— Exploratory Data Analysis (EDA), feature engineering, model building, & prediction (*Python, Jupyter Notebook, and Algorithms*)— depending on the workplace, compile code to .py format and/or pickled model for production

要了解更多关于什么是数据科学家,他们挣多少钱,该领域的前景,以及更多有用的信息,请点击加州大学伯克利分校的链接这里【4】。

数据分析师

威廉·艾文在Unsplash【5】上拍摄的照片。

数据分析师与业务分析师、商业智能分析师甚至 Tableau 开发人员有着相似的头衔。数据分析的重点是描述和可视化数据的当前状况,向非技术用户报告和解释数据。数据科学交叉职位是执行预测分析的数据分析师,与数据科学家有更多相似之处,但没有输出这些预测的自动化算法方法。

成为数据分析师所需的一些主要技能包括:

  • SQL
  • Excel
  • Tableau(或其他可视化工具——谷歌数据工作室等)

SQL正如数据科学家如何使用上述 SQL 一样,数据分析师也是如此。然而,在这个领域中,人们非常关注 SQL。一些数据科学家可以通过几个连接简单地从表中选择列,而数据分析师可以执行更复杂的查询(例如,通用表表达式、数据透视表、窗口函数、子查询)。有时,根据公司的不同,数据分析师可以分享数据工程师和数据科学家之间的更多相似之处。

Excel —老派,没错,但是依然非常强大,甚至可以在这里进行预测分析和趋势分析。主要的缺陷通常是 Excel 的性能比其他使用 Python 的更健壮的工具要慢。

Tableau —我只会说可视化工具,但根据我的经验,大多数公司都将这个工具列为数据分析师的一项特定的顶级技能。将数据拖放到 Tableau 中预先创建的图表是简单而强大的;还有更困难和复杂的功能,如计算字段和连接到动态 SQL 数据库,而不是通过静态 Excel 表进行分析。

总的来说,数据分析师也可以从事多种工作,但主要职能是:

— meet with stakeholders to define the business problem— pull data (*SQL*)— EDA, trend analysis, and visualizations (*Excel and Tableau*)— depending on the workplace, presenting findings and supplying actionable insights those same stakeholders

要了解更多关于什么是数据科学家,他们挣多少钱,该领域的前景,以及更多有用的信息,请点击此处【6】,来自西北大学。

类似

一些相似之处已经在前面的章节中描述过了,但是总结一下,数据科学家在编码语言、平台/工具和问题解决方面有一些共同点。

类似的工具包括但不限于 SQL、Tableau 以及定义问题、分析数据和输出分析结果的相同概念。

差异

虽然有相似之处,但这两个领域和角色之间仍然存在差异。

一些主要差异围绕着分析的自动化,数据科学家专注于使用 Python 等编程语言的算法来自动化分析和预测,而数据分析师使用静态或过去的数据,在某些情况下,会使用 Tableau 和 SQL 等工具来创建预测的场景。

摘要

Filiberto Santillán 在Unsplash【7】上拍摄的照片。

数据科学和数据分析共享的不仅仅是名称(数据),它们还包括一些重要的差异。无论您是想成为数据科学家还是数据分析师,我希望您发现这个关键差异和相似之处的概述是有用的。如果你已经是这两个角色之一,那么我希望我教了你一些新的东西,如果你有任何问题或意见,请在下面提出。

参考

[1]照片由克里斯蒂娜@ wocintechchat.comUnsplash【1】(2019)上拍摄

[2] M.Przybyla,Jupyter 笔记本截图,(2020)

[3] M.Przybyla,数据科学 vs 机器学习。区别就在这里。,(2020)

[4] UC Berkely,什么是数据科学?(2020 年)

5照片由 William IvenUnsplash(2015)上拍摄

【6】东北大学,数据分析师是做什么的?,(2019)

[7]由 Filiberto SantillánUnsplash(2019)上拍摄的照片

数据科学 vs 机器学习。区别就在这里。

原文:https://towardsdatascience.com/data-science-vs-machine-learning-heres-the-difference-530883d6de3a?source=collection_archive---------8-----------------------

数据科学家和机器学习工程师的主要区别和相同点是什么?阅读下面的概要分析。

克里斯蒂娜@ wocintechchat.com 在Unsplash【1】上的照片

目录

  1. 介绍
  2. 数据科学家
  3. 机器学习工程师
  4. 类似
  5. 差异
  6. 摘要
  7. 参考

介绍

似乎就连公司及其职位描述都不清楚什么是数据科学家和机器学习工程师。我在这里提供一些见解,解释为什么它们是分开的,以及角色在哪里可以重叠。

起初,为了成为一名数据科学家,我尴尬的不知道什么是机器学习工程师。我很快意识到这个领域类似于数据科学,但又有很大的不同,需要一套独特的技能。长话短说,数据科学是研究、构建和解释你已经建立的模型,而机器学习是该模型的产物。现在我已经在这个领域工作了几年,在这两个学科都获得了经验,我在下面列出了一个大纲,说明什么是数据科学和机器学习工程师角色,什么不是。

数据科学家

近距离观察数据科学家的 Jupyter 笔记本。作者截图[2]。

统计学家?算是吧。用最简单的术语来说,数据科学可以被描述为一个自动化统计领域,其形式是帮助分类和预测结果的模型。以下是成为数据科学家所需的顶级技能:

  • Python 或者 R
  • SQL
  • Jupyter 笔记本

然而,大多数与你一起工作的人,如机器学习工程师、数据工程师和软件工程师,都不会熟悉 r。因此,我相信,作为一名更全面的数据科学家,Python 对你更有益。

SQL ,起初看起来更像是一个数据分析师的技能——的确如此,但它仍然应该是你在数据科学中使用的技能。大多数数据集不是在商业环境中给你的(而不是学术界),你必须自己制作——通过 SQL。现在,SQL 有很多子类型;像 PostgreSQL,MySQL,微软 SQL Server T-SQL,Oracle SQL。它们是同一种查询语言的相似形式,由不同的平台托管。因为它们非常相似,所以拥有其中任何一个都是有用的,并且可以很容易地转换成稍微不同形式的 SQL。

Jupyter 笔记本 几乎可以和机器学习工程师的工具包完全相反。Jupyter 笔记本是数据科学家进行编码和建模的乐园。一个研究环境,如果你愿意的话,允许快速简单的 Python 编码,可以合并代码外的注释,代码本身,以及一个从有用的库中构建和测试模型的平台,如 sklearn、numpy。

总的来说,数据科学家可以是多方面的,但主要职能是

—与利益相关者会面以确定业务问题

—提取数据( SQL )

— EDA、特征工程、建模、预测( Python Jupyter 笔记本

—根据工作场所,编译代码以。py 格式和/或酸洗模型

要了解更多关于什么是数据科学家,他们挣多少钱,该领域的前景,以及更多有用的信息,请点击加州大学伯克利分校的链接此处【3】。

机器学习工程师

机器学习工程师常用的 Docker 的设置菜单。作者截图[4]。

现在,在上面的最后一点之后,就是机器学习工程师介入的时候了。主要功能是将模型投入生产。数据科学模型有时可能非常静态,工程师可以帮助自动训练和评估相同的模型。然后,他们会将预测重新插入到您公司的数据仓库/SQL 表中。之后,软件工程师和 UI/UX 设计师将在用户界面上显示预测结果——如果需要的话。正如您所看到的,从业务问题到解决方案的整个过程都是一种可见的、易于使用的格式,这不仅仅是数据科学家的责任(然而,是的,一些数据科学家可以做所有 x 数量的角色)。

机器学习工程师的角色也可以命名为 ML ops(机器学习操作)。他们的工作流程总结如下:

A.数据科学模型的 pkl_file

B.存储桶(GCP——谷歌云编辑器)

C.DAG(用于安排模型的培训者和评估者)

D.气流(可视化流程——ML 管道)

E.Docker(集装箱和虚拟化)

起初,也许数据科学和机器学习可以被视为可互换的头衔和领域;然而,通过仔细观察,我们意识到机器学习更多的是软件工程和数据工程的结合,而不是数据科学。下面,我将概述字段交叉和不交叉的地方。

要了解更多信息、可视化、流程,请点击此处 5,查看谷歌的机器学习操作概述

类似

数据科学和机器学习最相似的概念可能是它们都接触模型。这两个领域共有的主要技能是:

SQLPythonGitHubConcept of training and evaluating data

比较主要是在编程方面;每个人扮演各自角色所使用的语言。这两个职位都执行某种形式的工程,无论是使用 SQL 查询数据库的数据科学家,还是使用 SQL 将来自模型的建议或预测插入到新标记的列/字段中的机器学习工程师。

这两个领域都需要 Python(或 R)知识,通常还需要版本控制、代码共享和通过 GitHub 拉请求。

例如,机器学习工程师有时可能希望了解 XGBoost 或 Random Forest 等算法是如何工作的,并且需要查看模型的超参数进行调整,以便对内存和大小限制进行研究。虽然数据科学家可以在学术界或工作中构建高度精确的模型,但由于时间、金钱和内存的限制,在工作场所会有更多的限制。

差异

数据科学和机器学习的上述部分已经概述了一些差异,但职业和学术研究都有一些重要的关键特征,需要指出:

Data Science - focuses on statistics and algorithms 
- unsupervised and supervised algorithms
- regression and classification
- interprets results
- presents and communicates resultsMachine Learning - focus on software engineering and programming
- automation
- scaling
- scheduling
- incorporating model results into a table/warehouse/UI

教育

这两种角色不仅在工作场所不同,在学术界/教育界也不同。成为数据科学家和机器学习工程师有不同的途径。数据科学家可能专注于学位本身、统计学、数学或精算科学,而机器学习工程师将主要专注于软件工程(一些机构确实专门提供机器学习作为证书或学位)。要了解更多关于成为在线数据科学家的信息,你可以在这里阅读我的另一篇文章【6】:

[## 是的,你可以在网上成为一名数据科学家。以下是方法。

在线学习的专业数据科学家指导您在家开始数据科学生涯

towardsdatascience.com](/yes-you-can-become-a-data-scientist-online-heres-how-dc73c7faae0f)

摘要

虽然不同的人、公司和职位描述对每一个职业有不同的版本或想法,但我当然相信这两个职位有明显的区别。有些技能确实是重叠的,但一般来说,数据科学家专注于统计、模型构建和结果解释。机器学习工程师将采用该模型,对其进行缩放,并将其部署到生产中。如果你来这里是为了学习或决定你的职业道路,我希望这篇文章有所帮助。感谢您的阅读!

参考

[1] 克里斯蒂娜@ wocintechchat.comUnsplash ,(2019)

[2] M.Przybyla,截屏——Jupyter 笔记本,(2020 年)

[3] UC Berkely,什么是数据科学?(2020 年)

[4] M.Przybyla,截图——Docker,(2020 年)

5谷歌, MLOps:机器学习中的连续交付和自动化管道,(2020)

[6] M. Przybyla,是的,你可以在网上成为一名数据科学家。以下是方法。,(2020)

数据科学 vs 人工智能世界

原文:https://towardsdatascience.com/data-science-vs-the-world-of-ai-793f6da8cf86?source=collection_archive---------31-----------------------

让我们试着理解什么是数据科学和人工智能,以及它们是如何交叉的

如果你曾经遇到过这些术语——数据科学、人工智能、机器学习、深度学习等等,请举手。但是它们是什么意思呢?我知道这些术语有些混乱。有人说数据科学和人工智能是同义词,有人说一个是另一个的子集,还有人说这些术语完全不相关。

混淆是由于这些术语的模糊和非技术性使用而产生的。

让我们通过扩展上述术语并了解数据科学如何与人工智能世界相交来进入细节。

什么是数据科学?

数据科学是使用各种技能从数据中提取有意义的见解的研究领域。我很肯定每个人都很清楚这一点。但是数据科学如何帮助世界各地的公司做出关键决策呢?让我们来看看。

XYZ 广场的交通拥堵或道路分流可能不是我们关心的问题,但优步的送餐应用 Uber Eats 非常重要。让热食快速送达是他们的首要目标。然而,要在全国范围内实现这一目标,需要先进的统计模型和更多的东西。为了优化整个配送过程,该团队必须预测每个可能的变量(从风暴到假日抢购)将如何影响交通和烹饪时间。

要了解更多关于数据科学的知识,你可以阅读我之前的博客这里

来源:保证推特

什么是人工智能?

人工智能是机器,尤其是计算机系统对人类智能过程的模拟。这些过程包括学习、推理和自我修正。构成人工智能的任务有:

  1. 问题解决
  2. 知识表达
  3. 论证
  4. 决策
  5. 驱动和感知

资料来源:Agenparl.com

什么是机器学习?

机器学习是机器可以在没有明确编程的情况下自行学习的学习。它是人工智能的一个应用,为系统提供了自动学习和从经验中改进的能力。

可以说,现在人工智能的主要驱动力是机器学习。

当我们说某样东西能够“机器学习”时,它的意思是它能够利用提供给它的数据执行某种功能,并随着时间的推移变得越来越好。这就像如果你有一个手电筒,只要你说“这是黑暗的,”它就会打开,所以它会识别包含单词“黑暗”的不同短语

来源: SAS

什么是深度学习?

深度学习只是机器学习的一个子集。深度学习在技术上类似于机器学习和功能(这就是为什么这些术语有时会松散地互换)。然而,它的能力是不同的。

虽然基本的机器学习模型确实在它们的功能方面变得越来越好,但它们仍然需要一些指导。如果人工智能算法返回不准确的预测,那么工程师就必须介入并做出调整。通过深度学习模型,算法可以通过其神经网络自行确定预测是否准确。

回到手电筒的例子:它可以被编程为在识别到有人说单词【黑暗】时打开。随着它继续学习,它可能最终会打开任何包含该词的短语。现在,如果手电筒有一个深度学习模型,它可以计算出当它听到“我看不见”“灯开关不起作用”时,它应该打开,也许与光传感器串联。深度学习模型可以通过它的计算方法进行学习——这种技术使它看起来像有大脑一样。

我想你已经知道每个术语的意思了。但是它们在现实世界中是如何相交的呢?我们再举一个例子来理解这一点。

假设我是一个板球队的战略家。我的任务是制定一个计划来解雇对方队最好的击球手。可能有成千上万的视频捕捉到击球手的发挥。但重要的是要关注击球手被解雇的视频。收集关于击球手的表现恶化的交付类型的见解。这间接地意味着我需要首先清理数据(删除不相关的视频),并从中推断出有用的见解,以创建一个策略。现在,我需要建立一个人工智能模型,可以针对不同的条件和可视化进行训练,以帮助找出投球手需要投球的区域来解雇击球手。(这里涉及到机器学习和深度学习,因为我们处理的是需要不断馈入模型的实时数据)。

你现在明白数据科学如何与人工智能世界相遇了吗?

然后,举起你的手…

数据科学——它到底意味着什么?

原文:https://towardsdatascience.com/data-science-what-exactly-does-it-mean-26ffac8a0b6?source=collection_archive---------67-----------------------

数据科学和机器学习导论

马库斯·斯皮斯克在 Unsplash 上的照片

数据科学——这个术语已经存在了很长时间。那些没有实际接触过数据科学或其各种子领域的人可能会认为它是灵丹妙药或魔杖,可以回答任何业务问题或预测任何事情,而不管底层的假设或要求如何。

我并不自称是数据科学家,但是我很幸运地以这样或那样的方式参与了数据科学的各个方面。这是一个极其复杂、广泛的跨学科领域,包括数学、统计学、编程、数据库、大数据、数据分析、机器学习和数据架构等等。

有人非常简洁地将这一现实表述为:

一个数据科学家比任何软件工程师更擅长数学/统计,比任何数学家或统计学家更擅长软件工程。

我不打算用数据科学的正式定义和解释来烦你;然而,“数据科学”中“科学”一词的出现应该足以让人们理解数据科学领域中隐含的科学复杂性。

我在这里的目的是尝试列出并提供数据科学下所有重要的子领域、概念和技术的高级摘要,希望能够作为任何有抱负的数据科学家或对数据科学感兴趣的人的参考指南。

当向不熟悉数据科学的人解释数据科学领域时,我通常倾向于将其分为三个广泛的领域:

  • 核心知识
  • 机器学习
  • 支持区域

在我们分别深入研究它们之前,让我用一个事实来警告这篇文章

如果没有数据科学家试图解决的特定问题的专业知识,任何数据科学项目都不可能成功。

一些专家非常正确地承认,一名优秀的数据科学家需要对三个广泛的领域有足够深刻的理解:数学和统计、计算机科学或编程,以及领域知识。没有对领域知识的复杂理解,一个人将无法有效地定制、调整和使用他/她所拥有的各种工具和技术。

我打算在这里介绍数据科学的前两个领域:数学和统计学,以及计算机科学/编程。

打下必要的基础后,让我们对数据科学中涉及的内容有更多的了解。

核心知识

Unsplash科学高清拍摄的照片

数学和统计学

我明白你的意思——从最无聊的学术话题开始并不性感。但事实仍然是,对各种数学和统计模型的理解构成了大多数机器学习和深度学习算法的基础。

人们可能能够在没有任何基础统计概念知识的情况下实现机器学习模型。然而,他/她将无法调试它,得出有意义的见解或推论,微调它,解释结果的局限性,或有效地验证它。

数据科学中使用的一些标准数学和统计概念是:

线性代数

  • 向量空间
  • 矩阵
  • 线性系统

微积分,包括多元微积分

概率论,包括贝叶斯统计、假设检验、各种概率分布等。

经典统计学

  • 描述性统计——旨在总结并帮助我们更好地理解样本观察数据。这包括集中趋势的度量(例如,平均值、中值和众数)和可变性的度量(例如,方差、标准偏差、最小和最大值、范围、峰度和偏斜度)
  • 推断统计—旨在根据从更广泛的总体中抽取的样本的描述性统计来推断总体的基本属性,例如,通过测试假设和得出估计值
  • 探索性数据分析(EDA) —对数据集的描述性属性进行可视化分析,例如,通过直方图、核密度图、箱线图、散点图、热图等。

一些标准的统计测试和程序包括回归分析(线性、逻辑、多项式、非线性、多元、二项式、多项式等。)、方差分析(ANOVA)、卡方检验、相关分析、学生 t 检验、时间序列、联合分析等。

统计决策理论 —结合统计知识做出决策,从而阐明决策中涉及的一些不确定性,如混淆矩阵

编程语言

数据科学家需要一个平台或环境来实现上述所有数学计算和模型。编程语言拯救了我们。

除了主要致力于数据科学领域的特定专用编程语言之外,几种通用编程语言也通过各种开源包和函数发展到包括数据科学特定的功能。

数据科学家使用的一些最常见和最流行的编程语言是:

  • Python 可能是当今数据科学家使用的主要编程语言,Python 是一种开源、解释型、高级、通用的动态编程语言。自 1991 年首次发布以来,由于被数据科学家所接受,它获得了巨大的吸引力
  • R : R 曾经是数据科学家的领先编程语言,专注于统计计算。像 Python 一样,R 也是 1993 年推出的开源、解释型高级语言
  • Scala :运行在 Java 虚拟机(JVM)上的通用开源编程语言。由于 Scala 是为在 JVM 上运行而开发的,它本身就允许与 Java 的互操作性。Apache Spark 是一个集群计算框架,它是用 Scala 编写的,这使得它成为在集群计算框架中处理大数据的理想编程语言
  • Julia :一种开源、高级、高性能、动态编程语言,旨在满足高性能数值分析和科学计算的需求。Julia 于 2012 年首次推出,迅速赢得了数据科学家的青睐
  • MATLAB / Octave : MATLAB 是 MathWorks 开发的专有数值计算语言,在学术界广泛使用。它被认为是数学家、统计学家和科学家的理想选择,因为它在复杂的数值计算方面具有固有的专业性。GNU Octave 是 MATLAB 的开源替代品之一,主要用于数学计算

机器学习

Franck V.Unsplash 上拍摄的照片

这才是真正有趣的地方——然而,有几种方法可以将所有可能的概念和技术进行分类。对于这篇文章,我将尽量保持分类足够通用,而我的下一篇文章将重点关注三个主要角度来处理各种机器学习概念。

正如我前面提到的,下面所有的机器学习算法都是基于一个或多个经过验证的数学概念。

监督学习

监督机器学习算法可以进一步分为回归和分类算法。

回归算法

这些算法根据输入到算法的数据中的输入变量(称为特征)预测连续的数值变量,包括:

  • 简单(单个输入变量)或多个(多个输入变量)线性回归算法,用于模拟输入和输出变量之间的线性关系
  • 最小绝对选择收缩算子(LASSO)回归通过改变模型训练过程来选择最终模型中使用的输入变量的子集而不是全部,从而有助于避免简单线性回归模型的过度拟合。参考相关论文此处
  • 当输入变量显示高度多重共线性时,即输入变量之间存在高度相关性时,主要使用岭回归。参考相关论文此处
  • 支持向量回归(SVR)利用 SVM 的概念(见下文)来寻找 N 维空间(其中 N 等于输入变量的数量)中的最佳超平面,然后用于预测连续输出变量。参考相关论文此处

分类算法

这些算法将输出变量(称为目标)分类或归类到给定数量的类中。最常见和众所周知的分类算法是:

  • 逻辑回归使用 sigmoid/逻辑函数来预测二元目标变量被分配到两个可能的目标类之一的概率。这种函数估计基于几个输入变量(连续变量或二分变量)和目标输出变量之间的历史关系
  • 朴素贝叶斯利用众所周知的贝叶斯定理解决分类问题
  • 支持向量机(SVM)的目标是在 N 维空间(其中 N 等于输入变量的数量)中找到最佳超平面,该超平面清楚地分类数据点。参考相关论文此处

两用算法

大多数其他监督机器学习算法可以应用于回归和分类问题,例如:

  • 分类和回归树(CART)是一个总括术语,包括分类和回归决策树。决策树利用一组给定的输入属性及其类来生成一系列规则(决策树),这些规则可用于对数据进行分类或预测实际的输出
  • k 最近邻(kNN)是一种计算密集型算法(惰性学习),它通过距离度量(最常见的是欧几里德距离)对每个点的 k 最近邻进行简单多数投票,从而对数据进行分类或识别新数据的值。k 的理想值需要通过反复试验或特定的统计方法独立确定。在 kNN 分类中,输出是分类,而在 kNN 回归中,输出是目标的平均属性值
  • 随机森林是一种用于分类和回归问题的集成机器学习方法。它们在模型训练时构建多个决策树,并输出作为类的模式(分类)或单个树的均值预测(回归)的类
  • 梯度推进算法产生弱预测模型集合形式的预测模型,通常是决策树。目的是减少过度拟合,避免过于复杂的算法,并利用各种弱个体决策树,迭代地识别理想模型。选择理想模型(称为损失函数)的决策标准可以是回归问题的均方误差或分类问题的对数损失

无监督学习

无监督的机器学习算法试图在没有预先存在的标签的数据集中识别和预测以前未检测到的模式;换句话说,我们事先不知道目标变量的正确值。

例如,一家公司可以实施一种无监督的机器学习算法,根据特定的共享特征来识别其客户并将其分组为独特的细分市场。你可以想象,客户没有预先存在的标签将他们分类到特定的细分市场——无监督的算法来拯救我们。

无监督机器学习算法可以进一步分为以下几种:

聚类算法

这些算法将相似的数据点分组或分类到特定的组中,主要通过一些相似性或距离度量。理论上,一个组/群内的观测值将表现出与另一个群不同的相似特性。

一些标准的聚类算法包括:

  • k-Means 聚类-也许是最常见和最广泛使用的聚类算法-以最小化每个聚类内各个观察值之间的差异的方式将观察值分配给组
  • 基于密度的带噪声应用空间聚类(DBSCAN)是科学文献中引用的另一种传统算法,它将紧密包装在一起的观察值(高密度区)组合在一起,同时将那些单独位于低密度区的观察值标记为异常值。此处的论文中描述了该技术
  • 源于图论的谱聚类利用数据相似性矩阵的谱(特征值)来执行降维,然后在更少的维度内对单个观察值进行聚类。该技术在一文中有所描述
  • 均值漂移聚类在某种意义上类似于 DBSCAN 算法,它试图找到数据点的密集区域,并相应地对它们进行分组。然而,均值漂移将异常值组合在一个单独的聚类中,而 DBSCAN 同样识别这些异常值。该技术在相关论文中有所描述
  • 聚集聚类是一种自下而上的层次聚类,它最初将每个数据点视为单个聚类,然后连续合并(或聚集)聚类对,直到达到所需的聚类数
  • 使用层次结构的平衡迭代减少和聚类(BIRCH)递增地和动态地对传入的多维度量数据点进行聚类,以试图利用可用资源(即,可用存储器和时间约束)产生最佳质量的聚类(Zhang,Ramakrishnan 和 Livny,1996)。在的论文中描述了该技术

异常检测

异常检测是从给定数据集中识别异常值的过程,这些异常值被认为与大多数观察值显著不同。异常检测大量用于欺诈检测、结构缺陷、医疗条件等。

用于异常检测的流行的无监督机器学习算法包括:

  • 隔离森林算法基于一种基于模型的方法,通过子采样来隔离异常,而不是将观测值与“正常”观测值进行比较的传统技术。该算法在论文中描述,这里
  • 一类 SVM 是一种无监督算法,它将新数据分类为与训练集相似或不同。此处的论文中描述了该技术
  • 上面解释的一些聚类算法也用于异常检测

降维

这些方法旨在减少数百甚至数千个特征(输入变量)的数量,以便为我们的算法选择最佳的可预测特征,而不会丢失重要信息,同时保持(或潜在地改善)我们模型的性能。

一些降维技术包括:

  • 主成分分析(PCA)用于通过从现有的大量变量中提取新的一组变量来减少特征冗余和多重共线性。这些新导出的变量被称为主成分
  • 线性判别分析(LDA)在最大化类别可分性的同时,寻找最佳解释数据的变量的线性组合

还可以通过相关性分析(移除高度相关的特征)、方差膨胀因子(VIF)分析、后向特征消除和前向特征构建等来实现维度减少。

时间序列

时间序列预测为我们的数据集增加了一个独特的时间维度,从而带来了观测值之间的时间依赖性。在传统的机器学习算法中,未来是基于历史观察来预测的,其中所有先前的观察被同等对待。然而,时间序列数据集的不同之处在于,它增加了观测值之间的显式顺序相关性:时间维度。

时间序列数据既可以是单变量的(例如,历史日降雨量或产品的日销售额),也可以是多变量的(例如,两种产品的过去常规销售额)。此外,时间序列预测可以是单步或多步预测。单步预测只预测未来的下一个变量,而多步时间序列预测则预测多个未来值。我们预测的未来越远,我们的置信区间就越宽。

以下是时间序列预测实践中常用的一些统计和机器学习概念:

  • 使用合适窗口中时间序列值的移动平均(MA)来预测未来值
  • 自回归(AR)模型使用以前的时间观测值作为回归方程的输入,来预测下一时间步的值
  • 自回归移动平均(ARMA)模型试图在预测时间序列时模拟 AR 和 MA 两个方面
  • 自回归综合移动平均(ARIMA)模型建立在 ARMA 模型的基础上,通过添加差异因子(ARIMA 的 I)使时间序列平稳——这是所有基于 AR 和 MA 模型的重要假设
  • 季节性自回归综合移动平均(SARIMA)模型建立在 ARIMA 模型的基础上,增加了季节性因素,以适应时间序列中的季节性波动
  • 带有外生回归量的季节性自回归综合移动平均(SARIMAX)是在 SARIMA 模型的基础上增加了一个外生变量。这些外生回归变量是平行的时间序列变量,不能通过 AR、I 或 MA 过程直接建模,但可以作为 SARIMAX 模型的加权输入
  • 自回归条件异方差(ARCH)对时间序列的方差随时间的变化进行建模。请注意,基于 AR 和 MA 的模型无法处理时间序列中不断变化的方差
  • 广义自回归条件异方差(GARCH)模型是 ARCH 模型的扩展,将移动平均分量与自回归分量相结合
  • GARCH 模型的其他变体包括非线性 GARCH (NGARCH)和积分 GARCH (IGARCH)
  • 长短期记忆(LSTM)是一种递归神经网络,它具有单变量、多变量和多步时间序列预测的能力

推荐系统

推荐系统算法正是顾名思义:根据用户的消费历史和/或偏好,向用户推荐最相关的商品。项目可以是要看的电影(网飞),要听的歌曲(Spotify),要购买的产品(亚马逊和易贝)。

让我们简要回顾一下目前使用的主要推荐系统:

协同过滤方法仅依赖于用户之前的互动(点赞数、用户评分、购买量、阅读文章的时间等)。)与有问题的项目。基本前提是:如果我和我的朋友都喜欢一部特定的电影(基于我们的评级),我最有可能想看另一部我朋友喜欢的电影。

协同过滤方法可以进一步细分为以下几种:

  • 基于记忆的方法依赖于先前的用户交互,没有用于推荐的底层模型,使用某种基于距离或邻居的标准
  • 另一方面,基于模型的方法依赖于潜在的预测模型进行推荐。这种方法使用了几种模型,包括矩阵分解算法、贝叶斯网络、聚类模型、潜在语义模型等。

基于内容的过滤方法在协作过滤方法的基础上,加入了用户资料、商品描述或两者之间的细微差别。例如,基于内容的电影推荐算法可以利用我的年龄、性别和位置(用户资料)或电影类别、语言和主要演员(项目描述)来推荐我的下一部电影。贝叶斯分类器、聚类分析、决策树和人工神经网络通常用于估计用户喜欢某个项目的可能性。

混合系统利用协作和基于内容的过滤来构建推荐系统。网飞是使用混合推荐系统的一个很好的例子。它的推荐是相似用户的观看和搜索习惯的组合(即,协同过滤)以及推荐与用户过去评价高的电影具有共同特征的电影(基于内容的过滤)。关于网飞推荐系统的更多细节,请参考这篇文章。

人工神经网络

人工神经网络(ANN)的灵感来自于生物大脑如何在生物神经元的帮助下进行复杂的决策过程。人工神经网络和深度学习之间的文献有一些重叠。然而,在本文中,我将把人工神经网络视为一个仅由三层神经元组成的网络:输入层、隐藏层(所有数据和信息处理都由机器学习算法执行)和输出层。人工神经网络被设计成迭代地学习或适应它们自己,并被广泛用于寻找模式或识别图像,这些模式或图像对于人类编程来说太复杂或太耗时。

正如 Howard Rheingold 所说,人工神经网络通过实例学习:

神经网络是一种技术,它不是一种算法,它是一个有权重的网络,你可以调整权重,让它学习。你通过试验来教授它。

深度机器学习

深度机器学习或深度神经网络是具有多个隐藏层的高级 ann,即每个隐藏神经元层可以通过机器学习算法迭代处理信息,以更有效地将输入层映射到输出层。

一些最常见的深度神经网络类型有:

卷积神经网络

CNN 主要用于图像或模式识别、分类和分析问题。CNN 于 1998 年作为 LeNet-5 首次推出。它们不同于常规神经网络(在常规神经网络中,通常每一层都与前一层中的所有神经元完全连接),这些层是以三维(宽度、高度和深度)组织的,并且一层中的神经元仅与下一层中的一小部分区域连接。顾名思义,CNN 中的层是卷积层,在传递到下一层之前,对输入使用卷积操作。

目前在各自领域中使用的一些领先的 CNN 模型实现有:

生成性对抗网络

GANs 于 2014 年推出,是一种算法架构,以对立的方式使用两个神经网络来生成新的合成数据点,这些数据点非常接近真实数据。它们广泛用于图像生成、视频生成和语音生成。

gan 的工作原理是由一个神经网络(生成器)生成新的数据实例,而另一个神经网络评估它们的真实性(鉴别器)。因此,鉴别器决定它检查的每个数据实例是否属于实际的训练数据集。此处参考原论文

递归神经网络(RNN)

RNNs 是为序列问题设计的一种特殊类型的神经网络。它们与其他深度神经网络的不同之处在于,前一步的输出是下一步的输入(因此是循环的)。

因此,除了在模型训练步骤中涉及的传统学习之外,rnn 具有额外的学习步骤,由此它们在生成输出的同时记住从先前输入学到的东西。rnn 用于手写识别、语音识别、时间序列预测、自然语言处理等。

一些基于 RNNs 的特定神经网络是:

  • 长短期记忆(LSTM)和 GRUs 可以通过门的概念处理 RNN 与消失梯度相关的缺点。网关有助于调节网络中的信息流
  • 门控循环单元(GRU)类似于 LSTM,但没有输出门。此处参考原纸
  • 双向 RNN——于 1997 年推出——“可以在不限制使用输入信息的情况下进行训练,直到预设的未来帧。这是通过在正负时间方向上同时训练它来实现的。”。引用原文可在这里查阅
  • Hopfield 网络由包含一个或多个完全连接的递归神经元的单层组成。原文可以在这里查阅

自然语言处理

自然语言处理(NLP)是一个宽泛的术语,包括人类语言计算处理的几个方面,无论是处理文本输入(翻译、情感分析等)。),或者通过算法(自然语言生成、自动摘要、聊天机器人等)生成人类可以理解的文本。).

虽然 NLP 算法和方法是基于 ANN 和深度网络的,但我决定单独阐述 NLP,因为大多数最新的 NLP 算法由两种或更多种不同的深度学习算法组成(ANN、RNN、CNN 等)。).

通过深度机器学习算法执行的 NLP 相关功能包括机器翻译、解析、标记、命名实体识别、自然语言生成、聊天机器人、情感分析、总结等。

一些常见的预训练或 NLP 相关模型和库包括:

  • Word2Vec单词表示的全局向量(GloVe) 是单词嵌入的主要方法。在 NLP 的上下文中,单词嵌入是将单词转换或翻译成向量的过程,其中向量最纯粹的形式就是一组实数。单词的向量表示对于深度学习算法来说非常有用,可以确定单词在句子中的上下文含义
  • ELMo——基于 RNN 架构——与 Word2Vec 和 GloVe 相比,提供了卓越的、双向的和上下文相关的单词嵌入。
  • 谷歌的 Transformer-XL 建立在原始 Transformer 架构的基础上,通过支持“在不破坏时间连贯性的情况下学习超过固定长度的依赖性”,支持更长的文本序列(引用自链接的原始论文)。
  • 谷歌的 BERT 自 2018 年末发布以来,或多或少都是一个启示。它集合了其他 NLP 方法的所有优秀组件,是预先训练的,非定向的,并且基于并行变压器架构。
  • 斯坦福的 Stanza 库有几个可以在 NLP 管道中使用的工具,并且支持 70 多种语言。

支持区域

佩里·格罗内在 Unsplash 上的照片

虽然以下支持活动在理论上不属于数据科学的一部分(因为它们中的每一个本身都是一个独立的研究领域和领域),但它们通常通过使我们的工作更加高效和有效来补充机器学习任务。

数据工程

尽管数据工程是一个相当广泛的领域,但为了简洁起见,我将简要地回顾一下数据收集、摄取和清理等概念。所有这些任务构成了任何机器学习管道的基石——没有干净的数据,没有以我们的 ML 算法可以使用的方式转换的数据,就没有机器学习。

数据工程的主要目标是收集数据,并以机器学习算法可读和可用的方式转换数据。

搜索引擎是 NoSQL 的数据库管理系统,方便搜索数据内容。一些常用的搜索和分析引擎包括:

  • Elasticsearch 是一个可伸缩的、开源的面向文档的数据库,可以存储、管理和检索文档和半结构化数据。Elasticsearch 用 Java 编写,基于 Apache Lucene,可以执行全文搜索
  • Splunk 是一款旨在处理大数据分析的商业应用程序,可以作为搜索引擎来提取存储在其数据库中的数据
  • Solr 类似于 Elasticsearch(一个用 Java 编写并基于 Apache Lucene 的开源面向文档的数据存储),它面向静态数据搜索,而 Elasticsearch 具有更多的分析能力。

数据/网页抓取是通过 Scrapy、美汤、硒等工具从网站收集或提取数据的过程。

数据摄取是在执行高级数据分析或将其用于机器学习目的之前,从各种来源(可能通过搜索引擎或网络抓取)收集数据到一个中心点(例如,数据湖或数据仓库)的过程。

数据清理或者说清理形成了机器学习管道的一个关键组成部分(还记得 GIGO 吗?).它包括删除重复、错误或不相关的条目,统一标签,将它们转换为适当的格式,处理缺失数据(完全排除它们或通过其他方式输入它们),以及其他类似的过程,以使原始数据可用于我们的 ML 算法。

数据存储

顾名思义,数据存储就是以可重用和易于访问的形式存储数据的过程。一些传统和非传统的数据存储方法包括:

  • SQL 数据库,例如 SQLite、PostgreSQL 和 MySQL
  • NoSQL 数据库,如 MongoDB、Apache Cassandra、Redis、Apache Hbase、Couchbase(均为开源)
  • 云数据库,例如亚马逊关系数据库、微软 Azure SQL 数据库、甲骨文云、谷歌云 SQL、IBM DB2、亚马逊 DynamoDB (NoSQL 数据库)

大数据

并非所有数据科学项目都涉及大数据,但如果您的项目涉及大数据,以下是一些相关的框架和解决方案。以下大部分是分布式处理框架,它们本身能够以并行方式存储、处理和处理大量结构化和非结构化数据。

Hadoop 是一套开源程序、工具和程序(即完整的大数据框架或生态系统),作为大数据运营的主干。由 Apache 开发,是一个开源框架;然而,各种第三方供应商专门针对您的特定组织要求进行 Hadoop 部署。

Hadoop 的一些最常见的模块是:

  • Hadoop 分布式文件系统(HDFS)是 Hadoop 生态系统的支柱,使得高效存储大量数据成为可能
  • MapReduce 是 Hadoop 的核心处理组件,允许对分组数据进行数学运算
  • Hadoop Common 或 Core 是一组通用实用程序和库,支持 Hadoop 生态系统中其他模块的高效工作
  • 另一个资源协商器(YARN)管理用于处理和分配的系统资源,以及处理活动的调度
  • Apache Pig 是一种高级过程化数据流语言(具有类似 SQL 的命令结构),用于 Hadoop 中的 ETL、数据处理和分析
  • Apache Hive 是 Hadoop 的数据仓库,它使用自己的类似 SQL 的语言 HiveQL 来管理和分析大型数据集
  • Apache Mahout 允许在 Hadoop 中开发机器学习应用程序
  • Apache h base——运行在 HDFS 之上的 Hadoop 的 NoSQL 数据库
  • Apache Zookeeper 用于高效管理和协调任何包含各种 Hadoop 组件或服务的 Hadoop 作业

Spark 是 Apache 开源开发的另一个大数据生态系统。您可能想知道,既然已经有了 Hadoop 形式的大数据框架,Apache 为什么还要开发 Spark。Spark 通常在 Hadoop 的 HDFS 之上实现,以克服 MapReduce 的一些处理缺点,从而将处理速度提高数倍(特别是对于大量的实时数据流)。

虽然 Spark 作为一个集群计算框架,可以在独立的基础上实现。然而,它主要用在 Hadoop 生态系统中,以便两全其美。

数据可视化

数据可视化是数据的图形化表示,有助于更好地理解我们的数据及其各种错综复杂的关系、术语、问题等。

数据科学家可用的一些主要数据可视化工具和解决方案包括:

  • 优秀的旧 Microsoft Excel 仍然可以用于初步的数据可视化任务,这些任务不需要过多的数据
  • Tableau 是一个商业数据可视化工具,具有交互式可视化和连接到大多数典型数据源的能力
  • Python 有自己的内置和开源数据可视化包,包括 Matplotlib(用于快速和基本可视化的默认转到选项)、Plotly(用于更精细和交互式的绘图)、Seaborn(面向详细的统计可视化)
  • 与 Python 类似,R 有自己的可视化包,包括 ggplot2、Lattice、Plotly 和 Rshiny 等。Rshiny 还允许开发可以部署在公共 URL 上的交互式 web 应用程序和数据可视化
  • 基于 JavaScript 的数据可视化库包括 Chart.js、Timeline.js、Highcharts 和 D3.js 等

结论

至此,我们结束了数据科学的旋风和高级之旅。这是一个极其广泛、多样化和快速发展的领域——以上并不意味着是其所有方面的全面列表。相反,这只是任何初露头角的数据科学家的初级读本。希望它可以作为其他人寻找一些主要组件的高层次解释的参考指南。

我希望在未来写更多关于机器学习方面的文章——请看这个空间。

与此同时,如果你想讨论任何与数据科学相关的问题,特别是机器学习,请随时联系 me

参考

数据科学思维导图

[1]张,t .,拉马克里希南,r .,,利夫尼,M. (1996 年 6 月).BIRCH:一种用于超大型数据库的高效数据聚类方法。 ACM SIGMOD 记录,25 (2),第 103–114 页。

数据科学—我从哪里开始?

原文:https://towardsdatascience.com/data-science-where-do-i-start-76693f6ae597?source=collection_archive---------54-----------------------

面向非程序员的数据科学实用入门工具包

作者图片

所以我遇到了很多不同背景的人(电子、机械、本科生(一/二年级)、销售、金融等)。想要探索数据科学领域的人,他们的一些问题是这样的,甚至当我开始时我也在想。—

  • 我能进入数据科学领域吗?
  • 不编码可以吗?
  • 从哪里获取数据?
  • 或者更重要的是,我能解决的问题在哪里?

嗯,第一个问题的答案是肯定的。任何人都可以进入这个领域。这都是关于持续的学习和应用逻辑。

对于其他问题,请继续阅读—

  • 你肯定需要编码技能。ML 编码水平并没有你成为一名软件工程师所需要的那么高(至少在刚开始的时候)。编码仍然是 ML 不可或缺的一部分,因为无论你一开始使用多少工具,像 Weka 或 Alteryx(它有拖放式 ML),最终从长远来看你需要 R 或 Python。而且 SQL 很重要,千万不要小看它!
  • 有各种各样的学习网站提供关于这些语言/概念的免费课程,比如— UdemyUdacityDataCamp Team 等。这些网站有 Python 的初级、中级、高级课程和数据科学所需的 R 的不同赛道,非常有用。如果你付钱,你甚至可以得到一个证书,你可以把它发布在 Linkedin 上。也有许多 Youtube 频道致力于面向初学者的数据科学课程并且很有帮助。
  • 因此,上述课程/渠道的最佳之处在于,它们大多提供了你可以一起探索的数据集。除此之外,现在有很多开放的数据源,你可以从那里下载数据并开始工作。有网站提供了开放数据源的列表,你可以从中选择:【Freecodecamp】【福布斯】学习中心 等。****
  • 世界上发生的下一件好事是卡格尔 !对于任何不知道的人(甚至两年前我也不知道,直到我最喜欢的一位教授给了我们一个关于这个的项目), Kaggle 是一个由数据科学家和机器学习实践者组成的在线社区,在那里真正的组织发布他们的问题陈述、数据集和他们想要的东西等。你所需要做的就是创建一个账户(免费的!!)并开始工作。在数据科学领域强烈推荐。**任何人都可以参与、下载、分享分析和代码,基本上任何你想在机器学习、深度学习或任何相关领域开始的事情。**

来源:Kaggle.com

  • 除此之外,还有几个由学习网站提供的训练营和专门课程,提供概念、数据和问题。有时,它们有助于获得可见性。
  • 在你使用开放数据集、笔记本等练习了这个过程之后。在接触来自你领域的真实数据时,你会更有信心。对你来说,一个优势是除了 ML 之外,你还会有领域知识,这是解决问题的基础。
  • 以上几点都是关于过程的。理解 ML 概念,以及该领域的新趋势,数据操作的技巧等。其中一些网站很有帮助: KDNuggets走向数据科学机器学习大师Analytics Vidhya数据科学中心等。

好吧,我想我们已经走到尽头了。你知道从哪里学习概念,从哪里练习编码,从哪里获得数据集和问题陈述,甚至代码!你还在等什么?去开始吧!😄

如果有其他同样可以增值的东西,留下回应!😃

还有,如果你想在一个地方了解 ML 的所有步骤,可以去翻翻我之前的故事非数据科学家的数据科学(上)

数据科学:哪些公共卫生因素对预期寿命影响最大

原文:https://towardsdatascience.com/data-science-which-public-health-factors-have-the-greatest-impact-on-life-expectancy-52d024ee3d27?source=collection_archive---------27-----------------------

影响全球预期寿命的公共卫生因素多元线性回归分析

来源: [Roser M.](http://Max Roser, Esteban Ortiz-Ospina and Hannah Ritchie (2020) - "Life Expectancy". Published online at OurWorldInData.org. Retrieved from: 'https://ourworldindata.org/life-expectancy') Via: 数据中的我们的世界

背景:

预期寿命是评估人口健康的基本指标。它告诉我们人口的平均死亡年龄。据估计,在前现代和贫穷的世界里,世界各地的预期寿命是 30 岁。自 1900 年以来,全球平均预期寿命增加了一倍多,现已超过 70 岁。各国之间预期寿命的不平等仍然很大。最近,预期寿命最低的国家是中非共和国,为 53 岁,而日本的预期寿命高出 30 岁。

目的:

这个项目的目的是为了更好地理解各种公共健康因素和全球预期寿命之间的关系。各国如何更好地分配其有限的资源,以提高其人口的总体预期寿命?为了回答这个问题,建立了多元线性回归模型,然后进行评估以确定最佳拟合。 Github 链接

数据源:

世界卫生组织(世卫组织)下属的全球卫生观察站(GHO)数据库跟踪所有国家的健康状况以及许多其他相关因素。最终数据集包含 2939 个观察值,其中每行代表特定年份的一个国家。共有 193 个国家有 2000 年至 2015 年的数据。这些特征包括免疫因素、死亡率因素、经济因素、社会因素和其他健康相关因素。

功能列表:

*营养不良流行率范围是以年龄为单位

最初对于基线模型,文献综述和领域知识被用来选择哪些预测因子对预期寿命有最大的影响。此外,还创造了 4 个可能影响预期寿命和更好地解释数据的特征。

这些工程特性包括:

  1. 人口规模——建立了一个人口范围,包括三个类别;小号、中号和大号。
  2. 生活方式——一个将酒精消费和身体质量指数考虑在内的交互变量。
  3. 经济——人口和国内生产总值(GDP)之间的交互变量。
  4. 死亡比率——成人和婴儿死亡率之间的比率。

数据争论:

使用了各种 Python 库,如 Pandas 来清理和探索数据。还使用了 NumpyScipySklearn 进行数据分析、描述性统计和建模。

首先,从数据集中移除所有碎片化的观察值。为了查看数据是否符合线性模型假设,为每个带有目标变量的预测值生成散点图并进行评估。必要时,为了满足模型假设,对某些特征进行了转换,以实现更加线性的关系正态分布

数据转换成更正态分布

接下来,通过创建相关热图,在选定的预测值之间评估多重共线性模型假设。多重共线性阈值被指定为 0.8,阈值以上的变量被剔除。

评估线性回归中多重共线性假设的相关热图

之后,通过查看盒须图和散点图来评估所有可能的异常情况。扭曲数据的极端观察被删除。

移除异常值后预测变量的散点图

结果:

第一个预测预期寿命的模型使用了这些特征;身体质量指数,艾滋病毒,1-19 岁,国内生产总值,死亡率,生活方式,教育,婴儿死亡率,经济和人口规模。R 的平方等于 0.804。换句话说,最初的模型解释了预期寿命 80%的变化(与平均线相比)。

基线模型的结果

建立了另一个模型,其中数据经过缩放,并移除了基线模型中不重要的预测值(p 值> .05)。由于各种要素具有不同的测量单位,并且数据已经过转换以满足模型假设,因此缩放数据可使结果更具可比性和可解释性。

为了测试另一个线性回归模型假设的模型,评估了同方差残差分布。残差虽然分散,但确实表明了较小的正线性关系。这种异方差性很可能是由于预测变量分布有偏差,或者可能存在数据集没有信息的缺失要素。

估计残差同方差线性回归模型假设

使用 80%的数据训练模型,剩余 20%用于模型预测的训练测试分割测试也被用于评估模型。该模型的平均绝对误差为 3.02。进行了另一次列车测试分割,其中包括所有特征,甚至包括那些被认为不重要的特征,平均绝对误差略微提高到 2.99。

结论:

对于希望提高全球预期寿命的国家,一个建议是将资源主要集中在提高对艾滋病认识和预防的项目和政策上。有趣的是,尽管艾滋病毒的研究和维护有所增加,但它仍然是发展中国家的一个主要负担。

此外,另一项建议是各国制定更多政策,分配更多资源,增加受教育机会。结果提出了另一个问题:是某些国家没有优先考虑教育,还是它们没有足够的资源来提供更多的教育?这些国家是否过于注重生存,以至于更多的教育是次要的?

下一步可能是将“发展中”和“发达”国家分开,因为影响每一类国家的公共卫生因素可能非常不同。发展中国家仍然缺乏基本资源,而发达国家可能有完全不同的问题,如心血管疾病和癌症(更多数据!).

这里有一个到 Github 库的链接,其中包括代码,并进一步解释了我为这个项目采取的步骤。如果你有任何问题,欢迎留言或在 LinkedIn 上联系我!

在家工作时的数据科学

原文:https://towardsdatascience.com/data-science-while-working-from-home-b14950a69c0c?source=collection_archive---------29-----------------------

在家工作时如何跟上数据科学?你的导师比以往任何时候都更忙——但是不要担心,你并不孤单!

西蒙·米加吉在 Unsplash 上的照片

我们生活在一个奇怪的时代!疫情冠状病毒对“办公室工作”的影响超出了任何人的预期。虽然我更喜欢在家工作,但这并不适合所有人。由于缺乏指导,经验较少的数据科学家正经历艰难时期。许多 IT 从业人员都是内向的人,这使得这一点更加明显。

在这篇文章中,我分享了一些资源,您可以自由地使用它们来提问,跟上数据科学的新工具,并加入志同道合者的社区。

这里有几个你可能会感兴趣的链接:

- [Labeling and Data Engineering for Conversational AI and Analytics](https://www.humanfirst.ai/)- [Data Science for Business Leaders](https://imp.i115008.net/c/2402645/880006/11298) [Course]- [Intro to Machine Learning with PyTorch](https://imp.i115008.net/c/2402645/788201/11298) [Course]- [Become a Growth Product Manager](https://imp.i115008.net/c/2402645/803127/11298) [Course]- [Deep Learning (Adaptive Computation and ML series)](https://amzn.to/3ncTG7D) [Ebook]- [Free skill tests for Data Scientists & Machine Learning Engineers](https://aigents.co/skills)

上面的一些链接是附属链接,如果你通过它们进行购买,我会赚取佣金。请记住,我链接课程是因为它们的质量,而不是因为我从你的购买中获得的佣金。

不和谐社区

约翰·施诺布里奇在 Unsplash 上拍摄的照片

Discord 是通过语音、视频和文本进行交流的最简单的方式,无论你是学校俱乐部、夜间游戏小组、全球艺术社区的一员,还是只是想出去玩的几个朋友。

有许多数据科学不和谐服务器,所以我在这里列出了最受欢迎的:

  • 数据共享是面向数据科学的官方不和谐社区。你可以在你当前的项目中得到帮助,或者在其他人的学习道路上帮助他们。
  • 数据科学是一个由来自不同行业和学术界的数据科学家组成的活跃、有凝聚力的团体,目的是让每个人分享他们的领域专业知识、讨论问题、探索该职业的许多不同学科,并在此过程中建立友谊。

Reddit 社区

Kon Karampelas 在 Unsplash 上拍摄的照片

Reddit 不需要特别介绍,所以我只列出了数据科学中最受欢迎的三个子主题:

Quora 社区

Quora 标志

Quora 是一个获取和分享知识的地方。这是一个提问的平台,可以联系那些提供独特见解和高质量答案的人。

Quora 越来越受欢迎,因此网站上有越来越多的数据科学专家。有两个有趣的话题可以关注或提出问题:

五三八

五个三十八个标志

FiveThirtyEight 是一个 Nate Silver 的博客,使用硬数据进行统计分析,讲述关于政治、体育、科学、经济和文化的引人入胜的故事。

我养成了每天阅读几篇文章而不是阅读新闻网站的习惯。有几次,我从这篇文章中得到了一个适用的想法,帮助我进行分析。

r 博客

R-bloggers 徽标

R-bloggers —如果你使用 R 作为数据科学的主要语言,你应该关注这个博客。它有 R 新闻和由数百个 R 博客贡献的教程。我不使用 R,但我不管不顾地阅读博客,只是为了看看 R 生态系统中正在发生什么。

机器学习掌握

机器学习大师徽标

机器学习大师——MLM 是一个博客,它的主要目的是出售杰森·布朗利的电子书。我是这个博客的忠实读者已经有一段时间了,Jason 在用简单的术语介绍复杂的话题方面做得很好。有几次,我只是让初级数据科学家去 MLM 更新他们关于某个主题的知识。

简单统计

简单统计标志

Simply Statistics 是由三位来自常春藤大学的生物统计学教授撰写的博客。该博客有关于各种主题的高质量帖子,这些帖子都有数字支持。我只阅读(一个更好的词是“学习”)那些最适用于我的工作领域的。

课程

了解如何训练一个机器学习模型,并将其部署到云上(声明:我是该课程的作者)。

[## 你在云中的第一个机器学习模型

一步一步的指导,将告诉你如何训练一个机器学习模型,建立一个网络应用程序,并部署到…

medium.com](https://medium.com/@romanorac/hands-on-data-science-course-e764853f516b)

在你走之前

推特上关注我,在那里我定期发关于数据科学和机器学习的推特。

照片由Courtney hedgeUnsplash 上拍摄

Julia 的数据科学:线性代数

原文:https://towardsdatascience.com/data-science-with-julia-linear-algebra-ee612c20e84c?source=collection_archive---------11-----------------------

Julia 中的线性代数—提示:它甚至比 Numpy 更简单

说到数据科学,没有那么多编程语言可以选择。你可以用 Python 或者 R,或者最近用 Julia。如果你不知道 Julia 是什么,请参考我以前的一篇文章:

[## Julia 简介:数据科学中 Python 和 R 的替代方案

迎接面向科学计算、数据科学和机器学习的 21 世纪编程语言。

towardsdatascience.com](/introducing-julia-an-alternative-to-python-and-r-for-data-science-dcbf98346253)

如果你不想读完整本书(这也很酷),这里有一句总结:

Julia 是一种编程语言,写起来像 Python,但运行起来像 c。

由于这些原因,我想给你,我的读者朋友,一本使用 Julia 编程语言的线性代数入门书。现在,这不是线性代数的完整课程,因为不可能在 5 分钟内教完(如果你不是你知道谁),但是这篇文章将涵盖如何处理线性代数数据结构——向量和矩阵——以及如何用它们做很酷的事情。

所以,是的,这篇文章假设你至少知道一些关于这个主题的东西,并且熟悉线性代数运算,比如说 Numpy ,但是渴望看到 Julia 提供的东西。

事不宜迟,我们开始吧!我假设你已经在 Jupyter 这样的环境中安装并运行了 Julia(如果你不参考上面的文章)。您只需要导入一个库,并且您可能会猜到是哪个库:

声明向量和矩阵

如果我们不知道如何声明基本向量和矩阵,谈论特征分解和欧几里德范数是没有意义的。不过这很简单,我要说比用 Python 要简单一点(不确定 R)。

单行矩阵

要创建一个行向量,您需要用方括号将元素括起来,并且不要在元素之间放置逗号(如果放置逗号,您将得不到向量):

列向量

以类似的方式,要生成列向量,您还需要在末尾加上一个单引号,其他事情都与行向量相同:

[数]矩阵

创建矩阵的语法非常相似——您将逐行声明它,将分号(;)来指示元素应该在新的一行上:

零点矩阵

创建一个由零组成的 n*m 矩阵的语法与 Python 中的非常相似,只是没有 Numpy 前缀:

一的矩阵

这同样适用于一的 n*m 矩阵:

对角矩阵

如果你想做一个对角线矩阵,也就是不在对角线上的元素为 0 的矩阵,你可以通过Diagonal()和传入对角线上元素值的数组来实现:

单位矩阵

以类似的方式,您可以创建一个 n*n 单位矩阵:

随机数矩阵

要创建一个包含均匀分布元素的 n*m 矩阵,可以使用rand()方法:

随机数矩阵(正态)

或者使用randn()从标准正态分布(mean = 0,var = 1)中抽取元素:

现在,我们已经做了很多,但仍然没有涉及任何线性代数运算,这将在下一节中介绍。

线性代数运算

在这一节中,我们将讨论矩阵乘法、逆矩阵、行列式、特征分解等等。我们开始吧!

移项

要计算矩阵转置,您可以使用方便的transpose()函数:

重塑

一个数组也可以被重新整形——这里我创建了一个包含 1 到 10 元素的数组,并将它们重新整形为一个 2 行 5 列的矩阵:

变平

您可以轻松地将 n*m 矩阵展平为一个列向量——这在以后涉及数据科学时会有很多用例:

点积

我相信你能猜到一种计算点积的方法的名字:

矩阵乘法

要执行矩阵乘法,您可以使用乘法符号,而在 Python 中,您使用了 @ 符号:

逐元素乘法

要逐元素相乘,使用。*** 符号:**

矩阵求逆

要计算矩阵的逆矩阵,使用inv()方法:

决定因素

det()法计算行列式:

特征分解

您也可以执行矩阵的特征分解。它会返回特征值和特征向量,所以如果你想存储它们,你需要两个变量:

向量范数

最后,要计算简单的欧几里德范数,您可以使用norm()方法:

我认为这就足够了,甚至可能有点多。我希望这对你来说不是一个大问题。对我来说,在 Julia 中线性代数感觉很自然,甚至比在 Python 中更自然。让我们希望这种说法在未来处理真实数据集时仍然成立。

下一步是什么

在进入一些“具体的”数据科学之前,具体的意思是 EDA、数据可视化和机器学习,我想确保基础知识得到适当的覆盖。主要原因是——你需要知道你正在使用的语言。在网上寻找答案很酷,但不酷的是不断怀疑自己,因为你不确定自己是否做对了。

这就是为什么您可以期待另外三篇与本文类似的文章,涵盖:

  • 结石
  • 统计/概率
  • 基本数据框架

只有这样,我们才能向应用数据科学迈进一步。感谢阅读,我希望你喜欢它。

喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。

** [## 通过我的推荐链接加入 Medium-Dario rade ci

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

medium.com](https://medium.com/@radecicdario/membership)**

Python 数据科学:入门

原文:https://towardsdatascience.com/data-science-with-python-getting-started-4d48e28ca696?source=collection_archive---------28-----------------------

启动和运行的基本要素+有用的资源

M. B. M.Unsplash 上拍摄的照片

数据科学已经成为一项革命性的技术,似乎每个人都在谈论它。被誉为“21 世纪最性感的工作”的数据科学是一个时髦词,很少有人真正了解这项技术。虽然许多人希望成为数据科学家,但看到真实情况是必不可少的。

“数据科学是一个跨学科领域,它使用科学方法、流程、算法和系统从许多结构化和非结构化数据中提取知识和见解。”——维基百科

简而言之,数据科学是一个专注于从数据中获取洞察力的研究和实践领域。

数据科学家使用数学、统计学和机器学习技术来挖掘大型数据集,以获得可用于分析过去甚至预测未来的模式。

如果你是所有这些深度学习的新手,不要担心——我会一步一步带你经历这一切。如果你是一个老手,那么你可能想跳过一些文章。然而,我确实假设你已经编码至少一年了,并且(如果你以前没有使用过 Python)你将投入额外的时间去学习你所需要的任何 Python。

如果你有一台电脑,一个互联网连接,并愿意投入工作,这就是你所需要的一切。你不需要很多数据,不需要大学水平的数学,也不需要一个巨大的数据中心。

你会惊讶于入门是多么容易!

需要 GPU 吗?

我写了一篇关于什么是 GPU 以及深度学习需要 GPU 吗的帖子——值得一读

GPU(图形处理单元)是专门为以高帧速率渲染图像而创建的计算机硬件。由于图形纹理和着色需要并行执行的矩阵和向量操作比 CPU(中央处理器)能够合理处理的要多,因此 GPU 可以更有效地执行这些计算。

碰巧深度学习也需要超快的矩阵计算。因此,研究人员将两者结合起来,开始在 GPU 的中训练模型,剩下的就是历史了。深度学习只关心每秒浮点运算(FLOPs)的次数,GPU 为此进行了高度优化。

来源:卡尔鲁普

在上面的图表中,您可以看到 GPU(红色/绿色)理论上可以完成 CPU(蓝色)的 10-15 倍操作。这种加速在实践中也非常适用。

如果你想在深度学习中训练任何有意义的东西,GPU 是你需要的——特别是 NVIDIA GPU(这是目前最快的一种)。

但是,尽管 GPU 看起来非常有利可图,当你开始使用它时,你并不需要它。除非你的项目是如此先进,需要一个的计算,你的 CPU 可以处理得很好。然而,如果你确实想要一个 GPU(如果你的电脑没有内置 GPU),我会建议你租用一台已经预装了你需要的所有东西的电脑。在你使用它的时候,费用可以低至每小时 0.25 美元。

[## 什么是 GPU,深度学习需要 GPU 吗?

在深度学习中,大家似乎都推荐用 GPU。它是什么,没有它你能做什么,它到底是谁…

towardsdatascience.com](/what-is-a-gpu-and-do-you-need-one-in-deep-learning-718b9597aa0d)

代码编辑器和环境

Visual Studio 代码是我的首选代码编辑器

在数据科学中,一般的建议(尤其是如果你是初学者)是使用某种初学者友好的环境,如 JupyterAnaconda ,但是我使用 VS Code 来支持我的数据科学项目。

这里有一篇文章是关于Jupyter 笔记本的入门文章

Python 的先验知识

资料来源:python.org

这个关于数据科学的迷你系列确实假设你已经编码至少一年了。哪种语言并不重要——只要你有良好的编程经验,你应该没问题。如果您对 Python 一点都不熟悉,不要担心!我会一路链接有用的资源。

如果你没有任何代码经验,我建议你学习 Python。它(真的非常)简单,是我们将在这个数据科学迷你系列中使用的编程语言。

有用的资源

Ed RobertsonUnsplash 上拍摄的照片

快速获取(或更新)Python 知识的资源

完全初学者:

  1. 巨蟒旋风之旅
  2. 真正的蟒蛇
  3. 艰难地学 Python

中级程序员:

  1. Python 的搭便车指南
  2. 德里克·巴纳斯——视频中的 Python
  3. 计算机程序设计

高级程序员(但可能是 Python 新手):

  1. 在 y 分钟内学会 x
  2. 大卫·比兹利的课程、教程和书籍
  3. 雷蒙·赫廷格

Python 数值编程:

无论你是初学者还是高级程序员,这都值得一读。在本系列中,我们将使用大量的数值编程。

  1. 斯坦福 NumPy 教程
  2. 科学的课堂笔记
  3. Python 数据科学手册

这个数据科学小编的介绍到此结束!在下一篇文章中,我们将讨论图像分类

[## 数据科学中的图像分类

什么是数据科学中的图像分类和用 Python 构建我们自己的图像分类器

towardsdatascience.com](/image-classification-in-data-science-422855878d2a)

一如既往,非常感谢您的阅读!请告诉我你的想法或者希望我接下来在评论中写些什么。我也乐于接受批评!

下期帖子再见!😄

[## 我希望在开始从事数据科学时就知道的资源

面向严肃数据科学家的强大学习指南

towardsdatascience.com](/resources-i-wish-i-knew-when-i-started-out-with-data-science-9a8889654c36)

Python 数据科学:如何使用 NumPy 库

原文:https://towardsdatascience.com/data-science-with-python-how-to-use-numpy-library-5885aa83be6b?source=collection_archive---------26-----------------------

NumPy 动手体验。劳伦茨·海曼在 Unsplash 上拍摄的照片

数据科学和机器学习

将这一实践经验加入书签,以了解数据科学和机器学习领域的 NumPy

NumPy (Numerical Python) is a linear algebra library for Python.Almost all of the other libraries in the Python data ecosystem rely on NumPy as one of their main building blocks.This is the reason it is so important for data science. Additionaly, NumPy is incredibly fast and has bindings to C libraries.

要准备好在 Python 发行版中使用 Numpy,请在终端或命令提示符下键入以下命令:

pip install numpy

先决条件

如果你不熟悉 Python,下面的文章会给你一点点 Python 的介绍。

[## Python:过程化编程还是面向对象编程?

过程化和面向对象之间有点争议,我们为什么要关心它?

towardsdatascience.com](/python-procedural-or-object-oriented-programming-42c66a008676)

—阵列

Numpy 数组本质上有两种风格,一维向量或二维矩阵。它们都可以称为数组。向量是严格的一维数组,矩阵是二维数组。另外,请注意,矩阵仍然只能有一行或一列。

np.array 方法

我们可能会看到 list 可以作为数组使用。此外,我们可以将数组赋给变量。

—阿兰格

这和 Python 内置的 range 函数真的很像。它用语法 np.arrange 表示,然后传入一个开始和停止值。请注意,我们在第三个参数中有一个开始、停止和步长。它将返回给定间隔内均匀分布的值。如果我们只是把它从 0 到 10,记住就像在 Python 中,范围索引从 0 开始。它将返回一个从 0 到 10 的值,但不包括 10。结果,我们将得到一个从 0 一直到 9 的数组,它是一个 10 位数。如果我们想得到从 0 一直到 10 的值,我们必须键入 np.arange(0,11)

np.arange 方法

最后,我们可以添加第三个参数,即步长。例如,我们需要一个从 0 到 10 的偶数数组。我们可以插入一个参数 0,11 。跟随步长 2。所以,它会跳两步。总而言之,范围将是使用 NumPy 快速生成数组的最有用的函数之一。

—零和一

NumPy 可以生成另一种类型的数组。例如,如果我们想要生成全 0 的数组,我们可以使用方法。我们可以传入一位数或元组。对于单个数字,它将给出一个维度向量的结果。另一方面,在 tuple 中,第一个数字表示行数,第二个数字表示列数。例如,要生成 3 行 4 列,我们可以传入元组 (3,4)

np.zeros 方法

此外,为了生成纯函数,我们可以调用方法的函数。类似地,我们可以为一维数组传入一个数字,或者为二维矩阵传入一个多维数组。

np.ones 方法

— linspace

另一个真正有用的内置函数是 linspace 。该函数将返回指定间隔内的均匀分布的数字。重要的是不要混淆我们之前讨论过的 linspacearrange。我们可以看到, arange 基本上从开始、停止和给定的步长返回整数 out,而 linspace 将把数字的第三个参数作为我们想要的点。

例如,我们在 linspace 中有一个起点 0 和一个终点 5,我们希望得到 0 到 5 之间的 10 个均匀间隔的点。我们可以传入第三个参数 10。该命令将返回一个一维向量,由一组括号表示,括号中有从 0 到 5 的 10 个均匀分布的点。

此外,我们可以将第三个参数更改为任意数字。例如,如果我们想要从 0 到 5 的 100 个均匀间隔的点,我们可以在第三个参数中传递这个数字。这将返回一个更大的一维数组。尽管它看起来像一个二维数组,但由于数组前面只有一个括号,所以它是一维的。

np.linspace 方法

请注意,当我们处理二维空间的时候,我们会看到在两端有两组括号。三维会有三个括号等等。

—眼睛

我们可以使用 eye 用 NumPy 创建一个单位矩阵。我们只需要在参数中传递一个数字。当处理线性代数问题时,单位矩阵是一个有用的矩阵。它基本上是一个二维正方形矩阵,其中行数与列数相同。它的对角线是 1,其他都是 0。这就是它只接受一位数作为参数的原因。单位矩阵必须是正方形作为 np.eye 的输出。

np.eye 方法

— random.rand

NumPy 也有很多方法来创建一个随机数数组。第一个是 random.rand 。这个命令将从给定的形状创建一个数组。它将从 0 到 1 的均匀分布中随机抽取样本。如果我们想要 8 个从 0 到 1 均匀分布的一维随机数数组,我们可以在自变量中给出一个数字 8。但是,我们可以将维度作为单独的参数传入,以获得一个二维数组。例如,如果我们想要一个 5x5 的随机数矩阵,我们在参数中传递 5,5 而不是一个元组。

随机随机方法

— random.randn

其次,不使用 rand ,我们可以使用 randn 从标准正态分布或高斯分布返回一个或多个样本。这不会返回从 0 到 1 的均匀分布的数字,但是,它会返回 0 附近的标准正态分布中心的数字。此外,要得到一个二维数组,我们可以传入二维参数。例如,要生成一个 4x4,我们可以传递一个参数 4,4 。请记住,这个参数是而不是元组。这是一个独立的论点,我们可以从两个括号给出的输出中了解到,这是一个二维矩阵。

随机方法

— random.randint

创建数组的最后一个随机方法是 randint 。这将返回从低到高的随机整数。例如,如果我们在参数中插入 1,100 ,我们将得到一个介于 1 和 100 之间的随机整数。低号是包容性的,高号是排他性的。数字 1 有被选中的机会,但 100 没有。此外,如果我们想要特定数量的随机整数,我们可以在第三个参数中传递参数。

np.random.randint 方法

—重塑

我们可以在数组上使用的最有用的方法之一是 reshape 方法。这个方法将返回一个新形状中包含相同数据的数组。例如,如果我们想要重塑一个包含 24 位数的数组。我们可以使用 reshape to 4x6 array 并在参数中传递行数和列数来重塑 24 位数组。请记住,如果我们不能完全填满矩阵,我们将得到一个错误。例如,如果我们要改变 24 个元素的形状,新形状的总数必须与数组中的 24 个元素相同。

整形方法

—最大和最小

如果我们想找到一个数组中的最大值,我们可以调用 max 方法,这将返回该数组的最大值。同样,如果我们想得到数组的最小值,我们可以调用 min 方法。

最大最小法

— argmax 和 argmin

此外,我们实际上可以通过指定 argmaxargmin 方法来计算出最大值或最小值的位置。如果我们想实际知道最大数的索引值是多少,我们可以调用 argmax ,它将返回最大值的索引位置。另一方面,我们可以用最小值做同样的事情。我们可以调用 argmin ,它将返回最小值的索引位置。

argmax 和 argmin 方法

—形状

如果我们想弄清楚向量的形状,我们可以调用方法 shape ,它将返回形状。如果它是一个一维向量,它将给出元素个数的结果,后面跟一个逗号。

形状方法

—数据类型

另一个有用的属性是数组中的数据类型。如果我们对数组中的数据类型感到好奇,我们可以调用 dtype 作为属性,它将返回数组的实际数据类型。

数据类型方法

索引和选择

从 NumPy 数组中获取一个或一些元素的最简单方法是使用括号和切片符号。让我们从声明数组本身的变量名开始;在这种情况下,我们称之为 my_array

索引和选择

要从数组的特定索引返回单个值,可以在方括号内定义一个参数,例如, my_array[8] 从索引 8 中获取值。另一方面,要像 python 列表一样获取一个范围内的值,可以使用切片符号。我们需要定义开始索引和停止索引。

例如, my_array[1:5] ,将返回从索引 1 开始的值,一直到索引 5。记住前面的解释,在范围部分,第二个参数值不包括在索引中,因为索引从 0 开始。为了展示另一个例子,您可以键入 my_array[0:5] ,这将返回从索引 0 到索引 5 的值。

您还可以删除停止点或开始点,以表明您想要数组中的所有内容,即数组开头的所有内容。例如,如果您希望所有内容都从索引 5 开始,而不是将起始参数指定为 0,您可以放置 my_array[:5] ,这将返回从数组开始到索引 5 的所有内容。这和调用语法 my_array[0:5]是一回事。

类似地,如果您想从一个特定的索引开始并获取数组末尾的其余值,您可以使用相同的切片符号,例如, my_array[5:]

广播

Numpy 数组不同于标准的 Python 列表,因为它具有广播的能力。尝试运行这个语法 my_array[0:5] = 100 。该命令将广播到前五个索引,使它们都为 100。另一方面,您可以创建一个新变量,它等于原始数组中的某个片段。

数字广播

如果这对你来说有点困惑,那也没关系。基本前提是,如果您获取数组的一部分并将其设置为一个变量,而没有明确说明您想要数组的副本,那么您应该记住,您查看的是到原始数组的链接。您所做的更改也会影响原始数组。

矩阵索引

现在,我们将讨论索引 2D 数组,也称为矩阵。我们这里有 my_2d_array 变量,我们有 3 行 3 列。它是一个二维矩阵。从 2D 数组或矩阵中获取元素有两种通用格式。有带逗号的双括号格式和单括号格式,这是推荐使用的格式。

二维索引

假设您不想要单个元素,而是数组的实际块。例如,你想从矩阵中得到一些矩阵。您可以使用冒号作为切片标记来获取整个 2D 数组的某些部分。

获取数组块的切片符号

条件选择

我们可以通过比较运算符用条件选择来获取数组的一些值。

条件选择

这个过程将返回一个完整的布尔数组,指示真和假的结果。这意味着如果你将数组与一个数字进行比较,例如, my_array > 5 ,你将得到一个布尔值数组。这些是真或假的值。当比较为假时返回假,如果比较为真则返回真。您可以将比较运算符分配给变量,并将其用作条件选择。

操作

我们将向您展示您可以在 NumPy 数组上执行的基本操作,例如带有数组操作的数组、带有标量操作的数组以及一些通用的数组函数。您可以使用简单的算术符号执行带有数组运算的数组。

例如,如果你想逐个元素地将两个数组相加,你可以说 my_array + my_array 。本质上,每个数字都翻倍了。减法甚至乘法也可以做同样的过程。

还可以用标量运算执行数组。比如 my_array + 100 ,scalar 的意思是单个数字,NumPy 做的就是把那个数字广播给数组中的每一个元素。这也适用于乘法、除法和减法。也可以用指数做数组,比如 my_array ** 2 ,这是 2 的幂的数组。

NumPy 基本操作

**Please Note:**
Numpy will issue a warning instead of outputting errors on certain mathematical operations, however, you still get an output.For example, **my_array / my_array**.
Any array value divided by 0, will returns:[nan  1\.  1\.  1\.  1\.  1\.  1\.  1\.  1\.  1\.  1.]
***RuntimeWarning: invalid value encountered in true_divide***On the other hand, **1 / my_array.** If 1 divided by 0, you will also get a warning:[       inf 1\.         0.5        0.33333333 0.25       0.2
 0.16666667 0.14285714 0.125      0.11111111 0.1       ] ***RuntimeWarning: divide by zero encountered in true_divide***
In this case, it will show infinity instead of nan.

Numpy 附带了许多通用数组函数,这些函数大多只是数学运算。您可以使用它来执行操作,并在整个阵列中传播它。例如,如果你想得到数组中每个元素的平方根,你可以说 np.sqrt ,然后在参数中传递数组。这将使数组中所有元素的平方根。

类似地,您可以说 np.exp 并将数组传入参数以计算指数。甚至可以用三角函数比如 sincos 。这将把每个元素转换成正弦和余弦。

数字数学运算

动手体验到此结束。如果你用你最喜欢的 IDE 或 Jupyter 笔记本来尝试下面的练习,以了解如何使用 NumPy 来获得数据科学和机器学习的最佳运气,那将是最好的。

我们鼓励你从下面的参考链接中了解更多,以获得更多关于 NumPy 的解释。

**References**#1 [NumPy](http://www.numpy.org/)
#2 [Mathematical Function](https://numpy.org/doc/stable/reference/routines.math.html)
#3 [Cheat Sheet: Data Analysis in Python](https://s3.amazonaws.com/assets.datacamp.com/blog_assets/Numpy_Python_Cheat_Sheet.pdf)***Writer Note:*** *I would love to receive critiques, comments, and suggestions.*

广告业内的数据科学

原文:https://towardsdatascience.com/data-science-within-the-advertising-industry-469c4d728635?source=collection_archive---------27-----------------------

数据如何推动 6000 亿美元广告业务的预算分配?

你可能听说过数据如何驱动广告投放在脸书或谷歌的广告业务中,通过数据驱动的广告投放我们指的是广告供应商以更高的价格向可能对广告内容感兴趣的消费者展示广告的能力。但除了大型科技公司复杂的广告投放数据驱动系统之外,广告领域还有一个由数据驱动的更加密集、同样相关的企业群体:广告公司。虽然与大型科技公司的方式和目的不同,但各机构利用数据进行一项非常重要的运营,通常由行业外部监督:预算分配

在高层次上,您可以将广告和营销代理视为负责为客户管理和执行广告活动生命周期的公司。这包括内容创建、营销策略设计、与广告供应商的单点联系、集中账户管理,当然还有数据分析。预计 2020 年广告支出将达到 6150 亿美元,广告公司在像脸书这样的公司如何在广告上建立盈利业务上扮演着关键角色。

图片作者

通过持续评估性能与成本、感觉与年龄和性别接触或转化率与媒体类型的指标,广告公司决定如何动态分配活动资源以满足客户的目标。

知名度业绩是当今市场中品牌的主导最终目标,这些客户目标定义了活动的目标,从而定义了相关分析所需的数据。把广告想象成一个活动的基本单位,一个活动的广告通常在不同的媒体类型上运行,每个广告可能有不同的目标,合在一起,它们构成了活动的全球意图。例如,活动中的广告可能旨在提高知名度,这意味着它旨在让公众了解所提供的产品/服务,因此我们关心其影响印象受众人口统计数据,如年龄和性别。在同一个活动中,可能会有针对性能的广告,这些广告的目的是将受众重新引导到一个他们可以购买所提供的产品或注册所提供的服务的地方。在这种情况下,分析需要跟踪通过点击点击率点击率等指标生成的转化率流量

图片作者

各机构在广泛的媒体类型上开展活动,即数字电影院广播电视新闻户外。机构内的数据科学家设计数据分析解决方案,能够从不断变化的数据中提取并提供有意义的见解。最终,这些见解旨在支持营销活动生命周期中的关键业务决策,并让客户随时了解他们正在开展的营销活动的各种关键统计数据。

我们在电视上花了太多钱,却没有得到预期的结果,限制他们的预算。

这家名为“脸书”的供应商拥有我们 40%以上的数字产品,难道没有其他供应商了吗?这些人的 Instagram 怎么样?

数据分析解决方案将接收、处理和分析数据,最终以可视化的形式在 DOMO、Amazon Quicksight 或 Power BI 等数据可视化工具上以自动化 方式在一段时间内按计划交付见解(根据客户预算而定,更长/更短)。获取解决方案原始数据的渠道以及此类数据的形式因机构开展活动的不同媒体类型而异。

数字

互联网内的任何东西。脸书广告,谷歌广告,Youtube 广告和任何其他门户网站的广告通常由像 Teads 这样的主要供应商提供。由于这些主要是技术公司,他们将公开一个 API 来提取运行活动的非关系数据统计,甚至是一些最流行的编程语言的库。

电影

每部电影开始前的 15 分钟加起来就是客户的最终数字。你可能已经注意到电影院的广告内容有更高的标准。

代理商将拥有电影院广告活动的印象数 ( 印象数=复制品,商业术语),主要是因为这些平面文件表是由客户管理人员填写的。

根据代理商的规模,电影公司可能同意提供其销售数据库的摘录,代理商可以利用这些摘录跨越已知的印象数来了解广告的覆盖范围。对于那些迟到 15 分钟的人,我们有一个漏洞。

电视台

和电影里的差不多。这里,reach 字段肯定需要由供应商部分(电视公司)来填充。电视公司每周 7 天、每天 24 小时收集他们的覆盖数据,所以这很可能是他们交给代理商的数据。

广播、新闻和哦

说到这一点,广告公司需要收集原始数据,如计划预算支出预算展示量达到点击量供应商活动感受受众人口统计数据、转化率等数据分析必须足够复杂,以分析跨不同数据集的通用数据字段的数据。

解决方案

从工程的角度来看,我们希望将所有这些数据按计划以自动化的方式收集到对象存储中,如 AWS S3、微软 Azure Storage Account 或 GCP 云存储。

对于 API,我们可以使用一个脚本,按计划向供应商端点发送请求,并将响应对象推送到我们的云对象存储服务。在我的工作中,我使用无服务器架构,如 AWS Lambda、Azure Functions 或 GCP 云函数。

由于其余的数据是由客户管理和第三方提供给我们的,我们需要一种方法让他们访问我们的对象存储。我们可以让一个 SFTP 服务器连接到我们的存储器,这样服务器每次接收到一个文件,它就把它映射到我们的对象存储器的一个文件夹中的一个对象。

一旦我们将所有这些数据源连接起来,我们就说摄取过程完成了,对象存储将持续接收解决方案需要处理的所有数据。这叫做数据湖

图片作者

剩下的过程只是一堆 ETL 作业和脚本,将所有数据转换成对分析有意义的形状,这包括字段重命名数据类型赋值正则表达式复杂的连接操作文件格式转换为类似于 Parquet/ORC 的分析友好格式。这些操作发生在工具框架内,如 Hadoop、Spark 或云管理解决方案,如 AWS Glue、微软 Azure Data Factory 或 GCP Dataproc。你也可以利用开源库,比如 python 的 pandas 。作业和脚本既可以根据事件触发器运行,也可以按计划运行。

最后,解决方案需要将转换后的数据存储到另一个云对象存储中,或者更好的是,像亚马逊红移、微软 Azure Synapse 或 GCP 大查询这样的云托管数据仓库。

机构将从这些数据中选择数据可视化工具,商业智能部门将处理最终的仪表板/可视化设计,假设解决方案在每次有新的原始数据时都会自动更新最终数据集。帐户管理人员主持与客户的跟进会议,围绕这些可视化仪表板,每天都有数千美元的资金得到动态分配,这在很大程度上依赖于数据分析。

数据科学…没有任何数据?!

原文:https://towardsdatascience.com/data-science-without-any-data-6c1ae9509d92?source=collection_archive---------2-----------------------

为什么尽早聘用数据工程师很重要

“你目前正在应对哪些挑战?”我问。这位前学者说,“看起来我被一家没有数据的公司聘为首席数据科学家了。”**

“人类,碗是空的。”—数据科学家。图片:来源

我不知道该笑还是该哭。你可能认为这是显而易见的,但是没有数据,数据科学就没有任何意义。唉,这不是一个孤立的事件。

没有数据,数据科学就没有任何意义。

所以,让我继续说,这么多雄心勃勃的数据科学家(以及他们未来的雇主)似乎真的需要听到什么。

什么是数据工程?

如果说 数据科学 是**制作数据有用*** 的学科,那么你可以把 数据工程 看成是制作数据有用 的学科。数据工程师是提供幕后基础设施支持的英雄,这些支持使机器日志和庞大的数据存储与数据科学工具包兼容。*

模因:来源

如果说数据科学是**让数据有用*** 的学科,那么数据工程就是**让数据有用的学科。***

与数据科学家不同,数据工程师往往不会花太多时间查看数据。相反,他们关注并使用保存数据的基础设施。数据科学家是数据管理者,而数据工程师是数据管道管理者。

图片:来源

数据科学家是数据管理者,而数据工程师是数据管道管理者。

数据工程师是做什么的?

数据工程工作有三种主要形式:

  1. 大规模启用数据存储()和交付( 数据管道 )。**
  2. 维护推动企业运营的数据流。
  3. 提供数据集支持数据科学。

数据科学受制于数据工程

没有数据就做不了数据科学。如果你被一个既没有数据也没有数据工程的组织聘为数据科学主管,猜猜谁会成为数据工程师…?你!

没错。

数据工程有什么难的?

如果你只是为自己的晚餐做点什么,杂货店购物是很容易的,但是大规模会把琐碎的事情变得非常困难——你如何获得、储存和加工 20 吨冰淇淋……而不让它们融化?

同样,当你为你的学校项目下载一个小的电子表格时,“数据工程”是相当容易的,但是当你处理 Pb 级的数据时却令人眼花缭乱。规模本身就使它成为一门复杂的工程学科。

图片:来源

规模本身就使它成为一门复杂的工程学科。

不幸的是,了解这些学科中的一个并不意味着你了解另一个。

两个学科都要学吗?

如果你刚刚感到想要逃离并学习这两个学科的冲动,你可能是数据专业人员必须了解数据的一切(T22、T23)这一信念的受害者。数据世界正在快速扩张,现在是我们开始认识到这个领域有多大的时候了,在其中的一部分工作并不自动要求我们成为所有领域的专家。我甚至可以说,它太大了,即使是最坚定的天才也无法吞下整个。

在数据世界的一部分工作并不自动要求我们成为所有数据的专家。

不要期望数据人员能够做所有的事情,让我们开始问彼此(和我们自己)," 你是哪一种?让我们拥抱一起工作,而不是试图单干。

但是这难道不是一个难以置信的学习机会吗?

也许吧。这取决于你有多热爱你已经知道的学科。数据工程和数据科学是不同的,所以如果你是一个没有接受过数据工程培训的数据科学家,你将不得不从头开始。

建立您的数据工程团队可能需要数年时间。

这可能正是你想要的那种乐趣——只要你睁大眼睛去看。建立您的数据工程团队可能需要数年时间。当然,有一个学习新东西的借口是很好的,但十有八九,你的数据科学肌肉会因此萎缩。

打个比方,假设你是一名日语和英语都很流利的翻译。你得到了一份名为“翻译”的工作(到目前为止,一切顺利),但当你到达工作岗位时,你发现你被雇佣将普通话翻译成斯瓦希里语,而这两种语言你都不会说。抓住机会成为四国语言者可能会很刺激,也很有收获,但是一定要现实地看待你将如何有效地利用初级培训(以及你的第一次绩效评估可能会有多可怕)。

谁不爱一个好的烂的翻译?图片:来源

换句话说,如果一家公司没有任何数据或数据工程师,那么接受首席数据科学家的角色意味着在你建立数据工程团队的同时,将你的数据科学职业搁置几年,转而从事数据工程职业——你可能不具备这个资格。最终,你会骄傲地注视着你建立的团队,并意识到你自己做细节已经没有意义了。当你的团队对那些酷酷的神经网络或你在博士学位上研究过的花哨的贝叶斯推理已经成熟时,你不得不坐下来看别人得分。

图片:来源

给数据科学领导者和热爱他们的人的建议

提示#1:知道你将要面对的是什么

如果您正在考虑担任数据科学主管,您的第一个问题应该始终是, " 谁负责确保我的团队拥有数据 ?"如果答案是你,那么,至少你会知道你报名参加的是什么。

在接受一份数据科学的工作之前,一定要问一下数据工程的“谁”。

秘诀 2:记住你是顾客

由于数据科学受制于数据,仅仅有数据工程同事可能还不够。如果那些同事没有认识到你是他们工作的重要客户,你可能会面临一场艰难的斗争。如果他们的态度让你想起更多的博物馆馆长,为了保存数据而保存数据,这是一个不好的迹象。

技巧 3:看到更大的(组织)图景

虽然你确实是数据工程的重要客户,但你可能不是唯一的客户。现代企业使用数据来推动运营,其方式往往可以在没有你干预的情况下很好地运转。当你对企业的贡献是一件好事(而不是关系到你公司的生死存亡)时,表现得好像整个世界都围着你和你的团队转是不明智的。健康的平衡是健康的。

秘诀 4:坚持问责制

让自己对数据工程决策有所影响。

在签约你的新工作之前,考虑协商如何让你的数据工程同事对与你的合作负责。如果将你拒之门外没有任何影响,你的组织就不可能兴旺发达。

感谢阅读!喜欢作者?

如果你渴望阅读更多我的作品,这篇文章中的大部分链接会带你去我的其他思考。不能选择?试试这个:

** [## 数据科学家:22 世纪最性感的工作

在求职面试中问这三个问题,以确保你的雇主准备好让数据科学家变得高效

towardsdatascience.com](/the-sexiest-job-of-the-22nd-century-ffe753e1d155)

给大家上一门应用人工智能课程怎么样?

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

在这里欣赏整个课程播放列表:【bit.ly/machinefriend

与凯西·科兹尔科夫联系

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

数据科学写作是不同的

原文:https://towardsdatascience.com/data-science-writing-is-different-5d5455ff786a?source=collection_archive---------34-----------------------

不要接受非 DS 作者的建议

@ chairufajar _Unsplash 上的照片

当你研究如何开始在媒体上写作时,你会感到沮丧吗?你是否发现所有的文章都在告诉你“每天写作”、“每周发表 3 篇博文”或“每天至少写作 2 小时”?

当我第一次决定在媒体上写作时,我读到了同样的建议,并认为我不可能每天都有足够的时间写作。这导致我推迟写作几个月,阻止我开始写作之旅,因为我“从来没有足够的时间”。

如果您正在考虑开始在 Medium 上编写数据科学内容,请不要气馁。您应该意识到的是,数据科学写作的固有性质是不同的,需要打下基础。这不是我们的全职工作,在写出一个句子之前,需要进行数百小时的研究、编码和设计。我花了几个月的时间拖延,然后我最终“偶然发现”了几篇文章,终于弄明白了这一点。

不听从建议

当我终于开始写作时,我忘记了所有的建议,只是在我喜欢和有时间的时候写作。事实上,我的第一篇文章是在一次客户会议上写的,在那次会议上,我受够了被告知“只看数据”,于是我立即挂掉电话,一口气写下了《T4》的全部内容。我并不需要花几天的时间坐下来,在同一时间写同样多的东西——我就是这么想的。

同样的事情发生在我的第二篇文章上;我正在为一个副业项目研究一些技术,偶然发现了这个算法,并决定“我要弄清楚这个东西是做什么的”。我意识到那里没有大量的信息,并看到了为那些可能需要这些信息的人写一些没有很好记录的东西的机会。

我的第三篇文章有点不同——它不是来自内部,而是来自我与朋友和家人的对话。在冠状病毒的最初几个月,我一遍又一遍地听到同一个论点的两个方面:“媒体反应过度”和“我们对此不够认真”。我想“哪一个是真的?”“我能量化媒体反应过度的程度吗?”。我正打算这么做。我收集了数据,做了分析,写了第篇文章——全部在 1-2 周内完成,按照“建议”的标准,这太慢了。

现在这篇文章——一篇我想写很久的文章。如果我遵循了典型的“如何在媒体上成功”文章的建议,这篇文章可能会在几周前就写好了。但说实话,我就是没时间。直到今天,当我读到另一篇文章时,我觉得我需要从写数据科学内容的人的角度说点什么。我打开一个新的草稿,坐在手机上写了这篇文章。

为什么为数据科学写作是不同的

我拼凑的最初几件作品并不是来自每天早上 6 点坐下来连续写两个小时的例行公事。当我在做项目和继续我的学习旅程时,他们来找我。随着我继续写作,我开始意识到为数据科学写作在两个方面是不同的:

  1. 不是每个人都有时间或精力每天坐下来写作。如果写作是你的主要收入来源,那么是的,你应该这么做。但对其他人(尤其是数据科学家)来说,这只是一种旁门左道,一个作品集的建立者,或者一个创造性的出口——我们不应该觉得有义务或者有压力每天都写东西。
  2. 最重要的是,重要的是要认识到数据科学写作与生俱来的不同。我们不是那些每天坐下来谈论我们的感受或者这周我们在做什么或者如何更好地提高自己的生活方式博客。我们的写作是技术性的——写一篇 5-10 分钟的文章需要数天或数周的研究或分析(或两者兼而有之)。不要给自己压力,让自己每天甚至每周都发表文章。慢慢开始没关系。关注重要的事情——你正在构建的项目或你正在学习的概念。写作只是你展示发现的最后一部分。这是一个重要的部分,但其他部分也需要时间。

开始吧,不要气馁

我希望这篇文章没有写得太糟糕。相反,我希望它能激励你不要被外面所有的“建议”搞得灰心丧气,告诉你要做得更多。大多数作者不需要坐下来研究算法的目标函数或者用 Jupyter 写 1000 行代码。当你想开始时就开始,坚持到底,不要听噪音——写作和连贯性最终会随之而来。

感谢阅读!如果你想更新我正在写的东西、我正在构建的项目或我觉得有趣的文章,请随时加入我的时事通讯—

数据科学家——一个值得追求的职业?

原文:https://towardsdatascience.com/data-scientist-a-career-worth-pursuing-44fd92a3eae1?source=collection_archive---------14-----------------------

让我们透过美化的噪音找出真相。

图片来源: Unsplash

绝对是!如果说有什么不同的话,那就是成为数据科学家的最佳时机。如今,不仅对熟练数据科学家的需求旺盛,而且在供应方面也存在巨大缺口。这只能说明你有广阔的空间去追求这个非常抢手的职业,以及赚比目前任何其他领域都多的钱。

鉴于世界事务的多样性和我们对不断增强的技术的日益依赖,数据科学专业知识,如大数据、人工智能、机器学习等。只会越来越多。至少在今后的几十年里,你处于一个安全的位置,可以保持作为一名杰出的数据科学家的声望。

据报道,著名经济学家和作家安德鲁·弗劳尔斯说过:

越来越多的雇主希望雇佣数据科学家。

正如 Forrester Research 分析师 Brandon Purcell 认为的那样

“对数据科学家的需求只会增长,因为组织越来越依赖于数据驱动的见解

我们可以联系更多来自著名统计学家的类似支持、预测和观察,得出同样的看法,即数据科学正在塑造我们共同的未来。

那么,是什么让数据科学成为最令人兴奋的职业选择呢?让我们看看。

为什么数据科学具有刺激性?

图片来源: Unsplash

增加数据科学显著性的主要因素是它为个人打开的门的数量。不像其他任何领域,如果你在其他行业徘徊,你会觉得,被认为,被当作一个不知情的外国人。你是。老实说。你是。例如,医生只知道他/她在为人们服务时所使用的先进技术,但他/她不知道创造这种特殊设备的硬件/软件开发。

然而,无论你的工作性质如何,数据科学专业知识都可以在你的职业发展中发挥重要作用。无论是商业营销、城市规划、网络零售、医疗保健、体育、安全等。,数据驱动的分析和物流正迅速成为支撑每个职业的支柱。

人们普遍认为数据科学只在技术领域有价值。这与事实相去甚远。事实上,脸书、微软、苹果、谷歌和亚马逊这五大科技公司只雇佣了美国 1%的员工。这验证了数据科学的多功能角色。

此外,自动化、人工智能、机器或深度学习、机器人等。通过简单地用更合格和更复杂的版本来代替这些方法,取代了许多职业的冗长和危险的本质。这种大规模转变的兴起使得数据科学家成为获得和保持进步的关键。

因此,如果你对计算机、数学以及通过数据分析寻找主要和次要问题的解决方案充满热情,那么追求数据科学高级教育是你成为一名熟练的数据科学家的唯一合理步骤。

根据詹姆斯·库克大学协调员里卡多·坎佩洛的说法:

一名合格的数据科学家擅长跨学科技能的核心集合,这些技能构成了数据的整个生命周期。他们在计算、数学、统计和面向商业的主题中接受培训,这使他们能够与几乎所有领域的领域专家一起工作。在我看来,跨学科背景是一个人简历中最重要的资产。

在数据科学领域从事职业非常值得付出每一点努力和投资。这不仅是一个明智的选择和丰厚的回报,而且数据还被定位为整个经济即将运转的枢纽。

数据科学家技能

图片来源: Unsplash

数据科学家都受过良好教育,88%拥有硕士学位,46%拥有博士学位。强大的教育背景是执行所有复杂任务所需的深入知识所必需的。数据科学是一个多学科领域,与数学、统计学、编程等平行。

为了满足高度专业化的需求,数据科学家必须精通分析数据的技术技能。数据科学家还需要对编程语言以及数据构造和解构有特别的理解。

尽管由于不同领域的相反性质,数据科学家没有明确的技能集,但大多数数据驱动的职责都需要一些常见的技术/非技术技能。例如,大多数数据科学家负责将不同数量的原始数据转化为可读的见解,从而实现分析预测和操作。为了做到这一点,如果您考虑从事数据科学职业,您必须精通以下领域:

统计与数学:你需要在数学、概率、统计、多元微积分、算法等方面有很高的造诣。,创建数据的统计模型。

编程语言 : Python、SAS、SQL 和 R 是数据科学应用中最常用的编程语言,无论你打算在哪个领域前进。

数据 : 原因很明显!一个有经验的数据科学家平均花费 80%的时间处理不同的数据类型,以创建分析模型并获得有价值的洞察力。

沟通技巧:如果你不能交流你的成果和见解,技术术语只能带你走这么远,那你再怎么努力也没用。你应该能够以一种容易理解的方式交流你的发现。

数据科学家工资

有几个因素会影响数据科学家的薪酬待遇,例如教育、经验、领域、职位、地区,最重要的是,聘用数据科学家的机构的规模和概况。然而,根据 Glassdoor 的信息,平均金额在 95,000 美元至 250,000 美元之间波动。这似乎是对数据科学家通过数据科学家的许多职责带来的巨大价值的公平补偿。

了解大数据影响力的雇主很难找到一位能够应对工作所需所有挑战的专业人士。这反过来又成为高工资背后的驱动因素。数据科学专业人员的供需缺口甚至让刚刚起步的无经验人士受益。

我们这里有一份根据上述因素,基于 O'Reilly 的数据科学薪资调查 & BurtchWorks 报告的数据科学家薪资包明细。

经验工资

尽管已经有相当多的早期职业专业人员入职,但即使是入门级的数据科学家的薪酬待遇也高达 95,000 美元。虽然中级数据科学家的薪酬待遇起价为 128,750 美元,但如果这个阶段的数据科学家也参与管理任务,薪酬将增加到 185,000 美元。经验丰富的数据科学家从中级专业人员增加的工资开始,他们最终通过这里的管理角色和那里的额外任务赚到 25 万美元。

职位工资

以下是数据驱动型组织中最受有志和有经验的数据科学专业人士欢迎的职位。

数据科学家:8.5 万至 17 万美元

数据分析师:7.5 万至 11 万美元

数据科学/分析经理:9 万至 14 万美元

大数据工程师:11.5 万美元至 16.5 万美元

按领域列出的薪金

以下是数据科学家和其他数据科学专业人员收入最高的一些领域:

  • 云服务、托管、软件和 CDN
  • 研究和分析
  • 网络社交
  • 商业智能
  • 银行和金融
  • 安全性
  • 主流媒体

教育工资

最高的薪水并不属于那些拥有博士或硕士学位的人,尽管它肯定给入门级的数据科学家一个体面的开始。拥有定量学科高水平教育的专业人士薪酬最高,如:

数据科学

应用数学

统计数字

计算机科学

工程

经济学

运筹学

以及技术技能,如:

掌握 4 种以上的计算机编程语言

掌握处理大数据的技术

精通开源工具

深入的云计算知识

数据可视化能力

拥有所有的专业知识仍然不足以成为一名成功的数据科学家。你需要知道如何最好地运用你的知识和工具,以便从公司整体的改善中获得可操作的见解。精明的商业判断、科学兴趣和令人信服的沟通技巧是在成功的职业生涯中大有帮助的额外属性。

根据公司规模和概况的薪酬

薪酬最高的数据科学家受雇于备受瞩目的领先科技公司,这一点也不奇怪。以下是其中一些公司的名称:

谷歌:152856 美元

推特:135360 美元

苹果:145974 美元

脸书:134715 美元

微软:123328 美元

贝宝:13.2909 万美元

Airbnb:127852 美元

要记住的事情

一段时间以来,数据科学一直是最热门的讨论话题。它在科学、技术、经济、就业等许多论坛上一直处于领先地位。大部分是因为好的原因,但是如果没有一点缺点,那就太好了,不像是真的。尽管数据科学领域充满荣耀和潜力,但很少有人真正成为成功的数据科学家。有没有想过为什么会这样?对此没有简单明了的答案。

我们将列出一些关于欺诈网站上点击诱饵内容暗示的“即时”概念的真相。随着一些被打破的神话,再次由不真诚的平台灌输,误导许多有抱负的数据科学家怀有错误的期望。当他们面对严酷的现实时,他们最终会失去动力,除了辞职什么都不做。这很不幸。

你需要绝对清楚的第一件事是,学习数据科学很难。你将不得不投入大量的努力和时间来获得任何像样的技能。

无论你做什么,不要陷入“在 15 天内掌握数据科学的艺术”的陷阱它的所有版本都是在利用你的热情和出生来赚快钱。

您需要真正的数据科学教育,而不是学习它,而是不断提高您的技能,以跟上技术和科学世界不断变化的维度。

比当前的数据科学和分析生态系统信息更注重培养直觉技能。机制容易改变,而技能不会,所以请帮自己一个忙,不要迷失在这个包和这个片段的细节中。

数据科学不仅仅是长期以来与之相关的时髦词汇。如果你准备好看着屏幕上杂乱无章的数字和符号,那么只有到那时,你才应该向学习数据科学迈出真正的第一步。因为作为一名数据科学家,数据清理正是您将花费大部分时间去做的事情。

不要害怕笨拙的错误!数据科学并不像他们看起来那样清晰和聪明。所有炙手可热的数据科学家都是从充满错误的代码编译或混乱的数据服务器开始的。他们通过实践获得成功,所以犯错误,从中吸取教训,不要再犯同样的错误。

最后,问问自己,数据科学真的适合我吗?我有那种坚持,努力,投入,和需要的时间吗?如果你的回答都是肯定的,那就继续下一步。

首次出版;操行科学

数据科学家:从零到英雄

原文:https://towardsdatascience.com/data-scientist-from-zero-to-hero-6060b639ee98?source=collection_archive---------12-----------------------

马库斯·斯皮斯克在 Unsplash 上的照片

如何成为一名伟大的数据科学家:从在线资源中学习,了解新概念、最先进的算法和最新的技术。

如何成为一名数据科学家?在本文中,我提供了一个假设的成为数据科学家的学习途径。该指南主要由在线免费资源组成,是为想要学习数据科学的人制作的。如果您已经是数据专家,那么您可以忽略第一部分,直接跳到包含最新资源的部分。和所有的清单一样,这份清单并不完整。如果你有好的建议,请留下评论!

等等!什么是数据科学?放心吧!维基百科是你的朋友!简而言之,我们可以将数据科学定义为通过使用算法和工具从数据中提取洞察力的跨学科领域。您可以将数据科学想象为数学、统计学和计算机科学的融合。此外,数据科学还应用于几个领域:哪里有数据,哪里就有数据!

先说学数据科学的步骤吧!

1.发展环境

要执行分析,您需要用特定的编程语言编写代码。

不要相信不懂编码的数据科学家!

使用最多的语言是 RPython 。需要指出的是,它们并不相互排斥。r 更适合统计分析,而 Python 更适合机器学习。这并不意味着你不能用 R 进行机器学习或者用 Python 进行统计分析。就我个人而言,我主要使用 Python,但有时我们会部署用 r 编写的包,这取决于行业和你的(未来)公司生产环境的标准。我的推荐是两个都学!

两种语言都配备了广泛的软件包:查看 CRAN 任务视图PyPI 。对于 R 来说,最好的 IDE 是 RStudio ,而对于 Python 来说,你有一些替代方案,比如 Visual Studio CodePyCharmSpyderJupyter (尽管它并不是一个真正的 IDE)。学习这些语言,谷歌一下“R 入门”或者“Python 入门”就够了。对这些语言的任何合理介绍对我们的目的来说已经很好了!你不需要成为一个专业的程序员,在这个阶段知道一些基础知识就足够了:例如,如何定义一个函数,如何编写一个循环,如何绘制基本图,如何调试,等等。

作为你的操作系统,我的建议是不惜一切代价避开 Windows!如果您还没有安装,安装一个 Linux 发行版(例如, UbuntuManjaroFedora )并开始使用一个类似 Unix 的操作系统!你会发现有多少事情只能在一个终端内完成。

[## 每个数据科学家都应该知道的基本 Linux 控制台命令

对数据科学家最有用的终端命令列表:文件管理、系统管理和文本文件…

towardsdatascience.com](/linux-console-commands-data-scientist-566744ef1fb0)

最后,使用 git 。它是一个广泛应用于数据科学项目的版本控制系统。在 GitHubBitbucket 上打开一个个人资料页面,开始版本化您的代码!

2.数据操作和清理

在开始拟合模型之前,你需要对数据操作非常有信心!可以和熊猫(Python 中的)和dplyr(R 中的)一起练习。需要性能?检查 Dask数据表

照片由 Sid BalachandranUnsplash 上拍摄

在许多情况下,您将需要编写纯粹的 SQL 查询来检查数据。因此,了解主 SQL 语句会有所帮助!

请记住,在现实环境中,大量的时间将投入到数据清理中。因此,即使这不是最奇特的任务,它也是数据科学项目取得好成果的必要条件!

3.主要机器学习算法综述

准备好开发环境,让我们学习最常用的机器学习算法,以及如何在 R 或 Python 中应用它们。机器学习 A-Z 是一个很好的起点。该课程非常实用,尽管没有深入解释模型,但对于每个模型,您都有 Python 和 r 语言的示例代码。另一个通用在线课程是机器学习。它比前一个更加理论化,并且提供了 Octave/MatLab 中的实践练习。我的建议是跟着理论视频走,然后尝试用 Python 或者 r 解决习题,当然还有很多其他的在线课程,你可以自由选择适合自己需求的。

另一方面,如果你更喜欢看书,我建议:

在这一点上,你应该有信心使用主要的数据科学软件包(例如, caretscikit-learn )。你可以在一些公共数据集上测试你学过的算法: UCI 数据集Kaggle 数据集或者直接在谷歌数据集搜索上找一个。

4.填补空白!

到现在为止,你已经学会了基础。根据你所受的教育,你可能会错过一些数学、统计学或计算机科学的基本概念。例如,计算机科学学生可能不知道如何进行最大似然估计,或者数学学生可能不知道如何计算算法的复杂性。绝对正常!数据科学是一个非常广泛的领域,不可能什么都知道!

无所不知的数据科学家是不存在的!

记住:数据科学不仅仅是关于模型和性能!你可能有世界上最好的想法,但你不知道如何形式化它,你可能能够编写解决每个问题的算法,但该算法可能效率低下,需要太多的资源来运行。了解不同领域的基础知识将有助于您提供更有效的解决方案和可操作的见解。

🇸🇮·扬科·菲利Unsplash 上拍摄的照片

基础数学课程包括线性代数、实分析和数值分析。基础统计学课程包括描述统计学、推断统计学、贝叶斯统计学。计算机科学的基本概念包括:时间和空间的复杂性,数据结构,排序和搜索算法,图上的算法和算法设计。你可以在任何本科教材中找到所有这些论点。当然,谷歌是你的朋友!

5.深度学习

因此,如果你来到这里,你已经知道了一堆建立模型的算法,你有信心用众所周知的软件包开发一个数据科学项目,并且你已经对神经网络如何工作有了一个概念。是时候完全沉浸到深度学习中了!关于深度学习的常见误解是,它只是一系列可以预测任何事情的神经元层,就像魔法一样。

朱利叶斯·德罗斯特Unsplash 上拍摄

完全错了!关于这个主题有密集的文献:如何训练神经网络,哪种类型的网络在特定的竞赛中起作用,训练一定规模的神经网络所需的硬件架构是什么。首先,你可以从深度学习专业开始学习课程,同时作为教科书检查深度学习。构建人工神经网络最常用的两个框架是 TensorFlowPyTorch 。网上有很多资料都是从他们的官网开始的。

[## Keras 中的自定义神经网络:街头战士构建图表指南

如何建立具有自定义结构和层的神经网络:Keras 中的图形卷积神经网络(GCNN)。

towardsdatascience.com](/custom-neural-networks-in-keras-a-street-fighters-guide-to-build-a-graphcnn-e91f6b05f12e)

如果没有 GPU,可以用 Google Colab 做原型!

[## 类固醇上的 Colab:带 SSH 访问和 Visual Studio 代码服务器的免费 GPU 实例

一步一步地引导 SSH 进入 Google Colab 提供的免费 GPU 实例,并安装 Visual Studio Code Server。

towardsdatascience.com](/colab-free-gpu-ssh-visual-studio-code-server-36fe1d3c5243)

6.数据可视化

大多数时候,数据科学项目的关键部分是数据可视化。数据科学家应该能够通过有效的图表传达其见解,或者通过仪表板使结果可供企业使用。如果你用的是 Python, matplotlibplotlyseabornstreamlit 是常用的选择。R 中有 ggplot2闪亮仪表盘。如果你喜欢来硬的,可以试试 D3.js 。您会发现有几种数据可视化解决方案,并且不可能学会使用所有的解决方案!我的哲学是学习其中的几个,准备好创建一个原型来展示结果。在许多项目中,已经选择了最终的数据可视化解决方案,因为它是现有工作流的一部分,您只需要创建端点来交付您的模型的输出。

布拉登·科拉姆Unsplash 上拍摄的照片

7.卡格尔

如果你到了这里,你就差不多准备好了!您应该已经用可重用的代码、有趣的用例以及应用程序示例填满了您的 GitHub 存储库!在 Kaggle 上参加在线竞赛!你可以赢钱!:)最重要的是,在 Kaggle 上你可以向其他人学习各种各样的问题设置!您将意识到,您所知道的只是数据科学社区开发的工具、方法和算法的一小部分。

永远不要停止学习!否则,你将被淘汰!

8.大数据

我想专门用一节来介绍大数据项目。通常,要在大数据背景下训练机器学习模型,传统数据科学项目的基本包是不够的!

evUnsplash 上的照片

你将面临不同的技术来摄取和操纵大数据。我们正处于数据科学家和数据工程师之间的边界。通常,大数据开发环境是由工程师建立的,但数据科学家应该知道如何使用这些新工具!于是,学会使用卡夫卡SparkScalaNeo4j

[## Apache Kafka: Docker 容器和 Python 中的例子

如何使用 Docker 安装 Kafka 并在 Python 中产生/消费消息

towardsdatascience.com](/kafka-docker-python-408baf0e1088) [## 如何从 Python 查询 Neo4j

在 Python 中使用 Neo4j:Neo4j Python 驱动程序和 Cypher 查询语言的快速入门。

towardsdatascience.com](/neo4j-cypher-python-7a919a372be7)

9.云服务

近年来,一个日益增长的趋势是由谷歌微软和其他参与者提供的数据科学项目开发的在线平台。这些平台主要提供开发环境和已经训练好的模型作为服务。同样,这些环境的设置主要由数据工程师完成,但了解某些类型的服务已经在线存在,以及哪些类型的预培训模型可以作为服务使用,可以提高您的工作效率并缩短交付时间!因此,请关注这些云平台,因为许多公司已经在使用它们了!

10.真实世界的体验

希望当你读到这一部分时,你已经是一名数据科学家了。通过在真实环境中工作,你会发现技术知识并不是数据科学项目的唯一部分。软技能和经验是完成一个成功项目的主要因素!作为一名数据科学家,您将与业务部门互动,将业务需求转化为技术需求,您将与其他专业人员(例如,数据工程师、仪表板设计师等)一起在团队中工作。)并能够以技术和非技术的方式分享您的发现。此外,正如你已经意识到的,对于每个问题设置,测试方法的数量总是比你完成项目的时间要多。

培养一种第六感的最佳方式是“尝试、失败、重复”,这种第六感能告诉我们什么可行,什么不可行。

只有在经历了相当多的成功和失败之后,你才能避免第一眼看到的非最优解!

11.专门化

到目前为止,你一直在学习成为一名普通的数据科学家。你什么都懂一点,但你不是任何事情的专家!当你在这里学习所有的东西时,其他成千上万的人也在做同样的事情!所以如果你想和其他人不一样,你需要专攻某样东西!你可能是一名 NLP 专家,一名 CV 专家,一名网络科学专家,或者一名数据可视化专家……这个名单可能会很长,但是请记住:专业不应该仅仅是技术方面的,也应该是商业领域的!很容易找到一个时间序列预测方面的数据科学家专家,但如果数据科学家也是股票市场方面的专家,就不那么容易了。

12.概念和工具

作为成为伟大的数据科学家指南的最后一点,我想指出概念和工具之间的区别。这些概念在你学会之后仍然存在,但是工具在将来可能会改变。神经网络如何工作是一个概念,但它的实现可以在 Tensorflow、PyTorch 或任何其他框架中完成。数据科学家应该对创新持开放态度。如果一门新的语言更适合你的项目,那就学习它,并使用它!不要依赖于你的工具!尝试新的东西!

照片由尼克·费因斯Unsplash 上拍摄

到目前为止,我们已经看到了成为伟大的数据科学家的学习途径。这个清单远非完整,它是基于我的个人经验。如果你有任何建议,请给我留言!当然,这个列表的顺序只是推荐,你可以根据自己的需要随意调整!

在文章的这一部分,我将分享一些保持与新概念、最先进的算法和最新技术保持同步的方法。这些建议也可以在你学习文章的第一部分时使用!

A.加入当地社区,参加研讨会

了解当地是否有数据科学家社区,并加入他们!参加 meetup,认识不同行业的人。不要低估网络的力量!在其他情况下成功应用的解决方案也可以适用于你的问题!

照片由海伦娜·洛佩斯Unsplash 拍摄

如果住在大学附近,说不定也有专门研究数据科学的研究部门!通常,研究中心会组织研讨会和会议。要求参加这些活动!这是一个很好的方式来保持最新的趋势研究课题和最先进的解决方案!

B.看报纸

谷歌学术提供了在某个特定研究者的新论文发表时被通知的可能性。dblp 和 arXiv 是搜索新论文的其他来源。它们都是继续你的专业或找到特定问题的解决方案的好方法!如果你需要一个程序来组织你阅读的论文,使用门德利的推荐系统,它会根据你的兴趣推荐相关的论文。

C.关注在线网站

走向数据科学Analytics Vidhya 、和走向 AI 都是有效的媒介出版物。大部分文章都是带动手例子的教程!所以你已经有了代码的草稿!

除了媒体出版物,来自谷歌脸书、微软和 OpenAI 的研究博客是机器学习/人工智能领域的另一个新闻来源。

其他有趣的网站有:

D.订阅时事通讯

不想经常查看网页?你更喜欢电子邮件通知吗?订阅以下一些时事通讯!

E.在 丨t丨e丨l丨e丨g丨r丨a丨m丨s丨 上关注数据科学小组

有专门研究数据科学的电报频道/群组。我在这里报告其中一些:

F.使用社交网络和 YouTube

你可以在 Twitter 或 LinkedIn 上关注并与许多专家数据科学家或机器学习巨星互动(只需寻找他们!).在 LinkedIn 上,即使你不想换工作,你也可以关注机器学习公司的招聘信息:从需求中,你可以了解生产环境中使用的技术的趋势!此外,YouTube 频道也可以有趣地跟上潮流!我在这里报告一些渠道:

G.个人项目

在许多数据科学项目中,可用的时间很短,但要做的事情很多。在这种情况下,数据科学家倾向于抑制某些方法或忽略可能的改进。创造次优产品的感觉可能会令人沮丧!

照片由屋大维丹Unsplash 上拍摄

作为这个列表的最后一点,我建议开始一个你喜欢的个人项目。在这个项目中慢慢来,不要设置任何期限。通过测试每一种新方法来享受这个项目的每一部分!

联系人:LinkedIn|Twitter

数据科学家的工作—值得做出牺牲吗?

原文:https://towardsdatascience.com/data-scientist-job-is-it-worth-the-sacrifices-made-efdf34139aa6?source=collection_archive---------59-----------------------

意见

长话短说——的确如此(至少对我来说)

迈克尔·朗米尔在 Unsplash 上的照片

你打开网页,发现数据科学家是最性感的工作。

网上说,作为数据科学家,你将获得每年约 10 万美元的报酬。

您对前景感兴趣,并开始寻找成为数据科学家的方法。

打开每个网页标签,

看了很多文章,

收集了无数的电子书,

给 LinkedIn 上的人发消息,

在 YouTube 视频上观看课程,

报名参加网络课程,

参加线下数据科学训练营,

参加卡格尔比赛,

诸如此类。

你牺牲了很多——时间、金钱、睡眠、精神、关系等等。

然后你觉得自己已经准备好成为一名数据科学家了。

你填写工作申请表——有数千人申请的入门级工作,

等待电话,

很少有公司打电话来或者根本没有,

被拒绝了,

你变得更有创造力,

试着找到一种社会联系,

或者申请实习,

继续努力。

即使牺牲了这么多东西,唯一能保住工作的人还是寥寥无几。

许多人要么需要等待另一次机会,要么干脆放弃。

不是每个人都在经历类似的磨难,但有些人会感到熟悉。

值得做出的牺牲吗?

让我试着解释一下成为一名数据科学家需要什么。

"那么,也许,仅仅是也许,数据科学家是一份值得你为之牺牲的工作."

成为数据科学家需要什么?

成为一名数据科学家有许多必备技能,但哪一项才是精华呢?。让我们来看看 KDNuggets 民意调查中的 10 大技能。

来源:创建自https://www . kdnugges . com/2019/09/core-hot-data-science-skills . html

不出所料,很多技能都是技术技能。Python 和数据可视化都位居第一和第二,批判性思维技能紧随其后。暂时,让我们忽略非技术技能,如批判性思维和商业理解。我们究竟花了多长时间学会了所有这些技能,需要付出多少代价?我们去那里取些样本。

在线课程

假设我们每周学习 4 个小时(这通常是在线课程推荐的时间)。

  • IBM 数据科学课程 在 Coursera 提供了 Python & SQL 的课程,分析&可视化数据,建立机器学习模型。~ 10 个月。费用:每月 39 美元
  • 数据科学在线训练营 在 Udemy 承诺学习数学、统计学、Python、Python 中的高级统计学、机器&深度学习。~28 小时在线视频。如果我们每周学习 4 小时,那将需要 2 个月。成本:~ 200 美元,但通常时间折扣为~ 12 美元
  • Data camp 上的数据科学赛道其中的课程包括 Python、数据可视化、SQL、机器学习和统计学。100 小时~ 7 个月。费用:标准订阅每月 25 美元或每年 300 美元****

训练营

和培训师一起进行线下(或者线上,但是广泛的)训练营怎么样?他们承诺你可以成为数据科学家多久?

  • 美国 Metis 数据科学训练营 课程说你会学习 Python、SQL、机器学习、统计学(还有很多)。 ~12 周或 3 个月。费用:全额学费 17000 美元****
  • 纽约数据科学院 课程包括 Python(和 R)、数据可视化、SQL、机器学习。 ~12 周或 3 个月。费用:全额学费 17600 美元****
  • 跳板数据科学赛道 设有课程 Python、数据可视化、SQL、机器学习。 ~6 个月。成本:预付 7500 美元****
  • 新加坡 Hackwagon 数据科学课程 拥有 Python、数据可视化、机器学习、数学、统计学的完整课程。 ~7 周 x 3 个疗程左右~ 5 个月~ 6 个月。费用:;每门课程 2000 新元 x3 = 6000 新元****

从上面的例子中,我们可以看到在线课程为你提供了许多小时的在线视频或课程。许多人建议学习六个月以上(这取决于你想每周花多长时间)。这是合理的,因为在线课程是静态的,没有任何与导师的互动,所以你需要更长的时间来理解每个概念。网络课程的主要优势是便宜;几乎每个人都可以负担得起,如果他们有多余的钱,虽然这也成为一个问题。虽然它很便宜,但它只是在没有适当指导的情况下为你建立了短暂的知识——没有方向。

此外,许多雇主不认为在线课程是一种资产,除非你已经有相关的学位或经验。在我个人看来,在线课程的价值与其价格相当——提高/回顾你的技能是好事,但不要仅仅依靠这一点来成为数据科学家。你可以尝试通过使用各种书籍或者只是阅读文档来学习这些技巧,但是我不确定掌握必要的技巧需要多长时间。

训练营怎么样?我们可以看到它要贵得多。非常贵。这是因为 Bootcamp 提供了一些在线课程没有的东西,即专业讲师、个人指导、密集的时间表和联系(尽管我知道一些 Bootcamp 没有经验丰富的员工和/或联系)。问题是值得吗?答案是肯定的,也是否定的。肯定的,因为对于一个新手来说,你需要一个方向、专业的评论和关系才能进入数据科学。否定的,因为你可以从书籍或在线课程中获得所有必要的技能。进一步考虑,在今天的条件下很难保证有人就业,就像训练营承诺你完成课程后有工作一样;对此半信半疑。

现在,我之前解释的都是关于技术技能的。你从哪里获得的非技术性技能,如批判性思维、沟通和商业理解?没有在线课程或训练营教你这些。对于这一点,我还没有提到获得必要技能的其他方法;就是通过获得学位和/或专业就业,就像我一样。

为什么许多员工喜欢有抱负的数据科学家持有学位?这是因为有些技能只有通过在学院/大学里学习才能获得。我并不一定意味着你需要一个博士学位才能成为一名优秀的数据科学家——如果你正确地学习课程,即使是学士学位也足够了。它会教你批判性思维和如何沟通,如果你的学位与雇主的业务相符,也许还会教你商业。虽然,这将需要更长的时间更高的成本相比,我放下以上。我获得硕士学位的教育时间花了六年,其中三四年是作为研究人员的专业时间,在成为数据科学家之前,我花了几个月的时间再次复习我的技术技能。是的,总的来说,我需要大约 9-10 年的准备时间来步入数据科学的世界。

无论你选择哪种方式,都要准备好花费大量的时间和金钱来获得必要的技能。毕竟没有免费的午餐。你需要付出才能得到。此外,在所有这些之后,也不能保证能得到一份数据科学家的工作。你需要做好应对拒绝的心理准备。

值得牺牲吗?

我牺牲了很多钱,时间,睡眠,关系。我花了很多钱和时间在错误的地方。我放弃了与朋友甚至是一段关系出去玩的提议,只是为了专注于学习线性代数。我醒着的时候只是为了提高我的技能。这一切值得吗?

现在,如果你的唯一目标是薪水,数据科学家根本不值得牺牲。仍然有许多工作在花费相似或更少的时间和金钱来掌握技能(或甚至更少的技能来学习)的情况下报酬更高。比如软件工程师,全栈开发者,律师,药剂师,甚至飞行员。仍然有许多种类的工作,更好的是花时间在更好的薪水和听起来很棒的名字上。

如果你成为一名数据科学家,你的工作流程大致如下。

来源:我自己创作

不要想象作为一名数据科学家,我们会致力于创建一个机器学习模型,或者神奇地预测接下来会发生什么。大多数时候,我们只是收集数据,创建报告,使用统计数据来理解发生的事情,演示和探索数据。还是要看你的公司是什么业务,但是很多时候,只看上面的。

如果你不能想象自己一直在收集和查看数据,那就不要做数据科学家。机器学习模型很酷,但不要坚持你会后悔的工作。牺牲实在太大了。

然而,如果你喜欢观察模式,不要介意弄脏假设,对探索数据有耐心,喜欢分析,有数据素养天赋,并且擅长沟通。那么,也许,仅仅是也许,数据科学家是你值得牺牲的工作。在做出这种牺牲之前,你需要知道你签约到底是为了什么。

结论

我热爱我的职业,因为我喜欢探索我的数据,观察模式,获得一条新信息,创建一个假设,测试我的建议,以及其他许多我可以用数据做的事情。是的,我也喜欢玩机器学习,但这不仅仅是我工作中的乐趣。当然,职业前景也很好。

我想说的是,进入数据科学需要很多牺牲。在你做这一切之前,确保这种牺牲是值得的。对我来说,这是值得的。

如果你喜欢我的内容,并想获得更多关于数据或作为数据科学家的日常生活的深入知识,请考虑在这里订阅我的时事通讯。

如果您没有订阅为中等会员,请考虑通过我的推荐订阅。

数据科学家必须知道:商业 x 统计

原文:https://towardsdatascience.com/data-scientist-must-know-business-x-statistics-7bb8575a9525?source=collection_archive---------48-----------------------

为什么业务和统计之间集成对于数据科学家来说至关重要

露丝·齐默曼在 Unsplash 上拍摄的照片

根据定义,统计学是一门处理数据的收集、分类、分析和解释的科学。该领域通常由概率数学理论的使用来支持,并用于评估特定的假设。

这个定义听起来已经很专业了,而且似乎与商业没有任何关系。此外,为什么数据科学家需要知道这两件事?

嗯,统计学不仅仅是一门高等数学课。这是每个企业从竞争中获得优势的必由之路。我认为,许多伟大的商业领袖做出的商业决策不仅来自他们的直觉,也有统计数据的支持。

任何数据科学家项目都是解决公司任何问题的数据项目。如果你的高级深度学习模型有 99%的精度,并能猜出每个经过房间的人,这并不重要;如果它不能解决业务问题,那它就是无用的。

问题是,统计对业务到底有多重要,为什么我们作为数据科学家需要了解统计和业务的两个方面?这是你可能会疑惑的问题。好吧,让我向您解释更多关于数据科学家的业务和统计信息。

商业 x 统计

商业和统计看起来像两个不同的世界,不会融合,但它是重要的整合。你怎么问?下面我用几段话告诉你。

数据驱动的业务和统计

您可能经常在许多文章或其他数据科学相关的学习材料中听到术语“数据驱动”。它可能会说一些类似的话,比如“这个业务是数据驱动的”,或者“决策是基于数据的,所以它是数据驱动的”,等等。

在这里,您可能认为使用数据进行业务决策意味着您是数据驱动的。是真的吗?如果按数据,就是只看数字,根据数据快照执行决策,那么就是一个

数据驱动的业务不仅仅如此。公司可能包含大量的数据,但是如果这些信息与当前的业务无关,那么它们就是无用的

例如,已经成立十年的公司 A 想在新的市场销售一种新产品。他们要求他们的数据团队根据他们拥有的数据为他们的新产品描绘一个新的细分市场,他们声称拥有大量数据。该团队然后查看他们的公司数据,发现“大量数据”意味着许多电子表格数据只包含无用的属性,如 id、姓名、电子邮件和电话号码。

以上是一个无法解决您的业务问题的数据示例,但是如果我们有一个“可能的”数据集来细分新客户呢?先说他们的工资,职业,喜好,年龄。在这一点上,我们的业务需要统计数据来评估数据质量,并帮助公司决定采取何种业务战略

考虑商业中的统计

我已经简单解释了为什么统计数据在商业中至关重要,但是什么样的统计数据在商业中特别重要。这里,我们需要回到业务的核心“你的业务问题中最重要的是什么?”;是销售数字,还是利润,或者任何你可以问的问题。这就是我们所说的关键指标

例如,公司 A 的关键指标是他们的月销售额。在这种情况下,公司 A 需要解决的是他们希望从他们的关键指标中得到什么样的分析。嗯,最明显的一个是这些年来的月销售额。下面我举一个数据例子。

作者创建的数据示例图

现在,通过一个简单的统计和分析,我们可以看到销售数量一直在增加,直到二月份,每年的销售额都在大幅下降。在这种情况下,统计数据可以提供每年下降的准确百分比,从业务角度来看,值得调查以确定下降的原因。

这就是统计如何帮助企业;这不仅仅是指出公司存在的问题,帮助企业做出商业决策,还包括了解企业的销售状况。

数据科学家的商业和统计

那么,数据科学家呢?我上面解释的似乎只适用于业务,不适用于数据科学家。嗯,我们可能需要定义数据科学家大部分时间做什么。

由作者创建的学术数据科学家图表

上图是数据科学家每天进行的理论活动。虽然这没有错,但工作环境中的现实却大相径庭。

作者创建的真实数据科学家活动图

在上图中,我们可以看到,这不仅仅是清理和准备数据,我们还需要遵守数据合规性和道德规范,以及将我们的任何数据项目与业务问题相集成。

任何数据科学家项目都是解决公司任何问题的数据项目。如果你的高级深度学习模型有 99%的精度,并能猜出每个经过房间的人,这并不重要;如果它不解决商业问题,它就是无用的。

每一个数据科学家都需要了解你的公司正在从事什么样的业务,以及你试图解决什么样的业务问题。当你在公司工作时,与其他部门的互动是不可避免的。

例如,销售部门想要增加销售数量。为此,销售团队要求数据科学团队创建一个新的客户预测模型。你可能会认为只需提取数据并将其训练到任何机器学习模型,对吗?

不,事实往往不是这样。你首先需要做的是说服销售部门这个项目是否可行,并设定一个合理的目标。这就是为什么数据科学家也需要了解业务和统计方面。

要确定您是否可以执行数据项目,您需要有用的数据。在这种情况下,你需要一个统计来评估你的数据质量

而且,经常,不处理数据的人会设立一个不合理的目标。例如,销售部门希望下个月的销售数字增加 100%。要证明这个目标是否合理,需要从你目前的数据来评估。简单的趋势分析和估计就可以了,但是你只有理解了统计数据和业务才能做到这一点

你可能会说,“难道机器学习模型不是为了提高销量而创建的吗?如果是这样,这种估计就没用了”。当然,拥有机器学习模型的目的是为了解决业务问题,比如增加销售数量。虽然这是事实,但你仍然需要将你的目标控制在一个合理的数字之下。

会有一个你的机器学习模型无法预见的问题;比如业务员辞职、部门重组、配送事故等等。有雄心壮志固然很好,但要努力在合理的范围内实现你承诺的目标。

选择适当的关键指标也可能是数据科学家的责任,尤其是当公司刚刚涉足数据驱动型业务时。在这种情况下,商业和统计会成为你最好的朋友。

结论

不了解业务和统计数据,数据科学家就无法工作。这两个方面都是数据科学家的工作装备,了解这些可以让你成为更好的数据科学家。

作为一名数据科学家,您需要了解业务和统计方面,因为:

  1. 数据项目不仅仅是清理数据和创建模型,它还涉及解决业务问题,
  2. 评估数据项目对于解决业务问题是否可行需要统计,
  3. 统计还需要为您的数据项目设定一个合理的目标,因为您的机器学习模型无法预见一切,而且
  4. 商业和统计是你可以用来提高你在公司中的地位的知识,或者当你申请数据科学家职位时。

希望有帮助!

如果您喜欢我的内容,并希望获得更多关于数据或数据科学家日常生活的深入知识,请考虑在此订阅我的简讯。

如果您没有订阅为中等会员,请考虑通过我的介绍订阅。

数据科学家必备的统计数据

原文:https://towardsdatascience.com/data-scientist-must-know-statistics-a161fa7c1bca?source=collection_archive---------10-----------------------

Unsplash 上由 Carlos Muza 拍摄的照片

统计学中最重要和最基本的概念

初学者通常会忽略最基本的统计知识。为了更好地理解不同的模型和各种技术,这些概念是必不可少的。这些是数据科学、机器学习和人工智能中涉及的各种概念的基础知识。

下面是本文涵盖的概念列表。

  1. 集中趋势测量
  2. 传播的量度
  3. 人口和样本
  4. 中心极限定理
  5. 取样和取样技术
  6. 选择偏差
  7. 相关性&各种相关系数

让我们开始吧!

1 —集中趋势的度量

集中趋势的度量是试图通过识别一组数据中的中心位置来描述该组数据的单个值。用作中心测量的三个最常见的值是,

— Mean 是数据中所有值的平均值。

“n”个数据值的平均值

— Median 是排序数据的中间值。中位数是比平均值更好的中心度量,因为它不受异常值的影响。

—模式是数据中出现频率最高的值。

2 —扩散的测量

分布测量描述了某一特定变量(数据项)的一组观察值的相似程度或变化程度。分布的度量包括范围、四分位、四分位间范围、方差和标准差。

—范围是数据中最小值和最大值之差。

—四分位数将有序数据集分成四个相等的部分,并引用四分之一之间的点的值。
下四分位数(Q1) 是介于最低的 25%值和最高的 75%值之间的值。它也被称为第 25 百分位。
第二个四分位数(Q2) 是数据集的中间值。它也被称为第 50 百分位,或中位数。
上四分位数(Q3) 是最低的 75%和最高的 25%之间的值。它也被称为第 75 百分位。

四分位数的分布(图片由作者提供)

四分位数范围(IQR) 是上四分位数(Q3)和下四分位数(Q1)之间的差值,描述了从最低到最高排序的中间 50%的值。IQR 通常被视为比极差更好的分布度量,因为它不受异常值的影响。

所有均值为μ的数据点的方差,每个数据点用 Xi 表示, N 个数由下式给出:

方差的数学公式

****标准差是方差的平方根。总体的标准偏差由 σ表示。

在分布较小的数据集中,所有值都非常接近平均值,从而产生较小的方差和标准差。数据集越分散,值就越远离平均值,从而导致更大的方差和标准差。

3 —总体和样本

  • ****群体是可能的数据值的整个集合。
  • 数据集的样本包含总体的一部分或子集。样本的大小总是小于被抽取样本的总体大小。

说明人口和样本的简单草图(图片由作者提供)

例如,一个国家所有人的集合是' 人口 ',而一个人的子集是' 样本 '通常小于人口。

4 —中心极限定理

中心极限定理是概率论中的一个关键概念,因为它意味着适用于正态分布的概率和统计方法可以适用于许多涉及其他类型分布的问题。

CLT 表示,“使用足够大的样本量从总体中取样,样本的平均值,即样本平均值,将是正态分布的。不管人口分布如何,都是如此。”

不管总体的分布如何,抽样分布都是正态的。(图片来自维基百科)

其他来自 CLT 的 acumens 是,

  • 样本均值以概率收敛,并且几乎肯定收敛于总体均值的期望值。
  • 总体的方差等于样本的方差与每个样本中元素数量的乘积。

5—取样和取样技术

抽样是一种统计分析技术,用于选择、操作和分析数据点的代表性子集,以识别所观察的较大数据集中的模式和趋势。

从数据中抽取样本有许多不同的方法;理想的取决于数据集和手头的问题。常用的取样技术如下:

  • ****简单随机抽样:在这种情况下,样本中的每个值都是完全随机选择的,总体中的每个值都有同等的机会或概率被选中。
  • ****分层抽样:在这种方法中,首先将人群分成具有相似特征的亚组(或阶层)。当我们可能合理地预期不同子群之间的兴趣测量不同,并且我们想要确保所有子群的代表性时,使用它。
  • ****整群抽样:在一个整群样本中,总体的子群被用作抽样单位,而不是单个数值。人群被分成称为集群的子群,这些子群被随机选择包括在研究中。
  • ****系统抽样:每隔一段时间从抽样框中选取一个数值。选择间隔以确保足够的样本量。如果你需要一个样本大小为 x 的总体中的 n 的样本,你应该选择每个 x/n 个体作为样本。

6 —选择偏差

选择偏倚(也称为抽样偏倚)是由于总体中的非随机样本引起的系统误差,导致总体中的一些值比其他值更不可能被包括在内,从而产生有偏倚的样本,其中所有的值不是同等平衡或客观表示的。

这意味着没有实现适当的随机化,从而确保获得的样本不能代表要分析的人群。

在一般情况下,仅靠现有数据的统计分析无法克服选择偏差。通过检查相关性可以评估选择偏差的程度。

7 —相关性

简单地说,相关性是衡量变量(或特征或样本或任何组)相互关联程度的一个指标。几乎在任何数据分析中,数据科学家都会比较两个变量以及它们之间的关系。

以下是最广泛使用的相关技术,

  1. 协方差
  2. 皮尔逊相关系数
  3. 斯皮尔曼等级相关系数

1.协方差

对于两个样本,比如说 X 和 Y ,设 E(X),E(Y) 分别为 X,Y 的平均值,‘n为数据点的总数。X,Y 的协方差由下式给出:

X,Y 的协方差的数学公式

协方差的符号表示变量之间线性关系的趋势。

******

当协方差(X,Y)分别为正和负时,X,Y 的示例图(图片来自维基百科**

2.皮尔逊相关系数

皮尔逊相关系数是一种统计量,它也测量两个特征之间的线性相关性。对于两个样本,X,Y 设σX,σY 分别为 X,Y 的标准差。X,Y 的 PCC 由下式给出:

X,Y 的 PCC 的数学公式

它的值介于-1 和+1 之间。

******

PCC 值分别在-1 和 0、0 和+1 之间的变量样本图** **

值分别为 PCC -1,0,1 的变量样本图**

3.斯皮尔曼等级相关系数

斯皮尔曼等级相关系数(SRCC)评估两个样本之间的关系可以使用单调函数(无论线性与否)描述的有多好,其中 PCC 只能评估线性关系。

两个样本之间的 Spearman 等级相关系数等于这两个样本的等级值之间的 Pearson 相关系数Rank 是变量内观测值的相对位置标签。

直观地说,当两个变量之间的观测值具有相似的等级时,两个变量之间的 Spearman 等级相关系数会很高,而当两个变量之间的观测值具有不同的等级时,该系数会很低。

Spearman 等级相关系数位于+1 和-1 之间,其中

  • 1 是一个完全正相关****
  • 0 是不相关****
  • —1 是一个完美负相关****

要了解更多相关技术以及何时使用哪种技术,请查看下面的文章。

** [## 在数据中寻找联系?相关技术来拯救!

简单地说,相关技术

medium.com](https://medium.com/towards-artificial-intelligence/looking-for-connections-in-your-data-correlation-techniques-come-to-rescue-53121a149f96)

谢谢你的阅读。我也将在未来写更多初学者友好的帖子。请在媒体上关注我,以便了解他们。我欢迎反馈,可以通过 Twitter ramya_vidiyala 和 LinkedIn RamyaVidiyala 联系我。快乐学习!**

数据科学家应该知道软件工程的最佳实践

原文:https://towardsdatascience.com/data-scientist-should-know-software-engineering-best-practices-f964ec44cada?source=collection_archive---------23-----------------------

意见

成为不可或缺的数据科学家

Unsplash 上拍摄的 ThisisEngineering RAEng

介绍

我一直在急切地研究、与朋友交谈并测试一些新的想法,这些想法将有助于使我成为一名更不可或缺的数据科学家——当然,如果不与帮助我取得进展的人分享,我就无法尝试在职业生涯中取得进展(如果你不知道,那就是你们!)

最近,我在我的 LinkedIn 个人资料上进行了一项民意调查,我惊讶地发现,有这么多的人认为数据科学家必须了解编程标准并遵循工程最佳实践。

图 1:投票结果

统计学家经常对许多数据科学家(包括我自己)缺乏基本的统计知识感到失望。数学家认为,在应用之前,必须对各种情况下应用的原理有一个坚实的理解,我承认我没有。软件工程师希望数据科学家在遵循基本编程原则的同时进行他们的实验。

最刺痛我的是,每个“是”投票者目前都是数据科学家,他们中的许多人(在投票时)担任领导职务——包括 4x Kaggle 特级大师 Abhishek Thakur 这样的人。好吧,我承认,你想要的角色决定了需要对统计学和概率、线性代数、微积分等其他数学概念有多深的理解——虽然基础是绝对必要的——但是软件工程实践呢?

我曾经是数据科学家之一,认为我们仅仅是数据科学家,而不是软件工程师,因此我们的责任是从数据中提取有价值的见解,这仍然是一个事实,但是这次调查打破了我的思维模式,让我陷入了深刻的思考…

当职位名称是数据科学家时,为什么我必须知道软件工程的基础知识?

我记得自己的目标——成为一名不可或缺的数据科学家。我是不是在说,如果我不知道/不学习软件工程的基础,我就不是不可或缺的? 嗯,嗯。基本上 —注意,这种说法是假设的,例如你是一名数据科学家,正在编写最有可能投入生产的代码。

在这一点上,我已经策划了一个软件工程的基本原则,应该适用于数据科学家的事情列表。由于没有软件工程背景,我咨询了许多软件工程师朋友来帮助我列出清单,并教我如何编写更好的产品代码。

以下是数据科学家应该知道的一些最佳实践:

干净的代码

疾控中心Unsplash 拍摄的照片

注意:我想首先向 R 用户道歉,因为我没有对 R 中的编码做太多研究,因此许多干净的代码技巧主要是 Python 用户提供的。

我学习的第一门编程语言是 Python,因为我英语说得很流利,对我来说 Python 和英语非常相似。从技术上来说,这指的是 Python 编程语言的高可读性,这是 Python 的设计者在认识到代码被读的次数比被写的次数多之后有意实现的。

当一个经验丰富的 Python 开发人员(Pythonista)称部分代码不是“Python 化的”时,他们通常意味着这些代码行没有遵循通用的准则,并且没有以被认为是最好的(听起来:最可读的)方式表达其意图。—Python 的搭便车指南

我将列出一些构成干净代码的因素,但我不打算说得太详细,因为我相信有许多很好的资源比我更好地涵盖了这些主题,例如 PEP8Python 中的干净代码:

  • 有意义和可发音的命名约定
  • 清晰胜过一致
  • 可搜索的名称
  • 让你的代码易于阅读!

记住,不仅别人会阅读你的代码,你也会,如果你不记得什么意思,那么想象一下别人会有什么希望。

模块性

沃洛季米尔·赫里先科在 Unsplash 上拍摄的照片

这可以部分归咎于我们学习数据科学的方式。如果一个数据科学家不能旋转 Jupyter 笔记本并开始做一些探索,我会感到惊讶。但这就是 Jupyter 笔记本的全部用途,实验!不幸的是,许多关于学习数据科学的课程并没有很好地将我们从 Jupyter 笔记本转移到脚本,而脚本对于生产环境来说要有效得多。

当我们谈到模块化代码时,我们指的是被分成独立模块的代码。有效地执行,模块化允许包装,测试和可维护的代码,可重复使用。

在下面链接的视频中,Abhishek Thakur 为 Kaggle 比赛制造了一台机器学习包,这是我第一次接触模块化。过去,我也曾听 Abhishek 提到,他学习模块化和软件工程最佳实践的方法是通读 Github 上的 Scikit Learn 代码。

有助于编写好的模块化代码的其他一些东西是:

  • Don tREPE atYyourself(DRY)——不要重复你自己(DRY,或者有时不要重复你自己)是软件开发的一个原则,旨在减少软件模式的重复,用抽象代替它或者使用数据规范化来避免冗余。(来源:维基百科)
  • 单一责任原则(SRP)——单一责任原则(SRP)是一项计算机编程原则,它规定计算机程序中的每个模块、类或函数都应该对程序功能的一个部分负责,它应该封装这个部分。(来源:维基百科
  • 开闭原则——在面向对象编程中,开闭原则陈述“软件实体(类、模块、函数等)”。)应该对扩展开放,但对修改关闭”;也就是说,这样的实体可以允许其行为被扩展,而无需修改其源代码。(来源:维基百科)

重构

代码重构可以被定义为在运行时不改变代码的外部行为的情况下,重构现有的代码的过程。

基里安·塞勒Unsplash 拍摄的照片

重构旨在改进软件的设计、结构和/或实现(其非功能性属性),同时保留其功能性。— 维基百科%2C%20while%20preserving%20its%20functionality.&text=By%20continuously%20improving%20the%20design,and%20easier%20to%20work%20with.)

重构我们的代码有许多优势,例如,提高我们代码的可读性和降低复杂性,这反过来导致我们的源代码更容易维护,并且我们配备了内部架构,提高了我们编写的代码的可扩展性。

此外,我们不能在不谈论提高性能的情况下谈论代码重构。我们的目标是编写一个执行速度更快、占用内存更少的程序,尤其是当我们有一个终端用户要执行某个任务时。

有关 Python 中重构的更多信息,请参见下面的链接!

[## 为简单性重构 Python 应用程序——真正的 Python

你想要更简单的 Python 代码吗?你总是带着最好的意图、干净的代码库和漂亮的…

realpython.com](https://realpython.com/python-refactoring/)

测试

照片由 Antoine DautryUnsplash 上拍摄

注意:在部署机器学习模型 udemy 课程中,我简要了解了测试(以及这篇文章中涉及的大多数其他想法)。

数据科学是一个有趣的领域,从某种意义上说,即使我们的代码中有错误,我们的代码仍然可以运行,而在软件相关的项目中,代码会抛出一个错误。因此,我们最终会得到误导性的见解(也可能没有工作)。因此,测试是必要,如果你知道如何做,你的价格就会上涨。

以下是我们进行测试的一些原因:

  • 确保我们获得正确的输出
  • 更容易更新代码
  • 防止将损坏的代码投入生产

我相信还有更多原因,但现在我就说到这里。查看下面的链接,了解更多关于测试的信息。

[## Python 测试入门——真正的 Python

在这篇深入的教程中,您将看到如何创建 Python 单元测试,执行它们,并在您…

realpython.com](https://realpython.com/python-testing/)

代码审查

奥比·费尔南德斯在 Unsplash 上的照片

代码评审的目的是通过推广最佳编程实践来提高代码质量,从而使代码为生产做好准备。此外,这对每个人都有好处,因为它往往会对团队和公司文化产生积极影响。

代码审查的主要原因是捕捉错误,尽管审查对于提高可读性以及确保符合编码标准非常有用。

一篇更深入的真正伟大的文章链接如下…

[## 代码评审最佳实践

互联网提供了大量关于代码评审的材料:关于代码评审对公司文化的影响,关于正式的…

medium.com](https://medium.com/palantir/code-review-best-practices-19e02780015f)

包裹

公平地说,这肯定是一大堆要学的东西,但出于同样的原因,它增加了数据科学从业者的价值。能够快速制作一台 Jupyter 笔记本已经不足以让你成为一名数据科学家,因为每个人都可以做到这一点。如果你想高于平均水平,你必须做高于平均水平的事情,在这种情况下,可能需要学习软件工程的最佳实践。

让我们继续 LinkedIn 上的对话…

[## Kurtis Pykes -人工智能作家-走向数据科学| LinkedIn

在世界上最大的职业社区 LinkedIn 上查看 Kurtis Pykes 的个人资料。Kurtis 有两个工作列在他们的…

www.linkedin.com](https://www.linkedin.com/in/kurtispykes/?originalSubdomain=uk)

数据科学家:21 世纪最肮脏的工作

原文:https://towardsdatascience.com/data-scientist-the-dirtiest-job-of-the-21st-century-7f0c8215e845?source=collection_archive---------4-----------------------

40%是吸尘器,40%是清洁工,20%是算命师

Icons8 团队Unsplash 上的照片

根据哈佛商业评论,数据科学家拥有 21 世纪最性感的工作。在大数据的世界里,他们采用人工智能/深度学习方法,发现无价的商业见解。

对我来说,拥有“数据科学家的头衔已经五年了,我仍然没有完全弄清楚我的哪一部分是性感的。除了可能是我新烫的头发让我看起来像个韩国 Oppa ( 通常用来指韩剧男主角)。

事实上,云的出现和企业向互联网的转移导致了数据的爆炸。这推动了一些行业对数据科学家的需求和短缺。

但是数据科学家的工作每天都需要做些什么呢?

我们可以通过分析 LinkedIn 上的招聘信息来找到这个问题的答案。我给你总结一下比较受欢迎的:

  • 了解业务和客户,验证假设
  • 建立预测模型和机器学习管道,执行 A/B 测试
  • 对业务利益相关者进行概念化分析
  • 开发算法以支持商业决策
  • 试验和研究新技术和方法,以提高技术能力

这些听起来很性感,不是吗?

除非你的工作包括处理 Kaggle 数据集,否则这些工作描述只是数据科学家的一小部分。

CrowdFlower 的以下调查结果总结了数据科学家典型的一天:

数据科学家花最多时间做的事。【摘自众筹

从上面的图表中可以看出,数据科学家的大部分时间都花在了收集数据集、清理和组织数据上。

21 世纪的高性能数据真空

数据湖是存储公司所有数据的集中存储库。它们使组织能够使用这些数据来建立机器学习模型和仪表板。不幸的是,有些人认为数据湖是数据转储场,或者是一个超级大的硬盘驱动器。

许多组织在不清楚如何处理收集的数据的情况下开始实施数据湖。“让我们收集所有的东西吧,”他们说。虽然数据湖的目的是将公司的所有数据放在一个地方,但根据具体项目需求设计数据湖仍然是至关重要的。不做计划几乎就像创建一个新的“无标题文件夹,然后将公司的全部数据复制粘贴到那里。

当您将桌面视为数据转储地时

从历史上看,糟糕的规划导致很少甚至没有定义良好的元数据,这使得任何人都难以搜索(和找到)他们需要的数据。数据科学家经常发现自己为了数据联系不同的部门。他们可能需要从各种数据所有者那里寻找有关数据的信息。仅仅存储数据而不进行分类是一个很大的错误。拥有一个有用的数据湖的关键是确保元数据定义良好。

由于数据治理或数据所有者的繁忙,他们通常是来自不同部门的利益相关者,可能需要数周时间才能获得重要数据。等待游戏结束后,数据科学家可能会发现数据是不相关的,或者有严重的质量问题。

当数据科学家最终获得数据时,他们需要花费大量时间来探索和熟悉它。他们必须将杂乱的数据重新组织成新的表格,以符合他们的项目需求。

Oleksii Hlembotskyi 在 Unsplash 上拍摄的照片

21 世纪的高需求数据看门人

每个和数据打交道的人都应该听说过“脏数据”这个术语。脏数据破坏了数据集的完整性。脏数据的一些特征是不完整不准确不一致重复数据。

数据不全是一些本质特征为空的时候。比如说你的任务是预测房价。让我们假设房子的区域对于做出一个好的预测是至关重要的,但是它不见了。这对你来说可能很有挑战性,你的模型可能表现不好。

不准确和不一致的数据是指这些值在技术上是正确的,但在上下文中是错误的。例如,当一个雇员改变了他的地址,它没有更新。或者有许多数据副本,而数据科学家得到的是一个过时的版本。

照片由杰米街Unsplash 拍摄

重复数据是常见问题。给大家分享一个我在电商公司工作时发生在自己身上的故事。根据设计,当访问者点击“领取优惠券”按钮时,网站会向服务器发送响应。这使我们能够衡量收集优惠券的用户数量。

这个网站运行得很好,直到有一天发生了变化,而我对此一无所知。前端开发人员增加了另一个当有人成功收集凭证时的响应。理由是一些代金券可能缺货。他们想跟踪点击按钮的访问者和收集优惠券的人。

此时,两个响应被发送到同一个日志表。看着我的报告工具,收集的凭证数量似乎在一夜之间翻了一番!由于我在前一天已经部署了一个模型,所以我认为我的新模型就是那么令人印象深刻。我记得给了我的小模型一个精神上的起立鼓掌,但后来,我意识到这只是重复计算。

照片由马太·亨利Unsplash 上拍摄

此外,在过去五年作为一名数据科学家,我收到的一些数据是由公司员工手工输入的。这些数据在 Excel 电子表格中;许多是不准确、不完整和不一致的。

无论数据来自人工输入还是机器日志,数据争论是现实世界中发生的很大一部分。数据科学家必须处理它。为了让监督学习发挥作用,我们需要可靠的、有标签的数据。除非数据被正确标注,否则无法建立预测模型。但是没有人喜欢给数据贴标签。

许多人将此描述为 80/20 法则。数据科学家只花 20%的时间建立模型,其余 80%的时间收集、分析、清理和重组数据。脏数据是典型数据科学家工作中最耗时的方面。

需要指出的是数据清理非常重要;杂乱的数据不会产生好的结果。你可能听说过这样一句话,“垃圾进,垃圾出”。

数据科学家在数据中游泳时确实会有所发现,但在数据科学家开始训练任何模型之前,他们必须首先成为数据管理员。数据需要清理,数据需要标记。

奥利弗·黑尔在 Unsplash 上拍摄的照片

我是一名数据科学家…

我不觉得我的工作性感。我 40%是吸尘器,另外 40%是看门人。
还有最后的 20%……一个算命的。

[## 7 个必不可少的人工智能 YouTube 频道

如何跟上最新最酷的机器学习进展

towardsdatascience.com](/7-essential-ai-youtube-channels-d545ab401c4) [## 如何用机器学习改善假期行程

用这个超棒的策略完善你的旅行计划——省时、省力、省钱!

towardsdatascience.com](/how-to-improve-holiday-itinerary-with-machine-learning-6b3cd3c79d1)

数据科学家与业务分析师。区别就在这里。

原文:https://towardsdatascience.com/data-scientist-vs-business-analyst-heres-the-difference-f0a0a1f51c9?source=collection_archive---------5-----------------------

意见

他们有多大不同?他们有什么共同的特点?

Jonas Leupe 在Unsplash【1】上的照片。

目录

  1. 介绍
  2. 数据科学家
  3. 商业分析员
  4. 差异
  5. 类似
  6. 摘要
  7. 参考

介绍

虽然你可能没有必要像比较数据工程或机器学习一样比较数据科学和业务分析,但这两个角色之间仍然有惊人的大量重叠。许多共同的目标也是一样的。然而,如何才是区别它们的地方。此外,这两个角色在技能、概念和目标方面都有一些模糊之处,从而提供了更多的重叠。下面,我将从我个人的角度概述这两种立场的细节,以及它们的相似之处和不同之处。

数据科学家

Vlad TchompalovUnsplash【2】上拍摄的照片。

数据科学家是利用机器学习算法从数据中创建模型,最终帮助企业提高效率的人。成为一名数据科学家需要具备哪些主要技能,以及他们各自的目标?

数据科学家的主要技能包括但不限于:

技能

  • Python、R、SAS 和 SQL ( 或某种形式的数据争论)
  • Jupyter 笔记本
  • 面向对象编程
  • 机器学习算法
  • 解决问题
  • 了解业务
  • 理解数据
  • 向利益相关者传达业务问题
  • 传达可能的解决方案
  • 结果和影响的交流

如您所见,数据科学既涉及技术,也涉及软技能。仅仅成为一名程序员或统计学家是不够的,还需要能够交流建立问题陈述、开发问题陈述以及向业务部门分享相应解决方案的过程。

数据科学家的主要目标包括但不限于:

目标

  • 提高业务效率
  • 使解决方案更加准确
  • 降低解决方案的成本

您可以看到,这里的目标都不一定是技术性的,它们只是最终以某种方式改进业务的要点。然而,你达到目标的方法需要专业技术。

商业分析员

Unsplash【3】上 Marten Bjork 拍摄的照片。

也许业务分析师和数据科学家最大的相似之处在于描述角色的词语本身。数据科学家被期望在他们的角色中执行业务分析,因为这本质上决定了他们的数据科学目标。一个业务分析师可能不会关注机器学习算法来解决业务问题,而是关注表面异常、变化和趋势,以及业务的关键兴趣点。

业务分析师的一些关键技能是:

技能

  • 擅长
  • SQL ( 有时是)
  • MS Office ( 以及)
  • 熟悉可视化工具( Tableau、Looker、Google Data Studio 等)。)
  • 质量保证
  • 解决问题
  • 分析思维
  • 信息技术
  • 预测
  • 会见利益相关方
  • 会见数据科学家和产品经理

这里的技能包括用于分析性地回答问题的工具。在这个角色中同样重要的是解决问题和突出业务改进的关键领域的能力。

以下是对业务分析师的一些期望目标:

目标

  • 确定 KPI(关键绩效指标)
  • 浮出水面的见解
  • 使用数据解决公司内部的问题

这里的目标更广泛,最终是指利用数据来帮助业务。

差异

Sylvie charronUnsplash【4】上拍摄的照片。

当然,这两个角色之间有一些关键的区别。最大的区别之一是机器学习仅用于数据科学家。另一个不同之处是,业务分析师比数据科学家更有可能与利益相关者沟通(有时数据科学家的工作可能更低调,不需要 那么多 会议)。这里有一个总结,你可以从中发现这些职位之间的差异。

差异

  • 数据科学融合了机器学习算法
  • 数据科学涵盖了更多的功能工程
  • 业务分析师交流并展示更多的发现(通常是)
  • 业务分析师使用不同的工具,这些工具并不总是需要编程
  • 数据科学需要更侧重于软件工程的背景
  • 数据科学往往比业务分析更具预测性
  • 然而,业务分析确实需要预测,但也更重视汇总和描述性指标
  • 所需的学校教育或培训不同/更专业

类似

Jonny Clow 在Unsplash【5】上拍摄的照片。

这两个角色有着共同的目标。每一种都需要使用类似的工具深入研究数据。沟通的过程也是类似的——与公司的利益相关者一起检查业务问题、解决方案、结果和影响。这里总结了数据科学家和业务分析师之间的主要相似之处。

类似

  • 使用数据
  • 解决业务问题
  • 与利益相关者合作
  • 使用像 Tableau 这样的可视化工具
  • 分析过去的数据,为新数据提供信息
  • 预测建模

摘要

这两种角色因公司而异。保持不变的是每个角色的目标和影响。也许最大的区别是你如何得到解决方案或表面发现的方法。一些业务分析师可能会发现自己最终会成为数据科学家,反之亦然。这取决于你对完成工作所需的技能和工具的偏好。

感谢您的阅读!我希望你觉得这篇文章既有趣又有用。请随意在下面评论您发现或体验到的数据科学和业务分析之间的一些相似之处和不同之处。

如果你想看我写的关于数据科学家和数据工程师的区别(以及相似之处)的文章,这里有链接[6]:

[## 数据科学家 vs 数据工程师。区别就在这里。

这两个角色之间的主要相似之处和不同之处将在下面概述和讨论。

towardsdatascience.com](/data-scientist-vs-data-engineer-heres-the-difference-14f7798e3432)

参考

[1]照片由 Jonas LeupeUnsplash(2019)上拍摄

[2]Vlad Tchompalov 在 Unsplash 上拍摄的照片,(2019)

[3]照片由 Marten BjorkUnsplash(2018)拍摄

[4]Sylvie charron 在 Unsplash 上拍摄的照片,(2019)

5照片由 Jonny ClowUnsplash 上拍摄,(2018)

[6] M.Przybyla,数据科学家 vs 数据工程师。区别就在这里。(2020 年)

数据科学家 vs 数据分析师面试。区别就在这里。

原文:https://towardsdatascience.com/data-scientist-vs-data-analyst-interview-heres-the-difference-4315f8306ad3?source=collection_archive---------30-----------------------

面试指南。

塞巴斯蒂安·赫尔曼在 Unsplash 上的照片。

目录

  1. 介绍
  2. 数据科学家访谈
  3. 数据分析师访谈
  4. 异同
  5. 摘要
  6. 参考

介绍

Medium 上的许多读者都希望成为数据科学家或数据分析师,因此对每个职位的面试流程都很感兴趣。以我的经验,我已经面试过几家公司的这两个职位。下面,我将详细介绍这两个角色的流程,并强调它们的相似之处和不同之处。

数据科学家访谈

数据科学家有望在其公司实现手动流程的自动化。使用 sklearn 和 TensorFlow 等库中的机器学习包,数据科学家将摄取数据,清理数据,训练和评估模型,并为最终用户输出建议或预测。一些过程集中于编码和算法,而另一部分过程集中于软技能,如开发业务问题和向最终用户解释结果。你将使用像 Jupyter Notebook 这样的工具和像 Python 和 R(有时是 SAS)这样的编程语言。

数据科学家面试可能会令人生畏,让人不知所措,但通过我下面概述的步骤,我希望能对这个过程有所启发,让你在下一次数据科学家面试中更加自信。

总的来说,这个过程包括招聘人员和招聘经理的电话筛选。然后,与团队会面进行概念和编码面试(一些面试不包括编码,而是需要对您将来在公司可能遇到的常见业务问题进行评估)。接下来,您将向另一位数据科学家或高级产品经理等高层领导成员解释您的发现。最后,你要总结你从之前的面试中学到的所有东西,并列出你最适合这个职位的理由。

数据分析师访谈

数据分析师可以查询数据库表,执行连接、子查询,并报告数据请求。您将与几个利益相关者一起收集每个请求的需求。您将使用类似 SQL 和 PostgreSQL 或其他查询平台的工具,以及 Tableau、PowerBI 和其他仪表板工具。

数据分析师访谈将分享相当多的类似步骤,尤其是在整个流程中。然而,差异和独特之处在于面试的概念和编码挑战。你应该和你的招聘人员和招聘经理通电话。然后,您将与团队中的其他数据分析师会面,讨论数据库等关键概念。之后,您将执行一个编码挑战,通常包含一些常见的 SQL 问题,需要您加入和子查询。接下来,您将向另一位数据分析师或利益相关者(如客户成功经理)解释结果。最后,你将向招聘经理讨论你之前的面试以及你对这个团队的看法,并概述为什么你应该成为这家公司的数据分析师。

异同

照片由 Maranda VandergriffUnsplash【2】上拍摄。

流程

正如您将在下面看到的,数据科学和数据分析面试有一个相似的流程。虽然过程可能是相似的,但是过程的细节可能是不同的,我将在后面提到这一点。以下是面试过程中各个步骤的共性:

共性

  • 初始招聘人员电话屏幕—与招聘人员通话
  • 招聘经理屏幕——与你未来的招聘经理通话
  • 专家概念访谈—每个角色的专家(您将参与的团队中的另一名数据科学家和数据分析师)
  • 专家编码面试—每个角色的专家(您将参与的团队中的另一名数据科学家和数据分析师)
  • 领导访谈—向非技术用户解释结果
  • 招聘经理最终面试——总结为什么你认为自己非常适合这个职位

常用工具:SQL、Tableau 和吉拉(票务平台)

差异

虽然流程是相同的,但主要的区别通常在于流程的专家部分。

—专家概念访谈

**Data Science:** Common machine learning algorithms like random forest and logistic regression for exampleCommon buckets of machine learning and data science like unsupervised vs supervised learning**Data Analyst:**Differences between joins like inner, outer, left, and right joinsSub-queriesIndexingGroup byWhere clauses

—专家编码面试

**Data Science:**Programming in Python (for loops, arrays, and functions)Programming in RProgramming and commenting code in a Jupyter NotebookSometimes, instead of a coding interview, you will have a take-home assignment that will require merging of data, exploratory data analysis and cleaning, model building, and output and explanation of results**Data Analyst:**SQL queringTableau (not coding, but a specific skill where you will need to know common functions and calculations in the popular interface)

—领导访谈

**Data Science:**Explaining models and its predictions to non-technical users**Data Analyst:**Explaining a query and its results to non-technical users

摘要

正如你所看到的,这些角色和他们各自的面试过程之间的相似之处可能比你想象的要多得多。许多相似之处源于整个面试过程,以及一些常用工具,如 SQL。其他相似之处是你在开发新项目和会见不同的利益相关者时需要知道的软技能。毫不奇怪,这些角色在专业方面存在重大差异,例如,对于数据分析师来说,更复杂的 SQL 查询和 Tableau 报告;对于数据科学家来说,则侧重于决策树和时间序列等常见机器学习算法的理论,以及用 Python 编写一些典型函数和 for 循环,这些都是您在未来的角色中会用到的。

如果您想了解数据科学家面试流程,请点击此处查看我的另一篇文章[3]:

[## 所以你想成为一名数据科学家?

以下是获得这份工作的方法。

towardsdatascience.com](/so-you-want-to-be-a-data-scientist-d42848c47895)

我的个人资料中还有更多关于数据科学和数据分析的文章[4]:

[## Matt Przybyla -中等

阅读 Matt Przybyla 在媒体上的文章。SMU 大学数据科学硕士。专业数据科学家。作者-面向数据…

medium.com](https://medium.com/@datasciencehacker)

我希望这篇文章对你有用而且有趣。感谢您的阅读!

参考

[1]照片由 Sebastian HerrmannUnsplash(2019)上拍摄

[2]图片由 Maranda VandergriffUnsplash 上拍摄,(2019)

[3] M.Przybyla,所以你想成为一名数据科学家?,(2020)

[4] M.Przybyla,中型剖面图,(2020 年)

数据科学家 vs 数据工程师。区别就在这里。

原文:https://towardsdatascience.com/data-scientist-vs-data-engineer-heres-the-difference-14f7798e3432?source=collection_archive---------17-----------------------

意见

这两个角色之间的主要相似之处和不同之处将在下面概述和讨论。

克里斯蒂娜@ wocintechchat.com 在Unsplash【1】上的照片

目录

  1. 介绍
  2. 数据科学
  3. 数据工程
  4. 摘要
  5. 参考

介绍

在我们开始之前,让我们承认这些角色因公司而异。尽管如此,数据科学家和数据工程师的每个特定角色仍然有一些通用的主题来区分他们。简单来说,每个角色的技能和工具可以看到大量的重叠,但概念和目标有很大的不同。我将更详细地讨论这两个职位之间的技能、概念、相似性和差异。请阅读下面关于数据科学和数据工程的讨论;是什么让它们相似,又是什么让它们不同。

数据科学

照片由 Ioan FUnsplash【2】上拍摄。

定义数据科学家角色的一些关键技能和概念是什么?有很多要讨论的,所以我将包括一些我个人工作过的或者在几个职位描述中看到的。数据科学家可以有不同的定义,有不同的观点,但对我来说,我认为数据科学家是一个利用数据和机器学习算法来有效解决业务问题的人。因此,根据这一定义,我将讨论相关的技能。

以下是数据科学以及数据工程方面的技能、概念、相似性和差异。

对于技能,这些用于查询数据、清理数据、应用转换、为机器学习算法准备数据,以及可视化探索性数据分析和数据科学模型的结果。数据科学家也经常使用像 Jupyter Notebook 这样的平台(或其他类似的平台)来进行研究,包括代码和注释,以一种很好的方式来可视化和组织他们正在进行的工作。

技能

  • Python、R、SQL 和 SAS
  • Jupyter 笔记本
  • 可视化——Tableau、Google Data Studio、Looker 等。

下面的这些概念是要记住的,因为数据科学不仅仅是代码和编程,而是帮助解决业务问题的角色。效率和省钱是相辅相成的,对于数据科学家来说尤其如此。这些对于任何角色都是有用的,但对于数据科学来说,目标是从机器学习算法的好处中自动化一个过程。反过来,这种模式将节省资金和时间。您需要知道特定算法是如何工作的,这样您也可以优化最佳算法。了解统计数据是很重要的,尤其是当你对一个产品进行 A/B 测试和设置实验时。

在数据科学中,最重要的是沟通能力。在查看公司数据并开始数据科学模型构建流程之前,您很可能需要与产品经理或利益相关方一起检查业务中的弱点。

概念

  • 统计数字
  • 建立业务问题
  • 用模型解决这个问题
  • 效率
  • 省钱
  • 算法如何工作
  • 沟通

下面这些相似之处是两个角色都使用的技能和工具。两者主要使用的是帮助部署数据科学模型的编程语言和工具。根据公司的不同,数据科学家可能会在部署方面做更多的工作,数据工程师也是如此。

与数据工程的相似之处

  • Python,R,SQL
  • 协作/跨职能
  • 气流
  • 火花
  • 自动警报系统

下面的差异概述了数据工程师如何关注数据的维护和开发,以及他们如何使模型或数据变得可集成。

与数据工程的差异

  • 不需要知道机器学习算法的绝对细节
  • ETL 过程
  • 大数据管道和架构
  • API 集成

数据工程

照片由杰弗逊·桑托斯Unsplash【3】上拍摄。

在一些公司,数据工程围绕数据科学过程工作,但它也可以完全独立。我将更多地讨论这两个角色和过程之间的关系。在数据科学家执行其模型构建流程之前,他需要数据。数据工程师可以帮助数据科学家(和业务中的许多其他人)收集、接收、转换和加载数据,并将其转换成可用的格式。数据库通常由数据工程师建立或增强。帮助推动数据科学模型的建议或预测的过程有时也是由数据工程师构建的。例如,数据工程师可以使用服务来存储训练和测试数据以及可以注入到新数据库表中的模型结果。

值得注意的是,有时数据工程师可以扮演机器学习操作工程师(MLOps)的角色。同样,软件工程师可以担任数据工程师或 MLOps 工程师——这真的取决于公司。

下面是数据工程的技巧和概念。相同点和不同点与上一节相同,但分别颠倒过来。

就技能而言,他们甚至与数据科学家有相似之处。然而,更多的是每个角色所关注的内容。例如,数据科学家使用 SQL 作为他们的角色,但是他们通常不创建表。

技能

  • 更侧重于 SQL
  • 可以期望了解或使用另一种编程语言,如 Java
  • 库伯内特斯
  • 码头工人

对于概念,数据工程师可能不需要处理模型本身——例如,调整参数、发现模型的新特性以及考虑模型的准确性,但是他们仍然需要熟悉模型,以便能够帮助集成。这里需要注意的是,一些数据工程师根本不接触数据科学模型。还是那句话,要看公司。

如果对数据科学和数据工程角色有任何困惑,最好的事实来源是招聘经理——他会不合时宜地安排你日常工作的基础,以及你是否更注重 SQL、Python 或机器学习部署的期望。此外,这将取决于公司的需求在哪里和是什么。

概念

  • 与服务的集成
  • 数据管道
  • 数据库

摘要

数据科学和数据工程共享的不仅仅是文字数据。技能和工具在两个角色之间是共享的,而不同之处在于每个角色各自的概念和目标。例如,数据工程师将使用 Python 以及数据科学家(或另一种编程语言),但数据工程师将使用 Python 进行脚本或集成,而数据科学家将使用 Python 访问 Pandas 库以及其他 Python 包来执行 ANOVA 以测试统计显著性。

我希望我已经向您介绍了这两个非常相似但又不同的角色的定义。这些职位变化的原因可能是因为数据科学是一门较新的学科,因此数据工程师可以像过去一样专注于更多的数据 ETL 工作,或者他们也可以与数据科学家合作来帮助构建和部署模型。

欢迎在下面发表评论,讨论作为一名数据科学家或数据工程师,你需要具备哪些技能。也许作为一名数据工程师,您根本不使用数据科学模型,而是纯粹专注于数据仓库,或者您实际上专注于从 SQL 查询中严格创建功能,这些功能最终将被注入到由数据科学家测试的机器学习算法中。

感谢您的阅读!

参考

[1]照片由克里斯蒂娜@ wocintechchat.comUnsplash(2019)上拍摄

[2]照片由 Ioan FUnsplash(2020)上拍摄

[3]照片由杰弗逊·桑托斯Unsplash 上拍摄,(2017)

数据科学家 vs 高级数据科学家。区别就在这里。

原文:https://towardsdatascience.com/data-scientist-vs-senior-data-scientist-heres-the-difference-5101cd1614fc?source=collection_archive---------30-----------------------

两种立场的异同

照片由克里斯蒂娜@ wocintechchat.com 拍摄。

目录

  1. 介绍
  2. 数据科学家
  3. 高级数据科学家
  4. 摘要
  5. 参考

介绍

本文面向希望在职业生涯中获得提升的当前数据科学家,以及将职业生涯转向数据科学领域并希望了解高级角色的界限和定义的人。值得注意的是,不是每个工作场所或公司都会提供这两个职位;然而,如果你满足高级数据科学家的特征,你也许能够向你的公司证明,为什么获得这个头衔对你和他们来说是值得的。

高级数据科学家的职位不仅仅意味着你是一个有一定经验的数据科学家。相反,这是一个需要对你的数据科学或机器学习模型对你工作的企业的影响承担不同责任的职位。

这两个职位不仅有关键的区别,而且每个角色的机器学习、商业智能和产品管理的数量也有一些有趣的区别和重叠。下面,我将讨论我在这两个职位上的经历以及区分这两个头衔的参考资料。

数据科学家

照片由克里斯蒂娜@ wocintechchat.com拍摄。

数据科学家是定义业务问题、提取数据、执行探索性数据分析、开发机器学习模型,并最终执行该模型以向最终用户显示可用结果或预测的人。虽然普通职称和高级职称在所需技能、编程语言和总体知识方面有很大重叠,但主要区别在于这两种职称侧重于什么,即它们在数据科学过程中各自方面的责任。正如您将在本节和下一节中看到的,高级职位的角色侧重于数据科学流程的开始和结束部分,而非高级职位则更侧重于同一流程的中间部分。下面,我将概述这些关键的定义特征。总的来说,主要流程按顺序通常如下:

*1\. defines the business problem (SR)**2\. develops data (SR)**3\. exploratory data analysis**4\. builds the model**5\. explains results to stakeholders (SR)*

虽然这种设置因每个公司及其各自的职位描述而异,但从我的个人经验来看,我认为这种设置通常是有意义的。

普通数据科学家职位侧重于模型构建,高级职位侧重于定义陈述并使用该模型作为解决方案,最终将在与高级领导层或公司董事会的会议中进行描述。

以下是传统的非高级数据科学家将关注的整个流程的两个部分:

  • 探索性数据分析——一旦有了数据或数据集,您将寻找缺失值、测试正态性、检查类是否平衡、特征工程等来润色您的模型输入数据。
  • 建立模型——流程的下一步是建立基础模型,不关注超参数,而是关注问题是有监督的还是无监督的,(时间序列等……)。一旦你建立了适合使用的模型和库,它将被应用到你的 Jupyter 笔记本或平台中,其中包含你所有的探索性数据分析。接下来,您将对该模型执行迭代并调整超参数,然后要么自己部署它,要么依靠机器学习工程师将该模型部署到生产中(同样,每个公司都不一样)。

高级数据科学家

照片由克里斯蒂娜@ wocintechchat.com 拍摄。

高级数据科学家能够并且应该能够执行典型数据科学家的所有任务,同时还能够更频繁地与面向业务的一方进行交互。您将与利益相关者、主题专家和公司领导层合作,以最大限度地利用该模型并对您的业务产生积极影响。

  • 定义业务问题 —虽然传统的数据科学家将专注于模型本身,但高级职位通常需要概念验证。您将向企业解释模型将推动的价值,以及可能的复杂性、所需的资源,以及谁将与预测或结果进行交互。这个角色有时可以被看作是产品经理,他组织过程以确保特定的合作者都是一致的。当数据科学在工作场所(相对于学术界)进行时,你将与主题专家、软件工程师、数据工程师和 UX/UI 设计师一起工作。这部分操作在学校里被忽略了,因为学校的主要焦点是建立模型。

您可以构建一个非常精确的模型,但是如果它不能通过自动化以前的手动流程或推动价值来帮助业务,那么您就是在浪费时间和金钱,并且该模型已经过时。

高级职位将确保整个模型是有效的,每个人都在正轨上。

  • 开发数据 —一旦通过建立业务问题陈述和解决方案证明了模型的概念,您就必须找到您的数据源。同样,这一点在学术界也没有受到太多的强调,它是你职位中极其重要的一部分,因为创建数据集可能需要几天或几周的时间。你可能需要向软件和数据工程师引用一个 API ( 应用编程接口)或者跨数据库和表执行复杂的连接。

摘要

如果我的公司没有高级职位空缺怎么办?

—如果你满足了上述条件,你应该概述你在数据科学流程中的所有步骤,以向招聘经理或领导层证明你配得上这个高级头衔。如果你像产品经理一样建立模型并管理整个项目,你应该被认可,因为这实际上是你扮演的两个角色。

是的,这些描述和例子在你的公司可能会有所不同,但总的来说,从我的经验来看,特别是查看数百份 LinkedIn 简介和工作描述,共识是一个正常的非高级职位专注于模型,而高级职位专注于同一模型如何与你的业务互动。此外,在某些地方,高级职位可以被描述为在若干年中拥有更多工作经验的人,但是随着工作经验的增加,数据科学家将采用我在上面的高级数据科学家职位中描述的流程的各个方面。

对于高级和非高级之间的正式区别,不一定有一个官方的说法,但有几篇文章和工作描述对这种描述进行了类似的总结。这里的 [4]是一篇概述高级数据科学家职位的文章,很有帮助。

我希望你觉得这篇文章有趣并且有用。感谢您的阅读!

参考

[1]照片由克里斯蒂娜@ wocintechchat.com(2019)拍摄

[2]照片由克里斯蒂娜@ wocintechchat.com(2019)拍摄

[3]照片由克里斯蒂娜@ wocintechchat.com(2019)拍摄

[4]皮达尔·科伊尔,成为一名高级数据科学家意味着什么?(2020 年)

数据科学家:适应或死亡!

原文:https://towardsdatascience.com/data-scientists-adapt-or-die-2f009ebe4935?source=collection_archive---------47-----------------------

AutoML 会帮助我们还是杀死我们?

Unsplash 上由 Steve Knutson 拍摄的前数据科学家的照片

哈佛商业评论在他们 2012 年的著名文章“数据科学家:最性感的工作”中标志着数据科学家的繁荣,随后是过去十年难以维持的需求。[3]

"..需求超过了供给。事实上,数据科学家的短缺正在成为一些行业的严重制约因素。”

麦肯锡公司&刚刚发表了一篇文章(2020 年 8 月),建议我们根据更新的自动化技术(AutoML)重新思考我们到底需要多少数据科学家。[4]

“从长远来看,仍然需要纯粹的技术数据科学家,但数量远低于大多数人目前的预测。”

这描述了我们已经走了多远https://quanthub.com/data-scientist-shortage-2020/

在每一个繁荣周期中,你都会遇到人才短缺、冒名顶替者或资质较差的人涌入的情况(例如,dot.com y2k,如果你会拼写 Java,说明你是一名软件工程师)。随着领域的成熟,工具和自动化淘汰了那些不真正合格或者没有做高价值工作的人。数据科学也不例外。

肮脏的秘密

Kristina FlourUnsplash 上拍摄的照片

不幸的是,数据科学秘密并不像名人性秘密那样令人兴奋。在这份“性感”工作的背后,是数据科学 项目 所需的大量繁重工作——其中包括:

  • 数据来源、验证和清理
  • 尝试功能组合和工程功能
  • 测试不同的模型和模型参数

大多数人认为,数据准备工作是任何 ML/DS 项目的 80 %[ 1 ],这导致了数据工程专业[2]。剩下的时间花在尝试特性和测试模型上,以挤出百分之几的准确度。这仅仅需要 大量时间——虽然经验、直觉和运气允许科学家缩小场景范围,有时最佳解决方案需要尝试许多额外的非典型(几乎是随机的)场景。一种解决方案是自动化,并使用名为 AutoML 的新型工具来利用强力计算周期。

AutoML——它像天网吗?

自动机器学习(AutoML)是一种软件,它以一种有组织的方式为你自动化重复的工作。(获取 H2O 或 DataRobot 的演示,亲自体验一下)。给它输入数据,设定目标,并在它反复研究特性、模型和参数时小睡一会儿。虽然它缺乏领域专业知识和精确性,但它用蛮力和高超的簿记/报告(当然还有一些逻辑和启发)弥补了这一点。

它何时以及是否会取代科学家是 5 年前在 KDNuggets 上进行的民意调查——最近的想法是,对我们中的一些人来说,时间很快。

https://www . kdnugges . com/2020/03/poll-automl-replace-data-scientists-results . html

当然,不是每个人都同意。

快速的雷切尔·托马斯。AI:"关于机器学习人才的稀缺以及声称其产品自动化机器学习并完全消除对人工智能专业知识的需求的公司的承诺,媒体标题经常出现。[7]**

托马斯博士似乎觉得 AutoML 是被误解的和相当数量的炒作。她提出了令人信服的观点来帮助我们理解整个 ML 循环,以及什么是 AutoML 什么不是。它不会取代专家的工作,但它确实大大增加了他们的工作——还不是天网,但给它一些时间...

那我的工作要被解雇了吗?

谷歌大脑的联合创始人吴恩达经常表示担心人工智能和人工智能导致的迫在眉睫的失业5——然而大多数分析都集中在运营和蓝领工作上。我们轻松的数据科学工作怎么办?麦肯锡描述了等待我们的可能未来:

麦肯锡在线反思人工智能人才

好的一面是,数据科学家没有被完全取代(图表显示 29%……)—但让我们关注麦肯锡的观点,重新思考所需科学家的数量和技能。当你把 AutoML 加入你的团队时,每个项目的科学家数量可能会下降(像 TARS、R2D2 或 HAL 这样的机器人),但大多数研究仍然表明,对人类(科学家)的总需求至少在未来 5 年以上将继续增加。

大量在线文章[9]清楚地表明,数据科学家并没有死。但大多数人认为 AutoML 已经成熟,甚至在今天也在改变项目和人员的构成。我们都需要发展,作为一名数据科学家,你需要学会利用 AutoML 和相关的技术进步,否则就有落后的风险。

自动化是一件好事——我们可以专注于更高价值的工作,消除无聊和重复的任务(尽管无聊和重复的工作报酬很高……)。我认为我们知道这是有道理的,当他们可以支付一个更便宜的机器人时,为什么要支付我们呢?因此,下次你在做一个项目时,问问自己,我是在做专家数据科学家的工作,还是我的日子屈指可数了?

“请真正的数据科学家站起来好吗?”

净外卖——DS/ML 的未来是光明的,但你需要拥抱变化,否则你将从数据科学家变成 死亡的 科学家。“反抗是徒劳的”——但在这种情况下,同化会有回报。

参考和启示

[1] Ruiz,“80/20 数据科学困境”——https://www . infoworld . com/article/3228245/The-80-20-data-science-dilemma . html

[2] 安杰洛夫,《数据工程师的崛起》——https://towards Data science . com/the-Rise-of-the-Data-strategister-2402 Abd 62866?_ branch _ match _ id = 764068755630717009

[3] HBR 最性感的工作文章——https://HBR . org/2012/10/data-scientist——21 世纪最性感的工作

[4]麦肯锡关于人工智能人才的再思考—https://www . McKinsey . com/business-functions/McKinsey-analytics/our-insights/re thinking-AI-Talent-strategy-as-automated-machine-learning-comes-age

5https://www.youtube.com/watch?v=aU4RQD-莱克吴恩达对乔布斯和艾的看法

[6]回顾 2015 年 AutoML 上的民意调查—https://www . kdnugges . com/2020/03/Poll-AutoML-replace-data-scientists-results . html

[7] FastAI 的 Rachel Thomas 谈到了 AutoML 的宣传,ML 科学家做了什么以及 AutoML 能做什么—https://www.fast.ai/2018/07/12/auto-ml-1/

[8]对科幻人工智能/机器人的各种引用——星际争霸中的 TARS,2001 年的 HAL,星际迷航中的 Borg 同化,当然还有终结者的天网。

[9]关于汽车与人类的各种文章 KDNuggetsWiredMedium

数据科学家和权力伦理,第一部分

原文:https://towardsdatascience.com/data-scientists-and-the-ethics-of-power-ae91e6dd188?source=collection_archive---------26-----------------------

数据科学家拥有什么样的权力,有什么样的道德含义?

克林特·帕特森在 Unsplash 上拍摄的照片

到现在,提到算法如何有偏见(尽管更准确地说,训练数据有偏见),或者人工智能如何被用来系统地歧视某些群体或阶层的人(例如,通过'标记)。最近一些著名的例子包括麻省理工学院前媒体实验室主任伊藤穰一的《各种宣言》、 抵制缩减 等,这些文章考察了人工智能和人工智能的社会应用中固有的伦理问题。

同样,计算机科学家 Joy Buolamwini 和 Timnit Gebru(也来自麻省理工学院)发表了性别阴影:商业性别分类中的交叉准确性差异,调查了“交叉”群体(如黑人女性)面部识别系统的准确性差异。

这些都是很好的例子,说明拥有多元化的声音如何有助于更好、更公平地使用人工智能,以及更好地发挥民主的作用。约翰·杜威会点击“喜欢”按钮。

检查人工智能/人工智能伦理的各种近期作品;来源:作者

但是我仍然觉得在关于伦理 AI/ML 的一般学术和流行讨论中存在差距,特别是数据科学的伦理。在这种讨论中,焦点往往集中在技术上,而不是构建、维护和使用它的人。我们需要研究数据科学家在社会中的角色以及由此角色衍生的道德责任,尤其是在跨国公司环境中,在这种环境中,物理边界不适用,但一般数据保护法规适用。

责任的新范式:积极数据科学

我们需要一剂 Karwat 等人(2015) 所说的活动家工程。我想到了类似的东西:激进的数据科学。这是对激进数据科学基本原则的第一次尝试:

活跃的数据科学家既聪明又谦逊,足以知道数据科学的工具和方法无法独自解决他们面临的问题。活跃的数据科学家认识到何时需要其他手段,如社会或政治行动,来解决问题,如 AI/ML 中的“偏见”。激进的数据科学家明白,他们并不是独自工作和生活,独立于更广泛的社会群体和政治体系,拥有自己的传统和历史,各种社会实践从中获得意义。活跃的数据科学家提醒自己,他们不是独立的、相同分布的数据点,而是更像是法律、社会、文化、经济和道德信仰和实践的复杂、互联网络中有肉体覆盖的、有位置的和有意识的节点,它们本身潜在地受到数据科学本身活动的影响,并通过数据科学本身的活动构成。

因此,活跃的数据科学家在开展工作时,会认真、自觉地对待他们在这个网络中的角色以及相关的期望、规范和责任。他们意识到,除非面对我们集体道德想象中的“应该”,否则当前的“是”有可能保持不变。

如果你对“是-应该”的区别及其在数据科学中的作用感兴趣,你可能想看看我的另一篇文章算法的不公正和事实-价值的区别。无论如何,现在让我们进入这篇文章的主题。我将不得不在另一篇文章中发展激进数据科学的想法。

让我们关注人,而不是技术

令人惊讶的是,对于科学家在我们的数字社会中拥有的集体权力数据以及这种权力的伦理含义,几乎没有研究。

请注意我是如何表述上述语句的。我没说算法有力量。我说数据科学家有。数据科学家是负责决策的道德代理人,而我们,全球互联网平台的用户,是他们的道德病人。但是,作为道德病人,我们有什么权利?作为道德代理人,数据科学家对我们有什么义务?这就是我们需要解决的问题。这样做的一部分将需要弄清楚世界各地的数据科学家所掌握的权力的范围和程度。

各种责任

责任的概念在哲学上是一个棘手的问题。首先,我们可以区分因果责任道德责任。因果责任意味着你的行为在时间上接近某些(负面)影响。在法律术语中,当确定责任问题时,我们称之为“近因”。例如,您可能将招聘分类算法的一些代码推送到 Github repo 中,这些代码与您公司的其他数据科学家团队共享。当您的代码最终部署到生产环境中时,它会导致性别歧视。你对代码的推动是导致这个结果的原因。这是一个进一步的法律决定,你的行为是否实际上是这个结果的近因。很可能不是。

道德责任是一个不同但相似的问题。道德责任意味着承担责任。从上述意义上说,我们可能负有因果责任,但对某些行为不应受到指责。例如,你的老板用枪指着你的头,告诉你要更新功能,否则后果自负。在这里,我们不能责怪你这样做,尽管严格地说,你对所造成的伤害负有(某种程度上的)因果责任。正如你可能已经发现的那样,自由意志的问题决定了可责备性的问题。在实践中,因果责任和道德责任之间的区别是模糊的,因为社会和政治压力决定了责任的归属。在日常语言中,我们倾向于将这两种意思混为一谈。我们为此付出的代价是道德混乱。

然而,我们是积极的数据科学家,我们不害怕含糊或复杂。我们没有回避这些问题,而是直面它们,进行辩论和思考。

关注算法的责任是一个类别错误,就像说“这食物尝起来很帅”或者“计算机有感情”指责一个算法“有偏见的人工智能”就像我指责我的咖啡桌,因为我的脚趾踢到了它的一条异常倾斜和隐藏的腿。我的咖啡桌没有选择坐在我客厅里的位置;我选择了。在应用数据科学的情况下,一些决定收集这些数据,以这种方式测量它们,聚合,清理,并以某种方式对它们进行降维。一些人员使用交叉验证选择了 XYZ 车型进行比较。良好的数据科学培训包括学习如何做出良好的数据科学选择。正如我上面试图说明的,自由选择意味着(道德)责任。

自动化 ML 和道德外包

即使在所谓的“自动化 ML 解决方案”的情况下,一个选择而不是选择,这本身就是一个选择。而且通常是坏消息。抱歉亚马逊,谷歌,微软。如果你是一个数据控制者并且你不理解 ML 是如何工作的,你可能不应该在你的业务中使用它。事实上,如果你不明白它是如何工作的,我几乎可以向你保证,一个聪明、年轻的物理学毕业生,一份 MS Excel,以及两周 Youtube 上关于 vlookups 和宏的教程,就能让你 99%地做到这一点。

需要明确的是,当输入数据不是个人数据时,使用自动化的 ML 并不一定在道德上有问题。但是,如果您的业务依赖于个人数据的收集和处理,那么解释为什么需要自动化解决方案的责任就落在了您这个数据控制者的身上。请注意,GDPR 明确处理了这个问题——它被称为 【自动个人决策(或分析)】——并给予数据主体明确的选择退出的权利(参见上文链接的第 22 条)。

我们不能将道德责任外包给机器,因为如果我们沿着因果链追溯足够远,我们最终会发现一个人在某个地方做决定。在这一点上,我们必须问这个人是否可以不这样做。如果不是,他们只是因果责任。如果是这样,他们在道德上是无可指责的。然而,有一点是清楚的:

人们不能用“黑匣子”的借口来逃避道德责任的问题。

请参见 Rudin (2019): 停止解释高风险决策的黑盒机器学习模型,改用可解释模型 。在第一位使用黑盒算法的决定受制于道德判断。例如,一个人可以进行什么样的道德计算,使他相信准确性比可解释性更重要?相反,我们应该把辩论的焦点放在编写和部署算法的人的责任上,而不是比特和字节本身。

我们需要复杂网络和规模的新伦理

在这一点上,不被看好的德裔美国技术哲学家汉斯·约纳斯在他 1979 年的书中写道,所有迄今为止发展的伦理体系都需要更新,因为他们错误地假设“die Reichweite menschlichen Handelns und daher menschlicher Verantwortung is eng umgeschrieben。”【翻译:人类活动的程度以及人类的责任可以被狭义地定义

乔纳斯的观点是,传统的伦理学方法,通常基于功利主义或道义论(基于主体)的考虑,是在完全不同的社会条件下发展起来的。在信息时代,小的局部原因可以产生全球性的影响,正如我们从新冠肺炎疫情看到的那样。错误信息可以在世界范围内迅速传播。一个数据科学家在印度的工作可以影响欧洲或美洲的数亿个数据主体。

所以,在乔纳斯之后,我认为是时候重新审视伦理了。我们必须发展一种数据科学的伦理,这种伦理可以作为行动指南,例如,亚马逊、脸书或谷歌等平台上的分类算法可以影响全球潜在的数十亿人的在线体验。我们已经在脸书的情绪传染实验中看到了量表的道德重要性,该实验与《PNAS 国家科学院学报》的一篇社论表达了关注。简而言之,在数字网络和监控资本主义时代,是时候重新思考伦理了。

约翰·多恩 1623 年的诗《沉思》非常感人地抓住了这种情绪(并为海明威最伟大的著作之一提供了书名):

没有人是一座孤立的岛屿;每个人都是这块大陆的一部分。如果一个土块被海水冲走,欧洲就少了,就像一个海角,就像你的朋友或你自己的庄园一样。任何人的死亡都是我的损失,因为我与人类息息相关;因此永远不要派人去打听丧钟为谁而鸣;它为你而鸣。

什么是权力?

在这一小段中,我不想把重点放在明显的涉及身体力量或暴力的权力形式上。正如米歇尔·福柯在《T2》中指出的,在中世纪的欧洲,犯罪被认为是对国王权力的个人侵犯。罪犯的尸体实际上是王室的财产,可以在公共绞刑架上被拉走、分尸、砍死和摊开。国王“拥有”罪犯的身体。这是压制的力量。

这不是科学家拥有的那种权力数据。大多数人都是善良、谦逊的人,担心对社会公正产生积极影响和贡献。这与其说是不良意图的问题,不如说是激励错位的问题:问太多问题对你的工作安全感不利。见鬼,即使是德高望重的统计学家 RA Fisher 临终前也在为烟草公司辩护吸烟致癌的指控:

“不幸的是,大量的宣传正在发展,以使公众相信吸烟是危险的……也许很自然的是,应该努力去怀疑提出不同观点的证据。”

不,数据科学家拥有的那种力量更像是一种无形的力量,福柯在他的概念话语中捕捉到的那种力量。这是一种无形的力量,因为亚马逊、谷歌或脸书的大多数普通用户(实际上,没有人会阅读这篇博客)不知道算法是如何工作的,甚至不知道数据科学家是做什么的。我可以肯定地说,至少对我妈妈来说是这样,可能对你妈妈也是这样。但是仅仅因为话语是无形的,不可见的,并不意味着它的效果也是不可见的。话语的影响可能非常真实。这种不可见性的另一面意味着,只有那些适应这种不可见性的数据科学家才能察觉到它,并对此采取行动。

作为话语的权力

在福柯的分析中,权力不是其持有者的财产,而是反映了个人或群体之间无形的社会关系。对于福柯来说,话语是一套(隐含的)规则,为知识的分类和归类制定了规范。从这个意义上说,话语定义并设定了评估对象之间关系的规则。这是一种决定和定义什么算什么的权力?被贴上神智正常被贴上疯子?这些社会标签很重要,因为它们决定了谁会被送进精神病院(精神病患者),谁会被判死刑(杀人犯)。如今,这些标签决定了谁获得哪种服务,或哪种产品,以什么价格,在什么用户体验配置中。

福柯的洞察力在于认识到,拥有权力意味着能够给人和事物贴上标签,然后在这些标签的基础上,根据某些规范对待它们。福柯指出,我们越来越依赖“专家”的指导来规定这些规范,并从什么是越轨中定义什么是正常。他担心,在这样一个社会中,个人——这些标签和分类的对象——可能最终会将这些标签内在化,从而实际上压抑自己。正是在这一点上,当权力关系完全内在化时,权力才真正达到顶点。恰恰是在权力最不可见的时候,它才是最强大的。这一观察结果与数据科学家的工作直接相关。

希望您现在看到了这种权力的概念与数据科学家在个人数据的基础上对数据主题进行聚类、分类和分段的日常工作之间的关系。我们已经从通过体罚(压制性权力)从字面上表达权力,到现在使用身体的权力——以行为大数据的形式——来设定话语的术语,定义什么是正常的和异常的,并将这些分类用于一些经济目的(福柯称之为“生产力”或“生物权力”)。一直以来,驱动这一过程的大部分人类“燃料”(BBD)都幸福地不知道发生了什么。

科学话语与后现代状况

甚至在 20 世纪 70 年代,法国哲学家们就奇怪地意识到技术作为一种话语是多么强大。也许这要归功于万维网的前身,法国人发明的迷你电话。例如,在 1979 年,江泽龙·利奥塔出版了《T2 的后现代状况》,他在书中写道:

“科学知识是一种话语。公平地说,在过去的 40 年里,“领先的”科学和技术与语言有关:音韵学和语言学理论、通信和控制论的问题、代数和信息学的现代理论、计算机及其语言、翻译问题和计算机语言兼容性领域的探索、信息存储和数据库问题、远程信息处理和智能终端的完善、悖论学。”

如果你想知道,悖论学是研究表面上的悖论,但却有真理价值。哥德尔的不完全性定理就是一个最好的例子。总之,利奥塔在这里的要点是,与现代工业时代不同,在后现代时代,知识现在是“生产力的主要力量”我还想在这里补充一点,在后现代时代,权力——以话语的形式——是全球信息网络规模的函数。

认识到数据科学家所拥有的知识采取了大量行为大数据的形式,并不需要很大的推理飞跃,这些数据为四大科技公司的机器学习算法提供了燃料。

权力移交还是权力移交?

在继续讨论之前,我们也许应该停下来澄清一下我们讨论的主要术语。围绕权力的争论的关键实际上是它是否应该被认为是的权力还是对【】的权力。我是什么意思?

我的意思是,权力是否应该被理解为 1)只有在物理上或社会上实现时才存在的东西——的权力;或者 2)不管是主观体验还是物理实现都存在的东西——力量。换句话说,它是必须被实际运用才能存在的东西吗(即,它是陈述性的吗?)还是更像是一种潜在的能力(即无论是否有人经历过都存在)?

围绕权力的另一个复杂问题是,我们对权力的概念可能会受到我们的理论和政治假设的影响。具有讽刺意味的是,正如马克思、尼采和其他人早就指出的那样,阐明关于权力和权力关系的想法的行为本身可能是由我们社会中当前运作的权力关系塑造的,就像一种福柯式的话语。我们可能无法逃脱话语的语言和概念的限制。

试图定义权力

以下是社会学家史蒂文·卢克的重要著作《权力:激进观点 》中关于权力的一些有影响力的定义。一些定义将这一概念理解为的权力,而另一些定义更多地将其视为的权力。挑一个看起来最适合科学家可能拥有的那种能量数据。我们需要从某个地方开始辩论。

史蒂文·卢克斯:

“[权力]是一种潜力,而不是现实——实际上是一种可能永远不会实现的潜力。”

汉娜·皮特金:

“[权力]是一种……使某人有能力做某事的东西。权力是能力、潜力、能力或必要手段。”

罗伯特·达尔:

"在某种程度上,A 对 B 有权力,他能让 B 做一些 B 不会做的事情。"

米歇尔·福柯

“如果我们谈论权力的结构或机制,那只是在我们假设某些人对其他人行使权力的范围内。”

马克斯·韦伯:

“[权力是]一个社会关系中的一个行动者不顾阻力而能够实现自己意愿的可能性……”

汉娜·阿伦特

“[权力]不仅对应于人类行动的能力,也对应于人类协同行动的能力。权力从来不是个人的财产;它属于一个群体,只要这个群体团结在一起,它就存在。”

伯特兰·罗素:

“[力量]是预期效果的产生。”

我将在第二期继续这篇文章。在那篇文章中,我将检查上面的一些定义,并查看一个旨在捕捉现代数据科学家角色的特定权力公式。最后,我们将探讨道德主体(集体)责任的条件。

就目前而言,

这些公式中有哪些适合四大科技公司之一的数据科学家的角色?

参考资料:

福柯,M. (2012)。规训与惩罚:监狱的诞生。复古。

乔纳斯·h .(1987 年)。这是一项基本原则。这是一种技术伦理。

Lukes,S. (2004 年)。权力:一种激进的观点。麦克米伦国际高等教育。

利奥塔,J. F. (1984)。后现代状况:一份关于知识的报告。明尼苏达大学出版社。

[1]https://priceonomics . com/why-the-father-of-modern-statistics-not-believe/

[2]亲爱的读者,既然你已经了解了作为话语的权力,你就可以开始注意到它在你周围的社会世界和工作中的微妙影响了。

数据科学家来自火星,软件开发人员来自金星(上)

原文:https://towardsdatascience.com/data-scientists-are-from-mars-and-software-developers-are-from-venus-part-1-8dde19fb2eef?source=collection_archive---------24-----------------------

数据科学家来自火星,软件开发人员来自金星(上)

软件与模型

图 1:数据科学家来自火星,软件开发人员来自金星

火星和金星是非常不同的行星。火星的大气层非常稀薄,会变得非常冷;而金星的大气层非常厚,会变得非常热——热到足以熔化铅!。然而它们是离我们最近的姐妹行星。他们也有许多相似之处。两者的大气中都有高浓度的二氧化碳,并且暴露在没有保护磁场的太阳辐射下。

软件工程师和数据科学家来自两个不同的世界——一个来自金星,另一个来自火星。他们有不同的背景和思维方式,处理不同的问题。他们也有许多共同之处。在这篇和随后的博客中,我们将着眼于它们之间的主要区别(和相似之处)以及为什么这些区别存在,以及我们需要在它们之间建立什么样的桥梁。在这篇博客中,我们探索了软件和模型之间的根本区别。

软件与模型

在传统的程序设计中,人们为计算机提供逐行指令(通常称为算法)来处理输入数据,以产生与给定软件规范相匹配的期望输出。逐行指令可以是许多计算机语言中的一种,例如 Lisp、Prolog、C++、Java、Python、Julia 等。

在数据科学中,提供输入数据,并且在某些情况下(例如,受监督的机器学习)提供输出数据的样本,以构建能够识别输入数据中的模式的模型。与传统编程不同,数据科学模型通过提供输入数据(或输入和输出数据)来进行训练,以识别模式或做出推断。经过充分的训练、验证和测试后,他们对新数据进行预测推理。

模型是一种正式的数学表示,可以应用或校准以适应数据。Scott Page 提供了许多模型的例子,以及如何用它们来做决策。模型可以是机器学习模型、系统动态模型、基于代理的模型、离散事件模型或许多其他不同类型的数学表示。在本文中,我们将主要关注机器学习(ML)模型。

图 2:软件和模型定义

软件和模型在五个关键方面有所不同。这些尺寸如图 3 所示。

图 3:软件和模型之间差异的五个关键维度

输出

软件的输出是确定的。例如,考虑一种用于对数字数组进行排序的算法(例如,bubblesort)。bubblesort 算法将一个数字数组作为输入,通过一系列步骤迭代产生一个按升序或降序排序的输出数组。对于任何给定的数组,bubblesort 算法都会产生一个排序后的数组作为输出。其输出不存在不确定性。如果程序已经被正确测试,算法将总是产生结果,并且结果将是 100%准确的。

相比之下,以一个已经在大量图像上训练过的深度学习模型为例,它能够识别不同品种的猫。当模型被提供作为猫图像的输入时,它使用该模型来预测猫的品种。然而,它可能不总是提供 100%准确的答案——事实上,准确性往往低于 100%。图 3 说明了深度学习模型的输入、深度学习网络层和输出。该模型预测图像包含一只虎斑猫,准确率为 45%,可能是一只埃及猫,准确率为 23%。换句话说,来自模型的预测通常是不确定的。这种预测的不确定性对于企业来说是一个难以把握的概念。我们将在随后的博客中回到这个维度对模型开发的影响。

图 3:深度学习图像识别模型

决策空间

软件和模型之间的第二个区别是决策空间。我们所说的决策空间是指软件或模型用于决策的环境。当我们构建软件时,我们通常有一个被编码为算法的规范或用户需求。软件经过测试,完全测试后即可使用。软件被执行以产生结果。这个决策空间是固定的或者是静态的。如果用户的需求改变,算法必须被修改或重建和测试。没有算法学习或修改自身的承诺。图 4 展示了软件如何被使用的背景(改编自关于预测机器的书中的模型使用方式)

图 4:软件决策空间

说到模型,决策空间更加动态。考虑一个基于机器学习的聊天机器人,它已经被训练为提供与智能手机相关的查询的初级支持。当模型被训练时,它将被训练有关于不同智能手机的品牌、型号、配件的历史数据。一旦部署,聊天机器人将能够在市场上的所有智能手机上回答客户的查询。让我们假设,当聊天机器人无法回答超过一定准确度的查询时,它会将查询发送给人工客户服务代理。这种聊天机器人在几个月内可以正常工作,但当市场上推出新的型号和配件时,聊天机器人将无法响应客户的查询,并将越来越多的呼叫逐步转移到人工代理,最终使聊天机器人变得无用。

模型依赖于历史数据,当历史数据不再相关时,需要用更新的数据来刷新它们。这使得模型运行的环境更加动态。虽然用户需求或软件规格也可能发生变化,但它们发生的频率较低。此外,当规范改变时,也不期望软件能继续运行。在模型的情况下,有一个明确的预期,即当模型的性能恶化时,至少我们会得到这种恶化的警告(通常称为模型漂移),或者最好的结果和新数据被用于持续改进模型(我们将在后续的博客中回到这个持续改进的问题)。图 5 展示了如何使用模型的背景。注意从结果到训练的反馈循环(红色虚线是从预测机器的原始图表中添加的,以示强调)。正是这种反馈过程使得模型的决策空间更加动态。

图 5:模型决策空间

推理

传统软件通常使用演绎推理机制,而机器学习模型基于归纳推理。如图 6 所示,软件规范作为开发代码的理论。代码可以被看作是假设,需要用基于观察的理论来证实。观察只是代码产生的输出,需要根据规范重复测试。

模型是从观察数据中得出的模式。初始模型的作用类似于假设,需要迭代地改进以确保模型与观察数据最匹配。经过验证的训练模型捕获了数据背后的理论。需要足够小心以确保模型不会过度拟合或欠拟合数据。

由软件完成的从理论到观察的转变可以说比由模型完成的从观察到理论的转变更容易。这也突出了围绕第一个维度中讨论的输出的确定性/不确定性的挑战。

图 6:软件和模型中的推理

显色法

软件开发的过程也从根本上不同于典型的模型开发方式。软件开发通常遵循瀑布方法或者敏捷方法。瀑布方法经历了从规范到设计到编码到测试和部署的一系列步骤。在敏捷方法的情况下,软件开发过程是迭代的,并且通常包含一套以用户需求和自组织、跨职能团队为中心的原则。软件开发通常需要一到四周的冲刺。每一个连续的 sprint 编码附加的功能,导致发布给用户的最小可行产品。

模型开发过程需要遵循稍微不同的方法。数据的可用性、质量和标签,以及估计所需精度或更一般的算法性能的难度,意味着模型开发需要采用组合方法。数据科学家需要开发大量模型,这些模型的子集可能符合性能标准。因此,模型开发过程需要遵循更科学的实验、测试过程,并从这些实验中学习,以完善下一组实验。这种假设-测试-学习的过程并不适合敏捷软件开发生命周期。在随后的博客中,我们将重新审视模型开发过程,以及它如何与敏捷方法集成。

心态

到目前为止,我们提到的四个维度清楚地将构建软件的人和构建模型的人的思维模式分开。软件开发人员通常有一种工程思维模式——他们致力于架构蓝图、不同组件之间的连接,并且通常负责生产软件。软件工程师通常具有计算机科学、信息技术或计算机工程背景或教育背景。他们开发创建数据的软件产品。

另一方面,模型开发人员有更多的科学思维——他们从事实验,更擅长处理模糊性,通常对创新而不是生产模型感兴趣。一个数据科学家是一个用编程来分析数据和开发数学模型来增强他们的数学和统计学背景的人。他们使用数据来获得洞察力并影响结果。

在随后的博客中,我们将看到这些差异在软件和模型如何在组织中开发的含义。我们还将详细研究模型开发过程,它们如何与敏捷软件开发相集成,以及像 ModelOps 和 MLEngineers 这样的新角色的出现。

作者: 阿南德·s·拉奥约瑟夫·沃利斯

数据科学家是新的投资银行家

原文:https://towardsdatascience.com/data-scientists-are-the-new-investment-bankers-149e80d86ba2?source=collection_archive---------5-----------------------

意见

21 世纪初,我在一所顶级商学院上学时,我所有的同学都想成为投资银行家

来自 Pexels驼鹿照片

这是一篇观点文章。我很想在下面的评论中听到你的想法。

在本世纪初就读于一所顶级商学院时,我们都想成为投资银行家。

快进 10 年,每个人都想成为数据科学家。

他们的共同点比你想象的要多。

数据科学家和投资银行家都是多面手

数据科学是编码、统计和商业的结合。我们通过建立数据模型来解决问题,然后将结果呈现给决策者。

投资银行家产生“投资”想法,用金融模型支持它们,并向客户推销。

在前一种情况下,数据几乎总是专有的。工具包括 python 和用于分析、可视化和 ML 的相关包。后者大量使用付费数据源,如彭博、路透社和 Capital IQ。工具包括用于自动化的 excel、SAS 和宏。

两者都提取、清理、建模和分析数据,然后呈现结果。

虽然 IB 不太技术性,但我会提出数据科学的未来也不太技术性的观点。

投资银行包括各种各样的活动,如交易、并购和融资。

没有编码背景的商科毕业生正在转向数据科学

商学院毕业生经常向我寻求进入数据科学领域的建议。我也遇到了一些前银行家,他们现在在初创公司担任分析职位。

在某些时候,数据变得很酷,银行削减了员工数量,出现了一些金融科技初创公司。商学院随后跟进分析流。

2008 年金融危机之前,“数据科学”还不是一个词,商科毕业生都想去华尔街工作。非理性繁荣制作了如下荒谬的视频,我们会在金融课上观看。

但是时代变了。现在正是数据科学如此受欢迎。

数据科学正在成为一种商业角色

数据科学是一个总括术语,用于许多涉及数据的角色。

但如果你从中减去其他离散的工作,如人工智能研究,ML 工程,数据工程和软件工程,剩下的看起来更像是商业/分析角色。

概念化的问题,解释数据,可视化的结果,并向非技术利益相关者展示。在某种程度上,这就是投资银行家的工作。

随着数据科学的成熟和分析基础设施通过 SaaS 开箱即用,我们将看到这一趋势加速发展。对技术感兴趣的人可能会选择软件工程,而 MBA 类型的人会填补数据科学的空白。

两者都是外表光鲜,但内心却是痛苦的

数据科学被宣布为 21 世纪最性感的工作。但有趣的是,这项工作的很大一部分变成了数据争论。

1987 年原版《T2》中的戈登·壁虎说服了整整一代金融毕业生进入银行业。但现实并不像“戈登壁虎”那样,更多的是在周末建造滑梯甲板,更新金融模型直到午夜。

你可以在这两方面都赚很多钱

句号。

以下是一些公司对 IB 分析师的薪酬。右边的“高”数字意义重大。考虑到“分析师”是投资银行图腾柱上的最低级别,这一点更令人印象深刻。

玻璃门:美国投资银行分析师工资

数据科学也是如此。

玻璃门:美国数据科学家的薪水

数据科学暂时就业多,竞争少。但我很想知道,整整一代人都想进入这个领域,这对他们的薪资会产生什么影响。

如果你不进入管理层,这两种工作都没有前途

脸书员工的平均年龄是 29 岁。

超过 30 岁就不能成为投行分析师。

一个有家庭的人不会整夜熬夜调整一个新的模型或纠正沥青书上的错别字。但是一个没有爱好的 25 岁的人往往会。我跑题了,但我的一位前银行业同事曾“吹嘘”说,在华尔街工作时,他在桌子底下放了一个睡袋。

这两种职业都是“数字处理器”。虽然深领域的专业知识很重要,但有效性在某些时候会停滞不前。

要在这些环境中取得长期成功,需要进入管理角色,管理人员和项目,聪明地工作和授权,以及做更多的销售。

我将此与软件开发进行对比。虽然它也遭受年龄歧视,但大公司通常有个人贡献者轨道,这些轨道逐渐成为非经理人员的架构师角色。

科技公司是新的银行

在 Apple Pay 和脸书的 Libra 之间,科技公司正在变成银行,拥有金融基础设施。

此外,考虑到北美是落后的曲线。腾讯旗下的微信支付被中国 80%的中小商户使用。

在我们的社会中,任何拥有我们共同的财务和浏览历史的公司都在决策桌上拥有一个事实上的席位。那是很大的力量...这让我想起了银行。

结论

与其说这是一次严肃的学习,不如说是一次思考练习。

尽管如此,在金融和人工智能的交叉领域工作了几年后,我看到越来越多的前银行家和准银行家进入科技领域并取得成功。

随着银行部门自动化的升温,以及“技术”角色变得不那么“技术”,我认为我们会看到更多的金融专业人士进入 PM 和数据科学角色。

每个人都想做数据科学。

数据科学家,经常问自己:那又怎样?

原文:https://towardsdatascience.com/data-scientists-ask-yourself-often-so-what-69a7ec5895be?source=collection_archive---------68-----------------------

多年前我曾在一家全球管理咨询公司工作。作为一名新同事,当我展示我的工作成果时,我经常会停下脚步说,“真有趣。但是什么是 那么什么是这里的

“那又怎样”是几件相关事情的简写。

  • 这里有什么可操作的吗?
  • 因此,我们应该告诉客户怎样做与众不同
  • 如果我们继续沿着这条路走下去,会让我们更接近最终目的地吗?

新同事很快养成了在展示任何东西之前考虑他们的发现的习惯。虽然开始时很痛苦,很卑微,但这被证明是一个非常有用的习惯。它帮助我们避免了“沸腾的海洋”,在时间压力下表现得更好,并使我们更有效率。

我认为数据科学家会从培养这种心态中受益。

数据科学工作涉及的活动充满了分散注意力的机会。获取数据,探索数据了解变量之间的关系,制定问题,创建常识基线,构建模型,调整超参数等等。

优秀的数据科学家往往有求知欲,这当然是一件很棒的事情。但这也意味着他们很可能捕捉到路边闪亮物体的微光,并跟着它进入兔子洞。虽然这几乎总是智力上的乐趣,但有时有用,有时没用。

为了确保你明智地使用你的时间,你应该定期停下来问自己,“这里有什么 那么这里有什么 ?”。

我能从中得到什么具体可行的东西吗?它是否让我更接近解决我正在研究的终极问题?

你对“那又怎样”这个问题的回答不必详细或精确。它只需要通过一个直觉检查,即至少有一个从你当前的痴迷到有用的东西的概念路径。如果你找不到路径,你应该重新评估你是否应该把你的注意力转移到别的事情上。

当你开始处理一个新问题时,这个习惯特别有用,尤其是由别人提出并呈现给你的问题。当你试图理解并明确需要解决的问题时,你可能会意识到所定义的问题实际上不值得解决,因为其他的事情才是瓶颈,需要首先解决。

拥有一个“所以是什么”的心态能让你更快地理清思路,另外,还能在组织中树立你作为一个务实、思路清晰的数据科学家的声誉。

尽管如此,一个重要的警告。

适度地问“那又怎样”。我不是建议你成为一个毫无幽默感的机器人。

去你的好奇心带你去的地方可能是有用的——你可能会在随机探索中偶然发现一些有价值的东西。更重要的是,这对一个人的幸福显然是必要的。如果我不能随意检查东西,漫无目的地发挥创意,我会发疯的。

所以,探索,跟随你的好奇心,享受乐趣。但是有一个后台进程在你的大脑中运行,它会周期性地弹出并询问“什么是 ,那么什么是 ”。

数据科学家们,当心新世界!

原文:https://towardsdatascience.com/data-scientists-beware-of-the-new-world-9752df4c5b6e?source=collection_archive---------70-----------------------

意见

基于微扰理论解决 COVID19 时代分析问题的框架。

埃德温·胡珀在 Unsplash 上的照片

数据科学是一项令人谦卑的工作,因为大多数时候,数小时的创造性和深思熟虑的建模在现实面前会导致令人失望的结果,因为现实并不关心我们的模型。

我预计,在接下来的几个月和几年里,我们在进行分析练习和建模时应该更加小心。

特别是,我们如何处理数据生成分布函数的扰动?

COVID 之前/之后思考世界的框架 19

COVID19 前后世界的四个阶段

为了理解这种扰动的影响,您可以将时间轴分为四个阶段:

  • 第一阶段:均衡 A,前 COVID19 时代,用 2017 年的数据训练你的模型几乎和用 2018 年的数据训练一样好。
  • Phase2: 冲击波、COVID19 和隔离时代,此时所有的赌注都结束了。这是一片混乱,每天都在改变指导方针,医疗保健系统被一种新的疾病所淹没,许多零售和餐馆停业,交通减少,等等。
  • 第 3 阶段:后冲击波时代,第二波颠覆来自于尝试开放业务和管理 COVID19 对业务的影响,这些业务正在努力应对新的规范和新的消费者行为。例如,在医疗保健领域,所有被推迟的程序(诊断)都将导致医疗保健需求的高峰。这个系统仍然不稳定,远远没有达到平衡。想一想实验室和放射程序的更长等待时间及其对消费者的影响。医疗系统将试图自我修复,管理不堪重负和超负荷工作的医生和护士的能力。

(均衡 B!=均衡 A),欢迎使用新的数据生成分布函数,其中可能你的 2018 年(或 2020 年)数据与你的 2021 年建模不相关。

  • 第四阶段:均衡 B(均衡 B!=均衡 A),我们很可能不会回到之前的均衡。我们过去的一些数据点对于预测未来可能不太相关。
    此外,由于失业率高于正常水平,远程医疗和在家工作的采用率更高,人们很可能会对过敏症状和更多不必要的急诊室就诊反应过度,流感疫苗注射激增(或如果你观看阴谋论视频,则下降),等等,你的实验都将停止。
    欢迎使用新的数据生成分布函数,也许你 2018 年(或 2020 年)的数据与你 2021 年的建模并不相关。

小心谨慎,但当生活给你一个柠檬时,把握住这个机会

韩摄拉汉多Unsplash

虽然这些干扰会给你的建模/分析带来麻烦,但是你也应该保持警惕。世界已经发生了变化,没有人真正知道这意味着我们正处于新机遇和商业模式的沃土上。

也就是说,在你未来的分析工作中要更加谨慎:

  • 如果建立一个新的模型,确保你正确地处理第二和第三阶段(如何处理?).这也适用于所有未来的机会发现/规模确定。
  • 随着失业率的急剧变化和全球经济衰退的可能性,了解 2007 年至 2010 年利用率趋势的变化可能是有益的。也许这将部分地给我们一些指导,告诉我们应该期待什么,以及我们应该应用什么样的发型和修正因子。
  • 如果您正在运行需要暂停的 AB 测试。这是/曾经是进行 A/A 测试的绝佳时机!你有一个测试和支持小组,但他们都没有收到任何信息。运行您的测试/活动分析,看看您是否看到任何重大差异!如果你做了,那就有问题了!可能你一直都有!对于使用全局支持的实验来说尤其如此。现在调试你的实验。你再也没有机会了!
  • 问问你自己,对于你正在处理的机会类型,你预计 COVID19 中断后需求会激增吗?如果是,你能做些什么来利用这个机会和波动性吗?

COVID19 对您的日常工作有何影响?你认为你的世界发生了怎样的变化?

数据科学家不能忽视可怕的“战略会议”。

原文:https://towardsdatascience.com/data-scientists-cant-just-ignore-the-dreaded-strategy-meeting-b16e7704f794?source=collection_archive---------27-----------------------

有时,我们不得不抬起头来,理解我们在一个组织中更广泛的目标。

对一些战略会议唯一理智的反应。

在上周的 JIRA 争议之后,我想下一步自然会是看看苹果是如何扼杀你的生产力的,以及真正的数据科学家是如何使用 Linux 的…

这是个笑话 。苹果粉丝——请不要在 LinkedIn 上给我发仇恨邮件。

相反,让我们转向我最近一直在纠结的一个问题,“策略”。如果你像我一样,当你听到这个词时,你可能会退缩。它让人联想到胡言乱语的咨询师,头发浓密,皮肤晒得古铜色,令人难以置信。炫目的幻灯片可能会出现在某个地方,就像长时间的会议一样,每个人都在点头,但没有人会明白。

几乎每一个和我交谈过的数据科学家都对“策略”有同样的感觉。但这引发了一个有趣的问题:为什么?是什么引发了这种反应?数据科学家应该首先关心这些东西吗?我想让你相信,作为一名数据科学家,你应该这样做,而且有工具可以让整个事情不那么痛苦。

那么这个“策略”到底是什么呢?

数据科学家鄙视(好吧,我在这里概括)“战略思维”的原因之一是,它看起来很模糊。然而它不应该。战略思维的根源在于军队——想想 19 世纪留着令人印象深刻的小胡子的普鲁士人,在地图上移动木制士兵。作为数据科学家,我们喜欢好的定义,并且存在非常好的战略工作定义。

现在,这是一个数据科学博客,而不是一个组织文化博客,所以我将不得不掩盖战略思维从军队传播到工作世界的有趣方式。但是为了我们的目的,我要用一个重复美国军方使用的战略定义。不出所料,那些家伙对这个 想了很多

战略是一个组织如何通过部署其资源来实现其目标。

你可以看到为什么军方喜欢这种想法——我们赢的意思是什么,我们必须做什么才能赢,以及我们有什么工具来做这些事情。然而,如果你不是军事隐喻的粉丝,这也与西蒙·西内克和他的“首先是为什么,然后是什么,然后是如何”【4】非常相似。

这样看来,任何组织都应该有某种战略,这似乎是无可争议的。然而,不知何故,我们最终还是筋疲力尽、毫无启发地蹒跚走出战略会议。

好吧,也许组织需要一个策略,但我是一个科学家。别把我扯进来!

在经历了许多许多小时的数据战略会议后,我感受到了你们的痛苦。然而,有两个原因很难保持这一立场,一个愤世嫉俗/现实,另一个可能更有趣。

现实主义者的立场是,如果你不帮忙制定战略,别人会帮你制定。你真的想让别人来定义你和你的团队的目的,你将被衡量的目标和你拥有的资源吗?好吧,也许不是所有的组织都卷入了预算的角斗,但是你仍然需要在这些讨论中提高你的声音。否则,数据工程中那些狡猾的某某人会把一大堆额外的责任推给你,而不给你任何额外的人来履行这些责任。

我开玩笑。我喜欢我的数据工程同事。但是你明白这一点——某个地方的某个人会试图让你做很多额外的工作,却不付钱。

然而,关注战略还有另一个不那么愤世嫉俗但更有趣的原因。请允许我稍微“术语化”一下,在上面的定义中, 策略是一个分形概念

当你放大到一个组织的更小层次时,你会看到整体的结构,即为什么、做什么和如何,一直向下重复。根据这种观点,组织中一个层级的“为什么”是为了完成它上面的层级的“什么”。

海龟一路向下[6]

现在谈论分形概念,可能听起来有点模糊。事实上,你可能会认为我自己也参加了太多的战略会议。这是一个数据科学的具体例子。

想象一下,你是一家量化对冲基金的亿万富翁所有者。感觉很甜蜜,对吧?你的对冲基金的目的可能是进行长期的宏观经济投资。要做到这一点,除了其他事情之外,它必须建立比竞争对手更好的宏观经济数据来源。因此,您将创建一个数据团队来完成这项工作。在这个对冲基金的策略中有一个目的(宏观投资)、目标(建立更好的数据源)和资源部署(创建一个数据团队)。太好了!你已经完成了你的亿万富翁工作,你可以回到你的私人岛屿/山城/任何你正在花钱的地方。

现在假设您管理数据团队。你的目的是建立一个比任何人都更好的宏观经济数据来源,也就是说,你的目的是你的上级组织的目标。你必须为自己设定一些目标来实现你的目标。一种可能是让彭博这样的供应商提供所有宏观经济数据的标准来源。你可以 100%确定做交易决定的人会想要这个。

然而,这只能让你与其他基金持平。你的目的是比他们做得更好,记得吗?对冲基金并不羞于解雇那些没有达到目的的人。所以你给自己设定了额外的目标,让下注的人(咳咳,我指的是“投资”)使用其他基金没有的替代数据源。这可能是你从新闻报道中提取的信息,或者是从卫星照片中测得的信息。为了实现这些目标,你雇佣一群工程师来构建来自彭博的数据源,雇佣一群数据科学家来研究替代数据。

现在假设你负责数据团队的另一半数据。你的目的是提供可供交易决策人员使用的替代数据源。所以你和定量分析师交谈,发现他们对工作情绪数据感兴趣。现在您有了一个目标——提取工作情绪数据——并且您设置了一个数据科学家来从《华尔街日报》的自由文本文章中提取这些信息。这位幸运的数据科学家现在有了自己的目标,所以他们为自己设定了一系列目标(获取数据、绘制数据、基本清理数据),然后制定出他们必须做什么来完成这些目标,即如果他们勇敢,就使用 NLP,如果他们聪明,就使用 Ctrl-C、Ctrl-V 方法。

简而言之,这是一家运营良好的对冲基金,其高层战略已向下传递至机构的各个层面。在这个世界上,战略会议是有原因的。每个人都需要知道自己的目标,以及如何融入组织的其他部分。然后他们可以为自己设定目标,并相应地调配资源。这适用于每个人,甚至科学家!

但为什么这一切如此痛苦?我们能做些什么呢?

我认为这种痛苦的一个原因,也是我们必须直面的一个原因,是一个组织的最高层往往缺乏清晰的目标。这种不明确性会向下蔓延到所有其他层面。

对我来说,最糟糕的是看到一家大型无名机构的 CXO,当被问及战略时,他翻了个白眼,告诉与会者,公司的目的是“显然是为了获得更多利润!”这就好比一个人告诉我,他们生活的目的是再呼吸一口气。是的,你必须呼吸才能生存,但它本身并不是目的。同样,是的,一个公司必须盈利才能继续存在,但这不是为什么它存在的原因。

不用说,那家公司是完全混乱的,因为人们试图弄清楚他们到底应该做什么。数据战略会议是痛苦的,因为我们试图梳理出组织的不同部分想要什么,更重要的是,为什么。简而言之,如果你认为你的数据团队的目的是提供让其他人的工作更容易的工具,那么如果其他人知道他们的工作是什么,那会有所帮助。

那么如果你发现自己处于这种情况,你能做些什么呢?不幸的是,我没有好消息告诉你。你将不得不接受痛苦。

首先,你必须有一个战略,即使组织的其他部分没有。当然,最困难的部分是确定你的团队的目标。一旦你知道了这一点,生活就简单了——你可以设定自己的目标,并找出如何利用自己的资源。一个复杂的因素是,你必须在足够长的时间内锁定你的目标,这样你才能真正实现目标。要做到这一点,你需要盟友!或者,如果你感觉不那么权谋,我们称他们为内部客户。无论哪种方式,你都必须与组织的其他部门建立伙伴关系,并说服他们,他们的最大利益在于从你这里获得他们的数据科学。

作为题外话,我可以理解为什么数据科学家讨厌这个。本质上,这是“政治”,这是我们不喜欢的。艰难。

作为“内部创业者”的数据科学家

因此,在这个阶段,你可能会觉得,既然你四处奔波,试图获得客户,你基本上是在建立自己的内部公司。我认为你应该接受这种感觉。商学院甚至为你准备了一个术语:你是一名"【7】!你感觉如何?**

无论如何,如果你承认你正在建立一个内部初创企业,那么从这些初创企业价值主张模板【8】中借鉴可能会有所帮助。我喜欢用的一个是:“我们通过提供 Z 来帮助 X 做 Y”。**

在我们的案例中,我们在第一步中找到了我们的内部客户,所以这是我们的 x。我们知道他们做什么,所以我们有我们的 y。现在我们的工作是找出 z。例如,“我们通过在客户生命周期的适当时间点提供轻推来帮助客户保留团队减少流失。”

恭喜你!假设“Z”是你的第一目标。现在弄清楚目标:在我们的例子中,也许我们决定进行实验来找出哪些轻推可以显著减少流失?也许先建立一个模型来预测谁会流失?然后发邮件?在应用中推送通知?现在,您可以将这些目标交给您的团队成员,更重要的是,您的客户团队。

这里有一个明显的问题。如果你成功了,你会有很多内部客户。所以你会有很多他们想让你做的事情。你的目标不再明确。它变成了你碰巧正在做的事情的大杂烩。

现在我认为这是较小的罪恶——记住我们是在一个混乱的环境中运作的。当被要求证明你的团队的存在时,用一长串“我们通过提供 Z 来帮助 X 做 Y”来回答,比试图解释你出于某种原因开发的某种数据科学技术或技巧来回答要好得多。

然而,在某些时候,如果你幸运的话,你会在你为顾客做的事情中看到一些重复出现的主题。希望你能把这些主题抽象成一个总体目标。让我们把前面的例子推得更远一点。如果你有一堆营销团队的项目,但没有其他人,也许你的目的是提供工具,让营销增加收入?你或许可以想出一些你必须实现的目标:通过更精确的衡量来提高活动的效果,优化客户拓展,帮助开发针对服务不足市场的产品。运气好的话,这些目标中的一些会和你已经在做的项目一致。那些没有这样做的人会为你下一步该做什么制定一个路线图。

总而言之,如果你在一个没有明确战略的组织中,你别无选择,只能与其他部门的同事合作,明确自己的目标。然后,你可以设定你的目标,并按照你认为合适的方式部署你的资源。

没有来自上面的任何战略指导,你将不得不从你出去寻找的机会中建立一个战略。

好的知道了。我们数据科学家发现策略很难,因为高级管理层不知道他们在做什么…

虽然我很希望这是真的——谁不喜欢抱怨高级管理层——但生活要复杂得多。我认为还有两个因素在起作用,作为数据科学家,我们必须对这些因素有一点自我批评。

第一个因素是,随着你越来越资深,你越来越需要用愿景来激励人们。几乎根据定义,鼓舞人心的愿景不是详细的和数据驱动的(我们数据科学家喜欢的那种),它们是抽象的、高层次的叙述(世界其他地方喜欢的那种)。

举一个具体的例子,考虑一家媒体公司,其首席执行官表示,他们的目的是为历史上服务不足的群体发出声音。我可以想象某类数据科学家会放弃这个目的。你怎么能测量一个像“声音”这样抽象的概念呢?那是愚蠢的,首席执行官是个白痴。

我认为,在这里,数据科学家是错误的。

在这个顶层,你真的不需要定义“声音”,因为这是一个完美的策略。如果你来自服务不足的社区,你可能会受到它的启发, ,这是它最重要的功能 。即使你不是,你也能立即看到需要做什么。你需要参与到这个社区中来。你需要了解他们在想什么。你需要找出他们使用的媒体,这样你才能为他们制作合适的内容。换句话说,明白你必须提供一个“声音”就足以让一系列“为什么/什么/如何”的子策略级联起来。只有在组织的最底层,事情才需要被衡量。

所以在这种情况下,不是首席执行官是白痴。

不过,还有另一个因素在起作用。一位高级经理描绘了一幅远景,描述了世界的未来状态。换句话说,他们在说世界目前是这样的,它应该是那样的,我们必须做一大堆事情才能从这里到那里。任何关于未来的讨论都隐含着对未来的某种预测。

数据科学家讨厌预测!毕竟我们知道他们有多难!然而,作为一名高级经理,你必须对未来如何发展做出某种预测。你正在驾驶一艘超级油轮,你知道现在所做的任何航向修正都需要数年才能产生效果。

那么谁是对的呢?我认为双方都是。是的,很难对未来做出真正的预测,就像“洛根·洛克斯将在唐卡斯特赢得 2.18 的比赛”那样。然而,高级经理别无选择,只能在制定战略时尝试想象可能的未来。

幸运的是,对于所有相关的人来说,有一套工具可以帮助描述未来世界,如果不是科学的,至少更理性一点。然而,我认为他们足够有趣,他们应该有一个自己的帖子,我这周已经写得有点长了!要了解更多信息,您必须在下周三再来。到时候再聊。

脚注

原来有些人喜欢 JIRA,这很令人惊讶。我的最后一句话是,如果你在亚马逊上看到一个木工工具,90%的评论说“我用它切到了自己”,那么要么你可以相信 90%的人是不知道如何使用凿子的白痴,要么你可能会相信凿子可能有问题。我属于后一种阵营。

【2】我看过的所有关于战略的书,似乎都参考了克劳塞维茨的《战争论》,所以这里就是!不幸的是,出于我的修辞目的,他似乎没有留胡子。

基本上,我已经采用了目的/途径/手段模型,并对其进行了重新调整,以使术语与我们几周前谈论的那种设计思维保持一致。参见 Arthur F Lykke,Jr. 《军事评论》,第 77 卷,第 1 期。

当我获得几千次浏览时,我会很兴奋。西蒙·西内克的演讲“伟大的领导者如何激励行动”目前播放量约为 1200 万。太棒了,看这里这里

我在这里并没有提出什么新的主张。参见本文图 1,Richard e . berke bile 中校的“军事战略再探,对 Lykke 公式的批判”。最后一个军事参考,我保证——只是我发现那些家伙把这个想的最清楚了!

我总是模糊地将这句话与已故的伟大的特里·普拉切特联系在一起,但事实证明我完全错了!

我很乐意简化整个讨论。观点和对位法见这里这里,均来自《哈佛商业评论》。

【8】例如,参见 7 个有效的价值主张写作模板,Tor Grø nsund。

数据科学家:你为营销活动选择了正确的目标吗?

原文:https://towardsdatascience.com/data-scientists-have-you-picked-the-right-target-for-that-marketing-campaign-a51927054e00?source=collection_archive---------43-----------------------

使用公司的使命宣言来防止以牺牲公司整体目标为代价来优化局部目标的模型。

图片来自皮克斯拜

你可以开发出世界上最神奇的机器学习模型。它可以优化目标,您的结果演示看起来很棒,您的业务合作伙伴也很兴奋。四个月后,有人突然终止了这个项目。你惊呆了。发生了什么事?业务团队设定的目标对公司的整体目标产生了负面影响。你的声誉受损,你的业绩目标落空,你的年终奖金也泡汤了。我将介绍一种方法,你可以帮助防止这种情况发生。

场景

我们的业务合作伙伴定义了一个目标:

  • 活动 A:我们希望更多客户升级计划
  • 活动 B:我们想增加电子邮件的打开数量

所有这些似乎都是合理的目标。每一个都很容易衡量。有什么问题?

发生了什么事

  • 活动 A:该模型旨在使升级的人数最大化。更多的客户以更高的价格升级计划。他们坚持了三个月,然后决定完全放弃这项服务。那些价位较低的客户流失率要低得多。总体而言,每位客户的总收入下降,客户流失率上升。因为总收入和客户流失不是模型和测量的一部分,所以它们被遗漏了。在一次员工会议上,当有人提出这些问题时,业务合作伙伴不知所措。
  • 活动 B:该模型优化了电子邮件的内容和标题,使其呈现出“点击诱饵”的效果。越来越多的客户打开了最初的两封邮件,但随后参与度大幅下降。如果主题行不代表邮件内容,你会失去客户的信任。曾经“成功”的模式现在是有害的。

为什么我们经常优化到一个局部目标

在任何商业环境中,决定优化什么总是比看起来要复杂得多。

业务人员经常面临产生可测量的结果的压力,这些结果可以很好地显示在仪表板上并呈现给上级。时间框架通常很短,声誉和奖金岌岌可危。

当工作外包给第三方供应商时,更高层次的目标可以不在工作说明书中。供应商正在做你告诉他们要做的事情,并且他们通常被提供更具体的本地目标,他们可以很容易地衡量这些目标。

我们能做些什么来平衡本地和整体公司目标?

我的建议是

关注你公司的愿景和使命陈述

图片由 11417994 发自 Pixabay

“我们在 Kramerica 努力鼓励和激励人们做出积极健康的食物选择,这样他们才能过上最好的生活。”

活动 A:使命陈述没有提到创收。虽然大多数公司确实需要创造收入(即没有天使投资者的公司),但激励和推动健康食品选择的目标不能忘记。显然,对于一些客户来说,升级的激励和动机不足以抵消成本。他们太没有灵感了,他们完全退出了。该模型需要针对具有升级和保持客户倾向的客户类型进行优化。

活动 B:使命陈述是以邮件打开率为中心,还是以鼓舞和激励顾客做出积极健康的食物选择为中心?虽然电子邮件有助于促使客户到你的网站下载健康食谱,但实际下载健康食谱需要成为你目标的一部分…而不仅仅是打开电子邮件。

结论

为了每个人的利益,包括你的客户,在你与你的商业伙伴合作的早期,迫使他们讨论本地目标和全球目标。他们可能想专注于本地,但这里是你成为顾问,而不是接单员的地方。太多的数据科学家发现自己处于一个订单接收的角色,只是建立一个模型,然后继续前进,而不参与更大的目标。更接近业务并拥有更大的成果将为所有人提供更好的结果。

我讨厌当信使,但是如果你公司的愿景和使命陈述没有提供你成功所需的方向,是时候开始寻找新的雇主了。

数据科学家必须知道概率

原文:https://towardsdatascience.com/data-scientists-must-know-probability-7722cdd49d21?source=collection_archive---------15-----------------------

应用条件概率和贝叶斯定理的真实例子

简·根格在 Unsplash 上的照片

我是一家顶级科技公司的产品数据科学家,从事手机浏览器应用程序的开发,我面临许多关于我们产品的模糊问题,我必须用数据来回答它们。通常会有很多不同的答案,因为数据代表我们的用户,而不是所有的用户都一样。因此,答案并不总是直截了当的。概率帮助我衡量我对我的答案或我的机器学习模型有多自信。概率是许多机器学习模型和评估技术的核心,所以为了成为一名优秀的数据科学家,你必须知道概率是如何工作的。在本文中,我想帮助读者了解一个如何应用条件概率和贝叶斯定理公式的真实例子。

概率帮助我衡量我对自己的答案有多自信。

我相信贝叶斯定理是概率中最常用的术语和概念之一。如果你想学习概率的基础知识,我推荐你去看看我在文章底部提到的资源。

我们开始吧

在直接进入我们的例子之前,为了定义一个特定“事件”的概率,我们写下如下内容:

下面是一个最常用的例子:

  • 如果你掷一枚公平硬币,得到正面的概率会写成 P(h) = 50%,得到反面的概率会写成 P(t) = 50%。
  • h 代表正面的结果,而 t 代表反面的结果。

在本文中,我将使用我作为数据科学家在工作中遇到的一个问题中的一个例子。

问“如果一个用户在手机浏览器中收藏了一个网站,那么这个用户下周回来的可能性有多大?”

在该示例中,您有:

  1. 用户喜欢某个网站的概率: P(f)
  2. 下周回来的概率:P(w)
  3. 给定用户喜爱的站点,用户下周再次访问的概率: P(w|f)
  4. 假设一个用户在一个星期后再次访问某个网站,那么该用户喜欢该网站的概率: P(f|w)

让我们给这些变量分配一些随机概率%。

  • 【P(f)】= 40%**
  • 【P(w)】= 60%**
  • P(f | w)=50%**

注:本例中的数字是虚构的。

如果有两个事件,您需要确保事件是独立的相关的。在上面的例子中,这两个事件很可能是相关的,因为如果一个用户在他们的浏览器上喜欢一个站点 P(f ),下周回来的概率很可能会受到影响这个效果可以是负面的,也可以是正面的。

条件概率

我之前提到的例子也涉及到了条件概率。假设用户喜欢一个网站,一周后回来的概率, P(w|f)。

如果这两个事件是独立的, P(w|f) 的定义将是:

  • P(w|f) = P(w) = 50% 因为用户一周内回来的概率并不取决于用户对某个网站的偏好。

然而,正如我所说的,这两个事件很可能是相互依赖的。因此,更有意义的定义是:

条件概率的贝叶斯定理

  • P(w|f) = 后验概率
  • P(w) = 先验概率
  • P(f|w)/P(f) =似然比

使用我之前提供的%,你可以把它们代入公式,得到一个用户在一周后再次访问某个网站的概率。

如果用户喜欢一个网站,他们似乎更有可能回来。可能性(50%/40% = 125%)是这里的关键,这将有助于你理解条件是否会增加概率。

模型预测和概率

好吧,现在我知道了。我将创建一个模型,根据用户第一周的行为来预测用户是否会回来。我测试了我的模型,它有 85%的准确率,这意味着它将在 85%的时间里产生正确的预测(这有时被称为回忆)。在我的测试结果中,我有一个 10,000 名用户的样本,我知道其中 6,000 名用户在一周后又回来了。如果我的模型预测一个用户会在一周内回来,那么这个用户一周后真正回来的概率是多少?

花点时间思考这个问题…

如果你认为答案是 85%,我不怪你。这似乎是最直观的答案。但是,我想用一个视觉来帮助你理解为什么这个答案不确切

从视觉效果来看,即使用户实际上不会回来,也有可能预测他们会回来(这可能就是您所说的“误报”)。考虑到误报,计算将如下所示。

6000 * 85%的用户确实会回来= 5100

+

4,000 * 15%的用户实际上不会回来= 600

=

5,700

所以,一个预测一周后回来的用户,一周后实际回来的概率是 89.5%(5100/5700 = 89.47%)。答案与我们之前的直觉很接近,但并不是所有用例都是这样。当人口不平衡时,准确性不是一个好的评估标准。幸运的是,在我们的例子中,在 10,000 名用户的样本中,回来的用户与不回来的用户的比例相当平衡,为 60/40。

我希望我能帮助你教学,并向你展示更多关于概率的重要性。我建议所有有抱负的数据科学家走出去,了解更多信息

如果您有任何问题或反馈,请随时在下面留下您的问题或反馈,或者在 LinkedIn 上联系我。

中:https://medium.com/@testandlearn

*领英:【https://www.linkedin.com/in/kennyk1m/ *

资源:

* [## 基本概率

随机性无处不在。概率论是允许我们分析偶然事件的数学框架…

seeing-theory.brown.edu](https://seeing-theory.brown.edu/basic-probability/index.html) [## 2.1.3 -概率规则|统计 200

今天就在宾夕法尼亚州立大学世界校区注册,获得统计学认证学位或证书。

online.stat.psu.edu](https://online.stat.psu.edu/stat200/lesson/2/2.1/2.1.3)*

数据科学家必须了解统计学

原文:https://towardsdatascience.com/data-scientists-must-know-statistics-5716cdece25?source=collection_archive---------20-----------------------

如果你想成为一名数据科学家,你必须知道这些统计术语和概念

露丝·齐默曼在 Unsplash 上拍摄的照片

随着我继续作为微软数据科学家的旅程,我经常来 Medium 阅读数据科学相关主题。在 Medium 上呆了一年多之后,我注意到机器学习模型通常是有抱负的数据科学家非常追捧的话题。然而,大多数基础统计知识都被忽视了,因为它并不“性感”。在我重温统计学知识的同时,我希望我也能激励有抱负的数据科学家在转向其他高级统计模型和实验方法之前先学习基础知识。

注:所有引用的定义均来自Peter Bruce 和 Andrew Bruce 撰写的数据科学家实用统计学。

在本文中,我将介绍以下概念:

  • 样本和总体
  • 集中趋势的度量
  • 可变性的度量
  • 相互关系

样本和总体

在数据科学家开始任何分析之前,他们需要确定他们是包括所有用户还是用户的子集。这听起来很简单,但在现实世界中,很容易将一个样本误认为是整个人群。

例如:一位数据科学家调查了华盛顿大学 2019 届校友,以确定进入职场的平均收入。你会发现平均收入是 15 万美元。如果你从华盛顿大学毕业,你会挣 15 万美元左右,这种假设正确吗?大概不会。调查的受访者是华盛顿大学 2019 届校友班“人口”的“样本”。如果您决定使用调查数据进行分析,那么您的分析中可能会包含偏见。

开始数据分析时,考虑数据是来自样本还是总体。如果您使用样本,请确保您使用的是随机样本,如果您想要进行分析或创建模型以将您的发现推广到整个人群。

来自数据科学家实用统计:

人口 =对我们的研究感兴趣的所有项目的集合(N)

样本 =总体的一个子集(n)

简单随机抽样 =随机抽取人口的一个子集,人口中的每一项都有同等机会被选入该子集(不分层)。

这个话题在进行实验(也称为假设检验)时会变得非常重要,但却经常被忽视。作为微软的数据科学家,我经常遇到样本比例不匹配的情况,即来自对照组和治疗组的样本不均匀,这是一个很好的警报,可以用来调查我们正在分析的 AB 测试数据。样本不匹配可能是由各种原因造成的,如某些特征的代码逻辑和治疗引起的行为变化。在进行任何进一步的分析之前,需要解决这个问题。

记住:数据质量>数据数量。

集中趋势测量

是的,这可能是一个你已经听过无数次的话题。然而,在实践中,这一点往往会被忽略,因为许多工具使得计算平均值更加容易。此外,通过意识到并熟悉所有集中趋势的度量,你可以找到新的见解,你可以很容易地使用最基本的估计,均值。

让我们现在过一遍。

平均值 =所有值的总和除以值的个数(第 50 百分位)

来自数据科学家实用统计:

一般来说,均值对于正态分布的总体来说是一个很好的度量,但是如果数据变得有偏差或者有不同类型的分布,您可能会错过。这里有一篇学习分布的好文章:“每个数据科学专业人士都应该知道的 6 种常见概率分布”

这里有其他类型的方法也可能是有用的。

加权平均值 = 所有值之和乘以一个权重除以权重之和。

来自数据科学家实用统计

在许多数据集中,一些值可能比其他值“更重要”。例如,如果谷歌正在分析一个移动应用程序的评级。他们可能希望将更多的权重放在比一年前给出的星级评级更近的星级评级上。

修整平均值=去掉固定数量的极值后所有值的平均值。

来自数据科学家实用统计

这种类型的平均消除了异常值的影响。例如,如果脸书根据用户在移动应用中的时间来分析用户的参与度。数据科学家可能希望删除某些用户,这些用户可能是参与时间不合理的“机器人”。

Median =一半数据位于上下的值

中位数也被称为第 50 百分位。当数据中引入异常值或数据不具有正态分布时,中位数可以是非常稳健的平均估计值。例如,我在上看到一篇关于西雅图科技员工平均工资为 27.9 万美元的文章。它声明在文章中没有使用中间值。这就好比你平均有 10 名员工,每个人的工资都在 10 万美元左右,其中一名员工是 CEO,收入为 100 万美元。这可能会偏离平均水平,让公司看起来员工平均收入为 19 万美元。是的,一家普通的公司不会有 10 名员工,但是大多数 C 级高管的收入要比普通员工高得多。

模式 =出现次数最多的值

这是一个相当简单的计算,但它对快速获得洞察力非常有帮助。例如,如果一名数据科学家正在衡量抖音的应用使用情况,他们通过过去 7 天的活跃天数来衡量用户数量,他们可能会快速找到大多数用户平均一周使用该应用的活跃天数。

如果你现在问自己,什么衡量标准是最好的,要明白没有衡量标准对所有数据都是“最好”的。但是,您应该养成检查数据的所有度量的习惯,以确保您没有错过某些见解。

差异量数

除了测量分析数据的集中趋势,数据科学家还测量可变性。可变性最常见的度量之一是偏差。值与平均值的距离。虽然计算偏差更直观,但实际上输出往往不太直观,这就是为什么我们使用方差标准差

方差 =平均值的方差平方和除以 n-1,其中 n 是数据值的数量

标准差 =方差的平方根

来自数据科学家实用统计

虽然方差是可变性的良好度量,但在统计学中,我们经常使用标准差,因为方差由于平方而变得很大,标准差与集中趋势的度量更具可比性(单位)。在实验中,数据科学家往往会用 2 个标准差作为衡量显著性的阈值。我不会在本文中深入实验,但这对于所有数据科学家来说都是一个重要的概念。

标准差是衡量单个数据集可变性的最常见指标,但在比较两个或更多数据集时,会有一个变异系数。

变异系数= 标准差除以样本均值。

其他不常用的可变性度量是范围、百分位数、中位数绝对偏差和四分位数范围,但我不会在本文中讨论这些,因为它们在实践中很少使用。

相关系数

几乎在任何数据分析中,数据科学家都会比较两个变量以及它们之间的关系。有两个不同的值来衡量这种关系:相关系数(r)。另一个在概念上非常相似的度量是术语“协方差”,但它的计算是不同的,数据科学家不太常用。

相关系数= 衡量数值变量相互关联程度的指标(通常描述为 r,范围从–1 到+1)。

下面是一个计算皮尔逊相关系数的例子。

来自数据科学家实用统计

通常,当您比较一个特征变量和一个目标变量时,您将测量相关性以查看它们如何相互关联。需要记住的一件重要事情是,相关性并不意味着因果关系。例如,如果一名数据科学家正在分析 Twitter 应用的留存率,他们可能会错误地声称用户发的推文越多,留存率就越高。然而,可能有一个混淆变量——另一个变量(即关注者数量)导致推文数量和保留率上升。这就是为什么实验总是很重要的原因!

在第 2 部分中,我将介绍假设检验,也称为实验。

资源

  • 安德鲁·布鲁斯和彼得·布鲁斯的《数据科学家实用统计学》

如果您有任何问题或反馈,请随时在下面留下您的问题或反馈,或者在 LinkedIn 上联系我。

中:https://medium.com/@测试处理学习

领英:https://www.linkedin.com/in/kennyk1m/

“想要解决所有问题”是数据科学家的陷阱

原文:https://towardsdatascience.com/data-scientists-please-resist-the-temptation-to-solve-every-problem-ab55bc335fd0?source=collection_archive---------44-----------------------

意见

选择相关的和有影响力的,远离其他的

照片由来自 Pexels.com帖木儿·萨格兰比莱克拍摄

几乎每一个我参与的数据科学项目,我都从那里学到了至少一个新的教训。在我之前的帖子中,我分享了缺乏明确定义/一致的目标会导致失败。在这篇文章中,我想谈谈我经常陷入的一个陷阱——用算法解决几乎所有问题的诱惑。

解决问题是不可抗拒的。对数据科学家来说更是如此

我们人类是天生的问题寻求者和问题解决者。当我们解决了别人解决不了的问题时,我们的大脑会感到兴奋。虽然非数据科学家群体使用分析、逻辑和经验学习来解决问题,但数据科学家已经在理论、技术和应用方法方面接受了实践培训。吸引数据科学家的不仅仅是培训和技能。

技术已经成熟,为机器学习和人工智能创造了最有利的环境

  • 在过去的十年中,公司已经进行了大量的投资来组织和存储他们能够得到的每一个数据。
  • 许多外部(公司外部)数据已经大众化,很容易访问。
  • 云公司简化了建立技术基础设施的过程。
  • 开源文化导致了对经过试验和测试的算法及其源代码的可访问性
  • 大学已经培养了足够多精通基础统计学、机器学习和人工智能的毕业生。

数据科学家是拥有最好凿子的好奇雕塑家

有了所有这些,数据科学家就像熟练的木匠,他们手里拿着最好的工具,站在树皮前。每一块木头看起来都像是一件艺术品的候选者。每一个问题看起来都不可抗拒地需要被触摸和解决。

我们拥有之前抱怨没有的一切。最重要的是,我们在每个行业都有问题要解决。既有真实的问题,也有编造的问题。那么,为什么我们不解决所有的问题呢?这正是我们陷入的陷阱——一个叫做“用数据科学解决所有问题”的陷阱

“对拿着锤子的人来说,一切看起来都像钉子”——马克·吐温

限定问题。如果算法不合适,敢于说“不”。

很多时候,一开始就说“不”是正确的——为了公司,为了团队,也为了你自己。然而,生存的压力,证明的压力通常会将我们带到“让我们尽力而为”和“让我们看看我们能做什么”的方向,这最终会使团队辜负他们自己和他们的客户,损失金钱和时间,让每个人都感到沮丧,也失去了对技术/数据科学的信任。

正确的做法是花时间鉴定问题,仔细评估它们,最重要的是把那些可能浪费时间和精力的问题推到一边。以下是我的经验清单。

类型#1:根本不值得解决的问题

汤姆·利什曼在 Pexels.com拍摄的照片

有问题,然后有约束。有时候以解决问题的名义,试图解决约束。

在我的一个销售预测项目中,我和我的团队被要求对一场酝酿中的飓风的预期路径进行建模,并将其用于预测算法中。目标是预测哪些商店可能会在飓风的路径上,以及什么产品需要发送给他们以及何时发送。

理由如下——我们有过去的天气数据,我们有飓风预报,我们有过去飓风期间客户购物行为的历史记录,当然我们可以提供预报。当我们着手解决时,我们了解到:

  • 缺乏准确可靠的输入数据:飓风的路径不断变化。每个飓风都不尽相同。根据飓风的严重程度,客户对飓风的反应也会有所不同。如果我通常开车 5 英里去一家商店进行每周一次的备货,如果发布了严重的飓风警报,我可能愿意开车 70 英里去为整个月备货。
  • 对结果采取行动是不切实际的:确定飓风半径 5 英里范围内的哪些商店应该备货是不太准确的。即使我们这样做了,也有可能仓库(为这些商店服务)被损坏,道路被损坏,该地区停电,服务商店的备用路线等。这增加了决定哪些区域将受到影响以及哪些商店将向服务客户开放的复杂性
  • 学习:在花费了大量的时间和金钱之后,我们决定(并了解到)建立一个由商家、供应链团队、气象团队、政府机构和当地区域经理组成的作战室来管理每天和每周发生的事情是一个不错的主意。

有时,专家的意见甚至优于复杂的机器学习模型。工作几个月后昂贵的学习!尽早对替代方法保持开放的心态!

类型 2:不值得解决的问题(ROI)

波琳娜·坦基列维奇在 Pexels.com

没有什么东西不能从“增量改进”中获益。还有另一个陷阱。大多数时候,在增量改进的借口下,项目用最少的 ROI 来挑选问题。

我目睹过零售商业务团队要求 104 周的销售预测。

它将如何用于什么?:大多数情况下,除了具有长交付周期计划的产品,这种预测主要是出于预算原因。有如此多的因素影响着零售业,第 104 周的数字只是一个指引。

预测的准确性有多重要:问题是,我们为什么要投资建立一个复杂的模型来预测未来 2 年的情况。

学习:我学到了问令人不舒服的问题是很重要的。“是的。这是一个差距/问题。但是,它有多大呢?还有其他更值得解决的事情吗?”我们最终采用了一种简单的估算方法,使用去年的实际数据,并根据预测的增长/下降进行了调整

有时,简单的基于 excel 的解决方案比复杂的统计模型效果更好。

类型 3:使用非数据科学方法可以更好地解决问题

图米索Pixabay.com拍摄的照片

我曾经领导过一个项目,要求预测从海外进口的产品到达美国客户手中需要多长时间。目标是能够向客户和/或零售店传达预期的交付日期。一开始,它似乎是数据科学的一个很好的候选者。但是,直到我们发现了影响预期预测准确性的两个内在原因。

  • 受不可控不确定性影响的输入数据:集装箱在海上花费的时间。一个来自中国的集装箱可能通过不同的路径到达美国的港口。它们通常是提前计划好的,但事情可能会在最后一刻发生变化。此外,在到达美国之前,这艘船通常会在其他几个港口中转/停留。船只的全球定位系统数据对于船只在某个时间点的位置是一个相当好的输入。但也有其他事件,如海上的恶劣天气,跨国政治紧张局势,导致船只中途改道。所有这些都会影响船只预计到达其航线上的下一个中转站的时间。
  • 流程缺乏可见性:一批货物在港口清关所需的时间有很大的可变性。不知道您跟踪的第一个或最后一个卸载集装箱上的产品是否未知。由于卸货(和离港)时间从 2 天到 1 周不等,任何历史数据都是不可用的。
  • 学习:在这种情况下,正确的方法不是预测。正确的解决方案是提供准确、实时的集装箱状态数据,寻求与数据机构合作的方式来改善这种状况,并实现对当地港口集装箱卸载时间表的实时跟踪。告诉客户进口产品大约需要“x”天,我们会“在交货日期临近时通知您”,这可能是个好主意。提供不准确的预测会导致客户不满。

我们不必假设对数据科学团队的每个请求都意味着必须使用复杂的统计模型来解决。

类型 4:问题,即使解决了,也不会被发现,除非整个支持业务流程的生态系统发生变化

来源: Pixabay

有一次,我被要求预测商店每小时的库存情况,这样商店的产品就不会缺货。对于这个大公司来说,其供应链完全是为了规模经济而设计的,当卡车每天只离开仓库一次时,求解每小时的库存位置没有任何帮助。

是的,建立一个复杂的算法来解决这个问题是可能的——但是它不会被使用。所以,这就辜负了“我们将如何使用它?”测试。

学习:总是询问如何将洞察力付诸行动。

有时候,洞察力要求采取与公司整体战略和方向不一致的行动。这是为失败的项目做准备。

类型#5:需要创建数据的问题。

西蒙·辛伯格在 Pexels.com拍摄的照片

我们在数据科学项目中犯的另一个大错误是没有彻底评估产生结果所需的关键数据的可用性。虽然我们都知道垃圾进=垃圾出,但我们无法避免犯这个错误。

这是一个决定 1000 个床上用品系列产品的“正确”销售价格的项目。

方法和固有缺陷:我们采用的方法是使用可用的数据,即历史销售数据。是的,历史数据包含了尺寸、面料、线数、颜色、图案如何计入历史零售价格的信息,以及销售对此的反应。

缺失的部分:T 决定一件商品的正确价格的最重要的数据是顾客对该产品的看法。换句话说,相对于比这个产品差一个级别的产品,客户愿意为这个产品多付多少美元。在顾客心目中,决定产品与其他产品相比是劣等还是优等的参数是什么?与客房相比,顾客愿意在主卧床上用品(通常是特大号)上投资多少?这些数据点最好是通过精心的调查或使用模拟购物环境创建的数据来收集。

学习:使用先前的购物模式试图欺骗模型,使其认为顾客的决定是相同的。

错过一个关键的数据元素并决定“让我们尽最大努力利用现有资源”会导致精力和时间的浪费。

数据科学具有变革潜力。让我们明智地使用它!

不可否认,数据科学可以产生变革性的影响。公司依靠他们在高级分析和人工智能方面的大量投资来重振业务,拓展新的领域。

然而,数据科学产生的影响与所解决问题的类型和相关性成正比。必须花很多时间来鉴定这个问题。

我们应该记住,数据科学专业人员不仅有责任解决方案,而且有更大的责任选择哪些方案。

“成功的解决问题需要为正确的问题找到正确的解决方案。我们失败更多是因为我们解决了错误的问题,而不是因为我们用错误的方法解决了正确的问题。”——罗素·L·艾可夫

让我们下定决心,利用最好的数据、计算和机器学习来推动真正有影响力的成果。让我们远离解决“一切”的诱惑吧!

本文原载于一个想法

数据科学家应该在游戏中学习

原文:https://towardsdatascience.com/data-scientists-should-learn-through-play-649412faaa12?source=collection_archive---------61-----------------------

我第一次听说通过玩耍学习是在我送孩子去幼儿园的时候,但现在我意识到这是所有数据科学家应该学习的方式

如果说现在有一件事真的让我恼火,那就是当人们看着我正在做的东西问我,通常是用“比你更神圣”的语气:你的用例是什么?你想解决的问题是什么?作为一名训练有素的麦肯锡顾问,没有人比我更清楚必须预先定义你的问题,为你正在做的工作列出用例的原则。

但是如果你正在学习数据科学,我认为你应该把那个原则扔出窗外,采取一个新的原则:通过玩耍学习。这种哲学的基础是这样一种想法,如果你的目标是学习新的技术技能,你应该在头脑中想出没有特定最终目标的项目,除了你想做这件事,并且你认为你可能会从参与活动中获得一些刺激。在这篇文章中,我将论证通过游戏学习的原则同样适用于数据科学家和学龄前儿童。我们将看看行为心理学家对通过玩耍学习的看法,我希望你能和我一起得出这样的结论:如果你尝试其他方式,你将会错过在其他地方找不到的重要学习。

寓教于乐的原则

对所有学龄前儿童来说,这个世界是新的,他们需要在幼年时了解它。大多数行为心理学家和教育家都认为最有效的方法是通过玩耍。正是通过玩耍,孩子们利用一个安全的环境来探索和测试他们成长过程中需要的技能——他们的社交和认知技能,他们的情感成熟和自信。

这本书爱因斯坦从未使用过抽认卡列出了游戏区别于工作的五个特征:

  1. 参与者需要享受它
  2. 没有目标或规定的学习
  3. 这是自发的,参与者自愿参与
  4. 参与者主动参与,而不是被动参与
  5. 有“假装”或“假装”的成分

重要的是,工作和娱乐之间有两个关键的区别。首先是谁发起的。游戏大多由参与者发起,而不是由领导者、协调者或权威人物发起。游戏是完全面向过程的,没有明确的预先目标。

在工作之外,我经常参加个人学习项目,以继续发展我的技术数据科学技能,并跟上最新技术。这方面的一个例子是,我最近完成了一个个人项目,在这个项目中,我从电视连续剧朋友 中创建了一个人物网络,这样我就可以分析和可视化这个网络。

直到我现在把它写下来,我才如此明确地意识到这一点,但我所有的个人学习项目都遵循在玩耍中学习的原则。以我的朋友项目为例:

  1. 我知道我会喜欢这样做
  2. 我心里没有具体的最终产品。我知道会有一个最终产品,我也知道我会在做的过程中学习新的技能,但我还没有预先定义那些会是什么。换句话说,这是过程驱动的,而不是目标驱动的。
  3. 我凭空想到了它,并自发地着手解决它
  4. 我主动追求到了一个自己满意的自然终点。
  5. 这不是一个真实的工作环境,所以有一个“假装”的因素,消除了我在取得进步的喜悦之外的任何风险或个人压力。

数据科学家为什么要通过玩来学习?

就像学龄前儿童的世界一样,数据科学家的世界是巨大的,有时令人不知所措。我从哪里开始?接下来我该做什么?我怎么知道我能做到?什么可能会出错?但是你玩得越多,这些问题就越少,你就越有信心迎接任何挑战。

不要误会我的意思,我并不是反对数据科学中的正规教育和学习目标,这些仍然是绝对必要的,尤其是对于刚进入该领域的人来说。但我认为,伟大的数据科学家只有通过游戏学习才能成为伟大的数据科学家。以下是三个原因:

  1. 正规教育只能涵盖当今数据科学中存在的所有工具、方法和可能性的不到 1%。在某些时候,当你发现你需要的技能时,你只能靠自己。这种发现是通过玩耍实现的。
  2. 知识和能力只有在找到用途的情况下,才能有效地获得并保留在人们的头脑中。鉴于我们的工作和职业本质上是狭窄的,履行日常职责所需的知识和技能通常是有限的。因此,如果我们想学习新的不同的技能,我们需要其他渠道,其他项目。玩项目。
  3. 当我们玩数据的时候,从定义上来说,我们是在享受。这为学习和保留知识创造了一个更好的环境,而不是简单地做我们被告知要做的事情。我们更有可能知道事情什么时候可行,什么时候不可行,这意味着当未来风险更高时,我们可以更好地应用它们。

你通过玩耍学习吗?

我毫不怀疑我是通过玩耍来学习的。在我最近的记忆中,我在工作中使用或应用的所有新事物都是我通过有趣的个人项目接触到的东西。如果我没有参与这些项目,我可能永远也不会知道我在工作中使用的方法。

但是你呢?这里有一些问题可以问你自己,以确定你是否在玩耍中有效地学习:

  1. 我在工作之外接项目是为了个人享受吗?
  2. 我是带着探索精神和个人兴趣接受他们的吗?
  3. 我是否在思考如何着手这些项目并取得进展(而不仅仅是盲目复制别人已经做的东西)?

几年来,在玩耍中学习一直是我的口头禅,尽管我现在才开始把它表达出来。我确信这应该是所有数据科学家的口头禅。

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

iStock 照片

数据科学家— SQL 技术访谈

原文:https://towardsdatascience.com/data-scientists-sql-technical-interviews-1fae6b6fea1e?source=collection_archive---------21-----------------------

数据科学家需要了解多少 SQL?SQL 知识清单。

米尔科·布利克在 Unsplash 上拍摄的照片

如果你想成为一名数据科学家,你必须了解 SQL。SQL 和数据密不可分,因此今天所有的数据科学家面试都将通过使用 SQL 的技术面试。当然也有例外,他们可能会给你 R 或者 Python 的选择。然而,我可以保证,与任何其他语言相比,采访将更普遍地涉及 SQL。

SQL 是数据的基础语言。

下面是我将在本文中介绍的内容:

  • 学习资源
  • SQL 清单

学习资源

为了掌握 SQL,我推荐两个资源:

  1. 安东尼·莫里纳罗的 SQL 食谱。我在学习 SQL 的时候就有这本书,即使我对 SQL 很流利,我也把它带到工作中。拿到这本书,准备做饭。我想有些人可能认为这对于一些数据科学家来说是有点太多的 SQL,但是说实话,数据科学家生活在 SQL 的世界里。如果您能更好地使用 SQL,您将在任何数据科学项目的前端节省大量时间。
  2. 模式— SQL 教程 这可能是最好的免费资源之一,在这里你可以实践你在他们的查询编辑器中学到的东西。

注意:我不是这些资源的赞助商。我有预算意识,所以这就是我选择上面两个资源的原因。以上将花费你 30 美元来开始。

当你开始学习时,不要太担心你正在学习的语法。不是每个公司都使用相同的工具来处理数据,所以我的建议是你学习基本概念,面试官通常会让你通过。例如,在微软,我使用 SQL 的三种内部变体,它们在语法上都不同…

SQL 清单

格伦·卡斯滕斯-彼得斯在 Unsplash 上拍摄的照片

在这一部分,我想介绍大多数数据科学家面试官希望你提供的 SQL 清单。我不会介绍 SQL 提供的所有内容,而是会介绍最重要的主题,并尝试为您指出我没有介绍的主题的正确资源。

注意:我将在这里使用 SQL Server 语法,因为它最接近我使用的语法。

1.让我们来看看 SQL 结构

  1. 这是 SQL 的一般“结构”。你应该知道所有这些是如何工作的。
SELECT [columns]
FROM [table]
WHERE [filter]
GROUP BY [group by columns]
HAVING [filter condition 
ORDER BY [select columns/aggregate to order by (ASC OR DESC)]

2。获取顶部行进行快速检查

当您浏览任何表时,您应该总是检查前 N 行,以便理解表的模式。您可以使用顶部来完成此操作。

SELECT TOP N
FROM

为了进行快速检查并节省处理时间,您希望只提取几行,以便获得关于模式的足够信息,从而指定您的 SQL 代码。

3。滤镜!滤镜!滤镜!

WHERE

在检索您指定的列之前, WHERE 子句将确保过滤掉您需要的所有列。请确保在执行 SQL 查询之前这样做,因为处理大数据需要大量的计算能力。通常,这种计算能力需要花钱,并且由数据团队共享,所以您需要注意 SQL 代码中的 WHERE 子句,以确保您没有检索任何不必要的数据行。

继续在这里练习。您应该关注以下部分,以便真正理解如何利用 WHERE 子句。

  • SQL WHERE
  • SQL 比较运算符
  • SQL 逻辑运算符
  • SQL LIKE
  • SQL 输入
  • SQL BETWEEN
  • SQL 为空
  • SQL 和/或
  • SQL NOT

重要提示:WHERE 子句不接受聚合、标量子查询、窗口函数和别名[1]

4。处理空值…并在 SELECT 语句中添加逻辑

数据没有你想的那么干净。它通常很脏,在获得您想要的数据之前,您需要清理它。最常见的挑战之一是处理空列。在应用任何 SQL 函数之前,您必须首先了解如何处理它们以及它们会如何影响您的查询。查看此 链接 了解更多信息。

在查询 NULL 值时,它们有许多细微差别(也因您使用的工具而异),所以很多时候,您会尝试用更有信息性/更有帮助的值来替换它们。 COALESCE 是 SQL 用来处理空值的一个很棒的函数。如果您注意到列中可能有许多 null 值,并且希望在它为 NULL 时提供另一个值,那么可以使用 COALESCE 函数。

SELECT coalesce(<column A>, <if column A is null THEN "">)
FROM-- Example: Grab <date> column from the <DateDim> table and if it's null, give me "01/01/2020"SELECT coalesce(date, "1/1/2020")
FROM DateDim

CASE WHEN THEN ELSE(可选)结束。

如果您想在 SQL 中使用逻辑语句,CASE 语句可能是大多数数据库查询语言语法将使用的语句。学习如何使用它们,并在这里练习使用它们。这可能是 SQL 中最常用的函数之一。Mode.com 很好地解释了这一点,并为你提供了练习的选择:https://mode.com/sql-tutorial/sql-case/

5。聚集物

计数、求和、最小/最大值和 AVG 可能是最常用的聚合函数。练习使用它们,并理解它们是如何工作的。我将再次向您推荐 Mode.com,但这里有一些需要注意的有用提示:

  1. 在大多数 SQL 语言中,当您对未聚合的列使用聚合时,这就是您必须使用 Group By 子句的地方。
  2. 当您使用聚合时,您可以利用 HAVING 子句。
  3. 聚合经常忽略空值!

6。日期

如果您正在处理大数据,您将拥有带有时间戳的数据,这些时间戳表示数据何时被接收到数据库中,或者包含您正在处理的数据行的一些日期数据。就我个人而言,我经常和日期打交道,它们会让人很困惑。

尝试确定这些概念:

1.SQL 中的日期格式

  • 这里有一个理解日期数据类型的好资源: Link 。没有必要记住它,除非您可能知道日期格式是“YYYY-MM-DD ”,还有其他数据类型。

2.如何加减不同组的日期?

DATEADD (datepart , number , date ) -- Example: Return all the data from the past weekSELECT *
FROM MyTable
WHERE <DateColumn> >= DATEADD(day, -7, getdate())

3.获取当前时间。(其他可用选项)

SELECT GETDATE()

7.SQL 中的数据类型

很多时候,您正在使用的数据类型并不适合您,因此您必须学会如何改变它们。如果你没有处理过数据,这可能并不重要,但这是一个非常重要的概念。

关于数据类型,您可能需要了解以下三点:

  • 了解存在哪种数据类型。链接
  • 使用 CAST 和 CONVERT 更改数据类型
  • 理解数据类型可以隐式地改变(这里有更多的)
-- CAST Syntax:   
CAST ( expression AS data_type [ ( length ) ] ) 

-- CONVERT Syntax:   
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

8.连接和联合

连接和联合在数据科学领域至关重要,因为您经常要处理多个数据集。通过连接,您可以将两组数据放在一起以创建有用的见解,但这通常可能是查询可能出错的最常见的地方之一。

要理解 JOIN 的工作原理,请阅读并练习如何使用 JOIN这里的

要理解联合是如何工作的,请在这里阅读并练习如何使用联合

以下是关于联接和联合需要了解的一些主要概念:

  • 没有在连接中确定正确的键会导致笛卡尔积
  • 请确保在加入之前将数据集缩减到您需要的大小!连接的处理量很大,尤其是在处理数百万行数据时。
  • 外部联接可以帮助您获得与联接键不匹配的数据。
  • JOIN 和 UNION 的区别。这里有一篇很棒的文章是我在比较两者时发现的。

因为我是一个视觉化的人,我决定创建一个可视化来帮助你理解连接。

9.窗口函数(也称为分析函数)

窗口函数可能是一种更高级和更有效的 SQL 功能。它可以使非常复杂的任务变得更加容易解决。一个常见的错误是认为窗口函数实际上会将行组合成一行,因此理解 SQL 中的组和窗口之间的区别将真正帮助您使用窗口函数。窗口函数的关键字是 OVER(),语法可能会有所不同,这取决于您想要进行的计算类型。了解这个函数的用途可以节省您大量的时间。

我在网上找到的两个最好的资源:

  1. 模式
  2. PostgreSQL

摘要

综上所述,学习 SQL 最好的方法就是实践。有许多细节你可能仅仅通过阅读就忘记了,所以我的建议是使用我推荐的资源,花时间键入和浏览它们提供的问题,以便学习 SQL 的小复杂性。如果您有任何问题,或者如果您觉得我错过了成为数据科学家的基本 SQL 知识的任何主要组成部分,请联系我。

附录

[1]Anthony Alinaro 的 SQL 食谱

如果您有任何问题或反馈,请随时在下面留下您的问题或反馈,或者在 LinkedIn 上联系我。

中:https://medium.com/@testandlearn

**领英:【https://www.linkedin.com/in/kennyk1m/ **

数据科学家,开始使用分析器

原文:https://towardsdatascience.com/data-scientists-start-using-profilers-4d2e08e7aec0?source=collection_archive---------32-----------------------

找到算法中真正让你慢下来的部分

照片由 Jantine DoornbosUnsplash 拍摄

数据科学家通常需要编写大量复杂、缓慢、CPU 和 I/O 繁重的代码,无论您是处理大型矩阵、数百万行数据、读取数据文件还是浏览网页。

当对另一部分进行一些简单的修改就能使代码速度提高 10 倍时,难道你不想浪费时间重构代码的一部分,试图榨干最后一丝性能吗?

如果您正在寻找一种加快代码速度的方法,一个分析器可以准确地显示哪些部分花费的时间最多,让您看到哪些部分将从优化中受益最多。

分析器测量程序的时间或空间复杂度。对算法的大 O 复杂度进行理论化肯定是有价值的,但是检验算法的真实复杂度也同样有价值。

你的代码最大的减速在哪里?你的代码 是 I/O 绑定还是 CPU 绑定 ?哪些具体线路导致了速度变慢?

一旦你回答了这些问题,你将 A)对你的代码有更好的理解,B)知道你的优化工作的目标是什么,以便用最少的努力获得最大的收益。

让我们深入一些使用 Python 的快速示例。

基础知识

您可能已经熟悉了一些为代码计时的方法。您可以检查一行执行前后的时间,如下所示:

In [1]: start_time = time.time()
   ...: a_function() # Function you want to measure
   ...: end_time = time.time()
   ...: time_to_complete = end_time - start_time
   ...: time_to_complete
Out[1]: 1.0110783576965332

或者,如果您在 Jupyter 笔记本中,您可以使用神奇的%time命令来计时语句的执行,如下所示:

In [2]: %time a_function()
CPU times: user 14.2 ms, sys: 41 µs, total: 14.2 ms
Wall time: 1.01 s

或者,您可以使用 other 魔法命令%timeit,它通过多次运行该命令获得更精确的测量,如下所示:

In [3]: %timeit a_function()
1.01 s ± 1.45 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

或者,如果您想为整个脚本计时,您可以使用 bash 命令time,就像这样…

$ time python my_script.py

real    0m1.041s
user    0m0.040s
sys     0m0.000s

如果您想快速了解一个脚本或一段代码运行需要多长时间,这些技术非常有用,但是当您想要更全面的了解时,这些技术就没那么有用了。如果你不得不在time.time()支票中换行,那将是一场噩梦。在下一节中,我们将看看如何使用 Python 的内置分析器。

使用 cProfile 深入探索

当你试图更好地理解你的代码是如何运行的,首先要从 Python 的内置分析器 cProfile 开始。cProfile 将记录你的程序的各个部分被执行的频率和时间。

请记住,cProfile 不应该用于测试您的代码。它是用 C 写的,这使得它很快,但它仍然引入了一些开销,可能会影响您的时间。

有多种方法可以使用 cProfile,但是一种简单的方法是从命令行使用。

在演示 cProfile 之前,让我们先来看一个基本的示例程序,它将下载一些文本文件,计算每个文件中的单词数,然后将每个文件中的前 10 个单词保存到一个文件中。话虽如此,代码做什么并不太重要,只是我们将使用它来展示分析器是如何工作的。

测试我们的分析器的演示代码

现在,使用下面的命令,我们将分析我们的脚本。

$ python -m cProfile -o profile.stat script.py

-o标志为 cProfile 指定一个输出文件,以保存分析统计数据。

接下来,我们可以使用 pstats 模块(也是标准库的一部分)启动 python 来检查结果。

In [1]: import pstats
   ...: p = pstats.Stats("profile.stat")
   ...: p.sort_stats(
   ...:   "cumulative"   # sort by cumulative time spent
   ...: ).print_stats(
   ...:   "script.py"    # only show fn calls in script.py
   ...: )Fri Aug 07 08:12:06 2020    profile.stat46338 function calls (45576 primitive calls) in 6.548 secondsOrdered by: cumulative time
List reduced from 793 to 6 due to restriction <'script.py'>ncalls tottime percall cumtime percall filename:lineno(function)
     1   0.008   0.008   5.521   5.521 script.py:1(<module>)
     1   0.012   0.012   5.468   5.468 script.py:19(read_books)
     5   0.000   0.000   4.848   0.970 script.py:5(get_book)
     5   0.000   0.000   0.460   0.092 script.py:11(split_words)
     5   0.000   0.000   0.112   0.022 script.py:15(count_words)
     1   0.000   0.000   0.000   0.000 script.py:32(save_results)

哇!看看那些有用的信息!

对于每个被调用的函数,我们看到以下信息:

  • ncalls:函数被调用的次数
  • tottime:给定函数花费的总时间(不包括调用子函数)
  • percall : tottime除以ncalls
  • cumtime:该功能和所有子功能花费的总时间
  • percall:(再次)cumtime除以ncalls
  • filename:lineo(function):文件名、行号、函数名

当读取这个输出时,请注意我们隐藏了大量数据——事实上,我们只看到了 793 行中的 6 行。那些隐藏的行都是从像urllib.request.urlopenre.split这样的函数中调用的子函数。另外,注意<module>行对应于script.py中不在函数内部的代码。

现在让我们回头看看结果,按累计持续时间排序。

ncalls tottime percall cumtime percall filename:lineno(function)
     1   0.008   0.008   5.521   5.521 script.py:1(<module>)
     1   0.012   0.012   5.468   5.468 script.py:19(read_books)
     5   0.000   0.000   4.848   0.970 script.py:5(get_book)
     5   0.000   0.000   0.460   0.092 script.py:11(split_words)
     5   0.000   0.000   0.112   0.022 script.py:15(count_words)
     1   0.000   0.000   0.000   0.000 script.py:32(save_results)

记住函数调用的层次结构。顶层<module>调用read_bookssave_results.调用get_booksplit_wordscount_words。通过比较累积时间,我们看到<module>的大部分时间花在了read_books上,而read_books的大部分时间花在了get_book上,在这里我们发出 HTTP 请求,使得这个脚本(不出所料)受到 I/O 的限制。

接下来,让我们看看如何通过逐行剖析我们的代码来更加细化。

逐行剖析

一旦我们使用 cProfile 了解了哪些函数调用花费了最多的时间,我们就可以逐行检查这些函数,从而更清楚地了解我们的时间都花在了哪里。

为此,我们需要用以下命令安装line-profiler库:

$ pip install line-profiler

一旦安装完毕,我们只需要将@profile装饰器添加到我们想要分析的函数中。以下是我们脚本的更新片段:

注意,我们不需要导入profile装饰函数——它将由line-profiler注入。

现在,为了分析我们的函数,我们可以运行以下代码:

$ kernprof -l -v script-prof.py

kernprofline-profiler一起安装。-l标志告诉line-profiler逐行进行,而-v标志告诉它将结果打印到终端,而不是保存到文件中。

我们脚本的结果看起来会像这样:

这里重点关注的关键栏目是% Time。正如你所看到的,我们解析每本书的 89.5%的时间都花在了get_book函数上——发出 HTTP 请求——进一步验证了我们的程序是 I/O 受限的,而不是 CPU 受限的。

现在,有了这个新的信息,如果我们想加速我们的代码,我们就不会浪费时间试图让我们的单词计数器更有效。与 HTTP 请求相比,它只需要很少的时间。相反,我们会专注于加速我们的请求——可能是通过异步方式。

在这里,结果并不令人惊讶,但是在一个更大更复杂的程序中,line-profiler是我们编程工具带中一个无价的工具,它允许我们窥视我们程序的内部并找到计算瓶颈。

轮廓记忆

除了分析我们程序的时间复杂度,我们还可以分析它的内存复杂度。

为了进行逐行内存分析,我们需要安装memory-profiler库,它也使用相同的@profile装饰器来确定要分析哪个函数。

$ pip install memory-profiler$ python -m memory_profiler script.py

在同一个脚本上运行memory-profiler的结果应该如下所示:

目前有一些关于“增量”准确性的问题,所以现在只关注“内存使用”栏。

当我们把书分成单词时,我们的脚本在第 28 行内存使用达到峰值。

结论

希望现在您的编程工具箱中有一些新工具来帮助您编写更高效的代码,并快速确定如何最好地利用您的优化时间。

你可以在这里阅读更多关于 cProfile 的内容,在这里阅读线分析器的内容,在这里阅读内存分析器的内容。我也强烈推荐 Micha Gorelick 和 Ian Ozsvald [1]写的书高性能 Python

感谢阅读!我很想听听你对分析器、数据科学或其他任何东西的看法。下面评论或者伸手上LinkedIn或者Twitter

参考

[1] M. Gorelick 和 I. Ozsvald,高性能 Python 第二版 (2020),奥赖利媒体公司。

数据科学项目中的必备工具

原文:https://towardsdatascience.com/data-scientists-starter-pack-32ef08f7829c?source=collection_archive---------30-----------------------

约书亚·阿拉贡在 Unsplash 上的照片

数据科学家入门包—第 1 部分(VSCode,Bash,Virtual Env。单元测试)

在从事数据科学项目时,可能需要从理论到technical的许多技能。
在这篇文章中,我将主要关注一些最important tools可拥有和使用的工具,以及collaborationcleaner codingfaster方式。

目录

摘要如下:

  1. Visual Studio 代码
  2. Bash 命令
  3. 虚拟环境
  4. 单元测试

1.Visual Studio 代码

作者图片

数据科学家的日常工作主要是编码。因此,拥有一个能够封装许多其他工具的优秀编辑器是非常重要的。VS 代码就是这么做的!它是微软开发的工具,被认为是使用最多的编辑器之一。它允许运行、编辑和调试您的代码以及许多其他有用的扩展,例如:

  • Python :“一个丰富支持 Python 语言的 Visual Studio 代码扩展,包括智能感知、林挺、调试、代码导航、代码格式化、Jupyter 笔记本支持、重构、变量资源管理器、测试资源管理器、代码片段等功能!”

https://code.visualstudio.com

  • Git lens:“Git lens 增强了 Visual Studio 代码中内置的 Git 功能。它可以帮助您通过 Git 责备注释和代码透镜快速查看代码作者,无缝导航和探索 Git 库,通过强大的比较命令获得有价值的见解,等等。”

https://code.visualstudio.com

  • git 图形 : 允许可视化您的 Git 分支的图形,并使用同一个图形执行 Git 动作!

https://code.visualstudio.com

  • 【vs Code-icons】:为您的 Visual Studio 代码添加图标,以实现更好的表示和可视化

https://code.visualstudio.com

  • Docker:“Docker 扩展使得从 Visual Studio 代码构建、管理和部署容器化的应用程序变得容易。它还提供了 Node.js、Python 和。容器内的 NET Core。”如果你对 docker 不熟悉,不用担心这部分。

https://code.visualstudio.com

  • 黑色:默认安装的 python 格式库(如果不使用 pip 的话),允许在保存时自动格式化你的代码。为此,可以在 VS 代码的“setting.json”文件中添加以下几行
"python.formatting.provider": "black",
"editor.formatOnSave": true

以下是 Black 的代码格式示例:

  • 更好的注释:在写代码的时候,你通常会添加注释来详述你的脚本并解释它们。这个扩展帮助你使它更友好,更容易理解。例如,你可以使用符号“!”使评论变红,从而更好地吸引你的注意力。
    下面是一个由扩展生成的高光的例子:

更多信息,请访问 VS code 官方网站

2.Bash 命令

作者图片

Bash 命令对于快速导航到您的操作系统非常有用,对于处理文件也非常有效。当在没有图形界面的虚拟机上工作时,例如在云中的环境中,它们也会暴露出来。

当使用 bash 命令时,拥有一个能够可视化封装许多元素的好终端是很重要的。下面是我推荐的两款游戏机:

  • Mac: Iterm 2 ,提供了一个非常漂亮的可视终端,在上面你可以找到关于当前工作目录 git、它的分支(project dev)和它的状态(黄色:等待提交)以及你正在工作的虚拟环境(project_env)的信息。

作者图片

  • Windows: Cmder ,是一个更加增强的终端,它还允许运行 linux 命令,这在某些情况下非常有用。

cmder.net

也不要犹豫检查 Powerlevel10K ,这是一个在您的终端上拥有的很酷的功能,它可以实现更好的风格和更有效、更灵活的工作方式。

下面是最常用的命令行的简要列表(在 macOS 上):

安装完终端后,可以在 VS 代码中使用它,这将使您的工作更加高效。

3.虚拟环境

作者图片

在处理一个项目时,您经常希望它可以在其他机器和云中重现。由于所使用的包的版本一直在变化,所以设置一个私有或者virtual环境是很重要的,在这个环境中你可以开发你的项目并且保存包的版本。virtualenv是一个 python 库,它允许您执行上面讨论的隔离和版本控制,如下所示(您也可以使用 anaconda):

作者图片

当第一次在笔记本电脑上安装 python 时,它的默认环境称为“基础”或“全局”。值得一提的是,创建的虚拟环境不与 base 通信,这意味着它们最初是空的!

创建并激活虚拟环境

#PIP
cd dossier project
pip install virtualenv # if not done before
virtualenv <env>
source <env>/bin/activate

#Anaconda
cd dossier project
conda create -n <env>
conda activate <env>

一旦你的项目稳定下来,在需要的时候逐步安装软件包pip install <packageName> / conda install <packageName>:

#PIP
pip freeze > packages.txt/

#Anaconda
conda env export > packages.yml

如果您使用“packages.txt”或“environment.yml”文件克隆项目以便运行它,您可以:

  • 首先创建并激活一个新的虚拟环境
  • 运行以下命令,从给定文件安装所有必需的软件包:
#PIP
pip install -r packages.txt/

#Anaconda
conda env create -f environment.yml #No need to create an env before

VS 代码和虚拟环境

创建虚拟环境时,选择它作为解释器很重要。VS 代码能够检测到它并建议使用它,否则您可以如下选择它:

  • 在设置中,点击Command Palette
  • 类型:Python: Select Interpreter
  • 从列表中选择它:

https://code.visualstudio.com

我个人更喜欢使用 Virtualenv 和 pip,而不是 Conda,因为 Virtualenv 允许只安装需要的包,并优化了内存的使用。
请访问 virtualenv网站了解更多信息。

4.单元测试

作者图片

是一种软件测试技术,它运行一系列单独的测试来验证一个开发模块或其一部分的良好功能。这些测试会暴露出来,尤其是在你的项目中采用test-driven development方法的时候。它包括在开始开发之前首先编写您的脚本应该通过的测试。

在 python 中,你可以通过框架[pytest](https://docs.pytest.org/en/stable/)来使用单元测试,这对大大小小的项目都非常方便。假设,我们正在开发一个函数f,对于每组值( var 1, var 2,...),它应该返回一个预期的 _
编写完应该通过的测试后,我们开发该功能,然后使用以下方案编写脚本:

#Import packages
import pytest
import ...

#Create function
def f(var1, var2,...):
	return ...

#Unit tests
@pytest.mark.parametrize(
	"var1, var2,...,expected_result",
	[
		(val1_1, val2_1,...,expected_result_1),
		(val1_2, val2_2,...,expected_result_2),
		...
	]
)
def test_func(var1, var2,..., expected_result):
	assert f(var1,var2,...)==expected_result

上面的脚本将测试所有不同的测试( var 1_ ivar 2_ i ,…)并逐一检查它们是否与它们对应的值预期值 _ _ i 匹配,并运行以下命令行:

python -m pytest -v --tb=line --disable-warnings pathtotestfile.py::function
  • 举例 : 功率函数。为了便于说明,我们将考虑一个简单的函数:数的幂。单元测试文件如下:
# Import packages
import pytest

# Create function
def f(a, n):
    return a ** n

# Unit tests
@pytest.mark.parametrize(
  "a, n, c",
  [
    (2, 3, 8),
    (5, 2, 25),
    (4, 2, 16)
    ]
)
def test_func(a, n, c):
    assert f(a, n) == c

我们运行以下命令行:

python -m pytest -v --tb=line --disable-warnings tests.py::test_func

我们得到以下结果:

作者图片

三个测试都通过了。我们的测试越多,代码就越稳定!

结论

作为一名数据科学家,为了让自己的工作更加高效和可扩展,掌握这些技术非常重要。像 git 这样的工具是不可或缺的,它们使协作变得强大而直接。
我进一步指出,其中一些工具是个人选择,可以替换,也可以完成工作!

TEAMVSCODE #TEAMITERM2

原载于 2020 年 9 月 20 日 https://www.ismailmebsout.com**

数据科学家:像生物学家一样思考!

原文:https://towardsdatascience.com/data-scientists-think-like-biologists-b681a9795627?source=collection_archive---------34-----------------------

Unsplash 上由halance拍摄的照片

生物机器学习的清单

这篇文章是为那些对生物学知之甚少或一无所知,但拥有数据科学技能并对研究生物领域问题感兴趣的读者写的。

我的目标是让你明白,不用读教科书或花 20 个小时在可汗学院学习,你就能解决这个问题。

请记住,虽然许多问题都被巧妙地预先消化到训练和测试数据集中,但情况并非总是如此。这篇文章是关于在你到达那个点之前帮助你的想法。

清单:

  • 选择你的任务。理解它
  • 理解解决你的问题的数据(通过现代生物学的数据类型
  • 将你的项目放在上下文中理解你的目标。
  • 最后,你应该如何以及为什么合作

选择你的任务。了解一下。

生物学是对活的有机体的研究。它是巨大的。接受现实吧。幸运的是,你的问题更具体。

这是一个有趣的问题,这是否是人类分类偏好的功能,但是如果你去维基百科查看生物学未解决问题的列表,你会看到每个问题都被整齐地分成不同的类别,比如“生物化学”、“神经生理学”和“生态学”。

重要的事情先来。不要认为你必须事先研究所有的东西,这通常是不必要的。根据需要了解更多信息。你的时间很宝贵。

本文的其余部分是关于如何将这些文献分解成对您的解决方案有帮助的有用见解。

如果你头脑中还没有一个问题,你可以到这里挑选一个问题。

学习一般技能最好是在可以找到具体答案的直接和真实问题的背景下进行。

David ClodeUnsplash 上拍摄的照片

现代生物学的数据类型

将我们的大部分时间花在训练和评估模型上是很诱人的。然而,在任何数据科学项目中,思考您的数据源和数据生成过程可能会有回报。

在生物学中,理解你的数据会有巨大的回报。

比较原始数据、注释数据和研究数据

原始数据是新的。它还没有被处理。

以 DNA 序列为例。这些信息包含了为所有生命提供蓝图的分子。我们用四个字母“A”、“T”、“C”和“G”的有序组合来表示它们。

尽管这些信件不是原始数据。事实上,我们通过实验技术来推断它们,这些实验技术涉及到溶液中 DNA 分子的反弹,这个过程有一些误差。因此,真正的原始数据实际上可能是在那个实验中产生的波状光谱。

因此,在现实中,数据的“原始性”是非常主观的,但在许多情况下询问这些数据是有价值的。

我们可以对比原始数据和注释数据。这些数据已经进行了某种程度的编辑。

详述前面的例子。我们可以使用类似字典的键将 DNA 序列翻译成蛋白质序列(由 20 个不同的字母组成)。

如果你看到一个来自 DNA 序列的蛋白质序列,这将是对 DNA 序列的一种注释形式,而不是与直接测序的蛋白质相同的数据(这确实来自其他分析过程)。

注释和其他领域一样,随着时间的推移会变得更加详细。

如果我们将研究定义为使用数据评估可能得到支持的假设的过程,那么研究本身可以被认为是一种极端形式的注释。

今年,呼吁使用自然语言处理(NLP)对可能与新冠肺炎相关的研究论文进行注释,使我们能够从现有文献中挖掘线索,以帮助应对全球冠状病毒。

这些项目的原始数据然后成为期刊文章中的文本,它本身描述了其他类型的数据。这里的是一篇示例论文

使用数据类型作为描述生物数据的框架和语言是非常强大的,这些细节可以决定最终模型的解释和有效性。

观察对比实验

考虑你的数据来自哪里将决定分析的类型和你的洞察力的范围。在科学上,我们做实验。但是很多时候,我们也不会。

如果没有观察数据(出去观察动物之间的相似性),达尔文将如何证明进化?

反过来,当自然实验发生时,我们是不是应该忽略它们?(当自然随机地以不同的方式对待相同的实体时)。

实验数据源于有意改变一个或多个变量,观察世界如何变化。这种数据通常是用特定的分析方法创建的,如果要分析这种类型的数据,您需要理解这背后的逻辑。

实验数据之所以令人敬畏,是因为它常常能促成的因果推断。它通常非常适合监督学习任务。

观测数据常见得多。这包括我们没有系统地改变任何感兴趣的变量的任何数据。

用观察数据进行因果推断要困难得多,如果不是不可能的话。达尔文可能因为自然实验而成功(见上面的超链接)。

监督学习仍然适用于观察数据,但围绕模型解释的语言变得危险了。这在公共领域引起了很多关于 X 或 Y 是否对你的健康有益的困惑。

全球与本地

这种区分将可公开访问的数据与实验室或公司等特定团体收集的数据进行比较。我怀疑思考这种区别不仅仅是生物学上的应用。

全球 数据由大量关于分子、物种、医疗状况等的在线数据库组成,这些数据已被公开收集和共享。这些数据集是公共研究的重要存储库,并且可以通过链接丰富本地数据集。

学习如何利用全球数据资源可能是目前数据科学家处理大型非商业数据集的最令人兴奋的机会之一。

本地数据然而,是只有你或你的组织拥有的数据。它的结构可能与其他数据集相似,也可能不相似,或者使用相同的方法生成。

如果您试图在学术上或商业上与他人竞争,这些数据可能非常有价值,但如果您试图创建一个需要在许多环境中适用的通用解决方案,这些数据可能价值较低。

在本地数据上构建模型的危险在于,您的模型可能很难被其他人恰当地使用,除非他们能够重建您的数据收集过程。

进一步说明:本地数据不会因为可以在网上获得而成为公共数据,尽管这里的细节可能很重要。全局数据存储库通常在数据点之间创建关系,这意味着需要一个过程来向这些存储库提交附加内容。

由 Lavender888000 在 WikimediaCommons 上发布

背景是关键

数据科学的每个应用解决问题的标准都在变化,生物科学也是如此。

评估指标 对于任何项目来说都是重要的考虑因素,但是对于生物项目来说,重要的指标通常是特定于领域的(因此您应该了解领域!).

例如,在数据科学的许多生物医学应用中,错误发现率将构成您评估标准的一部分。如果你的算法说一个分子存在,而事实上它并不存在,并且一个研究人员相信你,他们可能会围绕这个结果建立他们的下一个研究!

模型解读 在生物问题中并不是微不足道的(曾经是吗?).取决于你如何构建你的模型,你也许能,也许不能解释它为什么做出这样的决定。有时候,这样可以,有时候不行。

模型解释可以简单到跟踪特征重要性(在基于树的模型中)、回归模型中的系数。通常,这些值可以直接与现有的理论或其他模型进行比较,从而将您的结果放在上下文中。

在生物领域,理解和交流模型的局限性是非常重要的。

数据科学从根本上受到数据的约束,所以当考虑你对你的模型的结论能说什么或不能说什么时,我会从那里开始。

您的数据在本地吗?还是分析了更大的全球数据集?后者将允许更大的普遍性。数据是实验性的吗?如果是这样的话,因果解释可能会摆在桌面上。

你用来训练你的模型的数据是如何注释的?这会影响你的模型吗?

理解领域和数据不是数据科学的附属品,而是了解模型能做什么和不能做什么的基础。

约翰·施诺布里奇在 Unsplash 上的照片

你必须合作

这不言而喻。

如果你想进步并接受挑战,最好的方法就是和不同的人一起工作。此外,如果这些人在你感兴趣的问题上有专业知识,这一点就变得尤为突出。

当我说有很多人愿意分享他们的专业知识时,我不认为这只是一厢情愿。

记住,一个能帮助你的人不需要博士学位,只需要比你现在拥有的更多的经验、知识或教育。

冒险,寻求帮助,分享问题。寻求帮助并不是对你性格的控诉,所以你真的没有什么可失去的。

后续步骤:

希望,当你努力去理解你问题的这些方面时,你会在一个更好的地方去解决它。

以我个人的经验,在质量动力公司,彻底确定问题和解决方案的标准是非常有用的。无论是对你的合作者、客户还是普通大众,努力理解你的问题领域将会创造真正的红利,并推动所有参与者的成功。

因此,做你通常会做的事情,处理数据,特征工程,特征选择,寻找潜在空间,创建嵌入,训练你的模型,评估和调整。做到这一切,知道你的目标是什么,真正的解决方案标准,并有一只援助之手引导你通过。

  • *特别感谢本·哈珀等人帮助编辑本文。

随着量子计算机的发展,数据安全面临风险

原文:https://towardsdatascience.com/data-security-at-risk-as-quantum-computers-gain-momentum-f64b68d0471b?source=collection_archive---------21-----------------------

量子位的兴起对加密意味着什么

维塔利·弗拉索夫在的照片

R 最近谷歌发表了一篇名为 量子至上使用可编程超导处理器 的论文。在这篇论文中,研究人员详细介绍了量子计算机如何能够在计算时间密集型任务中胜过经典计算机。具体来说,他们将最先进的经典超级计算机与其量子计算机在随机位串(0 和/或 1 的列表,如{0000101,1011100,... })采样任务中的性能进行了比较。谷歌的量子计算机名为“Sycamore”,处理器有 53 个量子位。处理器基本上是由 53 圈冷却到绝对零度以上百分之一度的电线组成。

Sycamore 处理器花了 3 分 20 秒完成采样计算。根据谷歌的说法,同样的计算将需要一台经典的超级计算机 10,000 年才能完成。IBM 回应谷歌的说法称,他们可以在 2.5 天内用经典的超级计算机模拟谷歌的结果。这里的警告是 IBM 需要使用橡树岭超级计算机,它是世界上最大的超级计算机。在《纽约时报》的观点文章 中,斯科特·阿伦森指出了谷歌成就的重要性,尽管 IBM 反驳道:

我们现在处于一个时代,在这个时代,经过巨大的努力,地球上最大的超级计算机仍然可能几乎模拟量子计算机做它们的事情。但是,今天这场竞争势均力敌的事实表明,这种势均力敌的局面不会持续太久。如果谷歌的芯片使用 60 个量子位而不是 53 个,那么用 IBM 的方法模拟其结果将需要 30 台橡树岭超级计算机。有了 70 个量子位,它将需要足够的超级计算机来填满一座城市。

经典计算机对量子计算机

为什么量子计算机比经典计算机强大那么多?

经典计算机使用数值为 0 或 1 的二进制数字。这些二进制值对应于两个级别的低 DC 电压(基本上是电压)。

量子计算机使用量子二进制数字(量子比特)。当你将电线中的电子冷却到 20 毫开尔文(非常接近绝对零度)时,就会产生量子位,这使它们表现出量子力学的行为。因此,量子位元,或我有意称为冷位元的东西,可以呈现 0、1 或两者的叠加(线性组合)状态。叠加态对应于获得二进制值 0 或 1 的相等概率。这意味着量子计算机具有“中间状态”,这使得它们能够捕捉像纠缠这样的量子行为。量子纠缠是指两个量子位即使在很远的距离上也有很强的相关性,以至于它们之间的通信速度似乎超过了光速。由于量子纠缠,量子比特可以存储更多的信息(通过超密集编码达到两个比特),并且比普通比特可以远距离传输更多的信息。纠缠是量子计算机比经典超级计算机更强大的核心。

什么是加密,它应用在哪里

加密是修改消息、文件和/或某些数据的过程,因此只有拥有加密密钥的特定人员才能访问原始信息。数据的预加密称为明文,数据的后加密称为密文。通常,通过随机数生成过程,使用一种算法从明文以及密钥中生成密文。一种常见的加密方法,也是最容易被量子计算机攻击的方法之一,是 Rivest–sha mir–ad leman(RSA)算法,它依赖于这样一个事实,即很难找到一个大的合数的因子。

加密技术可用于保护购物交易、电子邮件、网上银行记录、硬盘数据和密码。考虑到这些应用程序的高安全风险,如果开发出容易危及数据和信息安全的技术,这将是一个主要问题。

量子计算给加密带来了什么威胁?

在量子计算中,一种称为 Shor 算法的算法可以用来以比经典计算机更快的指数速度分解大的合数。这种能力意味着,通过一台足够强大的量子计算机,你可以轻松破解像 RSA 这样的加密系统。

IBM 保护量子计算机的数据加密

IBM 没有等待强大的量子计算机来保护我们所有的数据,而是开始开发保护量子计算机的加密系统。IBM 首先意识到量子计算机只擅长解决少数任务(其中之一是分解大的合数),从而着手解决这个问题。针对量子计算机保护数据的方法是使用量子计算机无法解决的问题来加密数据。这种问题的一个例子是“晶格问题”虽然自 20 世纪 80 年代以来已经研究了晶格问题,但是仍然没有对它们的经典或量子算法解决方案。这是摘自《科学美国人》的文章, 新的加密系统保护数据免受量子计算机 的攻击,关于晶格问题:

这类问题的一个简单例子是将一组五个数字中的三个加在一起,将总和给一个朋友,然后要求第二方确定哪三个数字被相加。“当然,有了五个数字,这并不难,”柳巴舍夫斯基说。“但现在想象 1000 个数字,每个数字有 1000 个数字,我从这些数字中挑选 500 个。”

虽然量子计算机对数据安全构成巨大风险令人担忧,但令人欣慰的是,目前正在研究数据加密的替代方法。虽然我个人认为谷歌的结果非常令人兴奋,尽管存在风险,但我认为为数据安全采取保护措施非常重要。随着技术的发展,我们不断产生更多的数据,这一点尤其如此。

在这篇文章中,我讨论了 Google 的 Sycamore 处理器,以及它在随机采样任务中在计算上超过经典计算机的能力。我讨论了量子比特的概念,以及纠缠态如何让量子计算机存储比比特更多的信息。这种存储更多信息和更快交流信息的能力使它在像合数因式分解这样的任务中胜过经典计算机。这对加密和数据安全有着巨大的风险。最后,我讨论了 IBM 针对量子计算机保护数据加密的努力。我希望这篇文章有用和/或有趣。感谢您的阅读!

数据农奴和标签数据验证:未来的挑战

原文:https://towardsdatascience.com/data-serfs-and-labelled-data-validation-and-the-challenges-ahead-7dd618d4720f?source=collection_archive---------25-----------------------

前沿是更先进的模型还是当前模型更快更好的数据?

你走在你附近的一个城市,你问你的虚拟机器人朋友“我的家在哪里?”“我的家”是一家当地的中国餐馆。然后,你的虚拟朋友会问你是否迷路了,找不到回家的路,然后会给你提供真实的家庭地址。你真的很想找到那家餐馆。

你正驾驶着你的车绕着一个弯道行驶,它告诉你,当你可以明显地看到你做得很好的时候,你还没有完全在车道上。

你去看医生,后来收到保险公司的通知,说他们不会支付你的医疗费用。你很快就会发现办公室里的“某人”没有选择正确的诊断代码(截至 2018 年,共有 155,000 个可能的代码)。该办公室表示,一个新的自动化系统已经到位,该系统将通过电子方式读取医生的记录,并在未来防止这些问题的发生。你还没被说服。

这是怎么发生的?人工/增强智能(AI)的魔力失效了吗?或者更有可能的是,给餐厅数据或道路上的图像或医疗诊断代码贴标签的数据农奴大军那天表现得很疲惫,甚至那些负责验证标签(另一项数据农奴任务)的人也错过了错误。说到医疗编码,估计只有 63%的编码是准确的[。](http://A pilot study by the Healthcare Information Management Systems Society suggests that only 63 percent of ICD-10 coding may be accurate.)

尽管随着越来越多的数据被贴上标签,人工智能或增强智能的进步已经加快,尽管新的硬件设备和开源模型在很大程度上缓解了复杂机器模型中密集计算的成本,但当你探究为什么这么多对人工智能未来进步的预测落后于预期时,答案往往是,“是数据,傻瓜”。

随着我们对标记数据集的要求有了更深入的了解,还需要考虑标记者(仍然是人)的偏差以及标记过程的实际成本。标签的价格范围从 10 美元到 1000 美元,每 1000 个单位(或每件商品 10 美分至 1 美元)不等,并因多余的贴标机数量而异。当你像罗伯特·芒罗在这篇文章中所做的那样更深入地挖掘数据时,你会发现尽管这辆车可能是“她的”,但它更有可能被标记为“他的”,因为“在每个数据集中,男性代词的频率分别是女性代词的 3 倍和 4 倍”,然后你开始意识到,并非所有因偏见导致的错误最初都可能被视为错误。

作为建立和调整你的机器学习模型的过程的一部分,你决定花钱让其中一家数据标签公司给你的数据贴标签,有些公司像 Hive 吹嘘有超过 150 万名员工。当你将 Hive 的员工人数(临时或非临时)与亚马逊的约 70 万人和沃尔玛的约 220 万人进行比较时,所需工作的规模就变得更加清晰了。2019 年, 《经济学人》 引用了一个预测,“到 2023 年,数据标签服务市场可能会增加两倍,达到 50 亿美元”。如果您雇用一家公司的标签数据来构建您的初始模型,您是否应该雇用同一家公司来验证数据标签(无论是简单的输入验证还是确定模型在现实世界中是否如预期那样运行)?你应该雇佣自己的数据验证团队吗?有什么方法可以使这种验证自动化吗?把预测的和实际发生的进行比较?还是说这个精度不重要?

如果关于偏离车道的故事不是关于司机通知,而是关于一辆自动驾驶牵引拖车驶入你的车道,会怎么样?

…尽管是一个山口…

…在雪地里…..

增强智能的要求不同于真正的人工智能,在增强智能中,提供可操作的数据,以便人类可以干预,而在真正的人工智能中,设备或车辆预计会自主行动。大多数增强智能依赖于大量精确标记的数据。因此,也许今天人工智能的真正前沿是数据标签和验证的规模化自动化,这可能会降低成本或改善环境,而不是更复杂的模型?

似乎很明显,要以自动驾驶汽车或设备的形式实现真正的人工智能,需要更高的预测精度和/或更好的上下文理解,这些汽车或设备可以在与生物相同的领域中运行。与此同时,值得关注的公司可能不是那些演示最棒的公司,而是那些致力于解决特定于其专业领域的规模化标签数据的公司。

数据来源越来越标准化;分析学、数据科学、ML 跟得上吗?

原文:https://towardsdatascience.com/data-sources-are-getting-standardized-can-analytics-data-science-and-ml-keep-up-8185a6c4ac4a?source=collection_archive---------38-----------------------

对标准模式开箱即用洞察机会的态度

叶 olde Salesforce 机会表!图片作者。

在过去的一年里,我在 Sisu Data 采访了 50 多位分析师、商业智能负责人和数据科学家。向他们中的任何一个人询问他们最大的痛点,答案都是一致的:从 ETL 工作到减少维度再到量化因素级别,使分析可行和有用所必需的准备、争论、转换和管理。

众筹的一项调查强调了这一点,该调查显示,数据分析师和科学家 70%的时间都花在数据准备上,而且(毫无疑问)被认为是工作中最不愉快的部分。总之,这是一个耗时且低价值的必要之恶。

但是我有希望:在接下来的几年里,我相信由于两个趋势,这种数据争论将减少到只占数据工作流的 20%。

  • 第一个,已经发生了,涉及到在源和用例级别的数据标准化的增加。
  • 第二个是即将到来的机会,包括 ML 生态系统能够在标准模式上提供现成的可操作的见解

对于第二种趋势,分析师和数据科学家将越来越多地承担创建开箱即用的洞察系统的任务,或者翻译、解释和业务用户授权的问题。

数据源标准化正在实现数据准备的自动化

SaaS 正在标准化模式。图片作者。

业务用例有两种标准化。一个是源代码级别的更强形式的标准化。另一种是基于通用数据结构而不是来源的较弱形式的标准化。两者都支持数据准备的标准化。

强大的标准化:占主导地位的 SaaS 供应商正在决定基础模式

如果说 SaaS 垄断带来了什么好处,那就是数据标准化。

在过去的 20 年中,Salesforce Opportunity 对象主导了公司看待渠道、赢得率和净新收入的方式。因此,它们的流行定义了跨行业销售和收入运营的标准数据格式。反过来,这种标准化创造了一个完整的公司生态系统,专注于最小化摩擦和最大化 Salesforce opportunity 表的价值。

我们在流量获取(谷歌广告、脸书广告)和金融交易(Stripe)方面看到了类似的趋势。即使是最后一个前沿领域——产品和 web 分析——也正在接近一个通用标准,Heap、Segment 和 Amplitude 等公司在事件日志数据的转换方面提出了自己的观点,同时在过去几年中获得了很高的市场份额。

Segment 提供了开箱即用的基本图表和可视化功能,可以轻松实现事件级日志记录。作者截图。

然而,由于可解释性和技术问题,源代码级别的数据标准化并没有像人们希望的那样带来有用分析的标准应用的繁荣。它为要应用的一致的有洞察力的算法和工具建立了框架,但是在最基本的图表之外,我们仍然需要分析师手动转换数据来为业务创建报告工具。这是因为标准仪表板可视化之外的用于转换和分析数据的工具仍然需要高级技术技能,即使这些任务变得可重复。我们离真正的洞察力还差一步。

标准仪表板可视化之外的用于转换和分析数据的工具仍然需要高级技术技能,即使这些任务变得可重复

弱标准化:数据结构、ETL、数据连接

如果数据源在用例间变得标准化,我们需要缩小的差距是标准化我们聚合数据的方式,并在不同的数据源间连接数据。例如,我们可能能够分析 Salesforce opportunity 表,但许多团队希望将 Salesforce 表中的数据与产品分析(例如,堆、幅度、细分)、营销属性和公司地理数据相结合,以便了解功能使用如何与追加销售机会或流失可能性相关联。

幸运的是,正在进行令人印象深刻的工作来消除这种摩擦。像 Fivetran 这样的公司正在进行 ETL/ELT 的标准化,five tran 只要求你指向一个数据源,并以自动化的方式吸收、加载和(与 DBT 合作)转换。这确保了跨不同数据源的连接也可以以某种标准的方式完成。

也许最弱的标准是关于业务用户的最终转变,或者是 ETLT 的悬空端。例如,仍然很难理解如何将事务聚集到合适的粒度或合适的时间窗口,以满足业务用户的特定需求。

但是伪标准的数据结构,即使没有单一的数据源,也使得一键自动准备的梦想成为可能。例如,在进行标准的营销漏斗分析时,将漏斗的每一步都列为一个字段,并用时间戳表示是否到达了该步骤,这正迅速成为一种最佳实践,为业务用户转换数据奠定了基础。

漏斗分析涉及将漏斗的不同步骤聚合成时间戳,并将特征附加到漏斗上的不同元素。作者截图。

又如,产品事件日志数据包含许多可能的来源,但结构大致相同。有些公司会从后端创建自己的 Kafka 流;其他的依赖于第三方,比如细分市场。但是事件日志结构在任何地方都是一样的。因此,减少摩擦的一个成熟领域是将正确的事件数据聚合到正确的时间框架中的非常常见且繁琐的分析。例如,用户可以查看每个用户在 90 天内点击“提交”的次数,或者用户在前七天点击“提交”的次数,或者用户在第一年发表评论的次数。

有了云的无限可扩展性,为什么不在不编写任何 SQL 语句的情况下,自动聚合多个不同时间段的多个不同事件呢?

如果业务数据正在变得标准化,为什么吐出一个有趣的见解仍然如此令人沮丧?

概括一下,这里有四个地方正在进行标准化

来源:作者

但是,即使没有分析堆栈的所有部分的标准化,从我们漂亮的、高价值的 Salesforce 机会表构建甚至最简单的模型也是令人沮丧的繁琐。

对于 ML 和复合建模来说,最大的机会是将分析和 ETL 融合在一个统一的步骤中。

为了说明今天的问题,让我们问 Salesforce opportunity 表中最简单的业务问题—与高成交率的业务机会相关的是什么,这样我就可以专注于这个分组了。在 2020 年,我希望能够用一行程序将它插入到一个工具中,并立即得到答案。

在我的例子中,我想在桌面上运行一个快速的套索来理解看起来最重要的特性。LASSO 是一种很好的技术,因为它通过损失函数进行正则化,使得噪声系数变为零。换句话说,LASSO,如果我有一堆数值变量,会突出最有影响力的变量。但是很快,我一个接一个地遇到了许多令人沮丧的事情,尽管成千上万的数据科学家最终在任何地方都编写了相同的预处理逻辑:

吸收

很多时候,数据集可能太大而无法打开,许多云工具在 10GB 左右的上限时失败(我们的 Salesforce 表很小,但请耐心等待一会儿)。然后,数据科学家必须采样,以便在本地 Jupyter 实例中打开它。

但是当最终结果依赖于拥有整个数据集时,它就开始崩溃了。例如,管理人员希望看到一段时间内的总销售额或总“成交金额”计数。在这种情况下,抽样显然会导致严重的少计。在这些情况下,为了减小规模,分析师将求助于构建数据立方体或运行 GROUP BY。不幸的是,一旦某些东西变成立方体格式,就很少有工具可以利用 ML 建模的最新进展。

一些工具,如 Anyscale 和 Ray,开始关注数据堆栈的这一部分,从而在任何规模的数据集上实现无限的可扩展性。只是看你想出多少钱。

幸运的是,我们的 Salesforce 表很小,但是如果它很大,我甚至很难获得数据。

转换和聚合

假设我们的 Salesforce 数据集足够小,可以装入笔记本电脑。同样,我特别感兴趣的是了解什么与高成交率的机会相关联,并且喜欢使用 LASSO 进行功能选择。但是,我们注意到该模式包含了大量的非数字字段。

叶 olde Salesforce 机会表!来源:作者。

所以我现在的自然选择是一次性编码分类特征,这会导致稀疏性和多重共线性的问题,这需要更多的 munging。这甚至没有检查富文本字段。尽管现在开箱即用的软件包使处理这些问题变得更加容易,但产品经理或注重数据的商务人士没有时间学习开源 scikit 软件包。

此外,世界在不断发展,只需点击几下鼠标,就能按需获得“见解”,而不是多行脚本。

我正在想象一个点击式工具,本质上是“Salesforce 模式的套索”或“Python 系列数据的套索”。它可能已经在某些地方投入生产,我迫不及待地想让它成为标准。

我们甚至还没有探究我过去提到的事件日志数据。首先,要生成的特征的数量几乎是无限的。LASSO 有助于从列表中选择功能,但不是生成本身:我想看看注册后前 7 天的登录次数吗?还是付款后第一天的总会话持续时间?在没有任何机器帮助的情况下浏览最重要的功能,我只能依靠我的直觉,或者我的商业用户可能已经有的任何偏见。

解释

到了这一步之后,我得到了一个具有统计显著性系数的向量。

学生项目的 GLM 输出。作者截图。

但是想象一下将这一点转化为你的商业利益相关者!相反,我必须回到 SQL,让它更容易理解。在我的例子中,我确定了一个系数,它似乎具有非常低的 p 值,即使在正则化之后也是一个合理的系数:B2C = 1,BI_Tool_looker = 1。然后,我简单地查找了出现的系数的转换率(在这种情况下,B2C 销售机会的转换率特别高),并显示了转换率。

在所有这些工作之后,在浏览了给团队留下深刻印象的所有 p 值和系数之后,这实际上只是一个见解:

  • 使用 Looker 和新的轻量级销售流程的旧金山 B2C 客户进入销售漏斗晚期的可能性增加了 3 倍。

就为了这个?哦!在这一点上,我只是累了。

早期的一线希望

随着数据世界中出现的所有标准化,如果数据科学工具和供应商可以将标准数据与标准的多阶段模型相匹配,情况会怎样?如果我们能够让业务用户直接从几个标准数据源获得洞察力,会怎么样?

Alteryx 是一家朝着这个方向前进的公司,它能够将 ETL 和多阶段建模集成到一个 DAG 中。

Dag,如 Matillion 中的这个,支持点击式数据准备。Alteryx 也支持作为 DAG 的一部分的 ML 模型创建、训练和生产化。作者截图。

如上所述,更改模式、创建正确的字段、进行聚合,然后进行逻辑回归都是通过拖放点击来完成的。但是,在一个数据正在成为标准,所有业务用户都必须由数据驱动的世界里,即使是 DAG 也可能不堪重负。

Sisu Data (我在 Sisu 负责解决方案和数据产品),我们相信即使是这些配方也可以简化。我们的愿景是,对于某些数据结构—产品事件日志、Salesforce 机会—您不应该需要 DAG 或 Python 甚至 SQL 来获得洞察力。在处理上面的 Salesforce 表时,我们有一个多阶段模型,分阶段对稀疏性、共线性和文本解析建模;甚至使输出具有高度的可解释性。

随着业务用户要求洞察,而不仅仅是报告或图表,对于标准数据结构上的垂直化、自以为是的工作流来说,这是一个巨大的机会,只需点击几下鼠标,就可以从源直接洞察

由于业务用户需要洞察,而不仅仅是报告或图表,因此标准数据结构上的垂直化、自以为是的堆栈存在巨大的机会,可以扩展从来源到洞察的路径:

  • 接收:云仓库的出现使得接收 TB 级数据集不再需要一个超负荷工作的数据工程师团队。相反,这应该像业务用户的对话框一样简单。
  • 机器辅助聚合:跨越时间窗口的交易事件日志等原始数据的聚合应该成为推荐,而不是令人眼花缭乱的各种可能性。
  • 机器辅助连接:有了一些标准的数据源,我们可以建议跨不同数据源的有趣的转换和连接,机器会智能地选择最有意义的数据。
  • 建模:对于标准的连接和模式,一个解决方案可以跨多个模型应用 80/20 解决方案,这些模型能够以可能的最佳方式提供可解释的洞察力,而不是多阶段模型。
  • 洞察与解读:不再有系数或可变等级重要性图表。输出应该是可解释的,并且是商业用户期望的那种简洁的见解,就像脸书著名的“10 天 7 个朋友”的见解。

这给分析师和数据科学家带来了什么?如果来源的标准化导致流程的标准化和自动化以获得洞察力,数据科学家将可以自由地深入到开箱即用的洞察力不再起作用的长尾案例中。分析师将越来越多地发现自己扮演着类似 PM 的角色,引导洞察力的流动并将其转化为行动。两者都将摆脱“工作中最不愉快的部分”,并在最需要和最有趣的地方增加商业价值。

适合任何机器学习模型的数据分割技术

原文:https://towardsdatascience.com/data-splitting-technique-to-fit-any-machine-learning-model-c0d7f3f1c790?source=collection_archive---------14-----------------------

将数据分成不同类别的目的是避免过度拟合

亚历克斯Unsplash 上的照片

这是一篇 4 分钟的短文,向大家介绍数据分割技术及其在实际项目中的重要性。

从伦理上讲,建议将数据集分为三部分,以避免过度拟合和模型选择偏差,称为-

  1. 训练集(必须是最大的集合)
  2. 交叉验证集或开发集或开发集
  3. 测试设备

测试集有时也可以省略。这是为了获得真实世界中算法性能的无偏估计。将数据集分成两部分的人通常称他们的开发集为测试集。

我们试图在训练集上建立一个模型,然后尽可能地优化开发集上的超参数,然后在我们的模型准备好之后,我们试图评估测试集。

#训练集:

用于拟合模型的数据样本,即我们用于训练模型的数据集的实际子集(在神经网络的情况下,估计权重和偏差)。该模型观察并学习这些数据,并优化其参数。

#交叉验证集:

我们通过最小化交叉验证集上的误差来选择适当的模型或多项式的次数(如果仅使用回归模型)。

#测试集:

用于提供最终模型在训练数据集上的无偏评估的数据样本。只有在使用训练集和验证集对模型进行了完整的训练后,才使用它。因此,测试集是用于复制一旦模型被部署用于实时使用时将会遇到的情况类型的测试集。

测试集通常用于评估 Kaggle 或 Analytics Vidhya 竞争中的不同模型。通常在机器学习黑客马拉松中,交叉验证集与训练集一起发布,实际测试集仅在比赛即将结束时发布,并且是模型在测试集上的分数决定了获胜者。

#如何决定分割数据集的比例?

图:数据集分割,源-在infogram.com上制作

答案通常在于数据集本身。比例是根据我们可用数据的大小和类型(对于时间序列数据,拆分技术略有不同)决定的。

如果我们的数据集大小在 100 到 10,000,000 之间,那么我们以 60:20:20 的比例对其进行分割。也就是说,60%的数据将进入训练集,20%进入开发集,其余的进入测试集。

如果数据集的大小超过 100 万,那么我们可以按照 98:1:1 或 99:0.5:0.5 这样的比例进行分割

决定分割比的主要目的是所有三个集合应该具有我们的原始数据集的一般趋势。如果我们的开发集只有很少的数据,那么有可能我们最终会选择一些偏向于只存在于开发集中的趋势的模型。训练集的情况也是如此,太少的数据会使模型偏向于仅在数据集的该子集中发现的某些趋势。

我们部署的模型只不过是学习数据中统计趋势的估计器。因此,用于学习的数据和用于验证或测试模型的数据应尽可能遵循相似的统计分布,这一点非常重要。尽可能完美地实现这一点的方法之一是随机选择子集——这里是训练集、开发集和/或测试集。例如,假设您正在进行一个人脸检测项目,人脸训练图片来自 web,而开发/测试图片来自用户的手机,那么在训练集和开发/测试集的属性之间将存在不匹配。

将数据集划分为比率为 0.6、0.2、0.2 的 train、test、cv 的一种方法是使用 train_test_split 方法两次:

from sklearn.model_selection import train_test_split x, x_test, y, y_test = train_test_split (x_train,labels, test_size=0.2, train_size=0.8 )x_train, x_cv, y_train, y_cv = train_test_split(x,y,test_size = 0.25, train_size =0.75)

这篇文章就写到这里吧——如果你已经做到了,请在下面评论你的阅读经历并提供反馈,还可以在 LinkedIn 上加我。

类似文章— 深度学习变得简单:第 3 部分:激活函数、参数和超参数以及权重初始化

面向娱乐和非营利组织的数据堆栈—第二部分

原文:https://towardsdatascience.com/data-stacks-for-fun-nonprofit-part-ii-d375d824abf3?source=collection_archive---------28-----------------------

使用 Meltano、dbt 和超集设计完整的数据堆栈

伊瓦·拉乔维奇Unsplash 拍摄的照片

在我的上一篇文章中,我探索了一些廉价的选项来为训练练习和附带项目组装您自己的数据仓库。从那以后,我为这个系列想出了一个更巧妙的标题:有趣的数据栈&非营利组织。我正在扩展本系列的范围,以涵盖整个数据栈,而不仅仅是仓库组件。上次,我解释了数据堆栈往往由三个组件组成(ETL、DW 和 BI 组件),对于 ETL 和 BI 组件,您的基本选择是 DIY 或面向企业客户定价的商业平台。

当然,我说得太早了,因为事实证明,在 ETL 和 BI 前沿都有一些非常有趣的开源开发!我将在本文中深入探讨这些,但结果是,我相信我们现在可以从免费增值和开源组件中组装一个真正的端到端分析堆栈。因此,本系列将面向那些希望建立自己的“DS4FNP”堆栈的人,无论是作为个人辅助项目、教学资源,还是无法在企业预算内运营的非营利组织。

我们完整的数据堆栈!(左)图片由梅尔塔诺 | (中)图片由 dbt | (右)图片由 Apache 超集

在本文的其余部分,我将从我上次探索的 DW 选项中报告一些结论,特别是通过dbt的视角。然后,我将介绍一些我认为是完整的开源 ETL 和 BI 选项。最后,我将通过描述如何设置一个完全本地的开发环境,以及为托管的生产环境提供一些选项来结束本文。

我之前确定了构成我们堆栈核心的三个候选数据仓库平台:BigQuery、Snowflake 和 Athena。为此,我对所有三个平台的结论如下…

雪花,我有一些折扣,因为它可能是三个中我最喜欢的,它不提供任何形式的免费增值定价模式。尽管是“随用随付”,你仍然需要支付一些费用。然而,事实证明你实际上把你的成本降到了每月 25 美元。现在,虽然这是一个相当低的月成本,但我仍然不知道它是否低到足以证明个人项目的合理性。但是如果这个项目对我个人来说足够重要,并且我觉得我可以最大化我的付费资源使用的效用,我可能会咬紧牙关付费。雪花真的很棒。也就是说,在令人兴奋的首次公开募股之后,如果能看到雪花发布某种专门针对小项目、培训等的有限免费增值模式,那真是太好了。

BigQuery 无疑是最吸引我的。设置帐户和 BigQuery 实例是一个非常简单的过程。 [dbt](https://docs.getdbt.com/tutorial/setting-up/#create-a-bigquery-project)中的配置同样简单,甚至认证设置(我经常认为谷歌 IaaS 传统上让这个过程变得不必要的复杂)也是轻而易举。在本系列的大部分时间里,我很可能将重点放在 BigQuery 上作为目标仓库,同时尽可能保持仓库无关性。由于设置简单,其出色的定价模型(如果需要,很容易免费),以及可用的集成数量,BigQuery 不会出错。

雅典娜和另外两个有点不同。它的主要优势是:1)它完全在你的控制之下,在你自己的 AWS 账户之内;2)如果 AWS 是你首选的生态系统,它是最便宜的选择。Athena 的主要问题是你必须自己完成所有的设置。我认为,在 TerraformPulumi、的帮助下,这可以成为一个更全面的解决方案,这当然是我以后想要探索的事情。还有一个dbt-athena 插件,尽管我发现文档仍然相当原始,我仍在努力克服配置障碍。随着时间的推移,我认为 dbt 插件和 Athena 供应脚本的成熟将使 Athena 成为 DS4FNP 的一个非常好的仓库选项。与 S3 的本地互操作性以及 Presto 的潜在抽象性使得 Athena 成为一个真正理想的仓库目标。

但是我们实际上在选择云仓库平台方面有点超前了。在开发您的分析项目时,您实际上可以从本地 PostgreSQL 或 SQLite 数据库开始,当然还有dbt。事实上,使用dbt,您可以为我们讨论过的任意数量的仓库以及我们的本地环境设置单独的连接概要文件。这意味着我们需要开始的只是我们的笔记本电脑、Python、dbt和我们本地的“仓库”(postgressqlite)。在本系列的后面部分(可能是第三部分),我们将开始实际整理一个完整的教程,从头开始设置我们的项目。

好吧,那么我之前提到的这些开源 ETL 和 BI 平台呢?我有充分的理由认为,这些组件只有作为昂贵的企业服务或耗时的 DIY 项目才真正可用。ETL 通常计算成本相当高,所以没有提供免费增值定价的强烈动机。你在那里的商业选择包括 Fivetran、Stitch、Matillion 和其他几个。从 Python 脚本中运行您自己的 ETL 在理论上可能看起来很简单,但是大多数真实世界的 ETL 任务最终会陷入两种类型的复杂性中:

  • 结构复杂性,意味着从复杂的数据库模式和 API 规范中加载数据,尤其是当这些结构随时间变化时。
  • 容量复杂性,意味着加载需要流或批处理的大容量数据源。这主要与日志数据有关。这里的复杂性主要不是来自解析或转换逻辑,而是来自移动大型数据所涉及的基础设施逻辑。

不管是哪种情况,我认为人们倾向于低估 DIY ETL 所涉及的长期努力。这是一个很容易陷入的陷阱,因为从 10,000 英尺外看,这似乎是一个简单的“脚本化”任务:只需从一个源获取数据,然后将其发送到某个地方。不过,这种模式也有一定的道理,您经常会发现自己在重复相同的基本过程,只是有足够的变化来保证某种程度的抽象,尽管还不足以证明自己有理由进行抽象;这种类型的问题只需要一个标准化的框架,但长期以来,这些框架都被锁在商业平台的后面。

图片由梅尔塔诺拍摄

幸运的是,开发人员可以使用这样一个框架:歌手,由史迪奇开发,是一个用于开发“taps”和“targets”的可组合框架。Taps 从数据源提取数据,包括数据库、API、日志、电子邮件等。目标是 taps 提取的数据的目的地,通常是常见的数据仓库(雪花、BigQuery 等)。每个 tap 将其数据提取到一个公共的中间体中,每个目标从该公共的中间体中进行加载,从而允许人们组合 tap 和目标的任意组合来形成 ETL 任务。

Singer 不一定是新的,但也不一定能为我们的需求提供完整的解决方案。Singer 为标准化我们的 ETL 工作流的组件提供了一个很好的起点,但是它仍然需要大量的配置管理和编排。然而,这个明显的差距已经被一些新进入该领域的人填补了,其中有梅尔塔诺(来自 GitLab)和 Pipelinewise (来自 Transferwise)。这两个工具都是在 Singer 的基础上增加了一个配置管理和编排层。它们还允许您将提取/加载任务作为代码来管理,就像 dbt 允许您将转换模型作为代码来管理一样。我已经尝试了它们,我都喜欢它们,我有点希望这两个项目以某种方式合并或互操作,因为它们都有不同的优势,实际上是互补的。Transferwise 似乎更专注于开发一套符合特定标准的可靠歌手 tap/targets,而 Meltano 则更专注于填补所有空白,将 Singer 付诸实践,作为 Fivetran 和 Stitch 等平台的合法替代品。因为 Meltano 与我们 DS4FNP 项目的任务更相关,所以我将主要关注它。

Meltano 管理的项目的基本元素是提取器(Singer taps)、加载器(Singer targets)、转换器(dbt!),以及编排(默认为气流)。仅凭 Meltano,您几乎可以管理您的整个分析项目。到目前为止,我已经完成了它的文档教程和设置项目。这感觉很像 dbt,虽然推出自己的生产部署似乎足够可行,但我非常有兴趣看到托管的 Meltano 即服务进入场景。Meltano 是很好的 Dockerized,我可以很容易地看到通过 AWS 批处理或类似的基础设施运行它。

在 BI 方面,你的商业平台包括 Tableau、Looker 和 PowerBI 等。雪花现在有内置的 Snowsight,BigQuery 与 Data Studio 很好地配对,Athena 的模拟伙伴将是 QuickSite。大型独立平台真的缺乏任何实用的 DS4FNP 友好定价选项,而 DW 特定选项对于该项目的精神来说感觉有点过于供应商锁定。到目前为止,这是整个堆栈中最主观的组件,因此无论如何,您应该在这里插入自己的偏好。BI 硬币的 DIY 面也提供了一些值得注意的选项,包括 R 的 Shiny 和 python 的 Dash。比起 ETL 工作流,我更不厌倦制作自己的 BI 接口。

图片来自阿帕奇超集

然而,为了形成一个完整的堆栈,我们确实有一个 BI 层的理想选择。超集也不一定是新的,但它肯定在加速发展,现在它是 Apache 的一个项目。由气流创造者 Max Beauchemin 开发的 Superset 很快成为 Tableau 的开源替代方案。从美学上看,这感觉像 Tableau 和 Airflow 有一个开源的爱子,但内置的 SQL 实验室也感觉有点像 Snowsight 或 Redash 。通过docker-compose很容易部署,超集可以作为我们的 DS4FNP 开发环境的一部分在本地运行,也可以作为长期运行的 web 服务部署。

至此,我们的 DS4FNP 堆栈由以下组件组成:

  • Meltano 通过 Singer、dbt 和 Airflow 提供我们的 ETL (ELT)层。
  • 我们的 DW 层将在本地使用 PostgreSQL 或 SQLite,在云中使用 BigQuery。
  • Apache 超集作为我们的 BI 层。

简单说一下环境吧。这个堆栈的伟大之处在于,我们可以轻松地在本地运行它的每个组件,但我们还需要最终确定我们希望如何在云中部署。

我认为我们可以在一个单一的存储库中组织我们所有的代码,这主要归功于 Meltano,他为我们管理 dbt 代码和 Airflow dags。在 Meltano 和 Superset 的 Docker 部署以及任何仓库基础设施供应代码之间,我们可能希望返回到通用基础设施存储库(或者不返回)。出于教程的考虑,我可能会使用 SQLite,这样项目的每个有形组件都是受版本控制的。

我使用 Mac,所以我的一些本地设置可能是特定于 Mac 的,但我会尽量做到平台无关。我是 VS 代码的忠实粉丝(它现在有一个[vscode-dbt](https://marketplace.visualstudio.com/items?itemName=bastienboutonnet.vscode-dbt)插件!),尽管 Atom 或任何其他 IDE 也同样适用。Meltano、dbt、Singer、Airflow 和 Superset 大部分都是 Python,所以如果本地(非容器化)运行这些,我们需要 Python 和 Anaconda 或类似的设置。我们还需要确保安装了 git 和 docker。至于本地数据库,我们要确保我们安装了 SQLite 和 PostgreSQL,对于后来的 Mac,我强烈推荐 Postgres.app 以及 PosticoTablePlus 作为 GUI 客户端。大部分工作将使用各种 CLI 工具来完成,所以要确保有一个舒适的终端设置,或者使用 VS Code 的内置终端。我个人用的是 VS 代码对 iTerm2Oh-My-Zsh 的直通。

云部署将取决于几个因素。我强烈建议用 Github 或 GitLab 在 git 存储库中管理您的项目代码。然后,您可以设置 CI/CD 工作流(通过 Github Actions、Travis CI 等。),这有助于自动化所有的部署管理任务。我倾向于使用 Github,我发现 Github Actions 比一个独立的 CI/CD 服务更实用,但是其他人可能会有不同的看法。现在,当我们考虑项目的云部署时,有一系列事件涉及几个不同的移动部分:

  • 我们希望定期运行我们的提取和加载任务,可能由一个定义的时间表决定,这样做可能需要通过 AWS EC2、GCP 等产生一些可伸缩的执行主机。
  • 我们还希望定期运行我们的转换代码,尽管因为转换代码大多只是远程执行的 SQL 命令,所以我们的执行主机更容易推广到标准大小的主机。
  • 我们的数据仓库显然需要存在于某个地方,但当前下一代系统的美妙之处在于它们将计算和存储分开,并管理两者的协调。实际上,dbt 是我们与仓库实际内容的主要接口。
  • 虽然我们的提取、加载、转换和仓储功能都可能是短暂的批处理过程,但不幸的是,我们可能无法避免将 BI 层作为长期运行的 web 服务。这意味着要为 24/7 服务主机付费。如果你对支付托管服务不感兴趣,我们可以简单地提供预先生成的静态内容作为我们的 BI 层(这是完全可能的)。

Github 或其他 CI/CD 服务可以托管我们的部署流程,但是对于批处理流程和长期运行的服务,我们都需要托管基础设施。因为几乎所有东西都是容器化的,所以我们可以在我们自己的自动工作站或 GCP 基础设施上部署任何这些流程。另外值得注意的是,dbt 提供 dbt-cloud , 天文学家. io 提供优秀的气流托管服务, Preset.io 是即将推出的超集托管服务。唯一缺少的是 Meltano,似乎可以想象一个类似的托管服务将会出现。我们完全有可能最终能够在一个免费增值定价模式上托管我们堆栈的每个组件。

原来如此!我们有自己的数据堆栈架构。对于本系列的下一部分,我想通过一个更正式的教程来介绍如何使用所有这些组件来设置一个项目,并最终实现一个填充的数据仓库和一些动态数据可视化。在此之前,我绝对推荐阅读 Meltano、dbt 和 Superset。我还需要为 DS4FNP 教程提供一些数据集,所以请在评论中提出任何建议或请求。与此同时,你也可以享受由 Preset.io 团队编写的本教程。下次见!

数据故事:电话

原文:https://towardsdatascience.com/data-stories-phone-calls-3191b24aed1b?source=collection_archive---------43-----------------------

根据我一月份的电话通话数据,我 73%是婴儿潮一代...

👋你好。我又回来参加一个月有趣的数据活动了!上个月,我查看了我在 2019 年乘坐的所有次飞机航班,这个月我决定查看我在一个月内打了多少电话。(主要是因为朋友们很难相信我说打了多少电话,想看看数据怎么说)。

我花在电话上的每一分钟都被映射成 24 小时周期。如你所见,时间并没有真正的韵律或理由,除了我显然对晚上 10 点睡觉非常挑剔的事实

👴等等什么??

你知道那句老话吗,数据不会说谎?☝️That 的数据(是的,那个说我 73%是婴儿潮一代的数据),那是个谎言(嗯,也许吧🤔).关于人们每天在非工作原因上花多长时间打电话,没有一致的数据,但在一月份,我在 214 个电话上花了【214 小时 20 分 7 秒。这意味着在这一个月里,我可以看两遍《权力的游戏》第八季,而不是打所有的电话,并且还有几秒钟的空闲时间。(不过不用担心,我没那么讨厌自己😂)

在我接的 214 个电话中,137 个是拨出的,77 个是拨入的,只有 4 个是垃圾邮件(我知道,我也对此感到惊讶,我猜在联邦禁止通话名单上有所帮助😂).有些人在我给他们打电话的时候肯定会更好地接电话,但是在我所有未接的电话中,我又花了 10 分 51 秒等着看他们是否会接电话🙃

我追踪到的

与上个月相比,我这个月跟踪了相当有限的数据,但仍然看到了一些超级有趣的事情。

  • 一般电话通话信息:通话日期、时间、通话方向、通话持续时间、通话时间、我给谁打了电话
  • 其他信息:他们接了吗?,我接了吗?,电话标签?(我听过的唯一一个说这话的人是我妈妈(请继续关注她为什么使用这个短语),但它基本上是衡量我们是否交换了 3 个以上的未接电话),我和谁说话(这是衡量电话是否被传递的一种方式)

我没追踪到的是

  • 我打电话的时候在哪里。(我的家人取笑我,因为我开车时往往会打很多电话,但我没有跟踪,因为这需要近乎即时的数据跟踪,以免忘记我是否在开车,这有点不安全)

😴我有多“基础”??

我非常好奇的一件事是,我的电话是否有时间表,我是否在相同的时间给相同的人打电话,我的电话数量是否在工作日或工作日的晚上增加,以及所有这些类型的事情。

进入这个月,我有兴趣看看我是否在周末比工作日打更多的电话——在某种程度上,我认为我会在周末打更多的电话,但也考虑到工作日比周末多 3 天的事实……当我开始提取数据时,我意识到有几天我不工作,所以我将我的想法转移到工作日而不是工作日。当我这样做时,我们看到的是,我确实在工作日打了更多的电话,而且几乎都是在晚上 6 点到 8 点之间。在非工作日,我更加多样化,但仍有一些时段我更有可能打电话(事实上在下午 5 点左右有一些重叠,但在早上有明显更高的波动)。尽管我在工作日的晚上打了很多电话,但我平均打了一个电话,从下午 4:18 开始,持续了 4 分 53 秒。

除了周日,我惊讶地发现我的通话次数和平均通话时长在整个星期都保持不变——我原本预计会看到更多的跳跃,就像我们在第二张图中周一看到的那样。

☎️我管这个叫谁多??

这个月我非常好奇的一件事是,我的拨入电话和拨出电话的比例是否与每个人持平——所以从某种意义上看,人们是否“公平地”打电话给我,或者他们是否让我发起大多数电话。我发现我的大部分电话都是拨出的,但并不像我想象的那样偏斜。

我更有可能打电话,但总体来说并不严重。

同样的,我想知道是否有我一直不接电话的人,或者相反,我发现妈妈是我打电话时最忙的人(或者她只是最不爱我)🙃)但根据我给他们打了多少电话,人们的未接电话似乎相当一致(见上文),尽管我姐姐说我在她打电话时不接电话时颇有怨言,因为她总是接电话。

我妈妈和爸爸上画的圆圈是我在洛杉矶拜访他们的日子,我很好奇为什么我仍然和他们通了 3/5 天的电话。

这让我想到了我和我的直系亲属通话的日子,以及这些电话发生的日子是否有什么规律。事实证明,没有,但有趣的是,我并没有在周三或周四给我的姐妹们打电话——除了在月末,我连续两天给她们打电话。

最后,我想看看整个月我都在和谁打电话,至少从通话时长的角度来看是这样的。我以为我会和我妈妈说得最多,因为我几乎每天都和她说话,但事实证明我和我的姐妹们说得最多——尽管不是每天都和她们说话,但我们的平均通话时间要长得多,这样加起来。

📵TL;博士:

一月份,我花了大量时间打电话——主要是和我的直系亲属,但我一视同仁,整个月和 33 个不同的人通话。总共,我在电话上花了 14 小时 20 分 7 秒(相当于从波特兰,或者我住的地方到阿根廷布宜诺斯艾利斯的飞行时间)。当我打电话时,并没有真正的韵律或理由,也没有一周中的一天的异常(除了周日,我不知道我整个月的每个周日都做了什么…)

我要去计划未来的旅行或类似的事情,下个月我会带着一些东西回来(理论上)。如果你对你希望我跟踪的事情有任何想法,请随时在 LinkedIn 上给我发一条消息(请不要给我打电话,那太元了……)

用数据讲故事项目

原文:https://towardsdatascience.com/data-storytelling-project-python-750d63067833?source=collection_archive---------32-----------------------

使用 Python 的 Matplotlib 和 Seaborn 包进行数据可视化

我的项目的样本图表。

D 数据可视化通常服务于两个目标之一:呈现或探索数据。这里我依赖于前者,并使用 python 的 Matplotlib 和 Seaborn 包的组合来完成。

这篇文章将简要概述我在实习委员会的数据分析师项目中的发现。请继续关注第 2 部分,我将向您展示如何创建用于本项目的类似图形。

这项任务

你决定在洛杉矶开一家小型机器人咖啡馆。这个项目很有前景,但是很昂贵,所以你和你的合伙人决定尝试吸引投资者。他们对当前的市场状况感兴趣——当机器人服务员的新鲜感消退后,你还能保持成功吗?

得出总体结论,并对餐厅类型和座位数量提出建议。介绍你的研究,与投资者— 目标受众分享。

数据描述

洛杉矶餐馆的开源数据。点击此处此处下载数据集。

  • 对象名称—机构名称
  • 链-链的建立(对/错)
  • 对象类型—机构类型
  • 地址—地址
  • 数量——座位数量

洛杉矶流行什么类型的场所?

洛杉矶大约有 3/4 的餐馆是正规餐馆,其次是快餐(约 10%)。

当查看统计数字时,我们看到洛杉矶有 7255 家机构属于餐馆类型。相比之下,咖啡馆(拟议中的机构)只有 435 家,占全部机构的 5%。在此基础上,我们可以看看非连锁商店与连锁商店的比例。

连锁和非连锁企业的比例是多少?

在目前的洛杉矶市场中,小型企业(非连锁机构)占有很大的份额(约 2/3)。

哪些类型的企业是典型的连锁店?

咖啡馆成为连锁机构的几率更大。此外,大约 1/3 (31.6%)的餐馆属于连锁店;这可能就是为什么非连锁店在饼状图中出现的原因。

这一数字与 Allegra World Coffee 进行的一项深入研究(5000 项调查和 100 多次采访)的结果相一致,该研究表明,近五分之四(78%)的咖啡店是连锁机构,而且这一比例还在不断上升。

这些数字表明,从长远来看,开餐馆比开咖啡馆更为明智。

连锁餐厅的特点是什么:许多餐厅座位少,还是少数餐厅座位多?

该图向我们展示了每个机构 25 个座位的中位数,连锁倾向于拥有许多座位数量少(1-50 个座位)的机构,这是约 82%的机构的特征。

哪种连锁机构类型,相对于它们的总数,具有“许多座位”的机构最集中

因此,对于连锁机构来说,每种机构类型的少数座位比例都在 80%以上。

请注意,该图显示了机构类型的“多座位”比例,其中餐馆的份额最大,这可能是将总计“少座位”比例降至 80%的原因。

此外,餐馆设立的席位百分比很低,这表明洛杉矶有许多小型连锁餐馆。让我们继续探索

哪个连锁餐馆有最多的座位?

当我们考虑总平均数时,请注意 4 种机构类型的平均席位数是如何比它低 10 个以上的。

座位分布(见上图)上的大多数“许多座位”值可归因于餐馆和酒吧机构。考虑到前面的图表,连锁餐厅的平均座位数似乎是公司可以开始的合理座位数。

哪些街道的设施密度最高?

这些街道包含超过 110 家和多达 325 家的机构。进一步的分析表明,68%的街道包含一家餐馆,而 32%的街道包含不止一家。

如果公司想进入一个竞争激烈但蓬勃发展的市场,他们可能会对这些街道感兴趣。

推荐

考虑在洛杉矶开业时,考虑到(1)所选的店(小咖啡馆),(2)所提供服务的新颖性(机器人服务员),(3)当前的市场条件,(4)项目的成本,以及(5)维持成功开业的长期目标,给出以下建议:

  • 公司应该考虑开一家餐厅而不是咖啡馆,因为大玩家在餐厅市场占据的空间更小。小型咖啡馆正在被连锁咖啡馆击败。
  • 该公司应该考虑从一个有 48 个座位(连锁餐厅的平均座位)的独立机构开始,并根据其战略,选择一条有许多餐厅或一家餐厅的街道。然后,它可以基于其机器人服务员方法的新颖性,积极发展并建立一个连锁店。

结束语

作为一个编程领域的新手,几个月前,创建上述图表超出了我的能力范围。当然,我可以用 Plotly 之类的库,但是我真的想了解图形的结构。Matplotlib 和 Seaborn(构建于 Matplotlib 之上)帮助我实现了这一点。

就我个人而言,我会说这是一个具有挑战性的项目,它教会了我如何思考观众、背景以及我在创作上述图表时试图讲述的故事。也是通过这个项目,我爱上了数据可视化,并很高兴能继续实践和学习这个广阔的创造性领域。

无论如何,我承认我没有包括这个项目的任何代码以及我的分析过程;我选择不写它,因为我不想让这篇文章比现在更长。也就是说,请继续关注第 2 部分,我将向您展示如何制作上面概述的一些图表。

点击 此处 了解有关 Practicum 的数据分析师项目的更多信息,这是一门实践密集型课程,教授您数据科学的基础知识及其在商业分析中的应用。

另外,如果你愿意,让我们在 LinkedIn 上联系。

[## 数据分析师组合-数据分析师组合

我的数据分析师组合。你好。我是丹尼尔,最近刚从心理学院毕业,现在是数据科学专业的毕业生…

dangarci.com](https://dangarci.com/)

数据策略:分步指南

原文:https://towardsdatascience.com/data-strategy-a-step-by-step-guide-91529a75c72b?source=collection_archive---------28-----------------------

Startaê TeamUnsplash 上拍摄的照片

如何起草计划以确保您的数据活动符合公司的战略和目标?

介绍

如果你从事数据工作,这篇文章将帮助你了解你的工作如何适应公司的整体情况。如果你拥有自己的企业,它将帮助你绘制出从数据中获取最大价值的路线图。不管怎样,理解一家公司的战略如何考虑数据比以往任何时候都更重要。

起草数据策略的主要步骤是:

  1. 定义你的目标
  2. 定义基础设施
  3. 定义如何培养技能
  4. 定义您的数据治理
  5. 执行和修订

让我们来详细了解一下其中的每一项。

定义你的目标

当谈到从数据中获取价值时,业务目标通常分为三类:改进业务决策、改进运营或将数据用作资产。考虑到这些类别中的一个或多个,您应该概述您的公司希望通过数据实现什么。

改善业务决策

对于您业务的每个领域,请遵循以下步骤:

  1. 根据你公司的目标制定战略目标
  2. 确定有助于实现这些目标的关键问题(每个领域约 10 个问题),然后进行优先排序

这将为您提供一个需要使用数据来回答的问题列表,它将指导您的数据策略。

改善运营

改善运营的目标分为两类:优化日常运营流程和改善客户服务:

  • 优化日常运营流程

列出制造、仓储和配送、业务流程、销售和营销流程中的机会

  • 改善客户服务

列出开发更好服务或更好产品的机会

将数据作为资产使用

数据作为资产的使用通常在很早以前就被定义,有时是公司自己的核心业务。然而,你也有可能通过使用你已经收集的或者已经处于有利位置的数据来创造额外的收入流。

  • 提升公司整体价值

这种情况的一个很好的例子是谷歌,它自己最初的核心业务是基于聪明地使用数据。

  • 通过销售数据创造额外价值

这方面的一个例子是 Fitbit,这种腕带收集用户的健康和运动相关数据,并以信息的形式出售(你的心率,你走了多少步等)。)

基础设施

在选择合适的基础架构来托管和分析您的数据时,您应该首先回答以下问题:

  • 实现这些目标需要哪些数据?
  • 你将使用什么资源?

记住这一点,为以下每个任务选择最佳的工具和基础设施(注意,您可以对许多甚至所有任务使用相同的工具):

  • 收集
  • 商店
  • 分析和处理
  • 访问和交流

培养技能

既然您已经定义了目标,并选择了实现目标的工具和基础架构,那么您可以更好地了解您的组织需要哪些技能来充分利用这些工具,以及如何构建它们。

可能需要的技能有以下几大类:

  • 商业
  • 分析的
  • 计算机科学
  • 统计和数学
  • 创造力

在每一个领域中,您应该能够定义更具体的技能,比如编程语言或机器学习技术。使用这个框架,完成以下步骤:

  1. 定义你需要的技能
  2. 评估你已经拥有的技能
  3. 找到差距
  4. 定义填补缺口的策略(通常是这些策略的组合):
  • 雇用
  • 培养
  • 外包

很难找到具备你所需要的所有技能的人来填补空缺,所以如果你找到具备其中一些技能的候选人,你可以考虑对他们进行培训,以建立必要的能力水平,或者将他们整合到一个互补的团队中,共同填补这些空缺。

数据治理

数据可以是一种资产,但如果你不好好保管它,它也很可能成为一种负担。您的数据应该是安全的,不会被泄露、攻击,甚至不会被组织内部不必要的人访问。

这里需要考虑几个项目:

  • 在您的法律和数据部门培养必要的技能,以便您拥有精通 GDPR 和数据保护等主题的人员
  • 数据最小化是一个好的实践:不要保存你不需要的数据
  • 确保你有权收集和使用你需要的数据
  • 确保您的流程和基础设施考虑到了安全问题

执行和修订

您最终知道了您想要实现的目标、所需的工具和技能,并确保在数据安全方面没有疏漏。现在是时候把手弄脏了:

  1. 将执行分成更小的块
  2. 建立一个时间表
  3. 后续行动
  4. 定期修改(大约一年一次,取决于你的业务需求和目标)

这些步骤可以确保您有具体的目标(例如要雇佣的人员或要采购的工具)、时间表,以及有人负责项目并确保遵守截止日期和要求。由于您的业务目标和技术环境不是静态的,这是一个迭代的过程,因此您应该定期修改您的策略以确保它保持相关性,并进行必要的更新。

结束了

这篇文章大致基于数据策略,我认为这是一本好书,但它也包含了许多可能并不适合所有人的例子。然后,我试图将关键的见解提取到一步一步的指南中,并在需要时加入我自己的意见。

数据策略:好数据与坏数据

原文:https://towardsdatascience.com/data-strategy-good-data-vs-bad-data-d40f85d7ba4e?source=collection_archive---------27-----------------------

了解好数据是什么样的,并快速发现坏数据

好数据与坏数据。好数据,从公司战略中得出数据战略,并反馈到数据决策周期中。坏数据有许多“计划”在公司里飞来飞去,却没有一致的数据策略。图片由作者提供。

1990 年,总部位于弗吉尼亚的银行“图章银行”决定信任两位聪明人,理查德·费尔班克斯和奈杰尔·莫里斯,并对数据进行重大投资。他们决定将客户信贷部门变成一个大型实验室,根据不同的信贷接受者特征“测试”出不同种类的信贷条款,并因此收集了多年的数据。

这是一项巨大的投资,该部门在相当长的一段时间里“赔钱”。但是他们真正做的是获取数据,不仅仅是因为他们认为这是一项好的投资,费尔班克斯和莫里斯收集的是好的数据。数据整合成与公司战略一致的良好数据战略

他们收集数据的明确目的是提高 Signet Bank 信贷部门的决策能力。

好的数据也不过如此。良好的数据是您拥有良好的数据策略的结果。您收集、清理/丰富/转换、洞察这些数据,其唯一目标是改进决策。

唯一的问题是,外面有很多坏数据!无论你走到哪里,都会看到糟糕的数据。它是出于任何其他原因而接触的数据,而没有更大的目标。

我不确定仅仅在这个尺度上判断数据是否公平,但以我的经验来看,这似乎是唯一好的衡量标准。数据的唯一价值是提高公司的决策能力,从而帮助其采取更好的行动。我确实认为这是一个已经被许多伟大的思想家理解的教训。例如,Provost & Facett 在“商业数据科学:关于数据挖掘和数据分析思维,你需要知道什么”中指出了这一点。

Fairbank & Morris 明白这一点,并加以应用,将小“图章银行”变成了美国最大的银行之一 Capital One。价值十亿美元的巴西独角兽银行的联合创始人大卫·维勒兹也从一开始就直觉地理解这一点。他现在正在将他的关键见解应用到世界各地的其他市场。

现在让我们看看坏数据是什么样的,然后看一下这两个好数据的例子。

我写这篇文章是为了帮助你了解好数据和坏数据之间的巨大差异。帮助您了解在这两种情况下都可以应用的大量技术。让您有机会重新审视自己的数据策略,在竞争对手之前将坏数据转化为好数据。

坏数据

有很多坏数据的例子。当您试图让数据塑造数据策略时,坏数据就会出现,而不是相反。费尔班克斯和莫里斯没有雇佣一百名数据科学家来“想出伟大的东西”,也没有在整个公司收集大量随机数据。他们收集数据的目的是建立一个有利可图的信贷部门,然后雇佣数据科学家使用& 收集正确的数据并支持这一战略。

尽管有一些证据表明,一些科技公司实际上只是“雇佣聪明人来提出伟大的东西”,并取得了成功,但我确实认为,通常情况下,他们确实有数据战略来支持这一点。

坏数据 是…

…当一家公司投资建立一个数据湖,以“从数据中获得洞察力”,而不了解公司中是否有人会实际使用这些数据来做出比以前更好或更快的决策。

…当一家公司雇佣一些数据科学家来“利用大数据”,而没有考虑实际结果。

…当一家公司雇佣一群机器学习工程师&数据科学家来“想出一些伟大的东西”,而没有将他们融入他们的公司愿景。

…当一家公司因为中央数据收集团队出现问题而决定建立一个“数据网格”时,不知道这是否会导致其员工采取更好的行动。

…当一个分析部门因为人们要求而产生一份又一份的报告时,却不知道人们对这些报告的处理与以前有什么不同。

当一个机器学习团队花了四分之一的时间为网站构建最新的推荐引擎,而没有考虑一个简单的“热门项目”列表是否也能做得一样好。

…当一个营销部门安装了最新的营销自动化工具,但还没有大量的电子邮件营销活动和数据时。

…当一家公司花了一个季度的时间升级到最新版本的“AwesomeDataTool”时。x”到“跟随技术的步伐”,而不理解人们如何使用他们的 AwesomeDataTool 来做决定。

这不是好数据。好的数据来源于数据战略,并整合到公司战略中。

图章银行的良好数据(然后是 Capital One)

上面提到的导致坏数据的所有技术都可以用来产生好数据。也许对你来说是的。但是为了验证这一点,你必须问为什么,为什么,为什么

要想得到好的数据,你必须从顶层开始。从数据战略开始,也就是公司战略。你必须以采取更好的行动、做出更好的决定为目标,然后沿着这条路努力。这条路是什么样子的?如今,我倾向于认为数据之路就像 ThoughtWorks 使用的流程一样:

在 ThoughtWorks Intelligence Enterprise Series,https://www . ThoughtWorks . com/insights/articles/intelligent-Enterprise-Series-models-Enterprise-Intelligence # continuous Intelligence了解更多有关此周期的信息。图片由作者提供。

因此,如果我们从目标“更好的行动”开始,那么这些阶段是:

  • 采取更好的行动
  • 做出采取特定行动的决定
  • 具备做出具体决策的洞察力
  • 拥有信息以获得洞察力。
  • 已经收集了数据并将其转化为信息。
  • (让动作发出数据,让它被收集……这使得圆圈变满。)

如果我们开始分析 Signet 银行案例,我们从数据策略开始。在这种情况下,它是“收集&试验信用贷款,以获得足够的信息来撇去大银行不会提供的有利可图的信贷”。

这在当时是一个非常独特的视角。上世纪 80 年代,自动违约概率计算彻底改变了信贷市场。因此,对于违约概率低的人,信贷提供保持在标准利率。但在 1990 年,费尔班克斯和莫里斯决定,是时候对两者都下注了,价格歧视,或者换句话说,为不同的人提供不同的信用条款,关注盈利能力,而不仅仅是违约概率。

所以从本质上说,他们认为在违约概率较高的人群中,仍然存在有利可图的贷款!在违约概率较低的人群中,有更多的盈利选择,因为这些人实际上是信贷部门的输家。

因此,我们可以推导出 Signet Bank 正在采取并希望改进的行动…

图片由作者提供。

行动——“提供更有利可图的贷款”。正如费尔班克斯和莫瑞斯指出的那样,他们需要同时关注盈利能力和违约概率。这个有争议的决定就变成了…

决策—“我向什么样的客户提供什么样的贷款?”。在 20 世纪 80 年代,这一决定仅仅是基于这样一种认识,即有些人违约概率较高,而有些人违约概率较低。图章银行现在寻求的是一种不同的洞察力…

洞察——“我应该向哪些特定的客户提供哪些特定类型的贷款条件?”。为了获得这些见解,我们需要更多的信息。不幸的是,这些信息在 1990 年根本不存在。提供的唯一信息是基于社会人口数据的违约概率。

信息——“关于不同客户群盈利能力的硬数据,以及传统的违约概率和关于其他银行服务的客户类型、他们提供的条件的数据!!"。因为所有这些信息都会影响到向谁提供什么产品包的决策。所以最后归结到数据的问题,原始数据根本不可用…

数据—“新数据,提供给具有不同社会人口背景的人的不同条件的实验数据,以及他们各自的盈利能力和违约概率”。因此,对 Signet Bank 来说,事实证明,好的数据策略是收集这种数据,将其与其他数据源结合起来,再次回到循环中,进而做出更好的决策。

当然,之后,这个轮子继续转动,为每个阶段增加更多的价值。据报道,Capital One 每年都会推出数千种此类变体。要更深入地了解这个案例,请参阅 Provost 和 Fawcett 在 2013 年发表的“商业数据科学:你需要了解的数据挖掘和数据分析思维”。

这种情况已经很久了,公司倾向于不共享这种数据。但我最近无意中发现了金融业的另一个相关案例,即巴西独角兽企业“Nubank”。

nu bank 的良好数据

我知道 Nubank 是因为他们的机器学习框架 fklearn 。该公司正在机器学习问题领域创造大量开源软件。但事实证明,Nubank 不只是投资于机器学习,因为行业内的其他人都这样做,对机器学习和算法的投资与公司战略和由此产生的数据战略密切相关。

Nubank 正在打入“无银行市场”,这个市场在巴西约占人口的 50%。这些人根本无法进入银行系统。Nubank 正在通过提供针对特定群体的产品来改变这种状况。第一款产品是一款仅支持手机的托管信用卡,旨在以巴西金融业前所未有的速度向没有银行账户的人提供小额贷款,更多的产品正沿着这条道路前进。

但是,为“无银行账户者”服务带来了一个显而易见的问题:你如何知道一个无银行账户者是否会违约,或者对公司来说是否有利可图?毕竟,他们没有银行历史或金融信息,如信用评分。

这就是数据策略变得明显的地方。Nubank 的创始人大卫·维勒兹在一定程度上描述了他们是如何准确地意识到这个问题的,以及他们必须专注于非传统的方式来查看和收集他们的数据。

让我们从头开始:为没有银行账户的人提供合理收费的信用卡,同时保持盈利。这就是我们想要采取的行动。因此,数据策略变成了“收集&分析数据,以得出哪些人提供哪种产品,是信用卡、贷款还是借记卡”…

图片由作者提供。

行动—“应该向哪个客户提供哪个产品?用什么样的信用额度?以保持盈利。”。毕竟,就像 Signet Bank 一样,Nubank 正在应对巴西传统银行系统回避的一批客户。关键决策是像…这样的决策。

决策—“我们可以向哪个特定客户提供万事达信用卡,我们可以向谁提供贷款,贷款利率是多少?”。为了做出这样的决定,Nubank 需要…

洞察&信息—“客户的盈利能力以及违约概率。但作为一家快速增长的初创企业,他们也需要人们向其他人推荐该银行的可能性,就像忠诚度计划等其他产品的可能用途一样。”

根据维勒兹在 CNN 采访中的说法,这正是 Nubank 正在建立并继续发展的:

“然而,Nubank 已经将其业务建立在一个全新的基础上:基于“大量非传统信息”的独特数据集和算法,”贝莱斯说

还有…

“我们关注你住在哪里……你如何移动,你的朋友是谁,谁邀请你去 Nubank,你向什么类型的人寄钱,”他说。“我们观察你是否阅读信用卡的合同——事实证明,真正快速阅读合同的人往往是骗子。我们会观察你正在进行的交易类型,你是在购买食品杂货,还是在酒吧里。”

事实上,如果你仔细观察,Nubank 在利用这类信息方面处于特别有利的位置,因为他们也收集了许多传统公司不收集的数据!他们已经在你的手机上,有一个推荐程序,从而收集关键的行为数据。

事实上,这一点得到了 2011 年 Martens&Provost 的一项研究的支持,该研究基本上说:对于银行来说,使用你住在哪里和你的年龄的信息来计算&是一个很好的起点,但是使用 行为数据 就像这里提到的那些提供了盈利能力的实质性提升,并且增加了使用的数据越多,而社会人口统计数据则达到了一个明确的顶点

您还应该注意到,Nubank 处于独特的位置,可以进行与 Signet Bank 非常相似的实验!他们目前提供了巴西 50%的新发行信用卡,这意味着他们控制了无银行市场的巨大份额。通过对无银行账户市场进行实验,他们可以根据目前收集的数据点得出非常相似的见解。他们比任何人都做得更好。

这是否足以保持盈利还有待观察,但至少足以让 Nubank 成为一家价值 10 亿美元的初创企业,并让它们在全球扩张。

如果你想让你的公司在使用数据方面有所作为,我希望这能帮助你辨别好数据和坏数据,并让你走上正确的道路,专注于数据战略,而不是让数据决定“战略”。敬请关注。还有更多的好数据即将出炉。

资源

数据结构 1:哈希表

原文:https://towardsdatascience.com/data-structures-1-hash-tables-f520cb3dc85?source=collection_archive---------35-----------------------

哈希表及相关概念的简要介绍

万花筒Unsplash 上拍摄的照片

哈希表是实现字典的有效方法。在直接进入哈希表主题之前,掌握背景知识将有助于我们更好地理解与哈希表相关的概念。

什么是字典?

字典是一种抽象数据类型,用于存储键值对。

一个简单的字典→

每个键都与一个值相关联。让我们用一个简单的例子来构建我们的整个讨论。

假设您是一家销售各种水果和蔬菜的商店的老板,您想创建一个包含商店中所有产品及其相应价格的列表。为了简化这个过程,您决定为每个产品创建一个唯一的 productId。

这里要注意的一个重要事实是,第 1 列包含了人类已知的所有水果和蔬菜的名称,现在让我们假设你正在销售所有这些品种。第二列是一个万能设置 U 的按键对应每个产品。下一步是创建一个数据结构来存储这些细节(即键值对)

直接地址表

存储键(productIds)及其对应值(prices)的最简单方法之一是使用直接地址表。直接地址表只不过是一个数组,其中每个位置/槽对应于通用集合 U 中的一个键。下图说明了如何使用直接地址表来存储键值对。

作者图片

set U 中的每个元素都被映射到数组 T 中对应的槽中(为简单起见,图中只映射了键 0、1 和 2)。这里,pᵢ是 key i. 对应的价格,从图中可以看出,数组 T 中的 slot k 对应的是 universal set U 中的 key kt【k】是 key k. 对应的值

任何数据结构都支持三个主要功能:插入、删除和搜索。

INSERT(T, key, value):
   T[key] = valueDELETE(T, key):
   T[key] = NILSEARCH (T, key):
   return T[key]

所有三个操作都有 O(1) 的最坏情况时间复杂度,这是我们能达到的最好的时间复杂度。

直接访问表的限制

让我们继续我们的店主场景。

限制 1:

过了一段时间,你发现你的商店亏本了,于是你决定只卖有限种类的水果和蔬菜。假设你打算只卖 m (m < n) 种水果和蔬菜,并且每周都要更换品种。现在,你的直接访问表应该是这样的。

作者图片

黄色区域包含与您选择的 m 种水果和蔬菜相对应的 m 个按键。现在,只有与黄色区域中的键相对应的槽具有值,其余的为零,即仅使用了 n 槽中的 m 槽,我们正在浪费( m-n 槽所占用的内存。假设 n = 100,000,m=1000,那么您将浪费为该阵列分配的 99%的内存。因此,当通用集合 U 的大小与实际使用的键的数量相比非常大时,直接访问表在存储器使用方面变得低效。

限制 2:

如果您有 2Gb 的 RAM,并且使用 8 个字节来存储每个值(价格)会怎么样?

数组的最大大小 T = (2 * 1024 * 1024 * 1024) / 8 = 268,435,456

如果通用集合 U 的大小大于 268,435,456,则直接访问表无法使用,因为没有足够的内存来创建数组。

因此,直接访问表只对合理的大小有效 n.

哈希表

哈希表克服了上述两个限制。但是哈希表是如何工作的呢???

通过直接寻址,一个键为 k 的元素被存储在槽 k 中。在散列表中,具有键 k 的元素被存储在槽h(k)中,其中 h 被称为散列函数。下图将清楚地说明键是如何映射的。

作者图片

哈希函数将通用集合 U 中的每个键映射到数组 T 中的一个槽。如果数组 T 的大小是 m ,那么

h : U →

之前对于直接访问表,数组 T 的大小应该是| U |(数组 U 的大小)。然而,哈希表允许数组的大小为m(m<|U|)也就是说,我们可以创建任意大小的数组,而不考虑通用集合 U 的大小。

即使哈希表克服了直接地址表的限制,哈希表也有自己的挑战。

冲突

如果两个不同的键 k₁k₂ 有相同的哈希值,即 h(k₁) = h(k₂,会发生什么?这种现象叫做碰撞。还好有办法处理。

  • 选择一个有效的散列函数来有效地分配密钥将减少发生冲突的可能性。让我们将黄色区域中的一组实际键命名为 set W 。如果集合 W 的大小大于数组 T 的大小(即|W|>|T|),那么冲突就无法完全避免。然而,通过使用均匀分布密钥的有效散列函数,冲突的数量可以被最小化。
  • 链接是用于冲突解决的另一种方法。假设两个键 k₁k₄ 有相同的哈希值,那么我们使用一个链表(通常是双向链表)来存储它们,如下图所示。

作者图片

链式哈希表时间复杂度

  • 插入

键值对被插入到链表的头部。如果我们假设被插入的键还不存在,那么最坏情况下插入的运行时间是 O(1)。我们可以在插入之前检查一个键是否已经存在,这需要额外的成本(这与链表的大小成正比,因为您必须遍历链表)

  • 删除

假设链表是一个双向链表,双向链表中的一个元素 x (键值对/链表中的一个节点)可以以最坏的时间复杂度 O(1)被删除(更多关于双向链表删除的信息)。然而,如果 delete 函数的输入是 key k (不是节点 x ),那么删除的时间复杂度与链表的大小成比例,因为您必须遍历链表来找到相应的节点。

  • 搜索

对于 search 来说,最差情况下的运行时间是 O(| W |),因为在最差情况下,散列函数会为所有键产生相同的散列值。然而,在实践中,这种情况从未发生过。理论上已经证明,对于存储 n 个元素的 m 大小的哈希表(定义 n / m负载因子),在简单均匀哈希的假设下,平均用例运行时间为θ(1+n/m)。

什么是好的哈希函数?

在一个好的散列函数中,每个键都同样可能散列到数组 T 中的 m 个槽中的任何一个,而与任何其他键散列到的位置无关。然而,重要的是要注意,我们不能检查这个属性,因为我们很少事先知道,从其中提取密钥的概率分布。

本文只打算提供哈希表的一个高层次的整体概念(不是非常高级的概念)。如果你感兴趣的话,可以参考下面这本书,这本书是我写这篇文章的主要参考资料。

资源: 科尔曼、T. H .、莱瑟森、C. E .、里维斯特、R. L .、&斯坦恩、C. (2009)。算法介绍。麻省理工出版社。

数据结构 2:跳过列表

原文:https://towardsdatascience.com/data-structures-2-skip-lists-d36b58191d69?source=collection_archive---------20-----------------------

平衡树的概率替代方案

介绍

二叉树可以用来表示抽象数据类型,如字典和有序列表。然而,当我们按顺序插入元素时,很有可能最终得到一个性能很差的退化数据结构(例如,按顺序向二叉树插入 2,3,4,5,6,7,8)。这就是为什么我们经常使用平衡的树形结构,在执行操作时重新排列树形结构。跳过列表可以作为平衡树的替代物(根据约束条件,它们甚至可以执行得很好)。由于它们不像平衡树结构那样流行,我认为作为我的数据结构系列的第二篇文章来写这篇文章可能会有用。

链接列表

链表是一种非常熟悉的数据结构,简单且易于实现。下图说明了一个排序的单链表,其中每个节点都包含一个指向其右邻居的指针。

作者图片

排序链表操作及时间复杂度

我们寻找的常见操作是搜索、插入和删除。让我们来看看伪代码。

Search (list,search key)
//通过线性搜索找到 search key

Insert(node,newNode)//插入 new node 作为节点
new node . next←node . next
node . next←new node

Delete(node)//删除节点
obsoleteNode←node . next
node . next←node . next . next
free(obsolete

相应地,平均案件时间复杂性将是,
-搜索:θ(n)
-插入:θ(1)
-删除:θ(1)

其中 n 是链表的长度(或链表中的节点数)

缺点

  • 搜索效率不高。很难在不到 O(n)的时间内进行搜索
  • 遍历很慢,因为您必须一次遍历一个节点,从第一个节点开始到感兴趣的节点。不能直接跳到中间。

跳过列表提供了这些缺点的解决方案。

完美的跳过列表

让我们对链表做一些修改。在我们最初的链表中,每个节点只有一个指向它右边邻居的指针。对于每隔一个节点,让我们添加一个指针指向前面两个节点。下图给出了一个更好的想法。

作者图片

对于一个链表,我们必须在搜索操作中遍历 n 个节点(在最坏的情况下)。现在,经过我们的修改,我们只需要遍历 n /2 + 1 个节点。例如,如果我们必须搜索值 80,

作者图片

我们从最高级别的标题开始。它指向值为 10 的节点。80 大于 10,所以我们移动到值为 10 的节点。它指向 28,也小于 80。我们继续这样,直到我们达到 70 岁。它指向值为 90 的节点。因为 90 大于 80,所以我们要低一级。现在指针指向 80。任务完成!!!我们只遍历了 4 个节点,而不是 7 个(这是典型链表的情况)。

让我们更进一步,为每第四个节点添加一个指针,指向前面第四个节点。下图演示了新的结构。

作者图片

现在搜索怎么样了?我们只需要遍历 n /4 + 2 个节点。如果我们搜索 80 个,

作者图片

我们可以这样继续下去,每一个 2ˣ)th 节点前面都有一个指针指向 2ˣ节点。我们可以很容易地观察到新数据结构中的一些重要特性,我们还没有命名这些特性。

  1. 将会有最大的 log₂(n)等级(确切地说是 ceil(log₂(n)
    【在我们的例子中,log₂(8) = 3 个等级】
  2. 每个更高的级别将包含其下一级别的一半数量的元素。[在我们的示例中,级别 1 有 8 个元素/节点,级别 2 有 4 个元素,级别 3 只有 2 个元素]
  3. header 和 NIL(姑且这样称呼吧)节点在每一层中都存在
  4. 它非常类似于平衡二叉树

现在我们可以在 O(log n )时间内搜索,即使是在最坏的情况下,这与链表相比是一个显著的改进。这就是我们所说的完美跳过列表(最后我们给我们的新数据结构起了一个名字😊)即使搜索性能很好,插入和删除现在也很困难,因为很难保持这种模式,因为新节点可以插入到任何地方,或者任何现有节点都可能被删除。在每次插入/删除之后,我们不能重构整个列表。我们该如何处理?通过 随机化

随机跳过列表

让我们放松一点约束。之前我们说过,每一级的元素数量应该是下一级的一半。现在让我们期待每一层的元素数量是其下一层的一半。

让我们假设我有一枚硬币。当我插入一个新的节点时,我会投掷硬币(任意次)直到我得到一条尾巴。我获得的连续人头数将决定我应该给那个特定的节点添加多少层。

插入操作

下图清楚地说明了如何在列表中插入 35。

作者图片

步骤 1: 插入 35,创建一个指向右边邻居的指针。
第二步:抛硬币。
第三步:由于是人头,增加一级,连接到右边最近的节点,至少 2 级。连接左侧最近的节点至少 2 级
第四步:再抛硬币。
第五步:由于是尾数,终止。

假设如果我们在得到尾部之前得到了另一个头部,那么我们当前的节点将有三个级别,而 header 和 NIL 将只有两个级别。在这种情况下,我们应该向 header 和 NIL 节点添加额外的级别。header 和 NIL 节点应该始终具有与具有最大级数的节点相同的级数。

删除操作

现在就删 70 吧。

作者图片

我相信图表本身解释了一切。

搜索操作的方式与完全跳过列表中的方式完全相同。

掷硬币事件是引入随机化的事件。因为得到正面的概率是 0.5,所以我们试图重新创建一个随机化的跳过列表,它类似于我们的完美跳过列表,其中每一级与下一级相比只有一半的元素数量。

如果我们使用不同的概率函数,时间和内存消耗以及跳表结构会发生什么是一个有趣的话题。

【你可以从底部提供的资源中了解更多相关信息】

值得注意的是,我们牺牲内存来提高性能。添加额外的级别意味着添加更多的指针(在 64 位系统上,每个指针消耗 8 个字节)。

结论

  • 跳跃列表可用作平衡树(如 AVL 树)和自调整树(如八字树)的替代物。然而,跳转列表是一个相对简单的数据结构,非常容易实现。
  • 我们可以很容易地修改跳转列表来引入并行性(甚至有并行无锁跳转列表)
  • 为了减少时间消耗,跳转列表倾向于使用稍微多一点的内存(在任何数据结构中,内存和性能之间的权衡是不可避免的)

最后一个重要问题。为什么我们称之为跳过列表?因为我们在遍历过程中跳过了节点(如果你到现在还没弄明白的话😂)

资源:普格,W. (1990)。跳过列表:平衡树的概率替代。ACM 的通信33 (6),668–676。

Python 中的数据结构和算法

原文:https://towardsdatascience.com/data-structures-algorithms-in-python-68c8dbb19c90?source=collection_archive---------2-----------------------

开始掌握数据结构和算法概述

图片来自 Pixabay维基图片

为了发展一个完整的头脑:研究艺术的科学;研究科学艺术。学会如何去看。意识到每件事都与其他事相关联。

列奥纳多·达· 芬奇

介绍

这篇文章的目的是给你一个 Python 中数据结构和算法的全景。对于数据科学家来说,这个主题非常重要,可以帮助他或她以更有效的方式设计和解决机器学习模型。

我们将看到内置数据结构、用户定义数据结构的实际例子,最后但同样重要的是,我将向您介绍一些算法,如遍历算法、排序算法和搜索算法。

所以,让我们开始吧!

第一部分:内置数据结构

顾名思义,数据结构允许我们组织、存储和管理数据,以便有效地访问和修改。

在这一部分,我们将看看内置的数据结构。Python 中有四种类型的内置数据结构:列表、元组、集合和字典。

列表

列表是用方括号定义的,包含用逗号分隔的数据。该列表是可变的和有序的。它可以包含不同数据类型的混合。

出局:

january['january', 'february', 'march', 'april', 'may', 'june', 'july']['birthday', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december']

下面是列表中一些有用的函数。

出局:

What
is
your
favourite
painting
?Who-is-your-favourite-artist-?

出局:

['Chagall', 'Kandinskij', 'Dalí', 'da Vinci', 'Picasso', 'Warhol', 'Basquiat']

元组

元组是另一种容器。它是不可变有序元素序列的数据类型。不可变的,因为你不能从元组中添加和删除元素,或者就地排序。

出局:

The dimensions are 7 x 3 x 1

设置

集合是唯一元素的可变且无序的集合。它可以让我们快速地从列表中删除重复项。

出局:

{1, 2, 3, 5, 6}
False
Basquiat

字典

字典是一种可变的无序的数据结构。它允许存储一对项(即键和值)。

如下例所示,在字典中,可以将容器包含到其他容器中以创建复合数据结构。

出局:

In a Sentimental Mood
Lacrimosa

第二部分:用户定义的数据结构

现在我将向您介绍三种用户定义的数据结构:ques、stack 和 tree。我假设您对类和函数有基本的了解。

堆栈使用数组

堆栈是一种线性数据结构,其中元素按顺序排列。它遵循 L.I.F.O 的机制,意思是后进先出。因此,最后插入的元素将作为第一个元素被删除。这些操作是:

  • Push →将元素插入堆栈
  • Pop →从堆栈中删除元素

要检查的条件:

  • 溢出情况→当我们试图将一个元素放入已经具有最大元素数的堆栈时,就会出现这种情况。
  • 下溢情况→当我们试图从空堆栈中删除一个元素时,就会出现这种情况。

出局:

5
True
[10, 23, 25, 27, 11]
overflow
11
27
25
23
10
underflow

队列使用数组

队列是一种线性数据结构,其中的元素按顺序排列。它遵循先进先出的 F.I.F.O 机制。想想当你和你的朋友去电影院时,你可以想象第一个给你票的人也是第一个站出来的人。队列的机制是相同的。

描述队列特征的方面。

两端:

  • 正面→指向起始元素
  • 后→指向最后一个元素

有两种操作:

  • 入队→将元素插入队列。它将在后方完成。
  • 出列→从队列中删除元素。这将在前线完成。

有两个条件:

  • 溢出→插入到已满的队列中
  • 下溢→从空队列中删除

出局:

[2, 3, 4, 5]
[3, 4, 5]

(一般树)

树用于定义层次结构。它从根节点开始,再往下,最后的节点称为子节点。

在本文中,我主要关注二叉树。二叉树是一种树形数据结构,其中每个节点最多有两个孩子,称为左孩子和右孩子。下面你可以看到一个用 python 编写的二叉树的表示和例子,其中我构建了一个名为 Node 的类和表示不同节点(A、B、C、D 和 E)的对象。

作者图片

无论如何,还有其他用户定义的数据结构,如链表图。

第三部分:算法

算法的概念自古就有。事实上,古埃及人使用算法来解决他们的问题。然后他们把这种方法传授给希腊人。

algorithm 一词源自 9 世纪波斯数学家 muḥammad·伊本·穆斯哈勒·赫瓦·里兹姆,他的名字拉丁化为 Algorithmi。Al-Khwārizm 也是一名天文学家、地理学家和巴格达智慧之家的学者。

正如你已经知道的,算法是以有限的顺序来解决问题的指令。

当我们编写一个算法时,我们必须知道确切的问题是什么,确定我们需要从哪里开始和停止,并制定中间步骤。

有三种解决算法的主要方法:

  • Divide et Impera(也称为分而治之)→它将问题分成子部分,并分别解决每个子部分
  • 动态规划→它将问题分成子部分,记住子部分的结果,并将其应用于类似的问题
  • 贪婪算法→解决问题时采取最简单的步骤,而不用担心未来步骤的复杂性

树遍历算法

python 中的树是非线性数据结构。它们以根和节点为特征。我用之前为二叉树构造的类。

树遍历指的是恰好访问树中的每个节点一次,以便更新或检查它们。

作者图片

有三种类型的树遍历:

  • 有序遍历→指的是先访问左边的节点,然后是根,再是右边的节点。

这里 D 是最左边的节点,其中最近的根是 B .根 B 的右边是 e .现在左边的子树完成了,所以我向根节点 A 移动,然后到节点 c。

出局:

D
B
E
A
C
  • 前序遍历→指的是先访问根节点,然后是左节点,再是右节点。

在这种情况下,我移动到根节点 A,然后移动到左边的子节点 B 和子节点 d。之后,我可以转到节点 E,然后是节点 c。

出局:

A
B
D
E
C
  • 后序遍历→指的是先访问左边的节点,然后是右边的节点,最后是根节点

我到最左边的节点 D,然后到右边的节点 e,然后,我可以从左边的节点 B 到右边的节点 c,最后,我向根节点 a 移动。

出局:

D
E
B
C
A

排序算法

排序算法用于按照给定的顺序对数据进行排序。可分为归并排序和冒泡排序。

  • 归并排序→遵循分治规则。给定的列表首先被划分成更小的列表,并比较相邻的列表,然后按照所需的顺序对它们进行重新排序。因此,从作为输入的无序元素总结,我们需要有作为输出的有序元素。下面是描述每个步骤的代码。

出局:

input - unordered elements: 15 1 19 93
output - ordered elements: 
[1, 15, 19, 93]
  • 冒泡排序→它首先比较相邻的元素,如果它们没有按照指定的顺序排序,则进行排序。

出局:

[1, 3, 9, 15]
  • 插入排序→它在给定的列表中选择一个条目,并把它放在应该放的地方。

出局:

[1, 3, 9, 15]

还有其他排序算法像选择排序外壳排序

搜索算法

搜索算法用于寻找给定数据集中存在的一些元素。有许多类型的搜索算法,如线性搜索,二分搜索法,指数搜索,插值搜索,等等。在这一节,我们将看到线性搜索和二分搜索法。

  • 线性搜索→在一维数组中,我们必须搜索特定的关键元素。输入是我们想要找到的一组元素和关键元素。因此,我们必须将关键元素与组中的每个元素进行比较。在下面的代码中,我尝试在列表中查找元素 27。

出局:

'not fund'
  • 二分搜索法→在这个算法中,我们假设列表是升序排列的。因此,如果搜索关键字的值小于列表中间的元素,我们将区间缩小到下半部分。否则,我们缩小到上半部分。我们继续检查,直到找到值或者列表为空。

出局:

False
True

结论

现在你对数据结构和算法有了一个大概的了解。所以,你可以开始深入理解算法。

我为这篇文章选择的维特鲁威人的美丽形象不是随便的。这幅画是基于理想人体与几何学的关系。事实上,对于这种表现,达芬奇受到了维特鲁威斯的启发,他将人的身体描述为确定建筑中正确比例的理想身体。

关于算法,维特鲁威人隐藏了一个秘密算法,这个算法被艺术家们使用了几个世纪,以证明他们的作品受到了神圣比例的启发。

有时候我喜欢想,也许达芬奇,通过他的精彩作品,想要定义最重要的算法,也就是生命的算法。

感谢你阅读这篇文章。您还可以通过其他方式与我保持联系并关注我的工作:

数据结构和算法之旅

原文:https://towardsdatascience.com/data-structures-and-algorithms-journey-80d225cfbbd8?source=collection_archive---------46-----------------------

我们将开始一系列基于数据结构和算法的课程。

作者图片

本文目标:

  1. 描述数据结构的重要性
  2. 描述术语算法
  3. 什么是算法复杂性
  4. 求解算法的方法

他的特定概念被认为是软件工程中最重要的概念之一,并成为大多数顶级公司的主要检查点。在这一系列课程中,我们将讨论数据结构和算法概念背后的思想,并在接下来的课程中实现几种算法。

什么是数据结构?

数据结构的简单定义是“在你的计算机上存储数据的不同方式”或者“表示和组织你的数据的系统方式”。重要的是,任何数据结构都应该能够有效地用于任何给定的任务。例如,搜索、转换数据、编辑、更新等。

数据结构的特征

数据结构有三种不同的特性,我们可以根据用途对它们进行分类。

  • 时间复杂度

运行时间或 执行时间 被定义为给定任务的时间复杂度。对于给定的上下文,我们应该使用尽可能好的数据结构,以尽可能降低时间复杂度。

  • 基于特定接口的正确性

每个数据结构都包含其 接口 即给定数据结构所支持的操作。同样,应该有一个正确的 实现基于正确接口的 数据结构。理想情况下,数据结构应该带有正确定义的接口和描述性实现。

  • 空间复杂度

空间复杂度将衡量给定数据结构的内存使用情况。最终,我们应该优化我们的算法解决方案,以便对于具有大量数据集的解决方案,尽可能地最小化空间复杂度。

为什么我们需要任何类型的数据结构?

如今,随着新处理器、计算机系统的发展,用我们普通的计算机处理大量的数据记录并不是一项复杂或详尽的任务。但是,当遇到基于一些标准的某些不可预测的情况时,如数据大小检索速度多线程处理,我们应该专注于为给定场景实现适当的数据结构。

假设您正在实现一个简单的文本搜索,该搜索基于一个拥有超过数百万条记录的大型文本语料库。如果您试图并行处理数据对象,并且您的执行时间不应该超过亚毫秒。

正确设计的数据结构将帮助您以高效的方式完成这些类型的任务。

什么是算法?

算法是完成任何任务的一步一步的过程。换句话说,算法是一组定义明确的指令,用来完成给定的任务,而不依赖于任何特定的编程语言。在本系列中,我们将尝试用 nodejs 和 python 编程语言实现主要的数据结构和算法,以了解任何给定算法的相似性。

给定算法的属性

正如我们之前提到的,算法应该有一组定义良好的指令来完成给定的任务,即使你有一组指令来完成一项任务,但如果以下特征不满足,则该任务将不会被定义为算法。

算法属性(图片由作者提供)

  • 毫不含糊

算法的每一步都应该清晰,所有的输入输出也应该清晰。

  • 有限性

算法应该能够在有限数量的步骤出现后终止

  • 可行性

该算法应该能够利用可用资源工作

  • 独立

算法中的所有步骤应与语言无关(应能在任何编程语言中实现)

  • 输入

算法应该有零个或多个明确的输入,这些输入应该是定义明确的输入。

  • 输出

算法应产生一个或多个明确定义的输出。

问题可以用很多方法解决。让我们设计一个简单的算法来识别和描述我们在上一段中解释的过程。

例子:设计一个算法,生成给定数字的平方值。

**Step 1 −** START**Step 2** − define a value **A** which you need to get the square**Step 3** − define the operation of **A** * **A****Step 4** − store output of step 3 to new variable **C****Step 5** − return **C****Step 6** − STOP

现在,仔细检查一个算法的所有特征,并尝试对照上面的简单算法来证明所有特征的合理性。

自学:尝试设计以下算法,检查你的算法是否支持我们之前描述的所有属性。

  1. 设计一个算法,从给定的三个正数中确定最大值
  2. 设计一个算法来得到斐波那契数列的第 10 个值

在分析你的算法时,算法的理论分析是非常重要的。 先验分析是一种着重分析算法效率的分析类型。

一个算法的效率可以用算法复杂度来衡量。算法的复杂度主要基于两个因素,即时间因素空间因素

空间复杂性

空间复杂度由算法执行其生命周期时所需的内存空间总量来衡量。

**Total Space Complexity = "**fix part complexity**" + "**variable part complexity**"**

固定零件复杂度被认为是存储相关数据和变量所需的空间量。例如,指定的常数,独立于问题大小的变量。

可变零件复杂性取决于问题的大小,并且组件在执行时间内动态变化。

时间复杂度

时间复杂度是指完成给定算法所需的时间单位总量。

时间复杂度与输入大小线性相关,这意味着当输入大小增加时,时间复杂度也随之增加。

渐近分析

在算法世界中,计算给定算法的运行时间指的是渐近分析。

算法的运行时间总是基于参数和算法背后运行的函数。

通常我们可以基于三种不同的情况来测量算法运行时间(最佳平均最差)。

我们主要考虑最坏情况的场景,这意味着执行算法所需的最大时间。

流行算法的渐近表示法

复杂性计算(图片由作者提供)

算法的设计是为了获得所需问题的最优解。在寻找解决方案的过程中,我们可以定义三种不同的方法来解决特定的问题。

实现算法最优解的方法(图片由作者提供)

贪婪的方法

贪婪方法是一种常见的问题解决方法,它使用该方法通过寻找局部最优解来解决特定问题。

大多数时候贪婪方法收敛于局部最优解,而很难得到全局最优解中的,但是随着时间和迭代,局部最优解接近全局最优解。

:在下面的树形结构中找到最大的路径

贪婪方法与实际解决方案(图片由作者提供)

以下是一些流行的贪婪算法示例:

  • 旅行推销员问题
  • 克鲁斯卡尔最小生成树算法
  • Dijkstra 的最小生成树算法
  • 背包问题
  • 作业调度问题

尝试使用适当的算法解决这个问题。

分而治之

分而治之很好理解。在这种方法中,问题将分成更小的子问题,这些子问题将独立解决。当你把主问题分成子问题时,你可以一直分下去,直到你找到一个原子问题(不能再分成更多部分的子问题)。一旦你单独解决了子问题,你就可以合并所有的结果来生成你的问题的最优解。

示例:查找一组给定数据库记录的最长公共前缀

实际应用中的分而治之(作者图片)

以下是一些流行的贪婪算法示例:

  • 二分搜索法算法
  • 合并排序算法
  • 快速排序算法
  • 最近点对法
  • 库利-土耳其快速傅立叶变换(FFT)

动态编程方法

动态编程方法非常类似于分而治之的方法,但是由于问题解决方法的原因,它与分而治之的方法略有不同。

不像分而治之的方法,一旦你把你的问题分成亚原子层次的问题,你就不能单独解决那些原子层次的问题。不是解决单个原子级的问题,你将被记住,并在其他重叠的(重复的)子问题中使用那些更小的原子级问题的结果。

在动态编程方法中,通过使用原子问题的最优解和记忆机制可以获得最优解。

备忘录:动态编程使用先前解决的亚原子问题的记忆结果来解决给定迭代中类似的小问题。

示例 : 斐波那契数列数值表示

动态编程在斐波那契数列中的应用(图片由作者提供)

以下是一些流行的贪婪算法示例:

  • 背包问题
  • 项目调度问题
  • Dijkstra 算法的最短路径
  • 汉诺塔问题
  • 斐波那契数列

总之,我们已经了解了各种数据结构和算法的基本定义和思想。在以后的文章中,我们将讨论几种算法表示和许多现实问题的解决方案。除此之外,我们将实现算法来解决上述问题。

C++中的数据结构—第 1 部分

原文:https://towardsdatascience.com/data-structures-in-c-part-1-b64613b0138d?source=collection_archive---------1-----------------------

在 C++中实现通用数据结构

C++是支持创建类的 C 编程语言的扩展,因此被称为“ C with classes ”。它用于创建高性能应用程序,并为我们提供对计算资源的高级控制。在本文中,我将向您展示我在上一篇文章每个程序员都必须知道的 8 种常见数据结构中讨论的 4 种数据结构的 C++实现。

[## 每个程序员都必须知道的 8 种常见数据结构

数据结构是一种在计算机中组织和存储数据的专门方法,以这种方式我们可以执行…

towardsdatascience.com](/8-common-data-structures-every-programmer-must-know-171acf6a1a42)

让我们深入研究代码。

麦克斯韦·纳尔逊Unsplash 上拍摄的照片

1.数组

一个数组是一个固定大小的结构,可以保存相同数据类型的项目。数组是有索引的,这意味着随机访问是可能的。在许多编程语言中,数组通常以本机数据结构的形式出现。然而,不要把array和像 python 这样的语言中的list这样的数据结构混淆。让我们看看数组是用 C++表示的;

// simple declaration
int array[] = {1, 2, 3, 4, 5 };
// in pointer form (refers to an object stored in heap)
int * array = new int[5]; 

然而,我们已经习惯了更友好的vector<T>数据结构,我们可以将数据推送到这种结构,而不用担心数据的大小。让我们看看如何实现一个我们自己的list数据结构,它可以自己调整大小。

using namespace std;

class DynamicArray
{
private:
    int size_;
    int max_;
    int *arrayholder_;

public:
    DynamicArray()
    {
        this->size_ = 0;
        this->max_ = 5;
        this->arrayholder_ = new int[5];
    }

    ~DynamicArray()
    {
        delete[] this->arrayholder_;
    }

    int size()
    {
        return this->size_;
    }

    int& operator[](int i) 
    {
        assert(i < this->size_);
        return this->arrayholder_[i];
    }

    void add(int n)
    {
        if (this->max_ < this->size_ + 1)
        {
            this->max_ *= 2;
            int *tmp_ = new int[this->max_];

            for (size_t i = 0; i < this->size_; i++)
            {
                tmp_[i] = this->arrayholder_[i];

            }
            delete[] this->arrayholder_;
            this->arrayholder_ = tmp_;
            this->arrayholder_[this->size_] = n;
            this->size_ += 1;
        }
        else 
        {
            this->arrayholder_[this->size_] = n;
            this->size_ += 1;
        }
    }
};

int main(int argc, char **argv)
{
    DynamicArray darray;
    vector<int> varray;

    for (size_t i = 0; i <= 15; i++)
    {
        darray.add(i);
    }
    return 0;
}

我们可以看到上面的DynamicArray的初始大小为 5。同样在add函数中,我们可以看到,如果我们已经达到了最大容量,数组大小将被加倍和复制。这就是vector<T>数据结构在现实中的工作方式。通常,基数在 30 左右。知道这一点可能会在面试中有所帮助。

还有一点需要注意的是,我们同时使用了构造函数析构函数。这是因为我们有一个指针指向随着数组扩展而分配的内存。必须释放这些分配的内存以避免溢出。这个实现的美妙之处在于用户不需要知道任何关于丑陋指针的事情。重载operator[]允许像本地数组一样进行索引访问。有了这些知识,让我们继续下一个数据结构,链表

2.链接列表

链表是一个顺序结构,由一系列相互链接的线性项目组成。您只需要知道遍历这个数据结构的链的一端。在大小频繁变化的情况下,使用数组可能没有优势,除非随机访问数据(除非实现收缩操作,否则扩展会导致更长的复制时间并使用更多内存)。因此,链表可以被认为是一种支持频繁大小变化和顺序访问的数据结构。

让我们看一下我们的实现。

using namespace std;

template <typename T>
class Node
{
    public:
    T value;
    Node *next;
    Node *previous;

    Node(T value)
    {
        this->value = value;
    }
};

template <typename T>
class LinkedList
{
    private:
    int size_;
    Node<T> *head_ = NULL;
    Node<T> *tail_ = NULL;
    Node<T> *itr_ = NULL;

    public:
    LinkedList()
    {
        this->size_ = 0;
    }

    void append(T value)
    {
        if (this->head_ == NULL)
        {
            this->head_ = new Node<T>(value);
            this->tail_ = this->head_;
        }
        else
        {
            this->tail_->next = new Node<T>(value);
            this->tail_->next->previous = this->tail_;
            this->tail_ = this->tail_->next;
        }
        this->size_ += 1;
    }

    void prepend(T value)
    {
        if (this->head_ == NULL)
        {
            this->head_ = new Node<T>(value);
            this->tail_ = this->head_;
        }
        else
        {
            this->head_->previous = new Node<T>(value);
            this->head_->previous->next = this->head_;
            this->head_ = this->head_->previous;
        }
        this->size_ += 1;
    }

    Node<T> * iterate()
    {
        if (this->itr_ == NULL) 
        {
            this->itr_ = this->head_;
        } 
        else 
        {
            this->itr_ = this->itr_->next;
        }
        return this->itr_;
    }

    T ptr()
    {
        return this->itr_->value;
    }

    void resetIterator()
    {
        this->tail_ = NULL;
    }
};

int main(int argc, char **argv)
{
    LinkedList<int> llist;
    llist.append(10);
    llist.append(12);
    llist.append(14);
    llist.append(16);
    llist.prepend(5);
    llist.prepend(4);
    llist.prepend(3);
    llist.prepend(2);
    llist.prepend(1);

    cout << "Printing Linked List" << endl;

    while(llist.iterate() != NULL)
    {
        cout << llist.ptr() << "\t";
    }
    cout << endl;

    return 0;
}

这里我们使用了一个叫做节点的支持结构。该节点将携带指向下一个项目和上一个项目的指针。通常有下一个项目就足够了。但是同时拥有 nextprevious 可以提高 append 和 prepend 的性能,因为我们可以对两端进行访问。 追加 意味着我们将更新 tail 指针的下一个元素,然后更新 tail 作为添加的项。反之, 前置 会创建一个新元素,并将其下一个项设置为当前 。请注意,我没有包括内存清理操作,因为我们不处理显式删除,并使代码更简单。但是,必须将它们放在单独的析构函数中,以避免内存泄漏。此外,我们使用一个简单的迭代器来打印项目。

3.大量

一个堆栈是一个 LIFO (后进先出——最后放置的元素可以首先访问)结构。尽管该数据结构具有不同的行为,但这可以被认为是仅具有或对元素的访问的链表的派生。

#include <iostream>

using namespace std;

template <typename T>
class Node
{
public:
    T value;
    Node *next;

    Node(T value)
    {
        this->value = value;
    }
};

template <typename T>
class Stack
{
private:
    int size_;
    Node<T> *top_ = NULL;
    Node<T> *itr_ = NULL;

public:
    Stack()
    {
        this->size_ = 0;
    }

    void push(T value)
    {
        if (this->top_ == NULL)
        {
            this->top_ = new Node<T>(value);
        }
        else
        {
            Node<T> *tmp = new Node<T>(value);
            tmp->next = this->top_;
            this->top_ = tmp;
        }
        this->size_ += 1;
    }

    Node<T> *pop()
    {
        Node<T> *tmp = this->top_;

        this->top_ = this->top_->next;
        this->size_ -= 1; return tmp;
    }

    Node<T> *peek()
    {
        return this->top_;
    }

    int size()
    {
        return this->size_;
    }

    Node<T> *iterate()
    {
        if (this->itr_ == NULL)
        {
            this->itr_ = this->top_;
        }
        else
        {
            this->itr_ = this->itr_->next;
        }
        return this->itr_;
    }

    T ptr()
    {
        return this->itr_->value;
    }

    void resetIterator()
    {
        this->itr_ = NULL;
    }
};

int main(int argc, char **argv)
{
    Stack<int> stk1;
    stk1.push(10);
    stk1.push(12);
    stk1.push(14);
    stk1.push(16);
    stk1.push(5);
    stk1.push(4);
    stk1.push(3);
    stk1.push(2);
    stk1.push(1);

    cout << "Printing Stack" << endl;

    while (stk1.iterate() != NULL)
    {
        cout << stk1.ptr() << "\t";
    }
    cout << endl; return 0;
}

注意,节点只有对下一个项目的引用。添加一个条目会更新数据结构的顶部。此外,移除和取回也是从顶部进行的。为此,我们分别使用pop()top()方法。

4.行列

一个队列是一个 FIFO (先进先出——放在最前面的元素可以最先被访问)结构。这可以被认为是堆栈的相反情况。简单来说,它是一个链表,我们从一端添加,从另一端读取。这模拟了车道上的真实世界。这里我们可以把一个节点结构想成如下。

template <typename T>
class Node
{
    public:
    T value;
    Node *next;
    Node *previous;

    Node(T value)
    {
        this->value = value;
    }
};

主要的数据结构是:

template <typename T>
class Queue
{
    private:
    int size_;
    Node<T> *head_ = NULL;
    Node<T> *tail_ = NULL;

    public:
    Queue()
    {
        this->size_ = 0;
    }

    void enqueue(T value)
    {
        if (this->head_ == NULL)
        {
            this->head_ = new Node<T>(value);
            this->tail_ = this->head_;
        }
        else
        {
            this->tail_->next = new Node<T>(value);
            this->tail_->next->previous = this->tail_;
            this->tail_ = this->tail_->next;
        }
        this->size_ += 1;
    }

    Node<T> dequeue()
    {
        Node<T> *tmp = this->tail_;

        this->tail_ = this->tail->previous;
        this->tail_->next = NULL; this->size_ -= 1; return tmp;
    }
};

最后的想法

我们已经使用 C++编程语言实现了 4 种常见的数据结构。我将在以后的文章中介绍其余的实现。

希望你们都觉得这些数组、链表、栈和队列的 C++实现很有用。你可以通过下面的链接查看我的其他关于数据结构的文章。

[## 值得了解的 8 种有用的树数据结构

8 种不同树形数据结构的概述

towardsdatascience.com](/8-useful-tree-data-structures-worth-knowing-8532c7231e8c) [## 自平衡二分搜索法树 101

自平衡二分搜索法树简介

towardsdatascience.com](/self-balancing-binary-search-trees-101-fc4f51199e1d)

感谢您的阅读!如果你觉得这篇文章有用,请在你的网络中分享。

干杯!

Python 中的数据结构——简介

原文:https://towardsdatascience.com/data-structures-in-python-a-brief-introduction-b4135d7a9b7d?source=collection_archive---------12-----------------------

当涉及到数据结构时,没有放之四海而皆准的模型。

您有多个算法,这些算法的步骤需要在任何给定的时间点获取集合中的最小值。值被分配给变量,但不断修改,使你不可能记住所有的变化。解决这个问题的一种方法是将这个集合存储在一个未排序的数组中,然后每次都扫描这个集合,以找到所需的值。但是考虑到集合有 N 个元素,这将导致所需时间与 N 成比例地增加。

数据结构来拯救!让我们发明一个普通的运算,从一组元素中找出最小值。这里,数据结构是所有这些算法用来更快地找到最小元素的通用操作。

查找数据没有单一的方法。因此,当使用一个算法时,一定要理解它所使用的数据结构的种类以及它们是运算的一部分。数据结构的主要目的是加速运算。在上面的例子中,当我谈到一个未排序的数组时,那也是一个数据结构。如果您正在使用的算法不在乎更快的结果,您可以继续使用数组来获得结果。

如果数据结构是您的算法所需要的,那么必须花时间来设计和维护一个数据结构,以便查询和更新该结构变得更容易。

Python 中的数据结构

数据结构为我们提供了一种特定的存储和组织数据的方式,从而可以方便地访问和有效地使用它们。在本文中,您将了解各种 Python 数据结构以及它们是如何实现的。

一个到我的 GitHub 存储库的链接,以访问用于本演示的 Jupyter 笔记本:

[## sowmya20/DataStructures_Intro

在 GitHub 上创建一个帐户,为 sowmya20/DataStructures_Intro 开发做出贡献。

github.com](https://github.com/sowmya20/DataStructures_Intro)

概括地说,数据结构可以分为两种类型——原语和非原语。前者是表示包含简单值的数据的基本方式。后者是一种更高级、更复杂的表示数据的方式,这些数据包含各种格式的值的集合。

非原语数据结构可以进一步分为内置和用户定义的结构。Python 提供了对内置结构的隐式支持,包括列表、元组、集合和字典。用户还可以创建自己的数据结构(如堆栈、树、队列等)。)使他们能够完全控制自己的功能。

列表

列表是一个可变的序列,可以按顺序保存同类和异类数据。列表中的每个元素都分配了一个地址,称为索引。列表中的元素用逗号分隔,并用方括号括起来。

您可以添加、删除或更改列表中的元素,而无需更改其标识。以下是使用列表时常用的一些函数:

创建列表:

initial_list = [1,2,3,4]
print(initial_list)

列表可以包含不同类型的变量,即使在同一个列表中。

my_list = ['R', 'Python', 'Julia', 1,2,3]
print(my_list)

向列表中添加元素:

my_list = ['R', 'Python', 'Julia']
my_list.append(['C','Ruby'])
print(my_list)my_list.extend(['Java', 'HTML'])
print(my_list)my_list.insert(2, 'JavaScript')
print(my_list)

使用不同的函数,如插入、扩展和添加列表,输出会有所不同。

insert 函数在指定的位置/索引处添加一个元素。

append 函数将所有指定的元素作为单个元素添加。

extend 函数将逐个添加元素。

访问元素:

可以使用方括号对列表进行索引,以检索存储在某个位置的元素。列表中的索引返回该位置的整个项目,而在字符串中,返回该位置的字符。

从列表中删除元素:

再一次,注意使用不同的函数时的输出,比如 pop、delete 和 remove。当您希望通过指定元素的值来移除元素时,可以使用 Remove。我们使用 del 通过索引移除元素,如果需要返回值,使用 pop()通过索引移除元素。

切片列表:

索引仅限于访问单个元素,而切片则访问列表中的一系列数据。

切片是通过定义父列表中第一个元素和最后一个元素的索引值来完成的,这是切片列表中所需要的。它被写成[ a : b ],其中 a,b 是来自父列表的索引值。如果 a 或 b 未定义,则索引值被视为 a 的第一个值(如果 a 未定义),以及 b 的最后一个值(如果 b 未定义)。

排序功能:

# print the sorted list but not change the original onenumero = [1,12,4,25,19,8,29,6]
print(sorted(numero))
numero.sort(reverse=True)
print(numero)

最大、最小和 ASCII 值:

在元素为字符串的列表中, max( )min( ) 适用。 max( ) 将返回一个字符串元素,当使用 min( ) 时,其 ASCII 值最高和最低。

每次只考虑每个元素的第一个索引,如果它们的值相同,则考虑第二个索引,以此类推。

new_list = ['apple','orange','banana','kiwi','melon']
print(max(new_list))
print(min(new_list))

如果数字被声明为字符串会怎么样呢?

new_list1 =['3','45','22','56','11']
print(max(new_list1))
print(min(new_list1))

即使在字符串中声明数字,也会考虑每个元素的第一个索引,并相应地返回最大值和最小值。

您还可以根据字符串的长度找到最大值和最小值。

复制&工作列表:

虽然没有对复制的列表执行任何操作,但是它的值也已经被更改。这是因为您已经将 new_list 的相同内存空间分配给了 new_list_2。

我们如何解决这个问题?

如果你还记得的话,在切片中我们已经看到了 parent list [a:b]从 parent list 返回一个带有起始索引 a 和结束索引 b 的列表,如果没有提到 a 和 b,那么默认情况下它会考虑第一个和最后一个元素。我们在这里使用相同的概念。

元组

元组用于将多个对象组合在一起。与列表不同,元组是不可变的,并且在圆括号而不是方括号中指定。元组中的值不能被覆盖,也就是说,它们不能被更改、删除或重新分配。元组可以保存同类和异类数据。

创建和访问元组中的元素:

追加一个元组:

tuple_1 = (1,2,3,4,5)
tuple_1 = tuple_1 + (6,7,8,9,10)
print(tuple_1)

元组是不可变的。

Divmod 函数:

把元组想象成对某个特定的值为真,而对其他值不为真的东西。为了更好地理解,让我们使用 divmod() 函数。

xyz = divmod(10,3)
print(xyz)
print(type(xyz))

这里商必须是 3,余数必须是 1。当 10 除以 3 时,这些值无论如何都不能改变。因此,divmod 在一个元组中返回这些值。

内置元组函数:

Count 和 Index 用于元组,就像它们用于列表一样。

example = ("Mumbai","Chennai","Delhi","Kolkatta","Mumbai","Bangalore")
print(example.count("Mumbai"))print(example.index("Delhi"))

字典

如果你想实现一个类似电话簿的东西,字典是你所需要的。字典基本上存储“键-值”对。在一个电话目录中,你将拥有 phone 和 Name 作为键,而分配的各种名称和号码就是值。“键”标识项目,“值”存储项目的值。“键-值”对用逗号分隔,值用冒号“:”字符与键分隔。

您可以添加、删除或更改字典中现有的键值对。下面提到的是使用字典执行的一些常见功能。

创建字典:

new_dict = {} # empty dictionary
print(new_dict)
new_dict = {'Jyotika':1, 'Manu':2, 'Geeta':3, 'Manish':4}
print(new_dict)

添加或更改键值对:

删除键值对:

使用 pop()函数删除值,该函数返回已删除的值。

要检索键-值对,可以使用 popitem()函数,该函数返回键和值的元组。

要清除整个字典,可以使用 clear()函数。

new_dict_2 = new_dict.pop('Manu')
print(new_dict_2)
new_dict_3 = new_dict.popitem()
print(new_dict_3)

Values()和 keys()函数:

values()函数返回字典中所有赋值的列表。

keys()函数返回所有的索引或键,这些索引或键包含它被赋予的值。

print(new_dict.values())
print(type(new_dict.values()))
print(new_dict.keys())
print(type(new_dict.keys()))

设定

集合是唯一元素的无序集合。集合是可变的,但在数据集中只能保存唯一的值。集合运算类似于算术运算。

new_set = {1,2,3,3,3,4,5,5}
print(new_set)
new_set.add(8)
print(new_set)

对集合的其他操作:

。union() —合并两个集合中的数据

。intersection() —输出两个集合共有的数据

。difference() —删除两者中存在的数据,并输出仅存在于传递的集合中的数据。

。symmetricdifference() —删除两个集合中存在的数据,并输出两个集合中剩余的数据。

用户自定义数据结构概述

  1. 堆栈:基于 FILO(先入后出)和 LIFO(后进先出)的原则,堆栈是线性数据结构,其中新元素的添加伴随着从另一端的等量移除。堆栈中有两种类型的操作:

a)推送——将数据添加到堆栈中。

b)弹出—从堆栈中删除数据。

来源:https://en . Wikipedia . org/wiki/Stack _(abstract _ data _ type)

我们可以使用 Python 库中的模块和数据结构来实现堆栈,即 list、collections.deque、queue.LifoQueue。

2.队列:队列是一种基于先进先出原则(FIFO)的线性数据结构。首先输入的数据将首先被访问。队列上的操作可以从头到尾两端执行。入队和出队是用于从队列中添加或删除项目的操作术语。与堆栈类似,我们可以使用 Python 库中的模块和数据结构来实现堆栈,即— list,collections.deque。

来源:https://www.guru99.com/python-queue-example.html

3.树:树是由根和节点组成的非线性数据结构。数据的起源点称为父节点,随后出现的每一个其他节点都是子节点。最后的节点是叶节点。节点的级别显示了树中信息的深度。

来源:https://sites . Google . com/site/learnwithdatasures/content/graphs

4.图形:python 中的图形通常存储称为顶点(节点)和边(边)的点的数据集合。可以使用 python 字典数据类型来表示图表。字典的键表示为顶点,值表示顶点之间的边。

来源:https://codepumpkin.com/graph/

数据结构有助于组织信息,不管你是编程新手还是老手,你都不能忽视数据结构的关键概念。

有关 Python 中使用的不同数据结构的更详尽的介绍,请参考以下链接:

的官方 Python 文档列出了字典元组

本书 一个字节的 Python

https://docs.python.org/3/tutorial/datastructures.html

Python 中的数据结构

原文:https://towardsdatascience.com/data-structures-in-python-da813beb2a0d?source=collection_archive---------17-----------------------

丁满·克劳斯在 Unsplash 上的照片

精通列表——Python 最通用的数据结构

这篇文章是关于列表的。它们是 Python 中最通用、最足智多谋的内置数据结构。它们可以同时保存异构数据,即整数、浮点、字符串、NaN、布尔、函数等。在同一个列表中。它们是条目的有序序列,这意味着在访问列表时元素的顺序是保持不变的。它们是可变的,即你可以改变(添加、删除、修改)列表中的任何一项。它们可以有旧的重复项,不像“集合”Python 中的另一种数据结构。

读完这篇文章后,你将对 Python 列表有一个清晰的理解并有能力在高级水平上工作。

我将讨论以下主题:

  • 创建列表并添加元素
  • 访问列表元素
  • 删除列表元素
  • 插入元素
  • 列表运算
  • 反转列表
  • 排序列表
  • 某项的索引
  • 盘点列表中的项目频率
  • 列举理解
  • 复制列表
  • 嵌套列表

1)创建列表并添加元素

首先,我们初始化一个名为“数据”的空列表。该列表是使用方括号创建的。自然,空列表的长度为零。

data = []len(data)
>>> 0# Check the type of the variable 'data'
type(data)
>>> list

现在让我们将第一个元素添加到这个列表中。这是使用 append() 函数完成的。你会注意到它的长度现在变成了 1。

data.append(100)data 
>>> [100]len(data)
>>> 1

让我们添加第二个元素。它将被附加(添加)在列表的末尾。同样,您可以添加任意多的元素。

data.append(200)
data
>>> [100, 200]len(data)
>>> 2data.append(300)
data
>>> [100, 200, 300]

您事先不知道列表中有多少元素时,追加功能很有用。例如,要存储每小时进入商店的人数,需要追加每小时的顾客人数。但是,如果你只是主持了一次考试,你就知道到底有多少学生写了试卷。现在,如果你想在一个列表中存储他们的成绩,而不是追加,你可以初始化你的列表。

grades = [70, 100, 97, 67, 85]len(grades)
>>> 5

不用担心!您仍然可以使用 append 向已经初始化的列表中添加更多的元素。只需简单地使用data.append(80)来添加第六个学生的成绩,它将被附加在列表的末尾。

如何一次性将两个或两个以上学生的分数相加?

假设你想同时追加三个学生的分数。您不能使用 grades.append(99,100,95) ,因为“append”只接受一个参数。您将不得不使用“追加”功能三次。

在这种情况下,您可以使用 extend() 而不是追加三次。您需要将这三个元素放在一个元组形式中(一个 iterable)。

注意不能使用 extend 来追加单个元素,即data.extend((90))不起作用。

grades = [70, 100, 97, 67, 85]
grades.extend((99, 100, 95))
print (grades)
>>> [70, 100, 97, 67, 85, 99, 100, 95]

现在你会问,“为什么我们不能一次追加三个等级?”

可以,但是有一个条件。如下所示,一起插入的三个等级在主列表中显示为一个列表。这样的列表被称为【嵌套列表】。我将在本文的最后一节展示更多的例子。

grades = [70, 100, 97, 67, 85]
grades.append([99, 100, 95])
print (grades)
>>> [70, 100, 97, 67, 85, [99, 100, 95]] # A nested list

2)访问列表元素

如果你正在处理数据结构,了解索引的概念是非常有用的。你可以认为索引是分配给列表中每个元素的序列号。简单来说,就是类似于你在一个班级的点名。

最重要的 要知道的是,Python 中的 索引是从 0 开始的。

因此,第一个元素的索引为 0,第二个元素的索引为 1,依此类推。在五个元素的列表中,最后一个(第五个)元素的索引值为 4。

*grades = [70, 100, 97, 67, 85]# First element (index 0)
grades[0]
>>> 70# Second element (index 1)
grades[1]
>>> 100# Last element (index 4)
grades[4]
>>> 85*

不要越界。如果你试图使用一个大于列表长度的索引值,你将得到一个 IndexError 。因此,在一个包含 5 个元素的列表中,不能使用索引 5(因为它引用了第 6 个元素)。

*grades[5]
**-----------------------------------------------------------------**
**IndexError** Traceback (most recent call last)
**<ipython-input-29-d8836f1h2p9>** in <module>
**----> 1** data**[5]****IndexError**: list index out of range*

访问列表的多个元素

如果您想要前三个元素,您可以使用切片来访问它们。一般格式是list[start_index:end_index]。这里比较棘手的部分是这个符号会返回值,直到 end_index - 1 的索引值。这意味着,要获得索引为 0、1 和 2 的列表的前三个元素,需要以下方法。

*grades = [70, 100, 97, 67, 85]
grades[0:3]
>>> [70, 100, 97]*

如果您只想访问索引为 0 的第一个元素,可以使用切片符号来获取它。

*grades[0:1]
>>> [70]*

反向索引

现在你也应该知道我称之为【反向索引】【负索引】的有用概念。

要访问最后一个元素,首先需要知道列表的长度。因此,在 5 个元素的列表中,需要使用索引 4(= 5–1,因为索引从 0 开始)。因此,数据[4]将是您的最后一个元素。类似地,倒数第二个元素将是 data[3],依此类推。

如您所见,这种计算很麻烦。负指数将在这里帮助你。简单来说就是从末尾开始数元素个数。最后一个元素不能在索引-0 处,因为没有这样的数字。因此,您需要使用索引值-1 来访问它。类似地,倒数第二个元素可以使用索引值-2 来访问,依此类推。

*grades = [70, 100, 97, 67, 85]
grades[-1]
>>> 85grades[-2]
>>> 67*

"负索引可以用来访问最后 3 个元素吗?"。

是的。您需要指定起始负索引。要获取从倒数第三个元素开始的所有元素,不需要指定结束索引。

*grades = [70, 100, 97, 67, 85]
grades[-3:]
>>> [97, 67, 85]*

但是,假设您想要获取倒数第三个和倒数第二个元素,而不是最后一个元素。您可以将结束索引限制为:

*grades[-3:-1]
>>> [97, 67]*

2.1)定期访问元素

到目前为止,您已经学习了如何访问单个元素或几个连续的元素。假设你想从列表中得到第 n 个项目。这样做的一般语法是list[start_index : stop_index : step]

举例:如果你想从第一个元素开始到第七个元素,即从[1,2,3,4,5,6,7]开始,每隔一个元素访问一次,你需要[1,3,5,7]。

*data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
data[0:7:2]
>>> [1, 3, 5, 7]*

如果你想要从第一个元素开始的整个列表中的第二个元素,你可以跳过start_indexstop_index

*data[::2]
>>> [1, 3, 5, 7, 9]*

如果您想要从第二个元素开始的整个列表中的每第二个元素,使用下面的代码。

*data[1::2]
>>> [2, 4, 6, 8, 10]*

注意:你也可以使用data[::1]来访问整个列表,因为这将返回从开始到结束的所有元素。

以固定的间隔向后遍历一个列表 你需要使用一个负的步长值。要获取从末尾开始的每个元素,即整个列表的逆序,请使用下面的代码。

*data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
data[::-1]
>>> [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]*

若要从最后一个元素开始每隔一个元素访问一次,请使用以下代码。

*data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
data[::-2]
>>> [10, 8, 6, 4, 2]*

让我们看一个更复杂的反向遍历例子。假设你想从倒数第三个元素开始,一直到第四个元素,每隔一个元素选择一个。您的开始索引现在变为-3,停止索引变为 3(第四个元素的索引从 0 开始)。

*data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
data[-3:3:-2]
>>> [8, 6]*

3)删除列表元素

有三种方法可以从列表中删除元素。这三种方法都执行就地删除,也就是说,在删除之后,您不需要将列表重新分配给新的变量。

a) del(内置函数)能否一次删除多个项目
b)remove()(列表的方法)能否一次删除一个项目
c)pop()(列表的方法)能否一次删除一个项目

让我们逐一研究它们。

a)德尔

使用del时,需要传递要删除的元素的索引或一部分索引。您可以使用上面介绍的所有索引/切片概念,通过 del 删除元素。

*# Deleting first element
data = [79, 65, 100, 85, 94]
del data[0]
print (data)
>>> [65, 100, 85, 94] ############################################################## Deleting second last element
data = [79, 65, 100, 85, 94]
del data[-2]
print (data)
>>> [79, 65, 100, 94]############################################################# # Deleting multiple consecutive elements using slice
data = [79, 65, 100, 85, 94]
del data[0:3]
print (data)
>>> [85, 94]############################################################## # Deleting multiple elements at regular interval using slice
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
del data[1::2]
data
# [1, 3, 5, 7, 9]*

b)移除()

这个方法用于从列表中删除一个特定的元素。如果一个元素出现不止一次,那么只有第一次出现的元素会被删除。例如,在下面的列表中,1 出现了 3 次。所以使用remove(1)将删除第一个值,保留其余的值。

*data = [1, 1, 4, 4, 3, 1, 3, 2, 4, 2]
data.remove(1)
print (data)
>>> [1, 4, 4, 3, 1, 3, 2, 4, 2]*

奖励:你可以使用一个 while 循环来移除所有出现的 1。

*data = [1, 1, 4, 4, 3, 1, 3, 2, 4, 2]
to_del = 1while to_del in data:
    data.remove(to_del)

print (data)
>>> [4, 4, 3, 3, 2, 4, 2]*

c) pop()

这个方法的语法是list.pop(i),它从列表中弹出(删除)索引‘I’处的元素。下面的代码演示了它在连续应用于一个列表时是如何工作的。

注意:如果不指定索引,最后一个元素将被删除。

***# Using pop(i) by specifying the index i
data = [1, 2, 3, 4, 5]
data.pop(0)
print (data)
>>> [2, 3, 4, 5]data.pop(1)
print (data)
>>> [2, 4, 5]data.pop(1)
print (data)
>>> [2, 5]############################################################## Using pop() without specifying the index i
data = [1, 2, 3, 4, 5]
data.pop()
print (data)
>>> [1, 2, 3, 4]data.pop()
print (data)
>>> [1, 2, 3]***

4)插入元素

可以使用功能list.insert(i, element)在指定位置插入一个元素。这里的‘I’是列表中要插入element的现有元素的索引。正如您之前看到的,append()函数将元素插入到列表的末尾。

注意:这是一个就地操作,所以你不必重新分配列表。**

***# Inserting value of 4 at the start, before the element at index 0
data = [1, 2, 3]
data.insert(0, 4) 
print (data)
>>> [4, 1, 2, 3]############################################################## Inserting value of 4 before the element at index 1
data = [1, 2, 3]
data.insert(1, 4)
print (data)
>>> [1, 4, 2, 3]***

如果你想在列表的末尾插入,也就是说,追加,那么简单地使用列表的长度作为插入的位置。

***data = [1, 2, 3]
data.insert(len(data), 4)
print (data)
>>> [1, 2, 3, 4]***

5)列表算法

当您添加两个或更多列表时会发生什么?假设您有以下两个列表。

***list_A = [1, 2, 3, 4, 5]
list_B = [6, 7, 8, 9, 10]***

如果您添加它们,您会期望两个列表的元素相加。但是,您将得到一个列表,其中两个列表的元素按照相加的顺序被附加(连接)在一起。

***list_A + list_B 
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]***

顺序很重要。对于列表来说,A + B 不等于 B+A所以,如果颠倒加法的顺序,就会得到不同的结果。****

*****list_B + list_A
>>> [6, 7, 8, 9, 10, 1, 2, 3, 4, 5]*****

你能做两个列表的减法、乘法或除法吗?

不,你不能。举个例子,如果你试着把上面两个列表相减,你会得到一个TypeError。类似地,乘法或除法也会抛出错误。尝试一下说服自己。

如果你将列表乘以一个大于 0 的正整数,你的列表将重复(复制)那么多次。例如,将列表乘以 3 会将列表重复 3 次。乘以浮点数(3.0)会产生错误。将列表乘以 0 或负整数产生一个空列表****

*****# Multiplication by positive integer
data = [1, 2, 3]
data * 3 # equivalent to data + data + data
>>> [1, 2, 3, 1, 2, 3, 1, 2, 3]# Multiplication by 0
data * 0
>>> []*****

****注意:如果您试图乘以[3]而不是 3,将会报告错误。

6)反转列表

有两种方法可以反转列表。

a)使用切片作为[::-1]。这不会就地更改列表。您必须重新分配列表,以反映原始列表中的更改。****

*****data = [1, 2, 3]
data[::-1]
>>> [3, 2, 1]print (data)
>>> [1, 2, 3] # The original list does not change# You have to re-assign the list after reversing
data = [1, 2, 3]
data = data[::-1] # Re-assign print (data)
>>> [3, 2, 1]*****

b)使用**list.reverse()** 功能。在这里,您不需要重新分配,因为列表是就地反转的。

*****data = [1, 2, 3]
data.reverse() # reverses the list in-place print (data)
>>> [3, 2, 1] # The original list does not change*****

7)对列表进行排序

对列表进行排序有两种直接的方法。

a)使用**sorted()** 功能。这不会对列表进行就地排序。
b)使用**list.sort()** 功能。执行就地排序。

在这两个函数中,您可以使用关键字“reverse”选择升序或降序排序。如果“reverse=True”,则列表按降序排序。默认情况下,列表按升序排序。

*****# First method using sorted()
data = [7, 4, 1, 3, 8, 5, 9, 6, 2]
sorted(data, reverse=False) # Same as sorted(data) due to default
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9]############################################################## Second method using list.sort()
data = [7, 4, 1, 3, 8, 5, 9, 6, 2]
data.sort(reverse=True)
print (data)
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9]*****

字符串是如何排序的?

  • 默认情况下,不同长度的字符串将按字母顺序排序。
  • 如果字符串的起始字母相同,但大小写不同,则大写字母优先。
  • 如果两个或两个以上的字符串具有相同的大小写首字母,它们将根据第二个字母按字母顺序排序,依此类推。

让我们看一些使用第二种方法的字符串示例。

*****data = ['pineapple', 'kiwi', 'apple', 'azure', 'Apricot', 'mango']
data.sort() # in-place sorting
print (data)
>>> ['Apricot', 'apple', 'azure', 'kiwi', 'mango', 'pineapple']#############################################################data = ['pineapple', 'kiwi', 'apple', 'Apricot', 'mango']
data.sort(reverse=True)
print (data)
>>> ['pineapple', 'mango', 'kiwi', 'apple', 'Apricot']*****

如何根据字符串的长度进行排序?

你需要使用关键字key=len。如果你想要长度降序排列,使用一个额外的关键字reverse=True

*****data = ['pineapple', 'kiwi', 'apple', 'Apricot', 'orange', 'mango']
data.sort(key=len, reverse=True)
print (data)
>>> ['pineapple', 'Apricot', 'orange', 'apple', 'mango', 'kiwi']*****

8)项目的索引

如果您想获得给定列表中某个条目的索引,可以使用命令list.index(item)来实现。它在整个列表中搜索项目。如果同一个项目出现多次,您将只获得它第一次出现的索引。

*****grades = [70, 100, 97, 70, 85]
grades.index(100)
>>> 7grades.index(70) # 70 appears twice at indices 0 and 3
>>> 0            # Only the first index returns*****

假设您的列表非常大,并且您希望只在列表的特定子集中搜索一个元素。您可以为子集指定“开始”和“结束”索引。

*****grades = [70, 100, 97, 70, 85, 100, 400, 200, 32] # Search in the whole list
grades.index(100)
>>> 7# Search in the partial list from index 3 until index 8grades.index(100, 3, 8)
>>> 5  # Now the index of the second 100 is returned*****

9)统计列表中的项目频率

您可以使用list.count(item)统计列表中给定项目的出现频率。让我们考虑下面的例子。

*****data = [6, 4, 1, 4, 4, 3, 4, 8, 5, 4, 6, 2, 6]
data.count(4)
>>> 5*****

功能使用示例

假设您想要计算并打印所有元素的频率。为此,我们首先需要列表中的唯一项目。我会用 NumPy 的unique()

*****import numpy as npdata = [1, 1, 4, 4, 3, 1, 3, 2, 4, 2]for item in np.unique(data):
    print("{} occurs {} times in the list"\
           .format(item, data.count(item)))>>> 1 occurs 3 times in the list
>>> 2 occurs 2 times in the list
>>> 3 occurs 2 times in the list
>>> 4 occurs 3 times in the list*****

10)列出理解

假设您想计算从 0 到 5 的数字的立方,并将它们存储在一个列表中。首先需要初始化一个空列表,创建一个 for 循环,然后将各个数字的立方体追加到这个列表中。

*****cubes = []
for i in range(6):
    cubes.append(i**3)

print (cubes)
>>> [0, 1, 8, 27, 64, 125]*****

上面的代码对于这么简单的任务来说太多了吧?嗯,你可以简单地使用【列表理解】如下所示。

*****cubes = [i**3 for i in range(6)]
print (cubes)
>>> [0, 1, 8, 27, 64, 125]*****

11)复制列表

假设你有一个名为‘list _ A’的列表,你把这个列表分配给另一个名为‘list _ B’的列表。如果您从“list_A”中删除一个元素,您会期望“list_B”不会改变。下面的代码表明事实并非如此。从“list_A”中删除元素也会将其从“list_B”中删除。

*****list_A = [1, 2, 3, 4, 5]
list_B = list_Adel list_A[0] # Delete an element from list_Aprint (list_A, list_B)
# [2, 3, 4, 5] [2, 3, 4, 5]*****

为什么 list_B 会受到影响?

这是因为当你写list_A = list_B的时候,你创建了一个对‘列表 _ A’的引用。因此,‘list _ A’中的变化也会反映到‘list _ B’中的。

如何避免 list_B 的变化?

答案是创建一个浅拷贝。我将解释做这件事的两种方法。

a)使用list.copy() b)使用list[:]

下面的例子表明,现在从‘list _ A’中删除一个元素并不影响浅层拷贝,即‘list _ B’。

*****# First method using list.copy()
list_A = [1, 2, 3, 4, 5]
list_B = list_A.copy()del list_A[0] # Delete an element from list_A
print (list_A, list_B)
# [2, 3, 4, 5] [1, 2, 3, 4, 5]#############################################################
# Second method using list[:]
list_A = [1, 2, 3, 4, 5]
list_B = list_A[:]del list_A[0] # Delete an element from list_A
print (list_A, list_B)
# [2, 3, 4, 5] [1, 2, 3, 4, 5]*****

12)嵌套列表

包含另一个子列表作为元素的列表称为嵌套列表。元素子列表可以包含更多的子列表。子列表中的元素也可以使用索引和切片来访问。让我们考虑下面的例子。****

*****data = [1, 2, 3, [4, 5, 6]]data[2]   # Single element
>>> 3 data[3]   # Sublist
>>> [4, 5, 6]*****

现在的问题是,“如何访问子列表的元素?”。您可以使用双重索引来访问它们。例如,data[3]返回子列表。所以这个子列表的第一个元素可以使用 data[3][0]来访问。

*****data[3][0]
>>> 4data[3][1]
>>> 5data[3][2]
>>> 6*****

现在考虑下面的列表,它在子列表中有一个子列表。列表的长度是 4,其中前 3 个元素是 1、2 和 3,最后一个元素是[4、5、6、[7、8、9]]。最后一个元素的长度是 4,它是一个子列表。这样,你就可以越来越深入到嵌套列表中。****

要访问子列表的元素,您需要使用双索引、三索引等。如下例所示。****

*****data = [1, 2, 3, [4, 5, 6, [7, 8, 9]]] # A nested list# Length of the list
len(data)
>>> 4# The last element
data[3]
>>> [4, 5, 6, [7, 8, 9]]# Length of the last element
len(data[3])
>>> 4#############################################################
# Accessing the elements of the first sublist
data[3][1]     # Double indices
>>> 5data[3][3]     # Double indices
>>> [7, 8, 9]#############################################################
# Accessing the elements of the second sublist
data[3][3][0]  # Triple indices 
>>> 7data[3][3][-1] # Triple indices
>>> 9*****

这让我想到了这篇文章的结尾。我介绍了与列表相关的大部分操作,现在读者应该对 Python 中的列表有了进一步的了解。如果你有兴趣了解即将到来的 Python 3.10 版本和 Matplotlib 3.0 中的新特性,请参考以下帖子。****

***** [## 2021 年的 Python 时间表和即将推出的功能

Python 3.10 的一些新特性的预览

towardsdatascience.com](/python-in-2021-timeline-and-upcoming-features-c8369abbcc52) [## Matplotlib 3 的新特性

第 3 代中最重要的更新概述

towardsdatascience.com](/whats-new-in-matplotlib-3-1b3b03f18ddc)*****

数据结构—简化和分类

原文:https://towardsdatascience.com/data-structures-simplified-and-classified-e0c1e304436b?source=collection_archive---------25-----------------------

照片由克里斯蒂娜·莫里路通过 T2 的像素拍摄

为了通过编程面试,你需要解决算法,而要解决算法,你需要数据结构。现在的问题是,当你打开一本数据结构和算法教科书时,它充满了复杂的数学,对于那些不太喜欢这门学科的人来说,它将变成一场噩梦。然而,一旦你理解了数据结构,它们并不像看起来那么难。本文将简化和总结这些最基本的数据结构,您将理解并能够轻松使用它们。

什么是数据结构?

数据结构是在计算机中组织数据的一种特殊方式,以便可以有效地使用它:

在计算机科学中,数据结构是一种数据组织、管理和存储格式,能够实现高效的访问和修改。更准确地说,数据结构是数据值、数据值之间的关系以及可应用于数据的功能或操作的集合— 维基百科

因此,我们必须将数据存储在某种数据结构中,选择正确的结构至关重要。

值得注意的是,没有什么数据结构是好的或坏的,而是每一种都有自己的优点和缺点。许多方法被用来衡量一个数据结构的好坏。这些也被称为大 O 符号。这是对操作可伸缩性的一种度量。

现在,让我们讨论不同类型的数据结构。

链表

链表的原子单位称为“节点”。这个节点包含一个值和一个指针。该值只是一个数字,比如 12,而指针将该值连接到链中的下一个节点。因此是链表的链接部分。列表中的第一个节点称为,没有指针的最后一个节点称为

图片来源:维基百科

优点:非常适合添加新节点和删除节点。这是通过改变下一个指针指向的位置来实现的。

缺点:不太擅长检索节点,尽管知道索引或搜索,因为每个节点只知道它旁边的节点。

排列

数组在所有编程语言中都很常见。它是计算机内存中连续的单元块。

下面的示例表示一个有 12 个元素的整数数组。数组的索引从 0 开始,因此有 12 个元素的数组的索引从 0 到 11。

图片来源: BeginnersBook

优势:数组在检索项目方面很棒,但只有在数组很小的时候。

缺点:随着数组的不断增长,我们开始在内存中运行其他项目。结果,加法是低效的,因为我们可能不得不将数组移动到内存中的新位置,这样它才合适。

幸运的是,这发生在 JavaScript 和 Python 这样的高级语言中。然而,在低级语言中,你必须预先声明数组的大小。

哈希映射

第三种类型的数据结构,也是非常重要的一种,是哈希表。这类似于 JavaScript 中的对象和 Python 语言中的字典。在这种类型的数据结构中,您给哈希映射一个单词或一个键,它就会为您检索定义或值。在引擎盖下,它的工作方式很像一个数组。这个密钥通过一个叫做“哈希函数”的函数运行,这个函数会为你溢出内存位置。

不同的是,这些内存位置不需要彼此相邻,而是可以在任何地方。因此,不存在大小增加的问题。然而,有一个不同的问题——取决于您使用的散列算法,两个密钥可能散列到同一个内存位置。这就是所谓的“冲突”,有多种方法可以解决它们,但同样,这一切都发生在引擎盖下。

图片来源:维基百科

优势:正如我们所知,哈希映射对于添加和检索非常有用。

缺点:可能会造成按键碰撞。

堆栈和队列

这两种结构彼此非常相似,都构建在数组之上,并具有一些额外的功能。

堆栈是一个 后进先出 的数据结构。这类似于一堆托盘相互堆叠,你放在上面的最后一个托盘是你需要取下的第一个托盘。当我们在顶部添加一个项目时,这被称为推动,而当我们从顶部取出一个项目时,这被称为弹出。每种语言都用调用栈来跟踪被调用的函数。栈对于一个叫做深度优先搜索 (DFS)的算法非常重要。

图片来源:维基百科

另一方面,队列是一种 先进先出 结构,类似于公共汽车站的队列或队伍,最后加入队列的人最后进入公共汽车。将一个项目添加到末尾称为入队,将它从前面移除称为出队。队列被用于一种叫做广度优先搜索 (BFS)的重要算法中。

图片来源:维基百科

优点:两种结构在添加和删除项目上都非常高效。

缺点:与其他数据结构相比,它们的用例数量都非常有限。

图形和树

这个主题相当复杂,在计算机语言中有一个专门的章节叫做“图论”。一个图类似于一个链表,其中我们有指向其他节点的节点,除了在这种情况下指针被称为“边”。边也可以被赋予权重或数字。

有一种称为“树”的特殊类型的分层图,其中数据向一个方向扩展。这些可以用来指代很多东西,比如“家谱”,或者用来表示网络。与数组、链表、堆栈和队列这些线性数据结构不同,树是分层的数据结构。

图片来源:维基百科

优点:树提供了有效的插入和搜索,树是非常灵活的数据,允许以最小的努力移动子树。

缺点:缺点是修改列表和检索需要花费 O(log n) 的时间。

总之,这些数据结构会给你一个很好的基础来开始求解算法。

我希望现在你对数据结构有了更多的了解,并且你可以更好地理解抽象表面下的可行结构来使用你的编程语言。

感谢阅读这篇文章!如果你有任何问题,请在下面留言。此外,看看我的其他文章,你可能会喜欢:

[## 理解大 O

你的算法效率如何?

medium.com](https://medium.com/swlh/understanding-big-o-ff675cf63e11) [## 如何增加你找到工作的机会

本文将详细介绍设计简历的最重要的技巧和诀窍,以便在求职过程中获得优势

medium.com](https://medium.com/@vpodk/how-to-increase-your-chances-of-getting-a-job-254c97c3b448)

data.table: R 的最佳数据对象

原文:https://towardsdatascience.com/data-table-rs-best-data-object-c95b7d5f0104?source=collection_archive---------57-----------------------

data.frame 太 2016 了

data.table 是我更喜欢用 R 而不是 Python 工作的主要原因。尽管 R 是一种众所周知的慢语言,但 data.table 通常比 Python 的 pandas ( benchmark )运行得更快,只要 R 能够处理如此大规模的数据,它甚至可以与 Spark 一较高下。更好的是,data.table 非常简洁,只需要一点点输入就可以支持像窗口函数这样的复杂操作。

我相信 data.table 是最重要的 R 包。任何形式的争论最好使用 data.table。它是我们需要的数据超级英雄。

来源

除了函数不接受 data.table .我个人不喜欢 tidyverse(抱歉!)因为它使用 data.frame 和 tibble,因此运行起来比较慢——需要两倍的打字量。(最近 Wickham 发布了 dtplyr ,它将 dplyr 代码翻译成 data.table 操作。你得到 dplyr 语法和数据表速度,如果那是你的事情。)

本文将指导您如何使用 data.table,以及让您更快更轻松地处理数据的提示和技巧。

构建数据表

除了使用 read.csv()之类的方法,您还可以使用 fread()将数据直接加载到 data.table 中。一旦有了大小适中的数据,就可以看到 fread()比 read.csv()快多少。

您也可以使用 data.table()函数构造一个,就像您对 data.frame()所做的那样。请注意,字符串不再自动转换为因子。

如果您已经有一个 data.frame,data.table()函数将转换它。

如果您的数据被分割成多个文件,您可以将每个文件加载到它自己的 data.table 中,存储到一个列表中,然后使用 rbindlist()。这类似于 do.call("rbind ",……),但效率更高。

library(data.table)dt <- fread('mydata.csv')
dt <- data.table(x = 1:10, y = 1:10)
dt <- data.table(mydataframe)templist <- list()
for(i in 1:length(filenames)){
  templist[[i]] <- fread(filenames[i])
}
dt <- rbindlist(templist)

类似 SQL 的语法

SQL 是事实上的数据语言(还记得 NoSQL 被说成“不仅仅是 SQL”吗?)并且应该为大多数数据专业人员所熟悉。如果能写 SQL,就能写数据,表语法:

FROM[WHERE, SELECT, GROUP BY][ORDER BY]

假设您想要运行以下查询:

SELECT 
  col1, 
  count(1) as num_obs, 
  sum(col2) AS group_sum
FROM mydt
WHERE col3 > 0
GROUP BY col1
ORDER BY 2 DESC

在 data.table 中,这变成了

mydt[
  col3 > 0, 
  .(num_obs = .N,
    group_sum = sum(col2)), 
  by = col1
][
  order(-num_obs)
]

就是这样!最少的输入,不需要管道传输大量的函数。这确实需要一些时间来适应,但一旦你掌握了窍门,这就很有意义了。

的。()是 list()的简称。在 SELECT 语句中使用它将返回一个 data.table(将在下一节中解释)。

有了 data.table,您在引用字段时不再需要重复键入表名。使用 data.frame 您需要键入

mydt[mydt$col3 > 0]

但是 data.table 知道方括号内的内容可能是指它的列,所以您可以输入

mydt[col3 > 0]

这看起来并不多,但当您键入数百行代码时,这是生活质量的巨大提高。

快速转化和变异

SELECT 语句采用两种形式之一:

  • 。()返回一个新的数据表
  • :=就地修改数据表

来自的输出。除非创建新的对象,否则()不会存储在任何位置。对于示例任务,data.table X 有两列:grp(分组变量)和 val(数值)。

任务 1:创建所有值的平均值的标量。

X[,mean(val)]

任务 2:创建一个包含组均值的新 data.table X_agg。

X_agg <- X[,.(avg = mean(val)), by = grp]

任务 3:在 X 中创建一个包含组平均值的新列。

X[,avg := mean(val), by = grp]

任务 4:在 X 中创建新列,说明观察值是否大于组平均值。

X[,is_greater := val > mean(val), by = grp]

任务 5:在 X 中为组 avg 和 stdev 创建两个新列。

X[,
  ':='(avg = mean(val), stdev = sd(val)),
  by = grp
]

有时,您有许多列需要按两个字段分组,grp1 和 grp2。您可以:

X_agg <- X[,lapply(.SD, mean), by = .(grp1, grp2)]

的。SD 是除用于分组的列之外的所有列的简写。注意所有这些任务的代码有多短!

快速搜索和加入

与 data.frame 不同,data.table 支持使用 setkey()函数进行索引:

X <- data.table(
  grp = sample(1:10),
  xval = rnorm(10)
)
Y <- data.table(
  grp = sample(rep(1:10, 2)),
  yval = rnorm(20)
)
setkey(X, grp)
setkey(Y, grp)
X[Y]

最后一行 X[Y]使用指定的索引合并两个表,比使用 base merge()要快得多。当您希望查找特定值时,索引还使 data.table 能够使用二分搜索法。

窗口功能

在 SQL 中,您可以使用一些有趣的累积和,例如

SELECT 
  grp, 
  obs_date, 
  sum(val) over (
    partition by grp 
    order by obs_date 
    rows unbounded preceding
  ) as cumulative
FROM mydt

您可以在 data.table 中快速完成同样的操作:

mydt[
  order(obs_date),
  .(obs_date,
    cumulative = cumsum(val)),
  by = grp
][
  order(obs_date)
]

data.table 甚至自带了 shift()和 frank()等快速窗口函数——后者用于快速排序。

最后

如果您还没有在 R 工作中使用过 data.table,我强烈建议您尝试并学习它。你会回过头来想,如果没有它,你以前是怎么工作的。它速度更快,内存效率更高,而且比 r 中的其他任何东西都更简洁。

与纯粹使用 SQL 相比,一个主要的优势是您可以保持中间表组织良好,而不是创建视图。在 Rstudio 中,可以使用环境窗口来跟踪所有对象。

posted @ 2024-10-15 13:43  绝不原创的飞龙  阅读(421)  评论(0)    收藏  举报