四个让你的简历看起来很棒的数据工程项目
原文:towardsdatascience.com/four-data-engineering-projects-that-look-great-on-your-cv-069dffae95e0使用生成的 AI 图像在这个故事中,我想谈谈数据工程职业道路和任何简历上都看起来很棒的数据项目。如果你是一个愿意学习新工具和技术,并旨在建立自己的数据项目组合的数据从业者——这篇文章就是为你准备的。在我的超过
原文:
towardsdatascience.com/four-data-engineering-projects-that-look-great-on-your-cv-069dffae95e0
使用 Kandinsky 生成的 AI 图像
在这个故事中,我想谈谈数据工程职业道路和任何简历上都看起来很棒的数据项目。如果你是一个愿意学习新工具和技术,并旨在建立自己的数据项目组合的数据从业者——这篇文章就是为你准备的。在我的超过 15 年的数据和分析职业生涯中,我见证了展示数据工程技能的好与坏的简历。你参与或负责的数据工程项目是你经验的最终指南,它告诉招聘人员你的能力如何,为什么他们应该雇佣你。这个故事是关于如何在简历中展示你的数据工程经验,以及传达那种专业感和自信。
开始一个新的数据工程项目总是具有挑战性,因为数据工程可能是数据空间中最困难的工作角色。你需要成为一名软件工程师——了解如何构建数据管道,然后你需要成为一名数据分析师——使用 SQL 与分析团队高效沟通,最后,你需要成为一名经验丰富的数据平台架构师来管理所有必需的基础设施资源。学习它绝对值得承担风险! 根据 DICE 在 2023 年进行的研究,数据工程是增长最快的职业之一,我之前在一篇之前的文章中提到了它 [1]。
来源:DICE
如果你正在学习数据工程,这篇文章可能对你有所帮助,因为选择正确的一组项目可以帮助你更快地发展所需技能。在上述文章中,我写到了那些在简历上看起来很棒的技能。我认为现在是时候谈谈数据工程项目组合了。选择合适的工具或找到适合你项目的数据变得如此容易陷入困境。让我们看看我们能做些什么来让你的简历在数据方面看起来更加专业,也许还能创建一个迷你数据工程项目路线图,以便今年学习一些东西。
我注意到,初学者甚至中级用户在考虑新的数据工程项目时,常常在这三个主要领域遇到困难:
-
为你的项目选择合适的数据集
-
选择合适的工具来处理数据
-
数据管道编排
当你在考虑开始一个新的数据工程项目时,我建议将其视为你从头开始构建的数据平台(或者至少是其一部分)。想象一下,你刚刚被雇佣并入职。试着思考你想要向新雇主询问有关数据堆栈、业务和功能需求的问题,并尝试设想我们可能在数据平台设计过程中遇到的所有潜在陷阱和挑战。在任何数据平台中,数据流都是可预测的:
典型的数据流和工具。图片由作者提供。
最终,在架构数据平台时,有几个主要的事情需要关注 [2]:
-
数据源(API、关系型和非关系型数据库、集成、事件流)
-
数据摄取 – 这很复杂,更多想法可以在下面找到。
-
数据存储 – 主要用于湖屋架构类型。
-
数据编排 – 数据管道触发器、流程图和有向无环图(DAGs)
-
数据资源 – 配置和管理。
-
数据仓库 – 工具和技术。
-
商业智能(BI) – 报告和仪表板。
-
机器学习和 MLOps
在你的数据工程简历中提及这些领域可以使它看起来更完整。创建某种形式的视觉展示最终交付成果也会很好。它可以是网站或简单的仪表板,例如我们可以分享的 Looker Studio 仪表板。总是提供注释和批注是一个好主意。
样本 Looker Studio 仪表板。图片由作者提供。
数据源
所有这一切都始于数据源。确实,任何数据管道都是从某个地方开始的。每次我们从点 A 转换数据到点 B 时 – 就存在一个数据管道 [3]。数据管道的三个主要部分是一个 源、一个处理步骤或步骤,以及一个目的地。我们可以从外部 API(源)提取数据,然后将其加载到数据仓库(目的地)。这是一个最常见的例子,其中源和目的地是不同的。
数据管道。图片由作者提供
一个使用 MySQL 数据库构建的简单数据连接器可以证明你知道如何提取数据 – 基本的 ETL 技术。数据工程师经常被要求从数据库(或任何其他数据源)中提取大量数据。传达你懂得如何使用代码并高效地完成这项工作至关重要,例如使用 Python 生成器和 yield。以下代码片段说明了如何使用生成器处理数据:
# Create a file first: ./very_big_file.csv as:
# transaction_id,user_id,total_cost,dt
# 1,John,10.99,2023-04-15
# 2,Mary, 4.99,2023-04-12
# Example.py
def etl(item):
# Do some etl here
return item.replace("John", '****')
# Create a generator
def batch_read_file(file_object, batch_size=19):
"""Lazy function (generator) can read a file in chunks.
Default chunk: 1024 bytes."""
while True:
data = file_object.read(batch_size)
if not data:
break
yield data
# and read in chunks
with open('very_big_file.csv') as f:
for batch in batch_read_file(f):
print(etl(batch))
# In command line run
# Python example.py
所以项目可能看起来是这样的:
从 MySQL 到数据仓库的数据管道。图片由作者提供。
本教程解释了如何:
-
使用
stream高效地从 MySQL 导出数据,并将其保存为 CSV 文件本地 -
从 MySQL 导出数据并将其流传输到 GCP 的云存储或 AWS S3
这是最常见的数据管道设计之一,MySQL 可能是最流行的关系型数据库,可以轻松地在本地或云中部署。你可以尝试我之前的故事中的一个来完成它。
数据摄取、流和数据仓库
将数据加载到数据仓库或我们数据湖的着陆区可能是任何数据工程项目中最困难的部分,因为它将涉及一个生产者。基本上,我们需要某种生成数据的东西——它可以是微服务或容器化应用程序,例如 Docker 等。它可以是简单的 AWS Lambda 函数,发送事件数据。例如,考虑以下代码片段。它模拟一些假数据并将其转发到 Kinesis 流[4]。
# Make sure boto3 is installed locally, i.e. pip install boto3
import json
import random
import boto3
kinesis_client = boto3.client('kinesis', region_name='eu-west-1')
# Constants:
STREAM_NAME = "your-data-stream-staging"
def lambda_handler(event, context):
processed = 0
print(STREAM_NAME)
try:
print('Trying to send events to Kinesis...')
for i in range(0, 5):
data = get_data()
print(i, " : ", data)
kinesis_client.put_record(
StreamName=STREAM_NAME,
Data=json.dumps(data),
PartitionKey="partitionkey")
processed += 1
except Exception as e:
print(e)
message = 'Successfully processed {} events.'.format(processed)
return {
'statusCode': 200,
'body': { 'lambdaResult': message }
}
我们希望添加一个辅助函数来生成一些随机事件数据。例如:
# Helpers:
def get_data():
return {
'event_time': datetime.now().isoformat(),
'event_name': random.choice(['JOIN', 'LEAVE', 'OPEN_CHAT', 'SUBSCRIBE', 'SEND_MESSAGE']),
'user': round(random.random() * 100)}
现在开始了!这是我们第二个数据工程项目,展示了以下内容:
-
我们知道如何使用 Python 模拟数据
-
我们熟悉无服务器架构
-
我们对事件流充满信心
-
我们了解基本的 ETL 技术
示例视图,包含来自我们应用程序的事件。图片由作者提供。
该项目还包括基础设施即代码的部分。我认为这是招聘中级数据工程师时我会关注的主要事项之一。
数据存储、机器学习和编排
在这里,我将展示我对不同的数据平台架构类型熟悉,例如数据仓库、湖屋、数据湖和数据网格。我记得几年前,互联网上充斥着“Hadoop 已死”类型的文章。有一个明显的数据仓库架构的转向。到 2024 年,每个人都似乎着迷于实时数据流和可扩展性,暗示 Spark 和 Kafka 很快将成为公共基准领导者。确实,在数据湖中处理大量数据可能使用分布式计算会更有效率。
我们只需要证明我们熟悉 Spark(PySpark)等工具,并且有与云存储提供商合作的经验。主要的三家是 AWS、Google 和 Azure。
因此,我们的第三个项目可能看起来像这样 [5]:
在本教程中,我们将使用公共 Movielens 数据集和电影评分来构建推荐系统。所以步骤会是以下这些:
- 在云存储中保留电影数据,例如。
# user_ratedmovies-timestamp.dat
userID movieID rating timestamp
75 3 1 1162160236000
75 32 4.5 1162160624000
75 110 4 1162161008000
- 使用 AWS Glue 将数据集转换成符合模型的形式
AWS Glue 主页。图片由作者提供。
- 使用 AWS Step Functions 规划管道
创建批量推理作业节点。图片由作者提供。
这不仅是一个展示数据平台和数据管道设计知识的好项目,也是学习使用 AWS Personalize 的基础设施即代码(AWS CloudFormation)和机器学习(ML)技术的绝佳机会。
数据仓库和机器学习
机器学习是数据工程的重要组成部分。MLOps 以及管理机器学习管道所需的技术对于数据工程师来说是必不可少的。那么,为什么不展示我们对这两者都充满信心呢?
这样的项目的一个好例子可能包括分析用户行为数据以预测用户流失倾向。这本身并不是一个简单任务,构建这样的项目需要很好地理解营销事件数据和用户保留的基本概念。所以,如果你能完成它,那么你就拥有了所有这些!我们可以专注于使用标准 SQL 进行数据集准备和模型训练。这展示了我们对 SQL 技巧的良好了解。
事实上,保留率是一个重要的业务指标,有助于理解用户行为机制。它提供了一个高级概述,说明了我们的应用程序在保留用户方面的成功程度,通过回答一个简单的问题:我们的应用程序在保留用户方面是否足够好?众所周知,保留现有用户比获取新用户成本低。因此,构建这样的数据管道可能是一个学习这些概念的好方法:
数据集准备和模型训练诊断
然后,我们可以像这样使用 BigQuery ML 构建一个简单的分类模型:
SELECT
user_pseudo_id,
churned,
predicted_churned,
predicted_churned_probs[OFFSET(0)].prob as probability_churned
FROM
ML.PREDICT(MODEL sample_churn_model.churn_model,
(SELECT * FROM sample_churn_model.churn)) #can be replaced with a proper test dataset
order by 3 desc
;
它将预测流失概率(流失倾向)——并且根据模型的预测,这个概率越接近 1,该用户不太可能返回应用程序的可能性就越大:
预测。图片由作者提供。
确实,对机器学习(ML)模型数据进行操作以保留用户已被证明极其有用,并且可能有助于在快速变化的市场环境中获得竞争优势。
这就是为什么它非常适合包含在我们的简历中!
结论
开始一个新的数据工程项目总是具有挑战性的,在这个故事中,我试图关注一些可能在任何简历上看起来都很棒的想法。我经常发现自己挣扎于数据集的选择。当我卡住时,我就会开始自己模拟数据——这不应该成为障碍。或者,我们可以使用免费公开的数据集,例如 movielens 和 Google Analytics 事件。由于它们的规模,它们非常适合作为演示。选择适合你的数据工程项目的正确工具取决于功能和业务需求。在这里,我建议提出一个场景,发挥你的想象力。这就是为什么我喜欢科技——一切皆有可能!
在这篇文章中,我分享了四个数据工程项目,涵盖了数据平台设计的一些关键领域——数据管道编排、数据仓库、数据摄取和机器学习。这些都是我参与过的真实项目,并且我将它们转换成了教程。希望你会觉得它们有用。
推荐阅读
[1] towardsdatascience.com/how-to-become-a-data-engineer-c0319cb226c2
[2] towardsdatascience.com/data-platform-architecture-types-f255ac6e0b7
[3] towardsdatascience.com/data-pipeline-design-patterns-100afa4b93e3
[6] medium.com/towards-data-science/python-for-data-engineers-f3d5db59b6dd
更多推荐


所有评论(0)