TowardsDataScience 博客中文翻译 2020(四十)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

7 个熊猫功能将减轻您的数据操作压力

原文:https://towardsdatascience.com/7-pandas-functions-to-reduce-your-data-manipulation-stress-25981e44cc7d?source=collection_archive---------9-----------------------

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

左图和来自 Pixabay 的代码图。来自 Unsplash 的熊猫图像。

熊猫没有白毛是有原因的

熊猫为什么没有灰毛?显然,因为它们有如此多的智能功能来操纵数据,所以它们不会像人类那样过度紧张。

数据似乎永远不会以我们希望的形式出现。以我个人的经验,花在数据科学项目上的绝大部分时间只是花在操纵数据上。当我们想对数据做些什么,但我们不知道一个方便的熊猫函数来做时,是时候使用旧的for循环和.loc手动改变单元格了,由if语句指导。

在本文中,我将展示和解释 7 个 pandas 函数,当它们单独使用或一起使用时,有望为您节省大量数据操作压力。

为了演示,我们将主要对纽约市 Airbnb 开放数据进行操作,该数据混合了数据类型,包括数字、文本和日期。

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

数据的前几列。

1 | pandas.factorize(x)

当我们需要对一些东西进行标签编码时,通常你会使用sci-kit learnLabelEncoder,但是熊猫可以在没有任何进口的情况下这样做。最重要的是,访问什么标签对应什么需要从sklearn中的LabelEncoder对象调用函数,但是默认情况下包含在pandas中。

假设我们想要对数据中的neighbourhood列进行标签编码。

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

pd.factorize(data['neighbourhood'])

生产

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

元组的第一个元素是一个数组,包含序列的标签编码值。元组的第二个元素是索引/列表,其中每个元素的索引对应于第一个元素中的标签。例如,第一个标签编码值是 0。这意味着它的反向编码值是第二个 tuple 元素的第 0 个索引,也就是 Kensington(可以向上滚动来确认这一点)。

2 | pandas.get_dummies(x)

有时,标签编码不起作用,因为它将数字属性分配给本来就不是数字的对象,例如“哈莱姆是肯辛顿的两倍”或“肯辛顿加三是布鲁克林”。在这种情况下,首选一位热编码,它没有数字偏差,表示相同的数据(尽管以非常稀疏的方式)。

传统的方法是使用sklearnOneHotEncoder,这需要导入sklearn,并训练一个OneHotEncoder对象。

假设我们想对数据集中的同一个neighborhood 列进行一次性编码。

pd.get_dummies(data['neighbourhood'])

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

它甚至按字母顺序排列我们的栏目!

3 | pandas.qcut(x,分位数)

通常,对于回归任务(例如,在本例中预测 Airbnb 房源的价格),将价格范围离散为几个分位数(大小相等的桶)可能会有所帮助。在分位数可接受的情况下,这可以提高精确度并减少模型的不确定性。

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

将变量离散化为分位数。原象

熊猫可以用.qcut自动为你离散化变量。

假设我们想要将price变量离散化为四个分位数。pandas 会自动将价格区间分成你指定的任意数量的分位数。请注意,pandas 将价格范围分成几个桶,每个桶中有相同数量的商品。

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

pd.qcut(data['price'],4) #second number specifies num of quantiles

生产

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

这是一系列的区间对象。在每个间隔中有偶数个对象。看着系列中的第一个物体,

pd.qcut(data['price'],4)[0]

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

…它是一个区间对象。您可以通过应用str()将其转换成可读性更好的形式。

str(pd.qcut(data['price'],4)[0])

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

您可以使用.apply()将该功能应用于整个系列。然后,如果你喜欢,你可以使用。因式分解对离散化样本进行标签编码。使用这个函数和前面的.factorize函数的一个好处是,与某些情况不同,标签编码(而不是之后使用.get_dummies的一次性编码)本身是可以的。

一键编码背后的原因是标签编码指定标签之间的数字关系,例如说肯辛顿比哈莱姆小,而对象不能进行数字比较。然而,离散样本可以,因为他们是从一个数字,连续线。

请注意,如果您不希望分位数被分割成每个箱中有相等数量的数据点,而是将范围定量地分成相等的部分,请使用pandas.cut。它与pandas.qcut接受相同的参数并起相同的作用。

pd.cut(data['price'],4)

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

4 | pandas.to_datetime(x)

转换数据对象是数据清理和数据操作中最令人沮丧的方面之一,其中最令人沮丧的可能就是日期。它们以如此多的形式出现,以如此多的方式编写,以至于将它们全部转换成一个干净的 datetime 对象是一件麻烦的事情。

输入熊猫的to_datetime。这个函数可以合理地推断任何日期,并将其转换为 datetime 对象,而不需要导入 datetime 或任何其他模块!

让我们用不同的命名协议创建四列:

data['date1'] = '1,2,2019'
data['date2'] = '1/2/2019'
data['date3'] = '1-2-2019'
data['date4'] = '1.2.2019'

…然后应用to_datetime看看熊猫是怎么转换的。

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

熊猫自动为你转换一切!如果日期的排列有点不同,熊猫也可以接受描述月、日和年的排列的字符串。

5 |熊猫。数据框架

矩阵的转置功能是当 xy 轴相互交换时,因此矩阵反映在对角线上。

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

来源。图像免费分发和商业使用。

这对数据帧也很有帮助。例如,看看这个按日期排列的每个国家因冠状病毒死亡的时间序列数据。

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

只选择美国来绘制数据,并删除国家、省、纬度和经度等列,我们得到了一个奇怪的数据形状。

us = data[data['Country/Region'] == 'US']
us.drop(['Province/State','Country/Region','Lat','Long'],axis=1,inplace=True)
us

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

处理这个问题的简单方法是将每个列值复制到一个 numpy 数组中进行可视化。然而,有了移调功能,就简单了。

us = us.T
us

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

从这里绘图很容易。

us.plot()

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

那省了我们很多工作!

6 |熊猫。DataFrame.drop_duplicates()

数据中的一个大问题是重复数据。在从多个来源收集的数据中,重复数据通常会出现,从而导致重复行。太多重复的行会使分析或机器学习模型产生偏差,因此删除它们非常重要。

熊猫有一个默认的删除重复的功能,drop_duplicates()

让我们设置第一行等于第二行,然后删除任何重复的。

data.loc[1] = data.loc[0]
data.drop_duplicates()

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

向右多列。

第一排没了。出于演示的目的,我们保留了索引以演示第一行中的分隔符(第一个索引,第二个“行”,如果您想这样引用它的话)。然而,.drop_duplicates()接受了一个额外的可选参数ignore_index,如果设置为 True,将创建一个不会被删除中断的连续索引。

7 |熊猫。Series.clip()

离群值。他们搞砸了分析,丢弃了数据。为了处理异常值,pandas 有一个方便的函数。clip(),不仅要删除异常值,还要删除数据中的潜在错误(比如我最近在一个数据集中看到的,冠状病毒病例数量为负数)。

.clip()接受两个参数——一个上限和一个下限——并将上限以上的任何值赋给上限,下限以下的任何值赋给下限。

例如,假设 Airbnb 有一个规则,人们可以列出他们的财产的最高价格是 125 美元,最低价格是 100 美元,超出这些界限的任何东西都是错误的(夸大的假设)。

供参考,原始价格:

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

让我们将 price 列设置为其自身的一个裁剪版本,其下限和上限是我们从真实世界上下文中理解的。

data['price'] = data['price'].clip(100,125)
data.head()

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

所有高于 125 美元的价格都被设置为 125 美元,任何低于 100 美元的价格都被设置为该值。.clip()应始终与上下文知识一起应用,以确保没有错误,或/和与统计异常值界限一起使用。

感谢阅读!

我希望这七个功能能够让你的数据操作、清理和分析更加顺畅。

更有效地使用 Matplotlib 的 7 个要点

原文:https://towardsdatascience.com/7-points-to-use-matplotlib-more-efficiently-53a1b318b8b1?source=collection_archive---------41-----------------------

理解结构,美化你的情节

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

卢卡斯·本杰明在 Unsplash 上的照片

Matplotlib 是一个广泛使用的 Python 数据可视化库。在某些情况下,它的语法可能很乏味,但它提供了对情节的大量控制。

在这篇文章中解释的七点都与 matplotlib 的结构和对绘图做小调整的语法有关。

重要的是要很好地了解结构,以便我们理解如何创建和渲染复杂的情节。因此,我们将从结构概述开始。然后,我们会看到几个有助于创造高级剧情的招数。

1。脚本层

Matplotlib 由三层组成。

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

(图片由作者提供)

脚本层是 matplotlib.pyplot 接口。当我们在下面的命令后使用“plt”创建图时,脚本层就是我们所使用的。

import matplotlib.pyplot as plt

脚本层使得创建情节相对容易,因为它自动化了将所有东西放在一起的过程。因此,它是数据科学家使用最广泛的图层。

2.后端层

除非你是开发人员,否则不要太担心这一层。后端层由三个抽象类组成,分别是 FigureCanvas、Renderer 和 Event。下面的类比将为后端层如何工作提供一些见解。

假设你想画一幅画。你得到一张白纸(图画布)和一个画笔(渲染器)。你问你朋友画什么(事件)。

3.艺术家层

这一层由艺术家对象组成。它是 Matplotlib 的核心对象。我们在图上看到的一切都是 artist 对象的一个实例。

有两种类型的艺术家对象:

  • 复合:图形,轴
  • 图元:直线、圆、文本

4.图形和轴

人物是艺术家的主要对象,它将一切联系在一起。假设你为晚餐准备了 4 种不同的开胃菜。你不能用手端给他们。上菜的好方法是把它们放在盘子里。盘子是图形对象,开胃菜是绘图的组成部分,如线条、刻度、标签等。

让我们使用脚本层创建一个图形。

import matplotlib.pyplot as pltplt.figure()
<Figure size 432x288 with 0 Axes>

我们创建了一个图形,但上面没有任何内容可以构成一个情节。我们需要向 Figure 添加一个 Axes 对象来创建一个实际的绘图。

plt.figure(figsize=(8,5)).add_subplot()

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

(图片由作者提供)

因为没有数据,所以还是一个空图。绘图功能可用于将数据传递给轴。

arr = np.random.random(100)
plt.figure(figsize=(8,5)).add_subplot().plot(arr)

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

(图片由作者提供)

我们已经看到了 Matplotlib 结构的概述。下一个技巧将是关于如何在图上做小的调整。

5。Xticks 和 Yticks

这些功能用于调整 x 轴和 y 轴上的刻度标签和位置。默认设置通常是合适的,但在某些情况下可能需要进行细微的调整。

下面是 xticks 和 yticks 用于修改绘图的示例。

plt.figure(figsize=(10,6))
plt.bar(x=[1,2,3,4], height=[3,5,1,6])plt.xticks(ticks=[1,2,3,4],
labels=['Sunday','Monday','Tuesday','Wednesday'], rotation="45", fontsize=12)plt.yticks(ticks=np.arange(10), fontsize=12)

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

(图片由作者提供)

旋转参数旋转标注,这在长标注的情况下非常有用。它们甚至可能重叠,这绝对不是所希望的。

如果我们不调整,y 轴上的范围将是 0-6。我认为如果顶部有一个空间会更好看。我有时会利用这个空间添加文本或注释。

6。添加文本

文字可以用来指出某事或给情节增加额外的信息。text 函数提供了一种灵活的方式,可以调整文本的位置、字体大小和样式。我们甚至可以把文本放在一个盒子里。

以下代码将在前面的绘图中添加一个文本框。

plt.text(1, 8, '2020 Averages', style='oblique', fontsize=15,
bbox={'facecolor': 'grey', 'alpha': 0.5, 'pad': 5})

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

(图片由作者提供)

文本功能可应用于 pyplot (plt)界面或 Axes 对象。

7。创建一个有支线剧情的人物

在某些情况下,我们需要在同一个图形上有多个图。Matplotlib 提供了不同的方法来生成这样的图。subplots 函数创建一个具有一组 subplots 的图形。

我们指定行数和列数,然后创建一个绘图网格。支线剧情的数量是行数和列数的乘积。

fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2,
                               sharey=True, figsize=(8,5))ax1.plot(np.random.random(30))
ax2.plot(np.random.random(30)*5)

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

(图片由作者提供)

因为每个子情节都被分配给一个 axes 对象,所以我们可以完全控制它们。下面的代码将分别编辑 ax1 和 ax2。

ax1.set_title("Measurement1", fontsize=14)
ax1.text(1,4, "Before Noon", fontsize=12)ax2.set_title("Measurement2", fontsize=14)

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

(图片由作者提供)

注:除非另有说明,所有图片均由作者创作。

结论

我们在这篇文章中介绍的只是 Matplotlib 功能的一小部分。我分享的一些信息可以被认为是细节,而其中一些是非常基本的。然而,它们都有助于充分利用 Matplotlib。

和其他学科一样,掌握 Matplotlib 的最好方法是实践。一旦您熟悉了基本功能,就可以继续使用更高级的功能。

感谢您的阅读。如果您有任何反馈,请告诉我。

你(可能)不知道的 7 个 Python 迭代器

原文:https://towardsdatascience.com/7-python-iterators-you-maybe-didnt-know-about-a8f4c9aea981?source=collection_archive---------33-----------------------

以及为什么你应该关心

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

安德鲁·西曼在 Unsplash 上拍摄的照片

如果你曾经用 Python 编程过,你可能知道迭代器。这些对象包含可计数数量的值。列表、元组、字典和集合都是可迭代的,这意味着你可以对它们调用函数 iter() 来创建遍历它们的值的迭代器。使用函数 next() 遍历迭代器。For 循环即时从可迭代对象实例化迭代器。

除了 Python 结构上的标准迭代器,Python 标准库中还有更高级的迭代器。它们都位于 itertools 模块中。这里我解释 10 个最有趣的。

数数

简单来说, count()range() 类似,但是无穷无尽。它采用一个开始和一个可选的步长参数,并在此之后输出无穷多个值。如果您想要迭代某些值,直到满足特定条件,这是很有用的。与 map 结合使用时,它可以这样使用:

import itertoolsdef sqr(n):
   return n*nfor i in map(sqr, itertools.count(10)):
   if i > 1000:
      break
   print(i)

这段代码输出 i < 1000.

cycle

As the name implies, cycle§ 循环的所有值,循环次数不限。这个迭代器有用的一个例子是以循环顺序给列表元素分配标签:

import itertoolsa = ‘ABCDEFGH’
print(list(zip(a, itertools.cycle(range(2)))))

在这种情况下,输出将具有值[('A ‘,0),(’ B ‘,1),(’ C ',0),…]。

链条

将多个可重复项链接在一起。像这样使用它:

import itertoolsa = ‘ABCD’
b = ‘EFGH’
print(list(itertools.chain(a,b)))

输出将是“ABCDEFGH”。

星图

该函数采用另一个函数和一个 iterable 作为参数,如下所示:

itertools.starmap(function, iterable)

starmapmap 非常相似,除了它也允许输入函数采用多个参数,这些参数已经分组在 iterable 的元组中,如下所示:

import itertoolsdef compute_sqr_sum(x, y):
   return x**2 + y**2a = [(x,x+1) for x in range(4)]
print(list(itertools.starmap(compute_sqr_sum, a)))

在这种情况下,输出是[1,5,13,25]。

产品

生成参数中可迭代项的笛卡尔乘积。它相当于多个嵌套循环。当你需要计算所有项目组合时,你可以使用它。可选的 repeat 参数允许你计算一个 iterable 与其自身的笛卡尔积。例如,您可能会这样写:

import itertoolsa = [1, 2, 3]
print(list(itertools.product(a,repeat=2)))

输出为[(1,1)、(1,2)、(1,3)、(2,1)、(2,2)、(2,3)、(3,1)、(3,2)、(3,3)]。

伊斯利斯

从 iterable 中返回特定的切片。这和常规的*切片()*很像。然而,slice()创建了使用它的字符串、列表或元组的副本。

相比之下, islice(iterable,start,stop,[step]) ,除了 iterable 之外,几乎具有完全相同的语法,它返回 iterable,因此速度更快,因为元素是动态生成的。

因此,如果内存效率起作用的话, islice 是首选方法。 islice 的一个警告是它不能使用负索引(因为它总是从开始迭代 iterable,而 iterable 甚至可能不是有限长度的)。如何使用的例子是 ice :

import itertoolsgen = itertools.count()
print(list(itertools.islice(gen, 2, 5)))

输出将是[2,3,4]。

积聚

这个函数在很多函数式编程语言中也被称为 fold 。它允许您迭代地将一个特定的二元函数应用于一个列表的元素,并将集合放入一个新的列表中。accumulate 的默认函数是运算符 add,用于将 iterable 中的项相加,例如[1,2,3,4]->[1,2,6,10]。此时,我将向您展示一个使用多个迭代器的稍微复杂一些的示例:

import itertools
import operatorgen = itertools.count(1)
factorials = itertools.accumulate(itertools.count(1), func=operator.mul)
fac_and_nums = zip(gen, factorials)print(list(itertools.islice(fac_and_nums, 2, 5)))

你认为输出会是什么?

顺便说一下,使用迭代器时必须小心,因为每次调用 next() 函数时迭代器都会递增。因此,这段代码没有实现作者的意图:

import itertools
import operatorgen = itertools.count(1)
factorials = itertools.accumulate(gen, func=operator.mul)
fac_and_nums = zip(gen, factorials)print(list(itertools.islice(fac_and_nums, 2, 5)))

你能找出原因吗?

结论

虽然 Python 绝对不是函数式语言,但是它借用了一些非常有趣的函数式概念。将这些迭代器与 map 之类的函数结合起来,创造了一个全新的机会世界,并允许编写快速有效的对象代码处理序列。

itertools 中还有一些迭代器。所有这些都可能在某种情况下有用。如果你想了解更多,不要害怕看一下官方 Python 文档!

你不想犯的 7 个 Python 错误

原文:https://towardsdatascience.com/7-python-mistakes-you-dont-want-to-make-77ac068c847?source=collection_archive---------13-----------------------

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

照片由伊万·阿列克西奇Unsplash 上拍摄

注意这些可以节省几天的调试时间

早上开始得很完美。甚至在我喝完咖啡之前,我就已经完成了一部新电影。我的生产率直线上升。那时候我还不知道,好得不像真的。

这个问题只花了几个小时就浮出水面了。然而,找到问题的根源需要更多的时间。修复需要一整天的时间。那时我还是个初学者。由此,我学到了关于 Python 中列表的重要一课。

这听起来熟悉吗?这发生在每个人身上,但是从别人的错误中学习总是更好的。在本帖中,我收集了其中的七个,可以为你节省无数个小时的调试时间。

1.有副作用的函数

由于 Python 不是像 Haskell 那样的纯函数式语言,函数会产生副作用。严格来说,这不算是失误,但是很容易无意中把事情搞砸。下面的例子说明了这个问题。

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

在 Python 中,对象是引用类型。所以当你传递一个列表作为参数时,传递的是一个引用而不是值。这意味着如果你在一个函数中改变它们,这些变化将会反映到外部。

这可能会导致一些令人讨厌的意外和数小时的调试。(见我的介绍。)提防这些,早点给自己省事。

2.默认参数中的函数调用

默认参数有时会很难使用。看看下面。

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

为什么每次调用的返回值都一样?原因是 Python 在定义函数时会计算默认参数中的表达式。如果希望动态生成默认参数,可以执行以下操作。

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

3.可变默认参数

这个问题是以上两者的结合。你遇到过以下场景吗?

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

这里发生了两件事。

  1. 当函数被定义时,Python 对表达式[]求值。(这相当于调用list()。)
  2. 此对象的引用被绑定到参数。因此,无论何时调用该函数,都将使用同一个对象。

因此,使用可变对象作为默认参数不是一个好主意。你永远不应该那样做。

4.意外的参考分配

正如我们所见,Python 中的每个对象都是一个引用类型。除了将它们传递给函数之外,这会导致一些混乱。请参见以下示例:

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

当你执行b = a时,你实际上存储的是a引用。因此,ab指向同一个对象。要解决这个问题,你应该使用内置的deepcopy函数。这会递归地将所有的值类型属性复制到新变量中。

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

如果你用整数而不是列表来做同样的尝试,一切都会如你所料。原因是整数类型是不可变的,所以当你改变它们时,你覆盖了引用。

5.从进口的东西*

我知道,我们都曾经这样做过。这有几个缺点。

首先,不同名称空间中的函数可能具有相同的名称,这会在整个代码库中造成混乱。

第二,当您在 Python 中导入一个模块时,该模块中的所有代码都将被执行。如果有许多子模块要导入,这会大大降低速度。因此,如果您只导入 NumPy 来生成随机数,那么您可能更适合使用

from numpy.random import random

import numpy as np

6.用字符串串联连接路径

假设您必须从变量data_folder给出的文件夹中打开一个名为data.csv的文件。应该如何确定文件路径?如果你在做

data_path = data_folder + "/data.csv"

那你做的不对。例如,这在 Windows 上是行不通的。您可能没有亲身经历,但是您的使用不同开发设置的同事肯定会感受到这种痛苦。

要解决这个问题,您应该使用 Python 的内置工具pathlib,或者简单地使用os.path.join函数:

data_path = os.path.join(data_folder, "data.csv")

7.低测试覆盖率

这是一个高层次的问题。尤其是当你是一个初学者时,单元测试的好处并不清楚。然而,每个经验丰富的开发人员都可以告诉你,这是绝对必要的。使用未经测试的代码就像玩打地鼠游戏:修复一个错误,引入另一个错误。

从项目一开始就要避免这种情况。一旦您添加了一个特性(甚至是一个功能),您就应该编写测试用例来验证实现。这方面有几个很棒的库,例如内置的 unittest 或者非常流行的 pytest

你应该认真投入时间测试你的代码。这可能需要一些时间,但这是一项长期投资。您将节省更多的调试时间。

摘要

简而言之,这是你在 Python 中可能犯的七个最痛苦的错误。在您追求 Python 熟练程度的过程中,您肯定会遇到更多。然而,有了这个指南,你将有知识避免最常见的错误。

现在去建造一些令人敬畏的东西吧!😃

(通过适当的单元测试。)

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

让你的代码更好更聪明的 7 个 Python 技巧

原文:https://towardsdatascience.com/7-python-tricks-to-make-my-code-better-and-smarter-60dfde0b6c49?source=collection_archive---------16-----------------------

我希望我早点知道的技巧

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

Max DuzijUnsplash 上拍摄的照片

我是一名工程师。我在大学学过 Fortran 和 MATLAB 来解决像能量和传质这样的工程问题,但是我没有扎实的软件工程训练。当我最近开始为数据科学和机器学习学习 Python 时,我是以一种“面向结果”的方式进行的,这使得我的代码有点混乱和低效。

通过我的自学之旅,我发现几个 Python 函数极大地改进了我的代码。我希望在这篇文章中分享 7 个 Python 技巧,我希望我作为初学者能早点知道。

1.列表理解

**列表理解节省时间和代码。**与使用循环相比,这是一种生成列表的简单方法。

我们来看一个例子:我们有一个列表:x,包含 5 个整数,我们想做一个列表,x_square,包含 x 中 5 个整数的平方。

for 循环方法如下所示:

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

列表理解可以在一行代码中完成同样的工作:

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

它还可以包含一个条件,比如我们只想要一个包含大于 2 的整数平方的列表。对于循环方法,我们可以添加一个 if 语句:

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

列表理解:在末尾添加条件——仍然是一行代码

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

2.λ函数

lambda是一个小型匿名函数,其行为类似于普通函数。

例如,一个计算平方的函数可以定义为:

def cal_square(x):
   returm x**2

使用一个lambda函数,可以这样做

cal_square = lambda(x:x**2)

使用自己定义函数对事物进行排序非常方便,例如:

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

使用apply操作熊猫数据框也非常有用:

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

3.地图()

map以一个函数和一个列表作为参数,它将函数应用于列表中的每一项。它确实很方便,因为它避免了使用循环,而且速度更快。

以一个简单的函数为例,如果我们想计算列表中每一项的平方,我们可以定义一个函数来进行计算,并使用map()将该函数应用到列表中

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

4.过滤器()

顾名思义,filter对列表应用过滤器并返回满足条件的条目。如果我们只想要列表中的肯定项,我们可以定义一个过滤函数,然后将filter应用到列表中。

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

这里也可以用lambda来简化。

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

5.加入()

join是一种将字符串连接在一起的方法。连接字符串的直接方法是使用+,例如:

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

这可以通过使用join更容易地完成:

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

6.枚举()

enumerate给数据添加计数器。例如:

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

在循环中使用非常有用:

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

7.格式()

format()是 Python3 中的一种字符串格式化方法。用多个变量生成或打印字符串是很方便的。

例如:

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

它在循环中非常有用:

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

您也可以使用.5f摆弄数字:

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

f 弦是另一种玩弦的方式,它甚至更聪明,避免了长线。

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

就是这样。这些技巧使我的代码更简单、更好,而不用编写不必要的循环。希望这些招数也能帮到你。

感谢阅读,编码快乐。

我还写了关于 Numpy 和熊猫的文章,有兴趣的可以看看!

[## 让我的代码更好更聪明的 7 个小技巧

我希望我早点知道的技巧

towardsdatascience.com](/7-numpy-tricks-to-make-my-code-better-and-smarter-9e8a4ccf43d1) [## 让我的数据分析过程更高效的 10 个熊猫窍门:第 1 部分

我希望我早点知道的技巧

towardsdatascience.com](/10-pandas-tricks-to-make-my-data-analyzing-process-more-efficient-part-1-78a0cc1636f3)

https://towards data science . com/10-pandas-tricks-to-make-my-data-analyzing-process-more-efficient-part-2-b 72 ea 43 A0 bb 5

在开始任何数据科学项目之前,你应该问自己的 7 个问题

原文:https://towardsdatascience.com/7-questions-you-should-ask-yourself-before-starting-any-data-science-project-51c29093c641?source=collection_archive---------31-----------------------

如何成为一名负责任的数据大师

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

在家里做一些数据分析的时候,试着记住质疑一切

学习成为数据科学家所需的技术技能当然很好。我认为学会像数据科学家一样思考也是非常重要的。这意味着总是质疑…基本上是一切。

显然,每个数据科学问题都需要您以不同的方式质疑您的方法和数据,但我认为,无论何时开始任何新的数据科学项目,都有几件事需要考虑。在这个故事中,我将讨论这些问题,以及为什么我认为这些问题对于一名负责任的数据科学家非常重要。

对于任何新的数据科学项目,我的问题是:

  1. 你想回答的问题是什么?
  2. 你知道你要测量的是什么吗?
  3. 你有正确的数据来回答你的问题吗?
  4. 你足够了解你的数据是如何被收集的吗?
  5. 有没有什么伦理上的考虑?
  6. 谁会看你的分析,他们对统计学了解多少?
  7. 你需要能够质疑你的方法吗?

1.你想回答的问题是什么?

在询问任何数据集之前,至少有一个你试图回答什么问题的想法是极其重要的。

你不想测试多个假设,只看哪一个有意义。如果你这样做,你会遇到多重假设检验的问题。当我们做统计课的时候,我们会更详细地讨论这个问题,但简单地说,当你同时考虑多个假设时,就会发生这种情况。

当我们谈论一个显著的结果时,一般来说,我们指的是一个我们相当有信心不同于“控制”的结果,因为这是一个真实的效果而不是随机的机会。95%置信度最常用(p<0.05)。

这留下了 5%的错误率,当结果实际上不重要时,我们将它标记为重要。同时测试多个假设的问题在于,至少其中一个假设出现这种错误的可能性会增加。因此,一次不加选择地测试许多假设,你会增加做出错误发现的机会。

因此,当你有一个经过深思熟虑和充分研究的假设时,战略性地使用统计测试,而不是随机测试,看看什么是有效的,这是更好的实践。

例如:

  • 如果您有一个包含 4 个不同组的测量值的数据集,并在它们的每个不同组合之间进行 t 检验,以查看它们中的任何一个是否有显著性,那么您将遇到多重假设检验问题。你做出错误结论的可能性会增加。
  • 更好的做法是创建一个无效假设并进行测试。

除了避免多重假设检验的问题之外,清晰地思考你要回答的问题会让你不至于偏离正题。

有时,从一个数据集中可以收集到如此多不同的闪亮而有趣的见解,以至于很容易掉进错误的兔子洞。你可能最终做了很多工作来解决有趣的问题,但对你最初的问题没有答案。

如果数据科学是你的一个爱好,这可能不是什么大不了的事情,但如果你试图在一个截止日期前工作,或者为你工作的公司解决一个特定的问题,这可能会重要得多。

2.你知道你要测量的是什么吗?

一旦你知道你想解决什么问题,你需要知道你将如何解决它。其中一部分是决定你要测量什么。

处理同一个问题往往有多种不同的方法。但是,如果你选择衡量错误的效果或变量,那么你可能无法有效地解决你的问题。因此,非常重要的一点是,要深思熟虑地考虑你试图衡量的东西是否是回答你感兴趣的问题的最有效方式。

类似于上面的第一点,如果你选择了错误的影响或变量来衡量,那么你可能会花很多时间在一个并不真正满足你需求的分析上。

例如:

  • 我曾经需要创建一个预测模型,其中的结果变量是一个人是否接受了特定的医疗程序的治疗。我使用的数据是医疗保健索赔数据,其中程序由代码表示。许多代码都非常具体,所以我需要将一些代码组合在一起,以创建我的二进制结果变量。
  • 当我在研究我感兴趣的程序时,我偶然发现了这些程序的一个子集,引起了我的注意。我很想钻进兔子洞,专注于程序的这个子集,但那不是我工作的公司要求我研究的。所以我不得不把它放到以后,继续工作。

决定采用哪种方法可能是任何数据科学项目中最重要的一步。

这可能需要一点研究来找出什么是适合你的目标的正确变量,但这是值得的。如果你确信你已经正确地选择了测量什么,那么你就可以对你的分析结果更有信心。

此外,当你与他人交流你的发现时,你可以确信你已经适当地考虑了你想要解决的问题以及如何正确地衡量它。

3.你有正确的数据来回答你的问题吗?

因此,一旦你有一个问题要解决,并知道如何衡量你感兴趣的效果,你需要有数据来进行衡量。如果你没有办法去研究最好的、最有趣的问题和变量,那是没有意义的。

拥有完美的数据集来回答确切的问题并测量感兴趣的特定效果是非常罕见的。

作为一名数据科学家,没有正确的数据是一件非常令人沮丧的事情。

我们经常不得不将就我们所拥有的。因此,我们可能不得不测量一些与我们最初打算的略有不同的东西。这可能没问题,只要我们随后调整报告结果的方式,以反映这种调整。

有时可以使用一个有数据的变量来表示另一个无法收集数据的变量。然而,如果你这样做,你必须恰当地报告你的结果。确保你不要声称你的结果没有数据支持。

例如:

  • 如果你想知道哪种狗在澳大利亚最受欢迎,但是你只有一个城市的数据,悉尼。你仍然可以对受欢迎的狗品种进行分析,但你需要在结果中表明你的数据只反映了悉尼的数量。

4.你足够了解你的数据是如何被收集的吗?

仅仅因为你有正确的数据来衡量你的兴趣和解决你心中的问题,并不意味着你可以放松😉

数据集不会凭空出现,不会完全成形,也不会包含完整的数据。有许多不同的方法可以收集数据。其中许多涉及机器或人,这意味着可能会出错。在进行任何分析时,尝试考虑或至少承认尽可能多的潜在误差源。

我不可能描述数据收集出错的所有可能方式。然而,您可以通过一些不同的调查来了解您的数据集。它们可以让你更好地理解它的缺点是什么。

例如:

  • 您知道您的数据集是在哪里收集的吗?许多变量会有区域差异,这应该被数据集捕获。然而,如果没有记录位置数据,这是不可能的。
  • 您知道您的数据集是何时收集的吗?如果你分析的数据存在每日、每周或季节性差异,那么了解你的数据来自哪个时间段是很重要的。
  • 你的数据是由谁收集的?这项研究是由一家可能对结果有既得利益的公司支付的吗?做这项研究的人是否没有偏见?
  • 收集时数据集是否完整?
  • 这些数据是推断出来的还是估算出来的?不同的数据插补方法应与数据集一起记录,以便您可以询问您是否认为所使用的方法适合您的分析。
  • 在您收到数据集之前,是否对其进行过任何收集后修改?
  • 收集方法中是否有其他可能的偏差?如果是这样,它们应该在你的分析中得到解释,或者至少在你的结果陈述中得到承认。

了解数据集的历史非常重要,这样您就可以确定这些潜在的缺点是否会阻止您找到想要的答案。或者,如果它们是您可以处理的数据问题😃

5.有没有什么伦理上的考虑?

这是一个经常被忽视的非常重要的问题。你的分析和你得出的结果合乎道德吗?

你可能想知道一个分析怎么会有伦理方面的考虑。通过仔细分析适当收集和测量的数字肯定不会是不道德的吗?但现实是,有时像性别歧视和种族主义这样的东西会在我们完全没有意识到的情况下悄然而至。尤其是当我们试图用数据描述的世界中存在不平等和偏见的时候。

例如:

  • 如果你在构建一个机器学习算法来预测哪些人会购买产品。根据你的分析,强烈预测你的结果变量的特征之一可能是种族。但是,您应该决定将种族作为一个特征包含在您的模型中是否正确。也许种族实际上并不是你的结果变量差异的原因,相反,它是另一个与种族相关的变量。当你预测人们是否会购买一种产品,以便公司可以向他们推销时,这可能重要也可能不重要。相比之下,如果预测他们是否会偿还抵押贷款来决定他们是否应该获得银行贷款,那么突然之间这就变得更加重要了。
  • 数据科学中最著名的种族主义案例之一是,一种面部识别算法将两名非洲裔美国男子标记为大猩猩。这不是设计软件的人恶意造成的,而是因为训练数据集中没有足够的多样性。

有很多人写过关于数据科学伦理的文章,所以你可以教育自己在设计数据科学项目时做出伦理决策。重要的是要承认世界上存在的偏见,并自己决定你计划完成的分析是否合乎道德。请注意,尽你最大的努力以一种能让世界变得更美好的方式进行分析。

作为数据科学家,我们是数据的管理者。我们可以影响公司如何做生意,政府做什么决定,开发什么药物等等。因此,极其重要的是,我们要负责任地、有意识地这样做。

6.谁会看你的分析,他们对统计学了解多少?

谁将会阅读你的分析或者成为你分析的接受者?是网站或产品的用户吗?数据科学团队?营销团队?业务拓展?销售团队?等等。每一组都有不同程度的统计学理解。所以你可能需要根据你的听众来调整你的分析。特别是,你选择的方法,你如何传达你的结果,以及任何相关的警告。

作为一名数据科学家,您有责任确保将您的发现准确传达给目标受众。你必须考虑到你的听众有多少统计学背景。

我做过的最困难的演讲之一是面对一群对统计学有着不同理解的听众。观众中有神经科学家、神经外科医生,也有遭受过脑损伤的人。关键是要包括足够多的细节,让专家高兴,但不要让其他人觉得我在居高临下地和他们说话,或者把他们排除在对话之外。在向不同的受众传达我的结果时,我一直在努力保持这种平衡。

不同的人希望将您的数据用于他们自己团队的目的也是很常见的。你有义务确保他们知道你的分析的局限性,以及他们是否能够自信地提出他们想要的主张。

这有时会导致冲突。不同的利益相关者可能对你的分析有不同的目的,但重要的是坚持你的立场,确保每个人都清楚地理解你的结果意味着什么。此外,确保他们知道可以得出什么结论。

例如:

  • 我曾经在一家公司工作,为营销团队做分析。和这个团队一起工作很愉快,因为他们和我清楚地交流了他们对我们数据的看法。有几次,我不得不礼貌地纠正他们想说的一些我觉得我们的数据无法支持的东西,但他们很好地接受了这种建设性的批评。
  • 相比之下,这种类型的对话并不总是进行得很顺利。我曾经开发过一个数据产品,销售团队希望对其功能和覆盖范围做出一些声明。我必须非常坚定,以确保我们没有过度宣传我们的能力。但我觉得这大概是科学家和销售人员的自然状态。前者天生保守,后者保守得多😃

7.你需要能够解释或询问你用来回答问题的方法吗?

在您决定在您的数据科学项目中使用什么方法之前,了解您需要多少方法才能质疑您生成的分析或模型是很重要的。

有时你可能需要能够非常详细地解释你采取的每一个步骤。这包括所有被考虑的变量和原因。其他时候,准确性是游戏的名字。在这种情况下,只要模型的预测误差最小,那么模型中包含什么并不重要。

了解这一点将有助于你决定你的方法。

例如:

  • 如果您有一个预测问题,并希望使用监督机器学习算法来预测二元结果变量,您有几个不同的选项。如果您需要能够检查模型中的每个特性,并且能够向某人清楚地解释它,那么最好使用逻辑回归模型。然而,如果您的模型更像是一个黑盒并不重要,那么随机森林模型可能会更好地为您服务。

虽然可解释性不应该是选择机器学习模型进行分析的主要考虑因素,但它值得思考。有时,这可能是准确性和可解释性之间的权衡。所以这真的是由你作为一个数据科学家来决定去哪个方向。

结论

因此,在开始任何数据科学项目之前,问问自己:

  1. 问题是什么?
  2. 你知道你在测量什么吗?
  3. 你有正确的数据来回答你的问题吗?
  4. 你知道你的数据是如何收集的吗?
  5. 有没有什么伦理上的考虑?
  6. 谁会看你的分析,他们有统计学背景吗?
  7. 你需要能够质疑你的方法吗?

我希望这 7 个问题能发人深省。他们将确保在您执行的任何数据科学分析中,您不会完全偏离正轨。希望它们能为你节省一些时间,减少不必要的麻烦。随着您在数据科学方面获得经验,我相信您会提出自己的问题,在开始任何新项目之前,您总是喜欢问自己这些问题。请记住,在您的所有分析中要始终保持警惕,并适当地传达对您的结果的任何警告。

除了数据,我的另一个爱好是绘画。你可以在 www.katemarielewis.com 找到我的野生动物艺术

[## 我如何在 6 个月内从零编码技能成为数据科学家

我用来自学数据科学的 4 个工具没有花一美元

towardsdatascience.com](/how-i-went-from-zero-coding-skills-to-data-scientist-in-6-months-c2207b65f2f3) [## Ldswsd -走向数据科学

阅读《走向数据科学》中关于 Ldswsd 的文章。共享概念、想法和代码的媒体出版物。

towardsdatascience.com](https://towardsdatascience.com/tagged/ldswsd)

基于阿里云容器服务为 Kubernetes (ACK)构建 AI/ML 项目的 7 个理由

原文:https://towardsdatascience.com/7-reason-to-build-your-ai-ml-project-on-alibaba-cloud-container-service-for-kubernetes-ack-423f84bb448d?source=collection_archive---------72-----------------------

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

来源:截图来自阿里云原生日

作为数据科学家,我们在大规模运行 AI/ML 项目时经常面临一些挑战。

首先,我们需要端到端的支持来做 AI/ML 实验,包括平台来做数据准备,建立/训练/评估模型,并将模型发布到生产中。有时我们需要多个平台来执行这些特定的任务。

第二,为了支持端到端的实验,我们需要异构的资源类型和管理,以便我们可以有一个高效的项目。

最后,为了能够连续大规模地训练和服务我们的模型,我们还需要找到一种经济高效的方法,这可以通过按需将资源使用从零扩展到数千的能力来实现。

那么,我们如何应对这些挑战呢?

下面我要介绍一下 Kubernetes (ACK)的阿里云容器服务。这种容器服务是由阿里云提供的,以应对这些挑战。ACK 可以支持从数据准备、开发、训练、推理、操作、存储、计算引擎和网络管理端到端 AI/ML 项目。

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

确认时的业务流程。张开在阿里云本土日上的图片

ACK 还提供了该解决方案支持的六个主要特性,这些特性将在本文中描述。

ACK 上云原生 AI/ML 解决方案的关键特性

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

ACK 的主要特性。张开在阿里云诞生日的图片

1.AI/ML 作业生命周期管理

ACK 使用 Kuberflow 和 Arena 作为生命周期管理工具。Kuberflow 是 K8s 本地平台,用于使用 Kubernetes 构建可移植的 ML 解决方案。有了 Kuberflow,我们可以让机器学习工作流在 Kubernetes 上的部署变得简单、可移植、可扩展。

ACK 也有 Arena 让数据科学家的生活更轻松。Arena 是一个命令行界面,用于运行和监控机器学习训练、推理作业,并轻松检查它们的结果以及实时的 GPU 利用率。Arena 还拥有对 Python 和 Java 的 SDK 支持,可以快速集成到用户的平台中。

要获得关于 Kuberflow 和 Arena 的更多信息,请通过以下链接查看 Github 页面:

[## 库贝弗洛

解散 GitHub 是超过 5000 万开发者一起工作的家。加入他们,发展您自己的开发团队…

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

https://github.com/kubeflow/arena

2.AI/ML 作业的优化调度程序

ACK 支持多种资源分配模式,包括:

  • 一伙
  • 拓扑感知
  • 传播
  • Binpack

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

资源分配模式。张开在阿里云本土日上的图片

此外,ACK 具有多种类型的调度策略:

  • 先进先出。比较 LIFO
  • 容量
  • 公平分配

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

ACK 调度策略。张开在阿里云诞生日的图片

3.统一异构资源管理

ACK 支持各种资源管理来管理各种资源类型。

GPU 管理

ACK 支持全自动的 GPU 设置、调度、监控和管理。ACK 还通过在特定场景的多个容器之间共享一个 GPU 设备来实现优化的 GPU 利用率。此外,ACK 提供了 GPU 扩展能力,以按需处理工作负载变化。

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

GPU 分享图解。张开在阿里云诞生日拍摄的图片

VGPU 管理

这种 VGPU 管理通过 GPU 共享提高了 GPU 利用率,同时确保了多租户的隔离。ACK 支持多种虚拟化比率选择,包括 1:2、1:4、1:8,没有额外的许可证要求。这个 VGPU 适合 AI 推理和图形工作负载。

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

VGPU 模式。张开在阿里云诞生日的图片

阿林普(汉光 800)

汉光 800 是阿里巴巴做的 AI 推理的神经处理单元。这个单元可以帮助更快更有效地执行机器学习任务。

ACK 有助于提高设备和内核级调度的利用率。ACK 还带来了统一的调度、扩展、监控和管理,以支持端到端的人工智能项目生命周期。

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

汉光 800 在器件或内核级的应用。张开在阿里云诞生日的图片

FPGA 管理

ACK 可以加速 FPGA H265 编码器的交付,并按需扩展实例。

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

FPGA 管理。张开在阿里云诞生日拍摄的图片

RDMA 管理

ACK 可以在 Kubernetes 中为 HPC 和深度学习工作负载调度和管理 RDMA 设备。ACK 能够与英伟达 NCCL 集成,以加速分布式培训。

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

RDMA 管理。张开在阿里云诞生日的图片

4.GPU 监控

ACK 提供了出色的 GPU 监控。通过查看该监视器,我们可以看到节点视图指标或应用程序视图指标。

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

GPU 监控。张开在阿里云诞生日拍摄的图片

5.自动缩放

ACK 中的自动 GPU 扩展可以通过多种场景完成。例如:

  • 基于 GPU 设备级指标的自动缩放 AI 应用实例
  • 用于运行大型人工智能训练作业的自动缩放 GPU 集群节点

6.利用分布式数据缓存加速计算

ACK 可以通过摆脱 GPU/CPU 等待时间来加速 AI 训练作业的远程数据读取。ACK 分布式数据缓存(DDC)支持水平扩展,支持不同的存储后端,包括 OSS/HDFS/NAS。此外,ACK DDC 支持多个缓存层,包括 RAM/SSD/HDD,并支持预加载一次,由多个作业读取。

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

DDC 插图。张开在阿里云诞生日拍摄的图片

7.通过 Flink/Blink on ACK 运行流数据处理

ACK 还支持运行 Apache Flink 应用程序,以云本地方式处理流数据。此外,ACK 还支持 Spark。

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

阿帕奇弗林克图。张开在阿里云诞生日拍摄的图片

最后的话

作为总结,在云环境中构建人工智能/人工智能作业可能是解决常见人工智能/人工智能挑战的答案。特别是通过使用阿里云平台,我们可以体验一些关键功能,这些功能将使我们的项目更加高效。

参考

张,凯。(2020).在 Kubernetes 上构建 AI/机器学习【演示】。阿里云原生日。(访问日期:2020 年 6 月 3 日)。

不雇佣数据科学家的 7 个理由

原文:https://towardsdatascience.com/7-reasons-to-not-hire-a-data-scientist-446b5c051f91?source=collection_archive---------36-----------------------

因为谁需要数据?

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

尼克·科尔曼在 Unsplash 上拍摄的照片

我觉得标题挺清楚的,就开门见山吧。

#1:你没有任何数据

在考虑雇佣数据科学家之前,你应该退一步考虑你的数据。

数据科学家的工作是从数据中创造价值。如果你甚至不确定你是否有数据,这是一个很好的迹象,表明你还没有为数据科学家做好准备。

如果你知道你有数据,但真的不知道如何访问它,它的可靠性或任何细节,那么你应该首先回答这些问题。

如果您的公司对其数据资产有很强的把握,您将从聘用的数据科学家身上获得更多价值。您的理解不必完美,但您应该能够向数据科学家指出一些有文档的数据。

对于一名新的数据科学家来说,最糟糕的感觉是意识到他或她刚刚加入了一家实际上并不掌握他们的数据的公司。

#2:你没有正确的数据

我知道你在想什么。你读了第一条,笑了——谁会雇佣一个没有数据的数据科学家。

好吧,下一个你没有准备好的迹象是你有数据,但没有的数据。

数据是解决您想要解决的问题的数据,并且有望被标记。通过标记,我的意思是你有数据,也有与数据相关的真相吗?

例如,如果您希望一名数据科学家来构建一个系统来检测您网站上的欺诈活动,您可能希望从您的网站获得活动数据,并了解一些数据集,哪些活动是欺诈性的,哪些不是。知道哪些数据点是欺诈性的将被视为标签。

现在—你可以不用标签解决问题,但是如果这是你第一次涉足数据科学,我强烈建议从有标签的数据开始。

如果你的数据还没有标签,投入一些时间和金钱让人们给你的数据贴上标签,或者建立一个可以自动贴标签的系统。

#3 你没有明确的问题要解决

回到拥有正确的数据,要知道你是否拥有正确的数据,你还必须有一个明确的问题要解决。

我怎么强调这有多重要都不为过。

当然——有可能你雇佣了一个伟大的数据科学家,他或她带着一个模糊的问题进来,然后让一些奇迹发生。别指望这个。

准确地知道你想要解决什么问题,以及你将如何评估成功,从而最大化你成功的机会。如果问题通常可以由人类解决而没有太多问题,这也是有帮助的。如果是这样的话,这是一个很好的迹象,你也可以使用数据科学来解决它。

一个很好的例子可能是,你想以至少 70%的准确率检测你网站上的评论是否不恰当。

#4:你真正需要的是分析师

如果你已经到了这一步,那么希望你有正确的数据和明确的问题。

我认为下一个最大的问题是,一家公司认为它需要一名数据科学家,但它实际上需要一名分析师。数据科学家通常可以做分析师的工作,但如果你需要的是分析,你最好雇佣分析师。

一般来说,区别在于你是在试图预测新的事件,还是更好地理解历史事件。

举个例子,如果你想让某人进来,把你的历史销售数据汇总到一个漂亮的带有一些汇总统计数据的仪表板上,那么你要找的就是分析师。

分析师对一家公司来说非常有价值。事实上,他们往往比数据科学家更有价值,因为通常情况下,你希望他们解决的问题更清晰,风险更低。

#5:你没有准备好数据科学家的真实成本

关于数据科学家,一个鲜为人知的事实是,他们是有需求的。一旦你雇佣了一个,他们就会想要更多的数据、更多的存储和更多的计算。在您知道之前,他们会让您相信一台 10 万美元的计算机对您的数据科学计划的成功绝对至关重要。

他们可能没有错。

所以,在雇佣数据科学家之前,请考虑一下数据科学家的真实成本。您的 IT/基础设施成本肯定会上升。

此外,单个数据科学家可能不足以产生重大价值。为了以可接受的速度前进,向团队中添加更多的工程师和数据科学家可能是必要的。

#6:你期待独角兽和彩虹

数据科学项目通常比一般项目风险更大。通常,问题是否可解都是未知的。你可能最终会雇佣一名数据科学家,并投资于一个不容易解决的问题。

您需要适应失败的迭代和不太严格的时间表,以使数据科学项目有效。

这并不是说你不应该期待你的数据科学团队的真正价值,而是你应该期待这条路不那么线性。如果你的公司还没有准备好,那么我会推迟。

#7:你不知道如何雇用数据科学家

最后,如果你不知道如何做,就不应该雇佣数据科学家。

数据科学已经代表了许多不同类型的工作,这使得如果没有该领域的知识,很难知道你得到的是什么类型的数据科学家。

例如,也许你得到了真正的拥有多个博士学位的学术数据科学家,但却非常不擅长编码。或者,你可以聘请一名数据科学家,他更像是一名拥有一些数据科学在线课程的工程师。

这两个都不坏,但是根据你的需要,它可能不适合你的公司。因此,在招聘数据科学人才之前,请确保你对能够真正找到一名好员工感到满意。

你喜欢这篇文章吗?加入我的数据科学社区

我喜欢 Vaex 用于数据科学的 7 个原因

原文:https://towardsdatascience.com/7-reasons-why-i-love-vaex-for-data-science-99008bc8044b?source=collection_archive---------11-----------------------

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

摄影:塔拉斯·马卡连科(经由 www.pexels.com)

Vaex 是一个开源的 Python 数据框架库,其 API 与 Pandas 的 API 非常相似。我已经在学术和行业环境中使用 Vaex 好几年了,它是我正在从事的几个数据科学项目的首选库。在本文中,我想分享一些我最喜欢的 Vaex 功能。有些现在可能是显而易见的,但有些可能会让你大吃一惊。

以下代码示例在 MacBook Pro (15 英寸,2018,2.6GHz 英特尔酷睿 i7,32GB 内存)上运行。本文也可以作为 Jupyter 笔记本阅读。

1.易于处理非常大的数据集

如今,遇到大于典型笔记本电脑或台式机工作站可用 RAM 的数据集变得越来越常见。 Vaex 通过使用内存映射和惰性求值,很好地解决了这个问题。只要您的数据以内存可映射文件格式存储,如 Apache ArrowHDF5 ,Vaex 将立即打开它,无论它有多大,或您的机器有多少 RAM。事实上,Vaex 只受您拥有的可用磁盘空间量的限制。如果您的数据不是内存可映射的文件格式(例如 CSV、JSON),您可以通过将丰富的 Pandas I/O 与 Vaex 结合使用来轻松转换它。参见本指南了解如何操作。

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

使用 Vaex 打开和预览 100GB 的文件是即时的。

2.没有记忆副本

Vaex 有一个零内存复制策略。这意味着过滤数据帧只需要很少的内存,并且不会复制数据。考虑下面的例子。

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

过滤 Vaex 数据帧不会复制数据,占用的内存可以忽略不计。

创建df_filtered数据帧不需要额外的内存!这是因为df_filtereddf的复制。创建过滤后的数据帧时,Vaex 会创建一个二进制掩码,然后应用于原始数据,而无需制作副本。这种过滤器的内存成本很低:过滤一个10 亿行数据帧需要大约 1.2 GB 的 RAM。与其他“经典”工具相比,这可以忽略不计,在其他“经典”工具中,仅读入数据就需要 100GB,过滤后的数据帧需要大约 100GB。

3.虚拟列

将 Vaex 数据帧的现有列转换为新列会导致创建虚拟列。虚拟列的行为就像普通列一样,但是它们不占用任何内存。这是因为 Vaex 只记得定义它们的表达式,而不会预先计算这些值。这些列仅在必要时进行延迟评估,从而保持较低的内存使用率。

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

“tip_percentage”列是一个虚拟列:它不占用额外的内存,并且在需要时被动态地延迟计算。

4.表演

Vaex快速。我是说认真快。虚拟列的评估是完全并行的,只需对数据进行一次处理即可完成。诸如“value_counts”、“groupby”、“unique”等列方法以及各种字符串操作都使用快速高效的算法,这些算法是在 C++中实现的。它们都以核外方式工作,这意味着您可以处理比 RAM 中容纳的更多的数据,并使用处理器的所有可用内核。例如,对超过 10 亿行执行“value_counts”操作只需一秒钟!

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

使用 Vaex,“value _ counts”操作对于超过11 亿行需要大约 1 秒的时间!

5.即时编译

只要虚拟列是仅使用 Numpy 或纯 Python 操作定义的,Vaex 就可以通过 jitting 或通过 NumbaPython ran进行实时编译来加速其求值。如果你的机器有支持 CUDA 的 NVIDIA 显卡,Vaex 还支持通过 CUDA 加速。这对于加速计算量相当大的虚拟列的计算非常有用。

考虑下面的例子。我已经定义了两个地理位置之间的弧距离,这个计算涉及到相当多的代数和三角学。计算平均值将强制执行这个计算量相当大的虚拟列。当执行完全用 Numpy 完成时,只需要 30 秒,我觉得这令人印象深刻,因为它是针对超过11 亿行完成的。现在,当我们对 numba 预编译的表达式做同样的事情时,我们的执行速度提高了 2.5 倍,至少在我的笔记本电脑上是这样。不幸的是,我没有 NVIDIA 显卡,所以我现在不能用 CUDA 做同样的事情。如果你这样做了,如果你能尝试一下并分享结果,我会非常高兴。

一个小但重要的好处:注意缺少一个.compute或任何这样的方法——Vaex 自动知道什么时候懒惰,什么时候执行计算。

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

对于计算开销很大虚拟列,Jitting 可以使执行速度提高 2.5 倍。

6.选择

Vaex 实现了一个叫做选择的概念,用来选择数据。例如,当您想要通过计算数据不同部分的统计数据来浏览数据,而不需要每次都创建新的参考数据帧时,这是非常有用的。使用选择的真正强大之处在于,我们只需对数据进行一次处理,就可以计算多个选择的统计数据。

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

您可以通过一次数据计算多个选择的统计数据。

这对于进行各种可视化也是有用的。例如,我们可以使用.count方法在不同的选择上创建一对直方图,只需对数据进行一次遍历。相当高效!

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

只需对数据进行一次处理,就可以在不同的选择上创建多个直方图。

7.Groupby 带有选择的聚合

我最喜欢的特性之一是在聚合函数中使用选择的能力。我经常发现自己想要进行分组操作,其中的聚合遵循一些附加的规则或过滤器。SQL 式的方法是运行几个单独的查询,首先过滤数据,然后进行分组聚合,最后将这些聚合的输出合并到一个表中。使用 Vaex,只需一次操作,只需一次数据传递,就可以做到这一点!下面的分组示例在我的笔记本电脑上只需要 30 秒就可以执行,运行了超过 11 亿行。

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

可以在 groupby 聚合函数中使用选择。

奖励:进度条

查看上面的例子,您可能已经注意到在 Vaex 中实现的许多方法都带有进度条。我绝对喜欢这个功能!由于我经常对较大的数据集使用 Vaex,知道一个操作可能需要多长时间非常方便。而且看起来很好看,让时间过得更快:)。

Vaex 是一个相当强大的数据框架库,尤其是对于大型数据集。它有各种有用的数据操作和可视化方法。这些就是我喜欢使用这个库的 7 大原因。你的呢?

程序员精疲力竭的 7 个原因

原文:https://towardsdatascience.com/7-reasons-why-programmers-burn-out-44a40bf8948d?source=collection_archive---------1-----------------------

和 7 种解决方法

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

倦怠在程序员中极其普遍。杰奎琳·戴在 Unsplash 拍摄的照片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 W 当 Jerry 作为初级开发人员开始工作时,他们每天早上都迫不及待地开始工作。每天晚上,即使他们工作了 10 个小时,他们仍然感到精力充沛。现在,两年后,杰里看起来像他们曾经的影子。现在起床很难,工作更难。一天下来,他们感到筋疲力尽。他们已经开始害怕明天回去,浪费生命中的另一天。

听起来很熟悉?就我个人而言,我还没有见过一个程序员没有经历过至少一次倦怠。

这听起来很矛盾:同一个人在十几岁或二十几岁时爱上了代码,在过去三年里参加了至少五次黑客马拉松,并在周末为开源项目做出贡献——这个人怎么可能抱怨倦怠呢?

是的,他们可以。

原因一:工作单调

编程就是整天坐在屏幕前,除了午休时间和偶尔的几次会议。当然,许多其他工作也是如此。但是坐在非常不健康的位置上盯着屏幕的强度在编程中是最高的。

即使你发现你的工作在精神上很刺激,这种单调也会很快导致身体的迟钝。这意味着你不能很快完成工作,所以你开始变得没有动力,所以你工作得更少,…

走出这种恶性循环意味着采取健康的生活方式。理论上听起来很容易。但是预期寿命的下降显示了这有多难。

[## 健身如何让我成为一名更好的网络开发人员

运行以获得更好的运行时间

medium.com](https://medium.com/better-programming/how-fitness-transformed-me-into-a-better-web-developer-ac51a2b08cb4)

原因 2:赶时间

如果你曾经使用过 Scrum 和类似的方法,或者如果你有一个雄心勃勃的经理,你知道我在说什么。

[## Scrum 方法论的简短介绍

或者我如何学会拥抱变化

medium.com](https://medium.com/chingu/a-short-introduction-to-the-scrum-methodology-7a23431b9f17)

你在追逐一个又一个截止日期。你可能会错过一些截止日期。人们期望你在昨天之前把所有东西都送出去,没人在乎人类没有能力做到这一点。

结果,当你思考你的工作时,你感觉不到快乐或成就感。你感到压力。

这吸干了你对编码的所有热情。你被期望成为一个机器人,总是产生一流的输出,并提前交付。但你是人,所以你会有倦怠的症状。

原因 3:糟糕的同事

考虑以下情况:你的项目让你兴奋,你觉得你正在取得进展。然而,每天你都害怕去工作。这个简单的想法会让你焦虑和不开心。怎么了?

当然,你在工作中的快乐会受到你的工作的影响。但更重要的是,你的快乐会受到你的人际关系的影响——无论是工作中还是工作之外。

所以,如果你对你正在做的事情感到满意,但你仍然害怕,那可能是你的同事。不管是他们不认同你的价值观,还是企业文化让他们做出愚蠢的行为,你都不应该受到如此恶劣的对待。

如果你正经历由讨厌的同事引起的倦怠症状,要知道这不是你的错。您可能想尝试本文后面列出的一些修复方法。或者你可能想更激进一点,换个部门,或者在完全不同的公司找份工作。

这取决于你。只要知道你值得更好的

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

如果你的同事不认同你的价值观,你的工作会很糟糕。照片由阿里·叶海亚Unsplash

原因四:不认可

这部分和你的工作关系有关,但是在另一个层面上。你的项目可能精彩刺激,你的同事可能牛逼。

但是每当你觉得你已经完成了一些事情,你的经理就会带着一个完全不同的任务出现。每当他们这样做的时候,旧的任务就变得完全无关紧要了。

听起来很熟悉?我知道这对我很重要。

你可以对你的领域感到兴奋或充满激情。如果你的工作不断被否定,你会失去动力。

你会开始害怕去那里,因为你知道你不会创造任何有用的东西。当一天结束的时候,你会很开心——因为结束了——但是不开心,因为今天不是星期五,你明天还得去上班。在某些时候,你会开始认为,即使是你通过完成任务而获得的技能也是无关紧要的。

随着时间的推移,这可能会导致更严重的症状。这都是因为你的经理不知道你应该做什么。

原因 5:获得报酬

工资太少——或者太多!—会加重你的倦怠症状。

工资太低是导致精疲力竭的一个显而易见的原因。(是的,爆料程序员存在!如果你对编码的热情不足以维持生计,你可能会觉得自己的工作没有价值。这又让我们回到了原因 4。

但是当你得到太多的报酬时,倦怠也会恶化。虽然大额支票在理论上听起来很棒,但在现实生活中可能会导致灾难。让我用我的亲身经历来说明这一点。

作为一名本科生,我非常喜欢编程。我日日夜夜在研究实验室为科学目的编写软件,有时甚至因此而忽略了我的课程。我太喜欢它了,所以我从来没有期望得到任何补偿。多年来我免费工作。即使这意味着我在超市买不起西红柿。

当我进入研究生院时,这种情况彻底改变了。突然我得到了报酬。突然我所有的账单都被支付了。突然间,我可以买西红柿而不用考虑一分钱。我在谋生。代码!

然后一个愚蠢的想法进入了我的脑海:如果我被支付代码,那么每个月我应该交付一段代码,至少值那么多钱。

突然之间,原本狂热的激情变成了压力的来源。交付压力。执行的压力。返还我收到的金钱价值的压力。

但是你给自己的压力越大,你的表现就越差。尤其是当你想到钱的时候。

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

沉溺于你的任务会导致灾难。照片由 nikko macaspacUnsplash 上拍摄

原因 6:无意义的任务

原因 3 到 5 解决你可能遇到的问题,尽管有一个伟大的项目。但有时你的项目真的很烂。

也许你的项目只是一堆公司的废话,对程序员来说没什么实质内容。你想要的只是编码,而不是负责所有的管理职责、客户关系等等。

[## 每个数据科学家都需要向商业领袖学习什么

因为软技能很重要。

towardsdatascience.com](/what-every-data-scientist-needs-to-learn-from-business-leaders-47dcf3204076)

也许你看不到你的项目的意义,因为你不能从中学到任何新的东西。程序员属于这个星球上最好奇的生物——如果你不能从中学习,你就不喜欢它。

也许这个项目超出了你的能力范围。你觉得你无法掌握它,你的经理完全高估了你的技能。

或者也许你在过去的几个月里一直在做一个项目,但你仍然不知道你应该做什么。这项任务是个谜,似乎没有人能向你解释清楚。这通常源于管理不善。不幸的是,这种情况发生的次数比你想象的要多。

无论如何,从公司的角度来看,你的项目是你工作的主要原因。所以如果它很糟糕,难怪你会感到精疲力尽。

理由 7:行走死亡之旅

这一条与原因 6 密切相关。简而言之,死亡行军就是当你在做一个注定要失败的项目时。

这可能有很多原因:期限太紧,你没有足够的资源,或者你的团队太小,无法执行。尤其是当你在一个大项目上工作了好几个月,而且风险很高的时候,这会给你带来巨大的压力。

你对此的反应有两种:要么你陷入完全的冷漠,迟到早退,因为你知道你的工作不会改变任何事情。或者你开始每天工作 14 个小时,相信这样你就能扭转乾坤。

你的冷漠是由消极情绪引起的,并导致更多的消极情绪。你基本上是在移除让你的火继续燃烧的燃料。

或者,如果你是那种埋头于工作的人,那么你投入的所有时间都在扼杀你的激情。

这两者都是自然反应。和以前一样,只要知道如果项目进展不顺利,这不是你的错。你是一名优秀的程序员,你可能已经在其他项目中证明了这一点。如果出了问题,那是因为环境,而不是因为你!

[## 一个程序员倦怠的故事;如何识别并避免它| CoderHood

我将告诉你一个名叫博尔博的软件工程师的故事,他在职业生涯的某个时刻陷入了死亡行军。

www.coderhood.com](https://www.coderhood.com/a-programmer-burnout-story-how-to-recognize-it-and-avoid-it/)

程序员不是机器人

精疲力尽的棘手之处在于,始于工作的问题会蔓延到生活的方方面面。你开始忽视你的家庭、你的朋友、你的爱好和你的自我照顾。突然间,你陷入的不是工作危机,而是生活危机。

理解这一点至关重要——我怎么强调都不为过——这不是你的错。当然,认识到自己的错误对个人成长至关重要。但是为你没有犯过的错误责备自己会毁了你。

很多时候,程序员职业倦怠问题的根源在于公司文化内部或者某种形式的管理不善。

这并不意味着你需要马上换部门或者辞职。虽然这对于真正困难的情况可能是一个很好的解决方案,但是使用一些更软的修复已经可以提供巨大的帮助。

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

同情心是关键。裘德·贝克在 Unsplash 上的照片

修复 1:对自己有同情心

我知道这听起来很无聊。但是听我说完。

精疲力尽不是你的错。这不是软弱的表现。你经历的痛苦不是因为你是个白痴。这是真的。它是有效的。

我如此强调这一点,是因为我是这个谬论的罪魁祸首。当我应该对自己好一点的时候,我倾向于责备自己没有引起的问题,责备自己。

对自己有同情心是我仍在学习的东西。但我发现的一件事是这很有帮助:

做自己最好的朋友。

这并不意味着你不应该和你最好的朋友保持经常联系。但是试着把自己当成最好的朋友。

当你为自己明显的无知、无能或其他原因而自责时,想想这个:如果你最好的朋友处在你的处境,你会对他们说什么?你会怎么和他们说话?

我发现,自怜是获得更多自爱的不可思议的方法。这导致——你猜对了——更多的快乐和生产力。

[## 幸福的秘密是同情

要有同情心,要快乐

medium.com](https://medium.com/publishous/the-secret-to-happiness-is-compassion-e50b37b2a190)

修复 2:想想曾经让你兴奋的事

我曾经对编程非常感兴趣,但当我进入研究生院时,我失去了激情。对我来说,原因是我得到了报酬(原因 5);但对你来说,它可能是上述任何一个原因。

有帮助的是诺贝尔奖获得者物理学家理查德·费曼的回忆录,当他收到非常著名的高等研究院的工作邀请时,他正经历一段精疲力竭的时期:

高等研究院!特殊例外!一个甚至比爱因斯坦更好的位置!这是理想的;这是完美的;这太荒谬了!

这太荒谬了。在某种程度上,其他的提议让我感觉更糟。他们希望我能有所成就。但是这个提议太荒谬了,对我来说是不可能实现的,太荒谬了。【……】我一边刮胡子一边笑,想着这件事。

然后我对自己说,“你知道,他们对你的看法是如此的不可思议,这是不可能实现的。你没有责任辜负它!”

这是一个绝妙的想法:你没有责任达到别人认为你应该达到的目标。我没有责任像他们期望的那样。这是他们的错,不是我的错。

高级研究学院期望我有那么好,这并不是我的失败;这是不可能的。这显然是一个错误,当我意识到他们可能是错的时候,我意识到其他地方也是如此,包括我自己的大学。我就是我,如果他们期望我表现好,并为此给我一些钱,那是他们的不幸。

——摘自《费曼先生,你肯定是在开玩笑吧?》,作者理查德·费曼,版权 1985 年,第。100.

费曼并没有完全编码。尽管如此,还是这篇文章让我在博士之初走出了我的兔子洞。由此我得出结论,如果我的博士学校给我的报酬过高,那是他们的错。我会像费曼先生一样不负责任,随心所欲。我做到了。

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

先做小任务,然后达到更高的目标。由布拉德·巴莫尔Unsplash 上拍摄

修复 3:合并日常任务

当你知道你什么也做不了的时候,不得不去工作是令人畏惧的。根据定义。

不管这个项目是太难了,还是管理不当,或者完全没有意义——你都不得不放弃让你快乐的多巴胺激增。

有一件事可以帮助你重新设定动机,那就是合并日常任务。我喜欢从简单的、几乎是琐碎的事情开始我的一天。这个任务应该是有用的,但主要目的是从我的待办事项列表中去掉一个勾。

这欺骗了我的猴脑,让它想要完成下一个任务——因为这样我就会获得另一个成功的时刻。然后我慢慢地从最容易的部分到最难的部分。

这听起来像是对困难事情的拖延。但是很管用!我经常惊讶于自己通过先做简单的事情实际上完成了多少。

修复 4:反射

每天留出一些时间来练习反思。每个人都有自己的技术,你可以自由发展自己的技术。我使用每天晚上填充的反射矩阵:

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

我把主动事件和被动事件分开。活动事件是我所做的事情的直接后果。被动事件是在我什么都不做的情况下发生的事情。这让我意识到并非一切都在我的掌控之中。

在“我喜欢”类别中,我写下了那天我感激的事情。这建立了我的成就感和心理弹性。这样我就能积极主动地对抗消极情绪。

“我希望”类别包含了本可以做得更好的事情。这是我吸取教训和寻找解决方案的地方——例如,我可能会以不同的方式设定我的里程碑,或者寻找新的方法来应对我的受伤。

[## 极简主义日志:一个有趣而有效的改变习惯的工具

如何创建你自己的习惯仪表板,激励你坚持任何习惯

medium.com](https://medium.com/better-humans/draft-how-to-hack-your-brain-to-achieve-consistency-that-lasts-7f5fdc520d28)

你可以通过写日记,或者和朋友聊天,或者给自己发电子邮件来反思。我建议你不要只在头脑中做这件事——因为你会忘记这件事,而且很难养成习惯。此外,信不信由你,待会查看积压的工作会很有趣。

你可以在任何你想去的地方这样做——在你的办公室,在家里或者在公园。但是试着每天在同一个地方做——这将帮助你养成习惯。此外,试着在每天的同一时间做这件事,最好在你的日历上把这段时间划掉。

通过反思,你在回顾过去的成功。你意识到你经常无法控制事情。这在应对倦怠症状方面对我帮助很大。

第五招:培养一个爱好

你是个程序员。你是个怪人。我明白了。

当你不在工作的时候,你不是在睡觉就是在编码取乐。这太神奇了。

但是当你面临严重的倦怠时,你可能根本不想碰电脑。现在你的生活面临着巨大的空虚。

积极主动地做这件事,同时做一些活动——最好是不涉及电脑的活动。它可以是一项运动,或者音乐,或者烹饪,或者室内设计。找到你感兴趣的事情——并且定期去做。

对我有帮助的一件事是有一个实用的爱好。比如一周至少一次,我喜欢做好吃的。对我来说保持这种状态很容易,因为我无论如何都需要吃东西。此外,这样我可以确保我得到一些健康的东西,这对我的工作有积极的影响。

无论你选择做什么,任何爱好或业余项目都会给你一种成就感,而这正是你在工作中所缺乏的。爱好有助于稳定你的情绪,这样工作危机就不会变成生活危机。

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

培养一个能激励你的爱好。自由股票Unsplash 上的照片

修正 6:设定不可协商的界限

这是给那些在筋疲力尽时过度补偿的人的。听起来很矛盾,获得空闲时间也需要一些纪律。

例如,我有一个晚上 9 点以后不做任何有成效的事情的界限——编码或媒体或其他。我在过去五年里一直有这个界限,但我只越过了两次。

它不仅能帮助我放松、反思和睡个好觉。这也让我在白天有所期待。不管生活压力有多大,我知道我总能在晚上 9 点和上床睡觉之前把自己的思绪关掉。

[## 为什么你的大脑需要空闲时间

一些重要的大脑功能需要停机

elemental.medium.com](https://elemental.medium.com/why-your-brain-needs-idle-time-e5d90b0ef1df)

重要的是,这些界限是不灵活的。把它们从你的日历上划掉,并清楚地与你的老板和同事交流,这将有助于你保持它们。

你可能害怕自己看起来很懒。有趣的是,事实并非如此。一个界限清晰的人给人的印象是他们能掌控自己的生活。

第七招:为自己辩护

这直接链接到上面。清楚地传达你需要什么——你的界限,以及实现项目目标所需的任何额外资源、人力和资金。

你需要的应该是合理的——否则,你的经理可能会认为你要求太高。但是,表现出要求比羞于表达自己的需求要好。其他人不可能从你的鼻尖上看出来。

一旦你开始养成表达自己需求的习惯,你会惊讶于人们会为你做这么多事情。

最后一句话:你并不孤单

正如我前面提到的,我还没有遇到过一个程序员在他们职业生涯的某个阶段没有经历过主要的倦怠期。因此,如果这篇文章教会了你一件事,那就是你不是一个孤立的案例。

小心对待你自己和其他人,要知道无论此刻是什么让你情绪低落,这都不是你的错

在数据科学之旅中,你应该写博客的 7 个理由

原文:https://towardsdatascience.com/7-reasons-you-should-blog-during-your-data-science-journey-4f542b05dab1?source=collection_archive---------45-----------------------

和建议让你开始

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

艾玛·马修斯数字内容制作在 Unsplash 拍摄的照片

书面交流是必要的。考虑到在我写这篇文章的时候(Covid time)没有太多的面对面交流,这一点尤其正确。如果你仍然试图进入数据科学领域,你可以通过写博客来提高这一技能。

在这里,我将与您分享博客的好处,以帮助您的数据科学之旅。之后,我会给你提供写博客的建议和其他一些呼应这一信息的文章。

1.提高你解释概念的能力

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

照片由 Gradikaa AggiUnsplash 上拍摄

正如我的一位教授告诉我的:

“学习东西的最好方法是教它”。

在我看来,判断你是否理解一个概念的真正测试是你向别人解释它的难易程度。博客提供了练习解释概念的方法。如果你纠结于这个解释,那也没关系。这同时给你提供了一个机会来强化你对这个概念的理解。

也请记住,你将不得不在你未来的职业生涯中与各种各样的观众交流你的工作。这将包括你的同事,以及几乎没有技术或数学知识的股东(如果有的话)。博客可以作为一个安全的平台来练习与这些受众交流。

2.增加你的社区曝光率

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

照片由凯尔·格伦Unsplash 上拍摄

如果你的工作留在本地机器上,世界上没有人会知道你的工作。如果你想让人们知道你在做什么,你需要走出去,那就是万维网。如果你还没有写博客,不要担心你的第一篇是否完美。主要的想法是开始,其他的事情随后就会发生。

3.打开机会

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

马修·T·雷德在 Unsplash 上的照片

人们会注意到你的帖子。这可能不会马上发生,但他们会的。通过我的一些旧博客帖子,我得到了一家出版公司的关注,该公司出版关于数据科学和其他技术领域的书籍和课程。找到我的那家公司的人认为我写得足够好,他想雇用我为 Tensorflow 制作一个在线课程。但是,如果你只是把所有的工作都放在本地机器上,这种机会的几率将永远为零。

4.帮助他人,即使是多年以后

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

安妮·斯普拉特在 Unsplash 上的照片

你会惊讶于一篇文章的影响力有多大。我写的第一批博客文章之一是关于网络搜集的。这引起了印度一位微生物学家的注意,他试图在自己选择的地点复制我的例子。在我用他的例子帮助他之后,他让我写下一篇关于他的例子的博客文章。所以我得到了帮助别人的好处,同时也获得了另一种可以写的经历。

我大约一年前写的一些博客帖子今天仍然对人们有帮助。我仍然会收到关于我的帖子如何为某人澄清了一个概念或者为他们提供了有趣的想法的消息。当我写这篇文章的时候,我刚刚在 LinkedIn 上收到一条消息,说有人觉得我写的这篇前一篇很有趣!

5.间接为自己建立参考

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

照片由凯拉·杜洪Unsplash 上拍摄

经验累积分布函数是我在探索性数据分析中经常使用的图表。但是如果很长一段时间我不使用它,我会忘记创建它的确切代码。在我关于重构数据科学代码的帖子中,我使用了我为 ECDF 创建的函数,我可以在将来随时引用它。每当我需要使用 ECDF 很长一段时间后,我总是回到那个职位,以获得代码。

你也可以对你的文章做同样的事情。它可以是任何东西,从一个简单的函数到你发布的整个机器学习管道的代码。你的观众的参考也是你的参考。

6.反思过去的经历

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

照片由兰迪·雅各布Unsplash 拍摄

冒名顶替综合症是一种信念,认为自己不够好,即使你的技能与此相反。回头看看你的帖子会提醒你你有什么能力。它们将提醒您在数据科学之旅中所做的所有艰苦工作。它会提醒你,即使有些人不这么看,你也足够优秀。

7.为你未来的职业生涯提高你的写作技巧

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

尼克·莫里森在 Unsplash 上拍摄的照片

我在这个领域工作的时间不长,但是我写了相当多的数据科学方面的文章。如果你想让不同技术背景的人理解你的工作,书面交流是一项技能。写博客将帮助你掌握这种技巧,因为你不得不考虑你的用词和写作,因为你要把听众记在心里。也许我在我的位置上写作的目的应该是下一篇博文?你怎么想呢?

博客建议让你开始

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

照片由莫妮卡·梅尔顿Unsplash 上拍摄

既然我们已经讨论了好处,让我们快速讨论一下如何开始。以下是帮助你与世界分享你的第一篇文章的建议列表。

  1. **找个平台:**找个让你舒服的地方。我坚持使用 Medium,因为它是免费的,写作工具对我来说足够了,我阅读了他们的大量帖子,考虑到我有一个家庭,我只有这么多时间。如果你想要另一个项目,你可以建立自己的博客网站。你不能马上写博客,但这将是你可以与未来雇主分享的又一个项目。
  2. **选择任何你觉得可以解释的小概念/话题:**你不必在第一篇博文中解释整个机器学习工作流程及其背后的数学原理。可以像概率分布、图表类型、您最喜欢的库或如何编写 Python 类一样简单。同样,我的第一篇文章是一个简单的网页抓取的例子。那里没有什么新奇的东西,但它打开了通向更多的大门。
  3. 选择一个你喜欢谈论的话题:这是上述话题的另一种选择。如果你喜欢谈论一些冗长的东西,比如机器学习算法背后的数学或你热衷的项目,那就写下来!这里的主要目标是开始。
  4. **不要担心你的帖子是否完美:**写作是一种技能。和其他事情一样,它也需要练习。我个人认为我还需要继续努力。但如果你不开始,你甚至不会变得更好。
  5. 每月至少写一次博客:对我来说,这是一个合理的目标,我希望我能更快地实现它,这样我就有更多的一致性。你需要保持一些博客的一致性,以建立对世界的自我暴露。如果你能并且想写得更频繁,那么一个月一次也可以!
  6. **在发表你的文章之前,大声朗读出来:**这是我学会的帮助我检查我的帖子和我写的任何文章的方法。由此,你可以抓住机会优化文章并解决语法错误。

其他数据科学博客参考

我不是第一个写博客如何帮助你进入数据科学及其好处的人。第一个给我建议的数据科学家也推荐了博客。如果你仍然不相信,看看接下来的几个帖子。第一篇文章是大卫·罗宾逊写的,他主动分享了我的前几篇文章,帮助我获得了曝光率。

[## 给有抱负的数据科学家的建议:开一个博客

上周我在 Twitter 上分享了一个想法:当你已经写了三次相同的代码时,写一个函数,当你已经给了…

varianceexplained.org](http://varianceexplained.org/r/start-blog/)

这篇文章描述了作者每周写一次博客的好处。

[## 我从一年来每周写一篇数据科学文章中学到了什么

关于写作和数据科学改变生活的力量的课程

towardsdatascience.com](/what-i-learned-from-writing-a-data-science-article-every-week-for-a-year-201c0357e0ce)

感谢阅读!你可以在 LinkedinTwitter 上关注或联系我。对 Twitter 上的 DM 开放。

那么你还在等什么?开始写博客吧!记住…

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

照片由艾玛·马修斯在 Unsplash 上进行数字内容制作

直到下一次,

约翰·德杰苏斯

防弹、可复制机器学习的 7 条规则 R&D

原文:https://towardsdatascience.com/7-rules-for-bulletproof-reproducible-machine-learning-r-d-45ceb71e3322?source=collection_archive---------26-----------------------

我精心挑选的明星级研发最佳实践。确保不要错过第三条!

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

照片由 Unsplash 上的米娜 FC 拍摄

所以,如果你是一个精通键盘的开发人员,这个类比很有可能超出了你的舒适区…请原谅我。

想象一下,两个奥运会级别的花样滑冰运动员日复一日地在冰上一起工作,发展和完善赢得奖牌的表演。每个人都有他或她的角色,他们同步工作以合并他们的行动并微调结果。每一个微小的变化都会影响到对方的动作——有望改善他们的舞蹈,但往往会毁了它。随着时间的推移,他们建立了一个持续的沟通渠道,以确保每个人都知道对方在做什么,从而获得一致的、不断改进的结果。

机器学习代表了一种奇怪的相似动态,其中你的模型和代码加入训练数据,协同工作,产生预期的结果。优化之路——就像溜冰者的路——由小的调整驱动,这些调整需要系统地反复尝试(反复尝试),小心翼翼地。但是每一次变化、每一次调整和每一个新的攻击角度也为错误、混乱和不一致的推论打开了大门。简而言之,缺乏有纪律的结构和计划导致可重复性的不足,很快限制了 ML 的发展。

即使上面的比喻对你来说太老套,在任何业务用例中处理 ML 都应该让你点头。下面是我避免这些陷阱和优化再现性的 7 条指导方针:

0.你的代码不是“自我记录的”

除非您使用非常高级的解决方案,否则产生 ML 模型需要编写代码。专业代码库的基础是适当的结构和可靠的文档。

尽管如此,任何浏览过 GitHub 上开源作品的人都可以证明,我们总是不能很好地做到这一点。我的“第零准则”不是简单地遵守 PEP8 (请遵守!)或者适当的函数命名(你介意吗?).

我们必须认识到,由于我们开发的流程依赖于大量的配置,因此应该强制执行它们的文档和适当的内务管理。

然而,在由于“过早工程化”造成的生产力损失和进一步研究代码的可用性之间的平衡是有价值的。

1.保持跟踪并继续下去

任何成功的数据科学团队的第一条家规是有效的版本控制

机器学习比其他开发学科更依赖于版本控制,因为我们在过程的两个组成部分中利用它:代码和数据。ML 开发的流动性要求数据科学家频繁地修改和优化模型,以及用来训练这些模型的底层数据。

数据科学家和软件本身都必须从每次迭代中学习,然后调整模型以适应预期的数据集。因此,每个迭代都必须被记录和存储,最好使用自动机制来减少手工日志记录的开销。

ML 开发的这个关键方面并不止于此;当作为一个团队工作时,开发人员共享他们的模型和数据以节省时间,互相学习,并避免重复的、多余的工作。

没有有效的、持续的版本控制,可复制性的动态过程往好里说是复杂的,往坏里说是不可能的。

2.苹果对苹果

再现性是 ML 模型开发的核心因素,取决于可比性。如果不能比较模型 A 和模型 B 的培训结果,就无法知道哪些变化导致了结果的改善或下降

根据定义,研究迭代需要在两轮之间进行变更。然而,在实验时,模型之间的架构和逻辑差异是有实际限制的。如果模型的结构不相似,由相同的核心逻辑驱动,但只有细微的差异,就没有办法知道在实验中需要关注什么因素来改进。

您的管道设计应该公开您的更改,并且实际上便于将它们与性能更改联系起来。

3.没有“U”和“I ”,就不能拼出 Production

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

cloudvisual.co.uk 在 Unsplash拍照

前一个准则还扩展到 R&D 和生产之间的接口。如果培训和服务(生产)环境不匹配,即使是最精心设计和仔细审查的模型也可能失败或返回意想不到的结果。

尽管如此,模型还是有严格的性能要求,以及与其余业务逻辑集成的必要性。这些通常会导致最终的实现与研究代码完全不同

当这种情况发生时,模型的创建者很难找到故障,甚至是常见的基本问题。除非有足够的理由这样做,否则生产环境应该完美地模仿孕育模型的环境。

但是不幸的是,由于这种情况很少发生,**数据科学团队应该在移交过程中尽可能地与 DevOps 合作。**在项目生命周期的早期开始这种协作。

4.针对数据源中的不一致性制定计划

研究和开发是在真实世界数据的子集上完成的。您的用例越依赖时态数据,您就越需要处理模型不匹配的常见问题。

尽管如此,还是要注意**【管道债务】**的存在:用于提取和格式化数据的机制会随着时间而改变。在这个过程中,即使是一个很小的特性依赖,也足以改变数据,从而改变结果,打破逻辑…由此,您可以根据模型的成功或失败做出推论。

因此,再现性真的始于源头。一个经验丰富的 ML 数据科学家从来不会想当然地认为他或她的数据是“纯净的”和一致的,并检查(经常!)在数据的获取和格式化中没有关键的依赖性发生变化。

虽然模型性能的突然失败是一个幸运的指标,但通常数据的变化只会引发结果中令人困惑、分散注意力且可避免的异常,必须进行调查。

在代码中清楚地指出所有的依赖关系有助于防止这种情况;还建议进行管道测试。

5.测试不仅仅是“度量”

虽然我们的第零指导方针提到了软件开发的最佳实践,但是我们只是讨论了子组件的测试,而不是曲线下面积的意义。这是软件 R&D 的另一个基本方面,在 ML 中通常会避开,但实际上不应该。

**粗略地解释,在 ML 开发的每一个阶段,**你必须能够确保你对代码库或数据的更改没有引发需要进一步解决的问题。

重要的是要记住,这种测试心态适用于你工作的两个方面。首先是对单个独立组件(单元)的持续审查,以确保对特定构建模块的更改不会产生意外结果。用于预处理的代码就是一个很好的例子,因为这个问题会产生瀑布效应。

同样重要的是,(贵!)在真实世界模拟中测试整个代码库——模型及其数据和配置——有助于防止各种因素的组合产生次优结果

6.追踪,再追踪

模型的再训练和改进很大程度上依赖于结果的跟踪、记录和比较。手动日志记录的缺陷有很多——它会导致人为错误、结果的本地化存储(因此不可访问)、数据格式或帧的变化,以及最糟糕的是,完全或根本无法做到这一点。

使用自动化管道在后台提供持续的结果收集,无需研究人员或开发人员的努力。

为了保持一致性,这些元数据是标准化的,并且经常可以使用图形图表工具自动进行比较,以快速明确一组结果与另一组结果的不同之处。

最后,这些结果是集中的,因此,连同它们的标准化格式,它们可以被团队中的其他人利用。

7.使用一个平台来真正地将它们联系在一起

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

马文·迈耶Unsplash 上拍摄的照片

因此,我们已经讨论了版本控制和跟踪的许多重要方面(除了测试之外)。遵循以前的指导方针所需的基础设施组件现在已经可以作为开源解决方案获得。

然而,将单个组件组装到一个平台上进行合作研究并不是一件容易的事情,还取决于你的团队的职业道德。

根据经验,选择一个现成的实验平台来自动完成遵守这些准则所需的大部分工作是一个不错的选择:你面临着难以置信的挑战,推动你的创造力和技术技能来构建一些独特、强大、值得他们支付给你的钱的东西。

当您可以部署一个包含最佳实践和简化流程的解决方案时,就没有理由失去重点、牺牲质量和重新发明轮子。

关闭

这些是我的 7 条(实际上是 8 条)机器学习研发的黄金准则。最后一条实际上是结论:使用一个为你保留准则的平台。

当然,在实际部署模型时,需要考虑更多的方面,尤其是监控和日志记录。

每个项目和每个开发人员都是独一无二的,所以我很想听听你的经验,什么是最重要的…留下评论吧!

原载于 2020 年 10 月 5 日https://allegro . ai

数据科学项目开始时应该包括的 7 个设置

原文:https://towardsdatascience.com/7-setups-you-should-include-at-the-beginning-of-a-data-science-project-8232ab10a1ec?source=collection_archive---------16-----------------------

为了在不同的运行中保持输出稳定并加快开发速度

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

Emile Perron 在 Unsplash 上的照片

在从事数据科学项目时,通常在开始时会有一个设置配置,以确保所需的依赖关系,保持输出稳定,并准备常用功能。

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

项目设置示例,来自 Handson-ML2

在本文中,您将了解 Juypter 笔记本中一些最有用的项目设置

  1. 确保 Python 版本
  2. 确保包版本
  3. 避免绘制模糊的图像
  4. 在不同的运行中保持输出稳定
  5. 启用多个单元格输出
  6. 本地保存绘图的功能
  7. 下载数据的功能(如果需要,还可以解压)

源代码请查看我的 Github repo

1.确保 Python 版本

在 Jupyter 笔记本中检查 Python 解释器版本

**import sys
sys.version**'3.7.6 (default, Jan  8 2020, 13:42:34) \n[Clang 4.0.1 (tags/RELEASE_401/final)]'

为了确保您的项目以 Python 解释器的最低版本要求运行,您可以将以下内容添加到项目设置中。

# Python ≥3.7 is required
**import sys
assert sys.version_info >= (3, 7)**

要求 Python ≥ 3.7。如果不是,它将引发一个assertion error

2.确保包版本

要检查已安装的软件包版本,例如 TensorFlow

**import tensorflow as tf
tf.__version__**'2.0.0'

以确保您的项目使用最低 TensorFlow 2.0 运行。如果不是,它将引发一个assertion error

# TensorFlow ≥2.0 is required
**import tensorflow as tf
assert tf.__version__ >= "2.0"**

3.避免绘制模糊的图像

Juypter Notebook 中的默认绘图可能看起来很模糊。

例如,一个简单的热图来查看哪里缺少值(请查看源代码和来自的数据集准备,使用 Pandas pipe 函数来提高代码可读性以获得详细信息)。

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline# Default figure format png
sns.heatmap(df.isnull(), 
            yticklabels=False, 
            cbar=False, 
            cmap='viridis')

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

默认图看起来模糊

在上图中,文字看起来真的很模糊, 列中的缺失值看起来太忙, 上船 列中的缺失值完全无法辨认。

要解决这个问题,请使用

  • %config InlineBackend.figure_format = 'retina'
  • 或者%config InlineBackend.figure_format = 'svg'

%matplotlib inline之后

%matplotlib inline
**%config InlineBackend.figure_format = '****retina****'**         # or 'svg'sns.heatmap(df.isnull(), 
            yticklabels=False, 
            cbar=False, 
            cmap='viridis')

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

图形格式设置为 retina 或 svg

与前一个相比,现在清楚多了,可以看到 已装载 列中缺少的值。

4.在运行过程中保持输出稳定

在数据科学项目中,随机数被用在许多地方。例如

  • train_test_split()Scikit-Learn
  • np.random.rand()初始化权重

如果随机种子未重置,则每次调用都会出现不同的数字:

>>> np.random.rand(4)
array([0.83209492, 0.10917076, 0.15798519, 0.99356723])
>>> np.random.rand(4)
array([0.46183001, 0.7523687 , 0.96599624, 0.32349079])

np.random.seed(0)使随机数可预测:

>>> np.random.seed(0)
>>> np.random.rand(4)
**array([0.5488135 , 0.71518937, 0.60276338, 0.54488318])**
>>> np.random.seed(0)
>>> np.random.rand(4)
**array([0.5488135 , 0.71518937, 0.60276338, 0.54488318])**

随着种子复位(每次),每次都会出现相同的组数字。所以项目应该在不同的运行中保持输出稳定。

5.多单元输出

默认情况下,Jupyter 笔记本不能从同一个单元格输出多个结果。要输出多个结果,可以用 IPython 重新配置 shell。

from IPython.core.interactiveshell import InteractiveShell
**InteractiveShell.ast_node_interactivity = "all"**

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

6.将绘图保存到文件

Matplotlib 的一个很好的特性是能够使用savefig()方法保存数字。但是,如果给定的路径不存在,它将引发一个错误。

plt.savefig('./figures/my_plot.png')**FileNotFoundError: [Errno 2] No such file or directory: './figures/my_plot.png'**

最佳实践是将所有图形放在一个地方,例如我们工作区中的figures文件夹。我们可以使用操作系统 GUI 或者运行 Juypter Notebook 中的 magic 命令来手动创建一个figures文件夹,但是最好创建一个小函数来完成这个任务。如果需要一些自定义图形设置或需要附加子文件夹来对图形进行分组,这尤其有用。

这是将绘图保存到文件的功能。

import os
%matplotlib inline
import matplotlib.pyplot as plt# Where to save the figures
PROJECT_ROOT_DIR = "."
SUB_FOLDER = "sub_folder"    # a sub-folder
IMAGES_PATH = os.path.join(PROJECT_ROOT_DIR, "images", SUB_FOLDER)**def save_fig(name, images_path=IMAGES_PATH, tight_layout=True, extension="png", resolution=300):**
    if not os.path.isdir(images_path):
        os.makedirs(images_path)
    path = os.path.join(images_path, name + "." + extension)
    print("Saving figure:", name)
    if tight_layout:
        plt.tight_layout()
    plt.savefig(path, format=extension, dpi=resolution)

现在当您调用save_fig('figure_name')时,它会在您的工作区创建一个 images/sub_folder 目录,并在该目录下将图形保存为“ figure_name.png ”。此外,还提供了三种最常用的设置:

  • tight_layout自动调整支线剧情填充。
  • extension允许以多种格式保存数字。
  • resolution可用于设置图形的分辨率。

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

7.下载数据(如果需要,还可以解压)

对我们来说,使用互联网上的数据并不罕见。我们可以使用 web 浏览器下载它,并运行命令来解压或解压缩文件,但最好创建一个小函数来完成这项工作。如果数据定期更改,它尤其有用,因为它允许您编写一个小脚本,您可以在需要获取最新数据的任何时候运行该脚本(或者您可以设置一个计划作业,定期自动执行该任务)。如果需要在多台机器上安装数据集,那么自动获取数据的过程也很有用。

这是下载和解压数据的函数

import os
import tarfile
import zipfile
import urllib

# Where to save the data
PROJECT_ROOT_DIR = "."
SUB_FOLDER = "group_name"
LOCAL_PATH = os.path.join(PROJECT_ROOT_DIR, "datasets", SUB_FOLDER)**def download(file_url, local_path = LOCAL_PATH):**
    if not os.path.isdir(local_path):
        os.makedirs(local_path)

    # Download file
    print(">>> downloading")
    filename = os.path.basename(file_url)
    file_local_path = os.path.join(local_path, filename)
    urllib.request.urlretrieve(file_url, file_local_path)

    # untar/unzip file 
    if filename.endswith("tgz") or filename.endswith("tar.gz"):
        print(">>> unpacking file:", filename)
        tar = tarfile.open(file_local_path, "r:gz")
        tar.extractall(path = local_path)
        tar.close()
    elif filename.endswith("tar"):
        print(">>> unpacking file:", filename)
        tar = tarfile.open(file_local_path, "r:")
        tar.extractall(path = local_path)
        tar.close()
    elif filename.endwith("zip"):
        print(">>> unpacking file:", filename)
        zip_file = zipfile.ZipFile(file_local_path)
        zip_file.extractall(path = local_path)
        zip_file.close()
    print("Done")

现在当你调用download("http://a_valid_url/housing.tgz")时,它会在你的工作区中创建一个 datasets/group_name 目录,下载 housing.tgz ,并在这个目录中从中提取 housing.csv 。这个小函数也适用于 CSV 和文本文件。

好了

感谢阅读。

请在我的 Github 上查看笔记本的源代码。

如果你对机器学习的实用方面感兴趣,请继续关注。

你懂数据的 7 个标志

原文:https://towardsdatascience.com/7-signs-you-are-data-literate-4a844efcdd32?source=collection_archive---------50-----------------------

你有能力处理数据的迹象

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

布鲁斯·马斯在 Unsplash 上的照片

作为一名数据科学家,理解你的数据是必须的。没有先进的算法或奇特的机器学习模型可以取代一个人分析数据的能力。这意味着,要成为一名伟大的数据科学家,你应该精通数据。

为什么需要了解你的数据?通过分析,企业每天都在应对变化以及由此产生的不确定性。每天的变化和不确定性促使企业加快行动。一家成功的企业应该行动足够迅速,但不够鲁莽。在这里,数据科学家研究情况,进行并找到根本原因分析,评估替代方案,并实施解决方案。企业越快收集足够的数据进行调查,就能越快做出合理的决策。这就是为什么要成为伟大的数据科学家;我们需要理解数据。这也意味着你需要精通数据。

什么是数据素养?根据维基百科数据素养是指阅读、处理、分析和论证数据的能力,因此数据素养意味着你拥有数据素养知识或者至少在数据素养知识上采取行动。数据素养还包括从事与数据相关的工作的能力。当然,衡量读写能力的方法有很多。尽管如此,这里是我从人们身上看到的数据素养的标志。

“数据素养是指阅读、处理、分析和论证数据的能力”

1.你很好地表达了你的观点

你明白展示给你的是什么东西,你应该如何与他人沟通吗?。我看到的一个迹象是,懂数据的人能够很好地表达自己的观点。没有过于复杂的解释,仅仅是临界点。

阿尔伯特·爱因斯坦曾引用过,

如果不能简单的解释,说明你理解的不够好。——阿尔伯特·爱因斯坦

理解,我的意思是人们可以处理他们得到的信息;这并不意味着他们此刻需要了解一切,但至少,他们可以从信息中得到一个要点。当人们不理解的时候,往往会在解释中放太多的词作为掩护。只有当一个人足够理解的时候,他们才能把他们的经历变成一个简单的理由。如果你能很好地表达你的观点,这是一个很好的数据素养的标志。

2.你不容易被信息淹没

数据无处不在,你很容易被淹没在其中。就拿现在疫情的情况来说吧。我们有很多关于新冠肺炎的信息,从疾病信息,疫情带来的经济痛苦,到如何洗手。我认识的许多人被这个消息弄得不知所措,甚至不知道哪个是真的哪个是假的。

被淹没的信息可能会让你忽略许多重要的事情,并被其他事情分散注意力。在处理数据时,我们总是需要记住什么是业务问题,什么信息是必不可少的。在日常生活中能够很好地管理信息的人有能力成为伟大的数据科学家。

3.你根据数据采取行动

数据素养的重要性在于你可以理解数据并根据信息采取行动。虽然外面有这么多信息,你可以在头脑中很好地处理这些数据,然后根据这些数据采取行动

例如,你想从网上商店买一台电脑。你看,外面有很多选择,所以你首先要做的是“我需要什么样的笔记本电脑?”;你可以说这是为了游戏目的,然后从那里,你试图在互联网上找到哪一个是最好的游戏笔记本电脑,但在你的预算内。你如何定义最好?你可以试着通过许多好的评论来设置它,所以你打开许多技术网站来看别人的评论。你在收集评论,并根据数据决定最好的。

上面的过程就像定义问题(博弈)和范围(预算)->收集数据(回顾)->采取行动。你可能会认为这是一件很平常的事情,但是很多人甚至懒得收集数据。

最后,虽然基于数据产生合理的行动需要领域知识和业务洞察力,但是如果您在采取行动之前尝试了合并数据,那么您的方法是正确的。

4.你行动很快,但不要太快

企业发展迅速;这意味着业务决策需要更快地做出。让事情变得不确定的是何时行动。在数据较少的情况下过早行动无疑是鲁莽的,但等待大量数据可能为时已晚。决定何时采取行动是数据素养所需要的。这就是为什么需要快速响应变化是数据科学家的基本思维模式。

以约会为例;你可以说,如果你向一个刚认识几天的人求婚是鲁莽的,尽管等待太久才采取行动可能意味着某人可能会被另一个人带走。你可能想要收集足够多的关于对方的数据来决定你是否要更进一步。“足够”可以是任何东西;可能是你的价值观或者只是身体特征。如果我把它比喻成一个业务,你可能会说“足够”的部分是在你采取行动之前需要完成的业务数据的基本部分。

5.你对数据感兴趣

虽然有些人被这些数据弄得不知所措,但有些人却直接无视这些数据。他们不关心世界上发生的事情,甚至不去了解最新的信息。在隔离期间,我感到惊讶的是,我的朋友甚至不知道需要聚合酶链式反应测试拭子来确认新冠肺炎是否肯定感染了某人。虽然我不想评判人们的生活方式,但我只是感到惊讶。

有数据素养的人应该会对数据感兴趣。我的意思并不是说他们需要开始到处挖掘数据,但至少是想随时了解最新情况。

此外,我认识的一些数据专家总是对数据可视化艺术感兴趣。他们对数据感兴趣,并不断探索如何以最优雅的形式呈现数据。这是因为他们希望数据可以很好地交流,每个人都可以从数据中获得有价值的信息。

6.你和数据争论

当你在网上的评论中寻找论据时,你会发现很多都是毫无根据的评论或者纯粹是恶作剧。它与现实生活没有太大的不同;在我那里,许多人只会根据他们的感觉或他们此刻的想法来争论,而懂数据的人会根据数据而不是毫无根据的东西来争论。

在业务环境中,数据科学家是数据驱动型业务的驱动者。在数据驱动的业务中,许多元素需要被说服,以便你的业务是数据驱动的(是的,数据驱动的业务涉及许多需要被说服的人)。要做到这一点,数据科学家需要对数据有所了解,以便建立一个合理的论点。

与数据争论比我们想象的更难,因为它需要理解数据,并很好地沟通,这样信息才会被接受。与数据争论也需要很大的责任,因为我们需要澄清我们拥有的数据符合正确的标准。我本人喜欢在有机会的时候与数据争论,但如果我没有足够的证据,我宁愿保持沉默。

7.你质疑事物

在一个充满信息的世界里,每天你都会受到新数据的轰炸。虽然许多是正确的,但有些信息肯定是假的,或者只是无关紧要。懂数据的人会质疑他们得到的信息;“是真是假?”,“对我到底有没有用?”“我需要这些数据吗?”等。

有数据素养的人也是渴望信息的人,这就是为什么他们不断质疑事物以获取新事物。这可能是他们感兴趣的东西,或者只是搜索引擎建议的一个随机想法。

如果我们在商业环境中思考这个问题,你可能已经完成了你的分析并得出了答案,但是这个答案是真的吗?或者你已经建立了最精确的机器学习模型,但是这个模型真的可以在现实世界中实现吗?这是数据科学家工作时经常遇到的情况,也是作为数据科学家应该问的问题。尽管如此,你仍然需要找到那个折中点,因为这个问题可能是无穷无尽的。

结论

我已经提出了我个人对数据素养的看法,或者至少在这方面有天赋。他们善于沟通,不会被信息淹没,使用数据采取行动,与数据争论,采取行动足够快但不鲁莽,对数据感兴趣,并质疑事物。

如果你喜欢我的内容,并想获得更多关于数据或作为数据科学家的日常生活的深入知识,请考虑在这里订阅我的时事通讯。

如果您没有订阅为中等会员,请考虑通过我的推荐订阅。

每个商业领袖都需要从软件工程师那里学到的 7 课

原文:https://towardsdatascience.com/7-skills-that-every-business-leader-needs-to-learn-from-software-engineers-be26a2869e12?source=collection_archive---------30-----------------------

这不是关于成为一个极客。至少,不完全是

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

生活的教训可以来自软件工程师。制造者在 UnsplashNESA 的照片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 B 企业领导者总是在学习。因为总有进步的空间!

但是他们也需要提高他们的学习对象。

向投资者学习很棒。许多天使投资人在前世已经建立了自己成功的企业。所以他们给出的建议是无价的。

向他们的销售人员学习也是一个很好的选择。从他们那里,他们可以了解到消费者喜欢他们产品的哪些地方,还有哪些地方需要改进。

向管理团队学习至关重要。他们向领导者反馈他们的商业愿景转化为绩效的情况。此外,他们总能从经理的软技能中学到一两件事。

但是有一个团队经常被商业领袖忽略。这支队伍理应出类拔萃——但由于其书呆子气的装扮,他们独特的技能常常被忽视。

不要提高你所学的东西。提高你向谁学习

你猜对了。IT 团队。

从它所提供的许多角色中,我将在这个故事中把重点放在软件工程师上。

他们通常比开发人员更有经验。他们不断与他们的经理交流。这使他们成为学习的理想群体。

1.好奇心

一个好的工程师像新生的孩子一样好奇。鉴于技术总是在不断变化,这对于与他们的技能保持一致至关重要。

但工程师的好奇心与商业领袖的好奇心有着本质的不同。

一个领导者可能会对他们业务的新方向感到好奇,而一个工程师会对如何转向那个方向感到好奇。领导者对即将推出的新产品感到好奇,而工程师则对如何制造该产品感到好奇。

领导者对“什么”很好奇。一名工程师对“如何”感到好奇。

这正是一个领导者可以学到更多东西的地方。伟大的领导者与平庸的领导者的区别在于,他们不仅对“什么”好奇。他们也思考“如何”。

以埃隆·马斯克为例。他对“什么”非常好奇:向火星和更远的地方发射火箭。但他也对“如何”感到好奇。这让他将 SpaceX 的火箭材料从碳——这是今天的标准——改为不锈钢。

马斯克不可能独自想出那个解决方案。但他听取了工程师的意见,并从他们对新材料的好奇心中学习。

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

工程师的好奇心在于“如何”,而不在于“什么”。procylink 访客管理系统Unsplash 上拍摄的照片

2.耐心

大多数商业领袖都有远见。然后,他们制定了一个三年计划来实现这一愿景。然后……他们制定了这个三年计划,并在三个月内完成。

[## 创业公司如何将三年目标变成 90 天计划

过多的长远眼光会导致短期的失败

marker.medium.com](https://marker.medium.com/how-startups-turn-a-three-year-goal-into-a-90-day-plan-979c155b2b20)

不耐烦是他们的美德。为了把事情做大,领导们尽量把事情做快。

但这有个问题。显而易见,你应该在读下去之前就知道…

好事需要时间。如果你想写一段惊人的代码,你需要投入几周的时间。工程师知道这一点。

同样,如果你想建立一个惊人的企业,你至少需要投资几个月。商业领袖没有意识到这一点。

在创纪录的时间内完成令人惊讶的事情在理论上听起来很棒。这确实发生了——但这是例外。98%的大事都需要很长时间。

平庸的商业领袖希望所有事情都在昨天之前完成。伟大的领导者从他们的工程师那里学到:你在一个项目上工作,直到它完成。不管需要多长时间。只要你每天都在进步,你就在朝着正确的方向前进。

3.教学

平庸的领导者认为他们的愿景不言自明。伟大的领导者无时无刻不在教学。

他们教他们的用户他们的产品如何工作。苹果的主题演讲就是一个很好的例子。

他们教给投资者他们的生意是如何运作的。这对于保持投资者的信任至关重要。

他们教员工如何实现他们的愿景。这是生意兴隆的秘方。

但是为什么领导可以从工程师那里学到那么好的教学技巧呢?

我们回头以埃隆·马斯克为例。他不仅从他的工程师的好奇心中学习,这使他重新思考他的火箭的材料。

他还希望每个工程师都对整个项目有一个了解。这需要大量的教学,从领导者到高级工程师,一直到初级水平。

马斯克不只是教他的工程师。在这个过程中,他学会了如何教授——通过观看工程师们互相教授。

鉴于 T4 对 SpaceX 公司目前的估值超过 300 亿美元,这种教学努力似乎非常值得。

平庸的领导说教。伟大的领导者教导。

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

伟大的领导者教导。照片由克里斯蒂娜·帕帕罗Unsplash 拍摄

4.注意细节

作为一名领导者,了解全局至关重要。迷失在细节中的前景是可怕的。所以很多领导跳过细节。

这是一个巨大的错误。任何工程师——即使是初级开发人员——都知道这一点。当你编码时,一个忘记的分号或者一个错误的缩进都会导致你漂亮的项目崩溃。

类似地,一份推介材料中的一个错别字就足以让投资者逃离领导者。一个小小的错误会让领导显得邋遢、懒惰、注意力不集中。那不会建立信任。

可悲的是,许多领导者完成了粗糙和肮脏的事情,并把小事情——如纠正打字错误——委托给他们的助手。

但是你永远不会看到一个软件工程师写了一段肮脏的代码,然后把它交给他们的初级开发人员去清理。因为效率低。

等到初级开发人员理解了代码是如何工作的,然后清除了所有的错误时,可能就是圣诞节了。想想在工资和基础设施方面有多少钱。

[## 为什么除了计算机科学家,其他人都写马虎代码的四个原因

五次黑客攻击让你的更干净。

towardsdatascience.com](/four-reasons-why-everyone-except-for-computer-scientists-writes-sloppy-code-b8505254e251)

然而,如果工程师自己投资几个小时,成本会下降到一个零头。对于工程师来说,从事如此低级的任务似乎很愚蠢——但就成本而言,这是值得的。

在软件方面很明显的是,直接转化回业务。当领导者的助手在球场上纠正错误时,领导者已经把球场打磨了三遍。

平庸的领导者关注大局。伟大的领导者知道细节也很重要。

5.有效沟通

大多数领导者都擅长沟通。毕竟,他们需要让人们相信他们的愿景。

软件工程师是伟大的沟通者吗?大多数人不会这么说。典型的 IT 成员坐在房间最黑暗的角落里的笔记本电脑前,说话时甚至都不抬头。

但这并不意味着他们不擅长交流。他们只是不怎么做。软件架构师有效地沟通。

有效沟通并不意味着大量沟通。

想想你上一次公司会议。有多少是空洞的废话?三成?六十?八十?

让我们假设有 15 个人参加会议,平均时薪为 20 美元。如果会议持续了一个小时,而百分之六十的时间都是废话连篇,那么公司就把 15 * 20 * 0.6 = 120 美元变成了空气。如果这些会议每周召开一次,那么每年就有 120 * 50 美元= 9,000 美元的浪费!

不幸的是,许多商业领袖说话像政客——他们真的很擅长空洞的废话。

软件工程师擅长保持沉默。不仅如此,重要的时候他们还会说话。

少说话,多说。

这是每个商业领袖的关键技能。

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

少说话,多说。由 Austin DistelUnsplash 上拍摄

6.闲话少说

这一条与上一课有关。你多久会看到软件工程师边喝咖啡边闲聊?管理者呢?投资人?

你会认为你的经理应该对他们的团队保持谨慎。他们不是。如果你曾经见过两个经理在喝咖啡休息时感觉没人注意,你知道我在说什么。

投资者 98%的时间都花在八卦上——要么制造八卦,要么消费八卦。真正优秀的投资者会尽量减少流言蜚语——但他们中的大多数人不会被打扰。

软件工程师不八卦。

当然,他们会为一个让他们失望的朋友或者今天早上的交通状况而发泄。他们也是人。但是他们所说的 98%都是有用的东西,没有废话

不幸的是,商业领袖经常模仿他们的投资者的沟通方式,而不是他们的 IT 团队。他们为什么这么做?

因为在他们看来,投资者拥有更大的权力。是他们给他们钱让他们发展业务,是他们在每个重大决策中都有发言权。另一方面,IT 团队处于接收端。他们执行公司目标,并以此获得薪水。

所以从表面上看,像投资者一样交流是有意义的。像强者一样行事,你自己也会变得强大——这是座右铭。

但是正如第五点所指出的,这导致了金钱的浪费。更糟糕的是,这破坏了人们对他们作为领导人的信任。毕竟,当有人在你背后笑的时候,你怎么能假设他们说的是真话呢?

像软件工程师一样去做,成为更好的领导者。闲话少说。

7.分析,而不是瘫痪

商业领袖每天都面临着决定公司成败的决策。在 90%的情况下,他们需要快速行动。太可怕了。

为了做出正确的决定,领导者需要建议。但为此,他们依赖于人们所说的。他们依赖流言蜚语。

软件工程师永远不会依赖流言蜚语。如果他们想知道方案 A 或方案 B 哪个更好,他们会进行测试。然后他们让性能数据自己说话。

软件工程师所做的一切都基于定量分析。有问题吗?分析一下!需要选择解决方案?分析一下!

许多投资者依赖流言蜚语。许多商业领袖模仿他们。这是做出糟糕决定的必然方式。想要证据吗?80%的企业家在头 18 个月失败。

伟大的商业领袖密切关注他们的软件工程师如何做决策。他们如何关注实质,而不是流言蜚语。

并以此引领他们的公司走向成功。

[## 给商业领袖的软件工程笔记

你对软件开发的假设阻碍了你的业务。你需要问三个问题来帮助你前进。

medium.com](https://medium.com/nick-tune-tech-strategy-blog/a-note-to-business-leaders-on-software-engineering-178adf2a81f4)

向极客们学习

你会想到那些在你办公室最黑暗的角落里,眼睛疲惫的电脑虫们有培养更好的商业领袖的秘方吗?

他们自己可能也不会这么想。但是我们可以从彼此身上学到很多东西。尤其是极客们。

每个数据科学家都应该知道的 7 种统计分布,以及直观的解释

原文:https://towardsdatascience.com/7-statistical-distributions-that-every-data-scientist-should-know-with-intuitive-explanations-bf967db81f0b?source=collection_archive---------7-----------------------

对正态分布、伯努利分布、二项式分布、泊松分布、指数分布、伽玛分布和威布尔分布的直观解释,以及 Python 示例代码

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

每个数据科学家都应该知道的 7 种统计分布。卢克·切瑟在 Unsplash 上拍摄的照片。

统计分布是数据科学中的一个重要工具。分布通过给我们一个变量最有可能获得的值的概念来帮助我们理解一个变量。

此外,当知道一个变量的分布时,我们可以做各种概率计算,来计算某些情况发生的概率。

在这篇文章中,我分享了 7 种统计分布,并给出了在现实生活中经常出现的直观例子。

1.正态或高斯分布

正态或高斯分布可以说是最著名的分布,因为它出现在许多自然情况下。

正态分布的变量有一个平均值,这也是最常见的值。越接近平均值的值越有可能出现,越远离平均值的值越不可能出现。

正态分布的特征还在于平均值周围的对称变化,用标准差来描述。这意味着较高的值和较低的值一样普遍。

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

平均值为 0,标准差为 1 的正态分布。

正态分布的例子可以在许多自然的连续变量中找到。例如,动物的体重或身高将遵循正态分布,因为大多数动物都是平均体重,有些稍微偏胖或偏瘦,但没有那么多动物非常瘦或非常胖。

人类的智商也是正态分布的一个非常著名的例子,平均值为 100,标准差为 15。大多数人智力一般,有些人稍聪明或稍不聪明,少数人非常聪明或非常不聪明。

2.二项分布

伯努利分布描述了一个概率事件,它只重复一次,并且只有两种可能的结果。这两种结果通常被称为成功,或 1,和失败,或 0(你可以把一切都称为成功或失败,取决于你看什么)。

因此,这种分布非常简单。它只有一个参数,就是成功的概率。

一个著名的例子是掷硬币,我们可以称任何一方成功。成功的概率是 0.5。这将导致下图:

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

成功概率为 0.5 的伯努利分布。

但是 50/50 不是伯努利分布的一部分。伯努利分布的另一个例子是射中靶心的概率。要么在里面,要么不在,所以这是两种结果。对于一个糟糕的飞镖运动员,成功的概率可能是 0.1,给出如下分布:

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

成功概率为 0.1 的伯努利分布。

3.二项分布

二项式分布就像伯努利分布的兄弟。它模拟了在重复伯努利实验的情况下成功的次数。因此,我们关注的不是成功的概率,而是成功的次数。

二项式分布的两个参数是实验次数和成功概率。一个抛硬币十次的基本例子是,实验次数等于 10 次,成功概率等于 0.5。这给出了每 10 次成功的概率如下:

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

概率为 0.5 和 10 次重复的二项式分布。

二项式分布的另一个例子是在给定的一周内发生交通堵塞的概率,已知在给定的一天内发生交通堵塞的概率是 0.2。这是在 5 个工作日重复 1 个伯努利是/否变量,因此参数为:实验次数为 5,成功概率为 0.2。下面的结果图显示,最有可能出现 1 次交通堵塞,然后是 0 次,然后分别是 2 次、3 次、4 次和 5 次。

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

概率为 0.2,重复 5 次的二项分布。

4.泊松分布

泊松分布描述了固定时间范围内的大量事件。您可以考虑的事件类型是每 15 分钟进入商店的顾客数量。在这种情况下,我们将 15 分钟作为一个固定值(单位时间),这样我们就可以在其余的计算中忽略它。

在这种情况下,每个单位时间会有平均数量的顾客进入,这被称为比率。这个速率称为λ,它是泊松分布所需的唯一参数。

在下面的例子中,速率λ是 4,所以平均每单位时间(在这个例子中是 15 分钟)发生 4 个事件。在图中,我们可以看到 3 或 4 个事件是最有可能的,然后计数向两边逐渐减少。任何超过单位时间 12 次的事件都变得不太可能,以至于我们在图上看不到它们的条形。

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

泊松事件的其他例子可以是在特定位置通过的汽车数量。此外,几乎任何具有单位时间计数的事物都可以被认为是泊松分布。

5.指数分布

指数分布与泊松分布相关。泊松分布描述单位时间内的事件数量,指数分布描述事件之间的等待时间。

它采用与泊松分布相同的参数:事件率。然而,在某些情况下(尤其是在 Python 的 Scipy 中),人们更喜欢使用参数 1 /事件率。

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

你应该把 x 轴看做单位时间的百分比。在泊松例子中,我们说单位时间是 15 分钟。现在,如果我们在 15 分钟内有 4 个人,我们最有可能为每个新人等待 0.25 分钟,或这个单位时间的 25%。15 分钟的 25%是 3,75 分钟。

6.γ分布

伽马分布是指数分布的变体。它不是描述事件之间的时间,而是描述等待固定数量事件的时间。

它需要两个参数:指数分布的 lambda 参数,加上一个 k 参数,表示要等待的事件数。

举个例子,你可以想到一个景点公园,它只能在满了,比如说 10 个人的时候推出一个景点。如果他们的事件率是平均每 2 分钟有 4 个顾客进来,他们可以使用伽玛分布来描述推出景点的等待时间。

在下图中,我们可以看到顶部大约是 2.5。这意味着,平均下来,10 个人的等待时间是 2 分钟单位时间(即 5 分钟)的 2.5 倍。这是有意义的,因为我们每单位时间有 4 个人,总共需要 10 个人。

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

图表中有趣的是,我们可能要等待 6 倍的单位时间,所以(6 乘以 2 分钟=) 12 分钟。这远远超过了平均 5 分钟的时间,等待最先到达的顾客可能太长了。

伽马分布的其他例子是你必须等待 x 个事件的一切,假设这些事件不一定同时发生。

当 Gamma 分布用于等待时间时,如本例所示,它也称为 Erlang 分布,但我不会在此详述。

7.威布尔分布

威布尔分布是另一种分布,它是等待时间问题的变体。它描述了一个事件的等待时间,如果该事件随着时间变得更可能或更不可能。

一个明显的例子是计算机的寿命。你可以等一段时间,直到你的电脑太旧,坏了。你用电脑的时间越长,它就越有可能坏掉。所以失败的概率,或者说比率,并不是恒定的。

威布尔分布有两个参数。首先,泊松和指数分布中的速率参数。其次是 c 参数。c 为 1 意味着存在恒定的事件率(因此这实际上是一个指数分布)。高于 1 的 c 意味着事件率随时间增加。c 低于 1 意味着事件发生率随时间而降低。

如果我们采用与泊松例子中相同的λ值(λ= 4),并且我们为 c 增加 1.1 的值(因此速率随时间增加),我们得到以下结果:

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

感谢您阅读这篇文章。我希望你喜欢它!

7 个统计测试来验证并帮助拟合 ARIMA 模型

原文:https://towardsdatascience.com/7-statistical-tests-to-validate-and-help-to-fit-arima-model-33c5853e2e93?source=collection_archive---------6-----------------------

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

尼古拉斯·托马斯在 Unsplash 上拍摄的照片

什么是 ARIMA?

在处理单变量时间序列时,ARIMA 模型是最经典和最广泛使用的统计预测技术之一。它基本上使用滞后值滞后预测误差来预测特征值。

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

完整的 ARIMA(由普拉蒂克·甘地创作)

  • AR: 使用先前值的滞后
  • I: 非平稳差分
  • 马: 移动平均 为误差项

其中一些术语在处理时序数据时非常常用。如果我们深刻理解这些术语或数据的组成部分,ARIMA 模型可以准确地拟合。以下是其中的几个例子:

趋势:

当数据中存在增加或减少方向时,数据被认为具有趋势。例如,夏季期间航空乘客的增加、工作日期间顾客数量的减少等。

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

克里斯·利维拉尼在 Unsplash 上拍摄的照片

季节性:

如果数据受外部因素影响,则认为数据具有季节性模式。例如,树叶的生长和掉落是由大自然母亲的天气/季节驱动的。

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

克里斯·劳顿在 Unsplash 上拍摄的照片

周期性:

如果存在重复但非周期性的波动,则认为数据具有循环成分。简单来说,如果图案是因为某种情况造成的,没有设定的时间量,就可以认为是周期性的。例如,由于特定事件的发生,股票市场表现出具有高点和低点的循环行为,并且这些峰值之间的时间从来都不精确。

白噪声:

这是时间序列的随机和不规则部分。换句话说,从信号中提取趋势+季节性+周期性后的残差,大多被认为是白噪声。白噪音最好的例子是当你在 90 年代失去与电视的天线连接时(是的,我是一个 90 年代的孩子!).

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

弗兰·雅克耶Unsplash 上拍摄的照片

平稳性:

具有常数均值零方差的时间序列被认为是平稳的。当考虑平稳性时,我脑海中总会浮现一个众所周知的图像:

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

https://beingdatum.com/time-series-forecasting/

我用来解释这些测试的包主要有:

有很多测试,但我将谈谈我使用过的一些,它们帮助我解决了时间序列问题:

1.增强型迪基-富勒(ADF)试验:

应该使用变换技术(对数、移动平均等)使时间序列平稳。)在应用 ARIMA 模型之前。ADF 检验是一种很好的方法,也是最广泛使用的技术之一,用于确认序列是否平稳。数据可以在卡格尔上找到。下面是代码:

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

非平稳数据与平稳数据的差异及其 T 统计量

为了使数据稳定,我们对数据进行了一些转换(如上面的代码所示)。在计算 t 统计值时,我们看到该值是显著的,并确认数据现在是稳定的!

2.PP 测试:

PP 代表菲利普斯-佩龙试验。在某些情况下,需要用 ARIMA 的 I 来表示积分。I=1 或 2 的差值通常起作用。这种 PP 检验是一种单位根检验,以确认时间序列是按照顺序 1 整合的。如果要检查平稳性,这也是 ADF 测试的替代方法。它们在金融时间序列的分析中变得相当流行[3]。下面是代码:

这将返回一个布尔值(1 或 0),表明该序列是否稳定。

3.KPSS 测试:

计量经济学中广泛使用的测试是科维亚特科夫斯基-菲利普斯-施密特-辛特,或简称为 KPSS 测试。这个测试与 ADF 非常相似,可以帮助验证零假设,即一个可观察的时间序列在一个确定的趋势周围是平稳的。虽然它有很高的 I 型错误率,但是它有一个很大的缺点。在这种情况下,通常建议将其与 ADF 测试结合使用,并检查两者是否返回相同的结果[4]。代码类似于 ADF 测试,如下所示:

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

非平稳数据和平稳数据的区别

从上图中我们可以看到,在应用变换之前(图 A),数据的 p 值< 0.05 ,因此它不是稳定的。转换后(图 B)p 值变为 0.1 to。确认数据的平稳性。

在我们进入下一个测试之前,重要的是要知道 ARIMA 模型可能包含季节性成分,这可以通过在我们的 ARIMA 方程中增加一些参数(P,D,Q,m)来处理。我们可以将 ARIMA 型模型大致分为两种类型:

  1. ARIMA :如开头所述处理非季节性组件
  2. 萨里玛 : S 季节成分 + ARIMA

4.CH 测试:

Canova Hansen(CH)检验主要用于检验季节差异,并验证零假设,即季节模式在一个样本期内是稳定的,或者是随时间变化的。这在经济或气象数据中非常有用[5]。这已经在 pmdarima 库中用 Python 实现了。

5.OCSB 测试:

Osborn,Chui,Smith 和 Birchenhall (OCSB)检验用于确定数据是否需要季节差异(P,D,Q,m 的 D 分量)。 pmdarima 包有一个预定义的功能,用户可以利用如下功能:

这里,我们将 m = 12 定义为月度数据。**‘AIC’**是绩效评估的默认 lag_method (越低越好)。参考此处的了解其他可接受的指标。这个数据的输出是 1,因为我们已经知道季节性成分是明确可见的。

6.分解绘图:

当你遇到时间序列问题时,这是一个非常有用的工具。我认为这个功能类似于医生在你第一次出诊时测量生命体征。由于生命体征可能表明患者的一些明显情况,分解图给出了数据的细分,并显示是否有任何明确的趋势、季节性和残差模式。下面是代码片段和输出结果:

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

分解图:显示原始数据(顶部)、趋势、季节和残差(底部)的子图

7.ACF 和 PACF 图:

ACF 和 PACF 图分别代表自相关图和偏自相关图。ACF 和 PACF 图有助于系统地确定时间序列平稳化后所需的 AR 和 MA 项。以下是 ACF 和 PACF 图的代码:

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

航班乘客数据的自相关图

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

航空旅客数据的偏自相关图

落在蓝色阴影区域内的滞后被认为不显著。基于 ACF 图,我们可以说它是 AR13 模型,意味着具有 13 个滞后的自回归将有所帮助。基于 PACF 图,我们可以说它是 MA2 模型:移动平均线有两个滞后。有一些方法可以解读这些图,并很好地估计 ARIMA 模型的阶数。

结论:

除了上面列出的,还有许多其他的统计测试可以使用。然而,我在这里提到的测试/工具对于理解数据和拟合精确的 ARIMA 模型来说是非常强大的。

这是我第一次尝试写一篇关于媒介的文章。我从我的作家同事和社区中学到了很多,这是我认为最好的方式来分享或回报我的一些经验给他们。

参考资料:

— — — — —

  1. https://otexts.com/fpp2/stationarity.html
  2. https://en.wikipedia.org/wiki/Decomposition_of_time_series
  3. https://faculty . Washington . edu/ezi vot/econ 584/notes/unit root . pdf
  4. https://www.statisticshowto.com/kpss-test
  5. https://ja lobe . com/testing-for-seasonal-stability-canova-and-Hansen-test-statistic/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值