‧
5 分钟阅读
#职位 #职位 #职位 | 探索数据职位发布趋势
Metabase 团队
‧ 5 分钟阅读

分享这篇文章
我们对数据职位趋势随时间推移的演变方式很感兴趣,因此我们查看了我们最喜欢的社区之一 dbt 的 Slack 上的招聘信息。
自 2021 年以来,他们的 #jobs 频道每月发布超过 100 个职位,因此我们将数据拉入 Metabase,看看是否能找到任何模式。
您可以浏览完整仪表板,或继续阅读我们的观察结果以及我们构建它的步骤。
观察结果
职位发布数量似乎与dbt 的用户群及其 Slack 社区同步增长。
超过40% 的职位发布提到了远程工作安排的可能性。
从 2021 年起,超过一半的职位发布是关于远程工作的,高于2021 年之前期间的 20%。
分析工程职位是数据领域增长最快的职位,从 2019 年的 6% 增长到 2022 年的 32%。(图表链接)
我们如何获取数据
将数据导入 Metabase
- 我们使用 Phantombuster 从 dbt 的 #jobs 频道中提取原始消息到 CSV 文件中。
- 我们将 CSV 文件上传到 Google Sheet,并使用 fivetran 将 .csv 数据加载到 Postgres 数据库的表中。
- 然后,我们将 Metabase 连接到 postgres 数据库。(如果您的数据库已连接,则可以跳过此步骤)。
- 然后我们转换了数据,并将其转换为 Metabase 中的模型。如果您愿意,可以将模型的数据下载为 CSV、JSON 或 XLSX 文件。
在 Metabase 中处理数据
由于文本的非结构化性质,我们选择了 SQL 查询(而不是使用图形查询构建器)
一些职位发布在频道中,另一些则在该频道的线程中发布。我们将这些职位合并,并筛选掉了对职位发布的回复和评论。我们使用了简单的 CASE
和 LIKE
语句来提取信息,例如
- 职位,
- 该职位是否是远程职位,
- 提及的任何可视化工具。
以下是我们用于创建模型的 SQL
WITH raw_messages
AS (SELECT CASE
WHEN message_url LIKE '%thread_ts=%' THEN
Substring(message_url, '.*thread_ts=(.*)')
ELSE Substring(message_url,
'https://getdbt.slack.com/archives/C7A7BARGT/(.*)'
)
END AS thread_id,
message_url,
created_at,
text,
username
FROM random_datasets.dbt_jobs_scrape_20220802_messages),
raw_messages_with_order
AS (SELECT m.*,
Row_number()
OVER(
partition BY thread_id
ORDER BY created_at ASC) AS post_order
FROM raw_messages m),
combined_messages
AS (SELECT m1.thread_id,
m1.message_url,
m1.created_at,
m1.username,
String_agg (m2.text, ' ') AS combined_text
FROM raw_messages_with_order m1
LEFT JOIN raw_messages_with_order m2
ON m1.thread_id = m2.thread_id
AND m1.username = m2.username
-- take message from original poster only
WHERE m1.post_order = 1
GROUP BY m1.thread_id,
m1.message_url,
m1.created_at,
m1.username)
SELECT *,
-- location
CASE
WHEN Lower(Replace(combined_text, 'Is this role remote?', '')) LIKE
'%remote%'
THEN true
WHEN Lower(combined_text) LIKE '%is this role remote? yes%' THEN true
ELSE false
END AS is_remote,
-- BI stack
CASE
WHEN Lower(combined_text) LIKE '%metabase%' THEN true
ELSE false
END AS stack_includes_metabase,
CASE
WHEN Lower(combined_text) LIKE '%looker%' THEN true
ELSE false
END AS stack_includes_looker,
CASE
WHEN Lower(combined_text) LIKE '%tableau%' THEN true
ELSE false
END AS stack_includes_tableau,
CASE
WHEN Lower(combined_text) LIKE '%power bi%' THEN true
ELSE false
END AS stack_includes_powerbi,
CASE
WHEN Lower(combined_text) LIKE '%hex%' THEN true
ELSE false
END AS stack_includes_hex,
CASE
WHEN Lower(combined_text) LIKE '%qlik%' THEN true
ELSE false
END AS stack_includes_qlik,
-- role
CASE
WHEN Lower(combined_text) LIKE '%analyst%' THEN true
ELSE false
END AS role_analyst,
CASE
WHEN Lower(combined_text) LIKE '%analytics engineer%' THEN true
ELSE false
END AS role_analytics_engineer,
CASE
WHEN Lower(combined_text) LIKE '%data scien%' THEN true
ELSE false
END AS role_data_scientist,
CASE
WHEN Lower(combined_text) LIKE '%data engineer%' THEN true
ELSE false
END AS role_data_engineer
FROM combined_messages
WHERE combined_text IS NOT NULL