2022年8月10日,发表于 数据探索
‧
5分钟阅读
#职位 #职位 #职位 | 探索数据职位发布趋势
Metabase 团队
‧ 2022年8月10日,发表于 数据探索
‧ 5分钟阅读

分享此文章
我们对数据职位趋势如何随时间演变很感兴趣,于是我们查看了我们最喜欢的社区之一 dbt Slack 上的职位发布。
自2021年以来,他们的 #jobs 频道每月有超过100个职位发布,因此我们将数据导入 Metabase,看看是否能找到任何规律。
您可以探索完整仪表板,或继续阅读我们的观察结果以及我们如何构建它的分步指南。
观察结果
职位发布数量似乎与 dbt 的用户群及其 Slack 社区同步增长。
超过 40% 的职位发布提到了远程工作的可能性。
自2021年以来,超过一半的职位发布是远程工作,而2021年之前的时期则只有20%。
分析工程职位是数据领域增长最快的职位,从2019年的6%增长到2022年的32%。(图表链接)
我们如何获取数据
将数据导入 Metabase
- 我们使用 Phantombuster 从 dbt 的 #jobs 频道中提取原始消息,并将其保存为 CSV 文件。
- 我们将 CSV 文件上传到 Google 表格中,并使用 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