‧
阅读时间:5分钟
#jobs #jobs #jobs | 探索数据工作发布趋势
Metabase 团队
‧ 5分钟阅读
分享这篇文章
我们对数据工作趋势如何随时间演变很感兴趣,因此我们查看了我们最喜欢的社区之一,dbt的Slack上的职位发布。
他们的#jobs频道自2021年以来每月有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