تحليل وظائف HeadHunter


بمجرد أن أصبح الأمر مثيرًا للاهتمام بالنسبة لي ، ولكن ماذا لو حاولت تحليل الوظائف الشاغرة ورسم بعض قمم عليها. تعرف على من هو صاحب الراتب الأكثر ، والأكثر طلبًا وأكثر من ذلك بكثير.


كمصدر للبيانات ، استخدمت HeadHunter المعروفة. تم جمع ومعالجة الوظائف لشهر مايو. لمدة شهر فقط ، لأن واجهة برمجة التطبيقات لا تسمح لك بالحصول على المزيد.


جمع البيانات


يحتوي HeadHunter API على وثائق ممتازة ، تقع في المستودع . يجب تقديم الطلبات إلى النطاق https://api.hh.ru/ مع تثبيت User-Agent ، ويفضل أن يكون من النموذج _/_ (__) (أحيانًا إصدارات أخرى من عمل User-Agent ، ولكن إذا كان الخادم لا يحب شيئًا ، _/_ (__) خطأ )


منطق المجموعة بسيط للغاية ، لذلك قمت بتطبيقه على bash باستخدام cURL و jq . ومع ذلك ، أريد مشاركة بعض الفروق الدقيقة.


ترقيم الصفحات


للبحث عن الوظائف الشاغرة بواسطة معلمات مختلفة ، هناك نقطة نهاية GET /vacancies .


 curl -A 'irenica (https://irenica.com/)' 'https://api.hh.ru/vacancies' 

سيتم تقسيم نتائج البحث إلى صفحات يكون per_page معلمة per_page مسؤولة عن الحجم (20 افتراضيًا و 100 كحد أقصى). يمكنك تحديد صفحة معينة عن طريق تحديد معلمة page (يبدأ الترقيم من 0).


سيشير حقل pages معلومات الخدمة الذي تم إرجاعه مع الوظائف الشاغرة إلى إجمالي عدد صفحات النتيجة.


باستخدام هذا ، يمكنك التكرار بسهولة على جميع الصفحات:


 declare -ii=0 while true; do declare url="https://api.hh.ru/vacancies?per_page=100&page=$i" declare page="$(curl -A 'irenica (https://irenica.com/)' "$url")" #  $page ((i++)) declare -i totalCount=$(echo "$page" | jq '.pages') if ((i >= totalCount)); then break fi done 

بيانات الوظيفة الكاملة


ومع ذلك ، تحتوي نتائج البحث على جزء فقط من بيانات الوظيفة. للحصول على كل شيء ، تحتاج إلى تقديم طلب منفصل لنقطة نهاية النموذج GET /vacancies/id_ .


توجد بيانات الوظيفة الجزئية في حقل items في نتائج البحث. أولاً ، سنجمع منهم معرّف الوظيفة الشاغرة:


 declare vacanciesIds="$(echo "$page" | jq -r '.items[].id')" 

ثم نطلب معلومات كاملة عن الوظائف الشاغرة بشكل فردي:


 for vacancyId in $vacanciesIds; do declare url="https://api.hh.ru/vacancies/$vacancyId" declare vacancy="$(curl -A 'irenica (https://irenica.com/)' "$url")" #  $vacancy done 

تجاوز حد البحث


واجهة برمجة تطبيقات HeadHunter لها ميزة واحدة - بغض النظر عن العدد الذي تم العثور عليه ، سيتم إرجاع 2000 كحد أقصى. في هذه الحالة ، سيتم إرجاع الرقم الفعلي الذي تم العثور عليه أيضًا في الحقل found في نتائج البحث. بفضل هذا ، يمكنك معرفة ما إذا كنت قد تلقيت جميع البيانات المطلوبة ، أو إذا كانت هناك خسائر.


للتغلب على هذا القيد ، توصلت إلى ما يلي. عند البحث ، يمكنك تحديد طول الوقت الذي تم فيه نشر الوظائف الشاغرة (عبر date_to و date_to ، والتي تقبل التاريخ بتنسيق ISO 8601). يمكنك أخذ فجوة صغيرة وفرز جميع النتائج في مثل هذه القطع: بعد كل شيء ، كلما كان الفاصل الزمني أقصر ، قل عدد الوظائف الشاغرة التي تنشرها لذلك.


يجدر الانتباه إلى أن الوظائف الشاغرة التي تم نشرها فقط في الشهر الماضي يتم إرجاعها. لذلك ، لا معنى لتعيين النطاق بعد الآن.


للتكرار عبر فترات زمنية ، يتم تمثيل الأخير بشكل أفضل على أنه وقت Unix:


 declare -i startTime=$(date -d '-1 month' +%s) declare -i endTime=$(date -d now +%s) while ((startTime <= endTime)); do declare -i intervalEnd=$((startTime + 60*60)) declare startTimeIso="$(date -d @$startTime +%FT%T)" declare intervalEndIso="$(date -d @$intervalEnd +%FT%T)" # ... declare url="https://api.hh.ru/vacancies?per_page=100&page=$i&date_from=$startTimeIso&date_to=$intervalEndIso" # ... startTime=$intervalEnd done 

معالجة الراتب


لجمع الإحصاءات ، كان من الضروري تجميع الشواغر وفقًا لمعايير معينة. على باش ، كان هذا بالفعل مشكلة ، لذلك استخدمت بايثون.


منطق المجموعة ليس شيئًا خاصًا - تراكم البيانات في مصفوفة ترابطية وفرزها وإخراجها بتنسيق CSV. ومع ذلك ، مرة أخرى عدد قليل من الفروق الدقيقة.


شوكة الراتب


وتجدر الإشارة إلى أن الراتب مقدم على شكل رقمين - الحد الأدنى والأقصى ، وقد يتغيب أحدهما.


نظرًا للتحليل كان من الضروري أن يكون لديك رقم واحد ، قررت استخدام الحد السفلي ، وفقط إذا كان غائبًا ، فإن الحد العلوي.


 salary = None if vacancy['salary']: if vacancy['salary']['to']: salary = vacancy['salary']['to'] if vacancy['salary']['from']: salary = vacancy['salary']['from'] 

أسعار العملات


يمكن تحديد الرواتب في الوظائف الشاغرة بعملات مختلفة ، ويمكن أن يكون لها أسعار مختلفة. يحتوي HeadHunter API على نقطة نهاية GET /dictionaries تحتوي على جميع القيم الضرورية المحددة مسبقًا. يتم عرض أسعار الصرف في مجال currency . للراحة ، سيكون من الأفضل وضع قائمتهم في مصفوفة ترابطية ، حيث يكون المفتاح هو رمز حرف العملة:


 currencies = {} dictionaries = requests.get('https://api.hh.ru/dictionaries').json() for currency in dictionaries['currency']: currencies[currency['code']] = currency['rate'] 

الآن ، أثناء المعالجة ، سيكون من السهل تحويل جميع الرواتب إلى عملة واحدة:


 salary /= currencies[vacancy['salary']['currency']] 

محاسبة ضريبة الدخل الشخصية


في بعض الشواغر ، يشار إلى الراتب قبل دفع ضريبة الدخل الشخصي ، في بعض - بعد. يتحدث الحقل gross عن خيار محدد: true في الحالة الأولى false في الحالة الثانية.


قررت تحويل جميع الرواتب للخيار بعد الضريبة:


 if vacancy['salary']['gross']: salary -= salary * 0.13 

تحليل النتائج


والآن حان الوقت لإظهار الأرقام.


العمل عن بعد


ربما يرغب العديد من الذين قرأوا هذا المنشور في العمل على موقع بعيد. ولكن كما ترى ، لم يتم اقتباس العمل من المنزل في بلدنا بعد. الراتب أقل بكثير ، وعدد الشواغر أقل بكثير. وبالتالي كان هناك خيار أقل لمقدم الطلب.


وهذا أمر غريب بما فيه الكفاية ، لأنه في العديد من المهن والعديد من الشركات (وفقًا لخصائص المهام) ، فإن وجود شخص في المكتب ليس ضروريًا على الإطلاق. لكن هذه حجة أبدية.


الاسممتوسط ​​الراتبالحد الأدنى للراتبالراتب الأقصىرقم
موظفي المنزل11253610977130،00019
تكنولوجيا المعلومات والإنترنت والاتصالات5522510003000002828
الإدارة العليا47687947410000023
استخراج المواد الخام46579200009089880
التركيب والخدمة4543911874696009
الخدمة العامة والمنظمات غير الربحية449112000090،00019
الموظفين العاملين4421894996786037
الإنتاج423882372100000236
البناء والعقارات3989670110000329
النقل والخدمات اللوجستية376629490100000223


المتقدمين الإعاقة


ومع ذلك ، هناك عدد أقل من الوظائف الشاغرة - للأشخاص ذوي الإعاقة. وهذا غير منطقي تمامًا - على الرغم من أن أرباب العمل لا يريدون أن يتم إزالتهم ، ولكن من بين أولئك الذين هم على استعداد لذلك ، فلماذا القليل من الذين يفكرون في الأشخاص ذوي الإعاقة؟ إذا كنت لا تهتم بما هو الشخص في ثلاث مناطق زمنية ، فما الفرق الذي يحدثه لك ، هل هو قادر ، على سبيل المثال ، على المشي؟


قد يكون الكثير منكم على دراية بالأشخاص ذوي الإعاقة. أنا أيضًا ، وتساءلت عن مدى صعوبة العثور على عمل ، وما الذي يمكنهم الاعتماد عليه.


الاسممتوسط ​​الراتبالحد الأدنى للراتبالراتب الأقصىرقم
الخدمة العامة والمنظمات غير الربحية69675870090،0008
الإدارة العليا48705300008242515
تكنولوجيا المعلومات والإنترنت والاتصالات453214350200،0001050
العلم والتعليم45056315890،000376
المشتريات435911500080،0009
البناء والعقارات4214822250000210
الإنتاج4096910،000130500189
المحاسبة والمحاسبة الإدارية وتمويل المشاريع363872610113100125
المحامون343082610160،000131
الأمان334142290،000178


الطلاب


نبدأ جميعًا بشيء ، أي بالبحث عن وظيفة ، دون أي خبرة. قررت تقييم الوضع مع المناصب المفتوحة لمثل هؤلاء المرشحين.


عدد الوظائف الشاغرة مشجع للعمل السريع. ولا أعرف مدى واقعية الحصول على الحد الأقصى للراتب ، ولكن يمكنك حتى العيش على متوسط ​​الأرقام بطريقة أو بأخرى.


الاسممتوسط ​​الراتبالحد الأدنى للراتبالراتب الأقصىرقم
الاستشارة6260115002218502504
البناء والعقارات55855209499896455
الإدارة العليا5082611310400000111
استخراج المواد الخام381928000100000328
الأمان3461739541000005844
الطب والصيدلة34475450200،00011776
النقل والخدمات اللوجستية33600500150،0008000
العلم والتعليم3142611001245101660
المبيعات304441350.00052566
التركيب والخدمة30360826480،000381


أعلى العام


والآن الأكثر إثارة للاهتمام: من هو الأكثر أجرا؟ فرز جميع الشواغر الموجودة دون أي مرشحات.


بالطبع ، هذه هي الإدارة العليا. من يشك في ذلك.


حقيقة غريبة: إذا انتبهت إلى متوسط ​​الراتب في جميع الجداول ، يمكنك أن ترى أنه لا يختلف كثيرًا.


الاسممتوسط ​​الراتبالحد الأدنى للراتبالراتب الأقصىرقم
الإدارة العليا787891502،000،0002408
استخراج المواد الخام616998000180،0002302
الاستشارة5979715005000003762
تكنولوجيا المعلومات والإنترنت والاتصالات527772668480425900
البناء والعقارات485872094998933229
الإنتاج42007126100027269
الموظفين العاملين4120325200،00043079
تجارة السيارات38555208242549269
التركيب والخدمة3841225180،0002390
المشتريات37846502610002658


عاملة تنظيف


وإليك أسهل طريقة: لماذا تدرس لمدة 5 سنوات ، إذا كان بإمكانك فقط غسل المكتب؟ فيما يلي نتيجة تصفية أهم الوظائف الشاغرة لطلب البحث "منظف *".


ماذا لو دخلت إلى عدة مكاتب وأتيت في المساء لبضع ساعات للتنظيف؟ لذا يمكنك العيش بترف. سنعتبر هذا اختراقًا للحياة.


الاسممتوسط ​​الراتبالحد الأدنى للراتبالراتب الأقصىرقم
الإدارة العليا6300040،000870008
التسويق والإعلان والعلاقات العامة50،00050،00050،0006
استخراج المواد الخام4500045000450003
إدارة الموارد البشرية والتدريب3324679088700058
المحاسبة والمحاسبة الإدارية وتمويل المشاريع32000300003500010
الأمان3150720000700006
المبيعات29696473755000159
البناء والعقارات2902441380،00073
النقل والخدمات اللوجستية24987109904500026
تجارة السيارات2446571244500061


أهم المدن


وأخيرا ، قررت التحقق من عدد الوظائف الشاغرة حسب المدينة. الأماكن الأولى ليست مفاجئة ، ولكن بعد ذلك هناك مواقف غريبة وحتى غير متوقعة.


الاسمرقم
موسكو31137
سانت بطرسبرغ11745
مينسك7608
ألماتي4386
كييف3398
ايكاترينبرغ3182
نوفوسيبيرسك3097
قازان3066
أوفا2980
نيجني نوفغورود2876


المستودع


جميع التعليمات البرمجية من المقالة ، مع التحسينات والتعليمات ، متاحة في المستودع .

Source: https://habr.com/ru/post/ar418281/


All Articles