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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

如何产生数据科学项目想法

原文:https://towardsdatascience.com/how-to-generate-data-science-projects-ideas-e95a95b33a71?source=collection_archive---------19-----------------------

你可以从 3 个实用的方法开始

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

我应该展示什么样的项目才能在面试中脱颖而出?

在面试中,展示一个伟大的项目是很重要的。虽然这可能不是在面试中成功的最重要的因素,但它绝对是在其他候选人中脱颖而出的加分项。

然而,在进入如何为你的项目找到一些好主意的细节之前,我会告诉你为什么这在你的面试中很重要。

假设您是竞争数据科学家职位的候选人之一。你可能会担心面试中要问的技术或机器学习知识问题。因此,你花了很多精力去修改你的课堂笔记,或者不断地用谷歌搜索来回答突然出现在你脑海中的任何疑问。你在步入面试室之前,努力把所有的知识都吞下去,这样你会感觉更自信。

面试的时候,面试官用一大堆刁钻的问题轰炸你,你开始冒汗。你变得越来越焦虑,因此,大多数面试问题你只是试图猜测。最终,在你的脑海中,你会想,哦,我的天哪!我这次面试会失败的。因此,你正在努力思考在面试结束前应该问什么问题,这样你才能给面试官留下一个好印象。

现在,如果我告诉你,有一种方法可以减少面试官问的问题,这样你就有更大的机会通过面试。你会感兴趣吗?

不要让面试官一直问你一些你无法控制的问题,你可以让他问你一些你已经准备好的问题。你可能会问,我该怎么做呢?

你至少需要一个定义明确的项目,不是学校的项目,至少是能引起讨论的有趣项目。因此,你只需要准备好面试时他们可能会问你的所有问题。如果你足够聪明,你可以有意省去一些项目的关键点,让他们来问你。

如果你的项目足够有趣,并且你准备充分,讨论的大部分时间将会被与你的项目相关的问题占据。现在,让我们从引用开始。

所有的想法都源于其他的想法——安尼施·卡普尔

关于解决什么问题的想法其实并不难找到。有时候,你可能没有注意到你在生活中面临的一些问题,或者一些你很想知道的问题。这些问题已经被认为是很好的想法或问题。

在这篇文章中,我将展示一些方法,在这些方法中你可以找到一些有趣的问题来解决。

1.过去的项目

如果你要为一家金融科技公司面试,并且你做过一个与欺诈相关的项目。答对了。你可以只展示这个项目,但一定要确保有一些你认为对公司有价值的方面。

但是,如果你认为你所做的特定项目不够好,或者你对哪些方面需要改进有一些想法,请这样做!这是因为这可能是你大放异彩的机会。

例如,对于您现有的欺诈项目,您只需使用互联网上的一些常用功能,并将其应用到您的模型中。但现在,你有一种感觉,如果这个人在平台上有一张个人资料图片,他或她进行欺诈的机会就会更小,一定要尝试一下!虽然大多数时候这可能不是一个很好的特点,但只要向面试官展示你确实有一些打破常规的思维技巧,他们就会有兴趣了解你是如何做到的!

这是因为特征工程就像是实验和拥有领域知识的结合。因此,如果你认为这个特性有意义,那就试试吧!

2.互联网上已有的想法

如果你没有读过我在 Airbnb 上的文章,这篇文章也刊登在《亚洲科技》上,请点击这个链接

这是我如何从网上想到这个主意的。有一个叫做的网站。我发现在互联网上可以找到的关于 Airbnb 的大多数项目都在使用这个网站的数据集。有趣的是,马来西亚的数据集没有出现在那里。

因此,如果我自己从 Airbnb 收集数据,并进行分析,这将是一个很好的主意。我不仅能够展示我能够独自完成整个流程(从收集数据、分析和建模),而且能够提供价值。

我发现的差距是缺乏马来西亚的数据集和我能够提供的价值。这里我指的价值是为 Airbnb 的投资者提供一种方式,让他们可以找到应该投资的领域。

简而言之,如果你能够找出你正在解决的问题中的差距,这肯定会让你的解决方案看起来更有趣。

3.现实生活中的问题

这个问题可能你甚至你的朋友都面临。我在我的 Airbnb 文章中提供的额外价值,其实就是我朋友面临的问题。他问我是否有办法解决这个问题,我接受了挑战。

此外,你可以解决你的一些疑惑。例如,您有兴趣知道哪家公司在马来西亚的汽车市场拥有最大的市场,以及每家公司明年的销售额是多少。遵循我在上一篇文章中提到的三个步骤,识别并阐明问题,然后进行分析和建模。

不仅如此,我们非常欢迎你解决你目前面临的问题。如果你正在解决你所面临的问题,你会对问题本身有更深刻的理解。因此,您将更容易得出一些对您的模型有用的特性。

最后的想法

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

创意是廉价的。想法很容易。想法是共同的。每个人都有想法。想法被高度高估了。执行才是最重要的。— 凯西·奈斯塔特

想法是廉价的,执行才是最重要的。非常感谢你读到最后,下周见!

关于作者

Low 魏宏是 Shopee 的数据科学家。他的经验更多地涉及抓取网站,创建数据管道,以及实施机器学习模型来解决业务问题。

他提供爬行服务,可以为你提供你需要的准确和干净的数据。你可以访问这个网站查看他的作品集,也可以联系他获取抓取服务

你可以在 LinkedInMedium 上和他联系。

如何用 Python 生成 MS Word 表格

原文:https://towardsdatascience.com/how-to-generate-ms-word-tables-with-python-6ca584df350e?source=collection_archive---------20-----------------------

30 秒内自动生成报告

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

照片由斯科特·格雷厄姆Unsplash 上拍摄

在讨论自动化的时候,Python 是经常被提到的。与其他编程语言相比,易于使用的语法、大量的库和面向脚本的语言结构使 Python 在自动化方面更胜一筹。

小型和大型公司每天都使用 Word 和 Excel 等 Microsoft Office 工具生成报告。在本文中,我将提供关于通过 Python 在 MS Word 中生成数据表的端到端解释。

我将考虑一个场景,其中我们有许多新闻文章,我们需要生成一个 Word 文档,其中包含从这些文章中提取的统计数据。这些统计数据包括:字数句子数平均单词长度*。*

属国

对于这个例子,我使用了 Python 3.7 。您需要安装的唯一依赖项是 python-docx 。您可以通过在您机器的终端中提交以下命令来安装这个依赖项。

pip install python-docx

从文章中提取统计数据

对于这个例子,我从 CNN 中随机选取了两篇体育文章。为了提取统计数据,我编写了下面的describe_text(text)函数。这个函数接受一个字符串参数(文章、评论等等)并返回一个统计数据字典,比如字符数、字数、句子数等等。

生成表格

首先你需要通过Document类实例化一个文档对象。对于每篇文章,通过调用describe_text(text)函数提取统计数据,并通过add_table(row, columns)函数创建一个表格。对于字典中的每个 stat,通过add_row()函数创建一行并添加相应的 stat。最后,通过调用add_page_break()函数在末尾添加一个分页符,以便在新的页面中显示每个表格。

关于纯 Python 函数的更多文本统计,请查看我下面的另一篇文章。

[## 用于即席文本分析的 10 个纯 Python 函数

不使用外部库压缩文本数据

towardsdatascience.com](/10-pure-python-functions-for-ad-hoc-text-analysis-e23dd4b1508a)

结论

用 Python 生成 word 文档很容易。您所需要的就是 python-docx 库。这个库提供了在 MS Word 中完成大多数(但不是全部)事情的可能性。

以我的经验来看,我在几秒钟内就生成了数千份两位数页数的 Word 文档。我这样做是为了以更易读的格式组织日志数据,或者在分析产品评论文本数据后呈现书面发现。

[## 新手通常误用 Python 的 5 种场景

更好地利用 Python

towardsdatascience.com](/5-scenarios-where-beginners-usually-misuse-python-98bac34e6978)

如何在 Java 中生成拼花文件

原文:https://towardsdatascience.com/how-to-generate-parquet-files-in-java-64cc5824a3ce?source=collection_archive---------19-----------------------

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

马丁·范·登·霍维尔在 Unsplash 上的照片

Parquet 是 Apache 为 Hadoop 基础设施开发的一种开源文件格式。嗯,它最初是 Hadoop 的一种文件格式,但后来变得非常流行,甚至 AWS 等云服务提供商也开始支持这种文件格式。这只能意味着拼花地板应该做一些正确的事情。在这篇文章中,我们将看到什么是 Parquet 文件格式,然后我们将看到一个简单的 Java 例子来创建或编写 Parquet 文件。

拼花文件格式介绍

在传统方法中,我们将数据存储为行。但是 Parquet 采用了一种不同的方法,它在存储数据之前将数据展平成列。这允许更好的数据存储压缩,也允许更好的查询性能。此外,由于这种存储方法,该格式可以处理具有大量列的数据集。

由于所有这些特性,大多数大数据项目都使用 Parquet 文件格式。拼花文件还减少了所需的存储空间。在大多数情况下,我们对某些列使用查询。这种文件格式的优点是一列的数据都是相邻的,所以查询运行得更快。

由于文件格式的优化和流行,甚至亚马逊也提供内置功能,在保存到 S3 (其中充当数据湖)之前,将传入的数据流转换为拼花文件。我在亚马逊的“雅典娜”和一些 Apache 服务中广泛使用了这个。关于 Parquet 文件系统的更多信息,可以参考官方文档。

依赖关系

在我们开始写代码之前,我们需要注意依赖关系。因为这是一个 Spring Boot Maven 项目,我们将在 pom.xml 文件中列出我们所有的依赖项:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.parquet</groupId>
        <artifactId>parquet-hadoop</artifactId>
        <version>1.8.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-core</artifactId>
        <version>1.2.1</version>
    </dependency>
</dependencies>

如您所见,我们正在添加 Spring Boot 启动包和几个其他 Apache 依赖项。对于这个例子,这就是我们所需要的。

属性

和往常一样,我们有一个 application.properties 文件,我们在其中指定所有属性。对于这个例子,我们只需要两个属性:一个指定模式文件的路径,另一个指定输出目录的路径。稍后我们将了解更多关于该模式的内容。因此,属性文件如下所示:

schema.filePath=
output.directoryPath=

因为这是一个 Spring Boot 应用程序,我们将使用 @Value 注释来读取代码中的这些值:

@Value("${schema.filePath}")
private String schemaFilePath;

@Value("${output.directoryPath}")
private String outputDirectoryPath;

拼花文件的模式

我们需要指定将要写入 Parquet 文件的数据的模式。这是因为当创建一个 Parquet 二进制文件时,每一列的数据类型也会保留。基于我们在模式文件中提供的模式,代码会在将数据写入 Parquet 文件之前相应地格式化数据。

在这个例子中,我尽量保持简单,正如您从下面的模式文件中看到的:

message m { 
    required INT64 id; 
    required binary username; 
    required boolean active; 
}

让我解释一下这是什么。第一个参数的类型是 INT64,这是一个整数,它被称为 id 。第二个字段是二进制类型,它只是字符串。我们称之为用户名字段。第三个是名为活动的布尔字段。这是一个非常简单的例子。但是不幸的是,如果你的数据有一百列,你必须在这里声明所有的列。

字段声明前的必需的关键字用于验证,以确保为该字段指定了值。这是可选的,对于非必填字段,您可以删除它。

拼花作家

声明时间,我没有写这两个类,我在这一节讨论。几个月前,当我研究这个的时候,我在 StackOverFlow 上发现了这两个类。我不知道这是谁写的,但我一直在到处使用这两个类。但是是的,我已经重新命名了这些类来适应这个项目。

首先是 CustomParquetWriter 类。这扩展了 Apache 提供的 ParquetWriter 类。该类的代码如下:

public class CustomParquetWriter extends ParquetWriter<List<String>> {

    public CustomParquetWriter(
            Path file,
            MessageType schema,
            boolean enableDictionary,
            CompressionCodecName codecName
    ) throws IOException {
        super(file, new CustomWriteSupport(schema), codecName, DEFAULT_BLOCK_SIZE, DEFAULT_PAGE_SIZE, enableDictionary, false);
    }
}

这里没什么好说的。下一个是 CustomWriteSupport ,您可以在上面的代码片段中看到它是 super()构造函数的第二个参数。这是很多事情发生的地方。您可以检查完整类的 repo ,看看它做了什么。

基本上,该类检查模式以确定每个字段的数据类型。之后,使用 RecordConsumer 类的一个实例,数据被写入文件。我不会过多谈论这两个类,因为 a)它们不是我写的,b)代码简单到任何人都能理解。

为拼花文件准备数据

让我们准备一些数据来写入 Parquet 文件。字符串列表表示拼花文件的一个数据集。列表中的每一项都是模式文件中更正字段的值。例如,假设我们有一个如下所示的列表:

查看 scheme 文件,我们可以看出数组中的第一个值是 ID,第二个值是名称,第三个值是活动字段的布尔标志。

因此,在我们的代码中,我们将有一个字符串列表来表示多行。是的,你没看错,这是一个字符串列表:

List<List<String>> columns = getDataForFile();

让我们看看这个函数,看看我们是如何生成数据的:

private List<List<String>> getDataForFile() {
    List<List<String>> data = new ArrayList<>();

    List<String> parquetFileItem1 = new ArrayList<>();
    parquetFileItem1.add("1");
    parquetFileItem1.add("Name1");
    parquetFileItem1.add("true");

    List<String> parquetFileItem2 = new ArrayList<>();
    parquetFileItem2.add("2");
    parquetFileItem2.add("Name2");
    parquetFileItem2.add("false");

    data.add(parquetFileItem1);
    data.add(parquetFileItem2);

    return data;
}

这很简单,对吧?那我们继续吧。

获取模式文件

正如我们已经讨论过的,我们有一个模式文件。我们需要将该模式放入代码中,特别是作为 MessageType 类的实例。让我们看看如何做到这一点:

MessageType schema = getSchemaForParquetFile();

...

private MessageType getSchemaForParquetFile() throws IOException {
    File resource = new File(schemaFilePath);
    String rawSchema = new String(Files.readAllBytes(resource.toPath()));
    return MessageTypeParser.parseMessageType(rawSchema);
}

如您所见,我们只是将文件作为字符串读取,然后使用 Apache 库提供的 MessageTypeParser 类中的 parseMessageType() 方法解析该字符串。

让拼花作家

这几乎是整个过程的最后一步。我们只需要获得我们之前讨论过的 CustomParquetWriter 类的一个实例。这里,我们还提供了 writer 将写入的输出文件的路径。这方面的代码也很简单:

CustomParquetWriter writer = getParquetWriter(schema);

...

private CustomParquetWriter getParquetWriter(MessageType schema) throws IOException {
    String outputFilePath = outputDirectoryPath+ "/" + System.currentTimeMillis() + ".parquet";
    File outputParquetFile = new File(outputFilePath);
    Path path = new Path(outputParquetFile.toURI().toString());
    return new CustomParquetWriter(
            path, schema, false, CompressionCodecName.SNAPPY
    );
}

将数据写入拼花文件

这是最后一步,我们只需将数据写入文件。我们将循环我们创建的 list 列表,并使用我们在上一步中创建的 writer 将每个列表写入文件:

for (List<String> column : columns) {
    writer.write(column);
}
logger.info("Finished writing Parquet file.");

writer.close();

差不多就是这样。您可以转到输出目录并检查创建的文件。例如,这是我运行这个项目后得到的结果:

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

如果你想直接从工作示例开始,你可以在我的 Github repo 中找到 Spring Boot 项目。如果你有任何疑问,欢迎在评论中问我。

最初发表于 2020 年 4 月 7 日 https://blog.contactsunny.com。

如何用 Python 生成伪随机数据集:用 Numpy & Faker 从头开始

原文:https://towardsdatascience.com/how-to-generate-pseudo-random-datasets-in-python-start-from-scratch-with-numpy-faker-c5661e3bc58b?source=collection_archive---------20-----------------------

当数据丢失时,创建它!(负责任地)

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

照片由帕特里克·福尔Unsplash 拍摄

介绍

您即将开始下一个数据项目,但是您立即遇到了一个障碍:您希望使用的数据不容易访问。

发生这种情况有多种原因,例如:

  1. 您试图访问的数据是机密的,不能共享
  2. 数据可以共享,但是签订数据共享协议在时间和金钱上都是昂贵的
  3. 你获得了一些数据,但样本量太小,你无法根据代表性的数据源做出任何相关的统计推断或建模
  4. 您一直在寻找公共在线数据集,但就是找不到符合您特定需求的数据集

这些是同样面临的共同问题:

a)希望为其下一个数据解决方案开发 MVP 的企业家

b)希望模拟数据可视化解决方案的数据分析师

c)希望为客户开发概念验证解决方案的分析顾问

无论是哪种用例,本文的目标都是向您展示一个简单的例子,说明如何使用 Python 来生成伪随机数据集,其目的是尽可能地模拟真实世界的数据。

尽管生成伪随机数据将不可避免地具有给定的限制:

  1. 数据中人为构建的相关性和相互关系
  2. 样本数据集构建方式的固有偏差(通常由作者驱动)
  3. 缺失混杂因素和其他关键变量

为了让您的数据项目获得初步启动,并让您能够向投资者或您的下一个客户展示您的数据解决方案的潜力,该活动可能至关重要。

这项活动甚至可能说服你的同事与你分享真实世界的数据,这是你的最终目标。在咨询行业中,这样的同行是您的实际客户和数据的看门人,一旦数据解决方案的初步探索的可行性得到积极评估,这种情况就会经常发生。

现在让我们来看看 Python 中一个简单的数据生成工作流,在这个工作流中,您将主要利用 Numpy 和 Faker 包。

第一步:掌握正确的事实

假设您必须生成一个数据集,该数据集包含来自特定细分市场的保险索赔请求列表。您不是保险专家,并且希望得到至少 200,000 行与现实至少有一些相似之处的保险索赔,以便您可以将这些数据用于您将在前端创建的应用程序的示例用户界面。

你在网上找,你什么也没找到,因为你的新应用将覆盖一个你认为是行业空白的市场。

我称之为“询问专家”是一个很好的起点。实际上,这可能意味着:

  1. 向拥有相关行业经验或背景知识的朋友和同行伸出援手
  2. 在网上寻找行业报告、市场展望或相关文章

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

来源:作者

这项活动的目标是了解尽可能多的背景信息,以便以尽可能接近您试图代表的细分市场现实的方式生成数据。在本例中,这可能意味着询问数据的地理划分(即,如果您所在市场中 30%的索赔来自澳大利亚和日本,您可能希望您的数据反映这一点)以及与手头问题相关的任何其他问题。

这里的关键是不断地以迭代的方式收集有用的信息,这样当您生成数据时,您就可以返回到您的源并对照它们检查您的结果,并相应地调整您的数据生成活动。

为了获得有意义的生成数据样本,这可能是最重要的一步,而且这肯定需要相当长的时间,因为你会想要考虑各种变量和关系。

一旦完成了第一个关键步骤,就该使用一些 Python 代码来生成数据了!

步骤 2:生成数据

现在让我们看一下生成来自客户的 200,000 行随机保险索赔所需的代码。

  1. 导入相关的包:作为第一步,您需要导入相关的 Python 包。您可以使用熊猫numpy 操作数据,请求BeatifulSoup 处理网页, randomFaker生成随机数据。在进行过程中,您将会用到所有这些包。当你开始设置的时候,不要忘记初始化一个 faker 生成器。

2。生成 200,000 个随机保险客户和相关变量

**2.1 客户名称、地址、公司名称、索赔原因、保密等级

您可以生成的前五个变量是客户姓名、家庭地址、公司(假设每个客户都是公司的雇员)、保险索赔的原因以及索赔所附带的数据保密级别。

在这种情况下,您还隐式地定义了样本大小 n_names=200,000 。您可以使用 fake.name() 生成 n_names 名字,并存储到名字列表中*。*还可以使用 fake.company()fake.address() 生成假的客户地址和公司名称。

假设步骤 1 中的专家告诉您,提出索赔的常见原因类型是“医疗”、“旅行”、“电话”或“其他”。对于这些原因中的每一个,都有一定程度的数据保密性(从“非常低”到“高”),这也是您需要考虑的。您可以通过定义一个字典(这里称为claim _ confidential _ dict)来做到这一点,该字典存储每个索赔原因并将其映射到其相对数据机密性级别。

假设您还阅读了一份声誉良好的行业报告,该报告指出,所有索赔的分布严重偏向医疗索赔原因,这占所有索赔原因的 55%,其他索赔原因各占其余 45%的份额。然后,您可以使用 random.choice 函数创建一个 claim_reasons 列表,设置列表的长度等于 n_names (200,000) 以及使用 p 参数挑选给定索赔原因的概率。该参数是包含每个原因的可用概率的列表,允许我们提取 200,000 个索赔原因的有意义分布,以与我们的客户名称配对。

最后,您还可以生成一个包含所有保密级别的列,然后映射到您刚刚生成的 200,000 claim_reasons 列。为此,您可以使用之前定义的claim _ confidential _ dict字典作为查找参考,在索引 i 处生成一个保密级别,该索引与 claim_reasons 列表的相同索引位置配对。

创建了所有五列之后,现在可以将它们放入一个名为 *df 的 pandas DataFrame 对象中。*并调用 df 。head()来可视化全新的 200,000 行乘 5 列数据集的前 5 行。

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

图片:作者

**2.2 国家、销售经理、索赔金额

现在让我们看看如何添加一个国家列,它标识客户的国籍,以及客户的索赔金额和处理索赔所需的指定销售经理。

你希望这家保险公司在世界各地开展业务,因此假设 200,000 名客户的样本具有国家频率,该频率等于特定客户来自 X 国的概率,给定其总人口。

因此,您可以使用列出所有国家和相关人口的维基百科页面来确定从特定国家挑选客户的概率。您首先需要导入一个国家列表及其人口列表。

让我们将代码分解如下:

你首先定义 URL 变量,它指向在线数据源。然后建立两个空列表, countries_listpop_list,,用于存储来自网页的数据。

在 Python 中,你可以用漂亮的汤和请求包抓取网页。可以用 request.get 方法获取相关的 URL 内容。然后,您可以用*提取它的文本。text 方法,*最后把它解析成一个漂亮的 Soup 对象。

然后,为了在 HTML 中定位包含列表以及国家和人口的表格,您可以检查页面的代码(这可以通过在 Google Chrome 上单击 Ctrl + Shift + I 来完成),并看到您感兴趣的表格元素有一个类 wikitable。然后您可以迭代它的 rows ("tr ")元素,对于表中的每一行(代码中的数据组件),您可以提取相应的国家人口元素。

提取后,您可以将它们添加到 countries_listpop_list 中,并移动到下一个元素,直到到达表的末尾。

通过接下来的三行代码,您可以获得从 Wikipedia 页面返回的按人口排列的前 100 个国家(网页上的表格有已经排序的国家和人口列表,因此通过选择列表的前 100 个元素,您可以立即选择人口最多的国家),以及相关人口规模的列表。

然后,通过将每个国家的人口除以前 100 个国家的总人口来获得相应的概率,并将这些概率用作选取随机国家的权重,以附加到新创建的国家列,该列插入到 df 数据集中。

最后两行代码还为数据集的每个索赔分配了一个索赔管理器,假设总共有 5 个 claim _ managers(简化),被分配一个索赔的概率相等。

您知道需要生成一个“索赔金额”列。你知道每笔索赔金额往往因索赔原因而异。

以下是您从另一份行业报告中获得的每个索赔原因类别的典型范围:

a)医疗:1300-3200 美元

b)差旅费:300-900 美元

c)电话:200-270 美元

d)其他:1-100 美元

如何根据索赔原因类别,将给定范围内的索赔金额分配给每一行?

您可以初始化一个空的“索赔金额”列,然后用分配给每个类别的给定范围内的随机整数填充它。索赔金额通过 numpy 提供的 *np.random.randint(低,高)*生成。然后你可以在数据集上调用 df.head() 来看一下你到目前为止得到了什么。

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

图片:作者

2.3 已付保费和索赔请求输出

您要创建的最后三列是:

  1. *Category Premium,*基本上是一个列,记录每个客户在给定索赔原因类别中支付的平均保险费金额
  2. *保费/金额比率,*基本上是登记索赔金额与平均类别保费的比率的列
  3. *索赔请求输出,*基本上是一个“是”/“否”列,说明索赔金额最终是否由保险公司承保。

让我们假设您的市场研究也发现,在您给定的细分市场中,支付的保费平均比给定类别中的平均索赔额高 8 倍。假设您还知道您的数据集想要一家保险公司,出于效率原因,该公司自动支付平均类别保费的 6%或更低的索赔额(因为该公司不想花时间验证某项索赔背后的合理性,因为小额金额不值得为此付出巨大努力)。

您可以通过使用 pandas groupby 然后在索赔原因列使用 mean()调用来计算您的平均索赔金额,如下所示。然后,您可以将每个平均索赔额乘以 8,以获得您的平均类别保费,并将它们存储在一个列表中。完成后,您可以创建一个新的 Category Premium 列,根据特定行的索赔原因,列出每行的平均保费金额。

然后,您可以通过简单地将索赔金额列除以类别保费列来创建保费与金额比率列。

如果按类别细分,你会发现平均而言,每项索赔占该类别保费的 13%左右

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

现在让我们计算最后一列,即索赔请求输出,方法是为所有保费/金额比率低于 6%的索赔分配一个“Yes”值。您可以使用 np.where 函数轻松创建新列,并通过调用控制台来可视化整个数据集。

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

图片:作者

第三步:外卖

你完了!您已经成功地生成了 200,000 行和 11 列的伪随机数据,准备用于项目。

这个数据集绝不是一个封闭的解决方案,您可以根据自己的数据生成需求扩大或缩小这个方法。

记住关键的一步是第一步。在这里,您试图收集尽可能多的关于问题的上下文知识,这样,即使您仍然得到随机的行,您也可以在第一次尝试中建立一定程度的逻辑和连贯性。

我鼓励您将数据生成作为一种迭代练习。Python 是一种很好的从头构建数据的编程语言,但是当你在代码中灌输关于用例的技能和直觉时,真正的价值就会增加,这样输出就可以尽可能地(伪随机)。

从这个意义上说,主题专家、在线资源和你的团队是你最好的助手。

访问我的免费数据科学资源清单 这里

[## 通过我的推荐链接加入 Medium-Edoardo Romani

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

edo-romani1.medium.com](https://edo-romani1.medium.com/membership)

如何从头开始生成随机变量(不使用库)

原文:https://towardsdatascience.com/how-to-generate-random-variables-from-scratch-no-library-used-4b71eb3c8dc7?source=collection_archive---------7-----------------------

我们将通过一个简单的伪随机生成器算法,展示如何使用它来生成重要的随机变量

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

图片来源 : Pixabay(免费用于商业用途)

介绍

随机变量是数据科学、机器学习和统计建模不可或缺的一部分。它们在我们周围采用人工智能或深度神经网络的系统和服务中发挥着越来越重要的作用。

随机变量的概念和性质用于

  • 回归技术,
  • 像随机森林,梯度推进,
  • 深度学习,
  • 聚类算法,
  • 自然语言处理,
  • 强化学习,
  • 人工智能和博弈论中的高级搜索算法。

这篇文章不是关于随机变量的属性和效用。为此,鼓励读者参考其他优秀资源。

[## 理解随机变量

随机变量在统计学和概率学中非常重要,如果任何人想要…

towardsdatascience.com](/understanding-random-variable-a618a2e99b93) [## 深度学习背景下的概率统计解释

这篇文章是为希望获得概率和统计知识的深度学习初学者而写的。

towardsdatascience.com](/probability-and-statistics-explained-in-the-context-of-deep-learning-ed1509b2eb3f)

这篇文章旨在展示如何通过简单的编程从零开始生成随机变量**。**

注意短语“从零开始”。意思是我们不会调用第三方库或者子程序。相反,我们将编写我们自己的简单函数来生成这样的随机变量。**

你能做到以下几点吗?

  • 加法、乘法、除法和模数
  • 正弦、余弦和对数运算

我们将展示如何使用这些基本的数学运算来生成,

  • 均匀随机变量
  • 指数分布的随机变量
  • 正态分布的随机变量

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

图片来源:imgflip.com 作者生成的模因

这个练习将让你对我们必须使用的伪随机数的质量有一个直观的了解,并且展示常见的概率分布是如何从一个发展到另一个的。

等等,我说的是“-随机”吗?让我们看看我是什么意思。

在软件领域,你必须拥抱“伪”

大自然母亲提供了许多真实随机过程的例子。核衰变就是这样一个例子。

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

图片来源:维基媒体(知识共享许可)

***原来真正的随机过程只能用所谓的 硬件随机发生器 *一种从物理过程中产生随机数的设备来模拟和建模,而不是通过算法。这种设备通常基于产生低水平随机“噪声”信号的量子力学现象,例如热噪声、光电效应、光束干涉和其他量子现象。

不幸的是,在日常计算系统中,以及在算法设置中,我们只遇到所谓的伪随机数 。它们不像自然过程那样是真正随机的,在某种程度上,它们是确定的。一个种子数被提供给一个算法,该算法生成一系列这样的数。

*** [## 随机的。ORG -随机性和随机数介绍

本页解释了为什么很难(也很有趣)让计算机产生合适的随机数。

www.random.org](https://www.random.org/randomness/)

一个非常有名的人对这种方法说了这样的话!

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

图片来源:作者在 imgflip.com 创作的带有维基百科图片的模因

然而,对于所有实际的计算目的,如果这些“伪随机数”不表现出明显的重复模式或可预测性,它们就足够了。

所有主要的编程语言中都有复杂而精致的伪随机生成器。在许多情况下,他们使用特殊类型的数学,如 模运算马森纽斯特 。下面以 Python 的[**random**](https://docs.python.org/3/library/random.html) 模块的链接为例。

围绕用于加密系统的 密码安全伪随机发生器 还有一个完全独立的研发分支。想象一下,如果有人能猜出或梳理出为您的 Google 密码生成散列密钥的确切算法,会发生什么?

[## 为什么安全系统需要随机数

如果你一直在关注最近关于美国国家安全局和英国政府进行技术间谍活动的新闻…

blog.cloudflare.com](https://blog.cloudflare.com/why-randomness-matters/)

但是我们不关心如此复杂的事情!

在本文中,我们将借助基本的数学运算编写一个非常简单的程序来构建我们的随机生成器。实际上,我们将使用一种叫做 线性同余生成器 的方法,这种方法在伪随机生成的旧时代很流行。

我们程序的输出将采取简单的 均匀分布 的形式。此后,我们将根据这个随机发生器,使用统计定理和变换来产生对应于其他分布的随机变量。

均匀随机发生器

线性同余发生器(“坏”版本)

我们将使用如下的线性递归关系,

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

并且,均匀随机变量是在缩放之后获得的,

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

我们还需要一个种子号来开始生成过程。这里有一个简单的 Python 函数来完成这个任务,

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

到目前为止,我们所做的只是一些乘法、加法、模数和除法。很简单的算术,对吧?

让我们看看这个简单的函数是如何执行的。注意,我们命名为pseudo_uniform_bad是因为我们知道乘数和模数的选择相当糟糕。

让我来说明我的意思。让我们用seed=3生成 1000 个随机数,并绘制它们的直方图来查看分布。

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

不太好,嗯?我们期望看到 0 和 1 之间的均匀分布,但却得到了一些数字补丁。

事实证明,我们可以很容易地通过改变乘数和模整数来改善它。

线性同余发生器(更好的版本)

让我们放大这些整数的大小。

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

现在,如果我们生成 10,000 个随机数,并绘制它们直方图,看起来如下:

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

广义均匀随机发生器

现在,构造广义均匀随机发生器函数是非常容易的,

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

这里有一万个-5 到+7 之间的均匀随机分布的数。

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

其他随机函数和分布

既然我们可以编写一个像样的均匀随机生成器,我们可以很容易地扩展它,为大量的统计分布构造随机变量生成器。

样品拾取器

例如,使用 uniform generator,我们可以快速制作一个样本选取器,它将从给定的项目列表中选取一个随机样本(不需要数字,任何类型的对象都可以)。

注意,我们还使用当前系统时钟返回的浮点值的小数部分作为该函数的种子。

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

我们可以用一个公平掷骰子的模拟来测试它,掷骰子的六个面作为列表传递给函数,

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

伯努利分布

这是一个离散的概率分布,它可以被认为是任何一个提出是非问题的实验的一组可能结果的模型。单个参数表示为p——成功的概率。

我们的伯努利生成器代码看似简单,

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

二项分布

它是一系列 n 个独立实验中特定数量成功的离散概率分布,每个实验都提出一个是非问题,并且每个实验都有自己的布尔值结果:成功概率 p 或失败概率q= 1p

我们可以很容易地从均匀发生器中编码出一个二项随机变量发生器,

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

假设翻转 100 个装载的硬币,每个硬币的头部概率为 0.75,这样的尝试/实验重复 15 次。每个实验中的头数由我们的函数给出,

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

泊松分布

它是一个离散的概率分布,表示在固定的时间或空间间隔内发生的给定数量的事件的概率,如果这些事件以已知的恒定平均速率发生,并且独立于自上次事件以来的时间。

我们可以使用我们的统一生成器来编码泊松生成器,如下所示,

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

下面显示了三个不同速率参数的模拟结果,其中使用上面的函数产生了 10,000 个随机变量,并且绘制了事件的计数,

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

指数分布

是一个泊松点过程中事件之间时间的连续概率分布,即事件以恒定的平均速率连续独立发生的过程。

为了从均匀分布生成指数分布,我们可以使用一种称为“ 逆变换方法 ”的强大技术。我们不需要在这里详述理论细节,但最终这种方法通过简单的数学变换将两种类型的分布联系起来。

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

这是一个 10,000 个随机变量的直方图,比率参数为 0.1,

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

正态分布

正态或高斯分布毫无疑问是最著名的统计分布(主要是因为它与中心极限定理的联系)。

事实证明,使用一种叫做 Box-Muller 变换 的特殊方法,我们可以从均匀随机生成器生成正态分布的随机变量。

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

这是三组不同参数的模拟结果,

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

摘要

在本文中,我们展示了如何从一个简单的线性同余生成器开始,通过简单的编程来生成均匀分布的随机数。此后,我们展示了如何使用基本的数学运算和转换从这个基础生成器构建一个更复杂的统计分布集。

我们能够为多种广泛使用的概率分布构建函数,而无需使用任何标准库,如 NumPy 包的**np.random**模块。

如果你已经走到这一步,这里有一个来自 Cloudflare 的有趣视频,它在旧金山的办公室使用一系列熔岩灯,为他们的加密系统产生随机性。

A lso,你可以查看作者的 GitHub 知识库获取机器学习和数据科学方面的代码、思想和资源。如果你和我一样,对人工智能/机器学习/数据科学充满热情,请随时在 LinkedIn 上添加我在 Twitter 上关注我

[## Tirthajyoti Sarkar - Sr .首席工程师-半导体、人工智能、机器学习- ON…

通过写作使数据科学/ML 概念易于理解:https://medium.com/@tirthajyoti 开源和有趣…

www.linkedin.com](https://www.linkedin.com/in/tirthajyoti-sarkar-2127aa7/)***

如何生成合成表格数据?

原文:https://towardsdatascience.com/how-to-generate-synthetic-tabular-data-bcde7c28038a?source=collection_archive---------20-----------------------

生成敌对网络的 Wasserstein 损失

在过去的一篇博客文章中,我已经介绍了什么是生成性对抗网络,以及我们如何使用它们来生成设计为私有的数据,在这篇文章中,我介绍了 T2 的普通 GAN 和条件 GAN。但是,尽管非常有前景,但这些生成性对抗网络的训练非常具有挑战性,并且它们生成的数据没有足够的质量用于 ML 工作负载作为真实数据的替代。还有许多其他有趣的 GAN 架构,其中一些引入了更稳定的训练和更少的模式崩溃倾向的改进,今天我将涵盖 Wasserstein GAN

瓦瑟斯坦·甘

Wasserstein GAN 被认为是 Ian good fellow 提出的生成性对抗网络的延伸。WGAN 是由 Martin Arjovsky 在 2017 年推出的,承诺在训练模型时提高稳定性,并引入能够与生成事件的质量相关联的损失函数。听起来不错吧?但是和 WGAN 引入的核心区别是什么?

WGAN 有什么新功能?

GAN 没有使用“鉴别器”的概念来分类或预测某个生成事件的真实或虚假的概率,而是引入了“评论家”的概念,简而言之,该概念对给定事件的真实或虚假进行评分。这种变化主要是由于当训练生成器时,理论上我们应该寻求在训练数据集中观察到的数据分布和在生成的例子中观察到的分布之间的距离的最小化。

我们可以将 WGAN 引入的主要差异总结如下:

  1. 使用从 Wasserstein 距离导出的新损失函数。
  2. critic 函数每次梯度更新后,将权重箝位在一个小的固定范围内,[-c,c]。这允许实施 Lipschitz 约束。
  3. 向歧视者——批评家提出的替代方案。
  4. 使用线性激活函数作为 Critic 网络的输出线性。
  5. 生成器和评论家网络的更新次数不同。

好处

前面提到的和 WGAN 引入的变化在训练这些网络时带来了一系列好处:

  • 与例如最初提出的 GAN 相比,WGAN 的训练更加稳定。
  • 它对模型架构的选择不太敏感(生成器和评论家的选择)
  • 此外,受超参数选择的影响较小,尽管这对于获得良好结果仍然非常重要。
  • 最后,我们能够将批评家的损失与生成事件的整体质量联系起来。

使用 Tensorflow 2.0 实施

现在我们已经完成了导入,让我们来看看网络:生成器和评论家。

与生成器类似,我决定为评论家选择一个简单的网络。在这里,我有一个 4 密集层网络,也 Relu 激活。但是,我想在这里强调一下最后一行代码。与普通 GAN 不同,我们通常将它作为网络的最后一层:

x = Dense(1, activation=’sigmoid’)(x))

它在鉴别器的输出层使用 sigmoid 函数,这意味着它预测给定事件为真实事件的可能性。当谈到 WGAN 时,critic 模型需要线性激活,以便预测给定事件的“真实度”得分。

x = Dense(1)(x)

或者

x = Dense(1, activation=’linear’)(x)

正如我提到的,WGAN 模型的主要贡献是使用了一个新的损失函数 Wasserstein 损失。在这种情况下,我们可以在 Keras 中将 Wasserstein 损失实现为一个自定义函数,它计算真实事件和生成事件的平均分数。

分数是真实事件最大化,生成事件最小化。下面实施瓦瑟斯坦损失:

另一个重要的变化是为评论家网络引入了权重裁剪。在这种情况下,我决定用下面的方法定义扩展 Keras 约束类:

现在我们已经介绍了主要的变化,您可以在这个 open GitHub 存储库中找到 WGAN 的完整实现,由 YData 提供支持。

WGAN 面临的挑战

尽管 WGAN 为数据生成领域带来了许多好处,但它仍然有一些需要解决的挑战:

  • 尽管与其他架构相比更加稳定,但仍然存在训练不稳定的问题
  • 权重裁剪后收敛缓慢-当裁剪窗口太大时
  • 消失渐变—当剪辑窗口太小时

自其发表以来,基于 WGAN 主要问题与所选权重裁剪方法相关的事实,一些建议的改进是最有前途的改进之一,并使用了梯度惩罚— WGAN-GP 文章

表格数据生成

现在,我们已经介绍了 WGAN 及其实现的大部分理论知识,让我们开始使用它来生成合成的表格数据。

出于这个练习的目的,我将使用我之前在这篇博文中提到的存储库中的 WGAN 实现。

我将用于此目的的数据集是数据科学界非常熟悉的一个数据集,即信用欺诈数据集

出于演示的目的,我决定选择这个数据集的一个较小的样本。在这种情况下,我决定只综合欺诈事件。

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

信用欺诈数据集的小样本。

在对数据进行几个预处理步骤之后,我们准备好将数据输入 WGAN。

更新批评家的次数要比生成器多

在其他 GAN 架构中,如 DCGAN ,发生器和鉴频器模型必须在相同的时间内更新。但是对于 WGAN 来说,这并不完全正确。在这种情况下,critic 模型必须比 generator 模型更新更多次。

这就是为什么我们有一个输入参数,我称之为n _ critic——这个参数控制 critic 从每批生成器获得更新的次数。在这种情况下,我将它设置为 3 次。但是你可以为其他人设置并检查最终结果的影响。

与其他 GAN 架构的训练过程相比,在使用相同数据集的情况下,可以看出 WGAN 训练确实不太容易出现不稳定性,产生的结果更接近真实数据集分布,尽管并不完美。

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

WGAN 在 1000 个时期后为 V1 和 V10 变量生成数据点

我还决定通过利用主成分分析和 TSNE 算法来降低数据集的维度,选择两个分量,以简化数据的可视化。下面你可以找到这些图,我比较了 WGAN 生成的数据和原始数据的 PCA 和 TSNE 结果。很明显,WGAN 未能符合原始数据中捕获的一些行为,尽管如此,结果还是很有希望的。

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

PCA 和 TSNE 对合成和原始欺诈事件进行了计算,包括两个部分

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

合成数据集和原始数据集之间的基本统计差异。越轻差别越小。

结论

与使用 GANs 生成具有真实价值的合成数据以用于机器学习任务并以保护隐私的方式共享相比,本文中显示的结果仍然非常简单。与其他架构相比,Wasserstein 作为损失函数的引入无疑有助于使训练更加稳定,并且对网络架构和超参数的选择不太敏感。

对于那些对生成合成表格数据感兴趣并想尝试一下的人,可以看看这个 GitHub 库。我们将使用新的 GAN 架构和新的数据集示例对其进行更新,并邀请您参与合作。

法比亚娜 是 CDO 在 YData

改进了人工智能的数据

YData 为数据科学家提供了一个以数据为中心的开发平台,致力于高质量的合成数据。

如何生成考虑任何国家节假日的熊猫时间序列

原文:https://towardsdatascience.com/how-to-generate-time-series-considering-holidays-of-any-country-in-pandas-32506bc6abb9?source=collection_archive---------26-----------------------

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

照片由 Unsplash 上的 Joost Crop 拍摄

如何使用美国假日日历,为任何目的或任何其他国家生成自定义假日日历,如何将日期序列合并到数据集中

在时间序列数据分析中,生成日期在现实生活中的许多场合都是必要的。有时我们有数据,但时间没有记录,有时我们可能不得不使用一个国家的数据进行另一个国家的研究,或者今年使用去年的数据。今年的假期与去年不同,或者这个国家与另一个国家不同。这篇文章显示:

a.如何使用内置的假日日历?

b.生成自定义假日日历。

c.将一系列日期合并到数据集中。

考虑假期的时间序列

  1. 生成一个考虑所有节假日的时间序列。

熊猫已经内置了美国假日日历。使用“CustomBusinessDay”功能生成自定义频率,传递内置的美国假日日历。使用此自定义工作日作为频率。

**from** pandas.tseries.holiday **import** USFederalHolidayCalendar
**from** pandas.tseries.offsets **import** CustomBusinessDayusb **=** CustomBusinessDay(calendar **=** USFederalHolidayCalendar())
pd.date_range('7/1/2018', '7/10/2018', freq=usb)#Output:
DatetimeIndex(['2018-07-02', '2018-07-03', '2018-07-05', '2018-07-06', '2018-07-09', '2018-07-10'],               dtype='datetime64[ns]', freq='C')

我用的范围是 7 月 1 日到 7 月 10 日。看输出。7 月 3 日之后是 7 月 5 日。因为 7 月 4 日是假日。

2.现在,我将向你展示如何制作你的定制假日日历。如果你的客户不是美国人,你必须做一个定制的假日日历。因为其他国家的假期和美国不一样。

为了简化本教程,假设我是一家大公司的老板。我宣布我的周年纪念日为公司假日。虽然这不太可能。我这样做只是为了演示如何制作一个自定义的假日日历。

熊猫图书馆让你使用他们的类来修改和制作你自己的。在 这一页的最后 **,**你会发现类‘USFederalHolidayCalendar’是这样的:

class USFederalHolidayCalendar(AbstractHolidayCalendar):
    """
    US Federal Government Holiday Calendar based on rules specified by:
    [https://www.opm.gov/policy-data-oversight/](https://www.opm.gov/policy-data-oversight/)
       snow-dismissal-procedures/federal-holidays/
    """
    rules = [
        Holiday("New Years Day", month=1, day=1, observance=nearest_workday),
        USMartinLutherKingJr,
        USPresidentsDay,
        USMemorialDay,
        Holiday("July 4th", month=7, day=4, observance=nearest_workday),
        USLaborDay,
        USColumbusDay,
        Holiday("Veterans Day", month=11, day=11, observance=nearest_workday),
        USThanksgivingDay,
        Holiday("Christmas", month=12, day=25, observance=nearest_workday),
    ]

现在,修改名称和规则来制作一个定制的假日日历。我假设我的周年纪念日是 3 月 20 日。使用“遵守”作为“最近工作日”。这意味着如果指定的日期是周末,假日日历将自动将最近的工作日作为假日。“遵守”几乎没有其他选择。分别是:‘周日 _ 至 _ 周一’,‘下周 _ 周一 _ 或 _ 周二’,‘之前 _ 周五’,‘下周 _ 周一’。请随意自己尝试。

from pandas.tseries.holiday import AbstractHolidayCalendar, nearest_workday, Holidayclass MyAnniversaryCalendar(AbstractHolidayCalendar):
    rules = [
        Holiday("MyAnniversary", month=3, day=20, observance = nearest_workday)
    ]

在这里,我做了我的周年日历。使用此类“MyAnniversaryCalendar”自定义频率,并将其用作“freq”参数的值。

myday = CustomBusinessDay(calendar=MyAnniversaryCalendar())pd.date_range('3/15/2020', periods=12, freq=myday)#Output:
DatetimeIndex(['2020-03-16', '2020-03-17', '2020-03-18', '2020-03-19', '2020-03-23', '2020-03-24', '2020-03-25', '2020-03-26',                '2020-03-27', '2020-03-30', '2020-03-31', '2020-04-01'],               dtype='datetime64[ns]', freq='C')

请看一下输出。3 月 19 日之后,是 3 月 23 日。有一个三天的周末!

3.一些国家有不同的工作日。例如,像埃及、卡塔尔这样的国家将星期五和星期六作为周末。所以,他们的假日日历应该是不同的。以下是如何定义和使用每周工作日:

b = CustomBusinessDay(weekmask = 'Sun Mon Tue Wed Thu')
pd.date_range('6/20/2020', '6/30/2020', freq=b)#Output:
DatetimeIndex(['2020-06-21', '2020-06-22', '2020-06-23', '2020-06-24', '2020-06-25', '2020-06-28', '2020-06-29', '2020-06-30'],               dtype='datetime64[ns]', freq='C')

检查输出中缺少的日期。你会看到它们是星期五和星期六。

在数据集中使用日期序列

在本节中,我们将使用由 date_range 函数生成的一系列日期,并在数据集中使用它。在这个练习中,我使用了脸书股票数据集。首先导入数据集:

df = pd.read_csv('FB_data_with_no_date.csv')
df.head()

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

现在,生成时间序列,其中开始日期是 2020 年 1 月 1 日,“周期”是数据集的长度,频率

rng = pd.date_range('1/1/2020', periods = len(df), freq='B')

将此时间序列设置为脸书股票数据集的索引。

df.set_index(rng, inplace=True)
df.head()

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

这是时间序列数据集,可用于时间序列数据分析或预测。

结论

在时间序列分析中,处理节假日是正常的。在不同的文化和不同的国家,有不同的时区和不同的节日。所以,如果你处理时间序列数据,你会经常用到这个。希望这篇文章对你有帮助!

更多阅读:

[## 熊猫数据可视化的终极备忘单

熊猫的所有基本视觉类型和一些非常高级的视觉…

towardsdatascience.com](/an-ultimate-cheat-sheet-for-data-visualization-in-pandas-4010e1b16b5c) [## Numpy 的终极备忘单

对学习也有好处

towardsdatascience.com](/an-ultimate-cheat-sheet-for-numpy-bb1112b0488f) [## 描述统计学导论

对最基本和广泛使用的描述性统计方法有清晰和详细的理解

towardsdatascience.com](/introduction-to-the-descriptive-statistics-a050b5ec99fb) [## 学习机器学习和深度学习的优质免费课程

顶级大学高质量免费课程的链接

towardsdatascience.com](/great-quality-free-courses-to-learn-machine-learning-and-deep-learning-1029048fd0fc) [## 练习数据科学技能和制作优秀投资组合所需的所有数据集

一些有趣的数据集提升你的技能和投资组合

towardsdatascience.com](/all-the-datasets-you-need-to-practice-data-science-skills-and-make-a-great-portfolio-857a348883b5) [## 一个完整的推荐系统从零开始:一步一步

基于用户评分的线性回归电影推荐系统

towardsdatascience.com](/a-complete-recommender-system-from-scratch-in-python-step-by-step-6fc17a4da054)

作为一名害羞的数据科学家,如何获得工作推荐?

原文:https://towardsdatascience.com/how-to-get-a-data-science-interview-job-referral-5bb9ff2ed8c9?source=collection_archive---------18-----------------------

办公时间

技巧、经验教训和 1+1+1 流程

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

真诚媒体Unsplash 上拍摄的照片

TL;获得推荐是获得面试分数的最有效方式,但许多有抱负的数据科学家,尤其是内向的数据科学家,很难做到这一点。我正在分享一些经验教训和一个“1+1+1 过程”,它帮助我在最负盛名的公司获得面试(和工作机会)。我还包括了一些小挑战来帮助你开始。

免责声明 :我把数据科学和 ML 这两个术语互换使用。我的观点完全来自个人经验,不代表我的雇主的官方招聘准则。

喜欢读什么? 跟我上 LinkedIn,以及*Twitter。查看我的《 对机器学习的影响 》指南。它帮助数据科学家更好地解决问题、设计和交流。*

最近,我受邀向一群有抱负的数据科学家发表演讲。一个学生问:“你怎么让别人推荐你?我没那么外向。”

我的简短回答是:如果你提前得到了一些东西,你就不需要请求推荐,尤其是如果你是一个内向的人。

回想我自己的旅程,我在顶级咨询公司、大型科技公司、华尔街对冲基金和人工智能初创公司的大多数面试(和工作邀请)都源于冷淡的关系,而不是来自老朋友或投简历。

作为一个内向的人,每次我需要发电子邮件、建立关系网和引导对话时,这都是一次极其令人畏惧的经历。但是随着我职业生涯的进展,我开始用不同的方式对待这种互动。在这篇文章中,我将分享一种方法和过程,让它变得更容易和更有效。

要设定期望值,您必须了解并准备好以下内容:

  • ***真正的好奇心。*你必须对对方感到好奇,就像你作为一名数据科学家对数据中的见解感到好奇一样。
  • ***要有耐心。*建立关系需要时间和互动。不要指望在与第一个人第一次互动后就能获得推荐。并不是每一次互动都会有所收获——这完全没问题。
  • ***纪律。*有些事情是你控制不了的。你需要坚持不懈的努力。好事会来的。

*那么,**不求人怎么能得到推荐呢?*我们按步骤分解一下。这里的教训主要适用于建立冷淡的关系(例如,不在你的家庭和现有朋友网络中的人)。

第一步。值得推荐

这是没有办法的。你必须花时间发展基本技能和“品牌”,这样人们才会有信心把你带进他们的团队和网络。怎么才能“可参考”?作为有抱负的数据科学家,我认为有几种方法可以脱颖而出:

  • ***独一无二。*与几年前不同,现在有很多数据科学家。每个人都知道如何建立模型(或者他们是这么说的)。你还能带来什么?(如领域知识、特殊技术诀窍、做别人不想做的事等。)
  • 来点激情项目。如果你是一名应届毕业生,参与有激情的项目(而不是学校布置的任务)是展示你的工作并在简历中突出多年工作经验的好方法。最棒的是,你是你工作的主人,你不需要任何人的许可,也不需要一封聘书就可以开始工作。
  • 说不清就秀。如果你是一个内向的人,你可能不会大声说出你能做什么(尽管你应该试着这么做)。最好的办法就是展示。展示你的作品是在陌生人之间建立信任的最好方式。所以,在自己的网站或者 Github 上有一个好的作品集。让你的工作为你辩护。这是设计界的标准做法,许多科技公司已经在寻求你的 Github 的链接。

吉菲

迷你挑战#1: 拿你最近的学校或激情项目,清理代码,写一个你奶奶能看懂的简单 1 页总结,上传到 Github 或你的个人网站。接下来的 1-2 周,每天给 1-2 个人看。获得反馈,并请他们与可能会觉得有趣和有用的朋友分享。如果你开始有困难,看看我关于 12 小时挑战 的帖子,试试吧。

第二步。从合适的公司找到合适的人

谁是“合适的”人?如果你有世界上所有的时间和精力,你应该去认识每一个有趣的人。但是,实际上,你很可能会违背招聘计划或下一份工作的跑道。因此,我的建议是按照以下顺序进行连接:

  • 招聘经理(例如工程经理、团队领导、首席数据科学家等。)—发现和雇佣优秀人才是他们的使命。但是经理们通常忙于在日常工作和招聘之间周旋。所以,让你的互动有影响力(见第 3 步& 4)。
  • 入门级(如数据科学家、分析师等。)—虽然他们可能没有决定权,但初级人员仍然可以为招聘经理做介绍(有些人有一天会成为经理)。
  • 高管(如高管、合伙人、高级/副总裁等。)—如果能从首席执行官那里得到一份自上而下的介绍给招聘团队,那就太好了。这种情况时有发生,但大多数高管都太忙了,没有参与日常的招聘过程。

有哪些合适的公司?根据我的经验,从在初创公司和中型公司工作的人那里获得推荐会更有效。大公司通常对入门级职位有标准的校园招聘流程,大多数人会推荐他们更有经验的朋友和熟人去做非入门级的工作。

你可以看看这篇文章我对数据科学角色和公司的类型进行了分类。

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

作者自己的作品

了解数据科学到底是什么。找到符合您的个人资料和兴趣的数据科学角色类型。想出一个从小到大的目标公司列表,职位名称,并根据我在第二步中建议的优先级开始在 LinkedIn 上与人联系。

小挑战#2: 写下你想加入的 5 家公司(1-2 家大公司,2-3 家中型公司,3-4 家初创公司)。在这些公司中找到 1-3 个数据科学/分析职位。在 LinkedIn 上找到每家公司的 1-2 名经理级人员。先和同城或者同校的联系,不要一下子和所有人联系。按照下面的第 3 步,给他们发送一条好的介绍信息。

第三步。写一个好的介绍信息

不是每个人都会接受并回复你的 LinkedIn 邀请和信息。根据我的经验,接受率为 50–70%,回复率为 20–30%(例如,要让一个人回复,你至少需要联系 8-10 个人)。

你真的不能对接受率做任何事情,但你可以根据你如何写你的信息来尝试提高回复率。

以我的经验来看,带有明确问题和选项的简短信息效果更好。作为一个内向的人,我曾经认为这样的消息是粗鲁和唐突的。但是更重要的是尊重他人的时间,让他们知道他们如何能帮上忙——并且让事情变得简单。

具体来说,这里有一个几天前出现在我收件箱里的坏例子

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

LinkedIn 留言的一个不好的例子,作者的作品

我知道这个人在寻求帮助,但是我不知道我能帮什么,怎么帮。

总的来说,介绍信息的目标应该是让接收者知道为什么以及如何用最少的精神能量来帮助*。***

以下是我遵循的一些原则:

  • 对你的问题要明确具体(简短的总结和/或链接)
  • 提出一个对你合适的时间,然后让对方决定(只需查看日历比发送额外的信息来确定一个对双方都合适的时间更容易)
  • 提供选项(但不要太多)
  • 让人们说不,但留下跟进的机会

考虑到这些,以下是我重写 LinkedIn 信息的方式:

“嗨,伊恩,谢谢你接受我的邀请。我喜欢你在媒体 ( 上的文章😉,好吧也许不是眨眼)。我正在探索数据科学的机会,看到贵公司有一个职位空缺(如果有,请附上链接)。你可以在这里查看我的简历和工作(简历和作品集的链接)。您是否有空在本周五或下周五下午 3 点进行一次 15 分钟的简短聊天?如果你认为有一个更好的人可以和我说话,如果你能把我们联系起来,那就太好了。”

您可以从该信息中提取一些元素,并根据自己的需要进行调整。网上有很多好的邮件和信息模板。坚持原则,找到自己的风格。

第四步。见面,但不要要求介绍

一旦你与来自正确公司和团队的正确的人安排了一次会议,并带着正确的介绍信息,现在到了关键时刻:让那个人把你放在面试过程中。

吉菲

对于内向的数据科学家来说,不得不与陌生人聊天并寻求帮助可能是最难以承受的过程。不幸的是,我不能提供一个脚本,因为对话可能以多种形式发生,取决于对方的个性、会议前和会议期间每个人的情绪、招聘过程的背景等。

好消息是,在这个阶段,你要见的人知道你的意图(例如,在他/她的团队中找到一份工作,或者与其他人取得联系),能够影响和采取行动,并乐于提供帮助,或者至少倾听你的建议。你获得“推荐”的机会已经比随机与某人交谈或向普通收件箱发送简历高得多。

为了让谈话不那么令人畏惧,更有效,这里有一些我认为有用的心理和谈话技巧:

  • ***不要把它当成面试。*因为这个人会评估他们是否应该帮助你并让你加入,所以这个对话就是一次正式或非正式的面试。尽管如此,告诉自己“这就像和一个多年未见的朋友的对话,我们只是在叙旧。”在心里说这句话通常会让我放松,不会显得太绝望。
  • 温和地带头。招聘经理通常也不知道如何与你交谈,或者被他的日常工作所困扰。会有死气沉沉的尴尬。这让我这个内向的人受不了。因此,在感谢您接听电话并抽出时间之后,我通常会建议“为什么我不告诉您更多关于我的数据科学经验,我很想了解更多关于您的团队以及您在该职位上的期望……”要友好、冷静、具体,并准备好您的故事。我还没有遇到反对这个建议的人。
  • ***献,莫问。*在对话接近尾声时,你们双方都应该知道是否有合适的人选。如果你还想继续,关键时刻到了。不要问“你能推荐我吗?”这可能会很唐突,让每个人都感到尴尬,但要提供两个机会:你的简历和你能帮上忙的事情。你可以这样说:“我很想进一步探索,我可以把我的简历和作品集分享到你的邮箱吗?请看看,如果你觉得合适,请告诉我。我一两周就能跟进。”

现在你已经尽力了。让生活来处理剩下的事情。

吉菲

在会议期间,能够促进对话并讲述关于你自己的好故事是很重要的。和招聘经理一起练习风险太大,成本也太高(你需要在参加会议时做好准备)。

小挑战#3 :准备好你想如何解释你的工作,它有什么有趣的地方,以及它为什么重要。自己排练。和你的好朋友喝饮料或咖啡时,不经意地提起这些故事。目的是让他们问问题并跟随对话的流程。当场练习思考和表达,避免预先准备好一切。

1+1+1 流程

正如我在开头提到的,建立关系需要时间、耐心和自律。随着我的工作和生活越来越忙,我制定了一个建立新的和维护现有网络的过程(作为一个内向的人,我天生做不好这一点,所以我必须依靠一个过程)。

这就是所谓的“1+1+1 过程”:每个月的周五下午(比如 1+1+1),试着去见一个新人,和一个老朋友、熟人或者同事*。如果你有更多的时间,想加速,可以调整人数和频率(如每 2 周 3+2)。***

当你经历求职过程时,你可以采用这个过程来开始并保持建立关系的势头,你现在或将来都可以依靠它。

没有捷径可走。准备投入时间、精力,最重要的是,投入你对他人的真正兴趣。好事会来的。直到下一次!

吉菲

喜欢读什么? 跟我上 LinkedIn,以及*Twitter。查看我的《 用机器学习影响 》指南。它帮助数据科学家更好地解决问题、设计和交流。*

你可能也喜欢

* [## 数据科学很无聊

我如何应对部署机器学习的无聊日子

towardsdatascience.com](/data-science-is-boring-1d43473e353e) [## 最有用的 ML 工具 2020

每个懒惰的全栈数据科学家都应该使用的 5 套工具

towardsdatascience.com](/the-most-useful-ml-tools-2020-e41b54061c58) [## 我们应该留在数据科学领域吗?

数据科学家的 4 个现实职业选择

towardsdatascience.com](/the-most-realistic-data-science-career-guide-d12c4af87cc8)*

如何找到数据工程师的工作

原文:https://towardsdatascience.com/how-to-get-a-job-as-a-data-engineer-990e1cbbe192?source=collection_archive---------22-----------------------

本世纪发展最快的职业之一的 10 种需求技能和决定职业前景的主要因素

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

内森·赖利在 Unsplash 上拍摄的照片

数据工程是一个令人着迷的领域。您可以与各种有趣的数据、前沿技术以及不同的数据专业人员和领域专家团队一起工作。数据工程的整个领域相对较新。作为一名数据工程师,您的角色对公司的成功至关重要-许多数据专业人员,包括数据分析师和数据科学家,都依赖您来完成他们的工作。您有责任为他们配备始终可用、可靠且结构正确的数据。

公司需要你根据真实数据和由此产生的 KPI 做出明智的决策。如果你做得好,他们愿意给你优厚的报酬!我们来看看哪些技能需求量大,哪些因素对未来的职业前景起着很大的作用,以及如何接近技术面试。

需求中的技能

总的来说,通常很难给出任何真正通用的建议,但我总结了一些似乎最相关的技能,这些技能来自我在招聘广告中多次看到的内容以及我在该领域的经验。

1.成为 T 型职业者

从某种意义上来说,你理解数据库、云计算、数据仓库、大数据的一般概念,并且你至少知道 SQL、Python、Docker 和创建 ETL 的一些基础知识,这被认为是最好的目标。

同时,你应该在至少一个特定领域(T中的竖条)拥有更强的技能。例如,你可能真的很擅长编写数据操作的 SparkDask 或者你可能有你申请的公司所要求的某些特定的领域知识**,这使你有别于其他申请人。**

很多情况下, 熟知 SQL****+Python、Linux 和 AWS*** 的基础知识,已经可以让你到一个待遇还算不错的初级职位。*

2.用于处理数据的云服务

云计算革命性地改变了许多行业。作为一名数据工程师,您需要了解存储、计算、网络和数据库最重要的服务。如果你不太了解这些,我强烈建议学习亚马逊网络服务——即使你最终会使用谷歌云平台或微软 Azure,从 AWS 学到的概念可以很容易地应用到不同的云供应商,因为云供应商之间的许多服务是类似的,它们的概念实际上是相同的(例如。块存储 vs 对象存储 vs NFS

如果你是 AWS 新手,跟随这个链接,你可以在 AWS 上找到很棒的免费课程——它们都是直接由 AWS 提供的。你不需要为额外的证书付费——从我的经验来看,招聘人员和工程经理并不太在乎证书。他们希望有实践经验的人懂得很多,并能应用于商业问题。****

数据工程职位最重要的 AWS 服务有:

  • 能够以编程方式与 S3 上的文件进行交互。下载和上传 CSV 或拼花文件
  • 能够启动并 SSH 到一个 EC2 实例+了解一些 Linux 基础知识,能够使用 CLI 与之交互
  • IAM :了解如何创建 IAM 用户,为相关服务附加一个策略,使用它来通过AWS CLI+IAM 角色如何工作的基础知识来配置编程访问
  • VPC:你应该知道什么是 VPC、子网,并且知道它们是如何工作的。:您的 VPC 位于特定的 AWS 区域,并在该区域内的特定可用性区域中划分子网
  • RDS: 知道如何运行或者至少如何与 Postgres 这样的关系数据库进行交互。

此外,了解 AWS Lambda ( 无服务器功能即服务)、ECS & EKS ( 大规模运行容器)、亚马逊红移(云数据仓库)、Athena ( 无服务器查询引擎以查询 S3 数据湖)以及 AWS Kinesis 或亚马逊 MSK ( 均用于实时流数据)也很有帮助。但是你可以先关注项目列表中的项目。Edx 的课程解释了其中的大部分。另外,**记得练习*** :通过 AWS 免费层,您可以(受限)访问那些基本服务,这样您就可以边玩边学了。*

3.构建 ETL 管道

作为一名数据工程师,需要整合各种来源的数据,将其转换成适合分析的形式,然后加载到某个数据湖或数据仓库中。你应该有一些创建 ETL 的经验。这并不意味着你必须为一些大公司的大数据项目工作过——甚至你在 Github 或博客帖子上分享的自我驱动项目也能让你在申请过程中走得更远,让你脱颖而出。

4.管理、监控和调度 ETL 管道

数据工程师的主要职责之一是确保数据总是可用的、可靠的并且具有适当的结构。为了实现这一点,您需要调度和监控您的数据管道。许多公司使用工作流管理系统,如 Apache Airflow 或 Prefect,所以了解其中一个可以大大提高你获得一份数据工程工作的机会。如果你想让了解更多,请阅读我以前的故事,比如这篇——在那篇文章中,我演示了如何在 AWS 上使用无服务器 Kubernetes 集群轻松建立工作流管理系统。

5.使用容器的能力:Docker & Kubernetes

如果您使用 Python,您知道您的代码可能会突然不再工作,因为您升级到了新的 pandas 版本。容器化是关键,能够处理容器化的工作负载是(任何)工程工作中最关键和最受欢迎的技能之一,因为它使您的代码自包含、无依赖性,并让您将代码部署到几乎任何环境中。**

6.了解基本概念

这与成为一名 T 型专业人员是一致的:你应该知道数据仓库、数据湖、大数据、REST APIs 和数据库的基础知识。在你的工作面试中解释不了大数据的 3v数据仓库的特征会令人相当失望。此外,了解架构组件也是值得的。例如,在这篇文章中,我讨论了迁移到云时的数据仓库架构和关键考虑事项。

7.独立工作和学习的能力

这是不言而喻的:随着技术发展如此之快,关键是你是一个自我导向的学习者,你愿意不断学习和实验新的工具。这并不意味着你需要追随每一个炒作,而是你要保持开放的心态。

8.编码技巧

编程并不意味着你必须是一个“黑客”,你需要整天除了写代码什么都不做。更重要的是能够快速学习并知道如何编写好的抽象。在数据工程领域,这意味着你知道如何创建干巴巴的代码 ( 不要重复自己),意味着:你不会从一个脚本向另一个脚本复制粘贴相同的代码,但是你知道如何以模块化和可重用的方式编写函数或类。干净的代码可以重复使用,扩展和参数化,易于维护,将节省您和他人的时间。

举个例子:我曾经在一家公司工作,那里几乎没有模块化。在几乎每个 Python 项目中,人们都在复制相同的代码来建立日志记录,连接到数据仓库并从中加载一些数据,或者建立 S3 客户端并从某个 S3 存储桶下载 CSV 文件。为了改进这一点,我创建了一个 Python 包:

  • 它包含了几乎所有项目中需要的所有功能,我把它推到了一个新的 GitHub 仓库中
  • 这个包可以通过
    pip install git+https://github.com/<COMPANY>/<PACKAGE_NAME>.git安装在任何地方。

从长远来看,这个包为我们节省了大量的时间,并且使代码库更加整洁。

如果你是 Python 初学者,你不需要学习如何创建包。首先,如果你能写出好的 Python 函数,如果你知道如何使用基本的数据操作包,比如 Pandas ,这就足够了。

许多公司还寻找懂 Scala、Java、R 或 C ( 或你能想到的任何其他语言)的数据工程师——不管是什么编程语言,如果你理解了处理数据的基本数据类型,以及函数式编程模块化的原则,你就能得到一份好得多的工作。

9.命令行

能够使用 Linux 操作系统并通过使用 bash 命令与之交互是最重要的技能之一,这将使你更加高效

许多框架和云服务的工作方式是,我们通过声明性语言(如 Dockerfile 或 Kubernetes YAML 文件)定义我们的资源和服务,然后可以通过命令行界面( CLI ) 部署它们。这个范例通常被称为代码的基础设施。例如,AWS CLI 允许您通过向 AWS API 提交 bash 命令来提供整个资源集群。其他云提供商(如 GCP 或 Azure )也提供类似的命令行界面。

10.软技能

有些人可能期望数据工程师是一个除了写 ETL 和处理数字什么也不做的人。但是在每份工作中,拥有与你的简历互补的技能是值得的。假设你有两个候选人:

  1. 一个优秀的程序员,但不擅长公开演讲,
  2. 一个普通的程序员,但同时也是一个伟大的演说家。

你会雇佣哪一个?许多公司会选择后者。雇主寻找全面发展的人,他们还拥有重要的软技能,比如项目管理、公开演讲、记录,或者擅长主持和组织活动。

在你的职业前景中扮演重要角色的因素

数据工程工作的薪水因地点、行业、所需技能和经验水平而异。下面,我列出了决定薪水和未来发展的 7 个最重要的因素。有些是显而易见的,但有些可能会让你大吃一惊:

  1. 地点——即使你申请了一份远程工作,公司也有可能根据你所在国家的标准支付你工资,以反映生活成本等
  2. 行业 —金融、汽车、科技或制药行业的公司通常比初创公司和电子商务公司的薪酬高得多
  3. 工作经验——招聘者对此很着迷,尽管工作经验本身并不能告诉你你从以前的工作中学到了多少…
  4. 专长 —经验的年限并不等同于专长(至少我是这么认为的)。通常人们只是擅长 Spark、Linux、Dask 或高级 SQL。如果你能证明你真的很了解它,那么 20 多年的拖放式 ETL 经验可能是值得的
  5. 实践经验——在工程领域,没有什么比实践经验更有价值。如果我们不能把知识应用到现实生活中,没有人能从我们的知识中受益。做个人项目,练习。不要只是看了一些东西就以为自己已经知道了— 如果没有应用,那都只是理论,很快就会忘记
  6. 学历 —我个人发现招聘人员并不像我预期的那样看重你的学历。当然,他们会检查你是否有学士或硕士学位,甚至是博士学位,但对于招聘人员来说,你曾就读于哪所大学或你的专业是什么并不重要。认证也是如此——许多技术经理更看重你使用特定工具或编程语言的实际经验,而不是你知识的任何官方证明,他们可能更喜欢在技术面试中亲自验证你的知识,而不是依赖证书。
  7. 你的特殊技能、领域知识和软技能比你想象的更重要。招聘人员通常会拒绝某人,因为他们觉得这个人不适合团队和公司的文化。

面试准备

我听说过这样的情况,申请人在电话面试中无法回答他或她申请的公司在做什么。还有,像:说说你自己你为什么要换一家新公司这样的问题太常见了,提前想好就好。

另外,如果你打算申请,你应该准备一些 ( 基础 ) 技术问题。许多数据工程经理要求根据某些情况设计一个星型模式或者给你一些编码问题比如什么是 SQL 窗口函数、生成器、广播或者 Python 中的列表理解,Docker 映像和 Docker 容器之间有什么区别,或者你如何着手创建 Docker 映像和运行 Docker 容器。

最后,相信自己,保持自信。

结论

在这篇文章中,我们讨论了什么样的数据工程技能目前需求量很大,以及如果你在这个领域寻找一个入门级的职位,你需要知道什么。我们还列出了对数据工程职业前景起很大作用的因素,以及如何准备面试。我希望你可能会发现一些有用的。感谢您的阅读!

没有工作怎么找工作

原文:https://towardsdatascience.com/how-to-get-a-job-when-there-is-no-job-17e5c0d77349?source=collection_archive---------21-----------------------

在东京和伦敦做机器学习工程师,没有理科学士学位

越来越多的学生选择攻读包含一年工作实习的学位。这一年让学生将他们的知识融入到环境中,向专业人士学习,并获得现实世界的技能。这是新毕业生区别于其他年轻毕业生的绝佳方式。我强烈建议你去一所有学位课程实习年的大学。

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

最近参加了母校为金学者(现生)和金学者导师(校友)举办的联谊活动。晚上,学者们表示有兴趣为更小的公司、初创企业甚至慈善机构工作,这与他们的激情和对影响力的渴望非常吻合。我告诉他们,在我实习的那一年,我在东京的一家人工智能(AI)初创公司工作,有一次不可思议的经历。学者们想知道我是如何在一个遥远的地方的一家小型初创企业找到如此令人兴奋的职位的。对于学生来说,很难找到并获得分班机会。在不宣传职位安排或实习项目的公司找到机会就更难了。

大学充当了人才进入大公司的漏斗,而忽视了小公司。在我大学的第一年和第二年,我每周花 1 个小时为我们的实习申请和随后的实习做准备。在这些会议中,高盛、摩根士丹利、普华永道和野村证券等公司将与我们探讨如何在申请过程中取得成功。其中一些公司甚至在我们的校园里举行面试。只有在每周的电子邮件和偶尔的谈话中,我们才会收到其他为学生提供实习机会的小公司的信息。对于不想在大公司工作或找不到合适职位的学生来说,这有什么选择呢?

在这篇文章的结尾,我会和你分享一些我用来获得多份实习和工作的技巧。我希望你也能够使用这些技术来获得你理想的就业机会或工作。

“机会总是降临到创造机会的人身上”——查理大帝 Tha God

获得职位的策略

寻找非传统的工作机会比通过求职面试更少被讨论,也更困难。以下策略将重点帮助你找到你想要的工作机会。

通过永久职位发布申请

忽略你感兴趣的永久职位标志和招聘启事上的大部分要求。人们错误地认为,如果他们不符合几乎所有的要求,他们就不是合适的候选人。不要让这种担心阻止你在一家与你的价值观一致的公司申请你感兴趣的职位。事实是,大多数公司并不期望或要求你符合他们职位描述中的每一项要求。

当你申请一个永久职位时,在你的求职信的开头明确说明你想做为期一年的工作安排。你会惊讶地发现,许多公司都愿意给你提供实习机会。一年的时间框架允许一个实习生学习和做比其他短期实习生多得多的工作,而公司的成本却很低。

挖掘你的网络

“重要的不是你知道什么,而是你认识谁”——无名氏。

作为一名大学生,你的人际网络很可能由其他学生或者一些应届毕业生组成。目的是挖掘你的人脉,找到愿意把你介绍给你需要的人或者愿意把你介绍给有能力的人的人。这尤其适用于没有安置计划的公司。

朋友和家人

不要害怕向别人寻求帮助!你网络中的某个人可能已经能帮上忙了,你只需要开口。年龄较大且已经进入行业的朋友和家人可以成为知识和社会资本的财富。他们会认识更多可以介绍给你的业内人士。他们还会知道一些更小、更不知名的公司,以及职业发展和他们所在领域的工作专长。

如果你的家庭不从事工业,你可以向你的大学朋友的父母寻求帮助。很可能他们的父母在想要的公司工作,或者认识在那里工作的人。

领英

使用 LinkedIn 可以让你搜索人并直接给他们发消息。您可以按公司、教育程度和联系级别过滤结果。联系的程度告诉你你和某人有多亲密。一级关系是你已经认识的人,二级关系意味着你认识某个认识这个人的人,同样的逻辑也适用于更高级别的关系。使用这些过滤器可以把 LinkedIn 变成一个工具,找到愿意帮助你的人,同时最大化他们想要帮助你的机会。

例如,如果你想在 A 公司工作,你可以在 LinkedIn 上搜索 A 公司,根据大学和关系级别过滤结果列表。列表中的其他人将与您共享背景。当你把信息发送给公司 A 的员工时,你可以参考这个共享的背景,并继续寻求任何你需要的帮助。

社交媒体

社会企业、非政府组织、慈善机构和广播节目可能没有 LinkedIn,但他们可能有 Instagram 或 Twitter 帐户。如果有特定的行业或组织,你感兴趣的话可以看看他们的账号。从该帐户,您可以找到类似的帐户,让您发现许多组织从一个单一的。

Twitter 和 Instagram 可以用来直接向你所在领域的名人发送信息。如果他们回复了,你可以安排一次咖啡会议,或者向他们寻求建议。他们可能不会雇佣你,但肯定会给你指出一个可以雇佣你的人的方向。

互联网和社交网络的出现意味着我们有幸能够与全球各地的个人和机会保持联系。

当事人

参加聚会的好处是,你可能会与那些你在其他情况下从未接触过的人互动。这些互动可以帮助你分散你的思维,让你帮助别人,和/或让别人帮助你。

2017 年,我参加了世界上最大的人工智能会议 NeurIPS。参加完 AI 工坊的 Black,我们开了一个船会。在去船上的班车上,我和一位女士聊了起来,这位女士碰巧是伦敦一家名为 Selerio 的人工智能初创公司的首席技术官(CTO)和联合创始人。我问她是否有实习机会,她给了我一张名片,让我有空的时候给她发邮件。

我一结束在 Cogent 实验室的工作,就回到了伦敦。我给首席技术官发了一封邮件,我们进行了一次面试,然后我加入了。

这个团队由三位联合创始人和我组成。一个超小的、高度集中的团队致力于尖端技术。在 Selerio 工作让我加强了我在计算机视觉和深度学习方面的知识。

我的安置经历

在搜索安置机会时,我随机想到了谷歌“AI start-up Tokyo”,因为它结合了我感兴趣的两件事。

通过这次搜索,我找到了 Cogent Labs ,一个新的(大约 10-15 名员工)令人兴奋的世界级 OCR(光学字符识别)技术。他们没有实习生、实习学生或初级工程师的空缺,但我还是申请了。我花时间精心制作了一封非常好的求职信,然后通过他们的永久职位发布申请了职位。经过几次面试和一次编码测试,我通过了。

当我到达东京时,我的工作头衔从软件工程师变成了研究工程师,尽管我不知道这个职位是什么。被扔进深水区让我学到了很多关于人工智能和研究领域的知识。这段经历彻底改变了我的职业和兴趣的轨迹。

由于我在 Cogent Labs 的工作,我获得了前往加州长滩参加 NeurIPS 的旅行许可,这是世界上最大的人工智能会议(感谢人工智能团队中的布莱克)。

当我离开 Cogent 实验室时,已经有 60-70 人了。今年,我亲眼目睹了初创企业是如何成长和壮大的。在那里工作让我认识了一些了不起的人,并生活在一个不可思议的城市。

结论

连接每种技术的核心线索是它们都需要你积极主动。你必须走出去,寻求你想要的机会。在任何情况下,你都不应该坐以待毙。也就是说,去发那个 DM,电子邮件,LinkedIn 消息或者 tweet。不要等着别人教你,去学吧。

我希望你能够使用上面介绍的技巧来获得你理想的工作机会、实习或工作。

“把好奇心和激情作为一种工具,在生活中开拓出自己独特的道路。”——奥马尔·里德

你可以在 LinkedInTwitter 上找到我。

如何用 Python 找工作

原文:https://towardsdatascience.com/how-to-get-a-job-with-python-575f1b79fa11?source=collection_archive---------16-----------------------

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

有这么多网站为不同领域的工作提供工作列表。即使你可能在某个职位上,你也应该总是 找工作,这可能会变得很无聊。但是这里有一个简单的解决方案可以让你轻松通过这么多的工作邀请!

我们将构建一个简单的 Python 脚本来获取工作列表,并根据您的喜好过滤它们。

这是一个简单的使用 Python,你不需要任何特定的技能来做这件事。我们将一步一步来,共同建设一切。

让我们直接投入进去吧!

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

编码

规划流程

首先,我们必须找到工作列表网站,我们将得到提供。

我选择一个名为的网站,实际上是。(这只是本教程的一个例子,但是如果你有一个更喜欢用来找工作的网站,请随意使用!)

我们要做的是:

筛选适合我们的工作标准,并对其进行筛选。

下面是我在美国搜索数据科学后 Indeed 的网站的样子。

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

在网站上搜索示例

最后,一旦我们有了数据,我们将把它打包成数据帧,得到一个 CSV 文件,可以很容易地用 Excel 或 Libre Office 打开。

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

设置环境

你将不得不安装一个 ChromeDriver 并与 Selenium 一起使用,这将使我们能够操纵浏览器并向它发送命令以供测试和使用。

打开链接并下载适用于您的操作系统的文件。我推荐最新稳定版**,除非你已经知道自己在做什么。**

接下来,您需要解压缩该文件。我建议进入文件,通过右键单击手动操作,然后单击“Extract here”。

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

在文件夹里面,有一个名为“chromedriver”的文件,我们必须将它移动到你电脑上的特定文件夹中。

打开终端,键入以下命令:

**sudo su** #enter the root mode
**cd**      #go back to base from the current location
**mv /home/*your_pc_name*/Downloads/chromedriver /usr/local/bin** 
#move the file to the right location

请插入您的实际电脑名称,而不是您的电脑名称

要做到这一点,还需要几个库:

在终端中,您应该安装这些:

*pip3 install pandas*

Pandas 是一个快速、强大、灵活且易于使用的开源数据分析和操作工具,构建于 Python 编程语言之上。

sudo pip3 install beautifulsoup4

美汤 是一个 Python 库,用于从 HTML、XML 和其他标记语言中获取数据。

完成后,我们打开编辑器。我个人选择的是 Visual Studio 代号。它简单易用,可定制,并且对你的计算机来说很轻。

打开一个新项目,创建两个新文件。这是一个我的例子,看起来可以帮助你:

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

Visual Studio 代码—项目设置

在 VS 代码中,有一个“Terminal”选项卡,您可以使用它打开 VS 代码中的内部终端,这对于将所有内容放在一个地方非常有用。

当你打开它时,我们还需要安装一些东西,那就是虚拟环境和用于 web 驱动程序 selenium。在您的终端中键入这些命令。

pip3 install virtualenv
source venv/bin/activate
pip3 install selenium

激活虚拟环境后,我们就完全准备好了。

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

创建工具

我们已经设置好了一切,现在我们要编码了!

首先,如前所述,我们必须导入已安装的库**。**

*from* **selenium** *import* webdriver
*import* **pandas** *as* pd
*from* bs4 *import* **BeautifulSoup**
*from* time *import* **sleep**

用任何名字创建你的工具并启动 Chrome 的驱动程序。

class **FindJob**():
  def __init__(self):
    self.driver = webdriver.Chrome()

这就是我们开始发展所需要的一切。现在转到您的终端并键入:

python -i findJob.py

这个命令让我们把我们的文件作为一个互动的游乐场。浏览器的新选项卡将会打开,我们可以开始向它发出命令。
如果你想试验,你可以使用命令行,而不是直接输入到你的源文件中。只是用
机器人代替自身**。**

对于终端:

**bot** = FindJob()
  **bot**.driver.get('https://www.indeed.com/jobs?q=data+science&l=United+States&start=')

现在来看看源代码:

self.driver.get('https://www.indeed.com/jobs?q=data+science&l=United+States&start=')

创建我们将要使用的数据帧很容易,所以让我们从这里开始吧!

对于这个数据框,我们需要有“头衔”、“位置”、“公司”、“薪水”、“描述”都与我们要刮的工作相关。

**dataframe** = pd.DataFrame(
  columns=["Title", "Location", "Company", "Salary", "Description"])

我们将使用这个数据帧作为 CSV 文件的列名。

这个网站的问题是,在每一页上都有 10 个工作机会,当你进入下一页时,链接会发生变化。一旦我明白了这一点,我就做了一个 for 循环来检查每一页,并在它完成后转到下一页。看起来是这样的:

*for* **cnt** in range(0, 50, 10):
  self.driver.get("https://www.indeed.com/jobs?q=data+science&l=United+States&start=" + str(cnt))

我设置了一个计数器变量“cnt ”,并将这个数字添加到我的链接中,并转换为字符串。for 循环特别从 0 开始,一直到 50,迭代 10 次,因为这是每页显示的作业数。

当我们进入第一页时,我们需要一个接一个地抓取报价表,我们将这样做:

在上图中,您可以看到报价,它们被打包在一个表中,我们可以通过按键盘上的 F12 键或右键单击-> Inspect 找到该表。

看起来是这样的:

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

我们将通过类名找到该表,并输入以下行:

**jobs** = self.driver.find_elements_by_class_name('result')

它保存通过类名结果找到的所有 Web 元素。

一旦保存了这些数据,我们就可以创建另一个 for 循环,遍历表中的每个元素,并使用在表中找到的数据。

在我向您展示更多收集这些报价的代码之前,我们应该先看几件事情。

对于这一部分,我们将使用 BeautifulSoup ,因为我发现它的工作方式更快。

我们必须为 BeatifulSoup 设置一些东西,这些是我们给它执行搜索的实际数据,以及我们说它应该使用的解析器:

**result** = job.get_attribute('innerHTML')
**soup** = BeautifulSoup(result, 'html.parser')

一旦我们得到这些,我们只需要找到“汤”定义的变量中的元素,这只是 BeautifulSoup 准备的数据。

我们得到我们想要的数据帧的数据:

**title** = soup.find("a", class_="jobtitle").text.replace('\n', '')
**location** = soup.find(class_="location").text
**employer** = soup.find(class_="company").text.replace('\n',   '').strip()
*try*:
  **salary** = soup.find(class_="salary").text.replace(
    '\n', '').strip()
*except*:
  **salary** = 'None'

我用这种方式做了一个薪水部分,因为有时它没有被定义,我们必须为这个特定的单元格设置 None 或 empty。

因为我在终端中测试我的代码,所以您也可以打印到目前为止您所发现的内容:

print(title, location, employer, salary)

一旦这个脚本完成,它将看起来像这样:

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

数据框中缺少的最后一项是工作描述,之所以省略它,是因为为了获得工作描述的文本,您必须首先单击工作待遇。我是这样做的:

**summ** = job.find_elements_by_class_name("summary")[0]
**summ**.click()
**job_desc** = self.driver.find_element_by_id('vjs-desc').text

在我们得到所有应该放入数据帧的元素后,我们填充它:

**dataframe** = dataframe.append(
  {'Title': title, 'Location': location, 'Employer': employer, 'Description': job_desc}, ignore_index=True)

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

****在你开始亲自测试之前,还有一件事我必须提一下。

一旦你进入网站的第二页,会有一个弹出窗口阻止你进一步点击任何东西!

我也想到了这一点,并创建了一个 try-expect,它将关闭弹出窗口并继续抓取数据!

**pop_up** = self.driver.find_element_by_xpath('/html/body/table[2]/tbody/tr/td/div[2]/div[2]/div[4]/div[3]/div[2]/a')**pop_up**.click()

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

for 循环完成后,我们将数据帧数据复制到名为“jobs”的 CSV 中:

dataframe.to_csv("jobs.csv", index=False)

我们完了!

完整的代码在我的 GitHub 账户下面:

** [## lazargugleta/findJob

用于作业抓取的简单 Python 脚本。通过在 GitHub 上创建一个帐户,为 lazargugleta/findJob 开发做出贡献。

github.com](https://github.com/lazargugleta/findJob)

后续步骤

你可以通过实现不同网站之间的比较,将这个脚本带到另一个层次,并在互联网上获得整体的最佳报价。

在此之前, 关注我 求更!😎

感谢阅读!

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

查看我的其他文章并关注我的媒体

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

当我有新文章发表时,请在 Twitter 上关注我**

使用 Python 获得通知的 3 种方式

原文:https://towardsdatascience.com/how-to-get-a-notification-when-your-training-is-complete-with-python-2d39679d5f0f?source=collection_archive---------10-----------------------

现在,您可以在等待培训完成的同时从事其他项目

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

照片由布雷特·乔丹Unsplash 拍摄

动机

作为一名数据科学家或程序员,处理数据和训练模型可能需要花费大量时间。不断地在屏幕上查看培训内容是低效的,尤其是当培训可能需要几个小时或几天的时候。有什么方法可以让你在使用 Python 完成训练后收到通知?

是的,您可以通过以下方式获得通知:

  • 噪音
  • 电子邮件
  • 松弛的

这些方法中的每一种都只需要多 2 到 3 行代码。让我们看看如何使用这些方法创建自己的系统来获得通知。

制造噪音

如果你在等待训练结束的时候正在电脑旁边做一些事情,那么简单地在训练结束的时候制造一点噪音就是一个足够好的解决方案。

我在 StackOverflow 上找到了这段代码。下面的函数产生具有指定持续时间和频率的蜂鸣声

在 Windows 上

在 Linux 和 Mac 上

您需要安装sox来运行下面的代码

在 Linux 上,运行

sudo apt install sox

在 Mac 上,运行

sudo port install sox

只需在你的训练代码底部插入函数make_noise()

一旦训练结束运行,功能make_noise()将被执行,并会有一个噪音!如果你正在做别的事情,你可以停下你正在做的事情,检查你的训练结果。

电子邮件

制造噪音是获得通知的一个很好的方式,但是如果训练结束时你不在电脑旁边怎么办?另外,你可能想让你的队友知道训练何时结束。这就是发送电子邮件派上用场的时候。

有一个叫做 knockknock 的 Python 库,可以让你在训练完成或者训练过程中崩溃的时候得到通知。得到一个通知只需要增加两行代码。

要安装 knock-knock,请键入

pip install knockknock

您需要一个 Gmail 电子邮件地址才能使用 knock-knock 发送电子邮件。确保为 knockknock 打开不太安全的应用功能,以使用您的 Gmail 帐户。为了保护您的主 Gmail 帐户,最好创建另一个 Gmail 帐户来发送通知。

要发送电子邮件,只需在你的培训功能上方插入一个装饰器@email_sender()

您可以使用recipient_emails=[“youremail@gmail.com”, “your_teammate_email@address.com”]向一个人或一组人发送电子邮件。

如果没有指定sender_email,那么recipient_emails中的第一封邮件将作为发送者的邮件。

现在当你运行你的脚本时

python yourscript.py

培训结束后,您将收到一封电子邮件。

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

在你现有的脚本上试试这个,并检查你的电子邮件!

松弛的

Slack 是许多团队讨论工作和分享进展的公共平台。如果您正在使用 Slack,您可能希望将它发送到您公司的一个渠道,例如 channel #developer,以便在培训结束时通知您的开发团队。幸运的是,knock-knock 还允许你在训练结束时发送通知!

要向您的 Slack 发送通知,从启用并创建一个传入的 webhook 开始。然后简单地用webhook_url指定你的空闲房间的网址,用channel.指定要通知的频道

如果您想标记您的队友,请将user_mentions=[“your_slack_id”, “your_teammate_slack_id”]添加到@slack_sender

现在,当您运行您的脚本时,当代码完成执行时,一条消息应该被发送到您的 slack 通道!

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

结论

恭喜你!您刚刚学习了如何通过制造噪音、向您的电子邮件或 Slack 频道发送通知来获得通知。现在,您不再需要经常检查您的计算机来了解培训是否已经完成!您和您的队友可以在等待培训结束的同时从事其他项目。

如果您想使用电报信使、文本消息或其他方式获得通知,请选中 knock-knock

本文的源代码可以在这里找到:

[## khuyentran 1401/数据科学

有用的数据科学主题以及代码和文章的集合- khuyentran1401/Data-science

github.com](https://github.com/khuyentran1401/Data-science/tree/master/python/notification)

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

如果你想查看我写的所有文章的代码,请点击这里。在 Medium 上关注我,了解我的最新数据科学文章,例如:

[## 如何用 Faker 创建假数据

您可以收集数据或创建自己的数据

towardsdatascience.com](/how-to-create-fake-data-with-faker-a835e5b7a9d9) [## Datapane 简介:构建交互式报表的 Python 库

创建精美报告并与您的团队分享分析结果的简单框架

towardsdatascience.com](/introduction-to-datapane-a-python-library-to-build-interactive-reports-4593fd3cb9c8) [## VSCode 中数据科学家的 4 大代码查看器

让 YAML、JSON、CSV 和 Jupyter Notebook 为你工作,而不是与你作对

towardsdatascience.com](/top-4-code-viewers-for-data-scientist-in-vscode-e275e492350d) [## 高效 Python 代码的计时

如何比较列表、集合和其他方法的性能

towardsdatascience.com](/timing-the-performance-to-choose-the-right-python-object-for-your-data-science-project-670db6f11b8e) [## 数据科学家 Pytest

适用于您的数据科学项目的 Pytest 综合指南

towardsdatascience.com](/pytest-for-data-scientists-2990319e55e6)

如何获得一个令人惊叹的终端

原文:https://towardsdatascience.com/how-to-get-an-amazing-terminal-91619a0beeb7?source=collection_archive---------0-----------------------

在 Windows 和 Linux 中;包括提示、字体和颜色

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

使用 Agnoster 主题的鱼壳示例。它在 Gnome 终端中执行,该终端使用 Ubuntu Mono Powerline 作为字体。这幅图像是由马丁·托马斯创作。

作为一名拥有 10 多年经验的开发人员,我喜欢使用 shell。命令永远不会改变,我可以创建自定义的快捷方式,这是可靠和快速的。不过,默认设置并不太好。看完这篇文章,你就知道如何在你的系统上获得一个牛逼的 shell +终端了。

术语

外壳是实际执行命令的部分。终端是一个运行外壳的包装器。

终端是你设置字体、字体大小、配色方案、多标签支持的地方。终端模拟器的例子有 KDE 上的 GNOME 终端Konsole终结器XTerm 。在 Linux 上,我建议保留默认值。在 Windows 上, Windows 终端牛逼。在 Mac 上,我听说过关于 iTerm 2 的好消息。

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

Linux 上的四个终端模拟器(Gnome 终端、Konsole、XTerm、Terminator)。XTerm 不直接支持制表符。其他有 2 个标签打开。它们都运行 Bash shell。这幅图像是由马丁·托马斯创作。

外壳存储输入命令的历史,定义如何设置环境变量,如何切换当前目录。Linux 上 shells 的例子有 ZSHBashfish 。在 Windows 上,典型的 Shell 是 PowerShell 。您可以通过执行echo $0来查看您正在运行哪个 shell。在 Linux 上,最有可能是 Bash。

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

Gnome 终端中的三个 Linux shell(ZSH、Bash、fish)。我大量定制了 ZSH 外壳;Bash 和 fish 显示默认。您可以看到 fish 有一个内嵌的自动建议特性,这是其他两种 shells 所没有的。图片由马丁·托马斯提供。

每个外壳都有一个提示。提示是写在光标前的内容。它通知您可以输入命令,并给出有用的上下文信息。在上面的例子中,提示包含用户名moose、当前计算机pc08、当前工作目录~/GitHub/MartinThoma/flake8-simplify、活动 git 分支feature/19以及存在修改的事实。

字体

不管你拿什么,字体很重要。你可能想有一个等宽字体。你肯定想要一个电力线字体;相信我。电力线字体使您的 shell 可以使用看起来像图像的字符。它可以使提示方式更好。

我喜欢 Ubuntu MonoDroid Sans Mono :

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

上面一行是 Ubuntu Mono,下面的例子是用 Droid Sans Mono 写的。我更喜欢 Ubuntu Mono,但两者都是合理的字体。图片作者:马丁·托马斯

还有像 Fira Code 或者 Jetbrains Mono 这样的“编程字体”。我不喜欢它们,因为它们让我更难真正知道写的是什么。不过,它们看起来不错。

Windows 终端

首先,确保您已经安装了 Windows 终端:

[## 获取 Windows 终端— Microsoft 商店

Windows 终端是一个现代的、快速的、高效的、强大的、多产的终端应用程序,适用于…

www.microsoft.com](https://www.microsoft.com/en-us/p/windows-terminal/9n0dx20hk701?source=lp&activetab=pivot:overviewtab)

启动终端并导航到设置。就是这个向下指的小“箭头”:

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

点击“设置”。截图由马丁·托马斯拍摄

您应该看到一个 JSON 文件,您可以根据自己的喜好进行更改。我有以下内容:

下载并安装所有 4 种"DejaVu Sans Mono power line"字体。在我所知道的所有系统上,安装一个字体都是通过双击来完成的。然后一个有“安装”按钮的窗口打开。

Linux 和 Windows 终端:Aminal

Aminal 是一个用 Go 编写的终端模拟器。它可以在 Linux、Windows 和 Mac 上使用。它允许通过配置文件进行配置,并在其中包含颜色和键盘快捷键。

首先,你需要在你的系统上安装和配置 Go。在 Ubuntu 上,它是这样工作的:

$ sudo apt-get install golang libgl1-mesa-dev xorg-dev
$ export GOPATH="$HOME/go"
$ export GOBIN=$(go env GOPATH)/bin

然后,您可以安装并运行 aminal:

$ go get -u github.com/liamg/aminal
$ aminal

Linux: Gnome 终端

Gnome 终端可以通过编辑配置文件来定制。这里我设置了Ubuntu Mono derivative power line Regular的字体大小为 12。

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

图片作者:马丁·托马斯

该命令被设置为zsh,因为这是我最喜欢的 shell。

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

图片作者:马丁·托马斯

颜色设置为曝光深色(从左到右,顶线/底线)

  • 背景:#2e3436 / #555753
  • 深红色:#cc0000 /浅红色:ef2929
  • 深绿色:#4e9a06 /浅绿色:#8ae234
  • 深黄色:#c4a000 /浅黄色:#fce94f
  • 深蓝色:#3465a4 /浅蓝色:#729fcf
  • 深紫色:#75507b /浅紫色:#ad7fa8
  • 深青色:#06989a /浅青色:#34e2e2
  • 深灰色:#d3d7cf /浅灰色:#eeeeec

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

Linux Shell: fish

安装落鱼外壳;

sudo apt-get install fish

将终端模拟器中的默认 shell 更改为fish。在 Gnome 终端中,它被称为“自定义命令”。

然后安装“ 哦我的鱼 ”:

curl -L https://get.oh-my.fish | fish

并将主题设置为未知者:

omf install agnoster
omf theme agnoster

关于 fish shell 的酷炫特性,请阅读 Alec Brunelle 的为什么我使用 Fish Shell 而不是 Bash 和 Zsh

别名

让终端变得强大的一个核心部分是让常用命令变得简短。为此,您可以为命令创建一个别名,即原始命令的较短版本。最常见的例子是将目录向上更改一级。比如你在/home/user/foo/bar,你想去/home/user/foo。在大多数 shells 中,您必须输入cd ..。我喜欢将其缩写为..。所以我有了别名alias ..='cd ..'。语法可能会有所不同,这取决于您的 shell。对巴什、ZSH 和费什来说

alias short='long'

对于巴什,你将它们插入~/.bashrc,对于 ZSH,插入~/.zshrc。在鱼类中,则不同

以下是我喜欢的一些别名:

# Shorten things
alias ..='cd ..'
alias ...='cd ../../'
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
alias c='clear'# If your terminal supports colors, use them!
alias ls='ls --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
alias diff='colordiff'# Works only if you have notify-send
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

摘要

  • 确保你有一个合理的终端模拟器。我建议Linux 用 Gnome 终端,Mac 用 iTerm 2 ,Windows 用 Windows 终端
  • 安装一个好的电力线字体像 Ubuntu Mono 电力线
  • 根据您的喜好调整终端仿真器的字体字号配色
  • 安装好外壳。我建议 Linux 用,Windows 用 PowerShell
  • 根据你的需要调整你的外壳的提示。我喜欢不可知论者主题

如何用神经风格迁移获得漂亮的结果

原文:https://towardsdatascience.com/how-to-get-beautiful-results-with-neural-style-transfer-75d0c05d6489?source=collection_archive---------7-----------------------

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

深入探究使神经类型转移起作用的技巧

我最近对用机器学习生成中等轮廓图片产生了兴趣。这让我深深陷入了神经类型转移的领域。虽然 NST 在概念上很容易理解,但生成高质量的图像却异常困难。有许多错综复杂的细节和未提及的技巧,你必须正确实施,以获得巨大的成果。在本文中,我们将深入探讨神经类型转移,并详细检查这些技巧是什么。

在媒体和其他出版物上有许多关于 NST 的可靠介绍,所以我不会浪费任何时间来复习基础知识。如果你不知道 NST 是什么(或者你想跟随这篇文章),一个很好的开始方式是查看官方 PyTorch 教程。不幸的是,与许多其他介绍性文章一样,最终的实现充其量只能产生一般的结果(图 1)。我们将在接下来的几节中更新教程代码,以提高传输质量,但首先我们要谈一个话题。

本文的所有附带代码都可以在my GitHub上找到。

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

图 1:两种不同实现的神经风格传输质量的比较。(左下角)我们要匹配其内容的图像。(左上)我们想要匹配其样式的图像。(中间)使用 PyTorch 教程实现的样式传递结果。(右)使用本文中详细介绍的实现的风格转换结果。生成的图像在视觉上具有更高的质量,并且更忠实地匹配风格图像的风格。

题外话:为什么克矩阵测量风格?

大多数介绍神经类型转移的 Gatys 等人的论文简单易懂。然而,一个没有解决的问题是,为什么 Gram 矩阵是表示风格(即纹理)的自然方式?

在高层次上,Gram 矩阵测量同一层中不同特征地图之间的相关性。特征映射只是卷积层的激活后输出。例如,如果一个卷积层有 64 个滤波器,它将输出 64 个特征图。然后,Gram 矩阵测量图层中每个要素地图和每个其他要素地图之间的相关性(相似性),而不必关心精确的像素位置。为了说明为什么这是一个合理的纹理测量,假设我们有两个过滤器,一个检测蓝色的东西,一个检测螺旋。我们可以将这些滤波器应用于输入图像,以产生 2 个滤波器图,并测量它们的相关性。如果过滤贴图高度相关,那么图像中出现的任何螺旋几乎肯定是蓝色的。这意味着图像的纹理由蓝色螺旋组成,而不是红色、绿色或黄色螺旋。

虽然这个解释仍然让我有点不安,但在纹理合成社区,Gram 矩阵对应于样式似乎是一个被广泛接受的事实,正如这篇文章所解释的。此外,我们不能否认,我们使用 Gram 矩阵得到的结果令人印象深刻。

修复 PyTorch 实现

提高传输质量的第一步是修复 PyTorch 教程的实现。本教程试图忠实于 Gatys 等人的论文,但在此过程中遗漏了一些东西。首先,论文的作者用一个AvgPool2d代替了MaxPool2d,因为他们发现它产生了更高质量的结果。另一个细节是,本教程计算卷积输出的ContentLossStyleLoss,而不是 ReLU 激活。这更像是吹毛求疵,因为我没有注意到在我的实验中使用卷积和 ReLUs 之间有很大的区别。

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

图 VGG19 网络及其层(来源)。

教程和论文之间最惊人的区别是“错误的”层分别用于ContentLossStyleLoss。我在引号里写错了,因为层的选择很大程度上是主观的,很大程度上取决于什么能产生最令人愉快的风格。也就是说,我们可以用一些经验法则来指导我们的决定。当测量内容相似性时,当在content_img和生成的input_img之间存在像素完美匹配时,较低层倾向于最高度激活。我们越深入网络,这些层就越不关心精确的匹配,相反,当特征通常处于正确的位置时,它们就会高度激活。为了可视化每一层最关心的是什么,我们可以设置style_weight=0并使用不同的层作为content_layer在随机的input_img上运行训练过程。

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

图 3:可视化 VGG19 网络不同层响应的内容。网络中更靠右的层更深。

本教程使用第四个卷积(图 2 中的conv2_2)作为内容层。正如我们在上面的图 3 中看到的,这可能是一个太低的层,不能用于内容,因为网络仍然关心在这个深度匹配像素。Gatys 等人用conv4_2代替,它更关心整体的特征排列,而不是单个像素。

就风格而言,较低层对小的重复特征作出反应,而较高层则捕捉更抽象的整体特征。因此,为了传递style_img的整体风格——从底层细节到总体主题——我们应该在网络中包含所有深度的层。本教程使用前 5 个卷积层,但这些都是相当低的网络,不太可能捕捉全局特征。Gatys 等人使用了conv1_1conv2_1conv3_1conv4_1conv5_1,这是一种跨越整个网络层次的良好分层分布。我们可以使用我们用于内容的相同方法来可视化每一层选择的优化样式。为此,我们设置content_weight=0,指定我们想要使用哪个style_layers,并随机运行训练过程input_img

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

图 4:(左)PyTorch 教程中选择的图层产生的样式。(右)在 Gatys 等人的论文中选择的图层产生的风格。

正如预期的那样,由教程层优化的样式捕获了低级的、重复的特征,但是未能捕获高级的、全局的特征。

提高传输质量

到目前为止,我们已经实现的修复应该让我们相当接近 Gatys 等人的论文中看到的质量。从这里,我们将更深入,看看接下来我们可以采取什么措施来生成更好的图像。

我从论文中改变的第一件事是将优化器从L-BFGS切换到Adam。在论文中,作者声称L-BFGS导致更高质量的传输,但我在实验中使用Adam时没有注意到差异。此外,Adam似乎更稳定,尤其是在训练大量步数或大幅度style_weight时。在这些情况下,L-BFGS似乎NaN出来了,可能是由于爆炸梯度(虽然我没有看得太深)。

另一个小调整是将mse_loss(即 L2 损失)切换到l1_loss。我想不出一个很好的理由来使用 L2 损失进行风格转换(除了在 0 的可微性),因为平方项严重惩罚离群值。正如前面提到的,我们并不真正关心像素的精确匹配,可以容忍生成的图像中有一些异常值。事实上,当样式和内容特征融合在一起时,离群值甚至可能会导致视觉上更令人愉悦的结果。最后,特性可视化——相关主题的必读文章——的作者也使用l1_loss完成他们的任务,可能是出于类似的原因。

实际上,许多用于生成高质量特征可视化的技巧优雅地转移到了神经风格转移上。事实上,FV 和 NST 在概念上非常相似,只是它们生成input_img的方式不同。在 NST 中,input_img经过优化,以与content_imgstyle_img相同的方式激活网络中的不同层。另一方面,FV 不使用content_imgstyle_img,而是生成一个input_img,最大限度地激发不同层中的神经元。

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

图 5:由激进的数据扩充引起的生成图像右上方边缘的旋转伪影。

我从 FV 借鉴的一个技巧是在input_img上使用数据增强。这与常规的分类任务完全一样:在每一步,我们对input_img应用一些增强(例如,旋转、裁剪、调整大小等。)然后在模型中运行并计算损失。通过在每一步增加input_img,我们迫使input_img产生对微小扰动具有鲁棒性的特征。这些健壮的特征应该包含较少的高频伪像,并且通常看起来更具视觉吸引力。然而,我发现特性可视化文章中使用的增强非常激进,必须适当地缩小它们。即便如此,在生成的图像边缘仍然会出现一些旋转伪影(图 5)。消除这些伪像的最简单的方法是将图像向下裁剪几个像素🙃。

最后,我做的最后一个修改是将content_layer换成conv3_2,而不是 Gatys 等人使用的conv4_2。我读的大多数文章也推荐conv4_2,尽管我发现在conv4_2细节会被洗掉,而且风格会压倒生成图像中的内容。另一方面,conv3_2仍然保持了这些细节,而没有像下层那样过度牺牲像素的完美性。事实上,我们可以通过再次查看图 3 来确认这一点。

进一步提高质量

我们现在已经讨论了我在我的神经风格转换代码中实现的所有技巧。在这一点上,我们已经大大提高了原始 PyTorch 教程的传输质量。此外,content_weightstyle_weight对于特定的图像选择更加健壮。例如,在 PyTorch 教程中,我发现如果没有适当的调整,一组图像上的好的style_weight不容易转移到另一组。

也就是说,通过尝试去除生成图像中的高频噪声,有可能获得更好的结果。我遇到的最有趣的方法来自文章可微分图像参数化——另一篇涉及类似主题的必读文章。在本文中,作者通过首先在(去相关)傅立叶空间而不是(相关)像素空间中对其进行参数化来生成input_img。由于input_img是通过梯度下降生成的,去相关输入充当预处理程序,通过允许梯度下降更快地找到最小值,使优化更容易(类似于在监督学习任务中移除相关特征)。我还不完全清楚为什么会导致更高质量的传输,除此之外,像去相关空间中的最小值这样的手动波动解释更广泛、更可靠。

一种更简单的方法是通过直接或间接抑制高频噪声。通过将input_img总变化损失加到优化目标上,可以直接惩罚噪声。相反,可以通过在每个梯度下降步骤之后模糊input_img,或者在将梯度应用到input_img之前模糊梯度,来隐式地惩罚噪声。这两种方法的一个问题是它们也不利于真正的高频特征。这可以通过在训练期间缩小总变化损失或模糊量而得到某种程度的改善。

结论

如果你已经做到这一步,你现在应该知道很多关于用神经风格转换生成美丽图像的知识。虽然在概念上很简单,但是获得高质量的结果需要非常小心。我最初的目标是使用机器学习来生成中等轮廓的图片。经过多次反复试验,我想我偶然发现了一些看起来相当惊人的东西。对我来说,整个过程中最令人兴奋的部分是神经网络的端到端可微性。只需很少的努力,我们就能够“反转”一个最初被训练来区分猫和狗的模型,并使用它来生成无数不同风格的图像。尝试在随机森林中这样做。

如果你喜欢这篇文章,请关注我,以便在我发布新内容时得到通知。所有代码都可以在我的 GitHub 上找到。

欧根·霍塔杰,
2020 年 3 月 27 日

脚注

  1. 稳健的特性也已经显示在非 VGG 架构中产生高质量的传输结果。由于尚未被理解的原因,非 VGG 架构不能开箱即用地进行神经类型转移。

如何更好地进行评估

原文:https://towardsdatascience.com/how-to-get-better-with-estimations-44968f9ec3c1?source=collection_archive---------63-----------------------

按时交付项目的一些技巧

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

Unsplash 上由 Veri Ivanova 拍摄的照片

很难估计。每个开发人员都在努力完成这项任务。原因很简单:开发人员被要求评估他们以前从未做过的事情。除非它是一个代理机构,使新的品牌应用程序从一个白色标签完全相同的功能。

为了更好地描述为什么评估是困难的,想象一下下面的场景:一个工程师必须使用他过去从未使用过的特定框架来实现注册功能。然而,随着多年经验的积累,估计会变得更加精确。但是不确定性并没有完全消失。你如何通过评估取得成功?

按小时估算

有一次,我在一家公司工作,在那里我们对评估和时间跟踪有非常严格的规定。对于我们得到的每一个新的特性请求,我们必须精确地估计它。有一条规则:任务不能超过 2 小时。如果任务超过 2 小时,我们必须把它分成更小的子任务。任务粒度为 15 分钟,意味着任务不能短于 15 分钟。否则,花更多的时间在报告上而不是实际任务上是没有任何意义的。

所有这些听起来像是工作中的开销,会产生压力感。另一方面,它教导纪律和责任。没人说过登录功能需要 2 个小时。处理这种回答很容易。尝试向开发人员解释,所有超出估计的工作都不会得到支付。这不一定会发生,但至少工程师在做下一次评估时会采取负责任的行动。我们都知道它通常是如何发生的:我们忘记了一些微小的细节,而这个功能已经完成了 4 个小时。是最初估计的两倍。

因此,良好的分析和关注细节是提高评估质量的关键。

建议: 提前花些时间分解每一个特性请求。考虑每一个可能的用例,包括错误处理。如果网络调用失败,是否有错误对话框?用户可以重试吗?

按天估算

另一种可能的估算方法是将它们四舍五入到一整天。例如,实现注册功能- 2 天,实现登录功能- 1 天。与第一种估计方法相比,这种方法产生的时间压力较小。如果你对你的估计没有信心,你应该试着按天来估计。

如果遗漏了什么,按天估计会有一些时间缓冲。如果注册功能花了 15 个小时,而你计划花 2 天,那么你为自己节省了一个小时。你不必急于在 6 小时内完成任务,如果你在 1 天内完成它。由于有足够的时间,这种方法提供了在构建特征时涵盖所有可能场景的机会。

有些任务需要一个小时才能完成。这些任务以及其他类似的任务需要收集。这样我们就可以知道我们需要一天的时间来完成 3 项任务。

建议: 把每一项任务看成一个完整而独立的特性。然后试着评估你会用多少个 8 小时的工作日来完成它。1 天的时间足够建造它吗?为什么需要 3 天而不是 2 天?不要犹豫,增加一些缓冲。

根本不用估计

有一次,我加入了一个团队,在一个伟大而专业的 scrum 大师的领导下。他已经有多年处理流程和应用最新敏捷方法的经验。最让我吃惊的是,他告诉我,他的团队没有估计。没有日期,没有故事点,没有 t 恤尺寸。没什么。我的第一个问题是“这个团队如何在没有估计的情况下按时完成每个冲刺?”。

和他好好商量了一下,我明白了。每隔一周的周一,团队都会制定冲刺计划。他们定义了他们想要在下一次冲刺中完成的目标。backlog 中的故事由产品负责人预先确定优先级。所以团队从待办事项列表的顶部抽取一些。

但是谁来控制应该拍多少故事呢?答案是一个 scrum 高手。他每次冲刺都在做统计。基于这一点,他观察到大多数故事的大小大致相同。每个故事平均需要 3 天完成,在 2 周的冲刺中,团队能够交付 3 个故事。为了更好地理解这个系统,这里有一个来自艾伦·霍勒伯的精彩解释讲座

所以在这种情况下,团队对评估一无所知。scrum master 试图控制故事的大小,每当它看起来太大时,他会根据与产品负责人的讨论将它分成更小的故事。

建议: 如果团队在估算上有困难,将它们转化为计算要完成的故事。找一个人来委派这个责任。这个人将负责评估要做的工作量,而不是估计。

很难估计。没有人喜欢做评估,因为这是对我们不确定的事情的承诺。提高评估质量的关键在于实践。如果你多练习,从所有错过的截止日期中学习,你将学会如何做出准确的估计。

如何用 Python 从 API 获取数据🐍

原文:https://towardsdatascience.com/how-to-get-data-from-apis-with-python-dfb83fdc5b5b?source=collection_archive---------10-----------------------

数据科学家需要数据。没有数据,你就没有模型、仪表板或应用程序。在本文中,您将学习如何查询 API 来获取构建酷东西所需的数据!🚀

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

资料来源:pixabay.com

说数据是新石油有点老生常谈了。我更愿意把它看作像风能一样的可再生资源。💨无论你选择哪种能源作为你的隐喻,你都想利用它的一些力量!⚡️

理想情况下,您可以直接访问您控制的文件或数据库中的数据。如果情况不是这样,幸运的话,这些数据可以通过面向公众的 API 获得。☘️

在本文中,我将向您展示使用 Python 从公共 API 获取数据的步骤。🐍首先,我将向您展示如何以及在哪里寻找 Python API 包装器,并分享最大的 Python API 包装器库。🎉

然后,我将向您展示如何使用请求库从没有 Python 包装器的 API 中获取您想要的数据。

如果您想要的数据在一个网站上,但不能通过面向公众的 API 获得,那么有几种选择来抓取它。何时使用哪个刮包是我正在做的另一篇文章。关注确保你不会错过!😁

我们往下钻吧!

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

已经钻好了。资料来源:pixabay.com

蜜蜂

面向外部的应用程序编程接口(API)通常用于提供大块数据。你只需要知道如何使用 API。

一个组织创建一个面向公众的 API,目的是让您使用它。他们的动机从理想主义到唯利是图,可能包括以下内容:

  1. 希望你能建造一些东西来改善这个世界。🌍
  2. 希望你会使用他们的免费计划,然后需要如此多的数据或需要数据如此频繁,你会付钱给他们访问更多的数据。💵
  3. 如果他们不给你一个直接的链接,你会从网站上抓取数据,所以他们可能会减少他们的服务器开销,让你的体验更好。😀

API 可以被很好地记录,很差地记录,或者介于两者之间。如果你幸运的话,它们是有据可查的。如果你真的幸运的话,有一个 Python 包装器可以运行,并且有很好的文档记录。🎉

查找 Python API 包装器

为您需要的 API 找到 Python 包装器可能很棘手。这是我建议的方法。

Python API 包装器列表

我在 GitHub 维护我认为最大的 Python API 包装器列表。 Real Python 做了一个很好的列表,由 johnwmiller 分叉并更新。我稍微清理了一下列表,然后,鉴于冠状病毒隔离终止了我的孩子从足球裁判⚽️和照看猫中赚钱的能力🐈我付钱让他们帮忙改进名单。我们更新和扩充了这个过时的列表,因为我在别处找不到一个好的可用 API 包装器列表。😀

如果您发现列表中缺少一个 Python API 包装器,请编辑 ReadMe 文件并提交一个 pull 请求。如果您是新手,这里有一个在 GUI 中编辑 GitHub Markdown 文件的快速指南:

点击右上角的铅笔图标,进行修改(这里有一个可爱的降价教程,如果你需要的话)。然后点击页面底部的绿色提议文件更改按钮。然后点击绿色的创建拉动请求按钮,总结更改,并点击底部的绿色创建拉动请求按钮。谢谢大家!🎉

仅供参考,我经常在我的 Data Awesome 邮件列表中突出 Python 包。在下一期文章中,我将重点介绍由冉阿让撰写的 yfinance 。yfinance 包装了雅虎金融 API。你可以用一行代码将股票市场数据读入熊猫数据框。🚀

如果 Python API 包装器列表中没有您需要的东西,我建议您使用通常的方法在互联网上查找。🕸

谷歌一下

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

一个好的搜索引擎是开发者或数据科学家最好的朋友😁

具体来说,我会搜索我正在寻找的 Python 包装器的名称。GitHub 链接可能是最有成效的。如果回购协议在过去几年中没有更新或者已经存档,那么成功使用包装器的可能性就不大。那样的话,我建议你继续找。👓

查看 API 网站

如果幸运的话,您正在使用的 API 的网站可能会列出各种编程语言中可用的包装器。值得一试。😃

直接使用 API

当没有 API 包装器时,你必须直接查询 API。我建议你使用 Python 请求库。

使用请求

古老的请求库是久经考验的从 API 获取信息的方法。Requests 由 Kenneth Reitz 创建,受 Python 软件基金会保护。在撰写本文时,这是下载量最大的 Python 包。👍

使用pip install requests从命令行将请求安装到您的环境中

然后导入使用。使用 HTTP 动词 getpost 作为返回所需信息的方法。大多数情况下,您将使用 *get。*下面是如何查询 GitHub API:

import requestsr = requests.get**(**'https://api.github.com/events'**)**

您可以将参数作为字典传递给 get 方法。这是快速入门指南

当你发出一个 get 请求时,你经常会得到 JSON。您可以使用请求*。json()* 快速将 json 变成字典的方法。

my_dict = r.json()

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

用请求提炼数据查询比提炼石油要快得多😀资料来源:pixabay.com

Requests 在幕后使用了 urllib3 库并对其进行了增强。您还可以使用其他库,但是 requests 非常可靠,易于使用,并且为大多数 Python 程序员所熟悉。我建议您在想要进行 API 调用并且 API 没有 Python 包装器时使用请求。

说到这里,如果你最喜欢的 API 没有 Python 包装器,我鼓励你考虑做一个。👍

制作 Python API 包装器🛠

制作 API 包装器是学习 Python 打包技能的好方法。我写了一个指南让你开始制作 Python 包并在 PyPi 上发布。

我创建了py libraries,这是一个用于 Libraries.io API 的 Python 包装器。制作它是一次很棒的学习经历,回馈给我受益匪浅的开源社区是一件很酷的事情。🚀

关于 API 你应该知道的其他事情

API 键、速率限制和 cURL 是您应该熟悉的另外三个术语。

API 键🗝

您通常需要一个 API 键来查询 API。API 文档应该清楚地说明如何获得密钥。大多数时候,你可以通过在你想要其数据的组织的网站上注册来免费获得一个。如果你想要大量的数据或者经常需要,你可能需要支付特权。

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

钥匙。资料来源:pixabay.com

您可以将 API 密钥存储在环境变量中。这里有一个在 Mac、Linux 和 Windows 上设置环境变量的指南。按照惯例,环境变量名都是大写的。说到所有的大写:

在任何情况下,⚠️都不会在 GITHUB 或其他可公开访问的在线版本控制系统中存储 API 密钥。⚠️

你的钥匙可能会被盗和滥用——尤其是当你的账户有信用卡的时候。☹️

要在 Python 中访问保存 API 键的环境变量,请导入os模块并从字典中获取值,该值的键与环境变量的名称相匹配。例如:

import osos.environ.get('MYENVIRONMENTVARIABLE')

这段代码返回您的 MYENVIRONMENTVARIABLE 环境变量的值。

如果您将在云上的应用程序中使用您的密钥,您应该研究一下秘密管理,正如这里讨论的。

说到远离麻烦,我们来讨论一下费率限制。

费率限制

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

需要限制一下。😲资料来源:pixabay.com

许多 API 限制在给定的时间内 ping 它们的次数,以避免支付大量额外的服务器。为了避免超过这些限制,您可以使用 Python time 库并将您的请求放入一个循环中。例如,这里有一个简短的代码片段,它在请求之间等待五秒钟。

import time
import requestst = 0
my_url = 'https://example.com'while t < 100:
    r = requests.get(my_url)
    time.sleep(5)            # wait five seconds
    t += 1
    print(r.json())

这段代码的目的是向您展示如何使用 time.sleep() 来避免可能使您超过速率限制的不间断 API 端点 pings。在真实的用例中,您可能希望以某种方式保存数据,并使用 try…except 块。

卷曲

这是一个使用 Python 和 API 的指南,但是你应该知道你可以用流行的 cURL 程序从命令行查询 API。默认情况下,运行最新 Windows 10 版本的 MAC 和机器上都包含 cURL。如果你想学习 cURL,我建议你去看看免费的电子书征服命令行,作者是 Mark Bates。🚀

概述

如果你想从一个 API 中获取数据,首先尝试找到一个 Python 包装器。点击查看 Python 包装器列表。如果失败,谷歌搜索,并检查 API 网站。如果你在 GitHub 上发现我的列表中缺少一个 Python 包装器,请添加它。😀

如果没有 API 的 Python 包装器,就使用请求库。如果您有时间,可以考虑创建一个包装器,这样所有 Python 用户都可以受益。❤️

不要忘记保护您的 API 键的安全,避免达到速率限制。🔑

包装

您已经学习了使用 Python 查找和使用 API 的工作流。您正在获得做大事所需的数据!🚀

我希望这篇关于在 Python 中使用 API 的指南对你有用。如果你有,请在你最喜欢的社交媒体上分享,这样其他人也可以找到它。👍

我撰写关于 PythonSQLDocker 、数据科学以及其他技术主题的文章。如果你对此感兴趣,请关注我,在这里阅读更多。😀

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

驾驭风!资料来源:pixabay.com

如何使用 R 获得每个 NBA 球员的数据

原文:https://towardsdatascience.com/how-to-get-data-on-every-nba-player-using-r-62abcacd65e1?source=collection_archive---------19-----------------------

篮球| NBA

nbastatR 的美丽、简单和快速

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

照片由 JC GellidonUnsplash

**In this article you'll learn how to:**
- install and load nbastatR
- get every NBA player loaded into R
- get a player's career statistics

NBA 赛季暂停了。你可以把它看成一个负面的东西,然后重复看《最后的舞蹈》。

或者,你可以将此视为一个机会,最终学习如何在 NBA 上做一些数据科学,并真正了解联盟和球员的历史。

安装和加载

有几个 R 包可以让你抓取 NBA 数据。我使用名为 nbastatR 的方法,因为在我看来它是实现最好的方法。要安装该软件包,请使用以下命令:

devtools::[install_github](https://www.rdocumentation.org/packages/devtools/topics/reexports)("abresler/nbastatR")

那么你需要做的就是使用:

[library](https://www.rdocumentation.org/packages/base/topics/library)(nbastatR)

基本功能:获得每个 NBA 球员

nbastatR 中有很多函数,但让我们首先使用以下函数获得每个 NBA 球员的矩阵:

[assign_nba_players()](http://asbcllc.com/nbastatR/reference/assign_nba_players.html)

这将为每个 nba 球员加载一个名为“df_dict_nba_players”的 tible。永远不会。

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

每个观察都是一个玩家,每个玩家有 17 个变量。直接相关的是:

  • namePlayer :玩家的名字(咄)
  • idPlayer: 玩家的 id 号(注:这个其实超级重要)
  • isActive: 表示玩家是否正在玩游戏

您可以在闲暇时探索其他变量。重要的是,你现在知道每个球员的身份证号码。虽然如果使用球员姓名,nbastatR 中的许多功能仍然可以工作,但一些 NBA 球员有类似的姓名,很容易出现拼写错误。如果你使用一个玩家的 id,你永远不会有这些问题。

获取玩家数据集

让我们用 nbastatR 的“球员 _ 职业生涯”函数来做一个快速获取勒布朗·詹姆斯数据的例子。

players_career 函数至少只需要一个输入:

  • 玩家标识符

您可以在 R 中使用

players_careers(players = c("LeBron James"))

注意:你可以使用 players _ careers(players = " LeBron James ")来代替,但我把它作为一个列表,以防我想找到不止一个球员的数据。

调用此函数将返回 8 个表:

  • dataplayercarertotalsallstarseason
  • dataPlayerCareerTotalsPostSeason 季
  • 数据播放目录定期
  • 季后赛
  • 数据播放季节
  • dataplayersaasontotalsallstarseason
  • 数据播放季节总计发布季节
  • 数据播放季节总计常规季节

每个 tibbles 中都有大量数据。您应该探索每一个都给了您什么,以便更好地了解 nbastatR 的功能。

或者,您可以调用勒布朗的球员 id,而不是他的名字,使用:

players_careers(player_ids = c(2544))

这将给出完全相同的结果,但我更喜欢使用 player_ids 方法,因为我知道它不会给我关于其他不如勒布朗出名的球员的错误。

如果需要更具体的东西,您还可以添加另一个名为“mode”的输入,并将数据加载到一个变量中。

例如,要获得勒布朗的职业生涯总成绩,您可以使用:

lebron_totals <- players_careers(players = c("LeBron James"),
                modes = c("Totals"))

您现在有一个如下所示的 tibble:

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

nameTable 变量告诉您每个 dataTable 变量中究竟存储了什么数据。如果你点击一个数据表变量,它会打开另一个包含更多数据的表。

例如,点击 SeasonTotalsRegularSeason 的数据表,你会看到一个包含勒布朗在 NBA 每个赛季的常规赛总成绩的表格。(这是两张截图,因为我无法在一个屏幕上显示所有变量):

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

模式输入需要以下名称之一:

  • 总数
  • PerGame
  • Per36

因此,如果你对一个球员的每场比赛或每 36 分钟的数据更感兴趣,可以使用其他模式。您也可以使用以下命令调用所有三种模式:

lebron_career <- players_careers(players = c("LeBron James"),
                modes = c("Totals", "PerGame", "Per36"))

这将为您提供一个应用了所有三种模式的“表格”。

这只是冰山一角。nbastatR 还有很多其他功能。这只是用 r 获取玩家数据的一个基本方法。

有很多数据要探索,所以尽情享受吧!如果你有具体的问题想让我在以后的帖子中回答,请在下面的评论中告诉我。

资源

http://asbcllc.com/nbastatR/

如何获得数据科学面试:找工作、联系看门人和获得推荐

原文:https://towardsdatascience.com/how-to-get-data-science-interviews-finding-jobs-reaching-gatekeepers-and-getting-referrals-63a51c0078af?source=collection_archive---------5-----------------------

数据科学面试

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

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

对于许多工作来说,获得面试机会自然是必不可少的,数据科学工作也不例外。虽然关于这个主题的资源肯定不缺乏,但实用和可操作的建议却很少。在我的求职过程中,我知道超过 70%的求职者通过某种形式的网络找到了工作。我知道我应该"联系招聘人员,建立自己的关系网,在这个领域闯出一片天地"。但即使知道这一点,我仍然有一个重要的问题:如何

我第一次找数据科学工作是在 2017 年 2 月我即将完成研究生学业的时候。我尽我所能去采访,包括…

  • LinkedIn、GlassDoor 上的数百份申请,事实上
  • 向所有社交网络上的人(校友、有共同朋友的人)寻求推荐
  • 在谷歌上搜索并尝试了所有文章中推荐的方法(除了创建我自己的数据科学工作),如“获得数据科学面试的 10 大方法”、“获得数据科学工作的 5 个技巧”和“如何获得数据科学工作:一个可笑的具体指南”。
  • 我花了很多时间来创建、格式化和精炼我的简历

在以一份全职工作的承诺(即每天至少花 8 小时)找了三个月的工作后,我终于通过 AngelList 获得了第一次面试机会。

我第二次发现自己在寻找数据科学工作是在 2018 年 12 月被我当时的创业公司解雇的时候。这一次,通过 50 份申请和 18 次推荐,我在一个月内获得了 10 次面试机会(总共花了不到 30 个小时)。这种巨大的差异并不是因为我有工作经验。事实上,第二次在就业市场上,我并没有更有竞争力。这种剧烈的变化是因为我第一次就做错了!这并不是因为关于获得数据科学面试的文章是误导性的或不正确的,而是它们只告诉我做什么而不是如何做。

在这篇文章中,我不仅会分享该做什么(只有 3 种方法而不是 10 种)以及如何有效地获得面试。你会在这篇文章中找到策略、脚本和其他免费资源,它们将帮助你有条不紊地寻找工作。具体来说,这篇博客回答了这些问题:

  • 我应该去哪里找数据科学的工作?
  • 我如何联系看门人?
  • 我如何获得推荐?
  • 一份好的数据科学简历是由什么构成的?

如果你认为我能以任何方式让你的旅程更轻松,你可以在这里联系我。

在我们开始之前,你更喜欢视频吗?看这个 YouTube 视频而不是阅读。

目录

  1. 三种方法
  2. 原始应用程序:在哪里搜索很重要!
  3. 与看门人接触:向更多的面试问好
  4. 获得推荐:去你梦想中的公司面试的最佳方式
  5. 优秀简历的品质
  6. 最终想法

三种方法

获得面试机会有三种方式:原始申请联系把关人,以及获得推荐。原始申请意味着简单地将你的简历提交给空缺职位。虽然这是一个简单的方法,但它的效率也很低。联系看门人可能更有效,但需要更多的努力。获得推荐是最有效的方式,但也最耗费时间和精力(假设你还不知道有谁愿意推荐你)。下图从工作量/时间和有效性方面展示了这三种方法。

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

图片由艾玛丁 |获得面试机会的三种方式

原始应用程序:在哪里搜索很重要!

当我们在找工作时第一次想到要查看求职信息时,我们通常会立即转向热门的在线求职信息,如 LinkedIn、GlassDoor 或 Indeed。我第一次找工作时,在 LinkedIn 上提交了数百份申请,但没有得到任何回复。事实上,我的一些正在进行职业转型的朋友也发现自己在 LinkedIn 上没有得到回复。当我开始第二次找工作时,我没有在 LinkedIn 上提交一份申请。

为什么?问题是,对于每个职位,数百名申请人在一周内申请。如果你仅仅依靠这些受欢迎的求职网站,你得到回复的机会很小。你在和堆积如山的候选人竞争!

不幸的是,事实是,近年来,LinkedIn 已经成为一个服务于招聘人员的平台,这些招聘人员希望接触到具有确切经验和资格的潜在候选人。它不是一个为缺乏经验的求职者服务的平台,因为你必须与数百(有时数千)名申请人竞争一个职位。

解决这个问题的一个方法是申请不太受欢迎的网站。使用尚未成为主流的网站。怀疑?Edouard Harris 在他的博客中很好地解释了为什么“公司更关注通过不太为人知的渠道申请的人。以下是我和我认识的人尝试过的一些网站,它们被证明是有帮助的。有些甚至是专门与数据科学相关的。

此外,还有一些规模较小的在线招聘网站的回复率比三大网站更高。

无论何时申请任何职位,试着给招聘的人发一封个性化的短信。调查这家公司(使用公司网站、谷歌和 Glassdoor ),解释为什么你最适合这个职位。个性化会大大增加你得到回应的机会。

向看门人伸出手:向更多的采访问好

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

照片由奥斯丁·迪斯特尔Unsplash 上拍摄

尽管我推荐的网站往往比大型招聘网站的回复率更高,但招聘人员仍然需要几周时间才能回复,因为他们总是有一大堆简历要审阅。现在,您可能想尝试第二种方法——直接联系看门人。使用这种方法,我能够比原始应用程序更快地获得响应。

看门人指的是你感兴趣的公司中的技术招聘人员或数据科学家。大公司通常有专门聘请数据科学家的技术招聘人员,但小公司的数据团队可能更独立。如果你能赢得看门人的信任,这可能会让你在招聘过程中继续前进。

以下是赢得看门人的几个步骤:

  • 整理一份你感兴趣的公司的个人名单(即使目前没有空缺)
  • 通过访问公司网站或使用 LinkedIn 找到把关者的联系信息(您可能会在同一家公司找到多个把关者)
  • 开发一个能吸引看门人注意力的电子邮件推介
  • 如果一周左右没有回音,发一封跟进邮件,继续跟进,直到你被拒绝

电子邮件的推介应该简洁而完整。你的电子邮件可能会被转发给不同的人,没有人会为你复制和粘贴多封电子邮件,所以营销需要有一切。一份好的电子邮件推介包含两个部分:

  • 第一部分是一个简短的介绍(2-3 句话),包括你的意图,你的经历的简要描述,以及你为什么对这家公司感兴趣。再次强调,对公司做一些调查将会非常有助于以一种特定的方式表达你的兴趣。
  • 第二部分是关于你最有影响力的项目。确保这是有趣的,可读的,可分享的。

为了使事情更简单,这里有一个模板。

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

此电子邮件模板已更新自 吸取了惨痛的教训:黑客数据科学访谈 作者格雷格·卡姆拉德

如果你在几天内得到回复,那太好了!但是如果你在一周左右没有收到,给看门人发一封跟进邮件。根据我自己和我朋友的经验,后续邮件的回复率高于第一封邮件。这是我在后续邮件中使用的模板:

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

此电子邮件模板已更新自 如何跟进工作申请:电子邮件模板 作者 Alex cavulacos

虽然您当然可以使用这两个模板作为起点,但是不要而不是复制它们。如果看门人看到完全一样的邮件模板,会留下负面印象。你可以改变事情。你可以把它变长或变短。请记住,主要的想法是显示您的兴趣,并发送所有必要的东西。

获得推荐:去你梦想中的公司面试的最佳方式

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

照片由克里斯蒂娜@ wocintechchat.comUnsplash 上拍摄

第一次找工作时,我联系校友、有共同朋友的人,甚至是随机的人来获得推荐。然而,我最终什么也没得到。相比之下,我第二次找工作时,我的人际网络中的人告诉我,他们愿意介绍我,甚至在我开口之前。

随着时间的推移,我已经了解了一些关于请求推荐的误解。获得推荐就是让熟悉你工作的人给他们的公司一份热情的推荐。这不是你在 LinkedIn 或其他地方找到的与陌生人争论的问题。况且大多数时候,后一种方法是行不通的。

获得推荐不同于主动联系看门人,因为它始于与在科技公司工作的人建立关系,不管他们的职业是什么。无论是产品经理、软件工程师、产品设计师,还是其他。一段感情要走很长的路。Haseeb Qureshi 有一篇关于进入科技行业的的博文。关于网络的部分尤其精彩。库雷希说…

…人们 讨厌你向他们求职。

给你一份工作?为什么?他们不了解你。他们为什么会给你工作?他们为什么要在你身上浪费时间?

信息面试的力量在于,你可以让他们了解你,而不是让他们了解你。人们喜欢谈论自己。他们喜欢教别人。他们想帮忙。但是他们不想被陌生人纠缠着要好处。

如果你继续这样做,人们会看到你的好奇心和你的真诚。他们会相信你的故事,他们会 想要 指代你。

这听起来像是很多工作,尤其是当你以前没有做过的时候,但实际上只有 4 个步骤来正确地建立关系:

  • 给人买咖啡。在疫情期间这可能不容易做到,所以你可以要求一个简短的缩放聊天。
  • 进行信息面试。你要表现出对这个人、他们的工作以及他们的公司的兴趣。
  • 第二天通过电子邮件感谢他们并跟进。你不想做一次性连接。一段感情是需要维持的。
  • 一旦有人愿意推荐你,你要让它顺利推荐。与其问“你们公司有空缺吗”,不如自己去看看公司网站,找到最适合你的空缺。然后准备一封电子邮件,附上你的简历、工作链接、对你经历的描述,以及对你为什么非常适合的解释。

正是这些步骤让我在第二次找工作时得到了推荐。如果你遵循所有这些步骤,你会得到强有力的推荐!这不仅有助于你第一次找工作,也有助于未来的求职。

下面是一个冷邮件模板,你可以用来作为第一次外联的参考。这里的要点是要使它个性化,并显示出你真正的兴趣。

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

此电子邮件模板已由 Haseeb Qureshi 更新为如何打入科技行业

还是那句话,世界很小。不要完全照搬剧本。花时间定制你的信息,因为从长远来看,这是值得的。

优秀简历的特质

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

照片由斯科特·格雷厄姆Unsplash 上拍摄

根据你的目标和时间,你可以选择三种方法中的一种或多种来获得面试机会。但是不管你用哪种方法,一份好的简历都是关键。这是能让招聘者扭转局面的东西。

简历是你成就的总结。它应该是简短的,所以它不是一个展示你知道或能做的一切的地方。添加过多的内容只会让人们被不必要的信息淹没。因此,在你的数据科学简历中,你希望突出与数据科学相关的最重要的东西,如工作经验、培训和相关技能。当招聘人员或招聘经理看到你的简历时,他们应该会立即感觉到你在数据科学方面有丰富的经验,并且你是一个合格的候选人。

这里有几条写简历的规则,是我在测试了自己的简历,与许多招聘人员和招聘经理交谈,并审阅了其他人的简历后创建的。

避免危险信号:

  • 一份好的简历总是一页长。招聘人员和人事经理一天会收到很多简历,他们通常只有不到一分钟的时间浏览简历并做出决定。如果你的简历有多页,他们可能不会看到第二页。
  • 不要有错别字。在发送之前,请朋友进行同行审查,确保没有打字错误或语法错误。

改进你的简历:

  • 有选择性,有策划。从你最有影响力的经历、项目和技能开始。在“经验”和“项目”部分,确保每个项目不超过 4 个要点。第一个要点应始终是根据业务指标衡量的最有影响力的要点,如用户保留率或转换率的提高、跳出率或成本的降低等。
  • 言简意赅。你的简历展示了你的沟通技巧,为了表明你能有效地沟通,你应该注意去掉多余的短语,重新安排冗长的表达。

让你的简历脱颖而出:

  • **不要讲,展示数字和度量。**在描述你的经历和项目时,展示你通过业务指标衡量的贡献。展示所处理数据的大小和类型,并引用您使用的确切技术。具体一点会让你的简历更值得信赖。
  • **不要给所有的职位都发一份简历。**为每个应用添加定制的调整总是值得的。至少,如果你注意到工作描述中提到的重要关键词和技能,就在简历中使用它们,突出你在这些领域的技能。编造事情是不可以的,但是重组你的技能和经历以适应工作描述的背景是完全可以的。

最后的想法

在一天结束时,获得数据科学面试是困难的,尤其是对初学者来说。即使你已经努力工作了几个月,但没有得到任何回应,这可能会令人沮丧。希望这篇文章能让那些正在找工作的有抱负的数据科学家明白一些事情。如果你想要更多的建议,请随时联系我这里,我很乐意帮忙!

感谢阅读!

如果你喜欢这个帖子,想支持我…

* [## 我是如何获得 4 份数据科学工作邀请,并在被解雇后两个月内收入翻倍的

获得 100%现场报价率的秘诀

towardsdatascience.com](/how-i-got-4-data-science-offers-and-doubled-my-income-2-months-after-being-laid-off-b3b6d2de6938)*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值