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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

我是如何教我的电脑玩 Spot it 的!使用 OpenCV 和深度学习

原文:https://towardsdatascience.com/how-i-learned-my-computer-to-play-spot-it-using-opencv-and-deep-learning-ad1f017a3ec3?source=collection_archive---------25-----------------------

一些有趣的计算机视觉和 CNN 的小数据集。

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

我的一个爱好是玩棋盘游戏,因为我对 CNN 有所了解,所以我决定开发一个可以在纸牌游戏中击败人类的应用程序。我想用我自己的数据集从头构建模型,看看用一个小数据集从头构建的模型性能如何。我选择从一个不太难的游戏开始, Spot it!(又名多布尔)。

在你不知道的情况下*点它!然而,下面是一个简短的游戏解释:*发现它!是一个简单的模式识别游戏,玩家试图找到两张卡片上显示的图像。原中的每一张卡都点它!有八种不同的符号,每张牌上的符号大小不同。任何两张牌都有一个相同的符号。如果你是第一个找到那个符号的人,你就赢得这张卡。当 55 张牌用完时,谁收集的牌最多,谁就赢。

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

自己试试:上面显示的卡片上的共同符号是什么?

从哪里开始?

任何数据科学问题的第一步都是收集数据。我用手机拍了几张,每张卡六张。总共有 330 张照片。其中四个如下所示。你可能会想:这足以构建一个完美的卷积神经网络吗?我会回来的!

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

处理图像

好了,我们有数据了,下一步是什么?为了成功,这可能是最重要的部分:处理图像。我们需要提取每张卡片上显示的符号。这里有一些困难。你可以在上面的图片中看到,一些符号可能更难提取:雪人和鬼魂(第三张图片)和冰屋(第四张图片)的颜色很浅,污渍(第二张图片)和感叹号(第四张图片)存在于多个部分。为了处理浅色符号,我们给图像增加了对比度。之后,我们调整大小并保存图像。

添加对比度

我们使用 Lab 颜色空间来增加对比度。l 代表亮度,a 是范围从绿色到品红色的颜色分量,b 是范围从蓝色到黄色的颜色分量。我们可以用 OpenCV 轻松提取这些组件:

import cv2
import imutilsimgname = 'picture1'image = cv2.imread(f’{imgname}.jpg’)
lab = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)
l, a, b = cv2.split(lab)

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

从左至右:原始图像、光分量、a 分量和 b 分量

现在,我们将对比添加到灯光部分,将这些部分合并在一起,并将图像转换回正常状态:

clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8,8))
cl = clahe.apply(l)
limg = cv2.merge((cl,a,b))
final = cv2.cvtColor(limg, cv2.COLOR_LAB2BGR)

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

从左到右:原始图像,光组件,增加对比度,转换回 RGB

调整大小

然后我们调整大小并保存图像:

resized = cv2.resize(final, (800, 800))# save the image
cv2.imwrite(f'{imgname}processed.jpg', blurred)

搞定了。

检测卡片和符号

现在图像被处理了,我们可以从检测图像上的卡片开始。使用 OpenCV 可以找到外部轮廓。然后我们需要将图像转换为灰度,选择一个阈值(本例中为 190)来创建一个黑白图像,并找到轮廓。在代码中:

image = cv2.imread(f’{imgname}processed.jpg’)
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
thresh = cv2.threshold(gray, 190, 255, cv2.THRESH_BINARY)[1]# find contours
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)output = image.copy()# draw contours on image
for c in cnts:
    cv2.drawContours(output, [c], -1, (255, 0, 0), 3)

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

经过处理的图像,转换为灰度,设定阈值,并带有外部轮廓

如果我们把外轮廓按面积排序,可以找到面积最大的轮廓:这就是卡片。我们可以创建一个白色背景来提取符号。

# sort by area, grab the biggest one
cnts = sorted(cnts, key=cv2.contourArea, reverse=True)[0]# create mask with the biggest contour
mask = np.zeros(gray.shape,np.uint8)
mask = cv2.drawContours(mask, [cnts], -1, 255, cv2.FILLED)# card in foreground
fg_masked = cv2.bitwise_and(image, image, mask=mask)# white background (use inverted mask)
mask = cv2.bitwise_not(mask)
bk = np.full(image.shape, 255, dtype=np.uint8)
bk_masked = cv2.bitwise_and(bk, bk, mask=mask)# combine back- and foreground
final = cv2.bitwise_or(fg_masked, bk_masked)

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

遮罩、背景、前景、组合

现在是符号检测时间!我们可以利用最后一幅图像再次检测外部轮廓,这些轮廓就是符号。如果我们在每个符号周围创建一个正方形,我们可以提取这个区域。代码有点长:

# just like before (with detecting the card)
gray = cv2.cvtColor(final, cv2.COLOR_RGB2GRAY)
thresh = cv2.threshold(gray, 195, 255, cv2.THRESH_BINARY)[1]
thresh = cv2.bitwise_not(thresh)cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
cnts = sorted(cnts, key=cv2.contourArea, reverse=True)[:10]# handle each contour
i = 0
for c in cnts:
    if cv2.contourArea(c) > 1000:
        # draw mask, keep contour
        mask = np.zeros(gray.shape, np.uint8)
        mask = cv2.drawContours(mask, [c], -1, 255, cv2.FILLED) # white background
        fg_masked = cv2.bitwise_and(image, image, mask=mask)
        mask = cv2.bitwise_not(mask)
        bk = np.full(image.shape, 255, dtype=np.uint8)
        bk_masked = cv2.bitwise_and(bk, bk, mask=mask)
        finalcont = cv2.bitwise_or(fg_masked, bk_masked) # bounding rectangle around contour
        output = finalcont.copy()
        x,y,w,h = cv2.boundingRect(c)
        # squares io rectangles
        if w < h:
            x += int((w-h)/2)
            w = h
        else:
            y += int((h-w)/2)
            h = w # take out the square with the symbol
        roi = finalcont[y:y+h, x:x+w]
        roi = cv2.resize(roi, (400,400)) # save the symbol
        cv2.imwrite(f"{imgname}_icon{i}.jpg", roi)
        i += 1

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

阈值图像、找到的轮廓、幽灵符号和心形符号(用遮罩提取的符号)

分类符号

现在到了无聊的部分!是时候对符号进行排序了。我们需要一个训练,测试和验证目录,每个目录包含 57 个目录(我们有 57 个不同的符号)。文件夹结构如下所示:

symbols
 ├── test
 │   ├── anchor
 │   ├── apple
 │   │   ...
 │   └── zebra
 ├── train
 │   ├── anchor
 │   ├── apple
 │   │   ...
 │   └── zebra
 └── validation
     ├── anchor
     ├── apple
     │   ...
     └── zebra

将提取的符号(超过 2500 个)放入正确的目录需要一些时间!我有创建子文件夹的代码,在 GitHub 上设置测试和验证。也许下次用聚类算法排序会更好…

训练卷积神经网络

无聊的部分之后是有趣的部分。让我们建立并训练一个 CNN。你可以在这个帖子中找到关于 CNN 的信息。

模型架构

这是一个多类、单标签的分类问题。我们希望每个符号都有一个标签。这就是为什么有必要选择具有 57 个节点和分类交叉熵损失函数的最后一层激活 softmax。

最终模型的架构如下所示:

# imports
from keras import layers
from keras import models
from keras import optimizers
from keras.preprocessing.image import ImageDataGenerator
import matplotlib.pyplot as plt# layers, activation layer with 57 nodes (one for every symbol)
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(400, 400, 3)))
model.add(layers.MaxPooling2D((2, 2)))  
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(256, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(256, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dropout(0.5)) 
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(57, activation='softmax'))model.compile(loss='categorical_crossentropy',       optimizer=optimizers.RMSprop(lr=1e-4), metrics=['acc'])

数据扩充

为了获得更好的性能,我使用了数据增强。数据扩充是增加输入数据的数量和多样性的过程。这可以通过旋转、移动、缩放、裁剪和翻转现有图像来实现。使用 Keras 很容易执行数据扩充:

# specify the directories
train_dir = 'symbols/train'
validation_dir = 'symbols/validation'
test_dir = 'symbols/test'# data augmentation with ImageDataGenerator from Keras (only train)
train_datagen = ImageDataGenerator(rescale=1./255, rotation_range=40, width_shift_range=0.1, height_shift_range=0.1, shear_range=0.1, zoom_range=0.1, horizontal_flip=True, vertical_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)train_generator = train_datagen.flow_from_directory(train_dir, target_size=(400,400), batch_size=20, class_mode='categorical')
validation_generator = test_datagen.flow_from_directory(validation_dir, target_size=(400,400), batch_size=20, class_mode='categorical')

如果你想知道,一个增强的幽灵看起来像这样:

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

左侧为原始重影,其他图像上为增强重影

符合模型

让我们拟合模型,保存它以用于预测,并检查结果。

history = model.fit_generator(train_generator, steps_per_epoch=100, epochs=100, validation_data=validation_generator, validation_steps=50)# don't forget to save your model!
model.save('models/model.h5')

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

完美的预测!

结果

我训练的基线模型没有数据增加、丢失,并且层数较少。该模型给出了以下结果:

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

基线模型的结果

你可以清楚地看到这个模型是过度拟合。最终模型的结果(来自前面段落中的代码)要好得多。在下图中,您可以看到训练和验证集的准确性和损失。

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

最终模型的结果

在测试中,这个模型只犯了一个错误:它预测了一颗炸弹的下落。我决定坚持使用这个模型,在测试集上的准确率是 0.995。

预测两张卡片的共同符号

现在有可能预测两张卡片上的共同符号。我们可以使用两幅图像,分别对每幅图像进行预测,并使用交集来查看两张卡都有什么符号。这给出了三种可能性:

  • 预测时出错:找不到公共符号。
  • 十字路口只有一个符号(可能是错的,也可能是对的)。
  • 十字路口不止一个符号。在这种情况下,我选择了概率最高的符号(两个预测的平均值)。

代码在 GitHub 上,用于预测目录 main.py 文件中两个图像的所有组合。

一些结果:

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

结论

这是一个完美的表演模式吗?可惜没有!当我给卡片拍新照片并让模型预测共同的符号时,它对雪人有一些问题。有时它预测一只眼睛或一只斑马是雪人!这给出了一些奇怪的结果:

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

雪人?在哪里?

这个模型比人类好吗?看情况:人类可以做的很完美,但是模型更快!我给计算机计时:我给它 55 副牌,并询问两张牌的每种组合的共同符号。总共有 1485 种组合。这花费了计算机不到 140 秒的时间。计算机犯了一些错误,但就速度而言,它肯定会打败任何人类!

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

我不认为建立一个 100%的表演模型真的很难。例如,这可以通过使用迁移学习来完成。为了理解模型在做什么,我们可以将测试图像的层可视化。下次要尝试的东西!

我希望你喜欢阅读这篇文章!❤

有关系的

[## 解决 MTV 的《非诚勿扰》:有可能永远不输吗?

爱情游戏还是逻辑游戏?

towardsdatascience.com](/solving-mtvs-are-you-the-one-is-it-possible-to-never-lose-992488277099) [## 用 120 行代码求解诺诺姆图

拼图,组合和解决方案 gif。

towardsdatascience.com](/solving-nonograms-with-120-lines-of-code-a7c6e0f627e4) [## 深度强化学习代理扮演的 Snake

犯了大错

towardsdatascience.com](/snake-played-by-a-deep-reinforcement-learning-agent-53f2c4331d36)

别忘了 订阅 如果你想在我发表新文章时收到电子邮件。

我是如何在一天内学会 Tableau 的

原文:https://towardsdatascience.com/how-i-learned-tableau-in-1-day-8db80c167f9d?source=collection_archive---------9-----------------------

从安装软件到交付仪表板

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

卢克·切瑟在 Unsplash 上的照片

我是一名机器学习工程师,一直依赖 Matplotlib、Seaborn 和 Plotly 来实现我所有的可视化(拜托,我们都是这样,对吧?).对我来说,冗长的 Python 代码真的很酷,但是拖放式的情节就不酷了。如果我们的任何产品需要一些经典的可视化效果,我们的 BI 团队会伸出援手。就这样两年过去了,我既没有学会 Tableau 也没有学会 PowerBI。

然而,我最终学会了 Tableau,创建了一个不错的仪表板,上面有一些业务问题的调查结果,并与利益相关者分享。这一切都发生在一天之内。

为什么

有了这次经历,我明白了有一个强烈的“为什么”是至关重要的第一步,因为它帮助我们朝着实现目标前进,不管有什么障碍。

先搞清楚自己的“为什么”。是目的,是事业,是信念,驱动着我们每一个人。

给你一点背景,我志愿参加一个伦理项目,分析新冠肺炎时期印度的家庭暴力。这是由 Omdena 主办的——这是一个我绝对喜欢的自下而上的合作人工智能平台,与 RedDot 基金会合作。在这个项目中,我们有几个团队分析不同的渠道,如社交媒体、新闻文章和政府关于印度家庭暴力的数据。

当项目接近尾声时,我们必须统一我们的建模和发现,以交付给利益相关者。最后,我们决定继续使用 Tableau,因为它提供了世界一流的交互式可视化效果,而且大多数合作者对它都很满意。但我不是;我对 Tableau 一无所知。但我不能不将数周的辛勤工作转化为真正的价值。

“为什么”因人而异。你可能想把 Tableau 武器加到你的数据科学盔甲上。或者,您可能希望能够用最少的代码生成一流的可视化效果。你梦想中的公司甚至会在你面试的时候给你布置一个场景。首先理解你的“为什么”,然后继续。

怎么做

我没有浪费时间开始。我下载了 Tableau 桌面版(注册 14 天试用)并马上安装了它。在我的机器上安装该软件有助于我在学习时动手操作。

接下来,我探索了 Tableau 初学者教程的一些选项。在花了一些时间研究之后,我发现 Tableau 的官方教程非常有用。整个入门教程有一步一步的文本形式的指导,很容易理解(是的,文本教程!) 这样做的好处是,它让我们在几个小时内浏览完整的教程,理解完整的工作流程,并根据需要使用它。

我跟着 freeCodeCamp 的速成班补充官方教程,大概 30 分钟。以 freeCodeCamp 的出色工作而闻名,它正如标题所声称的那样交付,并使我能够快速入门。

Tableau 速成班 freeCodeCamp

我知道我只是触及了 Tableau 所能做的表面,但是这些已经足够让我开始了。这里的关键是你要设计自己的行动计划,最适合你的,并坚持下去。看看上面我推荐的资源,但也可以随意探索其余的,选择最适合你需求的。

什么

那么我创造了什么?我的目标是了解这些年来以及印度 COVID19 封锁期间家庭暴力案件的模式。我创建了一个基本的交互式仪表板,可以快速传达这些汇总的统计数据,并让利益相关者了解印度的家庭暴力情况。

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

作者对交互式仪表板的快照

有一个你想要创造什么的想法是很重要的。创建出色的可视化效果,将其添加到您的数据科学产品组合中?或者你想创造一些基本的情节来传达你的发现?你(必须)决定你的“什么”

概述

能够用拖放创建经典的可视化效果也很酷。我们需要有开放的心态,并擅长根据形势需要使用最佳工具的艺术。如果你手头有几天时间,下面是我对 Tableau 的工作的回顾,分为几个步骤。

  1. 下载 Tableau 桌面版本(连免费公版都可以)
  2. 你大概有自己的数据;如果没有,浏览这些数据集并挑选一个感兴趣的。
  3. 写下 3 个你想分析的商业/研究问题。
  4. 记住这些目标,学习 Tableau
  5. 创建一个仪表板来分析数据并回答这些问题
  6. 与世界分享!(可选:在这里留下你的作品的链接,我很乐意看到并自豪地分享它。)

现在回想起来,我意识到我不仅学会了 Tableau,还学会了如何在有限的时间内完成一项任务。

提前理解“为什么”、“如何”和“是什么”,有助于你有目的地学习并创造价值。

当你读它的时候,它似乎是显而易见的,但是大多数时候,当我们试图解决现实世界的问题时,我们忘记了应用它。

谢谢你读到这里。我希望这篇文章为你增加一些价值,帮助你开始使用 Tableau。因为我在这方面是一个真正的初学者,我很乐意听到你对我可能犯的任何错误的反馈以及我如何改进。期待与您的联系!😃

如果你重视这样的文章,并想支持我成为一名作家,可以考虑注册成为一名媒体会员。每月 5 美元,你可以无限制地阅读媒体上的故事。

[## 通过我的推荐链接加入 Medium—Arunn the vapalan

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

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

我是如何学会享受 Vim 的——刻意练习和环绕。精力

原文:https://towardsdatascience.com/how-i-learned-to-enjoy-vim-e310e53e8d56?source=collection_archive---------10-----------------------

刻意的练习和环绕。vim 让我爱上了 Vim

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

胡安·戈麦斯Unsplash 上拍照

我最近开始学习 Vim,这很难,尤其是在开始的几天——我的工作效率受到了很大的打击。我几乎不能用 Visual Studio 代码编写任何代码而不感到头痛。想了解更多关于我 15 天旅程的信息,请看这篇文章:

[## 连续 15 天使用 Vim 后,我学到了什么

从 Vim noob 到业余爱好者的旅程

towardsdatascience.com](/what-ive-learned-after-using-vim-15-days-straight-ceda7e773a6d)

现在,两个星期后,我觉得使用 Vim 很舒服,并爱上了它,这要归功于许多常规的刻意练习 和 Tim Pope 的surround . Vim插件。事实上,这篇文章是用 Vim 的 Markdown 写的,我已经开始使用一个非常强大的笔记应用程序(和策略)来使用 Vim。

** [## 使用这个免费的笔记应用程序做更好的笔记,它将成为你的第二大脑

黑曜石使连接想法变得容易,并帮助你更好地思考和写作

medium.com](https://medium.com/@ausius/take-better-notes-with-this-free-note-taking-app-that-wants-to-be-your-second-brain-1a97909a677b)

这篇文章假设你已经了解了 Vim 的基础知识。我将介绍 surround.vim ,提供例子解释其工作原理,并向您展示如何有效地练习。如果你是 Vim 的新手,先看看一些为初学者写的文章(例如,这里的和这里的)。另外,看看我的帖子,告诉你如何成为一个更有生产力的程序员。

[## 使用终端多路复用器 tmux 提高编码和开发效率

简单的 tmux 命令来提高您的生产力

medium.com](https://medium.com/better-programming/code-and-develop-more-productively-with-terminal-multiplexer-tmux-eeac8763d273) [## 4 个键盘快捷键,可高效编辑文本并提高工作效率

高效地在文本中导航和移动光标

medium.com](https://medium.com/better-programming/4-keyboard-shortcuts-to-edit-text-efficiently-and-improve-productivity-66894c8d51b8) [## 在 Python 中更有效地循环的两种简单方法

使用枚举和压缩编写更好的 Python 循环

towardsdatascience.com](/two-simple-ways-to-loop-more-effectively-in-python-886526008a70)

Surround.vim

surround.vim 插件让你处理围绕的对事物,比如括号、HTML 标签和引号(文档在这里)。无论你是编码还是写作,这个插件都能让你的生活变得更加轻松。

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

vim 允许您添加、删除和更改成对的事物

要安装,请在终端中运行下面的四行代码。

mkdir -p ~/.vim/pack/tpope/start
cd ~/.vim/pack/tpope/start
git clone https://tpope.io/vim/surround.git
vim -u NONE -c "helptags surround/doc" -c q

学习和练习技巧

首先了解插件是如何工作的——学习如何包围(ys)删除(ds)改变 ( cs)。然后,学习指导示例,如下所示。一旦你理解了基础,立即开始在你的日常写作/编码中使用插件。

要快速提高,使用 刻意练习 :每天,找出自己的薄弱环节(例如,添加引号多个单词),通过相关的引导示例(参见下面的环绕多个单词部分),自己生成更多的示例,反复测试自己,直到你可以执行正确的动作/按键,而不必想太多。

如果你进行几天这种有意识的练习——即使每天只有几分钟——你会很快变得擅长使用 surround.vim。

包围一个单词

I am happy.
I am "happy".

解决方法:ysiw" ( ys:添加周边环境;iw:整个单词,不管光标在哪里,只要在你想要包围的单词上;":包围文本的字符)

环绕整条线

I am happy; she is sad.
(I am happy; she is sad.)

解决方法:yss) ( ys:添加周围环境;s:全线;)包围行的字符)

注意:如果您使用yss(而不是yss),将在您的文本周围添加空格:( I am happy; she is sad. )

用标签包围整行或整段

Hello World! How are you?
<p>Hello World! How are you?</p>

解决方案:yss<p> ( yss:给整条线添加环绕;<p>用标记把线围住)

注意:结束标签</p>将自动完成。非常方便!

包围多个单词

I am very very happy.
I am *very very* happy.

解决方法:ys2aw* ( ys:添加周边环境;2:包围字数,从光标下的字开始;aw:绕词;*:包围文本的字符)

用标签包围多个单词

Hello World! How are you?
<em>Hello World</em>! How are you?

解决方法:ys2aw<em>(在 2 字周围加上周边环境;记得先把光标放在Hello下面!)

包围所选文本

The solution is x + y = z. You responded wrongly.
The solution is `x + y = z`. You responded wrongly.

解决方法:将光标放在x下,然后veeeeS`` ( v:进入可视模式选择文本;eeee:按任意次数,选择想要选择的字数;S``用```包围所选文本

删除周围环境

"Hello World!"
Hello World

解决方法:ds" ( ds:删除周边;":要删除的字符;将光标放在文本区域内的任何位置)

删除周围的标签

<em><p>Hello World!</p></em>
Hello World!

解:dstdst(dst);删除周围的标签);如果安装了 repeat.vim ,就可以用.来重复,所以dst.会和dstdst一样

改变环境

"Hello World!"
*Hello World!*

解决方法:cs"* ( cs:改变周边;":现有周边;*:新周边)

更改周围的标签

<p>Hello World!</p>
<em>Hello World!</em>

解决方法:cst<em> ( cst:改变周围标签;<em>:新周边)

常见示例 1

求一组数字的平均值

3 + 2 + 5 + 7 / 4  
# wrong because brackets are missing# solution
3 + 2 + 5 + 7 / 4  # place cursor under 3, then veeeeS)
(3 + 2 + 5 + 7) / 4# surround text with functions/methods when coding
(3 + 2 + 5 + 7) / 4  # yss)iprint
print((3 + 2 + 5 + 7) / 4)

常见示例 2

强调文本,有和没有 repeat.vim

Hello World.
Hello *World*. 
Hello **World**.

解决方案 1(无 repeat.vim ): ysiw*lysiw移动光标到 W ( ysiw*)下后:用*将单词包围;l:再次移动光标到 W;ysiw*:用*包围单词

解决方案 2(带 repeat.vim ): ysiw*l. ( .重复ysiw*)

结论

为了有助于有意识的练习,我已经合并了上面所有的例子,所以你可以很容易地用它们来定期测试自己。对于每个示例,第一行是原始/开始文本,第二行是目标或结束状态。玩得开心,也可以查看一下文档

# surround.vim practice# Surround
I am happy.      # start
I am "happy".    # goalI am happy; she is sad.
(I am happy; she is sad.)Hello World! How are you?
<p>Hello World! How are you?</p>I am very very happy.
I am *very very* happy.Hello World! How are you?
<em>Hello World</em>! How are you?The solution is x + y = z. You responded wrongly.
The solution is `x + y = z`. You responded wrongly.# Delete"Hello World!"
Hello World<em><p>Hello World!</p></em>
Hello World!# Change"Hello World!"
*Hello World!*<p>Hello World!</p>
<em>Hello World!</em># Examples
3 + 2 + 5 + 7 / 4
print((3 + 2 + 5 + 7) / 4)Hello World.
Hello **World**.

更多帖子, 订阅我的邮件列表 **

我如何让数据影响选择

原文:https://towardsdatascience.com/how-i-let-data-influence-choices-a7a257bfa825?source=collection_archive---------69-----------------------

动手数据

利用数据和常识做出决策。

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

拍摄的照片Unsplash

几年前,我一头扎进了“数据即服务”( data as-a-service,DaaS)领域——就像“软件即服务”,但交付的是原始或半丰富的数据。那时,我在执行深入的数据分析方面经验很少,也不太了解我们的客户角色。我带来的是解决客户问题的愿望和倾听的意愿。

我将在本文中解释的内容并不特定于 DaaS。然而,我要说的是,我专注于数据的经历促使我比其他情况下更快地理解了这些细微差别的重要性。

这是我以产品为导向的尝试,来解释我是如何看待数据并利用数据做决策的。

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

CelpaxUnsplash 上拍摄/由 Luke ChesserUnsplash 上拍摄

做决定

人脑对这部分的理解可能比我们意识到的要好。每天,你都会根据一天中发生的外部刺激——“数据”——做出许多决定。不幸的是,在记录、证明和验证您的决策的企业环境中,您需要理解并向您的利益相关者阐明这个过程。

近年来,数据的重要性和丰富性变得更加明显,以至于数据被称为“新石油”。数据是一种原始资源,如果利用得当,可以帮助您生产出更好的成品。为了实现这一结果,我将介绍两个版本的数据影响决策(我相信还有更多,请随意分享)。

基于数据的决策

基于数据的决策为您提供了灵活性,不仅包括定量分析,还鼓励您包括定性分析。我经常发现自己处于产品开发的十字路口,在这种情况下,选择追求哪种功能/增强功能/新产品时,我所拥有的帮助我做出决定的硬数字和洞察力并不支持。

然而,每枚硬币都有两面,重要的是不要只见树木不见森林——我敢说,也许我们已经采访了愿意承诺购买这种新产品的客户或愿意续订的现有客户。如果我们增加了一项新功能,增加了他们对我们产品的投资回报,就要坚持追加销售。

数据驱动的决策

简而言之,数据驱动决策是指让数据为您驱动决策。在做出数据驱动的决策时,您依赖定量结果来确定手头问题的最佳解决方案。在这种情况下,假设我已经推出了一个新的特性版本,并将其推广到我们 20%的用户群。在我们运行和测试这一功能的过程中,我们看到了每用户平均收入的显著增长。数字不会说谎,证明这种增强似乎是显而易见的。

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

亚历山大·辛恩在 Unsplash 上的照片

你如何决定?

事实证明,数据有利于决策,因为它是有效的!通常最好不要用心去决定。

这很难。

根据我在这里给出的基本定义和例子,你可能会认为调用基于数据的决策方法成为你想要做出的不一定与数字一致的任何决策的理由。需要记住的重要一点是,即使你选择执行决策并调整结果,决策也应该基于数据。以数据为基础至少会帮助你克服你自己的偏见,这种偏见有时是不可避免的。

关于比我聪明的人如何做决定,还有很多更深入的讨论——就在媒体上,比如凯西·科济尔科夫 ( 决策智能介绍)的这篇关于决策智能的文章。

决策智能是一门的新学科与选项选择的所有方面有关。它将最好的应用数据科学、社会科学和管理科学汇集到一个统一的领域,帮助人们使用数据改善他们的生活、业务和周围的世界。

决策智能通过认识到数据驱动的决策的局限性,确保您在利用数据为您的业务做出最佳决策时不遗余力,从而帮助照亮了基于数据的决策等方法。

这篇文章并不全面,我很乐意听到您对未来主题的意见或建议。欢迎在评论中分享。

关于我

我致力于解决问题、推动卓越运营和推出产品。作为一名专注于 DaaS 的产品经理,我还为致力于通过专注于产品的增长和数据价值实现价值最大化的组织提供咨询。伸出手来继续对话或一起工作。

我如何在 8 个月内提升我的数据科学技能

原文:https://towardsdatascience.com/how-i-levelled-up-my-data-science-skills-in-8-months-fae7897965ec?source=collection_archive---------4-----------------------

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

照片由免费龙珠 Z 壁纸 6663 在 Eskipaper

介绍

2020 年 3 月,我接到一个电话,通知我将暂时休假,直到另行通知——非正式的意思是我将获得学习报酬。我知道休假期结束后我被解雇的可能性很高,因为没有我正在积极参与的项目。

尽管我在工作中没有做过太多与数据相关的工作,但是不能用数据做任何有意义的工作的想法困扰着我。尽管如此,我觉得关于我下一步可能做什么,我的选择是有限的,因为我在工作中没有获得太多的实践经验。不要误解我,我曾以实习生的身份工作过,但在我的时间里,我没有做任何事情来显著地(或甚至轻微地)改善业务(至少在我看来)。我处在一个非常低的位置,缺乏自信,怀疑自己的技能…对我来说,休假不能来得更快。

我做出的第一个变革性决定是致力于成为一名经得起未来考验的不可或缺的数据科学家。

当你承诺做某事时,一种来自内心的力量驱使着你。我每天醒来都会想,我今天一定要比昨天更好,这就是我的动力。然而,在这篇文章中,我将分享我在休假期间做的三件事,以确保我更接近我的目标。

教育

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

斯坦尼斯拉夫·康德拉蒂耶夫Unsplash 上拍摄的照片

当涉及到解释机器学习中的理论概念时,我感到很舒服,但我并不满意。

每当我在 Kaggle 上查看人们在使用什么解决方案时,我总是会看到某种形式的助推、打包或深度学习。我对此有很好的理解,但深度学习对我来说是一个禁区。正是当我意识到这一点时,我决定报名参加 Coursera 上的深度学习专业

[## 深度学习

从 deeplearning.ai 学习深度学习,如果你想打入人工智能(ai),这个专精…

www.coursera.org](https://www.coursera.org/specializations/deep-learning)

在这个课程中,我学习了许多基本的深度学习架构和技术,以改进深度学习模型。

编程;编排

我在编程方面已经相当不错了,但每当我听播客讲述人们如何在这个领域建立自己的事业时,有一件事总是让我印象深刻。

多此一举有利于深入了解!

我从未从头开始编写过机器学习算法,这让我怀疑自己是否真的知道发生了什么。

因此,我给自己设定了一个挑战,从零开始编写许多最流行的机器学习算法——对于那些长期关注我的帖子的人来说,你会知道这是从零开始的算法系列

[## 从零开始的算法——走向数据科学

阅读《走向数据科学》中关于算法的文章。分享概念、想法和…

towardsdatascience.com](https://towardsdatascience.com/tagged/algorithms-from-scratch)

此外,我认为有必要提高我在关键数据科学框架方面的技能,如 NumPy 和 Pandas,因此我还创建了 PyTrix 系列

[## Pytrix 系列-走向数据科学

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

towardsdatascience.com](https://towardsdatascience.com/tagged/Pytrix-series)

博客

我决定把我发帖的频率从每周一次增加到每周三次。这种变化迫使我做了两件对我的成长至关重要的事情:

  1. 不断学习
  2. 简化并交流我学到的东西

作为一名数据科学家,不断学习势在必行。我们都知道技术发展的速度有多快,所以为了保持锋利,我们必须磨快我们的斧头。然而,当你学习一个新的话题,并打算向其他人重复这一信息时,尽管我没有做过这方面的研究,但我发现我吸收信息的方式有所不同——我更深入地思考我正在学习的内容,并试图在脑海中描绘出它,这一切都有助于使学习成为一个无缝的过程。

最好的数据科学家并不是最聪明的。

大多数 MOOCs 都不教授软技能,你必须走出去自己学习。

成为一名数据科学家的要求,如知道如何编程、统计、线性代数、微积分和其他关键数据概念,往往会消耗有抱负的数据科学家如此之多,以至于很容易忘记作为一名数据科学家最重要的部分…能够理解业务想要实现什么,然后使用数据来增加价值。

换句话说,一名优秀的数据科学家知道很多技术概念,但他们与伟大的数据科学家的区别在于,他们能够接受一个技术概念,然后以一种包容团队所有成员的方式进行简化和交流,而不管他们的技术水平如何。

“如果你不能简单地解释它,那你就不够了解它”

建立工作关系网

在我个人看来,每个数据科学家都是一个个人品牌。维基百科对企业家精神的定义是*创造或提取价值——*实际上,这是数据科学家的本质。

人们通常只在他们认为是时候获得数据科学职位时才开始社交,我认为这完全是胡说八道。

在你需要之前建立你的关系网。

在过去的 8 个月里,建立数据科学网络帮助我提高了 5 个方面:

  • 援助

有些人在生活中走在你的前面,我个人认为宇宙允许我们与这些人相遇,所以他们可以指引你。让我们面对现实吧,在你的数据科学职业生涯中,你将需要寻求帮助!

  • 营销

一个强大的网络是一个伟大的思想试验场。我在我的 LinkedIn 上进行了许多民意调查,它为我提供了即时反馈。此外,你可以获得个人推荐。就目前的情况来看,我从来没有申请过工作,因为我一直都知道口碑的力量,而且我在很多场合都利用了它——不管是哪个领域。

  • 向他人学习

你不可能知道数据科学(或一般生活)的一切,拥有一个多样化的人际网络会让你接触到新事物。经验不重要,如果你有一个构建良好的网络,你会学到新的东西。

  • 交朋友

如果你问和我一起长大的人什么是人工智能,他们可能会回答来自黑镜的东西。在这个领域没有朋友可能会很孤独,因为肯定会有你感到疲惫、没有动力的时候,而且你的非数据科学朋友可能无法理解你。与其他数据科学家交流可以让你意识到,你并不是世界上唯一一个面临特定挑战的人,当我情绪低落时,这肯定会让我振作起来。

  • 人们知道你能提供什么

维系任何关系的胶水附着在每个人带来的东西的两面,就是这样。如果人们知道你是做什么的,把你介绍给别人会容易得多——这就是我如何在 8 月份找到一份自由职业的。

包裹

需要注意的一个关键点是,我已经接触了很多这个领域,这让我能够像现在这样进步;我要说,我所做的改变我职业轨迹的最重要的事情就是承诺。承诺是一个长期的决定,每天提升自己只掌握在你手中。对你的职业负责,是发展你自己的开始。虽然我离我想要的数据科学职业还差得很远,但我比昨天更近了,比 8 个月前更近了。

让我们继续 LinkedIn 上的对话…

[## Kurtis Pykes -人工智能作家-走向数据科学| LinkedIn

在世界上最大的职业社区 LinkedIn 上查看 Kurtis Pykes 的个人资料。Kurtis 有一个工作列在他们的…

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

我如何让 ChromeBook 成为我的数据科学日常驱动程序

原文:https://towardsdatascience.com/how-i-made-a-chromebook-my-data-science-daily-driver-af273ee47828?source=collection_archive---------13-----------------------

在 ChromeOS 中利用 Linux 和 android 应用

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

获得 Chromebook

近年来,hromeOS 已经取得了长足的进步,已经成为购买运行 Windows 10 的传统、笨重、昂贵的笔记本电脑的更可行的选择。最近,Chromebooks 获得了从谷歌 Play 商店安装和使用安卓应用的权限。对于充分优化的应用程序来说,这可能非常棒;获得全屏、完全正常的 android 应用程序体验,就好像你在使用一个带有专用键盘的苹果 IPad 一样。正如你可能想象的那样,这些应用程序运行得相当好。Chromebook 处理器在很大程度上是标准 Android 手机处理器的强大竞争者,并且具有相同的基础架构 ARM64。

但是有了笔记本电脑,有很多需要做的事情是 app 做不到的。幸运的是,谷歌偏离 Linux 太远的问题已经在某种程度上得到解决,现在允许从基于 Debian 的仓库安装 Linux 应用程序。所以现在在 ChromeOS 中,我们可以兼容 Debian 仓库中的 ARM64 应用程序,以及 android 应用程序。

所以在寻找我的 Chromebook 时,这两个是我的大要求。笔记本电脑需要有 aptitude 包管理器(我每天使用的包管理器),可能还需要能够运行 Android 应用程序。这两大功能只是 ChromeOS 最初自带的功能之外的功能。ChromeOS 的用户界面不是我最喜欢的,但绝对干净、漂亮、可用。

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

我的衣柜里放着大约 20 台不同时代的 Lenovo,Thinkpads,Yogas,所以显然当我在网上看到一台标价 30 美元的联想 C330 Chromebook 时,我抓住了这个机会。我不仅可以摆弄 Chromebook,还可以增加我的联想收藏!

联想 C330 是一款很棒的预算 Chromebook,虽然是 ABS 塑料,但是手感比较扎实。键盘还好,有点黏糊糊的,触控板很适合这个系统。这是一款敞篷车,就像我的 Yoga 910 一样,但可能是由于边框、尺寸和 Android 应用程序兼容性的原因,我实际上最终会在平板模式下使用笔记本电脑,而我的 Yoga 910 就不是这样了。此外,我讨厌这样说,但 USB-C/Thunderbolt-3 充电对我来说绝对是一个巨大的优势,因为我喜欢使用

一根电缆代表一切

我为什么想要 Chromebook

首先,应该指出的是,我是一个电脑收藏家和电脑狂热者。增加我的收藏总是一件很棒的事情。除此之外,我还是一个超级 Unix 迷和发行版迷。简而言之,我想要一个新的玩具来玩,但使用 Chromebook 也有一些关键的好处,这些好处是 Chromebook 名称中的主要部分。

电池寿命是许多 Chromebook 的重点,谷歌经常在 chrome book 广告中专门针对电池寿命。我选择的 Chromebook 充电速度很快,平均续航时间约为 10 小时。当然,这有一点不同,但与我目前的日常驱动程序相比,它通常会加倍运行时间。

此外,我使用很多 Google Play 服务,因为我也是安卓用户。Google Play 音乐,Google Play 电影,便利是肯定存在的,因为在我的日常驱动程序上,我无法从 Google Play 下载任何东西。

设置

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

开箱即用,谷歌已经在吹嘘他们的低级 API 和兼容层,要求你在谷歌账户上安装的 Android 应用程序安装到你的 Chromebook 上。在这些应用中,我选择了 Slack 和 Zoom,这两个应用是我每天经常使用的。这两个应用程序都可以在 Chromebook 上完美使用,所以幸运的是,看起来我们不需要更换它们中的任何一个。除了这些推荐的应用程序之外,第一个设置会将一个名为“Linux 应用程序”的小文件夹放入您的应用程序抽屉中,里面有一个终端应用程序。当然,这是我在 Chromebook 上做的第一件事,甚至是在打开谷歌 Chrome 之前。

快速设置会让您进入 Linux 终端,在那里您可以执行 bash 命令。在古典自然中,我输入的第一件事是

限位开关(Limit Switch)

这没有产生任何结果。好的,接下来我决定看看我们会有多有限,然后开始 CD。当我运行 cd 时…我可以访问整个/目录,尽管所有的文件都被 Google 隐藏了,所以你必须使用 ls -a 而不是 ls。此外,我们可以访问 apt,所以我继续进行了经典测试

sudo apt-get update && sudo apt-get full-upgrade

接下来,如你所料,我决定开始安装一些软件。我的第一个测试是 gedit

sudo apt-get install gedit

幸运的是,gedit 工作正常,甚至出现在 ChromeOS 的应用程序菜单中。不可否认的是,ChromeOS 的 GTK 主题让它与操作系统融合得非常好。

朱皮特

在我确定 apt 运行良好后,我决定继续追求 Jupyter 笔记本。它非常流畅,使用简单的

sudo apt-get install jupyter-notebook

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

运行笔记本服务器就像在您的终端上运行 jupyter-notebook 一样简单。显然,我喜欢 Python,但要成为我的日常驱动程序,这台电脑将需要朱莉娅。为了得到朱莉娅,这是同样的事情:

sudo apt-get install julia

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

而现在我们有了 Julia,但是有一个很大的问题…Julia 的最新版本是 1.2,而 ARM64 可用的 apt 中的最新版本是 0.4。因此,有一个非常严重的 Pkg bug,没有 Pkg REPL,很多包包括用于机器学习的车床都不能与这个版本的 Julia 兼容。

下一步:多建筑

幸运的是,我们在一个虚拟的 Debian 机器上,这意味着 GNU 自由软件的辛勤贡献者们将直接迎合我们。Debian Stretch 预装了 MultiArch,它很容易配置。不幸的是,我们将不得不从 aptitude 快速获取 nano 来编辑一些文本文件(或者你可以使用 gedit 或 vi,如果那更适合你的速度的话)。)

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

幸运的是,我们可以很容易地在 ChromeOS 上纳米到我们的资质来源列表中,因为第一步正是如此。

sudo nano /etc/apt/sources.list

对于 Apt 来说,在这里添加 Ubuntu 源代码可能不会有问题,但是我决定继续使用 Debian Stretch,将这一行添加到源代码文件的底部:

deb-src [http://deb.debian.org/debian](http://deb.debian.org/debian) stretch main

现在我们可以添加我们的新架构,我认为 i386 (32 位)比 AMD64 (64 位)更容易工作。我们可以很容易地添加它

sudo dpkg --add-architecture i386

然后我们需要更新和全面升级:

sudo apt-get update && sudo apt-get full-upgrade

但是当试图为 i386 安装 julia 时,我们遇到了一个新问题:

属国

虽然许多应用程序可以很好地安装在我们现有的应用程序上,而且我们可以用它们来修复依赖性错误

sudo apt-get build-dep julia

这在这里是行不通的,因为对于 arm64 兼容性来说,不存在依赖兼容性文件。无论如何,我仍然决定构建我们已经可用的依赖项。经过一段荒谬的时间后,我们会遇到一个仍然没有解决的依赖问题。在这种情况下,你唯一需要考虑的是把我们的软件包更新到最新版本,也就是 Debian 10/buster。当然,出于稳定性考虑,不建议这样做,也不能保证这样做一定会奏效,但这可能是安装应用程序的最后一次尝试。因此,我们将再次编辑我们的源文件,但这一次我们将把所有提到“stretch”的地方都改为“buster”。写出来,关闭 nano,更新你的资源。

现在我们应该避免通过 apt 得到一个 HTTP 错误,所以我们将升级我们的发行版。环境似乎是虚拟的,所以幸运的是,我们可以完全独立于 ChromeOS 升级我们的发行版,而不需要内核或 grub 更新:

sudo apt-get dist-upgradenano /etc/apt/sources.list
sudo apt-get update && sudo apt

这将是我们最后一次尝试使用 MultiArch 运行我们的应用程序,所以在一个完美的世界里,这将是让您的应用程序工作的事情。对于 Julia,我能够使用 Debian 10 Buster 库让 amd64 Julia 与 MultiArch 一起运行。所以现在我可以正式把我的 Chromebook 命名为我的

JuliaBook

结论

ChromeOS 真的已经从上网本的历史中走了很长一段路。这是一件伟大的事情,因为它使 Chromebooks 成为一个可行的替代品,而以前它不是。现在,您有可能使用 Kdenlive、Gimp 和开放广播软件等应用程序进行多媒体应用,几乎可以使用每种编程语言、libre-office,甚至 Gparted 等系统管理器。我看到了很多关于安装的讨论。deb 文件从网上安装的,还有用 arm64 给的简写,但是从来没有人试过用 MultiArch!所以我希望 Chromebook 的用户能够从他们的 Chromebook 中获得更多!

我如何制作智能求职网络应用程序

原文:https://towardsdatascience.com/how-i-made-an-intelligent-job-search-web-app-8676edc74eb5?source=collection_archive---------71-----------------------

使用简历寻找相关的工作信息

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

作者图片

找工作糟透了

任何找工作的人都可以告诉你,这是一项艰苦的工作。搜索相关职位,更新你的简历和 Linkedin,申请工作,写求职信,面试需要大量的时间和精力来完成。我经常听到的一句话是:“求职是一份全职工作。”

找工作最费时费力的一个方面就是寻找相关的工作职位。这通常需要经常浏览网上的招聘信息,浏览相关的职位名称,阅读职位描述,并确定这份招聘信息是否与你的资历相关。因为这些数据大部分都可以在网上获得,所以这项任务实现自动化的时机已经成熟。

应用概述

给我找一份开发者工作 是一款网络应用程序,旨在搜索在线职位公告板,并根据特定申请人提供的简历确定哪些职位发布与他们最相关。相关性是通过相似性得分来确定的,相似性得分表明简历与职位发布的相似程度。

这个应用程序是一个简单的,准系统的概念验证,将不断增加和改变。目前,该应用程序仅通过 Github 求职板进行搜索,是为搜索开发人员职位的申请人量身定制的。

由于 Github 上发布的职位数量很少,这个工具对于详尽的职位搜索不是很有用。但是,随着更多职务公告板的添加,该值将会增加。

这个应用程序目前还使用一个简单的相似性算法。这个算法有很大的改进空间,并且将成为未来改进的一个关键特性。

体系结构

给我找个开发者工作 是用 Python 和 Streamlit 包开发的。 Streamlit 是一个令人惊叹的 python 包,允许您快速轻松地创建 web 应用程序——尤其是机器学习工具。如果你本质上是一个数据科学家,而不是像我一样的网页设计师,我强烈推荐你点击这里查看 Streamlit。

除了 Streamlit,pandas 和 numpy 还用于数据处理、api 调用请求、JSON 用于解析 API 返回,difflib 用于相似性算法。

数据管道

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

作者图片

web 应用程序有三个主要组件:用户界面(即前端)、web 服务器(即后端)和 API 服务器。

用户界面(前端)

用户界面(如下所示)提示用户输入位置、搜索项和简历文本。这三个输入将被传递到服务器后端。位置和搜索词都是可选参数,但是,不提供简历将导致应用程序选择随机工作,因为它没有任何相似性得分来排名。

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

作者图片

Web 服务器(后端)和 API 服务器

在接收到位置、搜索词和简历之后,服务器将构造一个对 Github job board API 的 HTTP 调用。该调用由位置和搜索项参数构成。然后,API 将返回一个 JSON 字符串,其中包含符合参数的作业。使用 JSON 库读入 JSON 字符串,并将其转换为 pandas 数据帧进行处理。然后,服务器将每个职位的描述与简历进行比较,并计算相似性得分。然后,具有最大相似性得分的职务被传递到用户界面,显示职务名称、描述和申请方法(如下所示)。

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

作者图片

云托管

在 Streamlit 中创建一个本地 web 应用程序是很棒的,但是,允许其他人轻松访问该应用程序也很重要。为了让人们通过我的网站访问这个工具,我把这个应用程序部署到一个免费的 Heroku 服务器上。为此,需要四个文件:应用程序本身、设置文件、Procfile 和需求文件。

安装文件

安装文件是一个 sh 文件,包含 web 服务器的说明。我使用的安装文件如下所示。

mkdir -p ~/.streamlitecho "[server]
headless = true
port = $PORT
enableCORS = false
" > ~/.streamlit/config.toml

Procfile

Procfile 声明应该运行哪些进程。我的 Procfile 如下所示。

web: sh create_config.sh && streamlit run app.py

需求文件

需求文件是一个文本文件,声明在服务器上运行应用程序需要哪些 python 包。我的需求文件如下所示。

streamlit==0.61.0
numpy==1.17.2
requests==2.22.0

讨论

给我找一份开发人员的工作是一个基本的概念验证。虽然我希望这个项目更进一步,并开始用这个工具提供更多的价值,但 Python 和 Streamlit 是不可或缺的,它们让我能够快速建立并运行一个原型,以收集反馈并进行迭代改进。如果你想测试一下应用程序,我会欣然接受你的任何反馈!

如何使用 Pyodbc 将 SQL Server 的插入速度提高 100 倍

原文:https://towardsdatascience.com/how-i-made-inserts-into-sql-server-100x-faster-with-pyodbc-5a0b5afdba5?source=collection_archive---------2-----------------------

如何修复向 SQL Server 加载数据时与“fast_executemany”相关的问题

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

照片由 NextvoyagePexels 拍摄

我最近一直在尝试用 Python 将大型数据集加载到 SQL Server 数据库中。通常,为了用pyodbc加速插入,我倾向于使用显著加速插入的特性cursor.fast_executemany = True。然而,今天我经历了一个奇怪的错误,并开始深入研究fast_executemany到底是如何工作的。

我的数据框架和 SQL Server 表的架构

当我试图将我的数据加载到 SQL Server 中时,我得到了错误:“将数据类型 varchar 转换为 numeric 时出错。”

这个错误让我非常困惑,因为我的 Pandas 数据帧的数据类型与 SQL Server 表中定义的数据类型完全匹配。特别是,我试图加载的数据是一个带有时间戳和度量列+一些元数据列的时间序列。

*My dataframe schema:
summertime     bool
time           datetime64[ns]
unique_id      object
measurement    float64
entered        datetime64[ns]
updated        datetime64[ns]*

SQL Server 表有一个与此类似的模式:

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

SQL server 表的架构

如果你看看数据类型,它们完全匹配。

“将数据类型 varchar 转换为数字时出错”

为了将这些数据快速加载到 SQL Server 数据库中,我使用df.values.tolist()将 Pandas 数据帧转换为一个列表列表。为了将我的数据接收到数据库实例中,我创建了:

  • SQL Server 数据库实例的连接对象
  • 光标对象(来自连接对象
  • INSERT INTO声明。

注意,在第 14 行,我们使用了cursor.fast_executemany = True特性。执行脚本时,我得到了以下错误(带版本: *pyodbc==4.0.23*):

ProgrammingError: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server] Error converting data type varchar to numeric. (SQLExecute)

为什么 **pyodbc** 要把 **varchar** 的东西转换成 **numeric** ?!当我注释掉第 14 行以便在没有fast_executemany特性的情况下使用cursor.executemany()时,脚本运行得很好!我能够毫无问题地插入我的数据。

唯一的问题是没有fast_executemany,很慢。

fast_executemany"深入挖掘

根据 Pyodbc Wiki [1]:

fast_executemany可以通过大大减少到服务器的往返次数来提高executemany操作的性能。

这是我想解决这个问题的主要原因。根据来自pyodbc库[2]的 Github 问题,pyodbc内部将所有十进制值作为字符串传递,因为一些差异和与各种数据库驱动程序使用的小数点相关的错误。这意味着当我的数据具有值0.0215270.02时,这两个值可能都不被接受,因为我的 SQL Server 数据类型被指定为NUMERIC(18,3)。另外,pyodbc需要字符串而不是浮点,所以正确的值应该是'0.021',也就是说,字符串(不是浮点!)逗号后面正好有三个数字。

所以我的解决方案可以归结为增加这一行:

这一行只是将浮点数转换成字符串,用三个小数点表示数字:

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

对我来说,使用“fast_executemany”和 floats 是一个“奇怪”的解决方案

修复“fast_executemany”的好处

在修复了这个问题之后,该脚本的运行速度比不使用第 14 行(cursor.fast_executemany = True)时快了 100 倍。请注意,它之所以如此之快,是因为它在将数据加载到 SQL Server 之前将整个数据加载到内存中,所以如果您遇到内存不足错误,请考虑分块加载*。*

结论

总之,通过将我的 float 列转换为与 SQL Server 表中定义的小数点数字完全相同的 string,我能够修复*“将数据类型 varchar 转换为 numeric”的错误。令我颇感意外的是,pyodbc并没有在引擎盖下处理这个问题(,或者可能在最近的 Pyodbc 版本中已经解决了?*)。

如果你觉得有用,请关注我,不要错过我的下一篇文章。

资源:

[1]https://github . com/mkleehammer/pyo DBC/wiki/Features-beyond-the-d b-API

https://github.com/mkleehammer/pyodbc/issues/388

我如何用电报机器人让我的女朋友开心

原文:https://towardsdatascience.com/how-i-made-my-girlfriend-happy-with-a-simple-telegram-bot-2be8e4b150e7?source=collection_archive---------17-----------------------

在我的树莓 Pi 上构建电报机器人的短暂旅程

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

JESHOOTS.COMUnsplash 上拍照

在这篇文章中,我将解释我设计的电报机器人的实现细节:家庭下载器

家庭下载器允许用户轻松地从互联网上下载视频,然后在他们喜欢的任何设备上观看。它是由用户的简单请求触发的,用户将请求发送到所选的 URL。收到文本后, home-downloader 会检查不需要的用户。然后,它将相关视频下载到一个目录中,该目录存储在 Raspberry Pi 上,可通过本地网络访问。最后,Pi 会将视频播放到用户选择的屏幕上,而用户则可以尽情享用一些受之无愧的爆米花。

问题是

我家里有两台电视,一台是智能的,第二台……没那么多。为了帮助第二个(主要由我的女朋友使用)跟上新的花哨技术,我买了一个小米 Mi Box S。然而,仍然缺少一些东西:我的女朋友不为所动,尽管她可以访问任何发明的媒体服务。问题:她想播放她在网上找到的视频,但有些视频太重,无法通过 Mi Box 打开。Chromecast 也不是一个可行的选择,因为它不允许她从这样的网站上播放视频!

废话!这让我陷入了困境…当我的全新 PS5 到来时,我该怎么办?谁会宣称智能电视的所有权?!

所以我决定解决这个问题,并告诉她

解决方案

好了,让我们建立一些约束/要求:

  • 我不想在这上面花钱,我想用家里现有的东西。
  • 任何一种用户交互都应该尽可能流畅,我女朋友不是计算机科学家,也不是科技爱好者:)
  • Python

我向工程师提出的解决方案必须解决以下问题:

  • 给我一个网址,我能下载视频吗?
  • Android 盒子将如何访问下载的视频?
  • 以上两点如何实现自动化?
  • 最好的用户界面是什么?

原来下载网络视频最简单的方法是 youtube-dl。这款软件的优势之一是它不仅适用于 YouTube:)

tbh,不是每个网站都能用的,不过好在兼容的网站列表还挺大的。是啊。

我决定从我的 Raspberry Pi (RPI)运行 youtube-dl 并将视频保存在 RPI 上托管的文件夹中,并与 桑巴 共享。这个文件夹对于位于同一个本地网络的 Android Box (AB)是可见的。

现在仍然缺少一个重要的部分:从 AB 读取视频。在这一点上,我很确定 VLC 会成功。从 AB 访问 Samba 目录是非常简单的……除非你使用的是 VLC 桌面!因此,试图将 AB 和 VLC 合并是一个巨大的混乱…事实上,我发现这是一个非常著名的,仍然没有解决的问题。但是后来 KODI 出来帮我:易如反掌:)

至此,我才明白 home-downloader 应该是一个电报机器人。我懒得实现任何接口/API,但也不想把工作外包给:D 电报公司!因此,我决定让用户与电报机器人互动,也就是通过简单的聊天。毕竟,Telegram 已经提供了实现这一点所需的所有 API。

你可以在下面看到完整的建筑图:

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

由作者创建

履行

我选择的语言是 Python 3.8。

该项目由两个组成。py 脚本和一个*。json* 配置文件:

  • 它存储了 Bot 令牌和其他一些我们不想硬编码到 python 脚本中的信息。
  • modules.py 它包含三个函数。
  • home _ downloader . pymain。

在深入了解代码的本质之前,这里是我的设置:

  • 我使用了一个名为 python-telegram-bot 的不错的库,它为原始的电报 API 提供了友好的接口。
  • 我在我的 Raspberry Pi 2 Model B 上运行拱臂,并且我按照这个拱臂提供的指导方针设置桑巴。
  • 我之前用机器人父亲机器人注册了一个电报机器人,目的是引导用户完成注册。官方指南会给你一个相当透彻的介绍。

配置文件

在这里,我们保存:**a)**home-downloader Bot 的秘密令牌; b) 可以与机器人交互的用户列表, c) 主人(这里是我)与机器人聊天的 ID。

关于 c) ,出于隐私考虑,我不想让任何未经授权的用户进入!因此,当新用户开始与 home-downloader 聊天时,它会检查该用户是否属于预先确定的白名单。

备注:在部署机器人之前,所有者必须读取他和机器人之间的聊天 ID 并保存到配置文件中。这是每次新用户开始与机器人聊天时,从机器人向主人发送直接消息的唯一方式:电报机器人不能在给定用户名的情况下发送直接消息。

要找出聊天 ID,只需与机器人开始一个新的对话,并在我们将要看到的一个函数中打印这个属性:

update.message.chat_id

模块

该项目包括三个主要功能。

首先,我们设置了一个日志记录器:当你在后台运行几天时,检索关于脚本执行的信息是很有用的!其次,我们打开*。json* 配置,这样项目的所有功能都可以看到它。

下面的函数是 youtube-dl 的包装器,由子进程执行。子进程库允许您从 Python 运行 bash 命令并返回输出。执行的结果用于确定视频是否被正确下载。

现在我们必须绑定聊天动作和触发电报机器人的命令。正如我上面提到的,每当一个新用户开始一个对话时,以及当一条新消息被发送时,这个机器人应该被触发。

欢迎功能在每次用户开始聊天时打印一条欢迎消息(即通过习惯的 /start 命令)。而且,当前聊天的用户的用户名随后被发送给主人(我!),在 config.json 文件中定义。

最后,incoming _ message _ action函数对新消息的处理进行编码。对每条消息进行解析,以发现 URL(第 8–11 行)。

如果 URL 被批准,该函数将检查网站域(第 14 行):事实上,我可能希望只允许某些网站被用作来源。原因很简单:我不想让我的 RPI 在没有我的允许下下载数十亿字节的资料!

你可能已经注意到函数 incoming_message_actionwelcome 有一些共同点。首先,它们接受两个名为更新上下文的参数,这两个参数包含触发机器人的用户的信息和聊天消息。其次,它们都共享这段代码:

if update.message.chat.username not in config["valid_users"]:
    return False

上面代码片段的目的是检查与聊天交互的用户是否被允许这样做。

这是将 bot 的使用限制在特定用户范围内的唯一方法。希望 Telegram 能添加一个合适的特性来做到这一点。

家庭下载器

home_downloader.py 把我们目前看到的内容汇总在一起。

机器人被初始化,处理程序基于我们到目前为止看到的函数被创建。

最后,通过调用函数 start_polling 来启动 bot。

结论

在本文中,我想展示我如何处理现实生活中的问题以及我实现的解决方案。我试图强调每个决定背后的创造过程。

这是项目的 GitHub 链接。由于这是一项正在进行的工作,一些代码可能与本文中的略有不同:我已经在开发一些新的特性和改进。无论如何,上面的代码是你构建自己的 Bot 并根据你的需要定制它所需要的全部。

特别感谢阅读和评论这篇文章草稿的人们:

加布里埃尔·约马佐和克里斯蒂安·孔特雷拉斯·坎帕纳

我是如何制作出世界上第一首 100%人工智能歌曲的

原文:https://towardsdatascience.com/how-i-made-one-of-the-worlds-first-100-ai-songs-45da7297075c?source=collection_archive---------36-----------------------

歌词、音乐和人声都是在没有人工参与的情况下创作出来的

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

图片来自皮克斯拜 (CC0)

你可能听说过“人工智能音乐”这个术语,但你可能从未真正想过它的含义。以下是大多数人的期望:

Aiva 的一首摇滚歌曲

这首令人惊叹的人工智能音乐是由一家名为 Aiva 的公司创建的,该公司使用尖端的机器学习技术来创建这样的曲调。也有人工智能乐队使用类似的机器学习程序在网上发布伟大的音乐。但是,你可能没有意识到,这首歌的原始版本听起来一点也不像你听到的。他们通常使用音乐编辑软件来极大地改善人工智能提出的东西。

AI 的主要输出是旋律,通常是 MIDI 钢琴音轨的形式。当你开始尝试让电脑自动添加其他乐器时,问题就来了。它对节拍没有很好的感觉,也不知道如何混合各种乐器来跟随钢琴的旋律。更糟糕的是,MIDI 文件大部分时间都有非常计算机化/虚假的声音,就像旧的视频游戏音乐。你绝不会把它和你可能在收音机里听到的一首真正的歌混淆。

因为所有这些,人工智能音乐公司和人工智能乐队通常混合使用人类输入和人工智能输入(参见这个谷歌博客帖子中的一些好例子)。到目前为止,我所谈论的甚至没有涉及到让人工智能写歌词和唱歌的所有问题。

为了便于比较,这是我的人工智能杰作,电脑创造了一切(歌名、歌词、旋律、音乐和人声):

我的一首人工智能创作的歌曲

是的,太糟糕了。不过,我没想到会进入前 40 名。重要的是,这是我所知道的为数不多的从头到尾 100%使用人工智能制作的歌曲之一。你可以在我的人工智能音乐网站上听其中的 10 首歌,还可以查看歌词。

我是这样做的:

音乐是用谷歌的开源软件自动生成的。具体来说,我使用了预先训练的“三重奏”模型,正如他们在 MusicVAE 博客帖子中所描述的。

歌词是使用开源的 GPT-2 简单的自然语言程序编写的,我在我的文章如何创建一个关于这个歌词网站的歌词生成器中描述了我对诗歌和歌词的训练。歌名的选择是基于各种非人工智能的规则,大多与歌词中使用最多的台词有关。

人声是最难的部分之一。它必须检测音乐中旋律的音高,将文本转换为语音,并调整语音以匹配旋律的音符。最重要的是,它必须努力找出虚拟歌手应该在哪里说出每个单词,以保持节拍。

还有一个问题是,我不能简单地将 MIDI 音乐文件直接输入到声乐合成程序中。首先,我必须将原始的 MIDI 文件转换成新的 MIDI 文件,其中只有一个通道包含钢琴部分,因为这通常是歌手需要遵循的旋律。我使用了一个叫做香蕉分裂的开源程序来完成这个任务。

接下来,我使用一个名为 midi2voice 的开源虚拟歌手程序来创建人声(一个 WAV 文件),使用歌词和音乐作为输入。最后一步是将声音文件与原始 MIDI 音乐文件结合起来,以产生歌曲。我这样做是通过将 MIDI 文件转换成 WAV,然后像这样使用 ffmpeg 的 amerge 命令:

ffmpeg -i imabandoned.wav -i imabandoned_singer.wav -filter_complex amerge=inputs=2 -ac 2 imabandoned_final.mp3

最终,我实现了我的目标,那就是建立一个自动化的框架来创作一首不需要人工干预的人工智能歌曲。不只是像其他人一样关注音乐,而是用歌词和唱腔把它变成一首真正的歌。我事先知道这听起来不太好,但这只是一个开始。现在我有了一个演示版本,我可以对它进行改进了。也许甚至有一天推出一个人工智能摇滚明星,有 CD,merch 和虚拟音乐会。但是我还有很长的路要走。

一些额外的人工智能音乐资源:

流行音乐制作人:这篇文章有很多关于这个话题的信息,还有一个他的开源程序的链接。

达达机器人——他们使用原始音频而不是 MIDI 制作人工智能音乐,因此结果听起来更真实。但是,大部分输出听起来并不好,所以他们需要手动将许多音乐片段整理成一首歌。

EDM 音乐制作人——你可以在他的 YouTube 视频中听到这个开源程序的演示。

神经故事讲述者(见页面底部)——来自 Pi project 的部分歌曲。他们和我做同样的事情,但是使用非常不同的方法,并在学术论文中解释他们是如何做到的。

Mellotron —来自 NVIDIA 的高品质语音合成,用于演唱。

经过对抗训练的端到端韩语歌唱语音合成系统——这听起来太真实了,但他们没有发布代码,所以我很难复制。

作为一名数据科学家,我如何管理我的时间并保持有序

原文:https://towardsdatascience.com/how-i-manage-my-time-and-stay-organised-as-a-data-scientist-e3e78871b7b5?source=collection_archive---------42-----------------------

我遵循的快速提示和简单规则

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

照片由 米凯拉 发自 像素

作为一名数据科学家,我的工作有很多层面。我需要跟踪项目需求、利益相关者的要求、代码开发和我想尝试的新想法。除此之外,我还想掌握我想学习的新知识。

很容易理解为什么如果你没有一个适合你的计划,事情可能会失控。很幸运,我男朋友是生产力老师。在建立符合我需求的工作结构时,他给了我很多建议和支持。

起初,我认为设置这些东西会很麻烦。虽然我不得不承认,现在它节省了我很多时间,不用花几个小时去想我下一步应该做什么,或者在开发中期痛苦地感到失落和困惑。我建议你建立一个适合自己的系统,并坚持下去。希望能启发你,并向你展示一些选择,以下是我如何组织和管理我的时间。

我确保可以在一个日历上看到所有即将发生的事件。这包括我的工作事件、个人约会和电话,所以你想成为一名数据科学家?开会,预约医生。基本上,任何让我身心俱疲的事情。在一个地方看到所有这些帮助我了解我一天中有多少时间来做专注的工作。这有助于设定我每天的期望。

这也有助于我将一天划分为不同的情境,因为我会用情境切换来解释更多。

我使用任务管理器来记录我想做的每件事和我生活中不同部分的所有项目。我使用的任务管理器叫做 Things。

当然,这可能是非常私人的事情。正如我所说,我的男朋友是一名生产力教师,所以我能够得到他的帮助,为我建立最好的系统。你可以在他的 YouTube 频道上找到他的建议。

在任务管理器上,我写下了我的项目。这些不一定只是工作项目。报税,申请居留许可或者为我的新课程创建销售页面都是项目。我写下为了完成这个项目我需要做的每一件事,如果必要的话指定一个截止日期,这样我需要做的每一件事都记录在一个地方。

这样我总是知道我突出的任务和责任是什么。

我偶尔(最好是每周)回顾一下我的任务,看看我进步了多少,我还没有解决什么,我已经完成了什么。我用这段时间来思考和计划未来的日子。这样,当我开始新的一天时,我或多或少已经知道需要做什么。

我会花几个小时来集中注意力。因为与其他人一起工作时,会议或闲聊可能会被打断。我想现在大家都在家里工作,这种情况会少一些,但还是有被你的手机吸进去的危险。

为此,我会确保在我的日历上留出时间,在这段时间里我会离线并处理我的主要任务。这包括将我的电脑设置为“请勿打扰”,退出所有可能弹出任何通知的应用程序,把我的手机放好,戴上降噪耳机。

你会惊讶地发现,每天只需 2 小时不间断的工作,你就能完成多少事情。

**我尽量避免让自己负担过重。**我们都有梦想和抱负,我们都想尽快实现它们。但我认为,明智地规划我的时间比试图耗尽自己的最后一点生产力要好。这些年来,我意识到把自己逼得太紧是有后果的。首先,我在追逐我为自己设定的最后期限时变得压力太大,其次,我开始怨恨我的工作占用了我所有的时间,没有任何时间花在自己身上或只是放松。然后,我开始错过最后期限,事情变得不可收拾,这只是时间问题。

我发现的一个解决办法是给自己放松的时间表。如果我知道一项任务至少需要 2 小时,我不会把它分配到 2 小时的时间段。我把它分配到一个 3 小时甚至 4 小时的时间段。如果在一天结束的时候,我还有时间或精力去做别的事情,我总是可以接受的。这就引出了我的下一个观点。

我意识到这不仅是时间的问题,也是精力的问题。仅仅因为你一天中有更多的时间,并不意味着你应该用这些时间去工作。有时候事情可能会太混乱,可能会有个人的麻烦,比如爱人需要你,或者有开心的事情要处理,比如你坠入爱河。无论大小,我意识到我周围的一切都需要我一整天的能量。我确保意识到我能抽出多少精力来完成一天的任务。这帮助我决定如何计划我的日子;我认为更紧凑或更灵活…

我计划我的每一天都需要尽可能少的环境转换。这是让我在最繁忙的工作日保持高效的关键因素之一。上下文切换正在改变你工作的领域。这可能是工作中的项目 A 或项目 B。这也可能是做与工作相关的事情和处理个人行政事务之间的区别。

我意识到对我来说这需要大量的时间和精力。我经常发现自己在两种不同的环境下工作时需要休息一下。这就是为什么在我计划一天的时候,我会尽量限制一天中需要切换上下文的次数。

看看我的日历,如果我早上有一个与项目 A 相关的会议,只要我需要/可以,我就会把早上的时间花在思考和做与项目 A 相关的任务上。如果下午我需要交付一些东西,我会确保把那段时间花在某个项目上。

**我把我的想法记录下来并保持有序。**正如我在本文开头所说,一个数据科学项目有很多层。我需要关注的不仅仅是我的代码和编码任务。我还需要跟踪我在开发过程中提出的新想法、项目要求和许多其他事情。

为此,如果项目规模较小,我会确保在我的笔记应用程序上创建名字容易找到的笔记。如果是一个更大的项目,有多个客户会议和各种利益相关者,我会创建一个专门的文件夹,保存我所有的相关文档。偶尔,我会确保花时间来整理这个文件夹。停止你整理笔记和文件的动力感觉是违反直觉的,但我认为从长远来看,它帮助我更有效率,进步更快。

我还会在手边放一个记事本或笔记应用程序,记下我的任何新想法。尽管在编码的时候停下来做笔记很难,所以我找到的一个解决方法是在我正在做的笔记本上做笔记。我用自己想出的关键词,比如#ATTENTION 或#TODO,来记下我现在不能做或想做但下一步想做的事情。

保持组织性和高效性并不一定具有挑战性。我追求的主要目标是善待自己,意识到自己的极限,花时间仔细思考我的计划。希望我在这篇文章中提到的事情能给你一些关于如何应对生产力挑战的想法。

🐼想更多地了解熊猫吗? 获取我的免费熊猫小抄。

我是如何从 IT 支持人员转变为数据科学家的

原文:https://towardsdatascience.com/how-i-managed-to-changed-my-career-from-support-it-to-a-data-scientist-31636f68f18c?source=collection_archive---------7-----------------------

你决定你的命运

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

多兰·埃里克森在 Unsplash 上的照片

科学称数据科学家是未来收入最高的工作。从大学时代起,我就对 python 和数据科学技术感兴趣。但是,在生活中,事情并不总是如你所愿。我被一家跨国公司录用了。当时我很高兴我被安排在了一家公司。怀着在数据科学领域发挥作用的希望,我加入了这家公司。当我们找到工作时,我们通常会感到高兴。然而,在我心里,我希望更多。我想我会在数据科学领域工作。

终于,有一天他们给我安排了一个项目。

我知道我将作为支持 IT 人员工作,支持不同的应用程序。啊!所以,现在我将不得不从事 IT 支持任务,但是我成为一名成功的数据科学家的热情和目标呢?

一开始,我很麻木,因为我的团队强迫我学习支持任务,我试图专注于数据科学的东西。最后,通过这种方式,他们将我分配到另一个支持项目,因为我在那个项目中没有尽全力。

我意识到我需要同时关注两个方面,我目前作为支持工程师的职位,以及数据科学之旅。这并不容易,因为朝九晚五的工作之后;你没有时间自我提升。在这里,我开始了管理时间和寻找学习数据科学技术的方法的旅程,同时享受我目前的支持 IT 工作。

在我们的生活中,如果我们想专注于学习新事物,我们必须有一个平静的心态。我们不应该有任何其他负荷或任何紧张或压力会导致我们分心;否则,你将无法专注于优秀的学习内容。

本文将分享我成为认证数据科学家的历程。我将分享我是如何开始并继续我的旅程的,即使是在我朝九晚五的日程中忙碌。

不要随波逐流;成为潮流。

研究表明,如果你人云亦云,那么就很难根据自己的能力做出合适的决定。你要不要随波逐流;这完全取决于你。但是命运取决于你的流动。你的环境会让你走上一条随机的道路;但是,根据您的技能和知识修改方式是您的责任。如果你和其他人一样随波逐流,改变你的职业生涯会更有挑战性,如果你想改变你的工作,你需要让你的流动,这种流动应该是持续的。你会在你的心流中发现许多障碍,但你需要如此坚定,以至于障碍不会在你的成功之旅中扮演重要角色。

当我开始工作时,我开始观察项目中的其他人。我发现很多人还在以前的 IT 工作岗位上干了五到六年以上,现在对最新技术的了解还不够。我们可以说,他们变得如此习惯于支持任务,以至于他们不能将他们的职业生涯转换到不同的领域。所以流动应该在开始的时候产生,但不要太晚。

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

亚历山大·尚邦Unsplash 上拍摄的照片

“大多数人并不追求他们想要的东西。即使是一些最认真的目标追求者和目标设定者,他们也在追求他们认为能得到的东西。”
——鲍勃·普罗克特

追随你的激情,你的激情会跟着你回来。

你的激情在你的精神幸福中起着至关重要的作用。研究发现,追随你的激情比金钱更重要。

这是典型的一天,我正在做我的支援工作。我从我的组织收到一封邮件,说有一些与使用 python、机器学习和机器人流程自动化的自动化相关的认证课程。那天我很兴奋,因为我在我的组织中找到了与我感兴趣的领域相关的东西。在得到我的经理的确认后,我选择了该认证,并在第一次尝试时清除了证书。我给我的经理发了一封邮件,告诉他们我获得了 python 认证。所以,就这样,人们开始像认识一个 python 开发者一样认识我。

有一天,我的一个同事问我是否可以使用 python 来自动化他的任务。我对事情朝着积极的方向发展感到惊讶。在我的经理确认后,我接受了这项任务。我开始着手这项任务,幸运的是,这项任务有点复杂,所以花了大约六到八个月的时间。但即使在我的项目上工作了一年后,我也没有一次机会去从事我梦想中的数据科学项目。我继续在我的项目中使用 IT 支持人员,因为我不想让我的组织觉得我对支持 IT 任务不感兴趣。毕竟,那是我当时唯一的收入来源,也是我的第一份工作。

你的艰难时期将考验你的耐心,但你需要持续不断地追求你的目标。

耐心是一种美德“至少在我们需要的时候,耐心是一颗难以下咽的药丸。

即使工作了一年多,也没有得到从事数据科学项目的机会,于是开始在不同的组织中寻找其他机会。但是,我发现成为数据科学家的标准非常严格。他们要求成为一名数据科学员工所需的大量技能,当时,由于我正在自学数据科学,我还没有做好在另一家公司从事数据科学项目的准备。
那一天,我感觉有点低落,因为我在想,我只有在周末才有时间自学,我没有接触到任何数据科学,所以我将如何将我的职业生涯转换到数据科学领域。

“上帝给你的礼物是你一生都用不完的才华和能力。你给上帝的礼物是在此生尽可能多地开发和利用你的天赋和能力。史蒂夫·鲍"

如果你注意到我开始是一个支持者,现在我有一个项目,在这个项目中我正在利用我的 python 技能,我认为上帝也像一只援助之手一样帮助你。你只需要在你的旅程中不断前进。

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

马克-奥利维尔·乔多因在 Unsplash 上的照片

有一天我的同事来找我。我的同事知道我的数据科学技能。她告诉我,另一个同事做了一个研究所的数据科学认证。他现在在一个不同的组织中获得了一个数据科学项目,薪水很高。因此,那时我意识到我也应该加入研究所,学习在任何项目中使用数据科学的正确方法。

我决定周末加入那个协会。数据科学课程为期九个月。在学习数据科学课程时,我意识到他们教授的技能是成为数据科学工程师所必需的。我将大部分时间投入到我的认证课程中,在那里我学习了不同的数据科学技术,并向教授我数据科学的导师致敬。导师来自好的大学,他们是不同组织的高级数据科学家。这让我松了一口气。最后,该课程帮助我提高了数据科学知识。

机会会降临到有准备的人身上。

科学表明,机遇偏爱有准备的人。在认证过程中,我了解了数据科学的最新技术。与此同时,我收到了一封来自组织的邮件,在那里我发现了一些与数据科学相关的任务。那天我非常开心。如果我们继续做好事,上帝会帮助我们的。我申请了那个任务,基于我从同事推荐的认证课程中学到的技能,他们接受了我做这个任务。

我在那项任务中尽了最大努力,所有给我分配任务的人都对我的奉献精神感到满意。就这样,他们给我布置了更多的任务。而且,我知道这些任务需要数据科学技能。因此,我可以观察到,如果在那一天,当我的同事向我咨询认证课程时,如果忽略了这个机会,那么我可能无法正确地学习数据科学技能。此外,我可能得不到那些数据科学任务。在这里,我们可以看到机会发挥着重要的作用,我们永远不应该忽视它们。我们应该看一看那些机会。

获得信任和优惠

当我从事 python 和数据科学任务时,我做得非常好。所有人都对我的奉献感到高兴。这帮助我获得了公司高层的信任。后来,他们给我分配了一个数据科学的关键任务。实际上,我是他们完成这项任务的关键员工。

一旦你获得了他们的信任,你不需要去找他们,但是他们会来找你,因为他们知道你会更有激情地完成他们的任务。

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

照片由布鲁斯·马尔斯Unsplash 上拍摄

终于有一天,我开始收到邀请,根据我的技能和工作加入他们的项目。在这背后,主要原因是:首先,我有较少的经验年数,并且是较少经验年数的人,他们将不得不相应地支付我。因此,这对他们来说是一个双赢的局面,因为如果他们任命更多有六到十年经验的经验丰富的数据科学家来做和我一样的任务,但组织将不得不根据这个人的经验支付更多的费用。

认证数据科学家

获得任何技术的认证在一个组织中都起着重要的作用,因为为了展示你的技能,你应该有一些证据。因此,我搜索了获得数据科学认证的不同方法,并了解到微软正在提供一个演示端到端数据科学技能的认证课程。我对数据科学有很好的了解。因此,我选择了认证课程,经过几天的复习,我通过了数据科学家的认证。所以最后,现在我是微软认证 Azure 数据科学家。

数据科学作家

在获得更多数据科学经验并对数据科学领域更加自信之后,我从朋友那里了解到,我们可以通过写文章、制作 YouTube 视频和其他事情来展示我们的数据科学技能。所以我介绍给 medium。我创建了我的帐户并得到了验证,然后我写了一些文章并将其发送给一些专注于数据科学和人工智能的出版物。

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

照片由 Aaron BurdenUnsplash

根据文章内容,他们接受了我在杂志上的文章。就这样,我成为了一名数据科学作家。这有助于我继续提高我的数据科学技能。我写的文章越多,我要学习的就越多,而且,我写文章是有报酬的,这给了我更多的动力去写更多的文章。

结论

一切从流动开始。我创建了我的流程,并专注于我目前的职位,即支持 IT 工程师,以及我成为认证数据科学家的主要目标。有很多障碍,比如朝九晚五的员工;很难找到自我提升的时间。除了日常工作之外,最好每天花点时间来提高自己。我了解到你的固定工作会帮助你获得更多的联系,了解人们的观点和经历。还有,我们应该看到命运就像一个孩子。你根据你的技能、你的奉献、你的热情和你的态度来培养它。

  • 你决定你的命运。
  • 你的行动、行为和积极的态度是你真正的朋友。
  • 不要随波逐流;尽情发挥吧。

没有人生来贫穷,但我们都生来富有。是的,我们生来就有头脑和天赋

非常感谢你的阅读。愿这个故事对你的事业有所帮助。

在你走之前……

如果你喜欢这篇文章,并希望继续关注更多关于 Python &数据科学精彩文章**——请点击这里https://pranjalai.medium.com/membership考虑成为中级会员。**

请考虑使用我的推荐链接注册。通过这种方式,会员费的一部分归我,这激励我写更多关于 Python 和数据科学的令人兴奋的东西。

还有,可以随时订阅我的免费简讯: Pranjal 的简讯

我如何最大化我的数据科学生产力:PyCharm + Anaconda + JupyterLab

原文:https://towardsdatascience.com/how-i-maximize-my-data-science-productivity-pycharm-anaconda-jupyterlab-2bd045ecadb3?source=collection_archive---------15-----------------------

如何开始您的数据科学编码

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

RawFilmUnsplash 上拍摄的照片

介绍

不要误解我的意思——我们总是想提高我们的生产力——用同样多的时间,我们可以完成更多的工作。对数据科学研究人员来说也是如此。设置好硬件后,是时候考虑如何选择启动数据科学项目所需的软件了。问题是市面上的选择太多了,出于学习的目的,你可能已经尝试了不同的工具。换句话说,你的购物清单太长了,你可能不知道该从哪里开始。

在本文中,我想分享我发现的适合我的数据科学项目需求的组合。**当然,这不会是一个适合所有人的解决方案。**但如果你对自己的配置没有想法,或许可以先尝试一下。

具体来说,我们将使用三个工具:PyCharm、Anaconda 和 JupyterLab。我将首先介绍安装,然后讨论每个工具的作用。我会尽量简洁,因为如果我倾注太多的信息,初学者会不知所措。

装置

PyCharm 要安装 PyCharm,可以去 PyCharm 网站:https://www.jetbrains.com/pycharm/download/#section=windows。根据您的操作系统,您需要下载正确的版本。我在一家非盈利教育机构工作,所以我可以接触到专业版。如果你有类似的情况,你可以利用这个好处。然而,如果您主要从事 Python 开发,社区版本应该工作得很好。

下载完成后,按照提示操作即可。没什么特别的。

Anaconda
要安装 Anaconda,可以去 Anaconda 网站:https://www.anaconda.com/products/individual。对于我们大多数人来说,我们可以只使用个人版本。但是对于团队和企业还有其他版本。下面是 链接 对不同方案的比较。

同样,您需要为自己的操作系统选择版本。下载完成后,按照提示操作即可。一切都应该自己说得通。

JupyterLab
你真的不需要为 JupyterLab 下载任何特别的东西,因为一旦你启动了 Anaconda,你就可以在 Anaconda 中非常方便地访问它,它会为你处理所有的安装和其他设置。

每个工具的角色

皮查姆

  • Python 脚本编码。它有以下我喜欢使用的功能。当然,其他的 ide 也有这些特性,但是它们有多好会有所不同。
* **Python coding style check.** It can check if there are problems with the coding style, such as naming and indentation. You'll learn the best practices for Python coding along the way.
* **Auto-completion hints.** The auto-completion suggestions are prompted quickly after you start to type. There are also built-in short snippets that can automatically prompted, such as __init__ method for a class.
* **Code analysis.** It can check whether variables have been used or not, whether any imported modules are used or not, whether certain variables are used before their definitions, and various other analyses. An important feature of code analysis is to inform you about the duplicates, which will help you refactor your code.
* **Definition look-up.** It's very convenient to look up any variable or functions with a shortcut (hold down Cmd or Ctrl and click). It's two-way look-up. If it's a definition itself, it'll prompt the usages. If it's a reference to a variable, it'll direct you to the definition.
* **Refactor.** When you change variable names, change function signatures, or delete files, it will allow you to do it systematically, which will prevent bugging due to these refactoring actions.
  • **与版本控制集成。**无论你是数据科学家还是软件工程师,你总是想使用版本控制工具。对于我们中的许多人来说,选择将是 GitHub,它的使用不仅允许我们拥有代码的备份,还可以访问不同版本的代码以进行重构。PyCharm 有一套专门的版本控制管理工具。您不需要了解很多关于 git 命令的知识。大多数操作只需点击即可完成。在我的项目中,我将只使用常见操作的快捷方式,例如 commit (Cmd + K)和 puch commits (Cmd + Shift + K)。
  • **软件包安装提示。**对于许多常见的包,您可以开始用 PyCharm 编写代码。如果所需的软件包没有安装,系统会提示您安装该软件包。在大多数情况下,PyCharm 能够很好地完成工作。
  • **虚拟环境集成。**当您创建一个项目时,您可以指定应该如何设置虚拟环境(接下来将详细介绍)。您可以简单地指定 Conda 作为新的环境管理器。

蟒蛇

  • 环境管理。Python 程序员应该不会对虚拟环境这个术语感到陌生。由于 Python 的开源特性,我们有大量可用的包。问题是不同的包可能有不同的需求,因此不可能只有一个 Python 安装和相关的包来满足所有应用程序的需求。
    虚拟环境就是通过创建具有特定依赖关系的虚拟环境,为每个应用程序形成独立的自包含盒子来解决这个问题。
* **Create/Clone New Environment.** You can create a new environment from scratch or clone one from an exiting virtual environment.
* **Import Environment.** If you have set up an environment somewhere else, you can import the setup file, which allows you to re-construct the environment easily with Anaconda.
  • **启动应用程序。**在每种环境下,您都可以启动想要使用的应用程序。例如,您可以在这里启动 PyCharm 或 JupyterLab。用于数据科学的许多其他常见应用程序也很容易访问,如 Visual Studio 代码和 RStudio。

JupyterLab

  • **朱庇特笔记本。**虽然 PyCharm 支持 Jupyter 笔记本,但我发现体验并不好。您的屏幕有两部分——一部分是编码,另一部分是显示结果。因此,为琐碎的工作编辑笔记本是可以的。但是,如果你想有一个更具交互性和响应性的笔记本体验,你可能需要使用 JupyterLab 来编辑笔记本。
  • **笔记本扩展。**许多开发者已经开发出了有用的笔记本扩展。因此,通过在 JupyterLab 中运行笔记本,您可以使用这些扩展来提高工作效率,例如查看目录和变量检查器。

在你走之前

这是一个数据科学项目的典型工作流程,这个项目一直在为我工作。当然,它是我到目前为止讨论的这三种工具的组合。

  1. 运行 PyCharm 并创建一个项目,使用 Conda 进行虚拟环境管理。
  2. 用 PyCharm 编写脚本。如前所述,通过提供代码完成和分析特性,PyCharm 允许您比许多其他 ide 更快地编写代码。我没有提到的另一件事是对科学模式的支持,它为您创建单独的单元来运行更小的代码片段。
  3. 创建笔记本。当您准备创建您的 ML 或其他需要更多交互或图形的模型时,您可能希望现在就创建笔记本。在 PyCharm 中创建笔记本很重要,它将为您设置正确的解释器版本。
  4. 在 JupyterLab 中编辑记事本。去阿纳康达,在那里发射 JupyterLab。打开创建的笔记本,就可以开始编辑笔记本了。
  5. 在这个过程中,不要忘记使用 PyCharm 中的集成工具为您的项目添加版本控制。

我如何将一个库从 Python 2 迁移到 Python 3

原文:https://towardsdatascience.com/how-i-moved-a-library-from-python-2-to-3-60fc2b2a21a1?source=collection_archive---------35-----------------------

Python 2 已经死了——让我们继续吧!

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

图片来自 needpix.com 的天空电视台

去年,我举办了一个关于打包 Python 项目的研讨会。其中一名参与者是生物信息学研究者。她需要建议,因为她想从 Python 2 切换到 Python 3,但是她需要的库只适用于 Python 2。将库迁移到 Python 3 非常有趣,我将在这里分享我是如何做到的——或者更确切地说,如果我再次遇到同样的情况,我会如何做。

本地设置

确保可以在本地执行 Python 2 和 Python 3。我喜欢 pyenv 这一点:

$ pyenv install 2.7.18
$ pyenv install 3.8.5
$ pyenv local 3.8.5
$ pip --version

或者,您可以使用 conda 在 Python 2 和 3 之间切换。

常规项目设置

项目应该在版本控制下,你需要确保人们在需要时可以返回。您需要锁定直接和可传递的依赖关系。你应该有一个可复制的环境,比如一个 Docker 容器带有类似2.7.18-slim-buster的固定 Python 版本。为当前版本添加一个 git 标签,将最新版本部署到 pypi,并支持您的用户锁定该版本。

确保您记录了迁移到 Python 3 的当前状态。通常这是通过问题跟踪器来完成的,例如 Github 或吉拉的内置跟踪器。

首先确保你可以执行测试,测试覆盖率是好的(参见单元测试系列)并且总体风格是好的(参见清单 todo)。建立一个 CI / CD 管道

打印报表

在 Python 2 中,您可以编写打印语句:

print "hello world"

在 Python 3 中,您必须编写打印函数:

print("hello world")

幸运的是,在 Python 2 中还可以有打印功能。令人困惑的是,它的行为方式并不相同:

py2>>> print(1, 2, 3)
(1, 2, 3)
py3>>> print(1, 2, 3)
1 2 3

您需要导入后端口打印函数,以使 Python 2 函数的行为类似于 Python 3 函数:

py2>>> from __future__ import print_function
py2>>> print(1, 2, 3)
1 2 3

注意,我没有使用print_function——我只是导入了它。

应用这个小变化很繁琐,但是您可以使用 2to3 来完成:

$ pip install 2to3
$ 2to3 --fix=print .

保持 Python 2 的兼容性

你应该有一个在一段时间内以完全相同的方式适用于 Python 2 和 Python 3 的版本。对于有很多依赖项的更大的项目,如果它们能够逐步向前推进,那将是一个很大的帮助。

Python 3 移动/重命名了标准库的一部分。这破坏了与 Python 2 的兼容性。但是,解决方法很简单:

try:
    from urllib.parse import urlparse, urlencode
    from urllib.request import urlopen
except ImportError:
    from urlparse import urlparse
    from urllib import urlencode
    from urllib2 import urlopen

更好的是兼容性库 6:

$ pip install six

six在 Python 2 和 Python 3 中都可以这样使用:

from six.moves.urllib.parse import urlparse, urlencode
from six.moves.urllib.request import urlopen

当您编写代码只是为了保持对旧版本的支持时,请确保添加一个容易找到的字符串。类似于“对 Python 2 的支持”

迭代器

当您调用range(10)时,Python 2 创建一个列表,而 Python 3 为相同的代码创建一个 range 对象。在一些罕见的情况下,您实际上需要这个列表,因此需要将它改为list(range(10))

输入和原始输入

Python 2 有[input](https://docs.python.org/2/library/functions.html#input)[raw_input](https://docs.python.org/2/library/functions.html#raw_input),而 Python 3 只有[input](https://docs.python.org/3/library/functions.html#input)。Python 2 的 raw_input 类似于 Python 3 的输入。

除法和舍入

如果将/应用于两个整数,Python 2 会给你一个整数除法。Python 3 的结果是给你一个浮点数。您仍然可以使用在 Python 2 和 3 中都有效的//进行整数除法:

>>> 1 / 2
# Python 2: 0 vs Python 3: 0.5

x.5处的舍入行为也发生了变化:

  • Python 2 :如果两个倍数同样接近,则从 0 开始舍入
  • Python 3 :如果两个倍数相等,则向偶数方向舍入
>>> round(2.4)
# Python 2: 2.0 vs Python 3: 2>>> round(2.5)
# Python 2: 3.0 vs Python 3: 2>>> round(2.6)
# Python 2: 3.0 vs Python 3: 3

在 Python 2 和 3 中有方法获得相同的舍入行为。

Unicode 和字符串

Unicode 在 Python 2 中是个大麻烦,在 Python 3 中变得简单多了。Unicode 支持是后来才添加到 Python 2 中的。在 Python 2 中,Unicode 字符串和字符串是有区别的。本质上,字符串是包含 ASCII 的字节对象:

>>> a = u"abc"
>>> type(a)
<type 'unicode'>>>> b = "abc"
>>> type(b)
<type 'str'>>>> c = b"abc"
>>> type(c)
<type 'str'>>>> ord('ö')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ord() expected a character, but string of length 2 found>>> 'ü'[0]
'\xc3'
>>> 'ü'[1]
'\xbc'

在 Python 3 中,情况是一样的:

>>> a = u"abc"
>>> type(a)
<class 'str'>>>> b = "abc"
>>> type(b)
<class 'str'>>>> c = b"abc"
>>> type(c)
<class 'bytes'>>>> ord('ö')
246>>> 'ü'[0]
'ü'

我可以写很多关于 Unicode 和字符串表示的内容,但为了保持简洁:

  • Python 2 u"somethin"与 Python 3 "something"u"something"相同
  • 我不会用from __future__ import unicode_literals。你可能想阅读更多关于 unicode_literals 的内容。

[## unicode 在 Python 内部是如何表示的?

感谢贡献一个堆栈溢出的答案!请务必回答问题。提供详细信息并分享…

stackoverflow.com](https://stackoverflow.com/q/26079392/562769)

纯 Python 和万向轮

wheel 文件是分发 Python 代码的一种形式。如果 Python 代码没有 C 扩展,它就被认为是纯的。如果纯 Python 代码兼容 Python 2 和 Python 3,并通过 wheel 文件分发,那么这个文件就叫做universal*。*它应该可以在每台装有 Python 版本的机器上运行。

你应该总是以源代码分发和轮分发的形式分发你的代码。如果可以,试着创作并发布一个万向轮。

创建版本支持策略

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

塞巴斯蒂安·赫尔曼在 Unsplash 上拍摄的照片

库创建者需要决定他们想要支持哪些 Python 版本。较新版本的 Python 拥有您想要的杀手级特性,支持所有版本需要大量时间。使你想要支持的版本和你何时想要停止支持变得透明。最好将它与更大的项目联系起来,例如最近 3 个主要的 Python 版本。

你也应该知道 Python 的发布周期在 PEP-602 中被改变了。

NEP-29 是 NumPy 的版本支持政策,希望所有的科学 Python 包也能遵循它。

移除 Python 2 兼容性

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

JESHOOTS.COMUnsplash 上拍照

支持 Python 2 意味着您需要添加额外的代码,并且可能无法使用新 Python 版本的一些致命特性。

当您删除对 Python 版本的支持时,在一次 git 提交中完成,这样更改就很清楚了。搜索该字符串:

$ grep -rnI "support for Python 2"

用新东西!

Python 3 有一些非常酷的特性,你应该尽可能地使用它们。迁移到 Python 3 打开了一个全新的世界:

[## Python 版本的黑仔要素

了解当您支持旧的 Python 版本时,您错过了什么:Python 2.7 到 3.5、3.6、3.7、3.8 和 3.9

medium.com](https://medium.com/python-in-plain-english/killer-features-by-python-version-c84ca12dba8)

[pyupgrade](https://github.com/asottile/pyupgrade)可以帮助你使用新型语法,例如:

dict((a, b) for a, b in y)    # -> {a: b for a, b in y}
'%s %s' % (a, b)              # -> '{} {}'.format(a, b)

这样做并不是绝对必要的,但它使您的代码更现代、更易读。

分叉项目

我很幸运,propy 的维护者欢迎这些变化。然而,有了自由软件,你就不会被维护者的支持所束缚。您可以简单地创建一个所谓的 fork: 您控制的原始项目的副本。

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

Scipy 有 3000 多把叉子。马丁·托马斯 Github 截图

对于自由软件来说,分叉一直都在发生。这也是一种开发模式,独立开发人员在他们的副本(他们的分支)中进行更改,并创建一个合并请求(Github 称之为 pull request (PR))。

您也可以将您的 fork 上传到 pypi,但是请只在您想要维护该 fork 并继续独立开发时才这样做。

元类

还有一些主题,比如元类和异常范围,我还没有涉及到。如果你需要的话,我推荐这个由麦克·米勒写的教程:

Anders hov mller 也写了一篇关于这个话题的有趣文章。查看他的“生产中的惊喜”部分!

[## 将大量旧代码转移到 Python3

**我已不再使用介质。新地址是 kodare.net * *

medium.com](https://medium.com/@boxed/moving-a-large-and-old-codebase-to-python3-33a5a13f8c99)

TL;DR:我如何从 Python 2 迁移到 Python 3?

  1. 获得专业的 Python 2 设置
  2. 转到您的代码库支持 Python 2 和 Python 3 的状态
  3. 让它运行一段时间,确保它的工作
  4. 移除 Python 2 支持

相关资源

我如何从物理学转向数据科学

原文:https://towardsdatascience.com/how-i-moved-from-physics-to-data-science-457340e39902?source=collection_archive---------4-----------------------

我一年从物理到数据科学的一步一步。

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

照片由 卢卡斯 发自 Pexels

介绍

在我之前的帖子中,我分享了物理学毕业生可能的职业道路,其中之一是成为一名数据科学家。来自学术界和其他工业领域的许多人都有同样的想法。为了满足这种需求,开设了数百门课程,互联网上充斥着帮助你进入数据科学世界的学习材料(就像这里或者这里)。问题是:这可能太多了。

让我们假设我们很忙,很懒,很笨,所以我们没有时间和精力去消耗所有的在线学习材料。对于想在一年内找到一份数据科学工作的人来说,查看这些资源以找到从哪里开始以及何时停止可能会令人不知所措。因此,在这篇博客中,我将分享我从一名物理学博士生转变为一名数据科学家的具体步骤。

免责声明:我现在的职称其实是机器学习工程师,工作范围非常类似于数据科学家。机器学习和数据科学之间的差异将是另一个故事。

物理学和数据科学之间的兼容性

在采取任何行动之前,第一步是准备好心态。

数据科学是一个涉及数学、编程和领域知识的多学科领域,而被认为最适合计算机科学专业的学生。那么,物理学出身的人可以兼容吗?答案是大大的是的。不信,我们来看看一个物理学家典型的日常工作,和一个数据科学家比较一下。

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

物理学家和数据科学家的工作范围

你没看出来吗?这两个家伙做 一模一样的事情唯一的区别是它们使用不同的数据集。因此,如果你的物理研究做得不错,很可能你已经具备了成为数据科学家所需的技能。但是在你解决某些问题之前,你还不能成为一个人:

  • 你的数据科学技能不够犀利。一个物理学家,既要做实验又要做数据分析,往往在电子/机械工程、数据科学、数学等方面比较擅长…但是没有一个是优秀的。你需要停止做一个万事通,把注意力放在真正重要的技能上。
  • 你有技能,但缺乏领域知识,你需要这两者来成为一名优秀的数据科学家。这里的知识是指对不同机器学习/统计算法的理解,以及如何使用它们。
  • 别人不知道你拥有这样的技能。在许多招聘经理看来,数据科学仍然更适合计算机科学专业的学生,而物理专业的学生应该坚持学物理。你需要一些东西来证明你的技能,让他们改变主意。

我的准备过程集中在解决这些问题上。

我成为数据科学家的一步一步

在距离我博士论文的截止日期还有 1.5 年的时候,我决定追求成为一名数据科学家的道路。减去 0.5 年找工作的时间,我只有整整一年的时间做准备。以下是我在那段时间里做过的事情:

1.加速博士进程

在我决定我的未来不会在学术界的那一刻,我开始加速我的博士工作。我把毕业所必需的现有项目打包,放弃了其他所有项目。我也和我的主管分享了我的计划,并请求他的支持。这一行动带来了两大好处:

  • 确保了我的毕业能够顺利进行,没有拖延,没有挣扎,这样我就有时间在博士毕业的时候找工作了。
  • 消除了所有关于留在学术界的第二个想法,没有回头看,所以我可以全力以赴争取一份数据科学的工作。

2.大量练习编码

数据科学,说到底,涉及到很多编程,是计算机专业的强项。因此,我需要升级这个技能来赢得与他们对抗的机会。

我通过使用 Python 来完成我的研究任务,而不是依赖第三方软件来练习编码。从控制设备、处理数据、建筑模拟到图形绘制,都是通过编码来完成的。用竞争性编程练习算法是很好的,但是我就是没有时间。

3.获取机器学习方面的知识

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

照片由 Pixabay 发自 Pexels

有许多在线资料支持这一目的。然而,知道我的时间有限,我没有在书本和课程上花太多时间。总体来说,我上了 2 门课:Udemy 上的 " 机器学习 A-Z" ,Coursera 上的 " 深度学习专业化" ,看了 2 本书: 《统计学习导论》《用 Python 进行深度学习》

我自己的建议是:不要在数学上陷得太深,也不要试图从头开始编写算法。这将花费很长时间,而且没有任何实际意义。相反,我专注于理解直觉,每个算法的优缺点,以及可以使用哪个库来实现它们。获取知识的过程花了我前 5 个月的时间。

4.参与 Kaggle

对于初学者来说,Kaggle 是一个很好的平台,可以让他们找到如何解决机器学习问题的例子,并在学习的过程中进行实践。我开始了我的第一次比赛,从别人的作品中分支和调整。这对我掌握标准工作流程和流行库帮助很大。到第三次比赛的时候,我已经可以从头开始做所有的东西了(这里看我的代码)。

我在 Kaggle 的学习经历非常棒。不过,我是来 Kaggle 学习的,不是来爬排名的。经过 3 个月和 3 场比赛,我已经对数据处理、特征工程和模型构建有了足够的了解。呆得更久可以让我学到更多的技巧来提高我的排名,但这与我最初的目的不符。因此,在第四届比赛结束时,我离开了 Kaggle,开始从事我自己的数据科学项目。

5.做个人数据科学项目

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

照片由 明锐丹

“项目”这个词听起来可能有点花哨,但实际工作非常类似于 Kaggle 竞赛。不同的是,你自己决定做什么,在哪里找到数据,以及如何得到解决方案,没有太多参考他人的作品,也没有比较的排名。

在申请数据科学工作时,做自己发起的项目并将它们上传到你的博客或 Github 有很多好处:

  • 如今,每个人都参加在线课程,所以在简历上列出那些课程或学位不会给任何人留下印象**。相反,个人项目会帮助你脱颖而出,向雇主证明你确实拥有他们需要的技能。**
  • 在许多公司,申请人被要求完成一项带回家的任务,这类似于一个迷你数据科学项目。在你自己的意志中工作过会让你有经验和信心轻松通过这一轮。
  • 在很多面试中,重点会放在你简历上写的东西上。一个项目会成为你讨论的好话题,并以你的技能和知识给面试官留下深刻印象。

总的来说,我做了 3 个数据科学项目:一个是经典机器学习(这里见代码),另一个是计算机视觉(这里见代码),然后一个是自然语言处理(NLP)(这里见代码)。回顾过去,我认为我应该只关注一个特定的领域,比如 NLP。这样做有助于我更深入地了解那个领域,并使我的个人资料更加一致。无论如何,数据科学家的角色可能只关注这三个领域中的一个。********

我完成第三个项目的时间正好是我开始学习数据科学的一年。平均来说,我每天花 2 个小时,加上周末来学习。我的知识还不扎实,离完整还很远,但这足以让我自信地写我的简历并发出申请。

结论

简而言之,以下是我为从物理学转向数据科学所做的准备工作:

  • 有正确的心态
  • 无论我在做什么,都很快很好地完成了
  • 练习编码
  • 通过书籍和 MOOCs 获得机器学习知识,但不要停留在那里超过 6 个月
  • 通过 Kaggle 和自我启动的项目实践我所学到的东西

学习新事物从来都不容易,但数据科学不是火箭科学。我希望从我的故事中,你能对成为一名数据科学家的道路有一个实际的看法。我相信,有信心,有激情,有努力,你一定能做到。

我如何优化我的数据分析实践——您应该开始使用的技巧和库

原文:https://towardsdatascience.com/how-i-optimized-my-data-analysis-practices-hacks-libraries-you-should-start-using-3a7308b668da?source=collection_archive---------18-----------------------

有用的黑客和库的汇编,以加快您的分析

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

当我在写这篇文章时,我的显示器的一个镜头

所以,我最近一直在从事许多机器学习和数据科学项目。从我的经验中,我可以分享的一件事是,每次你接一个项目,在你到达项目中最吸引人的部分(至少对我来说)模型工程之前,你必须穿过这个不可避免的数据清理和争论的泥沼。

现在,为了让我的生活更容易,我开始寻找黑客、库、配置等。更有效地执行探索性分析。

在这篇博文中,我将分享一些我的发现/配置,它们可能会对你有用和有趣。

因此,我打算分两部分来讨论这个问题:

  • Jupyter hacks 和
  • 用于数据分析的有用库

Jupyter Hacks

既然要长时间使用 jupyter 笔记本,那就让成为你的工作空间吧,让它看起来更酷一点,这样你就能集中注意力,享受使用笔记本工作的乐趣。稍后,我们将看到一些技巧,可以帮助您加快分析速度。相信我,你会开始喜欢花时间在你的 jupyter 笔记本上。

如果你是 jupyter 笔记本的新手,这里有一个完整的指南,告诉你如何为数据科学建立一个完美的 python 设置:

[## 数据科学的理想 Python 环境设置

设置 python 环境以开始数据科学项目的指南。

towardsdatascience.com](/ideal-python-environment-setup-for-data-science-cdb03a447de8) [## 面向数据科学的 Jupyter 笔记本完全指南

Ipython 笔记本初学者指南

towardsdatascience.com](/the-complete-guide-to-jupyter-notebooks-for-data-science-8ff3591f69a4)

这里有一些你可能不知道的 Jupyter 笔记本黑客:

1. Jupyterthemes

已经厌倦了 Jupyter 笔记本单调的白色和灰色默认主题?好吧,让我们用 Jupyterthemes 给你的笔记本一个新的外观。一旦安装了 jupyter,您需要做的就是在您的环境中安装 jupyterthemes,使用主题:

pip install jupyterthemes

然后根据你想要的笔记本的氛围设置任何主题,这是我喜欢的深色主题和所有其他格式选项,感觉就像我在一个崇高的文本编辑器中工作。

在您环境中的终端中,键入:

jt -t monokai -f fira -fs 12 -nf ptsans -nfs 12 -N -kl -cursw 2 -cursc r -cellw 90% -T

-t为主题

monokai —主题的名称

所有其他描述在此给出

重新启动您的 jupyter 笔记本电脑服务器,准备好迎接惊喜吧:

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

另外,如果您想回到最初的 jupyter 主题,请使用:

jt -r

2.注释掉代码(非常有名)

注释掉代码是每个开发人员/分析师都使用的最重要和最有用的实践之一,如果你不知道,有一个非常快捷的键盘快捷键。

如果你在 Mac 上点击cmd + /或者在 windows 上点击ctrl + /,选中的代码行将被注释掉。

就这么简单!

专业提示:在完成分析之前,总是注释掉代码块,而不是删除它们。

3.恢复已删除的单元格

我们都知道我们对恢复单元格内容的cmd/ctrl + z有多感激,但是如果你删除单元格本身呢?

假设您遵循了上述注释代码的规则,但是错误地删除了整个单元格,并且想要恢复它。我们也有一个捷径:

esc + z或转到Edit > Undo Deleted Cell

这将恢复你的细胞。

不客气!😃

4.%魔法命令(运行、存储、latex)

顾名思义,有一组命令拥有超自然的力量,这种力量可以拯救你,使你的头不会撞到墙上。

  • %run —当你不得不在 jupyter 笔记本里面使用 python 脚本example.py的时候,你会怎么做?复制粘贴全部代码?
    这里有一个更智能的方法,您可以使用**%run** magic command 在笔记本中运行您的 python 脚本:
%run example.py
  • %
%load example.py
  • %%writefile — 要将单元格的内容写入文件并保存在当前工作目录中,可以像这样使用该命令:
%%writefile example.pydef delete_null_values(df):
    df.dropna()
  • %time — 这是一个非常有用的神奇命令,它返回运行该单元所花费的 CPU 执行时间。你可以这样使用它:

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

  • %% script false — 有时候,您只想再次运行笔记本中的所有单元格,例如,除了一些单元格之外,您可能不想再次训练模型。使用此命令跳过单元运行:
%%script false
model.fit(x_train, y_train)
%%latex
This is a differential equation: $\frac{du}{dt}  and  \frac{d^2 u}{dx^2}$

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

  • 以下是 latex 的备忘单:

[## 乳胶纸

这是一张乳胶参考纸,适合写科学论文。请将建议发送至…

wch.github.io](https://wch.github.io/latexsheet/)

  • %debug — 这是一个交互式调试器,可让您即时查看错误:
%debug
a = []
b = 50
a_len = len(a)
result = b/ a_len

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

  • %lsmagic — 这是一些非常有趣的魔法“把戏”,所以你会想看看整个宝藏。%lsmagic返回所有神奇命令的列表。到处玩!

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

有用的库

1。Dabl

Dabl 是一个受 sklearn 启发的数据分析基线库,它试图通过减少常见任务的样板代码来为初学者普及 ML。这是由Andreas Muellersci kit-learn 开发人员开发的项目,该库包含几个工具,可以轻松清理和检查您的数据,然后创建强大的基线模型。

让我们读取一个非常常见的 titanic 数据集,并尝试对其进行探索性分析。

让我们先用 dabl 清理数据:

import dabl# read a dataset
df = pd.read_csv("[https://gist.githubusercontent.com/michhar/2dfd2de0d4f8727f873422c5d959fff5/raw/23da2b7680e0c9e1fd831f05f53de3958f0d75fe/titanic.csv](https://gist.githubusercontent.com/michhar/2dfd2de0d4f8727f873422c5d959fff5/raw/23da2b7680e0c9e1fd831f05f53de3958f0d75fe/titanic.csv))# call the clean method and pass the dataframe to itdabl.clean(df, verbose=1)

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

检查类型现在,让我们尝试使用已清理的数据帧中的 detect_types 来检测类型:

data_types = dabl.detect_types(df_clean)
print(data_types)

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

使用 dabl 的绘图功能可以查看模式和高级绘图:

dabl.plot(df_clean, target_col="Survived")

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

很神奇,对吧?

您还可以创建一个简单的分类器基线模型:

survivor_classifier = dabl.SimpleClassifier(random_state=0).fit(df_clean, target_col="Survived")

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

花一些时间在 dabl 上,你会喜欢用它来完成你所有的探索任务。

2。表情

你在处理文本数据集的时候遇到过表情符号吗?情感分析需要理解这些表情符号,因此需要对数据中的表情符号进行预处理。你可能知道,表情符号是人类面部表情的一种表现。

假设你有一个如下的句子:

sentence = “it's a sunny day ☀️, let's go fishing! 🐟”

现在,为了从句子中提取表情符号,您可以使用表情库,如下所示:

sentence = "it's a sunny day ☀️, let's go fishing! 🐟"
emot.emoji(sentence)

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

3。缺失编号

这些数据去了哪里?!!缺少的值总是一件棘手的事情。在使用其中一种输入方法之前,了解缺失值的类型总是很重要的。

Missingno 提供了一种快速而有用的方法来可视化这些值。

使用相同的 titanic 数据,您可以首先通过检查空值来可视化这些值:

df.isnull().sum()

然后您可以导入missingno并使用 bar 和 matrix 函数来可视化那些丢失的值。

! pip install missingno
import missingno as mi # pass the dataframe to the 
mi.bar(df, figsize=(12,8))

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

矩阵函数:

mi.matrix(df, figsize=(12,8))

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

你可以自己看到在性别,客舱和登船栏中缺失的价值。

4。骗子

就像 web 开发和 UI/UX 中的 Lipsum 文本一样,我们有这个 Faker 库,它可以创建假数据供您使用。你可以创建假用户,电子邮件地址,家庭地址,地理坐标,网址,个人资料等。你可以创建不同类别的数据集,点击这里

安装并导入 faker:

! pip install Faker
from faker import Faker

创建一个实例并检查假名称:

fake = Faker()
fake.name()

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

fake.text()

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

创建尽可能多的假地址或 URL:

for _ in range(10):
    print(fake.address())

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

继续玩下去,并在前进的过程中创建一些有用的数据集。查看的文件

5。数字器

我偶然发现了一个当地银行的数据集,其中有一个单独的文件,里面有文本数字形式的金额。我偶然发现了这个将自然语言数字转换成整数和浮点数的库。这原本是一颗红宝石的编号器

从 numerizer 安装并导入 numerize:

!pip install numerizer
from numerizer import numerize

通过对一些文本数字进行编号来尝试:

numerize('forty two')
numerize('twenty one thousand four hundred and seventy three')
'21473'

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

很有趣,对吧?不是这个。在接下来的部分中,我还会继续介绍许多其他的技巧和库,但是现在,这里有一个到资源库的链接,您可以使用它:

[## dswh/pro _ 数据 _ 分析

汇编技巧、提示和库以加速您的数据分析任务——dswh/pro _ data _ analysis

github.com](https://github.com/dswh/pro_data_analysis)

如果你喜欢看我在我的系统上尝试这些库和工具:

有了这些库和工具的解释,从现在开始我把它留给你的想象力。制作一些有趣的东西,并在下面的评论中分享链接,如果我觉得有趣,我会在我的频道上的下一个视频中喊出你的名字。

数据科学与 Harshit

查看我如何通过 TensorFlow 开发人员考试,以及您如何也能通过考试!

通过这个渠道,我计划推出几个涵盖整个数据科学领域的系列。以下是你应该订阅频道的原因:

我如何在不到 3 周的时间内通过云提供商认证考试

原文:https://towardsdatascience.com/how-i-passed-a-cloud-provider-certification-exam-in-less-than-3-weeks-6b0fc65fb3ba?source=collection_archive---------30-----------------------

这不容易,但值得。

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

Avel Chuklanov 在 Unsplash 上拍摄的照片

去年 12 月 23 日,在 AWS 持续工作了大约三周后,我参加了 DevOps 工程师专业考试的第一次模拟考试。取得了可观的分数后,我决定在决定是否参加真正的考试之前,再努力学习一周。一周后,我把考试安排在 1 月 8 日。如果我通过了,那就意味着在不到三周的时间里,我已经从一个相对新手变成了 AWS 提供的两个专业等级认证中的一个。

正如你可以从标题中看出的,我确实通过了考试,回顾过去,我的成功至少部分是由于我想分享的一些深思熟虑的策略。其中大部分(如果不是全部的话)是普遍适用的,因为它们可以很容易地用于获得其他认证,无论是在 AWS 生态系统还是其他系统中。

**提醒:如果你正在寻找快速简单的提示,这里不是你能找到的地方。**这次考试是我自大学以来参加的最难的考试之一(让我告诉你,即使在这种情况下,它也和有机化学一样,是医学生众所周知的入学门槛)。这里没有捷径可走;如果你想实现我所做的,在我所做的时间里,你需要非常努力地工作。为了与认证协议保持一致,我显然也不会分享关于考试本身的具体细节。

事不宜迟,以下是我的建议。

使用行之有效的学习方法

大多数人认为以下是学习的好方法:

  1. 阅读
  2. 突出相关段落
  3. 复习笔记
  4. 观看培训视频

事实上,假设你的目标是真正记住你试图学习的知识,这些都是你可以学习的最糟糕的方法。

在 2009 年发表的一项研究中,科学家艾米·卡伦德和马克·麦克丹尼尔表明,阅读(包括重复阅读)对提高阅读信息的后续测试的性能几乎没有好处。

在《坚持:成功学习的科学》一书中,作者(其中一人是上述研究的贡献者)展示了无提示回忆(即试图记住如何在不使用选择题的情况下回答问题)实际上是学习和保留新信息的最有效方式之一。

是的,没错:好的旧抽认卡实际上比回顾你的笔记和重点更有效。为此,我为考试学习的方法之一是使用免费的在线工具 Quizlet,,它允许你创建一副抽认卡,并使用各种方法来复习它们(提示:“学习”模式可能是我发现的最好的方法)。如果你喜欢,请随意使用我的卡牌;这当然对我有好处。

也许与直觉相反,知道你是否在使用有效的学习方法的一个好方法是你是否发现这个过程很难。在同一本书中,作者指出,在整个学习过程中犯错误实际上是一个好现象,因为只有通过重复犯这些错误和练习回忆信息,这些信息才会被正确地编码到你的记忆中。我的经历证实了这一点,因为就在我考试的前一天,我在模拟考试中得了一些相当糟糕的分数;尽管如此,我还是以很大的优势通过了考试。关键是:如果你发现这个过程很难,并且犯了错误,不要认为这是你没有进步的迹象。

说到模拟考试,它们绝对应该是你学习的一部分。就我个人而言,我使用了 WhizLabs,这证明足以满足我的需求。我还建议参加 AWS 自己的实践考试(如果你通过了以前的认证,就像我通过了 AWS 解决方案架构师助理的认证一样,你甚至可以获得一个补充的代码),虽然很短,但会给你一个很好的实际测试问题措辞方式的演示。

使用外部资源

虽然我学习的主要来源是 AWS 文档,但我利用了两个外部课程来帮助我完成所有内容。原因是,至少在我的情况下,AWS 文档虽然非常全面,但由于其大小而有点令人不知所措。我经常发现自己陷入兔子洞,这对于我在最短的时间内通过考试可能没有什么用处。只是要注意,这些都不是附属链接,我没有皮肤推荐他们,除了我认为他们肯定会加快你准备考试的进展。

第一个是一直很受欢迎的 ACloudGuru,它很好地概述了与考试相关的各种主题,帮助我知道应该关注哪些领域。虽然它缺乏通过考试所需的复杂细节,但教师在介绍中对此很明确。

我使用的第二个外部资源是夏羽·马瑞克在 Udemy 上的 AWS DevOps 工程师专业课程。相比之下(就其本身而言),这是非常详细的。要知道,如果你真的购买了它,要完全完成它将需要大量的时间,尽管花的时间是值得的。

这里的要点是:利用高质量的第三方内容是充分利用有限时间的一种极好的方式,如果你想在短时间内通过考试,这一点非常重要。

做实际练习,但不要太多

了解如何使用 AWS 技术实际实现常见场景是备考的一个非常重要的部分。至少从我的经验来看,DevOps 工程师专业认证是为了让你做好进入战壕和完成实际工作的准备,而不是像其他认证那样更倾向于整体设计和架构。因此,实践各种相关技术的实际使用是一种很好的准备方式,但是不要做得太过火。有了这么多的选择,特别是如果你像我一样是一个内心的建设者,很容易花大量的时间去创造,而实际上你应该同样专注于事实的纯粹记忆。

获得大量实践经验的两个好方法是:

  1. 遵循 AWS 文档中给出的教程。
  2. 完成我之前提到的第三方课程中的“实验室”练习。

只做够及格的,不要再多了

让我们实际一点:没有人会关心你考试得了多少分;如果你通过了,那么你就可以展示徽章,并要求相关的吹嘘权利,无论你的分数是勉强及格还是完全及格。正因为如此,尤其是在短时间内,你必须遵守纪律,不要在你已经有足够的知识通过考试的领域花费过多的时间。

这里有一个我亲身经历的例子。我碰巧非常喜欢无服务器和容器,所以我非常喜欢学习 AWS Lambda 和弹性容器服务,这两个都在考试中。因此,我很容易花更多时间钻研这些领域,但会牺牲其他不太有趣但同样重要的研究领域,如 EC2 自动缩放。

这就是像抽认卡和练习测试这样的东西非常有用的地方,因为它们可以帮助你衡量你的薄弱环节,因此需要重点关注。如果你一直在回答某个特定主题领域的问题,并且回答得足够好,可以跳过这一部分,那就不要在这些领域花更多的时间。考试涉及的题目非常广泛,最好在各个领域都有足够的知识。

结束语

我被问了好几次,除了更多的就业机会和更高的可信度这些明显的好处之外,为通过考试而付出的努力是否值得。我的答案是压倒性的是!毫无疑问,我的研究给了我大量实际应用的知识,其中一些我已经在 AWS 平台的 DevOps 工程师的日常工作中得到了很好的利用。

虽然这无疑是一次紧张的经历(在我通过考试后,我告诉我的老板我的大脑受伤了,我是认真的),但这也是一个很好的方式来快速吸收关于如何在 AWS 平台内最好地遵循 DevOps 实践的广泛知识。如果你愿意提前付出努力(并得到老板和配偶的支持),你完全没有理由不能做同样的事情。

我是如何通过 2020 年谷歌专业数据工程师考试的

原文:https://towardsdatascience.com/how-i-passed-google-professional-data-engineer-exam-in-2020-2830e10658b6?source=collection_archive---------1-----------------------

八天后。给那些没有时间阅读手册的人的快速学习指南。2020 年 8 月。

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

谷歌云认证专业数据工程师

想获得该认证吗?这并不容易。你需要做作业。据我在网上读到的,人们通常花 2-3 个月来准备。

众所周知,我们中的许多人不会每天都使用谷歌的每一款产品,但我们需要了解它们,对吗?这篇文章是写给那些没有时间阅读所有手册的人的。我将描述我在 8 天内为准备这次考试做了什么。

首先我需要说的是,我不知道那场考试到底有多严肃。考试问题比我所知道的任何在线课程问题都要复杂和不同。因此,如果你没有任何开发背景,请慢慢来,阅读书籍,做教程。

通过测试用了 1 小时 35 分钟。尽管每个考试问题都完全一样。

“为什么我选择这样对自己?”

在第三个问题之后,我有一种强烈的感觉,我什么都不知道。当我告诉每个人我要参加这次考试时,我真的很害怕。给你一点建议——不要给自己太大压力。不要告诉你的老板或女朋友。如果你失败了,你可以在两周内再次参加考试。我想我通过了,只是因为我是一个幸运的家伙,那天穿着我的幸运 t 恤。在我提交了最终答案后,我马上看到了考试结果。这是一个“通行证”。我的证书和一件帽衫的促销代码下周就要到了。

推荐阅读

有一本【2020 年 5 月的书,一本官方 Google Cloud 认证专业数据工程师学习指南作者 Willey。这是 40 美元,它有一个目录,给出了对考试题型的基本理解。买不买由你决定。你可能只是想熟悉一下内容,这就足够了。

准备

第一天

我从模拟测试开始。对于这项任务,有大量的在线课程。我在下面给出了一些帮助我做好准备的概述。长话短说,如果你不想浪费时间,就从测试开始吧。

谷歌有一个模拟考试,我做了,但没有通过,但我知道问题看起来到底是什么样的。它为您提供了认证考试中可能遇到的问题的格式、级别和范围

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

模拟考试—谷歌专业数据工程师

然后就是 Linux 学院实践考试。

最近,他们确实从一位云专家那里移植了一些课程,其中包括谷歌专业数据工程师课程!这个课程本身会比他们平台上的课程更新,但你仍然可以在这里查看他们的数据工程师课程谷歌云认证专业数据工程师(LA) 。更新为最新的 2019 年 7 月考试目标。

第一个是免费的! 所以去解锁挑战吧。第二次注册后,你将有两次免费练习的机会。

而且他们有一本随手可得的课程书(免费):Linux Academy 编写的 Google Cloud 专业数据工程师考试手册 :范围内主要概念汇总。

第二天

第二天,我开始构思如何处理案例研究,考试结构和问题是什么。我开始关注像经济实惠、性价比高、尽快等词。这些类型的关键词通常定义了正确的答案,因为在考试中,你可以找到多个在技术上满足要求的答案。

第 3-5 天

我一天做两次模拟考试,偶尔阅读与我不知道的主题相关的谷歌文档。我骑自行车的时候在健身房做早操。30-40 分钟足够做模拟考试了。还有一项研究表明适度的有氧运动可以改善认知功能。我发现它非常有用,有氧运动听起来不再痛苦了。我在学习。

第 6–8 天

我一天做了两次模拟考试,但现在我打开了两个浏览器标签,上面都是以前通过的模拟考试。每一个我不确定的问题,我都会马上检查并阅读文档。我认为这种策略有助于完善我的知识。此外,我开始记下一些特定产品的笔记,并将它们与我之前提到的关键词联系起来。

到了第七天,我的练习通过率至少达到了 90%。

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

谷歌认证数据工程师考试

如何通过考试?

这个问题没有通用的答案。在真正的考试中,我觉得我什么都不知道,问题似乎很难。然而,下面的策略对我很有效:

  1. 做模拟测试,了解问题的类型和结构。
  2. 了解产品特性
  3. 请注意问题关键词,因为它们通常定义了正确答案。

穿上你的幸运 t 恤或者任何你拥有的幸运物品。你需要这个。

4.阅读手册。这是可选的,但是非常有用。

阅读谷歌官方文档。至少有概述和案例研究。这些指南很棒,有你通过考试所需的所有信息。我从威利的专业数据工程师学习指南中查找了一个主题,然后在谷歌文档中搜索了这个主题。

大部分考题都是 案例分析如何修复某物,设计一个流程,最佳实践或者关于机器学习

真正的考试是非常机器学习重。

典型问题。

确保解决方案质量。

案例研究和最佳实践问题。会有很多。

示例 1 : 您正在监视 GCP 操作(以前称为 Stackdriver)指标,这些指标显示您的 Bigtable 实例的存储利用率接近每个节点 70%。你是做什么的?

: **向群集中添加额外的节点,以增加存储处理能力。**尽管云 Bigtable 表数据存储在 Google Colossus 中,但是集群需要适当地调整大小,以便节点有足够的资源来处理使用中的总存储。当每个节点的实例存储利用率达到 70%时,应添加额外的节点。

阅读:配额&限制|云 Bigtable 文档|谷歌云

示例 2: 您的组织最近刚刚开始使用 Google Cloud。公司中的每个人都可以访问 BigQuery 中的所有数据集,在他们认为合适的时候使用它,而无需记录他们的用例。您需要实现一个正式的安全策略,但是需要首先确定每个人在 BigQuery 中都做了什么。你这样做的第一步是什么?

:使用 Stackdriver Logging 查看数据访问。Stackdriver 日志记录将记录每个用户操作的作业和查询的审计日志。查询槽不起作用,因为它们测量 BigQuery 性能和资源使用情况,但是不提供对单个用户活动的可见性。您将无法通过计费记录查看用户活动。IAM 策略应用于数据集,而不是每个数据集中的单个表。此外,IAM 策略显示谁有权访问资源,但不显示他们的活动。

阅读: BigQuery 文档|谷歌云

例 3 :您的安全团队已经决定您的 Dataproc 集群必须与公共互联网隔离,并且没有任何公共 IP 地址。你如何实现这一点?

回答:使用-no-address 标志将会阻止公共 IP 被分配给云 Dataproc 集群中的节点。但是,子网仍然需要私有的 Google 访问权限来访问某些 GCP API。

阅读 : Dataproc 集群网络配置| Dataproc 文档

探索谷歌推荐的最佳实践

毕竟,我建议阅读所有数据库产品的概述,因为会有很多关于它们的问题:https://cloud.google.com/products/databases

设计数据处理系统

示例: 一位客户在数据中心运行一个 400GB 的 MySQL 数据库。将该数据库迁移到 GCP 的最佳方法是什么?

回答 : 为 MySQL 二代实例创建云 SQL,并迁移数据。对于这种规模的 MySQL 数据库,推荐使用云 SQL for MySQL 实例。使用计算引擎会增加额外的运营开销。Postgres 和 Spanner 不适合作为 MySQL 数据库的迁移主机。

推荐阅读: 从 MySQL 迁移到云 SQL | Solutions | Google Cloud

选择谷歌数据库产品

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

选择谷歌数据库产品

例子:你的数据库大小是 500 GB。数据是半结构化的,不需要完全原子性。你需要在谷歌云平台上的销售点应用程序中处理交易?您需要考虑用户的指数级增长,但又不想管理基础设施开销?

使用数据存储

示例:数据超过 1 Tb,要求低延迟(您可能也不关心成本):

使用 BigTable

低延迟不需要和/或需要运行 ANSI SQL 分析并经济地执行**?需要方便地从 CSV 和 JSON 加载数据,以便以后用 SQL 检查?**

使用 BigQuery 。云数据存储支持 JSON 和类似 SQL 的查询,但不能轻松接收 CSV 文件。云 SQL 可以从 CSV 读取,但不容易从 JSON 转换。云 Bigtable 不支持类似 SQL 的查询。

你正在 Google Cloud 上设计一个关系型数据仓库,以便按需增长。数据将在事务上保持一致**,并从世界上的任何位置添加。您希望监控和调整输入流量的节点数,输入流量可能会出现不可预测的峰值。**

使用云扳手****

你需要强一致性事务**?数据小于 500 Gb?数据不需要流或实时?**

使用云 SQL****

请注意:

****高可用性和高性能以及类似故障转移和读取副本的功能。

毕竟有很多重大问题。

请注意:

开发和生产实例、磁盘类型(HDD 与 SSD)。

BigTable 性能示例:您的组织将部署一批新的物联网设备,预计写入 BigTable 实例的峰值为每秒 50,000 次查询。您已经优化了行键设计,需要设计一个能够满足这一需求的集群。你是做什么的?

回答:一个优化的 Bigtable 实例,一个设计良好的行键模式,理论上可以支持每个节点每秒 10000 个写查询,所以需要 5 个节点。

阅读 : 了解云 Bigtable 性能

****BigTable 性能示例:您被要求调查一个性能很差的 BigTable 实例。表中的每一行代表来自物联网设备的一条记录,并在各自的列中包含 128 个不同的指标,每个指标包含一个 32 位整数。如何修改设计以提高性能?

回答:大量单元格排成一行会导致云 Bigtable 性能下降。当数据本身很小时,就像在这个场景中,简单地从一个单元格中检索所有指标,并在单元格中使用分隔符来分隔数据会更有效。行版本控制会沿着表中效率最低的维度创建最多的新条目,从而使问题复杂化,而 HDD 磁盘总是会减慢速度。

阅读 : 了解云大表性能

****BigTable 性能示例:您的生产 BigTable 实例当前使用四个节点。由于表的大小增加,您需要添加额外的节点来提供更好的性能。您应该如何在没有数据丢失风险的情况下实现这一点?

回答:编辑实例细节,增加节点数。保存您的更改。数据将在不停机的情况下重新分发。您可以在 Bigtable 中添加/删除节点,而无需停机。

阅读 : 云大表概述|云大表文档

****BigTable 性能示例:您当前有一个 BigTable 实例,一直用于运行开发实例类型的开发,使用 HDD 进行存储。您已经准备好将开发实例升级到生产实例,以提高性能。您还希望将存储升级到 SSD,因为您需要实例的最高性能。你该怎么办?

:您不能更改现有 Bigtable 实例上的磁盘类型,您需要将您的 Bigtable 数据导出/导入到具有不同存储类型的新实例中。您需要导出到云存储,然后再次返回到 Bigtable。

****BigTable 性能示例:您的客户使用了一个 BigTable 实例,其中包含两个用于区域灾难恢复的复制集群。来自应用程序的表事务需要高度一致。对于这种配置,您如何保证这一点?

:确定一个集群为主集群,使用指定单集群路由的应用配置文件。默认情况下,云 Bigtable 最终是一致的。为了保证强一致性,您必须使用应用程序配置文件将查询限制到实例中的单个集群。

阅读:复制概述|云 Bigtable 文档|谷歌云

阅读 : 云大表概述|云大表文档

****BigTable 性能示例:如果一个节点宕机,BigTable 实例中的数据会发生什么变化?

:没有,因为存储与节点计算是分开的。从 RAID 重建不是有效的 Bigtable 函数。存储和计算是分开的,因此一个节点宕机可能会影响性能,但不会影响数据完整性;节点仅将指向存储的指针存储为元数据。

阅读 : 云大表概述|云大表文档

****BigTable 性能示例:您正在监视 GCP 操作(以前称为 Stackdriver)指标,这些指标显示您的 BigTable 实例的存储利用率接近每个节点 70%。你是做什么的?

:向群集中添加额外的节点,增加存储处理能力。尽管云 Bigtable tablet 数据存储在 Google Colossus 中,但是集群需要适当地调整大小,以便节点有足够的资源来处理使用中的总存储。当每个节点的实例存储利用率达到 70%时,应添加额外的节点。

阅读:配额&限制|云 Bigtable 文档|谷歌云

****BigTable 性能示例:在 BigTable 实例中,以下哪一项不是选择 HDD 存储类型而不是 SSD 的有效理由?

回答 : Bigtable 可以与云存储集成,而不考虑实例使用的磁盘类型。选择 HDD 作为例外情况的其他原因是有效的,但一般来说,SSD 磁盘是首选,因为 HDD 磁盘将导致性能显著下降。

阅读 : 云大表概述|云大表文档

关系数据库问题

请注意:

副本、可用性和迁移指南。

示例:您正在 Google Cloud 上设计一个关系型数据仓库,以便根据需要进行扩展。这些数据在事务上是一致的,可以从世界上的任何地方添加。您希望监控和调整输入流量的节点数,输入流量可能会出现不可预测的峰值。你该怎么办?

回答:使用云扳手存放。监控 CPU 利用率,如果在您的时间跨度内利用率超过 70%,则增加节点数。

例子:您的客户希望将一个 2TB 的 MySQL 数据库迁移到 GCP。他们的业务要求正常运行时间 SLA 超过 99.95%。你如何实现这一点?

:将数据库迁移到 Cloud SQL for MySQL 高可用性配置,在二级区域有一个备用实例。云 SQL 的标准 SLA 是 99.95%。通过在辅助可用性区域中使用具有故障转移实例的高可用性配置,可以实现超过这一时间的正常运行时间。故障切换副本不是一项功能,读取副本才是。冷备盘效率低下,因为它们不会自动切换,这与正确的高可用性配置不同。实现所需的 SLA 不需要计算引擎选项。

阅读 : 云 SQL 服务级别协议(SLA) |云 SQL 文档 高可用性配置概述|云 SQL for MySQL

很多关于 Pub/Sub,卡夫卡,开窗的问题。

请注意:

卡夫卡镜像,这两者的区别。

发布/订阅

Pub/Sub 处理来自全球的流量呈指数级增长的需求。Apache Kafka 将无法像 Pub/Sub 一样处理全球用户的指数增长。

云发布/订阅保证向每个用户至少发送一次消息。因为每个订单都需要通知多个系统,所以您应该创建一个主题并使用多个订阅者。发布/订阅不保证交付顺序,因此如果可能,请在发布系统中附上时间戳。

改为:https://cloud.google.com/pubsub/architecture

示例:贵公司的 Kafka 服务器集群无法根据数据接收需求进行扩展。流式数据接收来自世界各地。他们如何将这一功能迁移到 Google Cloud,以便能够为未来的增长进行扩展?

回答:创建一个单独的发布/订阅主题。将端点配置为发布到发布/订阅主题,并将云数据流配置为订阅相同的主题,以便在消息到达时对其进行处理。

**[## 阿帕奇卡夫卡和谷歌云发布/订阅

大数据消息系统的一些竞争者是 Apache Kafka、Google Cloud Pub/Sub 和 Amazon Kinesis(不是……

www.jesse-anderson.com](https://www.jesse-anderson.com/2016/07/apache-kafka-and-google-cloud-pubsub/)**

安全、加密和密钥管理

示例:您的组织有一个安全策略,要求安全部门必须拥有和管理存储在云存储桶中的数据的加密密钥。分析师和开发人员需要存储用这些密钥加密的数据,而不需要访问密钥本身。如何实现这一点?

:使用云 KMS 让安全团队在一个专门的项目中管理他们自己的加密密钥。授予云 KMS 加密密钥加密器/解密器角色,用于其他项目中云存储服务帐户的密钥。云 KMS 允许您创建和管理自己的加密密钥,这些密钥可由其他项目中的服务帐户使用。然后,这些项目中的开发人员可以访问服务,而无需访问底层密钥。不需要临时区域,也不需要安全团队进行任何其他手动干预。

阅读 : 使用客户管理的加密密钥|云存储|谷歌云

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

加密方法的比较。来源:Coursera

建立和运行数据处理系统

Dataproc

注意:

针对 Dataproc 工作负载的 HDFS 与谷歌云存储。

最佳实践 : Dataproc 集群最好是特定于工作的。如果您需要扩展,请使用云存储,因为 HDFS 不会很好地扩展,并且需要自定义设置。此外,谷歌建议使用云存储而不是 HDFS,因为它更具成本效益,尤其是在工作不运行的时候。

阅读:https://cloud . Google . com/solutions/migration/Hadoop/Hadoop-GCP-migration-jobs

数据流

请注意:

PCollection分支、展平和连接、变换和滑动窗口。

  • 展平——可以使用 Beam SDKs 中的Flatten变换来合并同类型的多个PCollection
  • Join —您可以使用 Beam SDK 中的CoGroupByKey转换来执行两个PCollection之间的关系连接。PCollection必须是键控的(即它们必须是键/值对的集合),并且它们必须使用相同的键类型。

阅读:https://beam . Apache . org/documentation/pipelines/design-your-pipeline/

开窗:

** [## 波束编程指南

Apache Beam 是一个开源、统一的模型和一组特定于语言的 SDK,用于定义和执行数据…

beam.apache.org](https://beam.apache.org/documentation/programming-guide/#windowing)

示例:你正在编写一个流云数据流管道,在将用户活动更新写入时序数据库之前,对其进行转换。当每个元素到达时不断地进行转换,您还需要在运行时依靠一些额外的数据来创建转换。你如何实现这一点?

回答:如果 ParDo 在处理 input PCollection 中的每个元素时需要注入额外的数据,那么 Side inputs 就很有用,但是额外的数据需要在运行时确定(而不是硬编码)。合并不会获得相同的结果,使用外部 shell 脚本是不必要的,也是低效的。

阅读 : 光束编程指南

示例:您需要设计一个管道,它可以从您的组织的应用程序指标以及您的用户数据库中接收批量数据,然后在输出到 BigQuery 之前使用一个公共键连接数据。最有效的方法是什么?

回答:创建一个云数据流管道,并在公共键上使用 CoGroupByKey 转换连接两个 PCollections。CoGroupByKey 对具有相同键类型的两个或多个键/值 p 集合执行关系联接;“常用钥匙”是这个问题中的神奇线索。

阅读 : 光束编程指南

示例: 您正在计算引擎上设置多个 MySQL 数据库。出于审计目的,您需要从 MySQL 应用程序中收集日志。您应该如何处理这个问题?

回答:在您的数据库实例上安装 Stackdriver 日志代理,并配置 fluentd 插件,以读取您的 MySQL 日志并将其导出到 Stackdriver 日志中。 Stackdriver Logging 代理需要配置 fluentd 插件来从数据库应用程序中读取日志。不是 Stackdriver 监控,不是 Cloud Composer。Cloud Composer 用于管理工作流,而不是日志记录。Stackdriver 监控对于测量性能指标和警报非常有用,但对于日志则没有用处。

阅读 : 关于日志代理|云日志|谷歌云

示例:您想要对当前生产中的云数据流管道进行更改,该管道从云存储中读取数据,并将输出写回到云存储中。在开发过程中测试变更的最简单和最安全的方法是什么?

:使用 DirectRunner,利用本地计算能力,和一个分段存储桶,对流水线进行试运行。使用带有临时存储桶的 DirectRunner 配置是测试新管道的最快捷、最简单的方式,不会有更改当前生产中的管道的风险。

改为 : 直接流道

示例:您被要求调查一个性能很差的 Bigtable 实例。表中的每一行代表来自物联网设备的一条记录,并在各自的列中包含 128 个不同的指标,每个指标包含一个 32 位整数。如何修改设计以提高性能?

回答:使用分隔符将指标存储在一列中。确保群集正在使用 SSD 磁盘。一行中的大量单元格会导致云 Bigtable 的性能下降。当数据本身很小时,就像在这个场景中,简单地从一个单元格中检索所有指标,并在单元格中使用分隔符来分隔数据会更有效。行版本控制会沿着表中效率最低的维度创建最多的新条目,从而使问题复杂化,而 HDD 磁盘总是会减慢速度。

阅读 : 了解云大表性能

操作化机器学习模型

我从谷歌文档开始,因为我已经熟悉了 ML 的基本概念,但我认为官方的谷歌 ML 速成课程对考试非常有用。100%我应该先从这个开始。它有很多阅读内容和视频。

[## 机器学习入门|机器学习速成班

本模块介绍机器学习(ML)。预计时间:3 分钟学习目标识别实用…

developers.google.com](https://developers.google.com/machine-learning/crash-course/ml-intro)

每一部分都有一个小测验,这样你可以检查你的理解程度:

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

动态(在线)推理

这个考试真的是机器学习重。

例题:

示例 L1/L2 正则化 : 您正试图训练一个张量流模型,但您意识到您的一些输入特征对预测没有显著影响。您可以采用什么技术来降低模型的复杂性?

回答: L2 正则化在所有特征具有相对相等的权重/影响时更相关,这里不是这种情况。超参数处理学习率,与这个问题无关。 L1 正则化能够将不太重要的特征的权重降低到零或接近零。

阅读 : 为了简单而正规化|机器学习速成班

举例: 什么是过/欠拟合 **以及如何修复。**你正在训练一个面部检测机器学习模型。您的模型因过度拟合您的训练数据而受到影响。你能采取什么步骤来解决这个问题?

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

简单回答:修复欠拟合(例如,当你的模型在训练集上的均方根误差(RMSE)是在测试集上的两倍时。)增加模型的复杂性(引入一个额外的层或者增加词汇表的大小)。
模型过拟合时,预测训练数据很好,但在验证集上表现不佳。要修复过度拟合:减少特征的数量 ( 正则化),添加更多数据以增加样本的多样性并更好地概括您的模型**,使用丢弃层通过移除层或减少隐藏层中的元素数量来降低**网络的容量。增加您的正则化参数也允许您减少模型中的“噪声”以减少过度拟合。

阅读:https://developers . Google . com/Machine-learning/crash-course/generalization/peril-of-over fitting还有这里:机器学习工作流程| AI 平台|谷歌云

简单回答:

一个 特征 不存在于输入特征中,而是从一个或多个输入特征中创建的。合成特征的种类包括:——将一个连续的特征存储到范围仓中。-将一个特征值乘以(或除以)其他特征值或自身。—创建一个 特征交叉 : 一个 合成特征 通过交叉(取一个笛卡尔积)单个二元特征形成。特征交叉有助于表示非线性关系。

**示例 Google 机器学习 API**:您正在开发一个应用程序,该应用程序只能识别并标记图像中特定的 B2B 产品徽标。您没有使用机器学习模型的广泛背景,但需要让您的应用程序正常工作。目前完成这项任务的最佳方法是什么?

:使用 AutoML 视觉服务,通过视觉 API 训练定制模型。Cloud Vision API 可以识别常见的徽标,但自己很难找到特定的业务徽标。最好的选择是 AutoML,它允许您采用预先训练的 Vision API,并将其应用于自定义图像。从头开始创建一个定制的 ML 模型是非常耗时的,当您可以在现有的模型上构建时,这是没有必要的。

阅读 : 云自动 ML 视觉

示例:您需要快速为您的应用程序添加功能,使其能够处理上传的用户图像,提取图像中包含的任何文本,并对文本执行情感分析。你该怎么办?

回答:调用云视觉 API 进行光学字符识别(OCR)然后调用自然语言 API 进行情感分析。用于 OCR 的云视觉 API 是从用户上传的图像中提取的最快方法。自然语言 API 已经有了一个内置的情感分析模型。

阅读 : 检测图像中的文本|云视觉 API |谷歌云 分析情感|云自然语言 API |谷歌云

示例:您正在开发一个移动应用程序,它允许食品加工企业检测出变质的水果。仓库的工作人员将使用移动设备对水果进行拍照,以确定是否应该丢弃。您可以使用哪些 GCP 服务来实现这一目标?

:用已经变质的水果的标签图像训练一个自动视觉模型。使用 ML 套件中的 AutoML Vision Edge 将定制模型部署到使用 ML 套件客户端库的移动设备。AutoML 视觉服务是使用图像数据训练自定义分类模型的最快方法,ML 工具包中的视觉边缘将允许模型部署到 Android 和 IOS 设备。为了训练模型,必须对图像进行标记。不需要使用 Kubernetes 引擎或 App 引擎。

阅读: AutoML Vision API 教程|云 AutoML Vision |谷歌云

示例:您有大量图像希望通过自定义自动视觉模型进行处理。时间不是因素,成本才是。你应该采取哪种方法?

回答:使用 batchPredict 方法对整批图像进行异步预测请求。批量预测通常比同步(在线)预测提供更低的每次推理成本和更高的吞吐量。但是,批量预测会产生一个长时间运行的操作(LRO),这意味着只有在 LRO 完成后结果才可用。

阅读 : 批量预测|云自动视觉|谷歌云

ML 产品

这个是一个完整的列表,很容易找到所有文档。只需浏览概述和用例部分。

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

视觉人工智能用例

**语音转文本 API 最佳实践:【https://cloud.google.com/speech-to-text/docs/best-practices **

https://cloud.google.com/vision/docs/labels云视觉 API**:**

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

来源:Linux 学院

自然语言 API

例题:你希望建立一个 AutoML 自然语言模型,对一些带有自定义标签的文档进行分类。如何确保为模型提供高质量的训练数据?

回答:确保每个标签至少提供 10 份培训文档,但最常见标签的文档最好是最不常见标签的 100 倍。为了在为 AutoML 自然语言分类模型准备训练数据时获得最佳结果,每个标签的最小文档数为 10,理想情况下,最常见标签的文档数应该至少是最不常见标签的 100 倍。

阅读 : 准备你的训练数据| AutoML 自然语言|谷歌云

此外,我推荐以下最佳实践指南:

** [## 机器学习的规则:| ML 通用指南|谷歌开发者

本文档旨在帮助那些具有机器学习基础知识的人从谷歌的最佳…

developers.google.com](https://developers.google.com/machine-learning/guides/rules-of-ml/)

在线模拟考试

来自 Linux 学院的谷歌认证专业数据工程师

排名:4/5——可能是最好的一个。仍然不能涵盖你在考试中可能面临的所有方面。

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

来自 Linux 学院的谷歌认证专业数据工程师

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

谷歌认证专业数据工程师结果

Coursera 谷歌云专业数据工程师课程

[## 准备谷歌云专业数据工程师考试

由谷歌云提供。来自课程:“备考最好的方法是在技能上胜任…

www.coursera.org](https://www.coursera.org/learn/preparing-cloud-professional-data-engineer-exam)

它有一个很好的资源部分,里面有pdf 文件,你可以用来准备考试。它也有 7 天的免费试用期。最终实践考试包括 25 道题,其中只有 4 道我发现与 Linux Academy 有些不同。

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

Coursera GCP 专业数据工程师-考试 pdf 和资源

云学院课程

最近一次更新是在**2020 年 7 月 10 日。**不幸的是,你不能在这里免费参加模拟考试,但他们有一个很好的移动应用程序和讲稿。所以我在体育馆骑车的时候做了这个。

[## 数据工程师-谷歌云学院专业认证准备

本学习路径旨在帮助您准备 Google 认证专业数据工程师考试。即使…

cloudacademy.com](https://cloudacademy.com/learning-paths/data-engineer-professional-certification-preparation-for-google-83/)

只需点击注册 7 天免费试用。

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

云学院— GCP 数据工程师考试(不提供免费版本)

最终提示

  1. 决定你是否真的需要这个认证。备考是一个巨大的承诺。
  2. 不要告诉任何人。
  3. 了解更多关于机器学习的信息。会有很多。
  4. 关注 ML 产品特性
  5. 真正的考试问题比你在模拟考试中面临的问题更复杂。

推荐阅读:

Ivam Luz:https://docs . Google . com/spreadsheets/d/1 lutqhoejumyscfn 3 ZJ 8 arhzcmazr 3 VRP zy 7 vzj wishe/edit?usp =分享&source = post _ page-bb 6a 0812 a1 b 1-

[## 修正欠拟合和过拟合模型的黑客指南

TL;DR 了解如何使用 TensorFlow 2、Keras 和 scikit-learn 处理欠拟合和过拟合模型。理解…

www.curiousily.com](https://www.curiousily.com/posts/hackers-guide-to-fixing-underfitting-and-overfitting-models/) [## 我是如何通过谷歌云专业数据工程师认证考试的

没有推荐的 3 年实践经验

towardsdatascience.com](/passing-the-google-cloud-professional-data-engineer-certification-87da9908b333) [## ml 874/GCP 河畔数据工程

这份备忘单目前是谷歌云平台上的 9 页参考数据工程。它涵盖了数据…

github.com](https://github.com/ml874/Data-Engineering-on-GCP-Cheatsheet) [## 谷歌云专业数据工程师认证— 2020 年迷你指南

将此作为 2020 年参加考试的人的迷你指南。很难在上找到最新的指南…

medium.com](https://medium.com/@paulmacovei/google-cloud-professional-data-engineer-certification-2020-mini-guide-724244989403) [## 机器学习速成班|谷歌开发者

学习和应用基本的机器学习概念的速成课程,获得现实世界的经验与…

developers.google.com](https://developers.google.com/machine-learning/crash-course) [## 官方谷歌云认证专业数据工程师学习指南

经过验证的学习指南,为您准备新的谷歌云考试谷歌云认证专家数据…

www.wiley.com](https://www.wiley.com/en-us/Official+Google+Cloud+Certified+Professional+Data+Engineer+Study+Guide-p-9781119618454) [## 2020 年考取谷歌云专业数据工程师认证

谷歌云专业数据工程师认证是一个技术认证,证明了知识和能力…

medium.com](https://medium.com/@alessandro.marrandino/taking-google-cloud-professional-data-engineer-certification-in-2020-7b698174af69) [## 如何通过谷歌云专业数据工程师考试

没有推荐的 3 年行业经验

towardsdatascience.com](/how-to-pass-the-google-cloud-professional-data-engineer-exam-f241d7191e47) [## 我的谷歌云专业数据工程师考试笔记

考试结束后,我立即做了一个记忆转储作为笔记。因此它也是非常无序的。这是一份经过清理的列表…

medium.com](https://medium.com/@sathishvj/notes-from-my-google-cloud-professional-data-engineer-exam-530d11966aa0) [## 通过谷歌云专业数据工程师认证考试的终极秘诀(2019 年 10 月)

那么,为什么要考谷歌云专业数据工程师认证考试呢?

medium.com](https://medium.com/@sodiumsun/the-ultimate-hack-to-passing-google-cloud-professional-data-engineer-certification-exam-2019-oct-663b2dfac492) [## 谷歌云——数据工程师考试学习指南

这是一份 12 页的考试学习指南,希望涵盖 GCP 数据工程师认证考试的所有要点

medium.com](https://medium.com/weareservian/google-cloud-data-engineer-exam-study-guide-9afc80be2ee3) [## 如何准备谷歌云认证专业数据工程师考试,并通过你的…

在想新年计划吗?把谷歌云证书加入你的职业组合怎么样?数据…

medium.com](https://medium.com/datadriveninvestor/how-to-prepare-for-google-cloud-certified-professional-data-engineer-exam-and-pass-it-on-your-a7bdef8aa8d0) [## 谷歌云认证:准备和先决条件

谷歌云平台(GCP)已经从一个小众玩家发展成为亚马逊网络服务的有力竞争者

cloudacademy.com](https://cloudacademy.com/blog/google-cloud-certification/) [## 专业数据工程师实践考试|谷歌认证专家

数据工程师实践考试将使您熟悉认证中可能遇到的问题类型…

cloud.google.com](https://cloud.google.com/certification/practice-exam/data-engineer)****

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值