如何避免熊猫大混乱,第二部分
深入探究熊猫的常见错误。第二部分:加速和内存优化
在 第一部分 中,我们回顾了如何编写干净的代码并找出常见的无声故障。在第二部分中,我们致力于加速你的运行时间并降低你的内存占用。
我还做了一个 Jupyter 笔记本,上面有整个课程,包括两部分。
这是前一部分的一些代码设置,但是我把它放在这里是为了让这一部分能够独立存在。
*# for neatness, it helps to keep all of your imports up top*
**import** **sys**
**import** **traceback**
**import** **numba**
**import** **numpy** **as** **np**
**import** **pandas** **as** **pd**
**import** **numpy.random** **as** **nr**
**import** **matplotlib.pyplot** **as** **plt**
% matplotlib inline*# generate some fake data to play with*
data = {
"day_of_week": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] * 1000,
"booleans": [**True**, **False**] * 3500,
"positive_ints": nr.randint(0, 100, size=7000),
"mixed_ints": nr.randint(-100, 100, size=7000),
"lat1": nr.randn(7000) * 30,
"lon1": nr.randn(7000) * 30,
"lat2": nr.randn(7000) * 30,
"lon2": nr.randn(7000) * 30,
}
df_large = pd.DataFrame(data)*# let's copy this pro-actively, copy vs. view is in part i*
large_copy = df_large.copy()df_large.head()
启动你的熊猫
既然您已经有了很好的编码习惯,是时候尝试提升性能了。从矢量化到实时编译,您可以使用一系列方法来加快代码运行速度。为了测量瓶颈和量化性能增益,让我们介绍一下timeit
,一个漂亮的 Jupyter 性能测量笔记本工具。你需要知道的是,将%timeit
放在一行代码之前将测量该行代码的运行时间,而将%%timeit
放在一个代码块中将测量整个代码块的运行时间。
对于这个例子,我选择了哈弗辛函数,因为它是一个很好的例子,这个函数看起来有点复杂,但实际上很容易优化。我在 StackOverflow 上找到了这个示例函数。
**def** haversine(lat1, lon1, lat2, lon2):
"""Haversine calculates the distance between two points on a sphere."""
lat1, lon1, lat2, lon2 = map(np.deg2rad, [lat1, lon1, lat2, lon2])
dlat = lat2 - lat1
dlon = lon2 - lon1
a = np.sin(dlat/2)**2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon/2)**2
c = 2 * np.arcsin(np.sqrt(a))
**return** c %timeit haversine(100, -100, 50, -50)> 14.3 µs ± 308 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
遍历行的三种不同方式
您可能已经知道 Pandas 是在 Numpy 的基础上构建的,以利用仅由底层 C 代码提供的优化,同时保持其可访问的 Python 接口。然而,就像任何脚踏两个世界的事物一样,你需要知道边界在哪里,以充分利用它的双重性。根据迭代数据帧的方式,您可以充分利用或完全忽略这些优化。
如果您对 Pandas 完全陌生,并且只是将 DataFrames 视为嵌套 Python 列表的包装器,那么您的第一反应可能是一次遍历一行,比如使用df.iterrows()
。
%%timeit# `iterrows` is a generator that yields indices and rows
dists = []
for i, r in large_copy.iterrows():
dists.append(haversine(r["lat1"], r["lon1"], r["lat2"], r["lon2"]))large_copy["spherical_dist"] = dists> 736 ms ± 29.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
每个循环 740 毫秒是 3/4 秒,真的可以累加。100,000 行将花费您 20 个小时。
使用df.apply()
方法有一个稍微优化的方法,它对 DataFrame 和 Series 对象都有效。您定义一个自定义函数并发送它,在某些情况下,它会尝试推断更快的方法来更快地处理 DataFrame 列。
large_copy["spherical_dist"] = large_copy.apply(
lambda r: haversine(r["lat1"], r["lon1"], r["lat2"], r["lon2"]), axis=1
)> 387 ms ± 31.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
这是一种进步,但并不惊人。您需要做的是使用矢量化,简单地说,就是向 Numpy 兼容函数中输入一系列值,这些值通常一次取一个值,这样 C 代码就可以自由地在内部分割向量并进行并行处理。Numpy 函数通常可以接受单个值、一个向量或一个矩阵。如果内部处理可以在每一步都作用于单个值或值的向量,则可以使用现成的矢量化。
%timeit large_copy["spherical_dist"] = haversine(\
large_copy["lat1"], \
large_copy["lon1"], \
large_copy["lat2"], \
large_copy["lon2"] \
)> 2.17 ms ± 188 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
这大约是 100 倍的速度提升——20 小时缩短到大约 4 分钟。请注意,我没有以任何方式更改原始函数。如果你去看代码,你可以自己追踪这些值是如何既可以是单个值也可以是一个序列的。
迭代的一些经验法则
与索引一样,Pandas 可以灵活地处理每行的值。以下是一些经验法则:
- 如果要对列的每个值应用相同的变换,应该使用矢量化。
- 如果需要条件矢量化,请使用布尔索引。
- 也适用于字符串!即
Series.str.replace("remove_word", "")
- 你应该只对不能广播的特定功能使用
apply
。即pd.to_datetime()
用 Numba 进行实时编译
不能矢量化怎么办?这是否意味着你被df.apply()
困住了?不一定——如果您的代码可以表示为纯 Python 和 Numpy 数组的组合,您应该尝试 Numba,看看您的代码是否可以为您加速。编写 Numba 与编写 Cython 完全不同,如果你只懂 Python,那么编写 cy thon 就很像编写一种全新的编程语言。同样,只要你的代码可以用纯 Python 和 Numpy 来表达,这实际上就是在现有函数的基础上添加一些装饰器。
这个例子基于一些函数,这些函数计算一个给定的复数是否是 Mandlebrot 集合的一部分,并通过尝试每个像素坐标来可视化产生的分形。取自 Numba docs 。
**def** mandel(x, y, max_iters):
"""
Given the real and imaginary parts of a complex number,
determine if it is a candidate for membership in the Mandelbrot
set given a fixed number of iterations.
"""
i = 0
c = complex(x,y)
z = 0.0j
for i in range(max_iters):
z = z*z + c
if (z.real*z.real + z.imag*z.imag) >= 4:
**return** i
**return** 255**def** create_fractal(min_x, max_x, min_y, max_y, image, iters):
height = image.shape[0]
width = image.shape[1] pixel_size_x = (max_x - min_x) / width
pixel_size_y = (max_y - min_y) / height
for x in range(width):
real = min_x + x * pixel_size_x
for y in range(height):
imag = min_y + y * pixel_size_y
color = mandel(real, imag, iters)
image[y, x] = color **return** image image = pd.DataFrame()
image["pixels"] = np.zeros(1, dtype=np.uint8)%timeit create_fractal(-2.0, 1.0, -1.0, 1.0, image, 20)> 30.5 ms ± 11.4 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
这里是完全相同的功能,但在顶部有 Numba 装饰。我不得不使输入数据非常非常小,因为timeit
运行许多次迭代来测量速度。
@numba.jit **def** mandel(x, y, max_iters):
"""
Given the real and imaginary parts of a complex number,
determine if it is a candidate for membership in the Mandelbrot
set given a fixed number of iterations.
"""
i = 0
c = complex(x,y)
z = 0.0j
for i in range(max_iters):
z = z*z + c
if (z.real*z.real + z.imag*z.imag) >= 4:
**return** i
**return** 255@numba.jit
**def** create_fractal(min_x, max_x, min_y, max_y, image, iters):
height = image.shape[0]
width = image.shape[1] pixel_size_x = (max_x - min_x) / width
pixel_size_y = (max_y - min_y) / height
for x in range(width):
real = min_x + x * pixel_size_x
for y in range(height):
imag = min_y + y * pixel_size_y
color = mandel(real, imag, iters)
image[y, x] = color **return** image image = pd.DataFrame()
image["pixels"] = np.zeros(1, dtype=np.uint8)%timeit create_fractal(-2.0, 1.0, -1.0, 1.0, image, 20)> 1.63 ms ± 84 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)
这是打字 5 秒钟速度的 18 倍。如果你的函数需要一些复杂的循环和条件混合在一起,看看你是否能运用一些 Numba 魔法还是值得的。
如果您感到好奇,这就是当您将create_fractal
函数应用到全零的实际输入时它的样子:
管理你的记忆
如果您使用 Pandas 已经有一段时间了,那么您可能在某个时候遇到过中等大小的数据帧使您的 Python 进程崩溃的情况。令人困惑的是,当数据帧看起来没有那么大时,或者也许你记得上周在同一台笔记本电脑上处理更大的东西,但那台没有崩溃。怎么回事?
熊猫记忆问题的最大元凶可能是:
- 你的引用仍然附加在变量上,这意味着它们不会被垃圾回收。
- 你有太多的数据帧副本。
- 您可以进行更多的就地操作,这不会产生数据帧的副本。
object
数据类型比固定数据类型占用更多的内存。
碎片帐集
垃圾收集是 Python 通过释放对程序不再有用的内存来释放内存的过程。您可以通过移除对该对象的引用来释放内存引用的对象。这将标记以前引用的对象以释放内存。
让垃圾收集帮助您管理内存的最佳方式是将您能做的任何事情包装到函数中。在函数中声明的变量只作用于函数,所以当函数结束运行时,它们会被丢弃。另一方面,全局变量(如large_copy
)一直保留到 Python 进程结束(即笔记本内核关闭)。即使你del
了一个变量,它也只是减少了 1 个引用,但是如果引用计数不是 0,被引用的对象实际上并没有被删除。这就是为什么全局变量会破坏你认为你的记忆。
只是为了好玩,您可以通过使用sys.getrefcount(var_name)
来查看变量的引用计数。
*# `foo` is a reference*
foo = []sys.getrefcount(foo) # this temporarily bumps it up to 2> 2# yet another global reference bumps it up again
foo.append(foo)sys.getrefcount(foo)> 3
此时,del
将无法对其进行垃圾收集,全局范围内引用过多。
数据类型占用大量内存
又是那些讨厌的object
dtype!毫不奇怪,告诉熊猫你需要能够在任何时间任何地方存储任何东西意味着它会为你存储的东西预先分配大量的初始内存。如果您存储的是复杂的东西,这没问题,但是如果您存储的是可以简单表示的东西,您可能想看看是否可以将 dtype 改为更适合您情况的类型。
检查数据帧占用了多少内存实际上比你想象的要容易。它已经内置到 DataFrame 对象中。
large_copy.info(memory_usage="deep")>
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7000 entries, 0 to 6999
Data columns (total 8 columns):
day_of_week 7000 non-null object
booleans 7000 non-null bool
positive_ints 7000 non-null int64
mixed_ints 7000 non-null int64
lat1 7000 non-null float64
lon1 7000 non-null float64
lat2 7000 non-null float64
lon2 7000 non-null float64
dtypes: bool(1), float64(4), int64(2), object(1)
memory usage: 773.5 KB
节约内存的一个常见做法是向下转换。例如,如果您知道您的整数不需要 64 位,就将它们转换为 32 位。但是,正如我们将会看到的,并不是所有的向下投射都具有同等的影响力。
large_copy["positive_ints"] = large_copy["positive_ints"].astype(np.int32)large_copy.info(memory_usage="deep")>
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7000 entries, 0 to 6999
Data columns (total 8 columns):
day_of_week 7000 non-null object
booleans 7000 non-null bool
positive_ints 7000 non-null int32
mixed_ints 7000 non-null int64
lat1 7000 non-null float64
lon1 7000 non-null float64
lat2 7000 non-null float64
lon2 7000 non-null float64
dtypes: bool(1), float64(4), int32(1), int64(1), object(1)
memory usage: 746.2 KB
3%的降幅其实并不显著。如果你有字符串列,并且它们被存储为一个object
类型,那么它们总是比浮点数和整数更容易占用内存。
所有的str
类型在熊猫中都被存储为object
,因为它们可以是任意长度。您可以将字符串列向下转换为固定长度的str
类型。例如,这个限制为 10 个字符:
large_copy["day_of_week"] = large_copy["day_of_week"].astype("|S10")large_copy.info(memory_usage="deep")>
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7000 entries, 0 to 6999
Data columns (total 8 columns):
day_of_week 7000 non-null object
booleans 7000 non-null bool
positive_ints 7000 non-null int32
mixed_ints 7000 non-null int64
lat1 7000 non-null float64
lon1 7000 non-null float64
lat2 7000 non-null float64
lon2 7000 non-null float64
dtypes: bool(1), float64(4), int32(1), int64(1), object(1)
memory usage: 636.8 KB
降价 18%并不坏,但是我们还能做得更多吗?你碰巧知道在day_of_week
一周最多只有 7 天。有一种category
类型可以利用由一小组重复元素组成的列。
large_copy["day_of_week"] = large_copy["day_of_week"].astype("category")large_copy.info(memory_usage="deep")>
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7000 entries, 0 to 6999
Data columns (total 8 columns):
day_of_week 7000 non-null category
booleans 7000 non-null bool
positive_ints 7000 non-null int32
mixed_ints 7000 non-null int64
lat1 7000 non-null float64
lon1 7000 non-null float64
lat2 7000 non-null float64
lon2 7000 non-null float64
dtypes: bool(1), category(1), float64(4), int32(1), int64(1)
memory usage: 315.2 KB
仅从一个专栏来看,就减少了 59%!
结论,第二部分
我几乎惭愧地承认,在我开始寻找优化之前,我花了几年时间使用 Pandas,即使在今天,我也没有对我制作的每一台笔记本进行优化。但是,通过一些简单的技巧,您可以看到几行代码的差异,甚至是如何处理单个列,会导致 10-100 倍的速度提升和 50%以上的内存减少。这绝对是一套不错的锦囊妙计。
如果您错过了它,请查看第一部分:编写好的代码并发现无声的失败。
如何避免潜在的机器学习陷阱
理解并防止机器学习管道中固有的某些常见缺陷
迈克尔·波德格在 Unsplash 上的照片
T 他的帖子是写给那些最近加入机器学习潮流的数据科学爱好者的。无论你是在大学里学习数据科学,还是自学成才,大多数有抱负的数据科学家在实际环境中尝试机器学习项目时,都会受到现实的检验。
我自己也曾与以下大部分潜在的绊脚石作斗争,但正如理查德·布兰森简洁地指出的:
你不能循规蹈矩地学习走路。你通过实践和跌倒来学习。
这里讨论的潜在缺陷会影响模型的准确性,并且一旦用于分析实时数据,还会影响模型的性能。人们通过实践学习这些东西,很快,当开发机器学习管道时,所有这些都将成为你的第二天性。我将尽可能让这篇文章实用,以便在从事实际的机器学习项目时,它可以作为一种清单。
简单回顾一下,机器学习管道包括机器学习项目中的所有单个工作流,包括但不限于:数据收集、探索性数据分析(EDA)、特征选择、特征工程、为训练准备干净的数据、训练/测试/验证数据分割、模型选择、训练&验证、生产部署和模型监控。
所以事不宜迟,让我们开始吧:
取样偏差
数据收集是任何机器学习项目的第一步,它充满了潜在的绊脚石,最关键的是采样偏差。简而言之,有偏样本是指在根据样本统计推断总体参数时,不能代表整个总体的样本,从而导致系统误差。
采样偏差可以通过多种方式引入数据集,包括关注特定的真实区域(郊区、城市、乡村、大学等)。)only,自我选择偏差,排除偏差,生存偏差等。
预防策略:虽然收集一个完全无偏见的数据集有时可能有点棘手,但是,可以调整数据收集策略,以确保尽可能公正的样本。例如,数据收集应该纯粹是一种随机行为,每个数据点都有平等的机会被选中;使用来自内部数据库的整个数据集;避免数据收集过程中的判断、便利或成本因素等。
数据清理
处理输入要素中的缺失值是任何机器学习项目的关键组成部分,因为在实际设置中很少会有干净的数据集可供处理。处理缺失值的一种简单方法是丢弃所有缺失值的观测值,或者通过统计参数(如平均值、中值或众数)对其进行估算。但是,如果丢失的值真的是由设计或数据收集逻辑造成的呢?
预防策略:利用领域知识和主题专业知识理解数据集中缺失值的性质、原因和方式。只有这样,一旦你掌握了这些知识,就可以相应地利用适当的插补技术——可以是丢弃观察值,使用均值/中值/众数,或者应用专门用于插补目的的另一种 ML 算法,等等。
不适当的特征选择
特征工程和特征选择通常被吹捧为任何数据科学项目的支柱,因为模型验证和实际模型性能严重依赖于它们。为此,一些 ML 实践者陷入了对理想特征的追求,以至于他们无意中选择了不相关的特征作为模型训练的目的。
预防策略:这是深度领域知识派上用场的地方,以识别和选择只适合模型训练的特征。如果数据科学家缺乏深入的领域和行业知识,也可以利用主题专家。
数据泄露
ML 算法通常应用于训练数据集,然后在测试/保留数据集上进行验证。为此,完整的数据集被分成 2 个(有时是 3 个)集合,每个集合用于训练、测试(和验证)。如果所有的数据转换和准备步骤都在拆分前应用,那么很有可能在模型训练期间已经使用了来自测试数据集的一些信息。这种数据泄漏导致过度拟合,并且通常导致过度乐观和无效的模型。
作为一个简单的例子,考虑这样一个场景,我们通过使用变量的平均值来估算缺失值。如果我们使用整个数据集进行插补,那么我们的假设值也将基于测试数据集的值。测试数据集应该代表看不见的真实数据;因此,使用这些在生产中不可用的信息将导致模型偏差和过度拟合。
预防策略:简单,在应用任何数据准备、转换、特征选择、降维、特征工程技术之前,将数据集分成训练集和测试集。所有这些技术应该分别应用于训练和测试数据集。
走向未来
这一点是前两点的直接延续。在目标变量中的事件发生之前,您可能遇到的一些输入变量是无法观察到的。例如,直到客户拖欠贷款时才能知道 amount_recovered(用于预测贷款拖欠的模型),或者直到航班着陆时才能确定航班时间(用于预测航班延误的模型)。
预防策略:只要不使用任何这样的特征进行模型训练,在目标变量被观察到之前不可能发生。
需要时没有规范化或标准化
依赖于某种距离度量(例如,线性回归、SVM、kNN)的机器学习算法对度量尺度高度敏感,因为它们假设所有特征都在同一尺度上。因此,与其他数据(例如,年龄)相比,这些算法将为数值较大的数据(例如,年度支出)分配较高的权重。这显然是不可取的。
预防策略:在模型训练之前,对你的数据集应用某种统计变换,例如标准化或规范化,使所有变量处于一个等价的尺度上。请注意,这仅在使用假设统一测量比例的算法时需要。
异常值的处理
离群值是在特定数据集的上下文中不正常的单个数据点,但在现实生活中并不少见。每个最大似然算法处理它们的方式不同,应该小心识别和处理数据集中的异常值。某些算法适当地处理异常值(大多数基于树的方法都这样做,例如随机森林,XGBoost)。相比之下,线性回归等其他方法更容易受到它们的影响,并试图相应地拟合模型(也称为过度拟合)。
预防策略:通过绘图(例如,盒须图)或统计技术( Z 值),始终识别数据中的任何异常值。然后或者使用适当处理异常值的算法(例如,基于树的算法),消除异常值,或者应用 winsorization 技术。
多重共线性
多重共线性是指两个或多个输入要素彼此高度相关的情况,即它们都以某种方式以相似的方式预测目标变量。这可能导致不利的后果,即模型不收敛,或者预测值的统计显著性被破坏。多重共线性通常发生在为分类变量创建哑变量而没有删除其中一个哑变量时,例如,性别 _ 男性和性别 _ 女性哑变量共线,因此任何一个哑变量都可以用于识别一个人的性别。
预防策略:通过计算所有独立变量的成对相关系数(通过相关矩阵或变异膨胀因子)来识别多重共线性,然后通过主成分分析或其他方法删除其中一个冗余变量或合并相关变量。
不平衡数据的验证指标
有几个验证指标,但并不是所有的都与不平衡数据相关。识别和应用合适的验证指标对于不平衡数据至关重要,否则,我们将错误地依赖模型的稳健性。
考虑欺诈检测的示例,其中训练数据集仅包含 2%的欺诈案例。天真地使用准确性指标并不能代表模型的真实预测能力。换句话说,如果我将所有的测试/现实案例都归类为非违约,那么我有 98%的正确率。
预防策略:使用更适合不平衡数据的验证指标,如精度、召回、 F1 分数、精度-召回(PR)曲线、受试者操作特征(AUROC)曲线下面积、基尼指数。
结论
这就对了——注意上面的潜在陷阱,你将会在机器学习的道路上走得很好。
如果您想讨论任何与数据分析、预测分析和信用/财务评估相关的问题,请随时联系我。
如何避免停留在你的机器学习书单中第一本书的第一章
读书比看书单更重要。如果你想完成你在机器学习方面的书单,我的策略大概可以帮到你。
本·怀特在 Unsplash 上的照片
Y 在你阅读这篇文章之前,你可能已经通读了数十份机器学习书目。但是你看完里面的书了吗?
我也没有。
我发现,当我对读一本新书充满热情时,这种热情会在我到达书的中心部分之前在某个地方耗尽。
大部分没看完的书我都卡在了 第 1 章 里。所以,那时候,我从书上读了几百遍的东西只有机器学习的历史和机器学习的基本概念。
大约半年前,我试图解决反复阅读第一章的问题。我制定了一个阅读策略,它对我很有效。
我以我自己的机器学习书目为例与你分享。如果你和我有同样的问题,希望这篇文章能帮到你。没有必要从我这里复制一切,但是值得一试把这个策略应用到你的书单上。
第一步:根据你的需求过滤你的书单。
布莱克·理查德·弗多恩在 Unsplash 上拍摄的照片
我之所以想看机器学习方面的书,可以用两层需求来解释。*首先,*我希望能够在我开始阅读书籍的时候就能输入我的机器学习代码。*二、*我想看完之后能够理解算法。
第一层是面向工程的,第二层是面向研究的。
基于这些需求,我在最终书单中保留了四本书:
动手项目编码选择书本***# 1******# 2***,数学理论学习选择书本***# 3******# 4***。
第二步:对你的过滤书单中的书籍进行分类。
安妮·斯普拉特在 Unsplash 拍摄的照片
得到我的过滤书单后,我把它们按两个维度进行分组。
第一维是内容,第二维是功能,如下表所示。
我的书单分类表(作者俞峰
我以自己喜欢的方式设计了分类。具体来说,我使用了“机器学习”和“深度学习”来拆分涵盖机器学习广泛主题的书籍和专注于深度神经网络的书籍。
我把那些有沉重方程式和数学解释的书定义为“字典”,把那些有数吨行代码的书定义为“手册”。
任意命名,但对我有用。
步骤 3.1:阅读一本手册和字典。
照片由 Dmitry Ratushny 在 Unsplash 上拍摄
至于上一步归类为“机器学习”的书籍,我把书 #3 放在手边,开始阅读来自 第二章 名为*“端到端机器学习项目”*的书 #1 。
在阅读过程中,每当我想更深入地理解书中解释的术语时,我就会查阅书。**
例如,当我读到第 #1 本书第 #70 页的 决策树回归器 时,我打开我的第 #3 本书,通读第 #307 页 9.2.2 小节的 回归树 。然后我又回到了第本书的第 #70 页,把相关段落看了一遍。
这个策略的实施,一开始让我花了一些时间去熟悉,但是习惯之后我显著提高了阅读效率。
节省我开阖书时间的一个窍门就是下载一个电动版的书 #3 和一个纸质版的书 #1 一起使用。
步骤 3.2:在您自己的数据上尝试相同的代码。
照片由 Hitesh Choudhary 在 Unsplash 上拍摄
在学习了 #1 一书中加州房屋数据的分析后,我在 R 中的 汽车数据集上应用了相同的代码。
我没有简单地将代码从一个数据集复制粘贴到另一个数据集。我在新的数据集上应用了从书 #1 中学到的基本数据可视化工具,并基于可视化提出了几个我想问的问题。
这些问题可能很简单。例如, mpg 能否通过其他特征预测,如气缸数和总马力?目的是训练第一眼看完资料后的提问能力。
接下来,根据这些问题进行建模。比如我在汽车数据集上构建了一个 随机森林回归器 ,以 mpg 为因变量。
第 3.3 步:阅读第 1 章。
米歇尔·巴洛格在 Unsplash 上的照片
我之所以把这一步放在这里,并不是因为我讨厌第 1s 章。
正如我所说,通常第 1 章描述了机器学习的历史,基本概念,以及对机器学习的社会行为(如机器学习研究投资随时间的变化)。随着这本书其他部分的完成,对我来说第一章看起来比以前更有内容。**
另外,把第一章作为最后一步阅读,帮我生成了我在机器学习方面的 新书目 。具体来说,在了解了将机器学习方法应用于我们日常生活的历史和挑战之后,我对人工智能的未来变得更加感兴趣。
因此,我制作了我的新书目录,如下所示:
- 尼克·博斯特罗姆。超智能。路径,危险,策略。
- 最大标记。生活 3.0。
第四步:为你的代码编一个故事,并告诉其他人。
人们通常会低估机器学习领域讲故事的能力。
所有的技术本身不能形成一个故事,除非你的目的是开发新的算法,这远远不够阅读几本书。最佳实践是用你的领域知识将机器学习技能应用于现实世界的问题。
此外,从实践中获得的第一手经验在任何书中都找不到。这是我写的另一篇文章,详细描述了这样的经历。
当训练数据中的性能比测试数据中的性能好得多时,就会发生过度拟合。默认…
towardsdatascience.com](/one-potential-cause-of-overfitting-that-i-never-noticed-before-a57904c8c89d)**
我真的希望我的阅读策略可以帮助你完成你的书单,并在数据科学方面更进一步。
美国宇航局在 Unsplash 拍摄的照片
参考资料:
- 特雷弗·哈斯蒂、罗伯特·蒂布拉尼和杰罗姆·弗里德曼。统计学习的要素。
- 伊恩·古德菲勒、约舒阿·本吉奥和亚伦·库维尔**。深度学习。**
- 奥雷连恩·盖伦。使用 Scikit-Learn、Keras 和 TensorFlow 进行机器学习。
- 弗朗索瓦·乔莱。用 Python 进行深度学习。
如何避免编写草率的 SQL
更好的 SQL
让您的 SQL 代码更易读、更容易理解
SQL 简单易懂,易于使用。从查询中很容易得到正确的结果。然而,阅读其他人正确运行的查询并不容易。SQL 并不强制要求编写查询的全局格式标准(就像 Python 中的PEP8
)。有类似于 SQL 风格指南的倡议,但是它没有广泛的追随者。因此,很难让人们以某种方式写作。此外,大多数 SQL IDEs 也不支持同样的查询美化。
任何傻瓜都能写出计算机能理解的代码。优秀的程序员编写人类能够理解的代码——马丁·福勒
然后,这就变成了一个需要通过自律来解决的问题。如何确保他们编写的 SQL 代码容易被其他人阅读和理解?有一些简单的步骤可以遵循。最重要的是,遵循一个风格指南会让一切变得简单得多。想想这个—
遵循风格指南
从一开始,Python 就倾向于简单易读。缩进的原理本身很好地解决了可读性问题。SQL 从一开始就没有任何可以强制执行的标准。让我们回头再来讨论这个问题。现在,请看这个例子,它演示了如何使用PEP8
标准在 Python 中正确缩进
摘自吉多·范·罗苏姆的 PEP8 页
我遇到的最著名和最有用的风格指南是 Simon Holywell 的 SQL 风格指南。没有必要重复本风格指南中的内容,但值得强调的是,命名约定、别名和缩进大大有助于使代码更易于阅读和理解。这是风格指南的摘录—
摘自 Simon Holywell 的 SQL 风格指南
看,风格指南说的是最简单的事情。关注这些最简单的事情的每一点努力都会使你的代码更加整洁。
错认假频伪信号
SQL 是关于连接、表、cte 等等的。在一个数据库中,在给定的时间有如此多的对象。当编写一个查询时,我们确实需要访问很多这样的查询。有时候,说实话,太多了。如果发生这种情况,应该有一种访问这些数据库对象的简单方法。
在组织内部,这种简写应该很容易识别。例如,如果有一个名为delivery_packages
的表,那么它的别名应该是dp
。根据经验,对于 snake case 表名中的每个单词,只取表名的第一个字母。order_feedback_comments
的别名应为ofc
。确保这些表的别名也不要太短。确保它们有一定的意义。查看这篇文章。
注释您的 SQL 代码
如果查询有很多行,将其分成 cte 或子查询,或者创建临时中间表。如果您不希望这样做,无论哪种方式,请确保以易于阅读和理解的方式注释您的 SQL 代码,并用尽可能少的词语解释您正在使用查询做什么。警告、问题、性能相关的东西——所有其他的都应该详细注释。
如果你的代码易于阅读,它就易于重用
如果没有适当的注释,通读千行查询可能并且应该是困难的。尽量不要让它变得困难。评论评论好。遵循一个风格指南。
小心子查询
最后,作为一般的经验法则,如果可能的话,将子查询保持在最少——不仅仅是因为性能原因。复杂的多级子查询可能会很快完成工作,但越来越难以维护。如果您的数据库支持 cte,请尽可能使用它们,而不是使用子查询。如果查询变得太复杂并且有太多的子查询,那么创建临时表(可能在内存中),然后从那里开始。
聪明的程序员和专业的程序员的一个区别是,专业的程序员明白清晰才是王道。专业人士善用他们的能力,写别人能理解的代码——罗伯特·马丁
专业的大声喊出来给 Vicky Boykis 作 写关于这个 的方式早在 2015 年和 Simon Holywell 作准备的 SQL 风格指南 。
如何抨击:对于我们这些不喜欢命令行的人来说
80 年代的技术让你成为更快的程序员
凯文·霍尔瓦特在 Unsplash 上拍摄的照片
詹姆斯塔克。PyCaret。CI/CD 自动化。软件开发前沿的所有性感的前沿技术。
然后是巴什。伯恩又一个外壳,Unix 用户的默认外壳——Linux 和 Mac。对于在 Windows 上工作的软件开发人员来说是绝对必要的。(如果你没有在 Windows 上使用 WSL2,停止阅读这篇文章,进入Windows Features
,打开 Linux 的 Windows 子系统…现在!)
Bash 可能看起来是一个不值得您花费时间的遗迹。而且肯定不会诱发寻找最新东西的开发者流口水。但是它是所有运行终端或者 Windows 终端的人都用的(或者应该是)。
运行上面提到的所有性感程序?巴什。
我也用鼠标,所以这不是命令行纯粹主义者的说教。然而,这个外壳的用途不仅仅是你现在使用的。在文件系统中导航。设置项目。运行 Python / Node / whatever 包管理器的命令。
在本文中,我想分享一些 Bash 的基本知识。如何从 Bash shell 中获得更多的东西,而不至于让自己疯狂地试图掌握它的许多怪癖。
最后,我将在我的 Windows 笔记本电脑上共享.bashrc
文件。这个文件连同。bash_aliases
,每天为我节省了大量的按键和认知压力。
.bashrc
文件
.bashrc
文件位于您的主目录的根目录下。大多数终端和文件 ui 默认不显示“点文件”;它们是隐藏文件。您可以通过输入以下内容来查看您的:
$ ls -a ~/.bashrc
/c/Users/nicho/.bashrc*
ls
命令上的-a
开关告诉程序打印所有文件,甚至是点文件。
shell 程序启动时需要运行的任何东西的 Home base。
- 环境变量
- 功能
- 别名
- 设置
- 提示
- 自动完成
这是所有好东西的去处。我保持简单。虽然没有必要,但我的别名放在一个单独的文件中,.bash_aliases
。Bash 将在您的.bashrc
中加载这些代码。
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
Bash 别名
使用alias
命令查看 shell 环境中可用的别名。
$ alias
alias avm='ssh -i ~/.ssh/digitalocean root@XXX.XX.XXX.XXX'
alias az='az.cmd'
alias ba='vim ~/.bash_aliases'
alias chrome='/c/Program\ Files\ \(x86\)/Google/Chrome/Application/chrome.exe'
alias clpr='cd /c/projects/CLIENTPROJECTS'
alias cls='clear'
alias cn='code -n .'
alias d='cd /c/Users/nicho/Downloads/'
alias day='touch ~/Downloads/$(date +%m%d%Y).txt; code ~/Downloads/$(date +%m%d%Y).txt'
alias dcu='docker-compose up -d'
alias default='export AWS_PROFILE=default && echo Using my default AWS account'
alias docs='cd /c/Users/nicho/OneDrive/Documents'
alias dpa='docker ps -a'
alias e='explorer .'
alias ee='exit'
alias es='/c/tools/elasticsearch/bin/elasticsearch.bat
...
别名只受你的想象力的限制。通过不接受参数。
# alias test="echo Hi, $1 $2"
$ test Jane Doe
Hi, Jane Doe
# alias test="echo Hi, $1 $2\. We are using aliases!"
$ test Jane Doe
Hi, . We are using aliases! Jane Doe
最好对带参数的命令使用 Bash 函数。
完成工作的基本功能
Bash 函数有足够简单的语法来声明:
function_name () {
# logic here
}
示例:
test () {
if [ -z "$1" ]; then # no argument
echo "Hi, Anonymous!";
else
echo "Hi, $1 $2\. We are using aliases!";
fi
}
编写 Bash 脚本的一个好处是,您可以直接从终端程序运行它们(在 Windows 上,当运行 Git BASH 时)。Bash 也是一种编程语言:
$ test () {
> if [ -z "$1" ]; then # no argument
> echo "Hi, Anonymous!";
> else
> echo "Hi, $1 $2\. We are using Bash functions!";
> fi
> }
$ test
Hi, Anonymous!
$ test Nick B
Hi, Nick B. We are using Bash functions!
…但这也是我对 Bash 的 shell 脚本一无所知的地方。对于任何比上面的例子更复杂的东西——模板、大量变量、嵌套命令——请使用 Python。Python 彻底击败了 Bash 编写的易于理解的脚本。
快捷键
我的.bashrc
请击鼓!正如承诺的,这是我的.bashrc
设置。在电脑上,没有比.bashrc
更私人的文件了。(不,我没那么无辜。我们在这里谈论编程。)
你会发现这些对你没用。有些,我真心希望你能做到。拿一些你认为可以使用的部分,复制它们,然后自己动手做。自行添加。
请记住,您需要运行.bashrc
文件来查看 shell 中的更改是否生效。
$ source ~/.bashrc
$ # or
$ . ~/.bashrc
我的.bashrc
档案:
#!/bin/bash
export PATH="/c/scripts/:$PATH"
# virtualenvwrapper
export WORKON_HOME=$HOME/Envs
# Postgres
export PGCLIENTENCODING=UTF8
PATH=~/.local/bin:$PATH
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# command completion for AWS CLI
complete -C '/c/Python36/Scripts/aws_completer' aws
# function to go to the designated projects folder
p() {
cd /c/projects/$1
}
# function to cd to the scripts folder, then subfolder
s() {
cd /c/scripts/$1
}
# function to cd to the startup folder
startup() {
cd /c/Users/nicho/AppData/Roaming/Microsoft/Windows/Start\ Menu/Programs/Startup
}
# random number generator
rand() {
if [ -z "$1" ] # no argument
then
range=4
else
range=$1 # will error if argument is not a number
fi
local num
for ((i=0;i<$range;i++))
do
num=$num$((RANDOM%9))
done
echo $num
printf "%s" $num | clip.exe
echo "Number is on the clipboard."
}
# alias for cd change directory
a() {
if [ -z "$1" ] # no argument
then
cd -
else
cd $1
fi
}
# alias for choco install --confirm
ci() {
if [ -z "$1" ] # no argument
then
echo "choco install needs a package name argument to run."
else
choco install --confirm $1
fi
}
# get an AWS elasticsearch domain's endpoint to the clipboard
esdomain() {
if [ -z "$1" ] # no argument
then
echo "need a domain name as an argument for this function"
else
ENDPOINT=$(aws es describe-elasticsearch-domain --domain-name $1 | jq '.DomainStatus.Endpoint' | tr -d \")
printf "%s" $ENDPOINT | clip.exe
echo "The endpoint for $1 is on the clipboard."
fi
}
# open my date log files
week() {
today=$(date +"%Y-%m-%d")
lastSunday=$(date -d "$today -$(date -d $today +"%u") days" +"%Y-%m-%d")
for ((i=1; i<=7; i++)); do
code ~/OneDrive/Documents/$(date +"%m%d%Y" -d "$lastSunday +$i days").txt
done
}
toobig() {
if [ -z "$1"] # no argument
then
du -h --threshold=5000000 # show files 5MB or greater
else
du -h --threshold=$1
fi
}
结论
Bash 并不新鲜。但正因为如此,它是您的软件开发环境的基础。如果像 Bash 别名或某个函数这样的新技巧节省了您通常在终端中导航所花费的一半时间,那么这意味着您只需要实现一两个新东西,就可以将命令行的工作效率提高一倍!
我很想知道你在系统中使用了哪些 Bash 特性。请对本文发表评论。谁知道呢?也许你发现的东西也能帮助我们其他人!
2020 年如何做一名数据分析师
发展成为数据分析师所需技能的深入指南
目录
介绍
1995 年,不到 10%的世界人口使用互联网。现在,互联网用户占全球人口的 58%并且每天产生超过 2.5 万亿字节的数据。随着技术进步继续超过拥有相关 STEM 知识的人数,对工程师、数据科学家和数据分析师的需求比以往任何时候都要多。对数据分析师的需求如此之大,以至于美国数据分析师的平均工资约为 7 万美元!
在本文中,我将向您介绍我对数据分析师工作的看法、成为数据分析师所需的技能,以及我的一些经验。
数据分析师到底是什么
我读过几篇文章,这些文章给了我一个数据分析师所做事情的清单,但从最简单的意义上来说,您正在分析和可视化数据。每个公司都有自己的数据库,你可以从中查询。这些公司也有自己的数据可视化工具,比如 Tableau,你可以用它来可视化你的见解和发现。
在商业中,有许多类型的数据,如产品数据、营销数据和运营数据,同样,也有几种类型的数据分析师,如产品分析师、营销分析师和运营分析师。这些工作的不同之处在于与每个类别相关的领域知识,但最终,它们与术语“数据分析师”同义。
数据分析师的一般工作流程
数据分析师的工作范围最终取决于你工作的公司,但一般来说,数据分析师会经历上图中的以下工作流程。让我们走一遍。
问题
每次分析都从一个问题或一项任务开始。这些任务的难度会有很大差异。一个简单任务的例子是,如果要求您编写一个查询来提供统计数据,比如昨天的销售额。更困难的任务的一个例子是当答案不清楚时,你被要求探索数据。例如,如果让你找出为什么上个月的销售额比其他月份差得多。
探索和查询
一旦您收到一个问题,您通常会编写一个或多个查询来探索和收集解决问题所需的信息。这意味着您可能需要了解 SQL 或 Python(或者两者都了解)来收集您需要的信息。
继续前面的例子,如果要求您找出为什么上个月的销售比其他月份差得多,您可能会查询上个月的平均客户评论评级,以查看产品是否有问题,或者您可能会查询上个月的营销支出与其他月份相比,以查看营销支出是否有显著减少。
收集见解
下一步是收集你的见解。有时,收集您的见解意味着将您的见解复制并粘贴到 Excel 表格中。其他时候,这意味着保存您用来查找下一步所需信息的查询。
可视化见解
一旦你收集了你的见解,你可能需要将你的发现形象化。有时,这就像在 Excel 中制作条形图一样简单。其他时候,这意味着创建一个广泛的仪表板,供高管们使用。这一步需要的技能取决于公司和项目。它包括但不限于 Powerpoint、Excel、Tableau、Matplotlib 等…
传达你的发现
最后,您需要传达您的结果,无论是通过带有几个静态图表的幻灯片还是带有几个 KPI 指标的仪表板。类似于回答行为问题的星形方法,你将走过问题、任务、你采取的方法和最终结果。
注意:
我知道我是通过简化来概括的,我知道这并没有涵盖数据分析师日常工作中的每一件事。然而,对于那些完全不知道数据分析师做什么的人来说,就像你们中的一些人不知道语言病理学家做什么一样,这为他们做什么提供了一个体面的想法。
成为数据分析师所需的技能
如果您对此感兴趣,那太好了!2020 年初,Jeff Hale 发表了一篇文章,“数据分析师最需要的技术技能”。通过搜集和分析几个招聘网站,他得出结论,数据分析师的前四项技能从最重要到最不重要依次是 SQL、Excel、Tableau 和 Python。
SQL
什么是 SQL?
SQL 是一种用于访问和操作数据库的编程语言。可以把数据库想象成表的集合,表是具有相同变量的行的集合。想象一个 Excel 表格,如下所示:
表格示例
查询是从数据库表或表的组合中请求数据。使用上面的表格,如果我想找到所有大于 23 岁的病人,我将编写一个查询。作为一名数据分析师,您将频繁地查询数据,或者为其他员工检索信息,或者解决更复杂的问题。
如何学习 SQL
- 如果你想学习初学 SQL,可以看看我的文章《5 分钟 5 步学会初学 SQL!是的,不同类型的 SQL 语言有不同的语法,但一般来说,它们遵循相同的格式。
- 如果你在实践中学习得更好,Codecademy 有一个非常好的关于 SQL 的简明课程在这里。这就是我个人学习 SQL 的基础。
- 一旦你学会了基础知识,你就可以用这些练习题来练习你所学的知识。
Excel
什么是 Excel?
如果你还不知道,Excel 是一个电子表格程序,它允许你在表格的行和列中输入数据。你应该知道如何使用 SUMIF、IF 语句和 COUNT 等基本函数。此外,您应该知道如何创建图表和数据透视表。在实践中,因为公司重视协作,你可能会被要求使用 Google Sheets,这本质上是一回事。
如何学习 Excel
说实话,Excel 是我通过经验学到的东西。如果你没有机会边做边学,YouTube 上有一些很棒的视频(也是免费的)可以用来学习 Excel!见下文。
画面
什么是 Tableau?
Tableau 是一种数据可视化工具,广泛应用于所有行业。通常,公司使用 Tableau 来创建仪表板,仪表板是显示实时指标供企业查看的工具。例如,营销团队可能会创建一个显示每日转换、每日营销支出和每日网站流量的仪表板。
如何学习 Tableau
- 如果你想学习如何使用 Tableau,他们有一系列的培训视频,你可以自己浏览这里。他们还提供现场培训和电子学习体验。
- 或者,我在几年前购买了一门关于数据科学基础的课程,在这门课程中,它将指导您下载和使用 Tableau。如果这是你感兴趣的东西,你可以在这里查看课程。
Python
Python 是什么?
Python 是一种通用的编程语言,深受数据分析师和数据科学家的欢迎。具体来说,在 Python 中,有各种各样的库可以用来执行数据分析,比如 NumPy、Pandas 和 Sci-kit Learn。
如果你想学习如何使用 Python 和这些库,你可以在网上利用一些资源,比如 DataCamp、Udemy、Coursera 和 Udacity。虽然我对学习 Python 没有任何特别的偏好,但我鼓励你选择一种资源并坚持下去!
感谢阅读!
如果你喜欢我的工作,想支持我…
- 支持我的最好方式是在媒体上关注我这里。
- 在 Twitter 这里成为第一批关注我的人之一。我会在这里发布很多更新和有趣的东西!
- 此外,成为第一批订阅我的新 YouTube 频道 这里!目前还没有视频,但它就要来了!
- 在 LinkedIn 上关注我这里。
- 在我的邮箱列表 这里报名。
- 看看我的网站,terenceshin.com。
如何成为 2020 年的数据科学家
理解机器学习项目的生命周期并揭示成功项目的标准。
数据科学团队是每个大公司的核心。一个成功的数据科学家需要成为业务战略的负责人,能够通过数据做出发现和愿景,能够通过沟通和可视化说服利益相关者。然而,如今的数据量呈指数级增长,这使得数据科学工作变得更加复杂。每个公司都开始理解数据的重要性,并尽可能多地收集数据。数据大小从几千兆字节增加到几千兆字节。云存储和计算变得更加流行。最终用户组织正在采用云存储解决方案作为主要存储选项。因此,2020 年的数据科学家需要具备大数据知识以及与之相关的工具。在这篇博客中,我将从 AWS 的角度介绍机器学习项目的生命周期。看完这个,我们就明白成为 2020 数据科学家需要什么了。
机器学习项目生命周期。资料来源:Huy Bui
I)检测问题
创建机器学习项目最重要的一步是检测业务问题。很多情况下,数据科学家迷失在数据中,浪费时间与大数据争论,解决一个对业务没有显著改善的非常困难的问题,甚至完成一个项目,感觉好像有人以前做过一样。每个数据科学项目都需要仔细规划。没有计划就是计划失败。了解业务环境和可能采取的业务行动将为数据科学家节省大量时间,并为您的公司节省大量资金。这对于参加商务会议、与高管员工聊天以及始终站在利益相关者的角度来看都很重要。
II)数据收集
在弄清楚问题之后,数据科学家需要获得数据并适当地组织数据。数据收集可以在内部或外部进行。大多数结构化数据存储在关系数据库中。所以,学习 SQL 是必不可少的。SQL 可能很古老,但却无处不在。你甚至可以在 FAANG 公司或者非技术行业的高性能数据库系统中看到 SQL。
生产中的机器学习算法需要经常调整。因此,数据科学家需要找到一种高效的方法来处理大量数据,并自动化这一过程。批处理和实时处理是这方面的两个重要概念。它有助于以批处理(每日更新)或实时内容的方式向数据仓库交付数据输入。数据科学团队的一个职能是监控开发模型。因此,想要处理流数据的数据科学家需要熟悉 Spark 或 Hadoop 等大数据工具。
Spark 最初发布于 2014 年 5 月 26 日。来源
当从外部收集数据时,需要不断地重新评估数据集的相关性和可信度。没有确定最佳数据源的公式。这更像是探索未知的旅程,是数据科学过程中最有趣的部分。下面是我做的几个项目中的几个例子,来说明迷人的数据是如何引导我们的。
场景 1 :一家非营利公司想了解孩子们如何学习实施他们的在线课程。从 PBS Kids Measure Up 等基于游戏的学习应用程序中收集数据!可能是个好主意。分析玩家的线性学习路径、他们对每个科目的专注程度以及他们在不同评估中的表现有助于改进教学方法。
孩子们倾向于选择位于屏幕中央的图像。资料来源: Huy Bui
场景 2 :一位石油和天然气客户希望了解机器学习如何帮助他们的石油和天然气公司。检测美国管道事故,并向他们展示 ML 如何防止设备故障,将激励客户投资该项目。
每个州的净损失都是由与石油相关的灾难造成的。来源: Huy Bui
同样值得了解的是,数百万个数据点是如何存储的,以及我们如何安全地维护它们。亚马逊 S3 是目前最受欢迎的云服务。亚马逊 S3 将数据存储在多个位置,以便在事故发生时提供备份。出于安全目的,亚马逊 S3 可以定制不同级别的访问权限。您还可以控制日志历史记录、定义警报和自动化工作流,而无需管理额外的基础架构。最棒的是亚马逊 S3 连接了许多其他最先进的机器学习工具,与其他编程语言高度可比。
III)评估指标
我们如何知道我们的策略是否有效?数据科学家需要考虑两个指标:
机器学习指标:
当想到指标时,我们通常会想到准确性、MSE、F1、kappa Cohen……然而,在这篇文章中,我将强调具有更多商业意义的指标。成本和精度的权衡。例如:
在二进制分类问题中,如果我们想预测设备故障,假设错误分类负面样本(不知道故障设备)的成本是错误分类正面样本(派技术人员检查状况良好的设备)的三倍以上,哪个模型的成本最低,召回率至少为 60%?
要回答这个问题,我们需要使用混淆矩阵,计算什么是假阳性和假阴性的阈值。通过与领域专家的交流了解每个错误预测的成本在利用机器学习方面发挥着重要作用。
2.业务指标。
KPI代表关键绩效指标。KPI 应该对每一个业务层面都是全面的,并且在任何项目的初始阶段之前就已经预先定义好了。一些关键绩效指标可能包括:提高客户满意度超过 7/10 或减少 20%的劳动力成本。选择正确的 KPI 依赖于对组织的重要性的良好理解。有很多不同的 KPI,但是我们需要知道的两个 KPI:业务流程(BP)KPI和数据科学(DS)KPI。为数据科学项目制定指标的流程通常首先从 BP KPIs 开始,然后转化为 DS KPIs。例如,如果 BP KPI 是将垃圾邮件的投诉减少一半,那么当转换为 DS KPI 时,我们的目标是将误报率降低到 x%。
理解项目的目标对于项目经理和数据科学家来说都很重要。数据科学项目不成功的标志是问题太广泛,无法解决,无助于业务,或者需要很长时间才能完成。需要有一个标准的程序来决定成功与否。一个流行的 KPI 标准是 **SMART。**这种型号被许多不同的行业广泛使用
你也可以在这里阅读关于敏捷方法的内容,它解释了关于项目管理的更多细节。
III)算法选择
这是流程中最“数据科学”的部分。有两个主要步骤值得一提:数据探索和机器学习。
数据探索包括描述性统计、可视化和回答分析数据时出现的一系列逻辑问题。数据科学家不应该低估简单性。这一步中的许多商业洞察和发现,往往比应用机器学习有更多的好处。数据探索揭示隐藏的特征,并为特征工程打开新的思路。发现的一个例子是沃尔玛在假日周的需求分布:
资料来源:Huy Bui
数据被水平标准化。前三个节日有着相同的特点。消费者在超级碗、母亲节、父亲节前消费很多。相比之下,消费者在新年和万圣节后花费更多的 T2。最后,平安夜没有销售**,因为所有沃尔玛商店都关门了。**
下一步是选择正确的机器学习算法。一般来说,您选择的算法需要满足 DS KPI,并且是可解释的。
选择合适的算法:在本地大数据上训练多个算法并不容易。然而,云计算使这项任务变得非常容易。AWS 的 SageMaker Auto Pilot 是这项任务的主要工具之一。SageMaker Autopilot 自动检查原始数据,应用功能处理器,挑选最佳算法集,训练和调整多个模型,跟踪它们的性能,然后根据性能对模型进行排名,所有这些都只需几次点击。2020 年的数据科学家需要适应新技术,SageMaker 自动驾驶仪是你应该放在工具箱里的东西。
可解释性:在拥有了非常复杂的算法和高准确率之后,下一步就是通过用人类语言向项目经理解释你的机器学习算法来打动他们。数据科学家需要学习如何说服决定他们项目生命的人。理解利益相关者想要看到什么的一个方法是想象如果你是他们,你会问什么问题。想象一下,有人跟你说要买房子。他们会说什么来说服你?如果这个人能解释所有的因素,如房间数量、建造年份、位置、到最近超市的距离……并告诉你这些因素如何影响决策,这足以说服你吗?。在让机器学习变得可以理解的过程中,特性重要性是关键。展示机器学习模型如何为一个特征分配不同的权重,将使观众了解“黑盒”背后发生了什么。Parul Pandey提到了三个重要因素来为 ML 模型带来透明度:
- 最重要的特征是什么?
- 每个特征如何与单个预测相关联?
- 每个特征如何与多个预测相关联?
IV)部署模型
当模型满足 KPI 标准时,数据科学家需要将其投入生产。因为各种不可预见的因素会对结果产生负面影响,所以总是比较 ML 模型和 KPI 是必要的。该模型需要定期调整,以适应数据特征的变化。有时,灾难(如冠状病毒)可能会完全改变趋势,你必须重新训练模型,甚至重复整个过程。AWS 提供了一项服务,我们可以监控性能,并在预测指标低于指定阈值时向您发送警报。
结论
数据科学中有许多主题,数据科学家只需要了解其中的几个。但是,市场是竞争的,需要适应性。理解技术的趋势并应用它们是对你的项目负责的好方法,有助于你在人群中脱颖而出。综上所述,有三件事我建议看一看:
感谢您的阅读!
如何成为一名成功的博士生?
图片来自 Unsplash 。
博士生和早期职业研究者的最佳实践和成功原则
每当一个新的学生、实习生或研究助理加入我的实验室,我经常发现自己在重复我们实验室的许多最佳实践。最常见和最令人沮丧的事情之一是收到一封题为“亲爱的教授,请通读附件,截止日期是明天”的电子邮件。我在比利时安特卫普大学读博士的经历:在我目前的职位上,作为新加坡科技与设计大学音频、音乐、情感计算和人工智能实验室(AMAAI) 的负责人,科技与设计大学游戏实验室的主任,激励我为早期职业研究者写下一些最佳实践。
在过去的几年里,研究领域发生了很大的变化。我们通常不会花整个下午在图书馆的档案室里寻找那篇布满灰尘的文章。相反,通过无数的数字服务,我们的信息超载了,所有这些服务只需点击一个按钮就能提供高质量的手稿。随着这些技术的进步,博士生面临的挑战在过去十年里发生了巨大变化。此外,越来越多的学生选择读研,这使得找工作的竞争更加激烈,影响也更大。众所周知,这种竞争环境会给研究生带来心理压力。本文为现代博士生和研究人员提供了最佳实践或成功原则。请注意,这些来自我的个人经验,并不是绝对的真理。
作为一名成功的博士生,不仅仅需要发表论文。在整个研究生学习期间,与你的导师保持良好的关系是很重要的,同时做有影响力的出版,建立一个网络来利用你的工作,以及无数其他对你未来职业生涯至关重要的小事。我们将回顾一些简单的最佳实践,它们将帮助你成为一名优秀的博士生,给你的同事和导师留下深刻印象。
- 首先,找一个自己热爱的话题,努力去做。这样,下面所有的事情都会自然而然地发生在你身上。
- 不要给你的导师发这种太普通的邮件:“亲爱的教授,请通读附件,截止日期是明天”。在提交稿件之前,一定要提前提醒所有合作作者。虽然主管喜欢收到新论文(草稿)已经准备好的消息,但更好的方法是至少提前两周分享会议手稿,这样你的资深合著者就可以规划他们的时间。在期刊论文的情况下,需要更长的时间来适当地组织手稿和共同准备写作计划。
- 作为团队中的初级成员,与更高级的成员(最好是博士后)结对进行密切合作。虽然教授们很乐意帮助你,但他们在大学里有很多责任,由于时间限制,他们并不总是能够帮助低级编码和小决策。经常与这个人交流,并向你的主管报告更大的里程碑,以保持正确的研究方向。
- 在把你的手稿发送给导师或合作者之前,要彻底校对。参加学术写作课程,提高你的英语技能。如果英语不是你的第一语言,除了前者之外,利用校对服务或科技,使用像 Grammarly 这样的工具。这样你可以充分利用你教授的时间,毕竟,你希望他们给你研究输入,而不是花时间检查拼写。
- 手稿上列出的所有作者都需要对这项工作做出过重大贡献。这可以通过编码、构思、编辑、建议等等来实现。不要只把朋友作为合著者。此外,每个人都需要在提交前阅读最终版本的手稿。
- 如果你的手稿包含软件代码,让它可用,要么通过开源,要么通过有限许可(尽管开源会让你有更多的用户!).无论你是否在线提供你的代码,也要保留一个私有的库,与你所有的实验室同学共享。这将使你的队友能够利用你的工作。实验室应该是合作的,而不是竞争的。
- 预印还是不预印?由于传统出版渠道的缓慢周转和现代研究的快速发展。一旦你的手稿被接受,就提供预印本已经变得非常流行。预印本可以通过你所在大学提供的预印本服务发表,或者通过流行的预印本档案如 ArXiv 发表。然而,一旦你的手稿被出版商接受,就要在手稿的页脚清楚地注明原始引用信息。这样你就可以直接引用正确的(同行评议的)手稿。早期职业生涯的学生可能还没有意识到引用的重要性,但它们是推进你的科学生涯和证明你做有影响力的研究的关键。有人可能会说,一篇有 100 次引用的论文比一篇有 40 次引用的预印本和一篇有 60 次引用的论文要好。最后,一定要事先检查你的出版商是否允许你提供预印本。
- 在与你的研究主题相关的有影响力的期刊和会议上发表文章。虽然对此有很多争议,但如今许多大学使用的主要评估指标是出版物的(领域标准化)影响因子,如领先组织如 Clarivate 和 Scopus 所定义的。在主要评估指标改变之前,高影响力出版将为你的职业发展创造最多的机会。在许多领域,会议主要是为了了解最新进展和建立网络,因此它们只需要简短的摘要。在计算机科学领域,情况有所不同,需要在会议上提交更长的论文。如果你决定为一个会议准备一篇论文,一定要事先检查它是否有高核心排名: A*是一个会议能获得的最有声望的排名。甚至当你在会议上发表你的工作时,考虑以后扩展论文,并向期刊提交更完整的研究。
- 为你的手稿使用协作写作工具。这将有助于从共同作者和联合写作会议的反馈。如果你是在一个比较技术性的领域,把你所有的稿子都写在 LaTeX 里。LaTeX 提供了许多好处,包括容易的引用管理、稳定的工作环境(不会崩溃)、容易的交叉引用、自动标记和布局优化[ 1 ]。协作撰写文章的在线工具包括背面的、 Papeeria 和 Authorea 。
- 参加会议和网络。建立一个网络对于扩大你的合作和获得未来的工作机会是至关重要的!在会议上,你将了解到你所在领域的最新发展。如果你是志愿者,你经常可以免费进入。WikiCFP 是找到即将到来的会议的一种可能方式。
- 通过博客文章和学术网络分享你在社交网络上的研究,如 Scopus 、 ORCID 、academia.edu、门德利和 researchgate 和 Twitter 。在媒体上写文章解释你的出版物也有助于把你的作品带出去。引用对你未来的职业生涯很重要,所以你需要把你的研究公之于众。
- 成为相关会议和期刊的审稿人。这将让你在你的领域的最新研究发表之前就能接触到它!当你审阅手稿时,提供详尽的评论(不仅仅是几句话)。记住,你自己的手稿也会被彻底审查。
- 加入专业组织,如 IEEE(工程)和 ACM(计算机科学)。这些将让你获得有价值的资源,如杂志、纸质档案和教程。
- 保持身心健康。锻炼有助于保持大脑的高度可塑性,也就是说,让你更容易学习新东西。
- 保持固定的办公时间。在 2019 年对 6300 名早期职业研究人员的调查中[ 7 ,他们中的许多人指出了工作与生活平衡的问题。经常有学生在一天结束时开始他们的研究,就像他们在攻读本科学位一样。这个在研究生院行不通。保持固定的办公时间也创造了一个结束时间,之后你可以出去放松而不会有负罪感。当然,你可能不得不保持更长的工作时间,尤其是在截止日期之前,但是严格的时间表会帮助你保持心理健康并尽早开始。
- 拥有你的项目。当你和你的主管见面时,带着所有完成的任务出现,理想的情况是,下一步已经想到或者已经开始。多读书,有创造力。不要期望你的主管给你一些预先考虑好的小任务。作为一名博士生意味着做研究,在文献中寻找空白,并解决这些问题。
- 回复邮件。它将促进协作,使工作更快,并帮助您更快地获得成功…
上面的列表远非详尽无遗,也没有假装提供适用于每个人的绝对真理,它们是基于作者的个人经验。希望这些建议能帮助你成为一名成功的研究人员。请在下面的评论中留下你自己的成功实践。
祝所有攻读博士学位的人好运!
参考
[1]维多利亚·巴拉米泽。用于技术写作的乳胶。技术科学杂志 与技术,2(2):45–48,2014。
[2]安妮-玛丽·科里亚特。博士学位的价值不能仅仅由出版物来定义。自然人类行为,3(10):1007–1007,2019。
[3]克丘奇。是时候减少博士生的数量了,或者重新思考博士项目是如何运作的。谈话,2016 年第 18 期。
[4]基·埃里克森和阿瑟·F·克雷默。有氧运动对老年人认知和神经可塑性的影响。英国运动医学杂志,43(1):22–24,2009。
[5] Hossein Jenaabadi、Naser Nastiezaie 和 Hamideh Safarzaie。研究生学业倦怠、学业压力与学业自我效能感的关系。新教育评论,49(3):65–76,2017。
[6]肯德尔·鲍威尔。工作与生活的平衡:打破还是耗尽。性质,545(7654):375–377,2017。
7 克里斯·伍尔斯顿。博士:曲折的真相。性质,575(7782):403,2019。
如何做一个 AI 傻逼
7 种严重破坏你的机器学习项目的方法
上周,你和憨豆先生一起经历了他的冒险,完成了基本的训练、验证和测试。从的那个例子中很自然地可以得出一些如何(不)成为 AI 白痴的规则,但让我明确地为你拼写出来。(如果它们听起来似曾相识,请节哀顺变。)
图片:来源。
故事到此为止
在上一集里,你扮演了憨豆先生耐心教授的角色。既然你越来越擅长,那就让你坚持下去吧。我经常说避免应用人工智能中最大陷阱的最好方法是永远不要忘记学习和教学的基础,所以我私下希望你永远保持憨豆先生教授的心态。
永远不要忘记学习和教学的基础!
三个阶段的快速提醒(在上一篇文章中有更详细的解释):
- **训练阶段:**憨豆先生(你心爱的 AI 系统的占位符)在课堂上看到的例子中寻找模式,然后把这些模式变成模型(菜谱)。
- **验证阶段:**看看憨豆先生的食谱在他没有明确研究的例子上表现如何。如果分数看起来不错,他就去考试,否则就重新开始训练阶段。
- **考试阶段:**憨豆先生参加期末考试,学习是否允许去生产或者转专业。
训练阶段相当简单——你把例子塞给学生(把数据塞给机器学习算法),并且大多抱着最好的希望(我只是半开玩笑)。点击了解更多关于它如何工作的信息。
在我们列出成为人工智能白痴的方法之前,让我们从你尊敬的教授的角度谈谈更微妙的阶段——验证和测试。
验证和测试之间的细微差别
如果你所关心的只是让不值得的学生不及格,你就不需要验证阶段。你需要的只是测试。可怜的憨豆先生训练,发现一个模式(这是一个愚蠢的模式),冲向你的考试,考试失败,被数学专业开除。你抓住并处决了一个无知的人。干得好!
测试是关于守门的。只有有价值的人才能通过!测试让你免于发布糟糕的原型。
一个好老师帮助学生进步。图片:来源。
但是你想帮助学生进步的愿望呢?你帮助他们变得更好的承诺呢?他们救赎和自我提升的机会在哪里?验证,那就是。
验证是关于救赎的。这是一个掸去灰尘再试一次的机会。验证允许你迭代出更好的原型。
如果你真的关心你的学生,当你发现他们对某个食谱的尝试是愚蠢的,但已经为时太晚,无法帮助他们时,你会感到难过。(关于期末考试本身。)你是什么,老师还是刽子手?
你是什么人,老师还是刽子手?
如果你的最终目标是培养合格有效的学生,你会希望提供练习题(来自验证数据集)来帮助你的学生在面对教授断头台之前提高。
如何不做 AI 傻逼
虽然人工智能项目的领导者可能有理由不知道他们的工程师和数据科学家处理的数学本质,但没有理由忘记学习和教学的基础。如果你曾经考虑过设置一个考试,你已经有了防止一些主要流程出错所需的大多数常识工具。这里有几个例子。
图片:来源。
永远不要忘记人工智能就是用例子来解释
如果你的例子不好,你应该感到难过。如果你不给学生足够多的高质量的例子来学习,你怎么能指望他们有效地学习呢?哦,如果你给你的学生有偏见的例子,你会得到一个有偏见的学生。那是你的错,教授。
不要根据测试数据进行训练
那种考试如果靠死记硬背就能通过,对你没什么好处。机器学习是为了在新的例子上取得成功——如果你只关心在旧的东西上表现良好,那么跳过 ML/AI 的头痛问题,使用查找表。为了保证你评估的是正确的事情(对新数据的表现)而不是记忆旧数据的能力,确保你的学生没有机会学习(呃,记忆)你的任何测试示例。
永远不要把培训或验证数据放在期末考试上,这只会降低你正确测试学生的能力。(哦,我有没有提到电脑是有史以来最好的记忆者?)
永远不要混淆你的数据集
如果你没有在开始之前仔细管理和拆分你的数据*,你将如何防止上述问题?数据分割是最好的数据科学快速解决方案。在开始教学生之前,请确保将测试示例锁在一个安全的地方。*
在你设定考试标准之前,永远不要测试你的学生
即将面对 palm?停下你的手!虽然这一点似乎太明显而不值得一提,但你会惊讶地发现,领导力薄弱的真实项目团队经常进行测试,然后在测试后改变目标,因此无论如何,他们学生的分数最终都足够好。不要这样。(点击了解更多。)
永远不要重用测试数据
如果你忍不住对那些挑剔的统计学家们不屑一顾,他们坚持认为你不能使用一个测试数据集超过一次,让我们试着用不同的方式来说:“如果你给同一个学生两次相同的期末考试,不要相信他们第二次的表现。”考题不要重复使用!
永远不要跳过测试
测试将你从灾难中拯救出来。这是你对批准有毒原型的保护。如果你真的不在乎它(例如,如果你正在制作艺术作品),鼓起勇气把你的最低要求性能指标设为-inf。没有吗?好的,那就好好测试一下。
永远不要太相信自己
还有一个薄弱环节:你,教授。如果你没有意识到自己考得不好怎么办?它可能发生在我们当中最好的人身上。确保建立一些安全网,以防万一,让这个世界远离你刚毕业的学生。
如何做一个 AI 傻逼
当团队缺乏熟练的人工智能领导时,或者当他们过于沉迷于工程的本质时,他们的常识可能会被抛弃。他们可能看不到基本的东西,最终发布了非常糟糕的解决方案。我在现实生活中看到的几乎每一个令人讨厌的人工智能灾难都可以追溯到上面列表中的一个项目,所以如果你在寻找人工智能傻瓜帽,我给了你一个不错的错误列表供你选择,请自便!
但是如果你更喜欢构建好的、有用的、有效的人工智能解决方案,那么就要时刻记住教授的观点。挪过去,机器学习……是时候考虑机器教学了!
感谢阅读!人工智能课程怎么样?
如果你在这里玩得开心,并且你正在寻找一个为初学者和专家设计的有趣的应用人工智能课程,这里有一个我为你制作的娱乐课程:
在这里欣赏整个课程播放列表:bit.ly/machinefriend
如何成为一名高效的数据科学家/研究员
做正确的事情
照片通过 Pixabay
多年来,我参与了许多数据科学项目。我记得很容易迷路,在错误的方向上浪费了很多精力。随着时间的推移,我学会了什么对我更有效。这份清单是我尽力总结出来的:
- 先建一条工作管道
虽然先从很酷的东西开始很有诱惑力,但是你要确保不要把时间花在一些小的技术上,比如加载数据、特征提取等等。我喜欢从一个非常基本的管道开始,但是一个有效的管道,也就是说,我可以端到端地运行它并得到结果。后来,我扩展了每一部分,同时保持管道工作。你可以在这里了解更多信息:
[## 成为数据科学家的第一件事应该是学习“逻辑回归”的 5 个理由
学习逻辑回归首先要熟悉流水线,不要被花哨的算法淹没。
towardsdatascience.com](/5-reasons-logistic-regression-should-be-the-first-thing-you-learn-when-become-a-data-scientist-fcaae46605c4)
2。一次从简单和复杂的事情开始
一旦你有了一个可用的管道,开始扩展和改进它。你必须一步一步来。理解什么导致了什么是非常重要的。如果你一次引入太多的变化,很难判断每个变化是如何影响整个模型的。尽可能保持更新的简单和整洁。不仅更容易理解它的效果,而且一旦你有了新的想法,重构它也更容易。
总结这两个主题,我推荐阅读这篇安德烈·卡帕迪的帖子,它主要是关于神经网络的,但其中一些步骤对任何模型都是正确的:
[## 训练神经网络的方法
几周前,我发表了一篇关于“最常见的神经网络错误”的推文,列出了一些常见的问题,涉及…
karpathy.github.io](http://karpathy.github.io/2019/04/25/recipe/)
3。质疑一切
现在你有很多事情要做,你有一个工作流程,并且你已经做了一些改变来改善你的结果。理解为什么很重要。如果你增加了一个新的特征,它帮助模型更好地概括,为什么?如果没有,为什么没有?也许你的模型比以前慢了,为什么?你确定你的每个特性/模块都像你想的那样工作吗?如果不是,发生了什么?
这类问题应该在你工作的时候出现在你的脑海里。为了得到一个非常好的结果,你必须理解你的模型中发生的一切。
4。体验多,体验快
在你质疑了一切之后,你陷入了…嗯,很多问题。回答这些问题的最好方法是实验。如果您已经做到了这一步,那么您已经有了一个工作管道和一个写得很好的代码,所以进行实验不应该浪费您太多的时间。理想情况下,你可以同时进行多个实验,这将帮助你回答问题,提高你对什么可行什么不可行的直觉。
实验内容:添加/删除特征,改变超参数(不仅仅是神经网络!矢量化参数、标准化或特征选择技术也是您需要调整的模型的超参数)、改变架构、添加/删除数据等等。
5。分清轻重缓急,集中精力
在这一点上,你做了很多工作,你有很多问题,一些答案,一些其他的任务,可能还有一些新的想法来改进你的模型(或者甚至是做一些完全不同的事情)。
但并非所有这些都同等重要。你要明白什么是对你最有利的方向。也许你想出了一个绝妙的主意,稍微改进了你的模型,但也使它变得更加复杂和缓慢,你应该继续这个方向吗?这取决于你的目标。如果你的目标是发布一个最先进的解决方案,也许是的。但是如果你的目标是将一个快速下降的模型部署到产品中,那么你可以将时间投入到其他事情上。工作的时候要记住自己的最终目标,努力理解什么任务/实验会让你更接近它。
6。相信你的指标
如前所述,了解什么可行,什么不可行非常重要。但是你怎么知道什么时候有用呢?您根据一些验证/测试数据评估您的结果,并获得一些度量!你必须相信这个标准!可能有一些理由不相信你的指标。例如,它可能是错误的。您的数据可能是不平衡的,因此准确性可能是您的错误指标。你的最终解决方案必须非常精确,所以也许你对精确比回忆更感兴趣。你的衡量标准必须反映出你想要达到的目标。另一个不相信你的度量标准的原因是当你的测试数据不干净或者有噪音的时候。也许你从网上的某个地方得到了数据,但你不知道那里到底有什么?
一个可靠的衡量标准对快速进步很重要,但是衡量标准反映你的目标也很重要。在数据科学中,我们可能很容易说服自己,我们的模型是好的,而实际上,它做得很少。
你可以在这里阅读更多关于我们如何欺骗自己相信我们的模型是好的,但实际上不是:
最近,我读了达雷尔·赫夫写的《如何用统计撒谎》一书。这本书讲述了如何利用统计学来…
towardsdatascience.com](/how-to-lie-with-data-science-5090f3891d9c)
7。发布/部署工作
反馈是任何工作必不可少的一部分,数据科学也不例外。当你知道你的代码会被其他人审查时,你会写出更好的代码。当你工作时知道你需要向别人解释,你会理解得更好。它不必是一个花哨的期刊或会议或公司生产代码。如果你正在做一个个人项目,把它开源,写一篇关于它的文章,发给你的朋友,向全世界展示它!
并非所有的反馈都是积极的,但是你可以从中学习,并随着时间的推移不断提高。
8。大量阅读并保持更新
我可能不是第一个建议跟上最新进展以提高效率的人,所以与其谈论它,我只告诉你我是怎么做的——好的旧时事通讯!我发现他们非常有用,因为他们基本上是跟上最新文学的人,挑选最好的东西并发送给你!
一些例子:
- 数据科学周刊快讯【https://www.datascienceweekly.org/】——
- 塞巴斯蒂安·路德报道的 NLP 新闻—http://newsletter.ruder.io/
- https://www.deeplearning.ai/thebatch/吴恩达的那批
9。好奇
当阅读最新最酷的东西时,不要把自己局限在你感兴趣的领域,试着去探索其他(但相关的)领域。这在几个方面可能是有益的。你可以找到一种在一个领域有用的技术,这种技术在你的领域非常有用,你可以提高理解复杂想法的能力,你还可以找到另一个你感兴趣的领域,这样你就可以扩展你的技能和知识。
结论
如果你有效率,你会得到更好的结果并享受这个过程。虽然以上所有的话题都很重要,但如果我必须选择一个,那就是“优先和专注”。对我来说,所有其他的话题最终都会指向这个话题。成功的关键是做正确的事情。
作为一名数据科学家,如何应对 Docker 的危险
您需要了解的术语、语法和 CLI 命令将您的项目提升到一个新的水平
来源:https://www . docker . com/sites/default/files/D8/2019-07/horizontal-logo-monochronous-white . png
Docker 将允许您打包并在任何地方部署您的数据科学解决方案(通常迁移到云中)。它可能是数据科学工具 bet 中的一个重要工具,可以将数据科学工作从理论和研究转变为实践,并为您的业务增值。
Docker 是什么?
点击这里查看来自维基百科的无聊的正式定义。然后继续我下面的描述。
Docker 可以让你捆绑你的代码在一个完全可复制的环境中运行所需的一切,这个环境很容易带到其他机器上*(比如在云中运行)*。Docker *(以及像 Kubernetes 这样的容器管理系统)*将这些包相互隔离。这带来了额外的可靠性和安全性,因为如果我的代码被黑客攻击或崩溃,它不会影响你的代码。
那么 Docker 像虚拟机吗?
是的,有点。在互联网上了解 docker 很多的人会告诉你它实际上不像一个虚拟机因为一些令人困惑的计算机术语。然而,这是一个有用的类比。您可以在同一台电脑上运行多个不同的、完全隔离的应用程序。有了虚拟机,每个新应用程序都有了完整的操作系统;而 docker 只带你需要的东西。这是它轻量级、可伸缩、甚至更安全的原因。
Docker 和虚拟机之间的架构差异
开始时你需要知道的
- 术语
- 流行的 Dockerfile 文件步骤
- 常见 CLI 命令
术语
Dockerfile
这只是一个文本文件,包含了构建 docker 映像的具体说明。使用该文件的一些常见操作包括:指定基本映像、复制所需文件、定义环境变量、安装第三方包,以及编写从该映像启动容器时将运行的默认命令。
图像
从 Dockerfiles 创建一个图像*,并用于创建 Docker 容器。图像一般存储在 Dockerhub ( public )、Elastic Container Registry(AWS)和 Artifactory ( other )这样的存储库中。*
容器这是实际完成工作的地方。创建新容器将运行您的代码。一些 docker 容器被构建为运行一段时间&之后关闭(如培训作业或数据处理作业);其他的已经启动并永远保持运行(像 web 服务、API 端点、web 应用仪表板)。
如果你熟悉面向对象编程,那么“图像”就像一个类定义,而“容器”则是那个类的一个实例。一旦你有了一个类定义,你可以创建任意多的类实例。
注册表
想到一个 GitHub 的储存库,但是对于 Docker 图片。您可以在本地使用 docker 文件来创建图像。一旦你完成了这些图像的开发,你可以把它们推到一个注册中心,在那里它们将启动容器,或者其他人可以把它作为他们项目的基础图像。
这是每当从映像启动容器时运行的 CLI 命令。它通常由 docker 文件末尾的ENTRYPOINT
或CMD
步骤指定,或者从基本映像继承。您希望该命令启动完成任务所需的任何脚本或代码。(阅读更多)
标签
这是一种给图片版本命名的方式。这有助于跟踪一段时间内图像的版本历史(类似于 git 标签如何提交);或者只是用一个简单的名称来引用该图像。(阅读更多)
基础映像
这是 docker 映像的起点,通常在 docker 文件的FROM
语句中定义。几乎所有的东西都有一个基础图像。任何映像都可以是另一个映像的基础映像,只要它可以从注册表中访问。最基本的基础映像只是一个操作系统。
一些可能有用的基础图像:
流行的 Dockerfile 文件步骤
FROM
这个命令在每个 Dockerfile 文件中都有。它定义了您将要构建的基础映像。您必须能够访问包含基本映像的注册表。
这将把文件从你的本地机器(或者你正在构建映像的地方)复制到 docker 映像(以及随后的容器)。这些文件应该相对于当前工作目录,您将从该目录构建 docker 映像。
ENV
这个为你的 docker 容器设置 OS 环境变量 *注意:用这个代替 *RUN export*
。(下面是为什么)
RUN
这将运行 OS CLI 命令。通常,这样做是为了编辑基本文件系统或安装第三方软件包。
WORKDIR
设置执行入口点或 CMD 的起始目录。
ARG
允许您通过docker build
命令将参数传递到 docker 文件中。
EXPOSE
这公开了一个端口,世界可以通过运行容器的机器访问这个端口。如果您有一个 web 应用程序、仪表板或 API 端点,那么您需要公开一个端口。很多时候这已经由你的基本形象来完成了。
ENTRYPOINT
或CMD
新容器启动时将运行的 CLI 命令。这应该调用您希望 docker 容器做的所有其他事情。
ENTRYPOINT 和 CMD 的区别在于 CMD 可以被覆盖,而 ENTRYPOINT 不能被覆盖。(阅读更多)
无论如何 ENTRYPOINT 都会运行。CMD 既可以单独运行,也可以用于向 ENTRYPOINT 添加额外的参数。CMD 将指定一些缺省值,在容器启动时运行,但是该参数或命令可以通过docker run
覆盖。
常见 CLI 命令
Docker 构建命令
最简单的版本就是在当前目录下构建 docker file:
docker build .
接下来你可能想做的是添加一个标签(注册表&版本名):
docker build -t localRegistryName:TagName .
然后,您可能想用ARG
将一些参数传递到 docker 文件中:
docker build \
-t localRegistryName:TagName \
--build-arg DEPLOY_ENV=dev \
.
复杂应用程序的另一个选择是,您可能将 docker 文件隐藏在一个文件夹中,或者想要从父目录中复制一些文件。您可以指定-f
作为 docker 文件的路径。
docker build \
-t localRegistryName:TagName \
--build-arg DEPLOY_ENV=dev \
-f path/to/the/Dockerfile \
.
Docker 运行命令
从映像运行容器的最简单方法:
docker run localRegistryName:TagName
端口映射
注意:第一个 PORTNUM 是您想要映射到的本地机器上的端口,第二个 PORTNUM 是您想要查看的来自 docker 容器的公开端口。端口号可以不同,但这只会使事情变得混乱。
用 Bash
调试另一件你可能想做的事情是用 CLI 探索你的容器。您可以这样做来检查诸如:我的代码文件被正确复制了吗?环境变量定义正确吗?
docker run -it localRegistryName:TagName /bin/bash
注意:要实现这一点,有几件事必须是真的。1)您的映像需要安装 bash。所以这不能在 windows 容器上工作。2)你需要用 CMD 代替 ENTRYPOINT。 */bin/bash*
用于在 docker 容器启动时覆盖 CMD。入口点仍然会运行并阻止您运行 bash 的尝试。
多方面的
您可以使用
docker image ls
docker container ls
轻松列出您当前的所有图像或正在运行的容器
您可能忘记标记图像,或者您只想添加另一个标记。您可以通过引用其他标签或其图像 ID 将标签添加到图像中。(可以通过列出所有图像找到图像 ID)
docker tag OldRegistry:OldTag NewRegistry:NewTag
或
或docker tag b25r13lkj89 NewRegistry:NewTag
您可以通过
docker stop ContainerName
或docker kill ContainerName
停止当前正在运行的集装箱
清理你的系统
有不同的方法可以删除旧图像来清理你的工作空间。
docker rmi RegistryName:TagName
将删除 1 幅图像
docker system prune
将删除所有未标记的图像&不与运行中的容器关联
docker system prune -a
将删除所有内容
结论
对于许多数据科学家来说,Docker 有一条陡峭的学习曲线,但是一旦你越过了这条曲线,你就会极大地提高你的工作生产能力。
感谢阅读!
如果有任何我需要补充或修改的地方,请在评论中告诉我,欢迎反馈!
如何有效地找工作
从 IBM 过渡到 myTomorrows 的经验教训
克里斯汀·休姆在 Unsplash 上拍摄的照片
上周,我离开了 IBM,加入了一家名为 myTomorrows 的公司。在这篇文章中,我将分解我在寻找、发现和申请一份新工作时的决策过程,以帮助你寻找工作。我还会谈谈我是如何设法找到一份我认为自己会非常开心的工作的。这个故事对任何想得到自己想要的工作的人都有借鉴意义。
首先,我所说的工作类型是什么意思?正如我在上周的文章中提到的,数据科学以各种形式和规模出现。仅仅是“数据科学家”这个头衔可能不会让你开心。你的工作包括你的职责、你做的项目类型、你与人交往的次数以及它可能变得有多忙/有多有压力。每个公司和每个职位都有不同的层次。这就是为什么上周我将数据科学职位分为六个类别,每个标准的水平相似。
为什么我想离开?
直到上周一,我还在咨询行业。我及时意识到,尽管我喜欢参与各种行业的各种项目,但我并不快乐。我有两个不开心的原因:我没有雄心去成长为顾问角色提供给我的方向,我对我在这个世界上的影响力不满意。
当然,这些都是非常主观的价值观。你必须决定,什么对你来说是重要的。一开始你可能会弄错,就像我一样。我以为做很多不同类型的项目会让我开心。但事实证明,对我来说,产生积极的影响比做各种各样的项目更重要。
意识到这一点后,我的第一反应是去 LinkedIn 和类似的网站寻找空缺职位。过了一会儿,我一无所获。我对自己的求职感觉不太好,我觉得自己没有取得任何进展。这时我意识到记住你的优先事项和理由的重要性。
求职
我离开的主要原因是,我没有任何在公司职业阶梯上往上爬的野心,而且这些项目没有让我满意。但当我开始找工作时,我又一次申请了我知道情况会非常相似的地方。我简直忘了,我想做的不是“尽快离开”,而是“找到一个更适合我需要和想要的职位”。这是许多人在找工作时犯的一个错误。只是要确保记住你最初为什么进入这个搜索,记住你的优先事项,不要把它们延伸得太远。
例如,如果你想成为一名数据科学家的原因是从事机器学习工作,不要仅仅因为头衔是“数据科学家”,就申请一份可能让你从事简单的仪表板构建工作的工作。你的精力最好花在申请对你有利的地方。
当我第二次意识到我申请的地方都不对时,我改变了策略。我采用了自上而下的方法。这一次,我写下了我对一份工作的期望。首先是必需品:
- 我想对人们的生活产生积极的影响
然后是富人:
- 我想在医疗保健或相关行业工作
- 我想要一个能让我学习的团队
- 我想接受挑战
- 我想承担多重责任,而不仅仅是数据处理
- 我想要一个小一点的公司,那里的事情不是很官僚
从这一点开始,我想确保我有效地利用了我的精力。我想知道的是:专门为对人们的生活产生积极影响而创建的公司有名字吗?首先想到的是非营利组织。但我知道也有一些营利性公司专注于对世界产生积极影响。
显然,他们有一个名字,叫做社会企业。我从 Ekaterina Stambolieva 那里了解到这一点,她是一家社会企业的创始人,也是播客的嘉宾之一。我们聊了聊我想要什么,我为什么想要它,以及我如何在社会企业或非营利组织中使用我的技能(在这种情况下是数据科学技能)。这次谈话节省了我很多时间和精力,因为它证实了我对进入非营利领域的怀疑。因此,我更关注社会企业。
如果你认识的人在和你想去的地方相似的地方工作,向他们伸出援手,询问他们的旅程。你会学到很多关于如何找工作的知识。这就是为什么我在播客上向我的嘉宾询问他们的职业生涯。
我的下一步是找出符合我必须拥有和必须拥有的公司,看看我是否认识在那家公司工作的人。在我找到几个人后,我介绍了我自己和我要找的东西。这里的关键是我保持了非常诚实的对话。我确保尽我所能做好自己。我没有发千篇一律的介绍信息。我全力以赴,考虑我在职业生涯中的位置、我想要什么以及他们能如何帮助我。
我相信找到一个能让你快乐的地方的唯一方法是在开始时尽可能多地展示你的本色。我想在一个不需要像完美的专业工作者那样摆姿势的地方工作,所以我确保我的电子邮件和信息听起来不像是公司的。当你申请的公司以同样的语气回复时,神奇的事情就发生了。这时你就知道找到匹配的了。如果你不能认同一家公司的基调、性格或氛围,就没有什么理由去尝试成为它的一部分。几乎可以肯定的是,当你开始的时候,你不会觉得你属于那里。
当然,如果对你来说,在高度专业化和公司化的环境中工作是非常重要的,那就表现出来。寻找能给你带来渴望的公司生活的地方。
评估适合度
我找工作的最后一步是评估我的选择。正如我之前在另一篇文章中提到的,在面试中提问是个好主意。这正是我所做的。我问了很多问题。我这样做不仅仅是为了表示我感兴趣。我真的很想知道答案,想知道我将会陷入什么样的境地。
当我准备我的问题时,我把我必须拥有的和应该拥有的牢记在心。我想知道公司的主要使命是什么、文化、公司的规模、他们的商业模式是什么(比如他们如何赚钱)、对我的期望是什么等等……这是重要的信息,让我最终决定是继续发展公司还是继续寻找机会。
求职总是被描绘成人们拼命找工作,而公司在其中随心所欲地选择工作。但我不这么认为,我认为你也应该改变找工作的心态。归根结底,你不能让公司来决定是否选择你。接受或拒绝一个潜在的职位也取决于你。你需要拥有这个决定。把它看作是试图满足你要求的公司,如果你找到一家确实符合你要求的公司,全力以赴,展示你最大的努力。
我整个找工作的过程花了很长时间,有比我在这里提到的更多的起伏,我有时感到绝望,无用和无助,但最后一切都解决了。上周二我已经开始了我的新工作,我感觉非常适合。
简单回顾一下:
- 确定你离开的原因
- 确定你的优先事项并坚持下去
- 对你必须拥有和想要拥有的东西有一个明确的想法
- 向在你羡慕的地方工作的人寻求帮助,询问他们的旅程
- 与你想去的公司沟通时,做你自己
- 客观地评估你的选择
我希望这篇文章能给你一些如何找工作的建议,帮助你找到一份让你开心的工作。不要忘记对自己诚实,每一步都要诚实。
👉对数据科学领域以及如何开始学习感到困惑? 免费参加数据科学入门迷你课程 !
如何用 Python 花式
Python 很酷。真的很酷。然而,我们中的许多人都是从不同的编程语言开始的,尽管我们很容易就学会了 Python,但我们仍然不擅长 Python 的做事方式。这篇文章介绍了我这些年来学到的一些技巧和实际例子。希望你喜欢它。
更新(2020 年 6 月 25 日):
最新的技巧在 Github 上。启动存储库,与他们保持联系。你也可以在 LinkedIn 上关注我的标签。
-1.有用的键盘快捷键
缩进代码Press Tab.
取消代码Press Shift + Tab.
要注释或取消注释一堆代码,选择它并为 Mac 选择Press Contrl + / or Command + /
。
要给某物加上引号,选择它,然后Press Shift + ' or Shift + ".
0.活力
Zip 可以用来一起遍历两个列表。
1.列出理解
Python 最棒的地方在于,你可以用如此少的代码完成如此多的工作。以列表理解为例。如果您想创建某个范围内的数字列表,您可以按如下方式轻松完成:
您还可以非常容易地对其应用条件。
实际例子:
列表理解的一个非常酷的用例是将一个数字转换成它的单个数字。诀窍是将数字转换为字符串,迭代单个字符,将它们转换为 int 并存储在一个列表中。我们可以遵循所有的步骤
或者一起做
这也让我想起了 map() 的功能。
2.使用*运算符
*运算符可用于重复字符串。举个例子,
现在你可能不想打印很多次“Python 很酷”,但是你应该用它来做这样的事情
*操作符也可以用来解包列表之类的可重复项。
你也可以做一些像
当我们有一个事先不知道参数个数的函数时,通常使用这个操作符。我们将它与*args 和**kwargs 一起使用。
我们传递给函数的参数存储在*args 中。**kwargs 将存储命名参数或字典。
3.分音
您可以对函数做的其他事情是创建部分函数。它们是什么?假设我们有一个计算单利的函数。我们可以为一些参数设置默认值(从右到左)。
但是,我们不能以这种方式仅设置 p 的默认值。
我们可以使用部分函数来实现。在部分函数中,我们从左到右为一些参数设置默认值,然后将其用作函数。让我们只为 p 设置一个默认值。
尽管分部从左到右工作,我们也可以通过使用命名参数跳过中间的参数。
4.维护
测试驱动开发意味着你写测试,然后你写代码通过这些测试。您可以使用 断言在 Python 中编写迷你测试。 例如,你可能想确定某个物体的形状是你所期望的。
您也可以在逗号后编写自定义错误信息。编写这些小测试对于确保你的代码部分按预期工作非常有帮助。它还将帮助您高效地调试东西。
5.发电机
我们可以用 Python 中的 yield 关键字代替 return 关键字来创建一个生成器。使用生成器的好处是它可以即时生成东西,然后忘记它们。这样可以节省内存。
这就是本文的全部内容。这是一项正在进行的工作。当我遇到更多的东西时,我会不断地添加到 Github 库中。如果你有任何让你生活更轻松的建议,请在下面的评论区提出来,我们都会从中受益。
~快乐学习。
如何在 Python 中熟练使用 OOP
本文基于 Python 中的神奇方法,通过 Python 中的 OOP 让我们的生活变得更加轻松。希望你喜欢它。
如果你不熟悉 Python 中的 OOP,我强烈推荐科里·斯查费的 YouTube 播放列表。
什么是魔术方法?
魔术方法是 python 中的特殊方法,以 2 个下划线开始和结束。它们也被称为 邓德 。我们在 Python 中做的很多事情都是在幕后使用 dunder 方法 完成的。看看下面的例子。
很酷,不是吗?我们将为我们的类实现这些方法,使它们更加直观。让我们看看怎么做。
1.init()
第一个神奇的方法是 init 方法。在 Python 中,它被用作类的构造函数。
2.str()
当我们创建类的对象时,我们希望能够看到它们内部的内容。我们希望我们的类有一个人类可读的表示。这就是邓德海峡的用武之地。
还有另一个方法叫做 repr() 可以用来返回对象的状态,但是在本文中我们将跳过它。
3.len()
现在假设我们有一个存储学生详细信息的班级学校。我们想要一种简单的方法来统计学校的学生人数。
4.getitem()
我们还希望有一种简单的方法来访问特定学生的记录…
5.setitem()
…并编辑它们
6.getattr()和 setattr()
当您创建一个类来获取和设置其属性时,这些方法在 Python 中自动可用。因此我们不需要定义它们。然而,如果我们想改变他们的行为,我们可以这样做。
例如,我们可以修改***_ _ setattr _ _()***的行为,以便在设置属性时将其存储在一个列表中,这样我们就可以轻松地访问所有属性。
7.iter()
我们可以使用 iter() 方法创建一个迭代器。然后我们可以用它一次访问一个学生。
8.__ 加 _ _()等数学方法
假设我们有一个名为 Cost 的类。
能够对这些物体进行数学运算是有意义的。这将使我们的代码更加直观和优雅。
结论:
这些是我发现非常有用的一些简单的 dunder 方法。如果你想了解更多,下面列出了一些你可以研究的方法。如果你有任何建议,请在评论中提出来,我会把它们写进文章里。
More methods
__new__
__del__
__enter__
__exit__
~快乐学习。
如何擅长算法?
我作为计算机科学本科生学习算法和数据结构的经历
如果你想让计算机做一件事,你必须告诉计算机怎么做。你必须编写一个计算机程序,一步一步地解释它必须完成什么任务以及应该如何完成这些任务。这就是算法发挥作用的地方。
算法是计算机用来解决给定问题以达到最终目标的一组指令。
根据我的经验,学习算法对于设计和开发高效的计算机程序至关重要。在这篇文章中,我想与你分享我在本科学习算法的经历,以及它如何让我在职业生涯和学术工作中受益。
初次相遇
我在中学的时候开始编程,是用 Visual Basic,制作计算器和交通灯模拟器。后来,我学习了 HTML 和 Java。那时,我开发桌面应用程序和 web 应用程序。这仅仅是编码,有时我不知道底层的逻辑。
进入大学并选择计算机科学与工程作为我的专业后,我在第二年开始学习数据结构和算法。这是一门必修课,每个人都必须上。
从程序员到软件工程师
数据结构和算法课程是我理解计算机编程的一个转折点,它让我更像一个软件工程师而不是程序员来思考。我为什么这样说呢?让我给你举几个例子。
示例 1:排序算法
假设我们正在制作一个在线购物应用程序。我们希望让用户以价格递增的顺序查看项目。为此,我们必须按价格对商品进行分类。作为一名程序员新手,我会将价格添加到一个记录了价格指数的数组(或列表)中,然后简单地调用数组的内置sort()
方法。在sort()
方法内部实际发生了什么?我以前申请的时候不知道具体的方法。
排序算法是大学数据结构和算法课程中首先教授的基本主题之一。
在了解了不同的排序算法后,我意识到并不是每种排序算法都适合每项任务。它们具有不同的时间复杂度,并且随着数据的大小而变化。最重要的是,在开发应用程序时,它们的运行时间非常重要,即使只有几秒钟。此外,我还学习了就地排序算法(就地排序元素)和非就地排序算法(排序时需要额外的空间来存储元素)。这些事情让我深入思考,在考虑时间和内存限制的同时,我应该为特定的应用程序使用什么样的排序算法。
示例 2:解析数学表达式
当我们在计算器或 MS Excel 等电子表格软件的单元格中输入数学表达式时,它会自动计算并返回答案。你有没有想过这个表达式是如何被求值的?我们必须开发一个电子表格软件并实现一个表达式解析器。我就是在这里了解到流行的 调车场算法 。它利用队列来存储值,利用堆栈来存储操作符。我了解了在数据结构和算法课程中学到的队列和堆栈数据结构的实际应用,并理解了这些选择背后的逻辑。在我自己实现了调车场算法后,我为自己感到非常自豪,尽管许多实现已经可用。😃
示例 3:使用列表、集合和字典
每当我需要存储一堆值时,我会使用一个列表。当时,我并不关心我是否需要保持订单或允许副本;我会简单地使用一个列表。在我学习了列表、集合和字典之后,我意识到这些可以用在不同的场景中,并且使用一个比另一个更能加速我的代码。例如,如果我想检查一个值的成员资格,在集合或字典中(花费常数时间)比使用列表(花费与列表长度成比例的时间)要快得多。此外,列表允许您保留重复项,而集合不允许重复项。
图片由皮克斯拜的 Gerd Altmann 提供
这是我开始从程序员转变为软件工程师的一些经历。当我改用合适的数据结构或更快的算法时,我的代码性能有了显著的提高。
如何入门?
学习编程概念
在学习计算机科学中的算法之前,我对编程概念有很好的理解,比如变量、函数、类,尤其是面向对象编程(OOP)的概念。这些概念是理解计算机科学中更高级概念的基础。
学习和理解算法及其概念
除了我的课程材料,我还遵循了我们推荐的教科书 托马斯·h·科尔曼、查尔斯·e·莱瑟森、罗纳德·里维斯特和克利福德·斯坦的《算法导论》。您可以从基础开始,例如
- 时间和空间复杂性分析
- 大 O 符号
- 递归
- 数组、矩阵、链表、栈、队列、树等基本数据结构。
- 基本算法,如搜索算法和排序算法。
为了分析算法,时间和空间复杂性分析是一个非常重要的主题。然后,您可以进入更高级的算法,如图形算法。
图片来自 Pixabay 的 Dariusz Sankowski
要记住的最重要的事情是,你必须清楚地理解算法内部发生了什么。我曾经举一些简单的例子,应用算法,看看每一步会发生什么。算出例子帮助我更好地理解算法中发生了什么,我从来不需要记忆算法。如果我被要求为一个算法写一个伪代码,我可以很容易地联系到一个例子并计算出来,而不是必须精确地记住每一步。
用代码弄脏你的手
在我们的课程中,我们被要求用它们的基本操作从零开始实现不同的数据结构。我还记得用 C++实现二分搜索法树(BST)时的操作,包括插入、删除、搜索、前序遍历、后序遍历和无序遍历。我们必须创建一个 BST 类,并将所有这些操作作为函数来实现。我们甚至被要求用不同大小的数据集来比较某些操作的运行时间。这是一次很好的学习经历。我从这次练习中学到了很多,并对操作有了很好的理解。这些体验式学习过程帮助我更好地掌握了算法的概念。
可以开始用支持 OOP 的语言编码了。我发现下面的代码非常容易学习和编写。
- C++
- Java 语言(一种计算机语言,尤用于创建网站)
- 计算机编程语言
如果你是初学者,我会推荐你从这些语言中的一种开始。
学习资源
在线课程
您可以从以下网站学习在线课程
- Coursera : 算法专门化,数据结构与算法专门化,算法,第一部分,算法,第二部分
- 麻省理工学院开放课件 : 算法介绍
- 可汗学院 : 算法
- Udacity : 算法简介,数据结构与算法简介,数据结构与算法简介,研究生算法简介,可计算性,复杂度&算法
- edX : 算法:设计与分析,第一部分,算法:设计与分析,第二部分,算法与数据结构,算法设计与技术,算法设计与分析,图形算法
以及更多的平台。你可以尝试提供的练习来获得更好的理解。
交互式算法可视化器
您可以尝试算法可视化平台,例如:
可以在网上找到,并且了解算法是如何一步一步工作的。
编程挑战
理解了基础知识之后,你可以通过尝试编程挑战来实践你所学到的东西。以下平台提供了不同难度级别的非常好的挑战。
你练习得越多,理解得就越好。尝试编程挑战是学习如何应用所学理论解决问题的好方法。
图片由 Lukas Bieri 来自 Pixabay
包裹
作为这篇文章的总结,我想根据我学习算法的经验总结以下 10 条建议。
- 对基础有很好的理解。
- 清楚地理解算法中发生的事情。
- 用例子算出算法的步骤。
- 彻底理解复杂性分析。
- 尝试自己实现算法。
- 记下重要的事情,以便日后参考。
- 遵循学习平台上的在线课程。
- 关注知名大学发布的在线讲座。
- 尝试编程挑战。
- 如果你在编程挑战中遇到难题,不要气馁。你可以阅读他们的教程,了解挑战结束后你卡在了哪里。
进一步阅读
如果你想了解更多关于数据结构和算法的内容,你可以看看下面的文章。
数据结构是一种在计算机中组织和存储数据的专门方法,以这种方式我们可以执行…
towardsdatascience.com](/8-common-data-structures-every-programmer-must-know-171acf6a1a42) [## 直观解释的 10 种图形算法
10 种基本图形算法的快速介绍,包括示例和可视化
towardsdatascience.com](/10-graph-algorithms-visually-explained-e57faa1336f3) [## 启发式什么为什么和如何?
启发式算法在算法开发中的理解和应用
towardsdatascience.com](/heuristics-what-why-and-how-68aafc7e1e4b) [## 自平衡二分搜索法树 101
自平衡二分搜索法树简介
towardsdatascience.com](/self-balancing-binary-search-trees-101-fc4f51199e1d) [## 值得了解的 8 种有用的树数据结构
8 种不同树形数据结构的概述
towardsdatascience.com](/8-useful-tree-data-structures-worth-knowing-8532c7231e8c) [## C++中的数据结构—第 1 部分
在 C++中实现通用数据结构
towardsdatascience.com](/data-structures-in-c-part-1-b64613b0138d)
最后的想法
别忘了,
熟能生巧!
希望这篇文章对你有所帮助和启发。让我知道你的想法。
感谢您的阅读!
干杯!
如何在数据实习中取得成功
顶级数据专业人士为实习生提供了如何最大限度地利用机会的建议
马文·迈耶在 Unsplash 上的照片
随着实习季节的到来,我们联系了一些 Alteryx ACEs ,顶级分析专家和 Alteryx 社区的参与者,看看他们会给数据分析和数据科学领域的实习生提供什么建议。
你如何充分利用实习经历?在这个独一无二的机会中,从可用的人员和资源中学到了什么?这些数据专家就如何在实习中和以后取得成功提供了他们的观点。
Jason Mack ( @dataMack ),Cigna 的分析主管
作为一名实习生,你的主要精力应该放在建立一个能帮助你获得下一份全职工作的人际网络上,或者在未来的某个时候提供帮助。让人们记住你的一个好方法是为他们解决一些问题,即使这些问题看起来很简单或很小。例如,帮助他们巩固每周电子表格的 Alteryx 工作流:如果它将他们从一周中最无聊和最可怕的 20 分钟中拯救出来,你就改善了他们的生活,他们会记住你。
妮可·约翰逊( @NicoleJohnson ),T-Mobile 的高级顾问
你应该不断地问自己,“如果呢?”无论任务或任务是什么,或者即使你只是被要求做笔记和观察,除了实习的基本职责之外,你总能找到机会扩展你的技能。例如:
- 如果你是被问问题的人,而不是仅仅观察或被告知做什么和如何做,会怎么样?如果让你自己决定,你会怎么做?
- 如果下次数据没有这么干净怎么办?
- 如果条件改变了呢?您的解决方案将如何发展并适应不确定性和不断变化的参数?
- 如果你的新观点和好奇心正是避免潜在问题或提出创造性解决方案所需要的呢?
当得到一个实习机会时,把它想象成得到了城堡的钥匙——它可能会让你越过护城河,但你仍然需要打开一些门,探索一些走廊,然后才能找到真正的宝石!
AJ Guisande ( @aguisande ),决策科学公司的服务总监
- 永远保持好奇心!
- 每天学点新东西!
- 每次都要鞭策自己!
- 完成/完成事情,即使它们并不完美。
- 对你的技能进行深思熟虑的练习。
乔·瑟皮斯(@约瑟夫·瑟皮斯),Keyrus 的高级顾问
我对实习充满热情,因为我自己的职业生涯是由两次实习开始的,我有幸参加了这两次实习。我能给的最好的建议是充分利用时间。在实习期间,参与并要求参与任何能让你在数据分析或数据科学方面获得更多经验的事情。作为一名曾经实习过并一直支持实习的数据专业人士,表现出你渴望学习是至关重要的,因为这意味着你可能会在实习期间获得更多机会。利用你在实习期间获得的关系,因为它们可以帮助介绍或推荐你在分析领域获得一个永久的职位或角色。最后,利用你的实习机会来帮助决定你是否喜欢从事数据分析或数据科学方面的职业。
Mike Barone ( @mbarone ),Paychex 的数据科学家
做一些你没有被要求做的事情。当你与其他团队成员或你的下属合作或听取他们的意见时,倾听你可以提供的一些东西,比如使用他们还没有想到或尝试过的数据。但是不要跟他们提。提前 15 分钟进来;迟到 15 分钟。拿一些你认为你可以用相对较少的开销实现的、还没有被要求的东西。也许是一个很酷的可视化。也许是一个预测模型。也许是执行过程的自动化方式。如果你能向他们展示你不仅有专业知识,而且有创新和自己解决问题的主动性和动力,这将大大有助于“哇,我们必须让这个人参与进来”的因素!
Andy Uttley ( @andyuttley ),标枪集团的咨询经理
我的建议是,试着把你的经历塑造成“浅而广”,而不是“窄而深”。我的意思是,我鼓励人们尽可能多地去体验,这是以一开始就过于“深入”任何话题为代价的。数据科学是一个巨大的领域;现在是确定你想专攻哪个领域的最佳时机,在选择你最想专攻的领域之前,实习是体验各方面的最佳方式。也要像关注技术技能一样关注人际关系。这些关系对你的持续学习和进步至关重要;你很快就会知道,每天的一部分就是给予和请求别人的帮助!
Chris Lewis ( @cplewis90 ),全食超市高级数据分析师/Alteryx 团队负责人
享受你实习的每一天,因为它会飞逝而过!我希望有机会做的一件事是让实习生了解企业可以做的不同类型的分析,以及这些类型的角色需要什么。如果你正在实习商业分析师,学习营销分析,房地产分析,金融分析,以及任何其他听起来有趣的领域!当您与其他分析团队交流时,了解影响业务的分析用例以及如何将分析应用于业务。与分析团队的业务合作伙伴交流,以了解业务运营方式及其运营的业务模式。我认为实习的最后一个好处是建立你的品牌,并理解不同的分析人员是如何建立他们的品牌的。
关于这个话题的更多信息,请务必查看本周的《改变一切》播客集,由艾斯·希瑟·哈里斯和卡梅隆·安东内尔主演。他们讨论了卡梅伦如何获得数据分析实习,并利用它成功地启动了他的分析师职业生涯。
对于实习生和其他寻求数据分析和数据科学新机会的人来说,一定要看看 ADAPT ,它提供免费培训和来自 Alteryx 和 Udacity 的证书。
原载于 Alteryx 社区 。在 Alteryx 数据科学门户 上找到更多资源。
如何成为贝氏
概率论
频率主义者和贝叶斯统计的根本区别
贝叶斯方法和频率主义方法的区别在于对概率的解释。照片由上的爆裂未爆裂
贝叶斯统计方法是频率主义方法的有力替代。在这篇文章中,我们将探索贝叶斯观点的基础,以及它如何与频率主义观点相区别。我们不会以纯技术的方式推导贝叶斯定理,而是试图理解其背后的原理。
一切都从概率开始。概率论是统计学和数据分析的基础。它已经是概率的定义,或者说观点,在这里,贝叶斯方法和频率主义方法分裂了。你可能会问,概率怎么会有不同的观点。毕竟概率应该是客观的,而不是主观的。这只是部分正确。假设你被要求为下面两个硬币投掷系列的结果分配一个概率(正面 H,反面 T):
- T T T T T
- H T T H T
这个问题没有很好的定义,可能会有歧义。如果你想计算确切序列的概率,你会得出这样的结论:每一个 n 次抛硬币的序列都有一个概率(1/2)^n,在这个例子中是 1/32。然而,在我们的日常生活中,我们可能会对连续 5 条尾巴的结果感到惊讶。也许我们更想回答这个问题:观察到一定数量尾部的概率是多少?这个问题可以用二项式分布来解决。第一个序列的概率是 1/32,第二个序列的概率是 10/32。突然,第二种结果的可能性增加了十倍。在这个例子中,你可以看到一个问题没有内在的概率,但是它总是必须被指定,并且可能取决于个人的观点,或者你想要回答的特定问题。在这里,我们甚至没有谈到隐含的假设,即我们正在使用一个公平的硬币,或者它可能会落在一边。
我们确定,概率的解释可能取决于你想回答的问题。这在频率主义者和贝叶斯方法之间有什么不同?
- 频率主义者将这种概率视为在大量试验中相对频率的极限。
- 贝叶斯认为概率是一个的信任度。
这是什么意思?假设你想推断一枚硬币出现正面的概率。一个典型的频率主义者在实验后得出的结论是:
在观察了 100 次抛硬币中的 58 次正面后,我估计观察到正面的概率是 58%。
贝叶斯可能会说:
从以前的经验来看,我们很可能有一个公平的硬币。在观察到 100 次抛硬币中有 58 次正面朝上后,我更新了先前的信念。现在最有可能的值是 54%。
为了更清楚地说明这种区别,我们将看另一个例子。
抽奖问题
乔·耶茨在 Unsplash 上的照片
想象一下,你参加了一个抽奖活动,人们可能会购买一定数量的彩票,其中一些将会获奖。你想观察比赛一段时间,以估计你的胜算。你观察到 10 个人买了一张票,其中 5 个人赢了。按照频率主义者的方法,合理的中奖概率估计为 50%(你将自己的数据考虑在内,用 5 张中奖彩票除以 10 张已购买的彩票得出结论)。但是如果你只观察到一个人买了一张票并且这张票赢了呢?你估计获胜的可能性有多大?很明显,以前使用的直观方法不再有效,因为你可能从经验中知道 100%的胜率是非常不可能的。
我们如何将这些先验知识融入到我们的评估中?1772 年,大卫·休谟得出结论[1]:
因此,如果我们忙于论证,相信过去的经验,并把它作为我们未来判断的标准,那么这些论证就只能是或然的[……]
这意味着如果我们想用先验知识更新我们的数据,我们需要一个概率观点。在下文中,我们将推导出如何在贝叶斯框架内实现这一点。为了解决我们的抽彩问题,朝着正确方向迈出的一步是提出这样一个问题:给定一个模型,观察到我们的数据的概率是多少?为了做到这一点,我们首先要建立一个模型。
可能性
抽彩问题可以用二项式模型来描述,我们可以将观察到从以中奖机会为条件的 N 张已购买彩票中 r 张彩票中奖的概率写成:
二项分布
给定一个模型,我们的数据的概率称为似然。对于上面的两种情况( N=10 、 r=5 和 N=1 、 r=1 ),可能性如下:
抽彩问题两种情形的可能性
在第一种情况下,具有最高可能性的 q 的值是 q=0.5 ,这也是我们根据频率估计得出的结果,而接近 0 或 1 的极值具有低值。对于第二种情况,对于 q=1 ,可能性最高,但是 q 的较低值也具有非零可能性。需要注意的是,可能性不是概率分布。你可以很容易地看到,显示的可能性的面积小于 1。
贝叶斯定理
我们谈完了吗?不,在给定我们的模型 p( data |q) 的情况下,可能性给出我们数据的概率
,而不是概率分布。我们真正想知道的是给定我们的数据 p(q| 数据 ) 我们的模型的概率。这两者之间的差别是巨大的。在给定数据的情况下,您希望选择概率最高的模型,而不是最能描述数据的模型。为了将可能性转换成概率分布,我们需要贝叶斯定理:
贝叶斯定理
p( 数据 ) 称为边际似然,或模型证据。而 p(q) 称为先验。先验正是我们可以将先验知识引入等式的地方,它将 p(q| data ) 与可能性区分开来。边际可能性是正态分布。
结论
我们看到,频率主义者和贝叶斯统计方法之间的根本区别在于对概率的解释。为了用贝叶斯方法思考,你必须调整你解释概率的方式。频率主义者将概率定义为长期频率,而贝叶斯主义者将其视为一种信任程度。这意味着贝叶斯特别开放,可以通过先验知识将先前的知识纳入他的计算中,还可以为只发生一次的事件分配概率。我希望这些概念能帮助你成为真正的贝叶斯主义者。
你可以在这里找到贝叶斯分析的完整例子。
现实生活中贝叶斯分析的逐步演练
towardsdatascience.com](/performing-a-bayesian-analysis-by-hand-c589ab992916)
进一步阅读:
埃德温·t·杰恩斯概率论
参考资料:
[1]大卫·休谟,一个关于人类理解的调查,1772 年
如何成为一个更好的讲故事者:3 个要点
伟大的电影、演讲和商业展示都有一个共同点:情感弧线。它如何给你的故事增添趣味?
更新:这篇文章你可以在 乌克兰语 (感谢卡特琳娜·莫什科拉!)
你在正在进行的疫情中发起了一个数字化转型的倡议。您对这项巨额投资感到非常兴奋,它有可能解决您的组织面临的远程工作挑战。
然而,执行委员会对你的发言反应冷淡。你发现业务团队不能分享你的兴奋。您的技术团队背负着多重优先任务,担心这会导致更多的工作压力。
我们不是经常发现自己处于这样的情况吗?
即使是最好的计划也会因为无效的沟通而失败。行业报告称,糟糕的内部沟通每年会给组织造成超过 370 亿美元的损失。然而,我们并没有把太多的注意力放在解决我们的沟通问题上。
让我们来看看大片、明星产品发布和成功的营销活动之间的相似之处。通过清晰的例子,我们将讨论技术领导者如何转变为故事讲述者。
技术领导者能从专业的故事讲述者身上学到什么?
想象一下你最喜欢的电影。很可能你很久以前就看过了。但我敢打赌,它对你记忆犹新,就像你几周前看到的一样。是什么让这些电影如此令人难忘?
研究人员称,伟大的电影、演讲和商业展示之间有着更深层次的联系。这是情感弧线,也称为“故事的形状”情感弧线是故事中的一系列情感起伏,像过山车一样吸引着观众。
说书大师分析通俗故事的形态,构建它们的情感弧线。一个挣扎中的男孩与他的女孩重聚的情节已经是老生常谈,但它从未失败过。还记得《风月俏佳人》或者《恋恋笔记本》吗?他们玩弄久经考验的“男孩得到女孩”的情感弧线
这是它的形状:
图片重现自库尔特·冯内古特的演讲
看起来很简单吧?注意情绪在 y 轴上的变化。作为观众,当事情变得消极时,我们会咬指甲。我们为英雄欢呼,因为他再次站起来夺回女孩,再次提升情绪。
冯内古特重建了许多其他有趣故事的形状,包括我们这个时代最著名的故事之一——灰姑娘!所有这些的共性是什么?他们每一个人都用不同的情感弧线带领观众经历起起落落。
证明情感弧线重要性的证据
麻省理工学院的社交机器实验室和麦肯锡消费者技术团队研究了数千个 Vimeo 视频,使用高级分析建立了联系。
使用计算机视觉和音频分析的算法每秒钟为每个场景打分。在勾勒出每个故事的情感弧线后,他们使用机器学习将它们分成八个家庭。
该分析的最后一部分是引入结果——用户参与度指标,如“喜欢”和“评论”研究人员发现,由人工智能算法生成的故事情感弧线可以预测观众是否会喜欢它。
你如何运用情感弧线来改善领导沟通?
将讲故事融入你的沟通有三个步骤:
1.超越技术
想想一项技术接触到的受众。在谈论技术时,我们往往更关注它的功能。我们在涵盖“什么”和“如何”方面做得很好,但却忽略了“谁”和“为什么”
当史蒂夫·乔布斯介绍 iPod 时,他没有谈论它的酷工程或时髦的设计。相反,他告诉观众,他们现在可以在口袋里携带 1000 首歌曲。焦点完全集中在用户和他们的愿望上。
史蒂夫·乔布斯是一个讲科技故事的大师。他最大的成功来自于对客户以及为什么他们的需求没有得到满足的深刻理解。
与你的听众建立联系的旅程必须从首先想到他们开始。你的用户的需求和偏好是什么?他们是如何完成工作的,他们最糟糕的噩梦是什么?
Photo by 林信行 on Flickr
2.超越事实
让观众体验各种可能性。套用玛娅·安杰洛的话,人们可能会忘记你说过的话,但他们会记得你带给他们的感受。通常,我们的交流是对事实的枯燥背诵,这就是为什么他们没有联系。
认知心理学家杰罗姆·布鲁纳(Jerome Bruner)说,以故事形式传递的信息比事实更令人难忘 22 倍。好的故事必须生动地描述故事展开时的场景。他们必须用传达强烈情感的语言来打动人。
例如,在启动您的数字化转型时,不要仅仅量化痛点。选择一个(虚构的)用户,向我们展示她的世界。解释这些挑战不仅会导致失去商业机会,还会让用户深感沮丧。
以英雄的身份介绍你的计划,这样你就能扭转乾坤。描述结果并展示它将如何让用户摆脱痛苦。
3.超越传统叙事
引入变化来建立情感弧线。有了观众的清晰图片和与他们联系的体验信息,现在通过玩弄其情感弧线来使故事变得有趣。正如一个音符有高潮和低谷,你必须在你的交流中引入变化。
暂停一会儿,想想你上一次的商业演示。它有什么变化吗?你刚刚把好消息和坏消息排序了吗?你是怎么得出这个结论的?
我们大部分的报告都是信息性的,但是顺序性的,而且…无聊。这些见解在逻辑上是合理的,但在情感上却没有联系。
将你的交流视为一系列的部分,就像小说的章节一样。在每一部分,引入悬念的元素,梳理出解决方案。反复重复这个结构来吸引你的观众。
最后,以生动的行动号召结束演讲,激励听众采取下一步行动。
情感弧线的概念适用于各种商务交流。
每当你想抓住观众的注意力并让他们付诸行动时,这三个步骤都会很方便。
此外,记住所有的故事都是通过迭代改进的。花时间制作和评论它们。在朋友、同伴和样本观众身上测试它们。详细反馈哪些工作有效,哪些地方需要改进。然后融入变化,从头再来一遍。
祝你好运,让你的商务沟通变得生动有趣。
这篇文章最初是由 发表在 企业家项目上。增加了插图。
2020 年如何成为数据分析师
遵循这 5 个简单的步骤,向数据分析领域进行职业转型
弗兰基·查马基在 Unsplash 上拍摄的照片
对数据分析师的需求大幅增加
截至 2020 年,许多公司都采用了大数据和数据分析技术。由于这一点,对数据分析师的需求正在飙升。事实上,许多研究预测数据分析是未来的工作。
在我详细介绍如何将职业转型到分析领域之前,我将为您细分一下这个领域。许多人对什么是数据分析领域有误解,它经常与数据科学领域混淆。虽然这两个领域经常有重叠,但数据科学家的工作前景不同于分析师。
在这篇文章中,我将涉及以下主题:
- 谁是数据分析师,他们做什么?
- 为什么要成为数据分析师?
- 数据分析师和数据科学家有什么区别?
- 怎样才能成为一名数据分析师?
在开始之前,我只想放一个免责声明——本文包含 无 附属链接 。我建议的所有课程要么来自我自己的经验,要么似乎有可以帮助你在数据分析领域获得坚实基础的内容。
谁是 da ta 分析师,他们是做什么的?
简单来说,数据分析师是一个分解复杂见解以获得某种意义的人。这些见解需要回答做出商业决策所必需的问题。
例子——一个汉堡故事
XYZ 餐厅卖汉堡。他们想分析访问他们公司的顾客的总体行为。
他们还想深入了解光顾 ABC 餐厅(他们的竞争对手)的人的行为。
有了这些信息,他们希望能够更好地定位他们的公司,并鼓励更多的人光顾他们的餐厅,而不是他们竞争对手的餐厅。
一个数据分析师的任务一看:
为了响应这样的请求,数据分析师可以执行以下操作:
- 根据现有数据分析光顾 XYZ 餐厅的顾客的总体行为。这可以包括人口统计数据、客户客流量和客户收入数据。
- 制作对比参观 ABC 餐厅和 XYZ 餐厅的顾客行为的图表。
这些见解需要被翻译,并且应该能够回答有助于商业决策的问题。这些见解包括:
- 估计每天光顾 XYZ 餐厅和 ABC 餐厅的消费者人数。
- 访问 XYZ 餐厅和 ABC 餐厅的顾客的估计收入或富裕程度明细可以找到。
- 这可以提供关于每个公司如何定位的见解。
- 总的来说,会有更多的顾客光顾 XYZ 餐厅。然而,尽管顾客较少,ABC 餐厅可能拥有更多购买力较高的高端顾客。
- 人口统计的细分也可以解释很多关于光顾每家餐馆的人的情况。
- 例如,XYZ 餐厅可能会有更多带孩子的家庭选择在这里用餐。ABC 餐厅可能会有更多没有孩子的夫妇在这里用餐。
利用这些见解,XYZ 餐厅可以决定推出折扣价格来吸引客户群。他们还可以提供家庭折扣和儿童餐。最后,他们可以选择为他们的客户群制作定向广告。
这是一个非常简单的例子,但是概括了数据分析师的工作。分析师需要提出类似上述的见解,然后公司可以利用这些见解更好地了解他们的客户群。在此之后,他们可以想出不同的营销计划,以不同的方式定位他们的公司。
为什么要成为数据分析师?
如果你是一个很好的沟通者,也是一个精通技术的人,那么数据分析是适合你的。
成为数据分析师所需的技能(将在下面解释)并不难获得。你不需要花费数年时间去攻读学位或学习。
你可以很容易地在网上学到你需要知道的一切——在一年之内,甚至几个月之内。
对数据分析师的需求也非常高,不需要花费数年的严格学习就可以轻松过渡到该领域。
也就是说,这个领域确实需要你不断学习。这是一个持续的学习过程——你需要有足够的领域知识,以及从数据中查询和获得洞察力的技术知识。
您将使用的技术工具因公司而异,这意味着您需要随时学习新的工具和技术。
数据分析师与数据科学家—有什么区别?
布鲁斯·马斯在 Unsplash 上的照片
术语数据科学家和数据分析师经常互换使用。然而,这两个领域是不同的。数据分析师和数据科学家之间的主要区别在于:
数据分析师不必创建机器学习模型。
与数据科学家的工作类似,分析师从数据中获得洞察力,需要具备一些编程和统计背景。数据分析和可视化方面的知识是必要的。然而,在创建预测模型时,分析师不需要具备任何类型的知识。
如何成为一名数据分析师?
现在,我将分解你可以采取的步骤和你需要学习的东西,以便成为一名数据分析师。
编程;编排
由 Arian Darvishi 在 Unsplash 上拍摄的照片
你需要自学如何编码。作为一名数据分析师,你不需要像软件工程师那样了解很多编程知识。
然而,你需要知道足够多的编码来操作数据和提出见解。您需要学习创建简单的函数来清理数据。
有时,数据分析师使用编程语言来实现可视化,并从数据中提取意义。
分析师使用的两种主要语言包括 R 和 Python 。
r 是一种统计语言,一般被数据科学家和统计学家用来挖掘数据。Python 更像是一种多功能语言,几乎每个人都在使用——从软件工程师到数据科学家。
你可以选择其中一种语言,然后开始学习。你可以阅读这篇我写的关于如何自学编程的文章。如果你想知道学习如何编程的最佳在线课程,你可以阅读这篇文章。
查询语言
照片由卡斯帕·卡米尔·鲁宾在 Unsplash 上拍摄
很多时候,分析师需要学习一种查询语言。根据您所在公司的类型,您可以使用关系型或非关系型数据库。
我的建议是学习像 MySQL 或 Oracle 这样的语言。即使你工作的公司使用 NoSQL 数据库,一旦你掌握了基本知识,你就可以很容易地学会语法。
我在 Udacity 上找到了这个免费课程,当我试图学习 SQL 进行数据分析时,它真的帮了我大忙。
领域知识
Adeolu Eletu 在 Unsplash 上拍摄的照片
根据你想合作的公司类型,需要一些领域的专业知识。
数据分析师通常被雇佣来帮助公司做出更好的商业决策。因此,你需要掌握一些商业和营销领域的知识。
你可以找到很多为数据分析师教授商业分析或营销的在线课程。我将在这里列出其中的一些:
- 2020 年商业分析课程
- 【2020 年商业智能分析课程
- 【2020 年商业分析简介
商业领域的知识很重要,我希望在进入数据科学和分析领域之前能够学到这些知识。然而,这绝对是你可以在过程中学习的东西,并且比作为分析师所需的技术技能更容易掌握。
通讯技能
这可以说是最重要的,但也是最被低估的分析师需要具备的技能。
数据分析师需要能够以非技术人员能够理解的方式有效地传达他们的见解。
从可用数据中提取有用信息后,分析师需要能够向利益相关者或客户解释这些见解。
客户并不真正关心你用来获得洞察力的工具或技术。他们想知道如何将你的见解转化为商业决策,以及它给公司带来了什么样的价值。
弥合技术人员和非技术人员之间差距的能力非常重要。你需要以简单的方式展示你的发现,并向客户解释你的分析如何让他们受益。
类似于获得领域经验,这些沟通技巧可以在过程中得到磨练。你只需要有耐心,并愿意学习。
以上,我列出了成为数据分析师需要自学的技能。
这些不是唯一的要求,因为你将需要获得使用 Tableau 等可视化工具的经验,以制作图表呈现给客户。你可能还需要获得一些统计知识**,并理解抽样分布和 A/B 测试等概念。**
我将在下面提供一些链接供进一步阅读,以便您可以更好地了解成为数据分析师的要求。
正如我上面提到的,数据分析并不是一个很难进入的领域,因为它不是高度学术性的,而且你可以在这个过程中学习所需的技能。
然而,为了做好数据分析师的工作,你需要掌握各种各样的技能。
这意味着你需要每周花几个小时来学习这些技能,以实现有效的职业转型。
本文到此为止,感谢阅读。
进一步阅读
如何在 10 个步骤中成为数据科学家…
只是为了好玩
注意:这篇文章应该是娱乐性的——请不要实际遵循这些步骤
丹尼尔·罗梅罗在 Unsplash 上的照片
1。无意中从朋友那里(或者更可能是在网上,因为你是一个内向的人)听到数据科学是“21 世纪最性感的工作”
https://HBR . org/2012/10/data-scientist-21 世纪最性感的工作。说够了,给我报名!
2。把你的 LinkedIn 标题改成数据科学家(这样人们就知道你很性感)
还可以在 GitHub 上添加一个链接,现在它只包含一个“Hello World!”知识库。Git 兴奋!!
3。看太多的博客文章和开源教材(因为它们很无聊)
这一步还包括订阅了太多的博客/出版物,然后被收件箱里的大量高质量内容淹没,因此实际上什么也没看。嘿,至少你是通过阅读头条来跟上行业发展的。
4。与自己进行一周的内部辩论,讨论应该参加哪个数据科学训练营
Thinkful,跳板,熨斗,Metis,水平,数据营…这是两个音节的先决条件吗?
此外,要接受这样一个事实:谷歌和 LinkedIn 的每一个广告都将是你家用电脑上的一个在线数据科学项目。
5。在 LinkedIn 上过度发帖
如果你使用表情符号和至少五个标签,会加分。👏🏼👏🏼👏🏼
6。将堆栈溢出的答案复制粘贴到您的项目中,并严肃地质疑您尝试数据科学的决定
7。在你的 2016 款 MacBook air 运行了 16.52 小时后,把它扔到客厅的另一头
好吧,至少 MacBook 在你极简主义的家庭办公空间里看起来很好,而且足够轻,可以带到所有的咖啡店!
(另一种描述:如果我能跑得和我的模特一样长,我的身材会很棒!)
8。开始实际学习统计学
…并且仍然经常用谷歌搜索 p 值到底是什么。
9。在为时已晚的情况下,你将花费 80%的时间清理数据
我真的要再打扫一遍吗?我就不能放点垃圾进去吗?为什么我拿到数据就不能干净点?
10。写一篇幽默的中型文章,就好像你是一个真正的数据科学家,而不是一个正在找工作的“数据科学学徒”
哦对了,这就是我现在正在做的!在 LinkedIn 上与我联系。或者更好,雇用我。
关注我的媒体账号,这样它就可以成为众多直接发送给你的博客之一!😊👩🏼💻📊📚
如何在 2020 年成为数据科学家—顶级技能、教育和经验
如何成为 2020 年的数据科学家:简介
在过去几年中,数据科学一直是最时尚的话题之一。但是在 2020 年成为一名数据科学家需要具备什么条件呢?
简而言之,以下是我们发现的最新研究成果:
典型的数据科学家是男性,至少会说一门外语,背着他们有 8.5 年的工作经验。他们很可能拥有硕士或更高的学位,并且在日常工作中肯定会使用 Python 和/或 R。
但是这样的概括很少有帮助。不仅如此,它们可能会误导人,有时甚至令人沮丧。这就是为什么我们对数据进行了细分,以揭示许多不同的见解:
请使用上面的列表浏览文章,或者只是阅读整篇文章。为了让您尽可能地了解不同的要点,我们还将与前几年的调查进行比较。如果你首先想了解如何在 2018 年和 2019 年成为一名数据科学家,请点击这些链接:
我们如何收集和分析数据:
这份报告的数据基于 LinkedIn 个人资料中的公开信息,这些个人资料包含 1001 名专业人士,目前被聘为数据科学家。样本包括初级、专家和高级数据科学家。为了确保与前几年的可比性和有限的偏差,我们根据几个条件收集数据。
位置
40%的数据由目前在美国工作的数据科学家组成;30%是英国的数据科学家;15%目前在印度;15%来自不同国家的集合(“其他”)。
公司规模
50%的样本目前受雇于财富 500 强公司;剩下的 50%在未排名的公司工作。
这些配额是根据对数据科学最受欢迎的国家以及该行业的就业模式的初步研究而引入的。
好吧,不多说…
如何在 2020 年成为数据科学家:概述
连续第三年,判决结果出来了。
男性数据科学家的数量是女性的两倍。
这种趋势虽然不幸,但并不令人惊讶,因为数据科学领域遵循科技行业的总体趋势。
就语言而言,数据科学家通常会说两种语言——英语和一种其他语言(通常是他们的母语)。
说到职业经历,我们发现你不可能一夜之间真的成为数据科学家。
需要 8.5 年的整体工作经验。有趣的是,这比 2019 年的数据增加了半年。另一个有趣的观察是,数据科学家平均拥有他们享有盛誉的头衔 3.5 年。去年,这一指标为 2.3 年。虽然我们的研究不是基于面板数据,但我们可以断言,一旦你成为一名数据科学家,你很可能会一直做下去。
关于编程语言,2018 年,50%的数据科学家都在用 Python 或者 r。
这一数字在 2019 年增加到 73%,以彻底打破今年的所有记录。2020 年,90%的数据科学家使用 Python 或 r。不,你不是唯一一个觉得它很神奇的人。在如此短的时间内如此高的采用率对于任何行业的任何工具来说都绝对是一个惊人的壮举。
最后,当你试图成为一名数据科学家时,你的教育水平肯定会有所不同。大约 80%的学生至少拥有硕士学位。这相当于比去年增加了 6 个百分点。
以往的经验
每年,我们都会查看数据科学家以前的工作经历。事实证明,这部分结果对有抱负的专业人士最有用,可以找出成为数据科学家的常见职业道路。
重申一下,在 2020 年,数据科学家平均有 3.5 年的职称和 8.5 年的工作时间。
但是…数据科学家在成为数据科学家之前是做什么的?
根据我们的样本,他们…已经是数据科学家了!或至少一半的群体(52.4%)。如果我们将这个数值与往年进行比较,2018 年有 35.6%的此类案件,2019 年有 42%。因此,年复一年,这个职位变得越来越排外——我们可以从他们的平均工作经验中推断出这一观察结果。
这种观点表明,在成为数据科学家后,没有太多的职业选择。
换句话说,一次是数据科学家,永远是数据科学家。至少 2020 年是这种情况。
关于其他相关的职业道路,从数据分析师开始仍然是更可取的道路(总体 11%),其次是学术界(8.2%)和数据科学实习生(7.0%)。这一细分是我们自 2018 年以来年度研究中最一致的部分之一。因此,你可以把你的数据科学家生涯押在这上面。
教育
教育是大多数简历的三个主要部分之一,这一点不太可能改变。教育背景是给你未来雇主的一个信号,尤其是当你没有太多经验的时候。那么,如果你想成为一名数据科学家,什么样的教育能给出最好的信号呢?
根据我们的数据,2020 年的典型数据科学家拥有硕士学位(56%)、学士学位(13%)或博士学位(27%)作为他们的最高学历。
乍一看,这些统计数据似乎并不违背直觉。然而,与 2019 年(19%)和 2018 年(15%)相比,“只有学士学位”的数据科学家实际上有相当大的下降。数据科学需要高级专业知识。这通常是通过传统教育的研究生或研究生形式获得的,或者通过独立的专业学习获得的。
虽然专业化很重要,但过多的专业化,如博士学位,并不是进入数据科学的先决条件。事实上,博士持有人的比例多年来一直保持稳定,约占我们样本的 27%。
然而,硕士学位正在巩固其作为 2020 年成为数据科学家所必需的学术成就黄金标准的地位。
我们观察到,与 2019 年相比,拥有硕士学位的专业人士增加了 20%(2019 年为 46%,2020 年为 56%)。
硕士学位是学士专攻某一领域的绝佳途径。
一般来说,硕士学位有两种选择:
- 增加你的深度(深入挖掘一个话题)
- 或者增加你的广度(改变你的关注点,使你的技能多样化)。
一种假设是,拥有经济学、计算机科学或其他定量学士学位的人已经攻读了一个流行的数据科学硕士学位。这在我们关于研究领域的章节中得到进一步证实。
可以说,还有另一个因素在起作用,这就是这个领域越来越受欢迎。
Glassdoor 的 50 份最佳工作等行业报告一致将数据科学评为 2016 年、2017 年、2018 年和 2019 年的赢家。
在过去五年中,谷歌对数据科学的搜索也至少翻了两番。这无疑有助于提高人们对数据科学职业的兴趣,并因此导致某些地区的招聘流程更具选择性(参见下面的国家和工作经验年限)。
最后,虽然数据科学正在成为一个竞争更加激烈的领域,但超过 10%的数据科学家仅凭借学士学位就成功渗透到该领域(13%)。这个数字确实低于我们在过去两年中观察到的数字(2019 年为 19%,2018 年为 15%)。尽管如此,数据科学仍然对学士学位持有者开放。事实上,如果我们看看具体国家的数据,就会发现一个更加微妙的画面。
国家和学位
正如我们在本文开头的方法部分所述,我们根据位置配额收集数据;美国的数据科学家组成了我们 40%的数据,英国的数据科学家贡献了我们 30%的观测数据;印度和世界其他国家各占 2020 年人口的 15%。
也就是说,在英国和美国,拥有硕士学位的数据科学家的数量都有所增加(分别为 54%和 58%,而 2019 年为 44%)。
在印度,2020 年拥有硕士学位的数据科学家数量也比往年增长了 16%(2020 年为 57%,2019 年和 2018 年为 49%)。
有趣的是,这并不对应于印度拥有本科学位的数据科学家的相应减少(2020 年为 32%,而 2019 年为 34%),这仍然是我们整个队列中学士学位持有者的最高比例。与前几年相比,在当前的研究中,博士毕业生和拥有“其他”学位的专业人士也越来越少出现。正如我们上面提到的,拥有“时尚”数据科学硕士学位的专业化正成为该领域许多人的首选职业道路,这似乎是合理的。
同样值得注意的是,在印度成为数据科学家并不需要博士学位。
事实上,拥有博士学位的研究生仅占印度数据科学家样本的 3%;这比美国的数据少 30%,也是印度代表性最少的群体。
因此,这些数据证实了两个初步结论。在学术上,硕士学位正在成为全球最受欢迎的数据科学家学位。而且,如果你只有学士学位,印度为你提供了在数据科学领域开始职业生涯的最佳机会。
研究领域
成为数据科学家最好的学历是什么?如果你在过去几年里一直关注这个行业(或者至少是我们的研究),你会倾向于用“计算机科学”或者“统计和数学”来回答。毕竟,数据科学是所有这些学科的宠儿。但你可能错了。
2020 年,成为数据科学家的最佳学位是…数据科学与分析!
“数据科学与分析”的毕业生终于登上了我们研究的巅峰!
在我们继续分析之前,先说明一下方法论。因为在学术界有大量独特的细微差别——以及相应的命名——学位,我们将我们的数据分为七组学术研究领域:
- 计算机科学,其中不包括机器学习;
- 数据科学与分析,其中包括机器学习;
- 统计与数学,包括以统计和数学为中心的学位;
- 工程;
- 自然科学,包括物理、化学、生物;
- 经济和社会科学,包括与经济、金融、商业、政治、心理学、哲学、历史、市场营销和管理相关的研究;
- 其他,包括我们样本中的数据科学家追求的所有其他学位。
因此,数据科学和分析最终是最有可能让你进入数据科学的学位。厉害!
与 2019 年(12%)和 2018 年(13%)相比,我们看到 2020 年毕业并获得数据科学专业学位的专业人士数量大幅增加(21%)。鉴于我们之前的观察(见上文教育),这些学位中的大多数都是硕士学位(数据科学和分析集群的 85%)并不令人惊讶。因此,数据科学似乎是任何定量学士的首选专业。
这一发现表明,传统大学开始对数据科学家的需求做出回应。与此相一致,提供培养数据科学家技能的课程。另一个明显的趋势是,数据科学和分析学位正在成为进入数据科学的公认学位,特别是如果你以前从不同的领域毕业。
例如,考虑数据科学家在 2019 年和 2020 年获得的前 3 个学位:
2019
- 计算机科学(22%)
- 经济学和社会科学(21%)
- 统计和数学(16%)
2020
- 数据科学与分析(21%)
- 计算机科学(18%)
- 统计和数学(16%)
数据科学和分析显然领先于计算机科学。
更重要的是,它的出现已经完全将经济学和社会科学从 top 3 排名中移除,即使这个专业在 2019 年是接近的第二名。
工程、自然科学和其他领域的毕业生各占我们数据的大约 11%。我们可以说,与前几年相比,这没有太大变化。
有趣的是,我们样本中的大多数女性很可能获得了统计学和数学相关的学位(女性群体中的 24%)。
相比之下,男性最有可能获得数据科学和分析学位(22%),计算机科学(19%)紧随其后。
总的来说,就进入该领域的最佳学位而言,数据科学相当平衡。
如果你有量化或编程背景,或者如果你进一步专攻数据科学和分析,你可以成为一名数据科学家。要做到这一点,要么通过传统的硕士学位,要么通过完成训练营培训或专门的在线培训项目。
如何在 2020 年成为数据科学家:在线课程和学位
数据科学家来自如此多不同的背景,我们可能会怀疑他们的大学学位是否足以胜任他们的工作。
即使没有研究,答案也是——不可能。没有一个单一的学位可以让一个人为数据科学的实际工作做好准备。
事实上,数据科学家更接近于“书呆子”而不是“摇滚明星”——这与其说是天赋,不如说是努力。因此,你可以打赌,他们会慢慢地自我准备。在我们的研究中,我们使用了最接近的 LinkedIn 代理——在线课程的证书。我们的数据表明,41%的数据科学家已经包括了一门在线课程,这与过去两年几乎相同(2018 年为 40%,2019 年为 43%)。
学位和直接聘用
一毕业就能成为数据科学家吗?虽然并非闻所未闻,但数据表明这不太可能。在我们的团队中,只有不到 1%的人在没有经验的情况下成功成为了数据科学家。他们要么有博士学位,要么有硕士学位(80%的男性和 100%的女性)。这些直接雇员中有四分之一还表示已经获得了在线认证。
我们发现有趣的是,我们团队中的直接雇员几乎完全反映了 2020 年典型数据科学家的特征(见上文)。
注意,并不是所有的人都贴出自己所有的证书,所以这些结果实际上是轻描淡写。
也就是说,让我们来讨论一下,如果你不是那幸运的 1%,你需要什么样的经历才能成为一名数据科学家。
多年的经验
到 2020 年,典型的数据科学家已经作为数据科学家工作了至少一年(我们队列中的 70%),人数最多的是 3-5 年的数据科学家(28%),其次是 2-3 年的数据科学家(24%),以及工作第二年的数据科学家(19%)。
工作第一年的数据科学家占我们 2020 年数据的 13%。
这些都是有趣的统计数据,特别是在考虑 2019 年和 2018 年的数据时。更具体地说,我们观察到,与 2019 年和 2018 年开始职业生涯的数据科学家人数(25%)相比,2020 年刚刚开始职业生涯的数据科学家人数减少了近 50%(13%)。鉴于作为数据科学家的平均经验的增加,我们可以得出结论,这些专业人士留在该领域,使得初级人员更难进入。
第二个有趣的趋势是,与过去两年相比,在职 3-5 年和 2-3 年的数据科学家数量有所增加。
2018 年,25%的数据科学家拥有超过 3 年的经验,而在 2020 年,这一数字将达到 44%,在这一群体中增加了 76%。这表明数据科学专家和高级数据科学家正在留在该领域,而不是转移到其他行业。
尽管如此,我们提到了一些重要的跨国差异,需要进一步探索。所以,让我们在下一节更详细地考虑这些!
国家和经验年限
对数据科学家在职经历的跨国分析揭示了一个奇怪的趋势。
就资历而言,美国队列中的数据科学家无疑是我们数据中最有经验的。
超过 50%的人至少是第三年从事数据科学家工作,20%的人已经工作了 5 年以上。对于数据科学领域的职业新手来说,美国是最不友好的环境。在我们的美国同行中,只有 8%的人第一年是数据科学家,15%的人第二年是数据科学家。
根据我们的数据,英国的数据科学领域更容易渗透。
11%的英国样本是以数据科学家的身份开始他们的职业生涯的,而 20%已经是他们工作的第二年。尽管如此,该群体中最大的代表群体是工作第三或第四年的专业人士(29%)。
如果你在寻找一个能给职场新人提供最多机会的国家,数据显示这就是印度。
在我们的样本中,超过 50%的人是工作第一年或第二年的数据科学家。对于刚刚开始接触数据科学并希望将其专业知识融入职业生涯的人来说,这是一个好消息。
当然,这一数据并不令人惊讶,一些世界上最大的公司在班加罗尔和海德拉巴开设了办事处,包括亚马逊、沃尔玛、甲骨文、IBM 和宝洁。
世界其他地方,或者说我们的“其他”国家集群显示出数据科学专业人员在多年经验方面的分布更加均衡。不到 20%的人是第一年或第二年成为数据科学家,超过 20%的人是第三年或第四年,四分之一的人是 3-5 年。也就是说,值得一提的是,在我们的“其他”国家集群中,最大的参与者是瑞士、荷兰和德国。因此,我们可以试探性地说,数据科学正在成为西欧一个更加突出的领域,由于该领域尚未充斥着数据科学人才,初级和中高级专业人员都有需求。
数据科学家的编程技巧
当寻找编程语言能力时,我们不得不求助于 LinkedIn 技能“货币”——背书。虽然不是一个完美的信息来源,但它们是一个人擅长什么的良好代理。如果我主要是训练 ML 算法的话,我不会被同事们认可为 Power BI 吧?
澄清之后,让我们深入研究数据。Python 在一年左右前废黜了 R,所以我们不会过多评论这场竞争。此外,知道 90%的数据科学家使用 Python 或 R,我们可以完全结束这个话题,继续前进。
但是那就有点无知了,尤其是对 SQL!
74%的人“说”Python,56%的人知道 R,51%的人使用 SQL。这里特别值得注意的是,自 2019 年以来,SQL 的受欢迎程度增长了 40%(36%),仅次于 r,接近第三。现在,有各种因素可能导致这一数字。
一个可能的解释是,公司并不总是很好地理解数据科学家的职位。这导致他们雇佣数据科学家,并让他们承担过多的数据工程任务。例如,GDPR 的实施和数据仓库中数据源的大规模重组将一些数据科学家置于不利的位置,使他们无法领导或咨询此类项目。不可避免地,为了“完成工作”,必须将 SQL 添加到他们的工具箱中。
这种现象不仅在 SQL、的上下文中,而且在与数据库管理相关的大数据结构中,正得到越来越多的关注。因此,数据科学家获得了新的技能,代价是编写更少的机器学习算法。
支持 SQL 的另一个要点是,BI 工具如 Tableau 和 Power BI 严重依赖于 SQL,从而增加了它的采用。
这就是为什么 SQL 会进一步上升,甚至赶上 r。编程语言的情况是由 MATLAB (20.9%)、Java (16.5%)、C/C++ (15.0%)和 SAS (10.8%)完成的。再次,乳胶(8.3%)也在前 10 名。
为什么?
嗯,学术界不会损害你成为数据科学家的机会,正如我们从我们这群人的背景中看到的那样。
F500 和编码语言
我们怎么强调 Python 和 R 对于 2020 年的数据科学领域的重要性都不为过。然而,当涉及到大公司时,他们的优势就是他们的缺陷。Python 和 R 都是开源框架,不像 MATLAB 或 c 等成熟的语言,它们可能会有错误或没有很好的文档记录。
数据确实证实了这一说法。以 Python 为例,70%的 F500 数据科学家使用 Python,而 77%的非 F500 数据科学家使用 Python。这听起来像是令人不快的消息,但事实上并非如此。这些年来,Python 和 R 都在缩小差距。与 2018 年的数据相比,F500 公司似乎正在重新思考他们的组织,并更加包容新技术。
除了 Python 的不同使用率之外,编码语言的其余细分仍然保持着无趣的一致性。
国家和编码语言
在过去,你的就业国家将决定你的许多人生决定——学习什么语言,遵守什么规则,尊重或采纳什么习俗。但是这适用于编码语言吗?
自 2018 年以来,我们将目光投向美国、英国、印度和“世界其他地区”。我们的发现表明,在美国和印度,R 比 Python“赢得了民心”。另一方面,英国和“世界其他地方”已经在慢慢淘汰 R,转而支持 Python。
嗯,在 Python 的采用方面,美国和印度不再“落后”。换句话说,Python 现在是各国之王。因此,成为一名数据科学家的最佳选择是弯下膝盖,加入 Pythonistas 寻找数据驱动的真理。
根据记录,编码语言的细分在各国是一致的,R 和 Java 在 2020 年受到 Python 霸主地位的最大冲击。与前几年相比,SQL 没有受到影响,甚至有所增长。
如何在 2020 年成为数据科学家:结论
连续第三年,365 数据科学研究对 1001 名当前数据科学家的 LinkedIn 个人资料进行了研究,揭示了这是多么美好的一年!
这项研究表明,该领域正在不断发展,并适应企业的需求及其在学术界和周围越来越受欢迎。大学正在赶上需求,而硕士学位正在确立自己的黄金标准学位。
Python 继续蚕食 R,但是 SQL 也在崛起!
与美国和英国相比,印度对初级数据科学家的需求更高,从而赢得了数据科学家最佳职业国家的称号。如果你只有学士学位,这也是你应该去的地方。
当然,我们对这些趋势在未来 2-5 年内将如何发展非常感兴趣。但同时,如果你认为我们错过了任何有趣的东西,请告诉我们!我们的使命是为数据科学家的工作以及它如何随时间而变化创建一个信息丰富且最终有帮助的账户。毕竟,做出对自己最有利的职业决定,就意味着知情!
因此,请保持好奇心,增长您的编程技能,祝您在数据科学职业生涯中好运!
其他研究链接: 2019 数据科学家简介; 2018 数据科学家简介。
原载于 2020 年 2 月 25 日 https://365datascience.com*。*