#jobs #jobs #jobs | کاوش روندها در آگهیهای شغل داده

ما علاقهمند بودیم که چگونه روندها در مشاغل داده در طول زمان تکامل یافتهاند، بنابراین به آگهیهای شغل در یکی از جوامع مورد علاقه ما، Slack dbt نگاهی انداختیم.
کانال #jobs آنها از سال ۲۰۲۱ بیش از ۱۰۰+ آگهی شغل در ماه داشته است، بنابراین داده را به متابیس کشیدیم تا ببینیم آیا میتوانیم الگوهایی پیدا کنیم.

میتوانید داشبورد کامل را کاوش کنید، یا برای مشاهدات ما و راهنمای نحوه ساخت آن ادامه دهید.
مشاهدات
تعداد آگهیهای شغل به نظر میرسد دست در دست با پایه کاربری dbt و جامعه Slack آنها رشد کرده است.
بیش از ۴۰٪ از آگهیهای شغل امکان یک ترتیب کار از راه دور را ذکر میکنند.
از سال ۲۰۲۱ به بعد، بیش از نیمی از آگهیهای شغل برای کار از راه دور است، از ۲۰٪ برای دورههای قبل از ۲۰۲۱ افزایش یافته است.
نقشهای مهندسی تحلیل سریعترین شغل در حال رشد در فضای داده هستند، از ۶٪ در سال ۲۰۱۹ به ۳۲٪ در سال ۲۰۲۲. (لینک به نمودار)
چگونه داده را به دست آوردیم
دریافت داده به متابیس
۱. ما از Phantombuster برای کشیدن پیامهای خام از کانال #jobs dbt به یک فایل CSV استفاده کردیم. ۲. فایل CSV را به یک Google Sheet آپلود کردیم و از fivetran برای بارگذاری داده .csv به یک جدول در یک پایگاه داده Postgres استفاده کردیم. ۳. سپس متابیس خود را به پایگاه داده postgres متصل کردیم. (میتوانید این مرحله را رد کنید اگر پایگاه داده شما از قبل متصل است). ۴. سپس داده را تبدیل کردیم و آن را به یک مدل در متابیس تبدیل کردیم. اگر میخواهید، میتوانید داده مدل را به صورت CSV، JSON یا XLSX دانلود کنید.
کار با داده در متابیس
به دلیل ماهیت بدون ساختار متن، ما یک سوال 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

