Metabase

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

تیم متابیستیم متابیس
Aug 10, 2022
#jobs #jobs #jobs | کاوش روندها در آگهی‌های شغل داده Image

ما علاقه‌مند بودیم که چگونه روندها در مشاغل داده در طول زمان تکامل یافته‌اند، بنابراین به آگهی‌های شغل در یکی از جوامع مورد علاقه ما، 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