2022 年 8 月 10 日,在 数据探索
‧
阅读时间:5 分钟
#招聘 #招聘 #招聘 | 探索数据职位发布趋势
Metabase 团队
‧ 2022 年 8 月 10 日,在 数据探索
‧ 5 分钟阅读

分享本文
我们对数据职位趋势如何随时间演变很感兴趣,因此我们查看了我们最喜欢的社区之一 dbt's 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