‧
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