谷歌数据科学家面试真题

谷歌数据科学家面试真题

谷歌数据科学家面试问题中聚合和窗口函数的简单解决方案。

在本文中,我们将研究一个谷歌数据科学家面试问题,用一个简单的解决过程来回答它,你可以将其应用于任何其他数据科学挑战。请继续阅读,了解我们如何构建和执行一个框架,通过有逻辑、可管理和可操作的步骤回答数据科学面试问题。如果你想了解更多关于数据科学的相关内容,可以阅读以下这些文章:
基于云技术的数据仓库给数据科学带来的优势
职场转型与进阶:多年非Data相关工作经验,如何转行数据科学家?
数据科学在供应链分析的6个经典应用
微软首席数据科学家告诉我们,数据科学学位的价值

谷歌是世界上最大的科技公司之一,成立于1998年,拥有著名的搜索引擎。现在谷歌有超过250项与互联网相关的服务和产品,包括硬件、软件、在线广告和云计算。它与 Facebook、Amazon、Apple和Netflix一起,是美国五大IT公司的一部分,在全球拥有近14万名员工。

谷歌数据科学职位

数据是谷歌大部分产品的主要输入和输出。因此,数据科学家在谷歌许多团队中工作,包括财务、运营、工程、销售、支持、营销、战略人员。根据你将与哪个团队合作,承担各种不同的责任。

谷歌数据科学家职位要求具备统计软件(如R或Python)数据库语言(如SQL)机器学习统计数据分析数据建模等方面的技能。它们通常还涉及查看大量数据以获得见解、跨功能交互,为谷歌产品提供商业建议。

谷歌数据科学家面试问题中的概念测试

在谷歌数据科学家面试问题中,你必须使用的数据库语言技能包括:

  • 计算数据和其他聚合功能
  • 根据数据某个部分的排序对数据进行排名
  • 对数据做出假设并丢弃不相关的列

我们在本文中解决的问题需要使用这些能力,通过这个问题,你将能够利用这些能力在面试期间或StrataScratch平台上回答其他问题。

谷歌数据科学家面试题

Activity Rank

这是一个谷歌数据科学家面试官要求候选人解决的真实问题。它的标题是“Activity Rank”,目标是找出哪些用户发送的电子邮件最多,并根据电子邮件数据对用户进行排名。

Stratascatch截图

问题链接:

https://platform.stratascratch.com/coding/10165-activity-rank

这个问题很难,因为它需要准确地使用聚合和排名窗口函数。与大多数问题一样,有几种方法可以解决,但我们希望有一种既能显示对SQL概念的掌握,又能灵活应对各种数据集的方式来解决这个问题。

解决问题的框架

有一个可重复的框架来解决数据科学问题很重要。我们有一个基本步骤,可以解决StrataScratch上所有数据科学面试问题,包括了解数据、制定方法和执行代码。

  1. 了解数据需要查看面试官提供的所有电子邮件数据列并根据它们做出假设。如果你无法通过数据库理解数据,可以索取一些示例电子邮件数据。通过几行,就能够将值与列匹配并更好地了解表。
  2. 制定方法需要在问题转换为代码前构建解决问题的逻辑步骤。分析电子邮件数据所需的所有功能,然后将它们列出来。当构建代码大纲时,和谷歌面试官一起交流,这样他们就能了解你的思维过程,并提供相关反馈。
  3. 执行代码即写代码。此时,把制定的步骤转换为功能性SQL代码。你需要避免过于简单或过于复杂的解决方案,因为在许多情况下,这些类型的解决方案对各种数据集可能不够通用。你需要继续与面试官讨论你的解决方案,以展示你解决问题的能力。

了解数据

首先需要查看谷歌提供给数据,并据此建立假设。请记住,在谷歌面试期间,并不总是能够访问真实数据或执行代码。相反,你必须查看数据库和面试官提供给你的信息,做出假设并制定代码。

在这个特定的面试问题中,我们只有一张表需要分析。

Stratascatch截图
Stratascatch截图

google_gmail_emails表为每个电子邮件交互显示一行。我们可以看到电子邮件来自哪个用户、发送给哪个用户以及他们发送电子邮件的日期。首先,我们可以对这些数据做出两个假设:

  1. 不需要id、day或to_user列。
  2. 使用from_user作为我们确定用户电子邮件数量的列。

解决方案:

制定方法

接下来我们列出一般的、符合逻辑的、基本的步骤,稍后会转化为代码。概述潜在解决方案,以下是针对此问题采取的步骤:

  1. 忽略不相关列查询数据表以获取每个用户的电子邮件数
  2. 使用ROW_NUMBER()之类的排名窗口函数,按用户对电子邮件数排序

每个用户发送的电子邮件

我们必须将这些常规步骤转化为有效的SQL代码。首先查询 google_gmail_emails表,计算每个用户发送的电子邮件数量。假设可以在 SELECT语句中去除id、to_user和day列。作为查询的一部分,我们使用 COUNT() 聚合函数来计算电子邮件数量,与任何聚合函数一样,必须GROUP BY一个汇总列,在此表中,该列是from_user。

SELECT from_user,
       COUNT(*) AS total_emails
FROM google_gmail_emails
GROUP BY 1
Stratascatch截图

有了这个代码块,我们已经有了每个用户的电子邮件总数。但是,我们可以看到它没有按任何顺序排列,因此我们下一步是以正确的顺序对电子邮件总数进行排名。

对每个用户的电子邮件总数进行排名排序

关于如何看待排序,这个问题非常具体,必须对每一行应用唯一的排名,并对电子邮件总数降序排名。

对于排名,我们将使用ROW_NUMBER()窗口函数来避免跳过或重复排名。使用排名窗口函数,通常必须按数据顺序进行排名,在此解决方案中,我们将再次使用COUNT(*)聚合函数对电子邮件总数进行降序排名。

SELECT from_user,
       COUNT(*) AS total_emails,
       ROW_NUMBER() OVER (
                          ORDER BY COUNT(*) DESC) AS ntile
FROM google_gmail_emails
GROUP BY 1
Stratascatch截图

现在我们有了电子邮件总数的正确排序和相应排名。

结论

在本文中,我们用一个基本的查询解决了一个谷歌数据科学家面试的问题。虽然还有其他几种方法可以回答这个问题,但我们提供了一种最简单、最有效的解决方案。一个有效的挑战是添加到查询以确定每个电子邮件总数的百分比。我们还建议使用StrataScratch平台,看看你是否可以提出更具创造性、更高效或更简单的替代解决方案。

感谢阅读!你还可以订阅我们的YouTube频道,观看大量大数据行业相关公开课:https://www.youtube.com/channel/UCa8NLpvi70mHVsW4J_x9OeQ;在LinkedIn上关注我们,扩展你的人际网络!https://www.linkedin.com/company/dataapplab/

原文作者:Nathan Rosidi
翻译作者:明慧
美工编辑:过儿
校对审稿:Miya
原文链接:https://nathanrosidi.medium.com/google-data-scientist-interview-questions-212dac2b3127