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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

如何用支持向量机学习非线性数据集

原文:https://towardsdatascience.com/how-to-learn-non-linear-separable-dataset-with-support-vector-machines-a7da21c6d987?source=collection_archive---------24-----------------------

支持向量机简介及其在非线性数据集上的应用

动机

支持向量机

什么是支持向量机?支持向量机是监督学习模型,分析数据进行分类。单独类别的样本点由一个尽可能宽的间隙分开。

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

作者图片

如上图所示,间隙是用黑色圆圈的两点定义的黄色区域。边框绘制在黄色区域的中间。当新的样本点进来时,它们将被预测为属于它们落入的那一侧的类别

但是我们的数据并不总是线性的

如果数据像上面一样是线性可分的,那么我们用线性分类器来分离这两个类就没有问题了。但是如果我们的数据是像这样的非线性可分的呢:

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

作者图片

正如我们所看到的,即使来自不同类的数据点是可分的,我们也不能像上面那样简单地画一条直线

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

作者图片

那么,我们如何使用支持向量机来拟合非线性数据集呢?本文将带您了解如何做到这一点。读完本文后,您应该能够理解内核、gamma 和 C 的作用,以及如何操纵它们来适应您的数据集

SVM 的实验

创建数据集和绘图功能

从创建非线性数据集开始。

您应该会看到类似这样的内容。

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

作者图片

我们还需要一个名为plot_decision_region的绘图函数,就像这个一样。由于本文的目标是理解 SVM,如果您想使用数据集并遵循本文,请随意复制并粘贴下面的代码。

线性 SVM 的尝试

在扭曲我们的算法之前,让我们先试试标准的线性 SVM

C是与错误分类相关的成本。C的值越高,正确分离数据集的算法就越严格。我们使用kernel='linear'进行线性分类。

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

作者图片

正如我们所看到的,即使我们将成本设置得非常高,这条线也没有很好地分离红色和蓝色点。一些蓝点和红点在错误的一边。

径向基函数核

到目前为止,我们已经使用了线性分类器的形式

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

我们可以看到,g(x)是一个线性函数。当 g(x) >0 时,预测为 1。当 g(x) <1 时,预测为-1。但是由于我们不能像上面那样使用线性函数来处理非线性数据,我们需要将线性函数转换成另一个函数。

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

你不需要理解我们是怎么得到像上面这样的函数 g(x)的。请注意:

  • ||x-x_i||是距离公式。我们根据两点之间的径向距离来区分这两点。
  • 西格玛是一个调节参数。西格玛越大,分类器对距离差异越不敏感。
  • 范围从 0 到 1 的函数。
  • 距离越大,函数越接近零。这意味着两点更有可能是不同的
  • 距离越小,函数越接近零。这意味着两点更有可能相似。

这个分类器似乎是我们非线性数据的一个很好的候选。让我们检查一下

gamma是 1/sigma。记住 sigma 是一个调节函数。因此,伽马值越小,西格玛值越大,并且分类器对各个点之间的距离越不敏感。****

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

作者图片

让我们试着把伽玛放大,看看会发生什么

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

作者图片

厉害!似乎将伽马值放大 100 倍可以提高我们的分类器对训练集的准确性。我们把这个伽玛乘以 10 怎么样?

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

作者图片

看起来分类器努力使训练集的准确度更接近于零。那么这是否意味着如果我们将 gamma 增加到 10000,它会更加精确呢?不完全是。如果伽马太大,分类器最终对差异不敏感

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

作者图片

让我们改为增加 C。还记得 C 是做什么的吗?c 是与整个数据集的错误分类相关联的成本。换句话说,增加 C 将增加对整个数据集的灵敏度,而不仅仅是单个数据点。

让我们用一个下拉栏来快速观察 C 值增加的差异

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

作者图片

厉害!我们已经找到了参数,所以我们的 SVM 分类器成功地分离了两组点。

下一步是什么

我希望这篇文章能让你直观地了解什么是 SVM 分类器,以及如何使用它来学习非线性数据集。当然,如果您的数据是高维的,您不能总是基于上述可视化来判断您的分类器的性能。一个好的做法是根据训练集训练数据集,并在测试集上使用混淆矩阵或 f1 分数等指标。

你可以玩玩这本笔记本中提供的代码,以建立对 SVM 更好的直觉。

我喜欢写一些基本的数据科学概念,并尝试不同的算法和数据科学工具。你可以在 LinkedIn 和 T2 Twitter 上与我联系。

这个回购如果你想检查我写的所有文章的代码。在 Medium 上关注我,了解我的最新数据科学文章,例如:

[## 如何为你最喜欢的可视化工具创建下拉菜单和滑动条

使用 Python Widget,您可以用 3 行代码升级可视化

towardsdatascience.com](/how-to-create-a-drop-down-menu-and-a-slide-bar-for-your-favorite-visualization-tool-3a50b7c9ea01) [## 如何有效地微调你的机器学习模型

发现为您的 ML 模型寻找最佳参数非常耗时?用这三招

towardsdatascience.com](/how-to-fine-tune-your-machine-learning-models-with-ease-8ca62d1217b1) [## 自然语言处理中的卷积神经网络

什么是卷积神经网络,如何利用它进行情感分析?

towardsdatascience.com](/convolutional-neural-network-in-natural-language-processing-96d67f91275c) [## 如何用 Github 组织你的数据科学文章

被新信息淹没?现在,您可以轻松地跟踪文章并为其创建自定义注释

towardsdatascience.com](/how-to-organize-your-data-science-articles-with-github-b5b9427dad37) [## PyTorch 是什么?

想想 Numpy,但是有强大的 GPU 加速

towardsdatascience.com](/what-is-pytorch-a84e4559f0e3)

如何像爱因斯坦学物理一样学习编程

原文:https://towardsdatascience.com/how-to-learn-programming-like-einstein-learned-physics-d704db1a234b?source=collection_archive---------8-----------------------

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

信用

爱因斯坦是个天才,是有史以来最伟大的科学家之一。1905 年,他发表了四篇奠定现代物理学基础的科学文章,改变了对空间、时间、质量和能量的看法。在以这四篇文章出名后,他继续在 1921 年获得了诺贝尔奖,因为他解释了被称为光电效应的现象。

我们都可以从爱因斯坦的生活中学习,尤其是他的工作和学习方式。即使我们不一定都是爱因斯坦级别的天才,仍然有一些模式可以在多个研究领域中被模仿,尤其是在软件开发中。成功留下了线索,揭示了我们如何向任何人学习。

像 Michael Jordan 或 Arnold Schwarzenegger 这样的人不是软件开发人员,但是他们有意的实践和态度代表了一些可复制的模式,这些模式既可以由软件开发人员实现,也可以由其他职业的人实现。

在他们所做的事情上是精英中的精英的人通常因他们不同寻常的习惯而与众不同,比如专注于正确的事情,以及在没有人观看的时候痴迷地练习他们的手艺。他们不仅比同龄人和同龄人群体外的其他人工作得更出色,而且他们工作效率更高,并将学习视为一种生活方式。

正如世界上最著名的表演教练托尼·罗宾斯所说,“我认为如果你渴望学习,渴望成长,渴望掌握一切。如果你不满足于低于你的能力或成就,那么你就能超越任何人。”

学习如何学习

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

照片由🇸🇮·扬科·菲利Unsplash 上拍摄

据报道,爱因斯坦曾说过:“精神错乱就是一遍又一遍地做同一件事,却期待不同的结果。”如果你想获得不同的结果,你需要做与别人不同的事情。当你像其他人一样学习时,你会得到和他们一样的结果。你需要愿意深入一门学科,以不同的方式学习,才能成为爱因斯坦那样的人。

几十年前,一名物理系学生在一次考试中取得了满分,但在一个关于如何使用气压计测量建筑物高度的问题上,教授给他的分数很低。

学生写道:“去楼顶。放下气压计,数秒钟,直到它砸在下面的人行道上。然后用重力加速度的公式来确定建筑物的高度。”

预期的答案是参考气压计,使用气压作为测量高度的工具。当学生争辩说他已经用一种有点不寻常的方法得出了一个正确的答案时,教授和学生做了一个交易:如果学生能用另一种方法正确地回答同一个问题,教授会给他满分。

这名学生立即想出了另一个回答。他说他会用气压计敲大楼房东的门。房东一开门就会问:“这楼多高?”

教授要求学生想出另一种方法来回答这个问题,所以学生建议在气压计上绑一根长绳,从楼顶测量这根绳子的长度。或者像钟摆一样摆动绳子,通过它产生的运动来推断高度。

教授认为所有这些从不同角度的答案都是正确的,并给了学生满分。

根据斯科特·扬的书《多学点,少学点》,这个年轻的学生就是尼尔斯·玻尔,他因为发现了原子内部电子的本质而获得了 1922 年的诺贝尔物理学奖。但是他并不是仅仅通过参加他的物理讲座就学会了所有这些方法。

你必须对某件事充满热情,才能深入学习,理解这个话题,并对同一个问题给出这么多答案。此外,你也必须学习不同于大多数其他人的

大多数学生为考试而学习,因为他们想取得好成绩。他们不会学到比期末考试更多的东西,更不用说在期末考试后花更多的时间学习与主题相关的东西了。

类似地,很多软件开发人员倾向于使用谷歌来解决问题,这样他们就可以尽快修复错误。他们主要关心的是在经理面前表现得富有成效。他们没有花时间在更深层次上理解解决方案,或者找出解决问题的最有效方法。他们很满意这个任务在吉拉完成了。

当然,可能会有这样的情况,当你处于压力之下,你必须快速修复一个关键的 bug,因为最后期限很快就要到了。尽管如此,你不应该让这几个案例分散你继续学习的注意力。

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

信用

现在我们知道了学习对一个人的成功有多么重要,让我们看看如何通过更好地学习来成为更好的软件开发人员。

1.学习计算机科学的基础知识

根据沃尔特·伊萨克森写的阿尔伯特·爱因斯坦传记,在爱因斯坦 15 岁之前,他已经掌握了微积分,因为他认为数学是理解自然的一种方式。这些基本概念后来被证明在他的物理学领域的工作中是有用的。

大多数人倾向于避免学习基本面,因为他们可能在短期内看不到自己工作的成果。告诉别人你已经准备好在 Play Store 下载你的应用程序,比告诉他们你仍然专注于基础更令人满意。

和那些人不一样。学习计算机科学的基础——更具体地说,数据结构和算法——并真正学好它们。你必须能够在不使用教科书的情况下,自己实现一些最常用的算法和数据结构。

当您最终在深层次上理解它们时,您将获得以直观的方式解决软件开发中现实世界问题的能力,这可能是一种更快、更有效的方法。

正如艾萨克森提到的,爱因斯坦认为“直觉只不过是早期智力经验的结果。”在软件开发中,先前的智力经验需要坚实的基础。

正如 Linux 内核开发人员 Linus Torvalds 所说:

“事实上,我会说,一个糟糕的程序员和一个优秀的程序员之间的区别在于他认为他的代码更重要还是他的数据结构更重要。糟糕的程序员担心代码。优秀的程序员会担心数据结构和它们之间的关系。”

微软、谷歌或亚马逊等大型科技公司通过围绕基本概念的艰难技术面试来招募新的软件开发人员。

换句话说,不管你使用什么类型的编程语言,你的代码只是表达算法和数据结构的方式*。*

2.通过解决问题来学习,而不只是被动地看教程

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

照片由克里斯里德Unsplash 拍摄

爱因斯坦在大学经常逃课。艾萨克森引用他的话说,“我经常逃学,在家里怀着神圣的热情研究理论物理大师。”他没有兴趣,也没有被迫去听他的讲座。他发现了更吸引人、更有成就感的事情——他利用时间专注于解决难题,痴迷于自己摆弄想法和方程。

有很多书和教程可以教你编程。但是它们通常只给你一个关于新概念的肤浅介绍,而更深层次的理解和学习是在使用这些概念解决现实世界的问题时完成的。

不要错误地认为,通过被动地观察某人快速开发 web 应用程序,你已经学到了一些东西。当你还没有真正学会的时候,不要假装你懂了。正如爱因斯坦所写,“任何读书过多而用脑过少的人都会养成懒惰的思维习惯。”

相反,你应该积极参与解决问题,以便学习新的概念。你可能会从 LeetCode、Codility、HackerRank、CodeChef、CodeForces 等在线评委那里发现可以测试你对基本面理解的技术问题。

您还可以通过修复 bug 或使用更高效的实现优化现有功能,为 GitHub 中的开源项目做出贡献。参与他人的项目可以帮助你从他们的实现和方法中学习,并激发你提出新的解决方案。

这种工作积极地让你的大脑参与进来,因为你找到了现有解决方案的新方法,结果帮助你长期学习和保留信息。

如果你已经有了一份全职工作,或者即使你是一个独立的承包商,你也应该根据你目前的经验水平不断地寻找具有挑战性的任务。不要害怕要求你的项目经理把它们分配给你。不要回避这些机会,要充满热情,感受到通过学习做一些你以前不知道的事情而获得报酬的特权。正如爱因斯坦所说,“智力的增长应该始于出生,止于死亡。”

而且,不要犹豫,开始一个副业。您不必等到五年后才构建自己的应用程序。您可以开始开发一个小的应用程序,并计划在了解更多信息后进一步扩展它。

在 GitHub 上发布您的源代码,并通过电子邮件或编程社区联系其他程序员,尝试向他们寻求反馈。

3.通过编写测试来提高你的理解

爱因斯坦的叔叔雅各布早年挑战侄子证明毕达哥拉斯定理。经过一番努力,我成功地在三角形相似的基础上‘证明’了这个定理,爱因斯坦回忆道。

爱因斯坦花了很多心血通过做证明来建立他的理解。结果,他不仅能够全面地学习东西,而且也有足够的信心自己尝试其他东西。

证明定理类似于在编程中编写测试:你需要通过提出测试用例来证明网站的一个特性确实在工作,然后期望执行特定的功能或者源代码产生输出。考试是学习新事物的另一种方法,因为它比被动地观看教程花费更多的时间和精力。

一些新开发人员害怕进入测试领域,但是它代表了理解一个软件的执行流程和功能的最有效的方法之一。对于项目新手和希望了解项目结构和工作方式的人来说,这尤其有用。

如果你想了解一个特定的开源框架是如何工作的,你可以通过编写测试来提高你对它的理解。这样,你不仅能更好地理解框架,而且你的测试也能对项目有所贡献。

如果您正在处理一个大型项目,并且有些事情您不清楚,您可以将执行流程分解成几个组件,并为每个组件编写测试。

编写测试不仅有助于您的理解,还能让您发现潜在的 bug,从而为整个项目做出贡献。

4.全神贯注

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

凯文·Ku 在 Unsplash 上的照片

我们生活在一个有太多干扰的时代。从早上醒来的那一刻起,我们就拿起了手机。查看短信。阅读电子邮件。平均来说,一个人每天要打 76 个电话。

显然,爱因斯坦没有手机,但他有自己的分心事物类型,并有处理它们的方法,我们可以从中学习。他的儿子报告说,即使是最大的婴儿哭声似乎也不会打扰父亲,他补充说,“他可以继续工作,完全不受噪音的影响。

他高度集中注意力和长时间不间断工作的能力帮助他实现了历史性的突破。“我能够在两三个小时内完成一整天的工作。一天中剩下的时间,我会想出自己的想法,”爱因斯坦在谈到他在伯尔尼专利局的工作时说道,这份工作让他有时间专注于更具挑战性的工作。

软件开发人员可以向爱因斯坦学习,练习排除干扰。不要假装在无数次“只是检查”脸书的信息后,你能够专注于相同的强度水平!

畅销书《泰坦的工具》的作者 Tim Ferriss 写道“单一任务是一种超能力”他补充说,“在数字经济中,注意力分散就是一种货币,如果你能一次专注于一件事三到五个小时,并排除所有的注意力分散,你就有了很大的优势,你能做深入的工作,并把无关的点连接起来。”

试着与你的经理达成妥协,留出一天中的特定时间进行交流,将其他时间投入到有价值且认知要求高的工作中,比如学习新概念或新技术以及编写代码。

当我们能够远离那些干扰,运用好的时间管理技巧,我们就增加了更深入学习的机会,结果,我们变得更有效率。

5.保持好奇心,热爱学习

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

图片来源

软件开发是我们这个时代最受欢迎的职业之一。不断有新的工作机会,吸引了来自各行各业的年轻人和已经就业的人。他们知道作为一名软件开发人员,你可以得到一份非常好的薪水,因此,他们怀着远大的抱负开始了他们的职业生涯。

然而,即使你得到了一份软件开发的工作,只有你热爱学习和编程,你才能变得伟大。这是少数几个你必须不断学习新东西的职业之一。

你需要了解的不仅仅是现有的概念。你必须适应新技术和编程语言的不断发明。你必须适应市场的变化,学习目前被认为有价值的新事物。

你必须坚持不懈地学习很多东西。为了让你的大脑不断参与学习,你必须保持好奇和谦逊。

通常,程序员在他们现有知识的基础上获得就业,并开始认为他们不再需要学习新的东西。然而,只有当你充满好奇心并热爱学习的时候,你才能成为一名优秀的软件开发人员,因为学习的需求永远不会停止。

1915 年 11 月,爱因斯坦只写了两页就给 11 岁的儿子汉斯·阿尔伯特写了一封信,他被 T4 称为“我一生中最美丽的作品之一”。他表扬了儿子的学习努力,说:“这是学习最多的方法……当你如此享受地做某事,以至于你没有注意到时间的流逝。”

“好奇心有其存在的理由,”爱因斯坦解释道。“当一个人思考永恒、生命和现实的奇妙结构的奥秘时,他不禁感到敬畏。”

对框架是如何工作和构造的感到好奇。当你彻底了解某样东西时,你会对它的机制和功能有一个清晰的了解。不要简单地接受 Rails 是快速开发 web 应用程序的伟大框架——了解 Rails 如何幕后工作。此外,考虑对其做出贡献和改进的可能性,因为它是开源的。

也要小心,不要被金钱所困扰。当然,我们都需要钱来支付账单,为自己和/或家人购买食物,但是如果你想在软件开发方面出类拔萃,你需要培养学习和开发的热情。你需要热爱编程,并且感激你有机会用你写的代码对数百万人的生活产生积极的影响。

爱因斯坦相信“爱是比责任感更好的老师。”作为软件开发人员,我们从中可以学到的不仅仅是为高薪而工作的重要性,而是因为我们热爱学习和我们的工作,并且有一种内在的好奇心和动力,让我们在下班后或周末老板不在的时候保持忙碌。

永远记住:编程是一生的学习

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

帕特里克·托马索Unsplash 上拍摄的照片

除了他的学习方法,爱因斯坦是物理学中最有影响力的人物之一。他的工作帮助了许多学科,从核能生产到 GPS 卫星同步到计算机,再到许多日常消费品。

他的天才和成就可能超出了我们大多数人的能力范围,但他的职业道德、谦逊、好奇和坚韧值得任何人效仿。

如果你想成功,你可以通过复制其他成功人士的行为来节省自己的时间。尽管爱因斯坦没有写过一行 Java 或 Python 代码,但他的一生揭示了一些鼓舞人心的模式,我们都可以从中学习,并应用于软件开发领域。

爱因斯坦可以作为一种鼓励,专注于学习基本面,通过解决问题和编写不同项目的测试来学习,集中注意力,最重要的是,热爱学习。如果我们想在事业上取得成功,我们需要对学习充满热情,并认识到它是我们生活中至关重要的一部分。

跟我上 推特

如何以正确的方式学习编程

原文:https://towardsdatascience.com/how-to-learn-programming-the-right-way-d7f87bdc7d6a?source=collection_archive---------11-----------------------

语法不应该是第一步!

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

凯利·西克玛在 Unsplash 上的照片

对程序员、开发人员和数据科学家的高需求吸引了许多人加入 IT 领域。但是,最常见的情况是,新员工试图通过快速学习过程来更快地找到工作。

匆忙的学习过程并不总是一件好事;事实上,有时,人们可能会跳过该领域的一些重要方面,试图缩短他们的学习时间,或者因为他们觉得这些方面令人生畏。

“我看到新程序员犯的最大错误是专注于学习语法,而不是学习如何解决问题。”— 诉安东·斯普拉

无论你的目标职业是软件开发人员、web 开发人员还是数据科学家,所有基于 IT 的职业都有一个共同点,那就是编程知识。

在这篇文章中,我将带你经历 5 个步骤——我相信——学习编程的正确方法。在我们开始之前,我想澄清一下,我不会谈论如何用特定的语言编程。相反,我将谈论发展直觉和解决编程问题的思维过程。

作为一名程序员不仅仅是坐在电脑前快速点击一串按键。当一个程序员接到一个编程问题时,坐着完成并编写代码可能是最后一步*。*

先学会逻辑解决问题

第一步是——我知道这很“老套”——用笔和纸逻辑地解决问题。每当我教一个完全的初学者编程时,我首先解释解决编程问题背后的逻辑,并在我们真正进入编码之前用笔和纸解决许多问题。

要发展您的编程直觉,您需要练习:

  1. 学会认真看问题。阅读一个问题,找出你需要做什么的细节,你的输入是什么,你的预期输出应该是什么。
  2. 解决问题不要先想到代码。我把这一步放在第一位,因为如果你已经知道如何编码,你将倾向于直接进入这一步。停下来。先用常用词解决问题。
  3. 在不同的输入示例上测试您的解决方案。一旦你想出了一个解决方案,尝试不同的案例场景,看看你的解决方案是否经得起所有的考验。
  4. 每天练习解题。每天解决新的问题将帮助你发展一种编程直觉,并练习你解决问题的技巧。日常编码问题是一个很好的资源。

这一步非常关键,但许多人似乎完全跳过了这一步。学会正确的思维过程,学会如何解决编程问题,有助于减少你未来解决问题的时间。它还将帮助您更快、更有效地学习多种编程语言。一本很棒的关于解决问题过程的书是 像程序员一样思考。

学习算法和数据结构

许多初学者和一些有经验的程序员避免学习数据结构和算法,因为他们认为这很复杂,在现实生活中没有用。

虽然在没有扎实的算法和数据结构知识的情况下,你可以——可以说——在职业生涯中走得更远,但是很好地掌握这些概念将会巩固你的知识基础,让你成为一名更好的程序员。

算法不是计算机独有的概念。算法是一组步骤,遵循这些步骤可以解决特定的问题。如果你真的想过,我们每天都在开发和使用算法!当我早上醒来时,我总是煮一些咖啡。我得到咖啡豆,研磨它们,用新鲜的水装满我的咖啡机,然后煮我的咖啡。

我只是按照一套特定的步骤来解决一个特定的问题:我的咖啡因上瘾!。当你学习如何逻辑地解决问题并发展直觉时,你基本上是在学习如何开发和应用算法。

另一方面,数据结构是你的输入和输出将如何呈现。回到我的咖啡算法,咖啡的初始状态会影响我如何准备它。例如,如果我有整粒的咖啡豆,在我煮咖啡之前,我需要先烘焙和研磨它们。然而,如果咖啡豆已经磨碎了,我可以直接开始酿造。想想整粒咖啡豆和磨碎的咖啡豆是我的咖啡可能的数据结构。因此,不同形式的数据(或咖啡)需要不同类型的处理。

有很多资源可以用来建立算法和数据结构的基础知识。我最喜欢的两个是冒名顶替手册这个 Coursera 课程。

阅读复杂性理论。

复杂性理论是每个以写代码为生的人都应该非常熟悉的重要方面之一——不管代码做什么。

复杂性理论描述了算法相对于输入大小的表现以及它是如何实现的。通俗地说,就是描述你的算法有多好。尽管计算机能够完成令人印象深刻的任务,但也有其局限性。如果你开发了一个复杂到目前的计算机无法运行的算法,它可能没有好处。

当你在处理现实生活中的应用程序,试图解决许多问题时,你总是需要记住你的答案的复杂性。例如,如果我给你一本书,让你打开第 5 页,你可以简单地浏览第 1~5 页。因为 5 离开始很近,所以通过之前的 p[ages 并没有花太多时间。但是假设我想让你打开 489 页。这可能需要你多花一点时间去做。

这就是复杂性理论所描述的。虽然问题是一样的,但可以提出不同的解决方案,不是所有的方案都有同样的效果。选择最佳解决方案是每个开发人员都需要掌握的技能,其基础是复杂性理论。

《冒名顶替者手册》有一章是关于复杂性理论的,很容易理解。如果你想要更深入的信息,麻省理工学院和斯坦福也提供免费的课件来学习复杂性理论。

从伪代码开始

等等!现在还不是学习特定编程语言的时候,但是你已经快到了。

你解决了很多问题,发展了你的直觉,知道了基本的算法和使用的数据结构。你想开始写代码,构建很酷的项目。

但是,

在你这么做之前,我的建议是先用伪代码实现你的算法和解决问题的技巧。正如我们刚刚讨论的,算法是用来解决特定问题的一组步骤。伪代码被定义为“任何算法步骤的简单语言描述”这意味着伪代码被用来描述算法的步骤,作为一种介于普通英语和编程语言之间的形式。

伪代码通常用于人类阅读,而不是机器阅读。这是一种向他人而不是向计算机解释你的思维过程的方式。

我这么说吧。如果你的算法对其他程序员来说没有意义,它甚至是非常复杂或者不准确的。

[加州理工州立大学](http://California Polytechnic State University)写了一本关于伪代码标准的很好的指南。此外,这篇 DEV 文章解释了如何编写伪代码以及何时使用它。

将您的知识应用于特定的语法

最后,您已经准备好开始编码了。

一旦你建立了解决问题、算法和复杂性理论的坚实基础,你就可以坐下来开始选择一门编程语言开始学习了。根据维基百科,有超过 700 种编程语言。并不是所有的都是众所周知的或今天使用的。

此时,您可能会问自己应该从哪种编程语言开始?

好消息是,所有的编程语言基本上都是一样的。这意味着如果你有良好的编程直觉,你可以把它应用到任何编程语言中。你只需要学习它的语法。

我希望你们把不同的编程语言想象成表达同一件事情的不同方式。例如,如果我想说我家附近有一个漂亮的花园,我大概可以说:

  • 我家附近有一个美丽的花园。
  • 我非常喜欢我家附近的花园。
  • 我喜欢我家附近花园的美丽。
  • 我家附近有一个花园。很漂亮。

所有编程语言都有相同的词汇、变量、循环、数据类型、条件语句、函数、类等。他们只是有稍微不同的书写方式。

所以,无论你从哪种编程语言开始,只要你的基础扎实,你都可以很快学会另一种语法。话虽如此,基于你的目标职业,有些编程语言可能比其他语言更好学。

最后的想法

不管你的目标职业道路如何,如果你想建立一个 IT 职业生涯,你将需要学习并擅长编程。尽管有许多途径可以学习如何编程,但在我看来,正确的途径是:

  1. 培养良好的编程直觉(致力于解决问题的技能)。
  2. 学习算法和数据结构。
  3. 至少学习复杂性理论的基础。
  4. 首先使用伪代码实现您的解决方案。
  5. 学习任何编程语言的语法。

如果你遵循了前 4 个步骤,那么你在第 5 步中选择的语言就没多大关系了。把前 4 个步骤看作是你知识的支柱;支柱越强,你的学习就越高。

R 编程语言:简介

原文:https://towardsdatascience.com/how-to-learn-r-for-data-science-3a7c8326f969?source=collection_archive---------45-----------------------

约翰·霍普斯金 DS 专业化系列

什么是 R,R 与 Python,以及学习 R 的最好方法

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

UnsplashGreg Rakozy 拍摄的照片

[Full series](https://towardsdatascience.com/tagged/ds-toolbox)[**Part 1**](/the-data-scientists-toolbox-part-1-c214adcc859f) - What is Data Science, Big data and the Data Science process[**Part 2**](/how-to-learn-r-for-data-science-3a7c8326f969) - The origin of R, why use R, R vs Python and resources to learn[**Part 3**](/a-crash-course-on-version-control-and-git-github-5d04e7933070) - Version Control, Git & GitHub and best practices for sharing code.[**Part 4**](/the-six-types-of-data-analysis-75517ba7ea61) - The 6 types of Data Analysis[**Part 5**](/designing-experiments-in-data-science-23360d2ddf84) - The ability to design experiments to answer your Ds questions[**Part 6**](/what-is-a-p-value-2cd0b1898e6f) - P-value & P-hacking[**Part 7**](/big-data-its-benefits-challenges-and-future-6fddd69ab927) - Big Data, it's benefits, challenges, and future

本系列基于约翰·霍普斯金大学在 Coursera 上提供的 数据科学专业 。本系列中的文章是基于课程的笔记,以及出于我自己学习目的的额外研究和主题。第一门课, 数据科学家工具箱 ,笔记会分成 7 个部分。关于这个系列的注释还可以在这里找到

介绍

如果您是 R 编程语言的新手,或者您想了解更多,那么这篇文章是为您准备的,受 Coursera 上的 DS 工具箱课程的启发,我将简要说明 R 在数据科学中的使用,包括关于它的重要性以及它与 Python 相比如何的细节。在文章的最后,我还会分享一些学习 r 的资源。希望你喜欢阅读这篇文章!

R 编程语言的起源

许多编程语言的创造都是受手头某个特定问题的启发,一般来说,是为了让编程更直观。对 R 来说,它是为统计学家建立一种更容易理解的语言。当时有一种高度复杂的语言叫做 SAS,是为统计学家设计的,但是语法和功能太难使用了。两位杰出的开发人员看到了这个机会,并创造了 R,这是 SAS 的一个免费、开源的替代品,更容易编写和简化。

R 是什么?

快速浏览一下维基百科就能明白这一点

统计学家和数据挖掘者广泛使用 R 语言来开发统计软件和数据分析

定义是不言自明的,R 是一种面向统计分析的简单语言——就像 Flutter 用于构建移动应用程序,React 用于漂亮的网站——一般来说,R 提供了一种简单的方法来获取数据,并将其转化为有用的统计数据、令人敬畏的图表和用于预测和推断的统计学习模型。

今天,R 已经不是学术环境中统计学家的语言了,它有无数的扩展来服务于不同领域的不同目的。例如,它可以用于工程、营销、金融、保险等等。

为什么用 R?

本课程主要给出了 4 个原因,分别是:

1.流行

r 是统计分析的典型语言,随着其功能的不断增加和更新,以及数据科学的蓬勃发展,它已经成为数据科学家的顶级语言。

2.免费和开源

像大多数语言一样,它是开源的,可以免费使用。像 IBM SPSS 这样的统计软件是要花钱的,所以让所有人都可以使用 R 是件好事。

3.广泛的功能

r 真的很万能。除了统计和绘图,它的广泛功能包括制作网站、分析语言等等。有了正确的包,你几乎可以用 R 做任何你想做的事情。

4.巨大的社区

像 Python 一样,它是开源的,有大量扩展功能的包。这样做的一个好处是,当你在 R 中遇到问题时,你可以去论坛寻求帮助。

R 怎么用?

安装 R

你可以在 CRAN 下载 R,它代表 C 综合RACN网络

RStudio

R 的官方 IDE 是 RStudio ,它让 R 编程变得超级简单有趣。

TidyVerse

鉴于数据科学的繁荣, Tidyverse 应运而生。这是一个供数据科学使用的 R 包集合,它扩展了基础的功能。如果你已经有编程背景,并且正在学习数据科学的 R,那么使用 TidyVerse 是理想的。但是,如果没有编程基础,您应该先学习 base R,然后再学习 TidyVerse。

R vs Python

r 和 Python 是数据科学中的两大巨头,出现在许多热烈的讨论中。我将简单介绍一下要点,并在后面的参考资料中链接更详细的比较。

R 是为统计学家打造的,所以 R 将在统计分析和建模方面占据上风,特别是 TidyVerse 包——用 ggplot2 进行数据操作和绘图,以及用 R notebook 和 RStudio 中的 Markdown 生成报告。然而,它确实有一个陡峭的学习曲线

Python 是一种更通用的语言,是万能的。它在生产和其他方面,如软件开发,建立网站,机器学习和深度学习(PyTorch)方面具有优势。

由于这两种语言各有利弊,大多数人通常会出于不同的目的使用这两种语言,这取决于他们的专业和用例。

那么,应该学哪个呢?

有许多不同的意见,你应该学习。但是我认为最重要的事情是首先掌握编程的基础,因为所有的编程语言都是在编程和计算机科学的基本概念下工作的。

即使在那之后,你决定先学习哪种语言并不那么重要,R 和 Python 都被广泛采用和使用,你将使用哪种语言取决于你的专业和你做的项目。因此,开始学习是个好主意,这样你就不会浪费时间去研究、思考和实际掌握技能来保障你的未来。

缩小范围的一种方法是确定你在数据科学领域的首选角色,通过研究你的理想工作,你应该能够了解你选择的公司首选什么语言。假设你想成为一名数据分析师,你应该专注于拥有尖端软件包的 R。但是如果你更喜欢构建模型和生产代码,你应该关注 Python。

我如何学习 R?

约翰·霍普斯金大学提供的数据科学专业是一个很好的起点,因为它为你提供了你需要了解的关于数据科学基础知识的一切,并让你从零到 R 中的英雄。除了这门课程,你还可以从数据科学的书R开始。

为了更好地理解机器学习和统计,你也可以阅读《统计学习简介》这本书,这本书教你用 R 语言构建各种统计学习模型,但前提是你必须在数据科学专业化方面取得相当大的进展。

除此之外,你还应该经常利用互联网上的大量资源——比如 YouTube 教程、文章等。—并且总是尝试真正巩固和实用化你所学的东西,记笔记(手写笔记以便更好地保留),并在学习会话后用代码复制你所学的内容。

对我来说,在线学习最重要的一课是,你的目标不应该是证书或炫耀你在简历上获得的新技能,而是学习的技能和学习如何学习*,这在这个快节奏的世界中非常重要,因为数据科学的最新工具和技术可能会在未来几年发生变化。***

这篇学习 R 的指南并不是最好的当然,这只是我个人学习 R 的计划,我希望你会发现这也是学习用 R 写代码的技巧的好方法!我希望你学习愉快。

摘要

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

照片由 Jonatan PieUnsplash 上拍摄

总之,对于统计分析和建模来说,R 是一种很棒的语言,至今仍被许多人使用。决定学习并坚持学习可能是你一生中最好的决定之一。我目前正在学习 R,我认为这是一门很好的语言,我迫不及待地想做好模型和漂亮的图形。

学习数据科学有时会非常困难,你会觉得自己不够好(冒名顶替综合症)。保持你的动机和决心的一种方法是记住你为什么首先学习它,对我个人来说——在这个数据科学和人工智能时代确保你的未来,并在这个过程中获得惊人的技能。

你还必须明白,学习它是一个终生的旅程和过程,它不是一个四年制的本科学位就能获得的。一张纸上的分数并不代表你的心态和哲学,也不能证明你的技能和能力(在现实世界中)。这个领域总是在变化,更重要的是要适应并专注于学习如何学习,而不是教科书上的定义和方法。

正如 苏格拉底 所说:

“教育是点燃火焰,而不是填满容器.”

以及 爱因斯坦 :

“智力的发展应该从出生开始,只有在死亡时才停止.”

因此,如果你一直在考虑成为一名数据科学家,学习 R 是一个很好的起点。祝你一切顺利。

感谢您的阅读,我希望这篇文章是有教育意义的,让您对 R 编程语言有所了解。

R 的资源

* [## qinwf/awesome-R

awesome R 包和工具的精选列表。灵感来自令人敬畏的机器学习。下载量排名前 50 的 CRAN

github.com](https://github.com/qinwf/awesome-R/blob/master/README.md) [## 通过 5 个步骤正确学习 R——在 Dataquest 学习数据科学

r 是一种越来越流行的编程语言,尤其是在数据分析和数据科学领域。但是…

www.dataquest.io](https://www.dataquest.io/blog/learn-r-for-data-science/)

r 代表数据科学

[## r 代表数据科学

这本书将教你如何用 R 做数据科学:你将学习如何把你的数据放入 R,把它放入最…

r4ds.had.co.nz](https://r4ds.had.co.nz)

Python vs R

来源:数据营团队

[## Python vs. R for Data Science:有什么区别?

如果你是数据科学的新手,或者你的组织是新手,你需要选择一种语言来分析你的数据和一个…

www.datacamp.com](https://www.datacamp.com/community/blog/when-to-use-python-or-r)

来源:数据驱动科学

[## Python 对 R 的数据科学:赢家是…

关于:数据驱动科学(DDS)为在人工智能(AI)领域建立职业生涯的人提供培训。跟随…

medium.com](https://medium.com/@datadrivenscience/python-vs-r-for-data-science-and-the-winner-is-3ebb1a968197)

如果您对学习数据科学感兴趣,请查看“超学习”数据科学系列!

[## 如何“超级学习”数据科学—第 1 部分

这是一个简短的指南,基于《超学习》一书,应用于数据科学

medium.com](https://medium.com/better-programming/how-to-ultralearn-data-science-part-1-92e143b7257b)

查看这些关于数据科学资源的文章。

[## 2020 年你应该订阅的 25 大数据科学 YouTube 频道

以下是你应该关注的学习编程、机器学习和人工智能、数学和数据的最佳 YouTubers

towardsdatascience.com](/top-20-youtube-channels-for-data-science-in-2020-2ef4fb0d3d5) [## 互联网上 20 大免费数据科学、ML 和 AI MOOCs

以下是关于数据科学、机器学习、深度学习和人工智能的最佳在线课程列表

towardsdatascience.com](/top-20-free-data-science-ml-and-ai-moocs-on-the-internet-4036bd0aac12) [## 了解数据科学的十大热门 GitHub 存储库。

以下是 GitHub 上一些关于数据科学的最佳资源。

towardsdatascience.com](/top-10-popular-github-repositories-to-learn-about-data-science-4acc7b99c44) [## 2020 年将加入的 20 大数据科学不和谐服务器

以下是 Discord 上用于数据科学的最佳服务器列表

towardsdatascience.com](/top-20-data-science-discord-servers-to-join-in-2020-567b45738e9d) [## 2020 年在 Twitter 上关注的顶级数据科学家

这里有一个你应该关注的杰出数据科学家的列表。

towardsdatascience.com](/33-data-scientists-to-follow-on-twitter-77f70c59339f)

联系人

如果你想了解我的最新文章,请通过媒体关注我。

也关注我的其他社交资料!

请关注我的下一篇文章,记得注意安全!*

如何学习数据科学的 R,快!

原文:https://towardsdatascience.com/how-to-learn-r-for-data-science-fast-d47408d0becf?source=collection_archive---------47-----------------------

快速、免费地深入了解 R。

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

布拉登·科拉姆在 Unsplash 拍摄的照片

学习 R 会花很多时间。虽然一夜之间成为专家是不可能的,但是你可以做很多事情来加快学习过程。根据我自己的经验,我整理了一些建议来帮助你提高 R 语言能力。

我应该马上注意到每个人的经历是不同的。有些人用不同的方法学习 R,仍然取得成功。也就是说,我从下面的建议中获得了很多价值,我认识的许多其他人也是如此。

1.先学习编程的基础知识

作为一种由统计学家而不是程序员构建的语言,R 看起来与许多其他语言有点不同。也就是说,它仍然共享大多数编程语言的基本组件。像分配变量、评估条件和调用函数这样的操作都很常见。因此,最好至少了解一些基本知识:

  • 常见的数据类型(字符串、整数、布尔值等)
  • 条件(if/else)语句
  • “For”和“while”循环
  • 功能

当我开始学习 R 时,我发现了解这些东西大大加快了我的进度。很有可能你也会通过使用 R 来学习新的编程概念——我已经学过了。但是至少熟悉一些基础知识会为你以后节省很多时间。

2.从一个好的来源学习正确的框架

除非你作为一个学位级别的学生在 R 学习一门付费课程,否则你会希望用另一个指南来组织你的学习,比如一本书或一门课程。虽然投资这些资源是值得的,但你也可以免费找到好的指南。

这基本上就是我所做的——事实上,我从未为一个独立的 R 资源付费。

就书籍而言,Hadley Wickham 和 Garrett Grolemund 的【R for Data Science】是必不可少的参考。它是免费的,涵盖了 R 的所有关键方面,并且在介绍 tidyverse 的同时也介绍了它。tidyverse 是一个旨在使 R 更易访问和阅读的包的集合,并且正在迅速流行起来。这些包使我的代码变得更好,我强烈建议马上学习它们。

一旦你已经理解了数据科学的大部分 R,那么 【高级 R】也是深入研究 R 编程的一个很好的下一步。

如果你想用一门课程来补充你的阅读,在 YouTube 上可以快速搜索到一些免费的课程。或者,如果你不介意付费的话,大多数主要的课程网站都有 R 语言的教学系列。我再次推荐使用 tidyverse 软件包的视频或课程。坚持一个 R 框架(最简单的一个)可以消除同时学习不同方法带来的困惑。这也将有助于更快的学习。

3.将你的技能应用到有趣的项目中

一旦你有足够的知识来处理一些基本的任务或项目,就开始制作东西吧!

应用你的技能是学习编程语言最重要的部分。没有实践经验,你的新知识不会被理解。所以,享受其中的乐趣吧——选择一些能让你的生活更轻松的有趣的项目,并着手去做。

诀窍是始终如一地处理项目和应用问题**。这让你习惯于项目管理,并鼓励你完成自我驱动的任务。它还会提示你填补知识中的空白,否则你可能不会注意到。我经常带着新技能开始项目。但是通常,新的需求会出现,我最终会学到一些我从未想过要学的东西。**

我最近写了一些在我作为 R 用户的旅程中发现有用的项目。如果你正在寻找灵感,这些应该足以让你前进。

** [## 面向数据科学家的 10 个令人敬畏的编程项目

帮助您改进编码和分析的原创想法

towardsdatascience.com](/10-awesome-programming-projects-for-data-scientists-d2bf64f72ee4)

我再怎么强调基于项目的学习的重要性也不为过。课程证书可能证明你有普通的 R 知识,但是一个项目证明你能做出有意义的东西。

一个好的项目可以激发他人的情感反应和真正的灵感。它们允许设计中的创造性,甚至可以扩展到有利可图的应用或服务中。一直以来,他们都保持着你的兴趣,激励你去学习更多。

世界上没有一个课程证书能与之相比。

4.参与 R 社区

r 用户很幸运被一个紧密团结的社区所包围。无论你的熟练程度如何,充分利用这一事实向你周围的人学习是值得的。有几种方法可以做到这一点。

  • 许多有影响力的研发人员出现在的 Twitter 上,关注他们很有用。我经常在无意中看到来自汤姆·莫克朱莉娅·西尔格和其他许多人的推文,从而获得一些金玉良言。参与#TidyTuesday 也很有用。
  • 中等也是学习的好地方。在我短暂的时间里,我已经从像基思·麦纽提这样的作家那里获得了很多价值。读者有时也会给热门文章留下一些提示和补充,作为评论,所以这些也值得留意。
  • 如果你在一个方便的地方,你也许可以参加当地的 聚会和会议并向有经验的演讲者学习。这仍然在我的遗愿清单上,但我听说它们通常是值得的。
  • 如果你和 R 用户一起工作,和他们聊天!作为一名学术研究人员,我的许多同事使用并教授 r。与他们讨论 r 给了我许多新的见解,并让我有动力学习更多。

当你有社区意识时,以任何你认为合适的方式与更高级的 R 用户互动是值得的。就我而言,与高级研究人员和学术人员的交谈有助于发展我的技能。虽然你不需要全面的指导来快速学习 R,但有时候它真的很有帮助。

最起码,不要完全孤立地学习 R。与其他人互动,分享你的学习经验,观察你的进步速度。

5.保持新鲜有趣

在任何一个学生的旅程中,总有一些地方会让人不堪重负。学习曲线在你面前上升,你很难找到向上爬的动力。如果你和我一样,你可能会被困难的新话题吓倒,或者时不时地失去兴趣。

保持你的练习愉快对减轻这些感觉是至关重要的。当然,有时候问题会让你沮丧,或者你的动力自然会很低。但是,如果你一直磨到停下来,做点什么只是为了好玩。

我经常发现写好的代码是非常令人满意的,即使它只是做一些简单的事情。同样,新项目不一定总是严肃和可扩展的——它们可以是轻松有趣的。你会惊讶于你能从娱乐性编码中学到什么,以及持续的实践如何能带来快节奏的进步。

最后的想法

希望记住以上几点能加速你掌握 R。虽然我给出的是学习 R 的小技巧,但我不会假装自己什么都懂。目前,我正在做一些事情来保持 r 的进步。

  • 从事各种新颖的项目
  • 寻找更有效的方法来完成我已经熟悉的分析和任务
  • 在工作和业余时间使用新的包和方法
  • 阅读高级概念来填补我在概念理解上的空白
  • 通过个人互动和媒体文章分享我的进步

我还有很多东西要学,但是随着新的包和版本的不断发布,每个人都在学习。所以带着好奇心去寻求新的理解,享受学习的过程。

你会得到巨大进步的奖励。**

想阅读我所有关于编程、数据科学等方面的文章吗?在这个链接注册一个媒体会员,就可以完全访问我所有的作品和媒体上的所有其他故事。这也直接帮助了我,因为我从你的会员费中得到一小部分,而不需要你额外付费。

每当我通过订阅这里发帖,你也可以将我所有的新文章直接发送到你的收件箱。感谢阅读!

如何用 Kaggle 免费学习数据科学和机器学习的基础知识

原文:https://towardsdatascience.com/how-to-learn-the-basics-of-data-science-and-machine-learning-for-free-with-kaggle-f122347eece3?source=collection_archive---------72-----------------------

与 Kaggle.com 一起学习数据科学和机器学习的初学者指南

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

图片由 Unsplash 上的 Alexandru Acea 拍摄

Kaggle 是一个由数据科学家和机器学习用户组成的在线社区。该网站侧重于共享和分析数据集;并提供带有现金奖励的数据分析和机器学习竞赛。然而,Kaggle 最被忽视的一个方面是为初学者提供的学习这门学科基础的特殊短期课程。Kaggle 课程是免费的,在教授核心基础知识和不向用户灌输可以及时获取的先进概念和信息之间取得了良好的平衡。在这篇短文中,我想向你展示如何通过 Kaggle 课程免费开始学习数据科学和机器学习。

签约雇用

首先,你需要注册使用该网站。Kaggle 归谷歌所有,因此如果你已经使用了 YouTube 或 Gmail 等谷歌服务,那么你可以使用该帐户注册一个 Kaggle 帐户。如果你没有谷歌服务帐户,你可以使用任何你喜欢的电子邮件帐户注册。

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

作者 Rugare Maruzani 截图

课程

注册并登录 Kaggle 后,导航至网页左侧的课程部分。作为初学者,您会希望从 Python 课程开始。我已经完成了那门课程,所以你不会在下图中看到它。Python 是机器学习和数据科学的首选语言,尤其是对于初学者。我认为你可以在没有编程经验的情况下直接进入这个课程,但是 Kaggle 建议你在开始这个课程之前熟悉一些绝对的基础知识。当每节课结束时,请点击每节课末尾“轮到你”部分的链接,练习刚刚学到的内容,这一点很重要。

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

作者 Rugare Maruzani 截图

完成 Python 课程后,我会推荐参加熊猫课程。Pandas 是关键的 Python 库之一,本课程将教你如何使用 Pandas,并向你介绍 Python 中的库是如何工作的。接下来,我会做数据可视化模块,然后介绍机器学习和中间机器学习

研究别人的笔记本

Kaggle 的一大优点是社区可以通过笔记本分享他们的数据科学和机器学习工作。作为一个完全的初学者,这些笔记本可能会令人生畏,难以理解,然而,你读得越多,你就会理解得越多,你会注意到更多的模式。我建议在你感兴趣的领域寻找笔记本并研究它们。你会发现笔记本电脑分析健康,体育,人口和疾病的数据以及许多其他主题。您还可以将笔记本复制到您自己的配置文件中,允许您修改和破坏代码,这是一种非常棒的学习技巧。

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

通过点击“笔记本”选项卡(蓝色箭头)来搜索笔记本,并且可以通过点击“复制和编辑”按钮(红色箭头)来复制笔记本和修补。作者 Rugare Maruzani 截图

结论

在参加了一些 Kaggle 课程后,我想你会对数据科学是否是你真正感兴趣并想进一步追求的领域有一个很好的想法。如果是这样,你会注意到其他课程来发展你作为数据科学家和机器学习实践者的技能。完成一门课程后别忘了收藏你获得的证书,分享到 LinkedIn 上!

如何利用卫星收集的遥感数据在 Grasshopper 中轻松建立一个站点模型

原文:https://towardsdatascience.com/how-to-leverage-on-the-data-gathered-by-satellites-from-remote-sensing-to-easily-model-a-site-in-afc73a006e43?source=collection_archive---------71-----------------------

建筑学和数据科学

帖子 4:使用 QGIS 和 Grasshopper 插件——Heron 和 Elk

了解场地和地形是任何建筑项目的关键第一步。网站建模可能会变得非常令人生畏,昂贵,或者只是繁琐,经常不得不使用各种软件,只是掌握一个网站的一般意识。我发现最有效的方法是使用 QGIS 和 Rhino Grasshopper 来覆盖我的大部分分析,如等高线映射、风流、太阳辐射、太阳路径和阴影、自然地形等等。我还想在一个软件中参数化地控制这些不同的分析。感谢 Grasshopper 的精彩社区,他们创建了插件来支持它。

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

数字高程模型的层次离散化。数据来源:美国地质勘探局地球探测器,图片阿迪蒂亚·维诺德-布钦格

**第二步是收集地形数据。**卫星使数据收集变得非常简单,因为数据是免费提供的。建筑项目不仅仅是在其场地边界内定义的。语境很重要。也许它坐落在山谷或山上,靠近一条容易被洪水淹没的河流,或者在一个邻近的建筑阻挡阳光的城市里。就地形而言,您通常需要更大的区域来执行适当的分析并了解周围的环境。

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

遥感过程。阿迪亚·维诺德-布钦格。来自 Flaticon 的图标归于 Icongeek26Freepik桉树Xnimrodx苏朗

对于这个更大的区域,我会使用卫星收集的数据。遥感越来越准确地接近真实情况。因此,来自卫星扫描的数据可以成为地球上几乎任何地方的非常可靠的数据源。

工作

使用公开可用的数据集对网站建模

目标

我的目标是在 20 米和 25 米的网格上以点的形式获得标高。我想利用这一点在总体规划中战略性地定位建筑,这样每个部门/建筑之间至少相距 20 米或 25 米。我还想控制建筑物的高度,同时保持每个建筑物的视野。因此,在稍后的阶段,我将使用进化求解器设置多目标优化,将建筑的高度、标高和视图作为约束条件。

计划

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

Aditya Vinod-Buchinger 场地建模路线图

1.收集高程数据作为 DEM(数字高程模型)

使用 Elk、OpenStreetMap 和 QGIS

步骤 1:下载从遥感(卫星扫描)获得的信息,这些信息可以从美国地质调查局免费获得,作为该地区的陆地卫星图像。卫星扫描正变得越来越准确,取决于网站的位置,并可能持有有价值的信息。它们可以很好地显示周围的地形,并可以在稍后阶段与通过勘测获得的更准确的数据相关联。

USGS 地球资源管理器 >选择地区>下载 DEM

或者,您可能会拥有一个 DEM(。tiff)测量员的测量图。

第二步:使用 Elk 插件、& OpenStreetMap 数据,在 Grasshopper 中采集道路网络、建筑层、水体等 GIS 图层。

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

创建道路网的定义 Aditya Vinod-Buchinger

我还在 grasshopper 中找到了使用 Heron 插件的替代方法。Heron 是一个很棒的插件,它可以直接将 GIS 数据导入 Grasshopper,而无需通过方法 1。网上有很多这方面的教程。这些定义也可在示例中的Heron @ food 4 Rino上找到。

我选择了麋鹿。

2.从 DEM 中处理和提取高程值

数字高程有多种与 GIS 兼容的格式,例如。为了提取高程,我在中下载了 DEM 栅格。tiff 格式。使用开源地理信息软件 QGIS GRASS 3.2(特别是 GRASS 的最新版本只能执行重采样步骤),对图像进行处理、重采样并转换为保存 Z 值的点。

带 GRASS 的 QGIS >处理工具箱>重采样为 25 米格网>计算 Z 值>将图层另存为点

下一步是将它导入 Grasshopper。

3.蚱蜢的分析

此阶段的输入是从 QGIS 获得的具有 x、y 和 z 值的点云。输出将是基于高程的参数控制的离散组。

作为一个规则,总是参数化你不一定确定的项目,或者希望保持一定的灵活性。

例如,面积为 10 平方米但长度和宽度不确定的房间的大小。然后,您将使长度和宽度成为滑块控制的区域的函数。

我希望能够根据高程控制点的分组,以便参数化地离散高程。参数化级别可以控制选择点的标准。

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

作为点和曲线添加到参数的输入 Aditya Vinod-Buchinger

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

如何利用卫星收集的遥感数据,在 Grasshopper 中轻松地建立一个站点模型

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

设置 z 值范围的开始和结束参数 Aditya Vinod-Buchinger

4.输出

有了这个我有了;

  1. 将级别组织为可控参数特征。
  2. 参数化的分组级别,以 5 米为增量
  3. 根据我的项目纲要的要求,确定了整个场地的低海拔和高海拔区域,以规划放牧和农田
  4. 设置运行进化求解器的阶段,以便在稍后阶段生成选项

下一步

包 2:集中和分区

你好,谢谢你看我的帖子!随时拍摄任何问题,你可能有评论。此外,如果您需要任何帮助,请通过 LinkedIn 与我联系。

我是一名来自伦敦的建筑师(COA)和技术爱好者。我对构建环境感兴趣,并广泛围绕设计、性能和见解利用数据科学进行架构。我不时从事各种主题的工作,如生成设计、空间分析、能源和环境研究。我是一家生物技术创新公司的项目经理(AEC ),在北非开发一个大规模的可持续项目。

如何在数据科学项目中利用 Visual Studio 代码

原文:https://towardsdatascience.com/how-to-leverage-visual-studio-code-for-your-data-science-projects-7078b70a72f0?source=collection_archive---------19-----------------------

直到发现一种新的有效方法,我们才意识到我们是多么低效

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

维基百科检索的图片

动机

在从事数据科学项目时,您可能需要在 Github 或 Terminal 等不同工具之间来回切换。额外的几秒钟可以积累成大量的时间浪费。想象一下把所有东西都放在一个地方是多么的快捷和方便。如果你掌握了键盘快捷键,你的工作流程会更快。

切换到 Visual Studio 代码使我能够通过减少耗时的活动来加快工作流程。Visual Studio Code是微软为 Windows、Linux、macOS 制作的免费源代码编辑器。我喜欢 VS 代码的两大优点是键盘快捷键和有用的扩展,比如嵌入式 git。

VS 代码可以为您现有的工作流添加很多东西。在这篇文章中,我将回顾几个我最喜欢的帮助我平衡工作流程的方法。

快捷键

当我们有鼠标时,为什么要使用键盘快捷键?因为知道如何使用键盘快捷键可以节省你大量的时间。

但是你可能对学习键盘快捷键犹豫不决,因为它需要你去记忆。这是对我有效的策略:在便笺条上写下几个键盘快捷键。然后把它们贴在你周围的工作区。每次不记得键盘快捷键的时候就看看便利贴。渐渐地,键盘快捷键会像便利贴粘在你的桌子上一样粘在你的脑海里。

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

Kelly SikkemaUnsplash 上拍摄的照片

知道了这一招,你应该不会害怕学习任何有用的键盘快捷键。让我们探索一些可以添加到工具箱中的快捷方式。

一次改变所有相似的单词

你是否曾经想改变一个变量名,但是发现修改每个变量名很费时间?要一次修复所有相似的单词,只需点击单词并使用Ctrl+Shift+l。****

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

将光标移动到行尾和行首

假设您忘记在几行的开头或结尾添加一个单词或字符。您可以手动进入每一行来修复您的错误,但是这很耗时。这是你需要键盘快捷键的时候。你需要做的就是选择你想要改变的行,然后使用 Alt + Shift + I 转到行尾。使用向左箭头转到该行的开头。

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

或者按住 Alt 的同时上下移动鼠标线条也应该可以。

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

代码折叠

您的代码变得非常大,您希望通过隐藏您没有处理的代码来保持专注?这很容易做到,移动到该行,然后使用 Ctrl + Shift + [ 。要展开,使用 Ctrl + Shift + ]

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

开放终端

如果我们想打开一个终端来快速运行你的代码呢?没问题。Ctrl + ` 应该能行。

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

分画面银幕

希望能够同时查看两个文件进行比较?这时候我们就可以使用 Ctrl + \。

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

前往该功能

假设你想知道一个函数的定义或者回顾这个函数。您可以通过按住 Alt 键并单击该函数来快速找到该函数,而不是搜索几个文件夹和许多行代码来找到一个函数。

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

版本控制

我真正喜欢 VS 代码的另一个优点是嵌入式 Git** 。Git 是控制项目版本的有效工具。如果能在文本编辑器中嵌入 Git 就更好了。如果我们碰巧在我的代码中犯了任何错误,我们可能希望与上一个版本进行比较并轻松地修复。**

要启用 git 版本控制,请添加扩展 GitLens。你可以在左边找到扩展栏,然后搜索 GitLens。然后单击安装。

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

用以前的版本检查行更改

只需点击右键,然后选择用先前版本打开行变更。我们应该能够检查更改!

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

查看上次提交的更改

如果您想将当前提交的某些文件与上一次提交的文件进行比较,该怎么办?你所需要做的就是打开你想要比较的文件。单击左侧导航栏中的 GitLens 图标,然后选择要比较的提交。

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

会出现一个分屏,颜色显示两个文件之间的不同,就像这样。

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

查看日期和作者

假设你正在和其他人合作一个项目,你想知道谁在什么时候做了什么改变。单击您关心的代码行,就可以很容易地看到这一点

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

如您所见,当我点击每一行时,都会显示作者、日期以及提交消息。

结论

我希望这篇文章很好地概述了 VSCode 如何在处理数据科学项目时帮助加速您的工作流。刚开始习惯一个新工具可能会感觉不舒服,但是找到改进我重复活动的方法可以在将来增加你的时间。

每花一分钟,就赚了一小时——本杰明·富兰克林

我喜欢写一些基本的数据科学概念,并尝试不同的算法和数据科学工具。你可以在 LinkedIn 和 T2 Twitter 上与我联系。

这个回购如果你想检查我写的所有文章的代码。在 Medium 上关注我,了解我的最新数据科学文章,例如:

** [## 如何用 Github 组织你的数据科学文章

被新信息淹没?现在,您可以轻松地跟踪文章并为其创建自定义注释

towardsdatascience.com](/how-to-organize-your-data-science-articles-with-github-b5b9427dad37) [## 如何创建可重用的命令行

你能把你的多个有用的命令行打包成一个文件以便快速执行吗?

towardsdatascience.com](/how-to-create-reusable-command-line-f9a2bb356bc9) [## 使用这两个工具在您的机器学习项目中实现可重复性

你能打包你的机器学习模型,并根据你的需要挑选一个最好的吗?

towardsdatascience.com](/achieve-reproducibility-in-machine-learning-with-these-two-tools-7bb20609cbb8) [## 如何有效地微调你的机器学习模型

发现为您的 ML 模型寻找最佳参数非常耗时?用这三招

towardsdatascience.com](/how-to-fine-tune-your-machine-learning-models-with-ease-8ca62d1217b1) [## 如何通过将自己置于合适的环境中来加速您的数据科学职业生涯

我感到增长数据科学技能停滞不前,直到我有了一个飞跃

towardsdatascience.com](/how-to-accelerate-your-data-science-career-by-putting-yourself-in-the-right-environment-8316f42a476c) [## cy thon——Python 函数的加速工具

当调整你的算法得到小的改进时,你可能想用 Cython 获得额外的速度,一个…

towardsdatascience.com](/cython-a-speed-up-tool-for-your-python-function-9bab64364bfd)**

如何限制人为的愚蠢

原文:https://towardsdatascience.com/how-to-limit-artificial-stupidity-a4635a7967bc?source=collection_archive---------38-----------------------

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

Carlos Alfonso 在 Unsplash 上拍摄的照片

人类学习图书馆概述

什么是人为的愚蠢?

人工愚蠢是一个新术语,被用作人工智能的反义词。然而,它有两个相反的含义:

  1. 机器学习算法在从数据中学习时会犯愚蠢的错误。
  2. 人工智能被变得愚蠢,会犯错,看起来更像人类。

写第二种意义可能很吸引人,也很值得鼓掌,但我想向你介绍人工愚蠢的第一种意义,以及文森特·d·瓦姆的迷人的人类学习图书馆。

人为愚蠢的一个有趣例子:

这几年有很多人工傻第一个意思的例子。其中最有趣的一个是由 Ciaran Maguire 发现并在 Twitter 上介绍的。一家保险公司的算法根据人们出生的日期计算不同的费用。正如你在下面的推文中看到的,当出生日期改变了一天,价格变化很大。算法是怎么得出这个计算结果的?测试算法准确性的程序员呢?他们怎么会错过这样一个离奇的结果?

我的假设是,数据集中有严重的异常值,这极大地影响了模型的权重。尽管如此,这个错误可能还有其他原因。

人工智能中的人情味

当我在制作机器学习模型时,我总是想知道有效的数据清洗、预处理、探索性数据分析和特征工程如何将最简单的模型转化为强大的预测器。选择合适的模型是至关重要的,但为模型提供正确的数据是必不可少的。因此,即使建立了最好的卷积神经网络,“垃圾进,垃圾出”的原则仍然有效。

如果人类的触摸可以使一个相当简单的模型高度精确,为什么人类不在训练过程中做出贡献?为什么人类智能不在建模中助推人工智能?人可以在培训前和培训中帮助计算机吗?如果我们可以在建模的时候画出特征、分类器、离群值呢?

人类学习图书馆

2020 年 10 月 8 日,Vincent D. Warmerdam 编写并介绍了人类学习库,这使得创建基于规则的系统更加容易。该库有两个数据集:泰坦尼克号(是的,再来一次!)和企鹅。

通过绘画学习和组合:

主要思想是更熟悉数据(扩展 EDA),通过手工绘制为模型做贡献。

可以将多个绘图及其权重放在一起,以制作一个人工和计算机聚合(组合)的模型。当人类为模型的学习做出贡献时,她/他可以对模型有更多的了解,并防止机器犯愚蠢的错误。

制作基线模型:

至少你可以用这个系统做一个基线模型,来检验你的“比最深更深”的神经网络是否比这个最简单的模型表现得更好。

创建更多可解释的模型:

两个两个地使用特征图的权重可以增加模型的可解释性。您可以显示工程图中特征之间的关系。

无预测区域:

这是我最喜欢的想法!

我们不必对每个点都做预测。如果聚类不够清晰,我们应该能够说:“在这个区域没有预测。”这样就可以约束人为的愚蠢。

结论:

我发现这个库很有趣,想在这篇文章里分享一下。你可以像我一样使用 GitHub 回购。

最后一句:

虽然计算机在学习重复性任务方面似乎更聪明,但人类的创造力和解决问题的能力使它们更胜一筹。

进一步阅读

  1. 我的媒介文章关于可解释的人工智能(XAI)
  2. 一篇关于三种人为愚蠢的文章。这篇文章中有一种巧妙的人为愚蠢,值得一读。
  3. 一篇关于人类和计算机的智能和愚蠢的惊人的福布斯文章。
  4. 亚马逊、微软和苹果最著名的人工智能失败
  5. 维基百科链接基于规则的系统与基于算法的系统

感谢阅读。

如果你想取得联系,你可以给我发电子邮件到 eymatas@gmail.com 的 s ,或者你可以在 https://www.linkedin.com/in/seyma-tas/的找到我

如何找到用于安全研究的黑暗网络黑客论坛

原文:https://towardsdatascience.com/how-to-locate-dark-web-hacker-forums-for-security-research-e87b53f18508?source=collection_archive---------3-----------------------

黑暗网络安全研究的滚雪球抽样

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

资料来源:Pexels

警告:访问黑暗网络可能是危险的!请自担风险继续,并采取必要的安全预防措施,如禁用脚本和使用 VPN 服务。

介绍

对大多数用户来说,谷歌是探索互联网的门户。但是,deep web 包含不能被 Google 索引的页面。在这个空间中,隐藏着黑暗网络——匿名网站,通常被称为隐藏服务,从事从毒品到黑客到人口贩运的犯罪活动。

在黑暗网络上进行安全研究可能很困难。黑暗网络上的网站 URL 不遵循惯例,通常是由字母和数字组成的随机字符串,后跟。洋葱子域。这些网站需要 TOR 浏览器解析,无法通过 Chrome 或 Safari 等传统浏览器访问。

此外,传统的搜索引擎如谷歌并不存在于暗网上。取而代之的是,网站 URL 要么被人对人(在线或面对面)交换,要么被收集到一个简单的 Html 目录中。这使得在黑暗网络上很难找到黑客论坛——特别是严肃的个人聚集的论坛。

一些论坛可以在上面列出的黑暗网络目录中找到。这些都可以在暗网甚至表面网上找到(我们都知道的网,这篇文章也是在上面托管的)。但是,因为这些论坛很容易找到,所以它们经常吸引社区中的业余爱好者。为了定位更多安全研究的相关论坛,可以使用滚雪球抽样法对暗网进行爬取。

滚雪球抽样

滚雪球抽样是一种方法,可用于定位暗网上的隐藏服务,用于安全研究,包括数据收集和 CTI 流。雪球抽样是一个网络爬虫架构,它获取一个根 URL 并抓取该网站到其他网站的输出链接。然后,对于每个收集的链接,在设定的深度内继续该过程。这个爬虫将返回一个它收集到的黑暗网站的 URL 的大列表。

这种方法非常类似于早期搜索引擎网络爬虫的工作方式。谷歌的创始人谢尔盖·布林和劳伦斯·佩奇在 1998 年的论文“大规模超文本网络搜索引擎的剖析”中可以找到一个重要的例子。

当应用于黑暗网络的论坛时,滚雪球抽样效果很好。用户通常会在论坛帖子和评论中链接到其他论坛,这是前面提到的人与人之间交换 URL 的一个例子。通过从一个在目录上找到的黑客论坛(或者你已经知道的一个)开始,可以快速找到更严肃的和安全相关的论坛。

环境设置

为了开发黑暗网络爬虫,你需要设置你的环境。阅读我写的关于如何刮掉黑暗之网的文章可能会有助于更好地理解这个过程。这也将有助于从你所发现的黑暗网络论坛中搜集数据。本文假设您使用的是 OSX 操作系统。但是,如果你使用的是 Linex 或者 Windows,很多方面应该还是适用的。

TOR 浏览器

TOR 浏览器是一种使用 TOR 网络的浏览器,允许我们使用. onion 子域解析网站。TOR 浏览器可以在这里下载

虚拟专用网络

在爬行黑暗网络时运行 VPN 可以为您提供额外的安全性。虚拟专用网络(VPN)不是必需的,但强烈建议使用。

计算机编程语言

对于本文,我假设您已经在自己的机器上安装了 python,并使用了自己选择的 IDE。如果没有,网上可以找到很多教程。

熊猫

Pandas 是一个数据操作 Python 包。Pandas 将用于存储和导出刮到 csv 文件的数据。通过在终端中键入以下命令,可以使用 pip 安装 Pandas:

pip install pandas

Selenium 是一个浏览器自动化 Python 包。Selenium 将用于抓取网站和提取数据。Selenium 可以通过在终端中键入以下命令来使用 pip 进行安装:

pip install selenium

壁虎

为了让 selenium 自动化浏览器,它需要一个驱动程序。因为 TOR 浏览器在 Firefox 上运行,我们将使用 Mozilla 的 Geckodriver。你可以在这里下载驱动。下载后,解压驱动程序,并将其移动到您的~/中。本地/bin 文件夹。

Firefox 二进制文件

TOR 浏览器的 Firefox 二进制文件的位置也是需要的。要找到它,右键单击应用程序文件夹中的 TOR 浏览器,然后单击显示内容。然后导航到 Firefox 二进制文件并复制完整路径。将此路径保存在某个地方以备后用。

履行

这个实现将让你开始创建一个深度为 1 的雪球抽样黑暗网络爬虫。因为论坛的网站结构互不相同,所以很难在深度 1 之外实现爬虫的自动化。

首先,从 selenium 导入 web 驱动程序和 FirefoxBinary。也进口熊猫作为 pd 和 re。

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
import pandas as pd
import re

创建一个变量“binary ”,并将其设置为您之前保存的 Firefox 二进制文件的路径。

binary = FirefoxBinary(*path to your firefox binary*)

设置 web 驱动程序使用 Firefox 并传递二进制变量。

driver = webdriver.Firefox(firefox_binary = binary)

创建一个变量“starting_node”并将其设置为起始论坛的 URL。

starting_node = *your url*

创建空列表“found_nodes”。

found_nodes = []

您现在需要自动抓取论坛帖子、评论或两者的文本。这一过程因论坛而异。我推荐阅读我的文章“如何清理黑暗网络”来获得一些指导,Selenium 文档可以在这里找到。

编译一个正则表达式,用于识别字符串中的洋葱链接。

p = re.compile('\S+onion')

对于每个字符串(帖子文本或评论文本),搜索 onion URLs 并将它们添加到列表“found_nodes”中。

for post in posts:
  nodes = p.findall(post)
  found_nodes.append(nodes)

列表“found_nodes”将包含从起始节点找到的洋葱链接。然后,可以对每个找到的链接重复该算法,或者在深度 1 处停止。

讨论

滚雪球抽样是发现黑暗网络黑客论坛和其他隐藏服务的好方法。此外,通过这种方法找到的服务通常比在目录中找到的服务更有助于安全研究,因为黑客社区的重要成员通常不会聚集在广告宣传良好的站点上。

然而,在这个实现中有一些需要改进的地方。按照这种滚雪球抽样的实现,需要手动访问每个找到的节点并检查其内容。这不仅是一个耗时的过程,而且访问未知的洋葱链接也很危险。通过帖子上下文自动确定网站内容将极大地改善这个爬虫。

我想重申,刮暗网可能是危险的。确保你采取了必要的安全措施。请继续研究黑暗网络上的安全浏览。我对发生的任何伤害不负任何责任。

如何看起来像一个 10 倍的开发者

原文:https://towardsdatascience.com/how-to-look-like-a-10x-developer-f3d2211cb998?source=collection_archive---------25-----------------------

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

图多尔·巴休在 Unsplash 上的照片

装饰你的 Mac 终端,在你周围的开发者海洋中显得很酷

我喜欢使用 shell 命令。它们速度很快,并且提供了大量的灵活性来做特别的事情。但是我最喜欢它们的一点——哦,它们看起来太酷了。

或者说我是这样认为的,直到有一天我周围的每个人都在使用 shell 命令。我讨厌这样的发展。凉爽消失了,用黑屏工作变得一天比一天无聊。我必须满足自己与生俱来的出类拔萃的需求。在发布下一个代码时,我需要这个灵感来源。

这不是我工作的咖啡馆?唉,我周围的人开始知道我在做的都是些非常普通的东西。

**所以,我再次问自己——我如何在工作时看起来很酷?**这个问题困扰着每一个开发者,自从开发者的存在以来。就像我是开发人员一样,我想到了同样的老答案— 定制。

我向自己承诺,我将拥有最好的终端,我将根据它定制 s * * t。然后人们会知道我有多酷,我会成为所有值得谈论的话题的焦点。但是,唉——有一样东西是定制的,它不是终端自带的,而我就像周围的每个开发者一样懒惰。我需要一些快速从下面最时髦的终端移动。

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

但是,就像所有与 shell 相关的事情一样——有些事情很难做不是一个 bug,而是一个特性。几十年来,正是 shell 的这一特性让我们开发人员看起来很酷,所以我需要尊重这一点。这使得开发人员更容易达到最高目标——看起来很酷。在开发者看来,没有任何额外的东西意味着你可以用你自己的方式定制你需要的东西。

所以,在这篇文章的最后,这是一个关于我如何让我的终端看起来很棒的演练,我会让终端看起来像下面这样,它显示了 git 的状态,并且有一个非常棒的主题。

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

怎么会?

我想这篇帖子不会像我的每一篇帖子一样广为流传,所以我想我可以告诉你看起来很酷而对我自己的酷没有任何伤害的伟大秘密*。露齿一笑,低声耳语。*这其实很简单。我只是运行了一些命令。

但是,让我们先退一步,然后再去理解发生了什么。您的 Mac 附带有自己版本的终端应用程序。我不会用那个。虽然这个应用很棒,但我已经习惯了使用 iTerm2,因为它提供了所有的定制选项和主题。

要安装这个主题并拥有 iTerm2 终端,首先需要在 MAC 上安装 iTerm2。您可以在 iTerm2 下载页面上的处完成此操作。一旦您安装了 iTerm2,我们将通过一系列步骤让 terminal 再次变得强大。

您需要在我们新的 iTerm2 终端中完成所有这些步骤。我首先创建一个目录来完成我们所有的工作,并在命令行上安装oh-my-zsh。什么是oh-my-zsh?你可以认为zsh shell 类似于bash shell,oh-my-zsh是一个维护你的.zshrc文件的框架,它非常类似于.bashrc文件。

mkdir iterm_theming
cd iterm_theming
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

这将为您安装 oh-my-zsh 及其默认主题,重启后您的终端应该如下所示:

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

这似乎是一个进步,但并没有太大的进步。现在换个主题吧。谈到主题,我们有多种选择。你可以在 oh-my-zsh 的主题页面获得一个完整的选项列表。

我将使用 powerlevel10k 主题,因为它本身提供了许多配置选项,但是你基本上可以使用任何主题。首先,我们需要运行:

git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

然后用任意编辑器编辑~/.zshrc文件中的ZSH_THEME=”powerlevel10k/powerlevel10k"。我用了纳米。

一旦您重新启动 iTerm2 会话,您将会看到:

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

作者图片:Powershell 配置屏幕 1

一旦你按下y,你会看到下面的窗口,要求你重启 iTerm2

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

作者图片:Powershell 配置屏幕 2

一旦你再次重启 iTerm2,你将会看到一个向导,在这里你可以选择你的偏好来配置你的提示符的颜色和样式。

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

来源:Github 上的 Powerlevel10k 回购

我多次经历这个步骤,以得到我想要的正确风格。如果您不喜欢您设置的样式,您可以使用p10k configure命令重新启动小部件。

最后一眼

这是我最终得到的造型。这是我在博客上工作时的工作流程。

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

作者图像:使用终端

正如你所注意到的,它通过使用颜色和符号以一种相当直观的方式向我们展示了提示符本身的大量信息。

*例如,*提示中的黄色表明 git repo 与主数据库不同步。数字!5显示了已更改但尚未提交的文件数量。数字?3显示了我们应该使用git add命令添加的未跟踪文件的数量。而这一切都不需要使用git status命令。只要看到绿色提示符中的⇡1,就可以看到我们的分支比主分支领先 1 个提交。在右侧,我们可以看到花费了一些时间的命令的执行时间。你可以在主题页面上找到所有符号的描述。

我还在提示中保留了完整的路径,以便在需要时可以获取。尽管有一个小问题。你可以看到路径被缩短到下面的~/w/mlwhiz而不是~/web/mlwhiz。这不再是一个 bug,而是一个节省空间的特性。诀窍是在提示符下复制粘贴并按 tab 键。你将再次获得完整的路径。

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

作者图像:使用 2 号航站楼

添加更多功能

这还不是全部。除了得到一个漂亮且功能强大的终端,你还可以通过 oh-my-zsh 得到许多插件。上面我们刚刚使用了git插件。但是你可以从一长串插件列表中为自己选择一个,你只需要通过将插件名称添加到.zshrc文件中的plugins列表来安装它。

例如,您可以通过将plugins=(git)改为plugins=(git vscode tmux)并重启终端,在您的终端中添加插件 vscode (提供大量 vscode 别名)和 tmux (提供大量 tmux 别名)。

你还在等什么?让您的终端再次变得伟大。

继续学习

如果您想更好地使用 shell,也请阅读我以前的一些关于使用 shell 命令的文章。

[## 用你新获得的壳技能打动旁观者

数据科学家的 10 分钟外壳/终端技能

towardsdatascience.com](/impress-onlookers-with-your-newly-acquired-shell-skills-a02effb420c2)

如果你想了解更多关于命令行的知识,我想你会的,Coursera 上有UNIX work bench课程,你可以试试。

谢谢你的阅读。将来我也会写更多初学者友好的帖子。关注我在或者订阅我的 博客 了解他们****

此外,一个小小的免责声明——这篇文章中可能会有一些相关资源的附属链接,因为分享知识从来都不是一个坏主意。

如何在 Python 中遍历自己的对象

原文:https://towardsdatascience.com/how-to-loop-through-your-own-objects-in-python-1609c81e11ff?source=collection_archive---------3-----------------------

Iterables,迭代和迭代您的自定义 Python 对象

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

图片由Tine ivani通过 Unsplash 提供

目标

本教程旨在帮助你理解什么是迭代和迭代器,以及它们之间的关系。其次,理解 Python for 循环是如何工作的,最终将有助于设计一个可以迭代的用户定义的自定义对象。

可重复的

iterable 是一个能够逐个返回其成员的对象。简单地说,iterable 是可以使用 Python 中的 for 循环进行循环的任何东西。序列是一种非常常见的可迭代类型。内置序列类型的示例包括列表、字符串和元组。

迭代器

迭代器是表示数据流的对象。您可以通过实现 iterable 的 iter 内置函数来创建迭代器对象。

迭代器可用于手动循环遍历 iterable 中的项目。迭代器反复传递给内置的 next 函数,返回流中的连续项。当 iterator 中的条目被使用时,它就消失了,最终,当没有更多的数据可供检索时,就会引发一个 StopIteration 异常

了解 Python for 循环

发展关于可迭代和迭代器的知识的核心是理解 Python for 循环是如何工作的。为了更好地说明这一点,让我们定义一个可以接受任何 iterable 的函数,并在不使用 for 循环的情况下遍历*。*

我们的功能需要能够实现以下目标:

从 iterable 创建迭代器

从迭代器中重复检索下一项

执行任何预期的操作

当没有更多要检索的项时,引发 StopIteration 异常。

在 Python for 循环中,iterable 被转换成迭代器。

我们的自定义函数首先将任何 iterable 转换为迭代器。在 while 循环中,我们从迭代器中获取下一项,并对该项执行任何操作。在这种情况下,我选择编写一个函数来将迭代器中的数字提升 2 的幂,但是可以采取任何操作,例如,我们甚至可以选择简单地打印出容器或集合中的数字。

Python 中所有形式的迭代都是以这种方式工作的。

关键定义

为了更好地区分 iterable 和 iterator,进一步细化它们的定义并注意它们的区别会很有帮助。迭代器不能被索引/切片(因为它们可以无限长)。此外,与可重复项不同,它们没有长度。在下面的例子中,试图获取迭代器对象的长度,my_iter_list 引发了一个类型错误异常

iterable 是可以循环的东西。

>迭代器是代表数据流的对象。它对一个 iterable 进行迭代。

在为本文进行研究时,迭代器的一个简洁明了的定义来自于 StackOverflow ,如下所示:

iterator是一个更一般的概念:任何对象的类都有一个next方法(Python 3 中的__next__)和一个__iter__方法(T4)

迭代器允许用户使用和创建惰性迭代器。懒惰的迭代程序不做任何工作,直到我们向它们请求下一个项目。这个特性可以帮助我们处理内存中容纳不下的无限长的可重复项。这被称为惰性评估,可以帮助节省内存和 CPU 时间。

迭代器协议

如上所述,迭代器对象需要支持以下两种方法,这两种方法组合在一起构成了 Python 迭代器协议:

邓德/魔术 iter 法:

  • 迭代器。iter()
    返回迭代器对象本身。这是允许容器(也称为集合)和迭代器与forin语句一起使用所必需的。

邓德/魔种下法:

  • 迭代器。next()
    从容器中返回下一个项目。如果没有更多的项,则引发 StopIteration 异常。

创建自己的可迭代类型

我们可能想要创建一个自定义迭代器。为此,我们需要一个定义了 initnextiter 方法的类。

自定义团队

首先,让我们定义一个名为 CustomIterTeams 的自定义类。这个类没有内置的 iterable 行为,但是我们可以在类中实现代码,使我们的自定义用户定义对象的行为像 iterable 一样。

有两种方法可以让自定义的用户定义对象表现得像 iterable。第一种方法涉及定义两个 dunder 或 magic 方法,即 iter()和 next()。dunder iter 方法只需要返回对象本身。这是因为,当我们编写 for 循环时,这将是我们打算迭代的对象。这个 iter 方法返回一个迭代器

在幕后,Python 的 for 循环使用迭代器。

我们的自定义对象现在是一个迭代器,可以使用 dunder next 方法返回流中的连续项。这两种方法共同支持迭代器协议。

在 _ _ init _ _ 构造函数中,我们将对象中的索引设置为值-1。当调用下一个方法时,例如在 for 循环的第一次迭代中,索引的值增加 1。然后,我们检查索引值是否大于用户在第一次创建对象时决定添加的球队列表的长度。如果索引小于团队的长度,我们只需从团队列表中返回具有范围内索引的团队。

一旦索引等于或大于团队列表的长度,我们再次将索引重置回-1(正如它最初在 init 构造函数中设置的那样),并引发一个 StopIteration 异常

用户现在能够迭代创建的团队。CustomIterTeams 对象 prem_teams 现在是一个迭代器,我们可以遍历它。

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

一旦索引达到列表的长度,在引发 StopIteration 异常之前,会特意将索引重置为其原始值。实现此功能是为了让用户在同一个会话中执行对象的多次迭代,如下面的 python 提示所示。

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

我们现在还可以通过简单地实现 dunder reserved 方法来颠倒团队的顺序。

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

定义自定义可迭代类型的简单方法

没有必要为了使用户定义的对象可迭代而定义一个 dunder next 方法。相反,我们只需要让 dunder iter 方法返回一个生成器,这个生成器在我们的团队中循环。每个生成器都是一个迭代器。生成器有一个内置的 next 方法,因此不需要在自定义 python 类中实现 next 方法。

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

这段代码片段的 github 要点可以在这里找到,如下所示:

总结:

通过包含 iter 和 next 方法,或者简单地在 iter 方法中返回一个生成器,可以在自定义的类中实现迭代。这取决于程序员,但是 iter 和 next 方法的实现稍微长一点,可以添加更精细定义的行为。

如何用 Python 制作冠状病毒世界地图

原文:https://towardsdatascience.com/how-to-make-a-coronavirus-world-map-in-python-734c9fd87195?source=collection_archive---------36-----------------------

由 Pyecharts 库支持

新冠肺炎正在全世界传播。可视化数据的最佳方式之一是将数据映射到世界地图。幸运的是,很容易制作一个像下面这样的交互式地图。

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

这是一个动态图表,每当鼠标悬停在地图上时,数字就会显示出来。要创建这个图表,您只需要几行 Python 代码。

在编写这几行代码之前,您需要安装名为 Pyechart 的可视化包。这是一个 Python echarts 绘图库。它提供了 30 多种图表。最新版本是 1.7.1,发布于 2020 年 3 月 12 日。你可以 pip 安装它。

pip install pyecharts==1.7.1

软件包安装完成后,我们就可以开始构建地图了。

第一步:导入库

#import libraries
from pyecharts.charts import Map,Geo
from pyecharts import options as opts
from pyecharts.globals import ThemeType

第二步:导入数据

新冠肺炎的数据可以从我们的数据世界网站下载。

该网站提供 CSV、CLSX 和 JSON 格式的完整新冠肺炎数据集。

#import data
dataset=pd.read_csv(‘owid-covid-data.csv’)

我只会得到 2020 年 7 月 3 日的数据,然后将数据映射到世界地图上。

#change date from object data type to datetime data type
dataset[‘date’]=pd.to_datetime(dataset[‘date’])
df = dataset.sort_values(by=['date'], ascending=False) #sort data by date
map_df=df[df['date']=='2020-07-03']
map_df.reset_index(drop=True, inplace=True)
map_df

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

第三步:创建数据可视化所需的两个数据序列

country=list(map_df[‘location’])totalcases=list(map_df[‘total_cases’])

第四步:生成地图

有了 7 行,就会得到冠状病毒世界地图。

list1 = [[country[i],totalcases[i]] for i in range(len(country))] #prepare data for visualization
map_1 = Map(init_opts=opts.InitOpts(width=”1000px”, height=”460px”)) #create the map and set the size of the map
map_1.add(“Total Confirmed Cases”, list1, maptype=’world’) #add world map
map_1.set_global_opts( #set global configurations
 visualmap_opts=opts.VisualMapOpts(max_=1100000,    is_piecewise=False),
 legend_opts=opts.LegendOpts(is_show=False), #show legend or not
 )
map_1.render_notebook() #show the map in the notebook directly

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

这张地图看起来有点乱。我们需要自定义美化地图。

4.1 从地图上删除国家名称

list1 = [[country[i],totalcases[i]] for i in range(len(country))] 
map_1 = Map(init_opts=opts.InitOpts(width=”1000px”, height=”460px”)) 
map_1.add(“Total Confirmed Cases”, 
 list1, maptype=’world’) 
map_1.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) #remove country names
map_1.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=1100000,is_piecewise=False),
 legend_opts=opts.LegendOpts(is_show=False))
map_1.render_notebook() 

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

4.2 从地图上移除圆点

list1 = [[country[i],totalcases[i]] for i in range(len(country))] 
map_1 = Map(init_opts=opts.InitOpts(width=”1000px”, height=”460px”)) 
map_1.add(“Total Confirmed Cases”, 
 list1, 
 maptype=’world’,
 is_map_symbol_show=False)
map_1.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) 
map_1.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=1100000,is_piecewise=False),
 legend_opts=opts.LegendOpts(is_show=False))
map_1.render_notebook() 

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

4.3 将图例从滑动条更改为颜色箱

list1 = [[country[i],totalcases[i]] for i in range(len(country))] 
map_1 = Map(init_opts=opts.InitOpts(width=”1000px”, height=”460px”)) 
map_1.add(“Total Confirmed Cases”, 
 list1, 
 maptype=’world’,
 is_map_symbol_show=False) 
map_1.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) 
map_1.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=1100000,is_piecewise=True,pieces=[
 {“min”: 500000},
 {“min”: 200000, “max”: 499999},
 {“min”: 100000, “max”: 199999},
 {“min”: 50000, “max”: 99999},
 {“min”: 10000, “max”: 49999},
 {“max”: 9999},]),
 legend_opts=opts.LegendOpts(is_show=False))
map_1.render_notebook() 

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

4.4 给地图添加标题和副标题

list1 = [[country[i],totalcases[i]] for i in range(len(country))] 
map_1 = Map(init_opts=opts.InitOpts(width=”1000px”, height=”460px”)) 
map_1.add(‘Total Confirmed Cases’, 
 list1,
 maptype=’world’,
 is_map_symbol_show=False)
map_1.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) 
map_1.set_global_opts(
visualmap_opts=opts.VisualMapOpts(max_=1100000,is_piecewise=True,pieces=[
 {“min”: 500000},
 {“min”: 200000, “max”: 499999},
 {“min”: 100000, “max”: 199999},
 {“min”: 50000, “max”: 99999},
 {“min”: 10000, “max”: 49999},
 {“max”: 9999},]),
 title_opts=opts.TitleOpts(
 title='Covid-19 Worldwide Total Cases',
 subtitle=’Till July 05th,2020',
 pos_left=’center’,
 padding=0,
 item_gap=2,# gap between title and subtitle 
 title_textstyle_opts= opts.TextStyleOpts(color=’darkblue’,
 font_weight=’bold’,
 font_family=’Courier New’,
 font_size=30), 
 subtitle_textstyle_opts= opts.TextStyleOpts(color=’grey’,
 font_weight=’bold’,
 font_family=’Courier New’,
 font_size=13)), 
 legend_opts=opts.LegendOpts(is_show=False))
map_1.render_notebook() 

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

通过向主题参数传递不同的值,可以很容易地更改地图的整体外观。

list1 = [[country[i],totalcases[i]] for i in range(len(country))] 
map_1 = Map(init_opts=opts.InitOpts(width=”1000px”, height=”460px”**,theme=ThemeType.ROMANTIC**)) 
map_1.add(‘Total Confirmed Cases’, 
 list1,
 maptype=’world’,
 is_map_symbol_show=False)
map_1.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) 
map_1.set_global_opts(
visualmap_opts=opts.VisualMapOpts(max_=1100000,is_piecewise=True,pieces=[
 {“min”: 500000},
 {“min”: 200000, “max”: 499999},
 {“min”: 100000, “max”: 199999},
 {“min”: 50000, “max”: 99999},
 {“min”: 10000, “max”: 49999},
 {“max”: 9999},]),
 title_opts=opts.TitleOpts(
 title=”Covid-19 Worldwide Total Cases”,
 subtitle=’Till July 03rd,2020',
 pos_left=’center’,
 padding=0,
 item_gap=2,
 title_textstyle_opts= opts.TextStyleOpts(color=’darkblue’,
 font_weight=’bold’,
 font_family=’Courier New’,
 font_size=30), 
 subtitle_textstyle_opts= opts.TextStyleOpts(color=’grey’,
 font_weight=’bold’,
 font_family=’Courier New’,
 font_size=13)), 
 legend_opts=opts.LegendOpts(is_show=False))
map_1.render_notebook()

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

有许多选项和参数可供您探索和尝试,以进一步美化您的地图。

享受 Python 中的数据可视化!

如何制作一个 GPT2 Twitter 机器人

原文:https://towardsdatascience.com/how-to-make-a-gpt2-twitter-bot-8669df60e60a?source=collection_archive---------12-----------------------

它只有大约 100 行代码,但是 tweets 是无限的。

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

作者对推特机器人的演绎

介绍

我喜欢生成模型。向一台机器展示一堆数据,并让它画一幅画或写一个与原始材料相同的小故事,这是一件神奇的事情。如果我们不能正确地与他人分享,这些愚蠢的小模型有什么用?这毕竟是信息时代。在本帖中,我们将:

  1. 从头开始创建一个 Twitter 机器人
  2. 训练一个最先进的语言模型来为我们生成文本
  3. 使用 Twitter API 来制作您的机器人 tweet!

当你完成教程后,你将能够创建一个像这样的机器人 one 来发布生成的谚语。这个项目的所有代码都可以在这个资源库中找到。开始吧:)。

设置

本教程将使用 Python3。我们将使用gp T2-简单库来训练我们的模型。它依赖于 tensorflow.contrib,后者在 tensorflow 2.0 中已被删除,因此您需要使用早期版本:/。很抱歉。为了简单起见,我把 docker 容器和 Makefile 放在一起,以便在中运行。您可以通过构建 docker 容器来加载一个工作环境进行游戏:

make build

然后跑步

make run

如果 Jupyter 更适合你,你也可以做

make run-jupyter

请注意,端口设置为 8989,而不是通常的 8888。

设置 Twitter

用 Twitter 建立一个机器人只需要你申请一个开发者账户,并把凭证和你想运行的任何代码链接起来。下一节将详细介绍如何设置开发人员帐户。这有点无聊,所以如果你已经有了,就跳到下一部分。

首先登录 Twitter,然后前往他们的开发者网站。您应该会看到类似下图的内容。

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

Twitter 开发者页面

单击右上角的应用按钮。这将带你到一个新的页面,你需要点击“申请一个开发者帐户。”

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

这将把你带到一个页面,询问你将如何使用开发者账户。我们正在制作一个机器人,所以选择那个,但是如果你感觉辣并且想要做其他事情,也标记那些。

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

然后填写下一页的所有信息,并添加一个电话号码。

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

最后一页涉及两个需要回答的问题。下面我概述了我对每个获得批准的问题的回答。如果你打算像我一样使用这个机器人,只是为了有时发推文,请随意复制它们。您可以将其他内容标记为与此 bot 无关。

请用英语描述您计划如何使用 Twitter 数据和/或 API。回复越详细,就越容易审核和批准。

“我计划建造一个小机器人,它将使用 GPT2、马尔可夫链或 RNN 的某种变体,每天就给定的主题发布简单的推文。目的是通过 Twitter 平台分享这些模型生成的有趣文本。”

你的应用会使用推文、转发、赞、关注或直接消息功能吗?

该应用程序将使用 tweepy Python 库每天更新机器人的 twitter 状态。Python 脚本将从我电脑上的 cron 作业中运行,并将只使用 Tweet 功能。”

你需要等待他们批准你的申请。在这一点上,我们很高兴填写另一个表格描述我们的应用程序!通过单击您的姓名,然后单击应用程序下拉字段,导航至应用程序页面。

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

单击创建应用程序

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

填写另一张表格…

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

一旦所有这些都填好并提交,你就可以开始了。您将在应用页面中看到您的新应用。当你点击细节,你可以得到你的 API 密匙。您只能查看您的访问令牌一次,因此请务必记下它们。我把我的保存在一个 JSON 文件中。这使得我可以很容易地以编程方式访问这些令牌。

{"consumer_key": aaaa
"consumer_secret": "bbbb"
"access_key": "cccc"
"access_secret": "dddd"}

就是这样!我们终于准备好写一些代码了!

获取一些数据

我要让我的推特机器人写一些有趣的谚语。你可以在这里找到我用来训练我的模型的数据。对于你的,看看你是否能找到一个数据集,其中的主要思想是简短的,并且有相当多的数据。一些想法可能是坎耶·韦斯特的推文,现任和前任总统的推文,甚至是魔法卡片

我们将使用的 GPT2 简单模型作用于一个文本文件,所以我们需要做的就是将我们感兴趣的任何文本源编译成一个文本文件。我在培训 GPT2 时喜欢做的一件事是在不同的部分之间添加分隔符,这些分隔符不会出现在文本中。例如,您可以将《箴言》中的所有内容放入一个文件中,或者您可以用“\n==========\n”分隔每个谚语。然后,模型可以了解谚语的开始和结束位置,您可以更容易地解析输出。我已经按照我喜欢的方式设置了谚语文本的格式,其中有一个“\ n = = = = = = = = = = \ n”来分隔每个谚语的结尾,所有多余的字符都已被删除。

建造大脑

创建世界级的文本生成模型从未如此简单。当我制作第一个生成模型时,我必须编写大量代码来构建模型、训练模型、从模型中提取合理的预测等等。现在,我们可以在 GPT2 上进行一点迁移学习,并获得比几年前想象的更好的结果。

Max Woolf 创建了一个惊人的库,使得微调 GPT2 变得超级容易。我们将采用他所有的优秀成果,并使用该界面进行培训。以下 30 行代码是微调同类最佳生成模型所需的全部内容。gpt2_simple finetune 函数接受几个值得解释的参数。

微调 GPT2 模型的代码

  • 会话该会话只是当前的 Tensorflow 会话
  • 数据集这是加载并用于训练的文本文件的路径,稍后将详细介绍。
  • 型号名称要使用的 GPT2 型号名称可以是 117M、124M 或 355M。124M 在我的 1080Ti GPU 上很好用。
  • 步数模型要走的步数。这个数字应该足够大,至少可以遍历整个数据集一次,但也不能大到让你无法适应。当在相对较小的数据集上微调 GPT2 时,我喜欢做一到两个时期。然后我进行测试,以确保它生成的内容不是直接来自训练集。

我们可以通过使用wc实用程序查看文本中的总字数来计算步骤数:

wc Data/proverbs_clean.txt

生产

1816   15984   93056 Data/proverbs_clean.txt

我们可以看到这个文件有 1,816 行,15,984 个单词和 93,056 个字符。步骤中传递给模型的默认字数由 sample_length 参数设置,默认为 1023。所以 15984 / 1023 = 15.6。所以每 16 步我们都要检查一次所有的数据。这意味着我们应该训练我们的模型走 33 到 66 步。以避免过度拟合。

要生成给定模型的新文本,我们可以使用 gpt2_simple.generate 函数,如下所示:

sess = gpt2.start_tf_sess()
gpt2.load_gpt2(sess, checkpoint_dir=checkpoint_dir)
text = gpt2.generate(
    sess,
    checkpoint_dir=checkpoint_dir,
    length=length,
    temperature=temperature,
    destination_path=destination_path,
    prefix=prefix,
    return_as_list=True
)

让我们再次分解这些论点。

  • sess 是我们想要使用的 tensorflow 会话
  • checkpoint_dir 是从我们的微调到保存的检查点的路径
  • 温度是大于 0 的值,我喜欢在 0.8 到 2 之间玩。温度越低,你的输出就越稳定和可预测;温度越高,它们就越狂野、有趣,甚至可能是荒谬的。
  • destination_path 是保存文本的路径。如果你只是想内联返回它,让这个 None
  • 前缀是个好玩的。它可以是用于播种模型的文本字符串。因此,如果你以“你不应该”开始,那么模型将写下接下来的单词,就好像它以“你不应该”开始一样。
  • return_as_list 将使函数返回文本,而不只是打印出来。

运行这段代码,我们可以生成一些谚语!

for he that taketh away his beret also with food, and as a disorderly child, so hath a man a very strange prayer
==========
for though it seem good to us to be taken, yet a man that hath it in his heart never cometh out of it
==========
he that hath his substance with him seeketh out knowledge and hath neither toy with his heart
==========
for a stranger cometh when i talk with him, and delivereth him, so that i may give to him even as the blood I drink, and a spare change my food

建造机器人

我们有数据,一个根据我们的数据训练的模型,和一个 Twitter 开发者账户,剩下的就是把它们连接起来。我们的机器人需要做三件事。

  1. 使用 Twitter API 进行身份验证
  2. 产生一句谚语
  3. 把这句谚语发到推特上。

幸运的是 Tweepy 让第一和第三部分变得非常简单,我们已经完成了第二部分!

证明

首先,我们需要将我们的凭证放入 Python。正如我前面提到的,我把我的保存在一个小的 JSON 文件中,所以用 Python 加载它非常容易。

# Parse the credentials for the twitter bot
with open("twitter.json", "r") as json_file:
    twitter_creds = json.load(json_file)

# Set the credentials based on the credentials file
CONSUMER_KEY = twitter_creds['consumer_key']
CONSUMER_SECRET = twitter_creds['consumer_secret']
ACCESS_KEY = twitter_creds['access_key']
ACCESS_SECRET = twitter_creds['access_secret']

有了所有这些凭证,我们可以使用 Tweepy 通过 Twitter API 进行身份验证。

# Authenticate with the Twitter API
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth)

文本生成

现在,我们可以使用之前编写的代码生成新的文本。我将所有这些打包成一个名为 generate_text 的小函数。生成文本后,我们要确保不要抓取任何超过 280 个字符的文本,因为这是 Twitter 的 tweet 限制。

# Generate some text
generated_text = generate_text(checkpoint_dir, length, temperature, None, prefix)

# Parse out all "sentences" by splitting on "\n———————\n"
split_text = generated_text.split("\n———————\n")

# Filter out all examples which are longer than 140 characters
valid_text = [x for x in split_text if len(x) <= 140]

推特!

微博现在只有两行了!随机选择一个谚语,然后使用 Tweepy 更新机器人状态!

tweet = np.random.choice(valid_text, 1)
api.update_status(tweet[0])

就在那里!

包扎

我们有代码来生成圣经谚语风格的推文,也有技术来处理任何文本语料库!我通常只是在我的服务器上安排一个 cron 作业,每天运行一到两次。我已经在中包含了一个 Makefile,使得用一个命令就能让机器人发布 tweet 变得容易。只需运行:

make CHECKPOINT_DIR="deepproverbs" TWITTER_CREDS="twitter.json" tweet

我把我们今天写的所有代码都打包成了一些漂亮的点击函数,所以应该很容易从命令行运行。

如何建立黑仔数据科学投资组合?

原文:https://towardsdatascience.com/how-to-make-a-killer-data-science-portfolio-219424a4e0d2?source=collection_archive---------0-----------------------

与聊天机器人集成

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

达米尔·斯班尼克在 Unsplash 上拍摄的照片

我会跟你直说。如果你现在试图找一份工作,这绝对是一种折磨,因为数据科学家是 21 世纪最性感的工作,因为竞争非常激烈,每天都在增长。

事实是,除非你站出来,吹嘘自己,否则你不会成功。嘿,如果你不为自己做,别人也不会做

这是我在找工作的时候告诉自己的,仅仅通过简历申请和分享 LinkedIn 和 GitHub 个人资料不会有任何进展。

每个人都忙于自己的生活,你需要让它变得特别,需要时间。然后我认为有一个杀手级的投资组合网站来展示我的项目、技能和兴趣并不是一个坏主意。

但是我该怎么做呢?

正如 Julia Nikulski 在她的文章中提到的,作为数据科学家,我们并不经常使用 HTML、CSS、JavaScript 或 Flask。对于一个典型的数据科学家来说,编码和创建一个网站显然非常耗时,而且质量没有保证。

在谷歌上快速搜索后,我找到了数百个教程,可以帮助你在 30 分钟内建立和部署一个像样的单页文件夹。但是他们不是真正的杀手标准质量,我也需要为域名和托管服务支付少量的钱,我不准备这样做。

我保证自己不会投入大量的时间和精力来创建一个网站,因为它只是一个助手,但我希望有一个吸引注意力的杀手级网站,因为我对 NLP 特别感兴趣,我肯定希望在其中集成一个聊天机器人,因为它可以向用户表明我对 NLP 表现出额外的兴趣。准确地说,我个人的要求是

没有 HTML / Java 脚本代码

零价格和免维护

惊艳 UX 吸引眼球

笔记本电脑、平板电脑和移动设备布局的单一设计

聊天机器人集成

Linkedin 和 Github 导航

如果你认为我的要求不切实际,甚至贪婪。但我向你保证这是可能的。你可以在这里看到我的作品集。如果你只使用一个信号源,那肯定是不行的,你需要使用 3 个信号源。

  1. Webflow
  2. 陆地机器人
  3. 坎瓦

ebflow 创建网站,Landbot 创建聊天机器人,Canva 创建徽标。所有这些资源都提供免费增值服务。我确保坚持自由放养。

选择 Webflow 的原因是因为你只需点击一个按钮就可以部署你的网站,域名中有你的名字,还有免费的托管服务。要导航到 Chatbot、GitHub、Linkedin 页面,您可以使用带有超链接的按钮。全部免费。下一节将详细介绍 Lanbot 和 Canva。

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

作者图片来自作者网站

3 步指南:

你可以通过三个简单的步骤获得这样一个令人敬畏的投资组合网站。

第一步:标识

为你的网站创建一个标志。

虽然这不是强制性的,但我强烈建议你制作自己的 logo,因为它会立刻让用户感觉他/她进入了你的世界。

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

作者的徽标图像

您可以使用canva.com从可用的免费徽标模板中快速制作您的徽标。如果你已经有了一个设计方案,你可以在 5 分钟内完成,并下载成图片。

您将在稍后创建网站时在 Webflow 中使用它。

步骤 2:聊天机器人

拥有一个个人聊天机器人可以提升你的作品集,让它变得互动和有趣。如果你像我一样对 NLP 领域感兴趣,我认为这是一个必须的广告。

你有两个选择。第一,你可以用 python 自己制作一个简单的聊天机器人,可以谈论你的教育,个人项目,分享你的联系方式等。第二,你可以使用像 Lanbot 这样的免费平台,在不到 15 分钟的时间里创建一个有趣的基本聊天机器人。

如果你想选择第一个选项并寻求帮助,你可以关注徐哲睿的文章

[## 如何在不到一小时的时间内用 Python 和深度学习创建聊天机器人

显然不要指望会是 Siri 或者 Alexa…

towardsdatascience.com](/how-to-create-a-chatbot-with-python-deep-learning-in-less-than-an-hour-56a063bdfc44)

对于第二种选择(我用过),有很多平台,比如 DialogflowCollect.chatChatfuelMorph.aiLandbot.io

选择 Landbot.io 的原因是,据我所知,这是唯一一个平台,它不仅提供了用于集成的 JavaScript 代码片段,还提供了一个超链接,我可以在按钮下使用它进行导航。

一旦你进入了,在 Landbot 中创建一个聊天机器人是很容易的。它更像是 if-else 循环。如果你需要更多的信息,你可以看看兰德机器人的学院页面

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

图片来自作者的 Landbot 创建页面

Landbot 跟踪用户,并提供关于谁在何时、何地以及如何使用的分析。

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

来自作者的 Landbot 分析页面的作者图片

如果你在数据科学领域,你知道跟踪数据和信息有多有用。

你可以在这里看到我完全开发的聊天机器人。

[## Tejesh.ai

io 是一个创建对话界面来代替表单的工具。不需要编码!

landbot.io](https://landbot.io/u/H-351396-6XX1VDBMWWRQM117/index.html)

第三步:网站

在 Webflow 中,如果你想从头开始建立一个网站,你可以通过拖放内置工具来建立一个网站,或者更好的选择是,你可以选择和克隆数百个已经用 Webflow 建立的网站。

[## 响应式 web 设计工具、CMS 和托管平台| Webflow

我们的大学、博客和展示平台为您提供成功所需的教育、见解和灵感…

webflow.com](https://webflow.com/?r=0)

您可以在 showcase 选项卡中看到模板。你所要做的就是选择一个适合你风格和品味的网站,并确保你点击 clonable 只看到允许克隆的网站。

专业提示:Webflow 中几乎所有的网站都非常漂亮,我觉得很难从中选出最好的。如果你写下你想容易过滤掉的特征,这会对你有所帮助。

确保在项目设置中选择合适的域名。我用了有我名字的’ tejesh-ai ',然后在图标部分上传你设计的 logo

我创建的作品集是从吉米制作的网站[克隆而来的。我对克隆版本做了一些修改,插入了我的徽标,还创建了按钮让用户导航到我的聊天机器人和 Github。****](https://webflow.com/website/Jimmy-Makes-Things-Design-Development-Collective)

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

作者的 Webflow 设计页面中作者的主屏幕图像

我使用集合在工作页面中列出了一些我选择的项目,并在每个项目的底部设计了一个 GitHub 页面导航按钮。

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

作者的 Webflow 设计页面中作者的工作屏幕图像

在所有的改变之后,只要确定在不同的布局上看起来如何,特别是在移动中。如果你想改变元素的位置,完成后点击顶部的发布按钮

就是这样,你现在可以在你的简历、Linkedin、Twitter 中复制并添加链接,并与全世界分享。

最后的话

我知道在这个竞争激烈的数据科学领域脱颖而出并不容易,但做一些小事,比如在你的个人资料中添加一个投资组合,肯定会给你带来优势。如果有人在看到你的作品集后开始和你交谈,不要惊讶。

如果你决定制作一个作品集,请不要满足于平庸的 UX 设计,当你有机会轻松制作一个杀手作品集的时候。

我想给你的一个建议是让你的投资组合保持活力。不管怎样,你添加的项目和作品是人们最关注的。所以请不断更新你的作品👋。

让我知道你是否尝试过这个,如果你面临任何封锁,在这个帖子里留下评论,我会尽力帮助你。

参考

  1. 《哈佛商业评论》——https://HBR . org/2012/10/data-scientist-the-sexy-job of-the-ST-century

如何制作一个专业外观的闪亮应用程序,而不被吓倒

原文:https://towardsdatascience.com/how-to-make-a-professional-shiny-app-and-not-get-intimidated-with-r-991e636dd111?source=collection_archive---------9-----------------------

使用 mtcars 的分步示例

介绍

这篇文章的目标读者是有 R(最好是 tidyverse)经验的人,他们想学习如何开始制作闪亮的应用程序。对于那些以前没有听说过 Shiny 的人来说,这是一个包,它允许你使用 R 创建 web 应用程序,而不需要知道任何 HTML、CSS 或 Javascript。也就是说,如果你真的想深入应用程序开发,学习 HTML、CSS 和 Javascript 将提高你做更强大的事情的能力,并对应用程序开发过程有更多的控制。然而,由于可以使用如此多的工具,这可能会让人不知所措。因此,这篇文章旨在为开始制作一个专业外观的闪亮应用程序提供一些基线代码和闪亮的概念。我希望,通过遵循本文中的步骤,您将能够立即开发出一个干净的高质量的应用程序。每一步,如果你好奇,你可以谷歌一下,我认为这是最好的学习方法之一。

直接进入一个更专业的应用程序,而不是从样板闪亮的例子开始,背后的动机是因为理论和中间的弯路往往会延长的道路,这可能会挫伤你的积极性。我的哲学是,一旦你开始某件事,你将能够 1)为你已经做的先进的事情感到骄傲,2)以后补充细节。我不会对 Shiny 理论或 Shiny 的一些更复杂的底层组件进行太多的详细描述,但 Hadley Wickham 正在进行的在线教科书是一个很好的资源。因此,对于这篇文章,请耐心听我说,我没有全面解释的任何术语或概念都需要您花费一些精力来查找。

设置

当您第一次安装shiny包并重启 RStudio 工作空间时,您会看到一个选项来初始化闪亮的 web 应用程序,如下所示:

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

这将带你到一个提示,让你选择初始化应用程序在一个单一的文件(应用程序。r)或两个文件(ui。r 和服务器。r)。我将在这里提到,任何闪亮应用的主干都由两个组件组成:定义应用如何出现的 UI (用户界面)和定义应用如何工作的服务器。对于这个例子,我们实际上有三个文件(ui。r,服务器。r,和 app。r,最后一个是我们加载所有包的地方,sourceUI 和服务器脚本,并运行应用程序。这种三脚本框架通常用于更复杂的闪亮应用程序,尽管我今天将带你们浏览的示例应用程序相当简单,但开始培养良好的习惯还是有好处的。所以你们可以做的是继续做三个新的 R 脚本文件,并把它们命名为“ui”。r”,“服务器。r”和“app。r”。

app。稀有

让我们从简单的开始。将以下代码复制并粘贴到您的应用程序中。r 文件。

我们目前要关注的主要库是shinyshinydashboard。我们使用shinydashboard是因为它是一个简洁的包,提供了一个清晰的接口来呈现数据和图表。

闪亮的应用程序

因此,在我们继续讨论 UI 和服务器之前,让我们先来讨论一下我们正在构建的应用程序实际上会是什么样的!我们将使用mtcars数据集并构建一个简单的线性回归 OLS 模型来预测mpg或每加仑英里数。app 界面将允许用户更改各种输入,输出将是一个预测的mpg。当然,预测的 mpg 本身是没有意义的,因为模型会被过度拟合(我们在构建模型的同一个数据集上进行预测),但这不是我们本次练习的关注点。

UI。稀有

仪表板有三个部分:标题、侧栏和主体。最简单的示例会生成以下内容:

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody()
)

server <- function(input, output) { }

shinyApp(ui, server)

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

因此,对于这个应用程序,我在考虑将输入放在侧边栏(黑色部分),输出放在主体(浅蓝色部分)。对于更复杂的应用程序,指定单独的标题、侧边栏和主体对象是一个好习惯。我们将从标题开始,因为它最简单。

header <- dashboardHeader(title = “Demo Predictor”)

接下来,让我们开始用我们希望用户能够选择的输入填充侧栏界面;这些将是 mtcars 数据集中的预测变量。为了简单起见,我们将分类变量设为 a selectInput,它将为用户提供一个下拉菜单选项,而连续变量设为 a numericInput,它将允许用户输入一个数字。这些输入基本上有三个关键参数(还有更多,但我会让您自己去探索):输入 ID(稍后我们将在将服务器连接到 UI 时使用)、标签(显示在应用程序中的文本)和值。注意,输入 ID 必须是一个简单的字符串,只包含字母、数字和下划线(不允许空格、破折号、句点或其他特殊字符!)且必须唯一。如需更多类型的输入,请查看本章节

这是它目前的样子:

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

点击预测!要下拉的菜单项

这里有一些评论。所以我使用sidebarMenu布局中的菜单项来存储我想要的下拉菜单,点击即可显示/隐藏。我使用的参数如下(当然还有更多):

menuItem(text = "Predict!", tabName = "model", icon = icon("bar-chart-o"),...)

其中文本是显示的内容以及菜单项将激活的选项卡的名称。现在不要太担心 tabName,如果我们想对菜单项如何与仪表板的其他部分交互有更多的控制,或者如果我们想用 HTML/CSS/Javascript 进一步定制它,它主要是存在的。请注意,您在代码中列出各项的顺序就是这些项出现的顺序。另外两个组件是“预测!”和“清除”按钮。

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

目前,如果你按下它们,什么都不会发生,因为我们还没有为这两个按钮指定一个服务器功能,但最终“预测!”将输出一个预测的 mpg 和“清除”重置所有输入。请注意,它们周围有一些代码看起来一点也不像 R 代码。那是因为那是 CSS(层叠样式表),是一种定制网站元素外观的语言。我写的代码基本上是将两个按钮并排放在同一行,但是同样,不要太担心细节。

最后,让我们填写正文。

在这里,我介绍一个verbatimTextOutput(),它将打印预测的 mpg。它通常与renderText()成对出现,我将在稍后的服务器代码中讨论。闪亮 UI 设计中的另一个重要概念是fluidRow()。流体行的宽度为 12,因此您可以将内容组织在宽度总计为 12 的列或框中。最后一个概念是标记,但这更高级一些,因为标记允许您更好地控制 HTML/CSS/Javascript 元素。在这里,只需要知道tags$style允许我改变 CSS 元素来定制字体大小和家族之类的东西。

现在,我们有了所有的 UI 组件,所以我们像这样把所有的东西放在一起。

ui <- dashboardPage(header, 
                    sidebar, 
                    body, 
                    useShinyjs()
)

服务器。稀有

您必须记住的是,对于您做出的任何具有输入 ID 的 UI 决策,您都应该将一个服务器函数与它配对(这是一个通用的经验法则)。所以你会记得我们有所有的 mtcar 变量输入,即“预测!”按钮和“清除”按钮。服务器功能非常简单。我们希望在线性回归模型中使用所有变量输入。我们还将编写一些单独的代码来重置这些值。

这就是输入 ID 变得重要的地方。它必须是唯一的,因为在服务器中,您使用input$someID引用输入。我将分解三个功能:

  • observeEvent()
  • eventReactive()
  • output$pred <- renderText(pred())

然而,要理解这些,我不得不谈谈反应性。反应是 Shiny 的一个核心组成部分,不可否认,最初你可能很难理解这一点。本质上,反应性的要点是任何时候用户改变输入,我们不希望所有的代码都重新运行;我们希望控制何时重新运行代码的某些部分。这一点很重要,因为想象一下,如果你每次在网站上进行点击或滚动等操作时,网站每次都要重新加载,那将是有史以来最令人沮丧的网站!对于反应性的更深入的描述,请务必查看 Hadley Wickham 的第中的内容。

observeEvent()基本上告诉应用程序做一个动作,在这种情况下,在某个动作时将值重置回默认值,在我们的情况下,就是单击我们称为“清除”的actionButton()(ID 为“reset”)。我使用eventReactive()来指定当用户点击“预测”时我想要运行的代码按钮,这是一些相当简单的 dplyr 和基本预测函数。我甚至可以通过在外部执行争论来提高效率,这样它就不必每次都重新运行,但是现在,由于它是一个小数据集,代码仍然运行得非常快。当我将一个eventReactive()语句保存为 R 对象时,为了再次调用它,我必须把它当作一个函数来处理(这是 Shiny 的反应式编程方式)。这就是为什么pred变成了pred()。最后一件事是呈现我们用renderText做的输出,我们必须用正确的 ID 将它分配给输出,所以回想一下在我们的 UI 脚本中,我们指定了verbatimTextOutput(pred)

这是我们运行该应用程序时的样子shinyApp(ui, server)

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

结论

Shiny 是现有 R 用户进入网站和应用程序开发的一种非常简单和用户友好的方式。一个闪亮的应用程序可以成为传达你的见解的强大工具,并允许用户自己探索概念和见解。使用类似shinydashboard的东西真的很有帮助,因为不管我们是否意识到,一个应用程序的设计方式真的很重要。我们的体验越无缝、越直观,通常就有越多的隐藏的东西让这一切发生。对于那些对此感兴趣的人,我鼓励使用这个应用程序作为跳板,并尝试融入新的功能。试图学习所有的 HTML、CSS 和 Javascript 太难了,绝对不推荐,所以下面是我推荐的一些资源,供你参考:

尽情享受吧!

如何制作一个简单的聊天机器人

原文:https://towardsdatascience.com/how-to-make-a-simple-chatbot-841b5efa2094?source=collection_archive---------22-----------------------

不到 10 分钟

因为教程通常更容易实时跟踪。

你可能听说过围绕人工智能的炒作。也许你是一个商业领袖或者一个有抱负的学生。不管怎样,你可能已经看到标题声称“人工智能正在崛起”,处于发展的顶峰,准备在工作中包容人类。好吧,我让你自己判断这个决定。在这篇关于构建应用聊天机器人的温和介绍中,我向你展示了任何明智的个人都可以创造的基本能力,这些能力只有通过谷歌上的 DialogflowActions 提供的工具才能实现。

那么,到底什么是什么是 Dialogflow 呢?简单的答案是:帮助人们以更简化的方式与技术互动。例如,假设我问我的机器,“今天我附近有哪些咖啡店营业?”对于更传统或硬编码的系统,如果问题不是以这种方式提出的,那么系统就不能理解你在说什么。至少在英语中,用不同的词来传达相同的“意思”有几种方式…

  • “星巴克开门了吗?”
  • “今天我可以去哪些咖啡店?”
  • “什么咖啡馆接移动订单?”

我们喜欢 Dialogflow,因为它可以处理这些不同的最终用户体验。为了打破这种对人类话语差异的基本理解,我将(非常)简要回顾 Dialogflow 背后的一些基本原则,这将使本教程的其余部分更容易理解,并且应该为您提供一个未来聊天机器人交互的有用框架。

现在在 Dialogflow 中,我们也有称为**代理的实体。**这些虚拟代理处理与最终用户的对话。这些人经过训练,像呼叫中心代理一样,处理预期的对话。

代理学会识别被称为**意图的东西,**作为人类,我们自然理解为与你的动机有关的东西,或者问某事的原因。也许你听了某人的漫谈,你可能会在内心深处想“说重点!”好吧,你最终能够跟上谈话,因为你在谈话中不断评估某人意图的可能性。同样,意图被用来帮助你的虚拟代理获取一个短语,并理解用户或说话者想要从对话中得到什么,然后通知代理的最终响应。

因此,以咖啡馆为例,意图可以描述为“寻找咖啡馆意图”在您甚至可以点星巴克之前,代理需要知道在哪里可以找到咖啡馆,所以我们在第一次传递中会询问您的邮政编码。有了这个意图,我们的代理就知道要监听什么样的参数,需要提取什么样的数据,以及代理应该给你的最终用户什么样的回答或响应。一些示例响应可能是:

  • “当然,星巴克就在离你 0.1 英里的地方.”
  • “离你两公里以内的菲尔茨咖啡已经关门了.”

最后,在每个意图中,我们可以定义**实体、**来识别我们应该从用户话语中提取的关键数据。从概念上讲,这些就像是代理应该在对话中寻找的对象,比如“日期”或“位置”也许实体类型甚至更加定制化,例如“咖啡”实体匹配不同类型的咖啡(美式咖啡、摩卡咖啡、冰拿铁咖啡),可以通过我们的咖啡代理商购买。

在我们进入这个过程之前,要考虑的最后一个组件是对话流上下文。正如上下文在正常对话中的重要性一样,对话流代理需要理解上下文,以便与意图相匹配。例如,如果你在人行道上随意走到某人面前,说,“好吧,我们点一杯摩卡!”,那么你很可能会受到困惑的目光,而这个谦逊的陌生人可能会说一些类似于“嗯,你是谁?”

然而,如果你先问同一个陌生人“嘿,我附近有什么咖啡店开门吗?”,然后你设置一个“咖啡馆购物环境”因此,如果你接着问“我可以点一杯摩卡吗?”的话,这位先前感到困惑的陌生人可能会做出更正常的反应

使用谷歌助手构建聊天机器人的最后一个“基础”是一个**动作。**顾名思义,一个动作可以是发起与助手互动的第一个切入点。这就像当我们以“嗨,星巴克博士!”为了激活我们的星巴克聊天机器人。然而,更广义地定义,一个动作通过一些服务、应用或逻辑来实现或执行一些用户定义的意图。

如果你还有任何问题,请随时直接联系我或查看 YouTube 视频。与此同时,让我们把手弄脏吧!

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

你的首页截图。

  1. 首先,你想参观:https://console.actions.google.com/u/0/

2.从这里,你点击“新项目”以确定一个暂定的“项目名称”我们将对其进行自定义,您可以点击“对话”按钮记住,我是 2020 年 6 月 30 日做这个的,所以有可能界面又变了。但是对于那些及时看到这个的人来说,我希望这有助于激起你的兴趣。现在,向下滚动到底部,确保在 Dialogflow 中定义一个动作。

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

“单击此处使用 Dialogflow 构建您的操作”将位于自定义菜单的底部。

3.接下来,点击“决定如何调用您的操作”。然后,您将看到设置和显示名称。这是我们用来触发我们的代理并激活他或她的名字。我们要打电话给我们的代理商,星巴克的代理商 S。一个好听的中性名字。一定要保存好。

4.然后,您将能够指定操作。点击开始。这将打开一系列窗口,最终将带您进入 Dialogflow,在这一步的加载过程中,您可能需要授权您的 Gmail 登录 Dialogflow。

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

“动作”按钮在左边,在“调用”下面在 Create Action 下,点击“Build”,应该会把你带到 Dialogflow,如果之前的指示被准确遵循的话。

5.从这里,您应该会被带到 Dialogflow 中的“intents”页面。现在我们可以开始构建星芭儿特工的意图了。为相应的对话流选择一个名称,并在继续之前确认您的设置。

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

您被定向到的默认 dialogflow 页面应该类似于此页面。

6.所以我们#幸运,因为我们可以访问默认的欢迎意向对话。太好了。我们要把这一切都扔掉!找到这些训练短语,点击文本字符串右边的垃圾桶图标,就可以把它们全部删除。

7.现在,让我们改变回答,针对我们的代理将询问的第一个问题进行定制。我们将通过请求地理定位您附近的星巴克来填充我们的第一个“欢迎,您好”意图。用类似“你住在哪里?”这样的问题填写这一部分或者“我们去星巴克吧。第一,你的邮编是多少?”提供足够的培训短语后,单击保存。单击顶部的蓝色按钮,您应该会在屏幕的右下方看到一个弹出的“intent saved”通知。

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

响应请求的示例。

8.现在,这里有一个很好的实践。在我们使系统变得更复杂之前,让我们测试第一个组件。有用吗?如果管道已经漏水了,你会延长管道吗?大概不会。所以,让我们转换一下话题。让我们回到 Dialogflow 的左侧栏,点击 Integrations。然后,点选谷歌助手,整合设置。

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

点击 Google Assistant 主按钮中的“集成设置”以进入该屏幕。

9.在这里,您需要单击 Test。这将我们的动作加载到动作控制台模拟器中。这里有一些很酷的东西,这是由了不起的谷歌开发者社区提供的,他们把这些东西放在一起,不在这个视频的范围内。

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

为了达到这一点,我点击了“与星巴克博士交谈”,作为我的主要调用,它出现在你现在看到的“取消”的地方

10.因此,我们自然希望在之前对话的基础上再接再厉,因此我们将创建一个新的意图。当然,触发这种意图的训练短语必须是我们在前一个中预期的响应。因此,如果我要求一个邮政编码,让我们给系统一些可能的邮政编码有意义,对不对?让我们回到对话流程。然后,我们将单击意向,并将鼠标悬停在默认的欢迎意向上。接下来,我们将创建另一个意向,并填写以下字段。

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

当您将鼠标悬停在默认欢迎意向上时,右侧的文本会出现,为您提供“添加跟进意向”的选项在这里,我们可以创建我们的“收集数据”意图。

11.重要的是要记住,我们是用这种意图来收集信息的。请注意我是如何填写数据并使其成为必填项的,特别是“尺寸”、“饮料”和“温度”。“如果你从星巴克点餐,他们总是会问这个。欢迎您在这里发挥创意,只要确保创建现实的提示,确定并指定您的代理需要收集哪些参数来获得良好的星巴克订单。下面是一个例子。

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

在我们的后续意图中,请注意,从逻辑上讲,激活该意图的“训练短语”包含对先前意图提出的“回答问题”的回答:“您的邮政编码是多少?”

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

在“操作和参数”下,您可以指定代理将用于检索所需实体值的文本提示。在这种情况下,喝酒

12.最后一步是让你的星巴克代理指出你的订单的参数并检查它。例如,“你点了一杯大杯冰焦糖玛奇朵吗?”在您成功教会您的代理如何提供这种类型的回应后,我们可以结束对话。

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

请注意,前面确定的实体参数可能会在文本响应中引用。

从现在开始,你将有机会在 Google Assistant 测试平台中测试你自己的聊天机器人。当然,这是一个非常基础的“订购星巴克”聊天机器人的介绍版本,它实际上不访问任何 Firebase 数据库,这是一个更接近真实世界的应用程序。如果你有兴趣学习如何做到这一点,那么让我知道!同样,如果你已经看完了这篇文章,那么我希望这篇简短的教程能让聊天机器人不那么神秘。更好的是,如果我已经启发你开始进入人工智能的兔子洞,并建立你自己的聊天机器人!

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

在 Insta/Twitter 上找我:@seanbatir。在https://youtube.com/seanbatirPC:Mikita Zhur了解更多信息

如何成功转向数据科学职业

原文:https://towardsdatascience.com/how-to-make-a-successful-switch-to-a-data-science-career-537e55469af8?source=collection_archive---------10-----------------------

许多人希望有不同的职业道路,并希望过渡到数据科学家的职位,但这仅仅是努力工作和动机的问题吗?

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

罗斯·芬登在 Unsplash 上的照片

在我发表了关于我从业务发展转向数据科学的文章以及关于我的数据科学硕士没有教给我的东西的文章之后,许多人向我寻求关于他们自己职业转变的建议。他们中的一些人担心他们过渡到数据科学的能力,而其他人则询问哪个在线课程是最好的。虽然我显然没有所有的答案,但我想我会分享我自己在这个问题上的经验,并给那些希望在职业生涯中做出这样改变的人一些建议。

[## 从销售代表到数据科学家

我从销售专员到数据科学家的转变&最大的挑战是什么。

towardsdatascience.com](/from-being-a-sales-rep-to-being-a-data-scientist-4bb1da79ba3f) [## 我的数据科学学位没有教会我什么—第 1 部分

&在开始我的数据科学职业生涯之前,我想知道些什么。

towardsdatascience.com](/what-my-data-science-degree-did-not-teach-me-part-1-3d7ff23875e5)

在线课程足以获得一份数据科学家的工作吗?

以我的观点和经验,如果你的背景与数据科学极度脱节(就像我的一样),在线课程根本不够。大多数在线课程提供的知识是有用的、有价值的,是你 LinkedIn 个人资料的一个很好的补充。然而,我认为大多数在线课程没有涵盖足够多的实际业务问题,无法让你成为一名有吸引力的数据科学家,知道在面临真正混乱、不可靠或难以访问的数据时该怎么办。

话虽如此,哪些网络课程最好?

虽然我过去也开设过一些在线课程,但我从未被一门课程的质量所折服,以至于不能说出它的名字并向每个人推荐它。可能只是因为我缺乏连续几个小时观看视频的纪律性。在任何情况下,我不想提及具体的在线课程,但我想强调的是,当你选择在线课程时,你应该注意什么。

  1. 选择有大量实践练习的课程。机器学习涉及大量编程,只能通过反复练习来学习。
  2. 选择课程包括项目。还是那句话,你只能通过自己编码和构建或应用模型来学习。
  3. 如果可能的话,选择那些老师(不仅仅是学生)可以检查你的作业并评论你可以做得更好的课程。

如何获得正确的体验?

我没有神奇的解决方法。对一个人有效的可能对另一个人无效。我也不知道一个国家和另一个国家的市场和对经验的需求是否有很大的不同。然而,我有许多来自不同背景的同事、朋友和熟人,他们通过共同的途径最终进入了数据科学领域。

  • 实习机会

实习通常会为你打开许多机会之门,在那里你可以快速学习,并且(经常)在学习中获得报酬。

  • 实习

在合适的公司投资合适的实习会对你的职业生涯产生巨大的影响。对我来说,合适的公司被定义为关注实习生的学习潜力并提供知识共享的支持性文化的公司。实习和见习都可以让你向该领域的前辈学习,在我看来,这是最好的学习方式。

  • 自组织项目

公司的目标是找到能够像数据科学家一样思考,从而像程序员一样思考的候选人。他们希望看到你以前能够用数据和代码解决问题,即使你所构建的只是对你的个人任务有所帮助(想想你每月支出的预测工具或预测足球比赛比分的应用程序)。它也给你在工作面试中谈论的内容。

最重要的要求

当你来自商业背景或任何其他非常不同的领域时,这种职业转换需要努力工作,花很多时间学习,试图找出为什么你的代码不起作用,或者寻找对数据不一致的解释。

学习数据科学和优秀的编程需要非常陡峭的学习曲线,任何迟钝的学习者都将很难做出转变。这并不容易,而且可能会令人沮丧,所以在投入几个月的时间之前,请确保你真的想成为一名数据科学家。这个名字听起来有点性感,报酬也不错(不是所有地方都是…)但这项工作可能会很乏味,充满政治问题,而且在修复 bug 时相当无聊。你还需要不断学习,因为这个领域发展如此之快,虽然许多人喜欢学习,但不断的变化并不适合每个人。

在数据科学中,你学得越多,你就越意识到你有多少不知道的东西。

当有人问我他们是否认为可以做到时,我无法给他们一个明确的答复。这取决于他们能够并愿意付出多大的努力,他们的适应能力如何,还取决于学习资源的可用性。尽管如此,无论某人能否成为数据科学家,我都相信某人收集的数据科学知识将在未来使他们受益,更好地理解我们生活的技术,并将他们的职业生涯更多地转向他们热爱的领域。

感谢您的阅读!更多关于编程、数据科学和领导力的文章,请关注我的 中型 Twitter,以便在新文章发布时获得通知!

如何用 Python 制作一个 Twitter 机器人

原文:https://towardsdatascience.com/how-to-make-a-twitter-bot-for-free-6bca8298f1ef?source=collection_archive---------13-----------------------

了解如何免费使用 Python 和 AWS Lambda 函数开发自己的 Twitter 机器人

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

作者图片

目录

  1. 什么是推特机器人?
  2. 制造推特机器人有哪些选择?
  3. 如何使用 Python 和 AWS Lambda 制作一个 Twitter 机器人
    -建立一个 Twitter 开发者账户
    -创建一个 Twitter 应用
    -在你的本地机器上开发你的机器人
  4. 将您的 Bot 部署为 AWS Lambda 函数
  5. 结论

实际上,15%的推特用户可能是机器人。企业、品牌和有影响力的人使用机器人来管理他们的 Twitter 账户。就连我也在不久前做了自己的

如果你在这里,我猜你想自己做一个。这篇文章将告诉你如何做。您将了解免费制作 Twitter 机器人的不同选项。而且,如果你有技术背景,你将学习如何使用 PythonAWS Lambda 来编码和部署一个机器人。

看完这篇文章,你会知道:

  • 什么是推特机器人
  • 制作 Twitter 机器人有哪些可用的选项
  • 如何使用 Python 开发一个 Twitter 机器人
  • 如何将自己的 bot 部署为一个 AWS Lambda 函数

我们开始工作吧!

什么是推特机器人?

这是一个通过 Twitter API 管理的 Twitter 账户,以自动方式执行操作。你经常通过 Twitter 的图形界面做的大部分事情也可以通过它的 API 来实现。例如,你可以在预定的时间自动发送推文,用预定义的文本回复推文,或者关注/取消关注其他账户。

尽管 Twitter API 非常灵活,但是您应该记住一些限制。根据 Twitter 的自动化规则,以下是你的机器人可以做的事情:

  • 发布有用的信息
  • 回复关注您内容的用户
  • 回复直接信息
  • 在不打破常规的情况下尝试新事物

下面是你的机器人不能做的事情:

  • 违反这些规则中的任何一条
  • 滥用 Twitter API 或试图规避费率限制。
  • 尝试通过使用除 Twitter API 之外的其他机制来自动化其行为
  • 通过推文或未经请求的直接消息向用户发送垃圾邮件

接下来,您将看到制作您自己的机器人的可用选项。

制造推特机器人有哪些选择?

根据你的目标,你有多种选择来制作一个机器人。其中一些几乎不需要编码技能。其他人需要部署 Docker 容器的经验。就成本而言,你会发现免费和付费的替代品。

以下是最受欢迎的:

**社交媒体自动化平台:**如果你的唯一目标是按照固定的时间表发送推文,你可以使用这个选项。像 BufferSocialOomph 这样的平台提供自动安排推文的服务。

  • **优点:**无代码,非常容易设置
  • 缺点:只能通过付费订阅(Buffer)或有限免费计划(SocialOomph)获得

Amit Agarwal 的谷歌脚本:有一个流行的谷歌脚本用于制作 Twitter 机器人。它可以让你自动发送推文,发送直接信息,并以预定的速度转发。但你需要让它访问你的谷歌账户数据。这里有一个关于它的很好的教程。

  • **优点:**免费,低代码,易于设置
  • **缺点:**需要访问你的谷歌账户数据,除了预定义的行为之外很难定制,缺少文档

将机器人部署到服务器:如果你有技术背景,你可以用你喜欢的编程语言编写你的机器人,然后部署到服务器。有很好的 PythonNodeJS 的教程。

  • 优点:完全可定制,免费或非常便宜
  • **缺点:**难以成立

如果你有一些编程经验,你可以走这条路。它允许你用 Python 或 NodeJS 这样的语言制作一个机器人,并把它部署成一个无服务器的功能。

  • **优点:**完全可定制,对许多用例都是免费的(使用 AWS Lambda 函数)
  • 缺点:中等难度设置

这些是你可以用来制作机器人的选项。没有一个一定比其他的更好。根据你想用这个机器人做什么、你的编程经验和你的可用预算来做选择。

在下一节中,您将经历最后描述的选项。你将学习如何使用 PythonAWS Lambda 函数免费开发和部署一个简单的 Twitter 机器人。

**注意:**要阅读本教程,你必须了解 AWS Lambda 函数的基础知识,并具备 Python 的基础知识。

要快速了解 AWS Lambda 函数,请阅读这篇文章的简介

要了解 Python 的基础知识,请看一下这些资源

如何使用 Python 和 AWS Lambda 制作 Twitter 机器人

在本节中,您将使用 Python 开发一个 Twitter bot,并将其部署为 AWS Lambda 函数。它将遵循一个简单的规则:每天 10:00(UTC),它将从预定义的列表中随机发布一条推文。一旦你完成教程,你可以改变机器人的逻辑,以适应你的需要。

要创建您的机器人,您需要完成以下步骤:

  • 建立一个 Twitter 开发者账户
  • 创建一个 Twitter 应用
  • 在本地开发你的机器人
  • 将您的 bot 部署为 AWS Lambda 函数

最后,在继续之前,您必须准备好以下事项:

建立一个 Twitter 开发者账户

首先在这里申请一个开发者账号的权限。

上,你使用 Twitter 开发者工具的主要原因是什么?部分选择制作机器人。

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

作者图片

在*上填写您的详细信息这是您,对吗?*章节并继续。在下一个板块,*你将如何使用 Twitter API 或 Twitter 数据?*有点繁琐。您需要在多个地方描述您计划如何使用 API。

下面是我如何完成的一个例子,用你的话说描述:

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

作者图片

使用与我上面提供的描述不同的描述。Twitter 可能会自动检查非常相似的描述,并可能会将它视为垃圾邮件,从而延迟您的申请。

然后,在细节子标题下,为选择您计划分析 twitter 数据吗?您的应用会使用推文、转发、赞、关注或直接消息功能吗?提问。其他选择

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

作者图片

完成申请后,会要求您检查详细信息并接受 Twitter 开发者协议。

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

作者图片

最后,您需要确认您的电子邮件,一旦您的帐户获得批准,您就可以创建新的应用程序。这可能需要 48 小时。

一旦您能够访问 Twitter 开发者门户,请继续下一部分。

创建一个 Twitter 应用

在您的 Twitter 开发者账户被批准后,您将收到一封电子邮件,指引您进入 Twitter 开发者门户。您将为您的应用程序选择一个名称,并获得您的 API 密钥。然后,你将被重定向到你的应用程序设置。

在您的应用设置中,编辑您的应用权限

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

作者图片

将您的应用权限读取更新为读取和写入并保存更改。

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

作者图片

更新应用权限后。转到密钥和令牌。在那里,您需要重新生成 API 密钥秘密,并生成访问令牌秘密。

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

作者图片

你需要这些凭证来自动访问你的 Twitter 账户。把它们存放在安全的地方。

就是这样。你都准备好了。是时候让你的机器人在你的本地机器上工作了。

在本地机器上开发你的机器人

为了快速测试和做出更改,您将在本地使用您的机器人。一旦您对它的行为感到满意,您就可以将其打包并作为 AWS Lambda 函数进行部署。为了帮助你打包你的机器人,你将使用一个和一些有用的脚本。

按照以下步骤设置您的本地开发环境:

1.在你的本地机器上克隆这个库

2.转到项目的根目录,创建一个虚拟环境并激活它:

$ python3 -m venv venv 
$ source venv/bin/activate

3.使用 pip 在虚拟环境中安装所需的库:

(venv) $ pip install -r requirements.txt

4.在项目的根目录下创建一个名为.env的文件。将您的 Twitter 应用密钥和令牌放在那里:

ACCESS_TOKEN=<YOUR_ACCESS_TOKEN_HERE>
ACCESS_TOKEN_SECRET=<YOUR_ACCESS_TOKEN_SECRET_HERE>
CONSUMER_KEY=<YOUR_CONSUMER_KEY_HERE>
CONSUMER_SECRET=<YOUR_CONSUMER_SECRET_KEY_HERE>

到目前为止,您的项目结构应该如下所示:

twitter-bot-python-lambda/
├── venv/
│
├── src/
│   ├── lambda_function.py
│   └── tweets.csv
│
├── .env
├── buildpackage.sh
├── createlambdalayer.sh 
├── entrypoint.py
├── LICENSE
├── README.md
└── requirements.txt

以下是这些文件的用途:

  • venv/:包含项目所需库的虚拟环境
  • src/lambda_function.py:包含你的机器人逻辑的 Python 脚本。您将打包这段代码,并将其上传到 AWS Lambda 函数。
  • src/tweets.csv:你的机器人用来发布的预定义 tweets 列表。这也包含在你上传到 Lambda 函数的包中。
  • .env:包含您认证 Twitter API 的凭证的文件。它用于在本地测试你的机器人。
  • buildpackage.sh:将src/的内容打包成一个名为lambda_function.zip的文件的实用函数。您将把这个文件上传到 Lambda 函数。
  • createlambdalayer.sh:将需求中指定的库打包到一个名为layer.zip的文件中的实用函数。你将上传这个文件到一个 Lambda 层。
  • entrypoint.py:您将用于本地测试您的机器人的 Python 脚本
  • requirements.txt:指定项目所需库的标准方式
  • LICENSEREADME.md:存储库的许可和描述

存储库中最重要的文件是lambda_function.py。在其中,您将为您的机器人定义逻辑:

import os
import random
import json
from pathlib import Path
import tweepy
import csv

ROOT = Path(__file__).resolve().parents[0]

def get_tweet(tweets_file, excluded_tweets=None):
    """Get tweet to post from CSV file"""

    with open(tweets_file) as csvfile:
        reader = csv.DictReader(csvfile)
        possible_tweets = [row["tweet"] for row in reader]

    if excluded_tweets:
        recent_tweets = [status_object.text for status_object in excluded_tweets]
        possible_tweets = [tweet for tweet in possible_tweets if tweet not in recent_tweets]

    selected_tweet = random.choice(possible_tweets)

    return selected_tweet

def lambda_handler(event, context):
    print("Get credentials")
    consumer_key = os.getenv("CONSUMER_KEY")
    consumer_secret = os.getenv("CONSUMER_SECRET")
    access_token = os.getenv("ACCESS_TOKEN")
    access_token_secret = os.getenv("ACCESS_TOKEN_SECRET")

    print("Authenticate")
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    api = tweepy.API(auth)

    print("Get tweet from csv file")
    tweets_file = ROOT / "tweets.csv"
    recent_tweets = api.user_timeline()[:3]
    tweet = get_tweet(tweets_file)

    print(f"Post tweet: {tweet}")
    api.update_status(tweet)

    return {"statusCode": 200, "tweet": tweet}

这是lambda_function.py的代码。它有三个部分:导入库、get_tweets函数和lambda_handler函数。

在第一部分中,您导入所需的库。除了一些标准库之外,您还导入了tweepy,您将使用它与 Twitter API 进行交互。然后,将lambda_function.py所在的路径存储在一个名为ROOT的变量中。

import os
import random
import json
from pathlib import Path
import tweepy
import csv

ROOT = Path(__file__).resolve().parents[0]

接下来,你定义get_tweet。它接受两个参数,并返回您的机器人将在 tweet 上发布的文本。看看它是如何工作的:

def get_tweet(tweets_file, excluded_tweets=None):
    """Get tweet to post from CSV file"""

    with open(tweets_file) as csvfile:
        reader = csv.DictReader(csvfile)
        possible_tweets = [row["tweet"] for row in reader]

    if excluded_tweets:
        recent_tweets = [status_object.text for status_object in excluded_tweets]
        possible_tweets = [tweet for tweet in possible_tweets if tweet not in recent_tweets]

    selected_tweet = random.choice(possible_tweets)

    return selected_tweet

返回你的机器人将要发布的文本。它的第一个参数tweets_file是指向csv文件的路径,在这个文件中存储了预定义的 tweets 列表。第二个是excluded_tweets,是来自 Twitter API 的推文列表,您可以使用它来避免发布最近的推文。

最后,您定义了lambda_handler函数:

def lambda_handler(event, context):
    print("Get credentials")
    consumer_key = os.getenv("CONSUMER_KEY")
    consumer_secret = os.getenv("CONSUMER_SECRET")
    access_token = os.getenv("ACCESS_TOKEN")
    access_token_secret = os.getenv("ACCESS_TOKEN_SECRET")

    print("Authenticate")
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    api = tweepy.API(auth)

    print("Get tweet from csv file")
    tweets_file = ROOT / "tweets.csv"
    recent_tweets = api.user_timeline()[:3]
    tweet = get_tweet(tweets_file)

    print(f"Post tweet: {tweet}")
    api.update_status(tweet)

    return {"statusCode": 200, "tweet": tweet}

lambda_handler在 AWS Lambda 功能被触发时执行。它从环境变量中获取 Twitter 凭证,使用 Twitter API 认证您的 bot,获取最后 3 条 tweet,并发布由get_tweet检索的 tweet。

其余的文件您不需要详细查看。但是如果你好奇的话,可以自己去看一看。

现在一切都设置好了,你只需要遵循这个开发工作流程:

  1. lambda_function.py中定义你的机器人的逻辑
  2. 通过从项目的根目录执行$ python entrypoint.py来测试变更

一旦你对你的机器人的行为感到满意,打包代码:

  1. requirements.txt添加您使用过的任何附加库
  2. 从项目的根目录运行sh createlambdalayer.sh 3.8。它将在requirements.txt中为layer.zip中的 Python 3.8+运行时打包库
  3. 从项目的根目录运行sh buildpackage.sh。它将为你的 Lambda 函数生成一个名为lambda_function.zip的 zip 文件

接下来,您将学习如何让您的 bot 进入 AWS Lambda 函数。

将您的 Bot 部署为 AWS Lambda 函数

将你的 bot 设置为 Lambda 函数很简单,但是你必须有条不紊地按照步骤进行。让我们过一遍细节。

首先,您将使用 bot 代码中使用的库(您之前生成的layer.zip文件)创建一个 Lambda 层。其次,您将创建一个 Lambda 函数,上传您的机器人代码(lambda_function.zip),并添加您创建的层。最后,您将添加一个触发器,该触发器将在每天 10.00 (UTC)执行您的 Lambda 函数。)

让我们从创建一个图层开始。

服务下拉菜单中搜索λ。选择第一个选项(λ。)

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

作者图片

点击侧边栏上下的层*。然后,选择*创建图层。**

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

作者图片

创建层部分,为您的层选择一个名称,上传您之前生成的layer.zip文件,并选择 Python 3.8 运行时。

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

作者图片

仅此而已!你刚刚创建了你的 Lambda 层。不错吧。

接下来,您将创建一个新的 Lambda 函数。

选择侧边栏上的功能。然后,点击创建功能。

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

作者图片

接下来,为您的函数选择一个名称,并选择 Python 3.8 运行时。

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

作者图片

你成功了!

接下来,您将上传您的代码,将 Lambda 层添加到您的函数中,并为它定义一个预定的触发器。

要上传代码,进入功能代码区,点击*动作、并选择上传一个. zip 文件。*上传lambda_function.zip并保存您的更改。

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

作者图片

除了代码之外,您还需要添加 Twitter API 键作为环境变量。转到*环境变量,点击编辑,*并将变量添加为键值对:

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

作者图片

接下来,您将向函数添加 Lambda 层。

选择图层图层点击添加一个图层。

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

作者图片

在下一个屏幕上,选择自定义图层并找到您创建的图层。然后点击添加。

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

作者图片

现在,您已经上传了代码,设置了环境变量,并添加了层。您只是缺少执行您的功能的触发器。

选择添加触发器选项开始添加索具。

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

作者图片

在下一个屏幕中,按如下方式填写必填字段:

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

作者图片

此触发器将在每天 10.00 (UTC)执行您的 Lambda 函数。)如果你想添加一个不同的触发器,看看调度表达式文档。

最后,剩下的唯一一件事就是测试你的 Lambda 函数。点击测试按钮进行测试。它会要求您配置一个测试事件,您可以使用默认值。

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

作者图片

如果一切顺利,在您测试您的函数之后,您会看到一个绿色的横幅,上面有执行结果:成功消息。否则,返回到前面的步骤,并确保您正确设置了所有内容。你也可以留下评论,我会尽力帮你解决的。

结论

干得好!你的推特机器人活蹦乱跳,或者说,推特;)

您经历了开发和部署 Twitter bot 的端到端过程。创建和配置 Twitter 应用程序、在本地机器上开发 bot 的逻辑、创建和配置 AWS Lambda 函数来部署 bot 是一条漫长的道路。

在本教程中,您已经学习了:

  • 什么是推特机器人,它们能做什么,不能做什么
  • 你有哪些选项来制作推特机器人
  • 如何在你的本地机器上使用 Python 开发一个机器人
  • 如何使用 AWS Lambda 函数将您的 bot 部署为无服务器函数

如果你觉得这有用,请在 Twitter 上表达你的爱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值