Analisis Pekerjaan HeadHunter


Setelah itu menjadi menarik bagi saya, tetapi bagaimana jika Anda mencoba menganalisis lowongan dan menyusun beberapa puncaknya. Cari tahu siapa yang dibayar paling banyak, siapa yang paling laris dan banyak lagi.


Sebagai sumber data, saya menggunakan HeadHunter yang terkenal. Pekerjaan untuk Mei ini dikumpulkan dan diproses. Hanya selama sebulan, karena API tidak memungkinkan Anda untuk mendapatkan lebih banyak.


Pengumpulan data


HeadHunter API memiliki dokumentasi yang sangat baik, yang terletak di repositori . Permintaan harus diajukan ke domain https://api.hh.ru/ dengan User-Agent terinstal, lebih disukai dari form _/_ (__) (versi lain dari User-Agent kadang User-Agent kadang berfungsi, tetapi jika server tidak menyukai sesuatu, itu akan mengembalikan kesalahan. )


Logika koleksi sangat sederhana, jadi saya mengimplementasikannya di bash menggunakan cURL dan jq . Namun, saya ingin berbagi sedikit nuansa.


Pagination


Untuk mencari lowongan berdasarkan berbagai parameter, ada titik akhir GET /vacancies .


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

Hasil pencarian akan dibagi menjadi halaman-halaman yang parameter per_page bertanggung jawab untuk ukuran (20 secara default dan maksimum 100). Anda dapat memilih halaman tertentu dengan menentukan parameter page (penomoran dimulai dari 0).


Bidang pages informasi layanan yang dikembalikan dengan lowongan akan menunjukkan jumlah total halaman hasil.


Dengan ini, Anda dapat dengan mudah beralih ke semua halaman:


 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 

Data pekerjaan penuh


Namun, hasil pencarian hanya berisi sebagian dari data pekerjaan. Untuk mendapatkan semuanya, Anda perlu membuat permintaan terpisah untuk titik akhir formulir GET /vacancies/id_ .


Data pekerjaan parsial terletak di bidang items dari hasil pencarian. Pertama, kami akan mengumpulkan dari mereka ID lowongan:


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

Kemudian kami meminta informasi lengkap tentang lowongan masing-masing:


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

Batasi Batas Pencarian


API HeadHunter memiliki satu fitur - tidak peduli berapa banyak yang ditemukan, maksimal 2000 akan dikembalikan. Dalam hal ini, jumlah aktual yang ditemukan juga akan dikembalikan di bidang yang found dari hasil pencarian. Berkat ini, Anda dapat mengetahui dengan pasti apakah Anda menerima semua data yang diminta, atau jika ada kerugian.


Untuk mengatasi keterbatasan ini, saya datang dengan yang berikut ini. Saat mencari, Anda dapat menentukan jangka waktu kapan lowongan menarik dipublikasikan (melalui date_to dan date_to , yang menerima tanggal dalam format ISO 8601). Anda dapat mengambil celah kecil dan memilah-milah semua hasil dalam potongan-potongan tersebut: setelah semua, semakin pendek interval waktu, semakin sedikit lowongan yang Anda kelola untuk mempublikasikannya.


Perlu diperhatikan bahwa lowongan yang dipublikasikan hanya pada bulan lalu dikembalikan. Oleh karena itu, tidak masuk akal untuk mengatur rentang lagi.


Untuk beralih dari periode waktu tertentu, yang terakhir direpresentasikan sebagai waktu 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 

Pemrosesan Gaji


Untuk mengumpulkan statistik, perlu mengelompokkan lowongan menurut kriteria tertentu. Pada bash, ini sudah bermasalah, jadi saya menggunakan Python.


Logika pengumpulan tidak ada yang spesial - akumulasi data dalam array asosiatif, pengurutan dan keluaran dalam CSV. Namun, kembali beberapa nuansa.


Garpu gaji


Perlu dicatat bahwa gaji disajikan dalam bentuk dua angka - minimum dan maksimum, dan salah satu dari mereka mungkin tidak ada.


Karena untuk analisis perlu memiliki satu nomor, saya memutuskan untuk menggunakan batas bawah, dan hanya jika tidak ada, nomor atas.


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

Nilai tukar mata uang


Gaji dalam lowongan dapat ditunjukkan dalam mata uang yang berbeda, dan mereka dapat memiliki tarif yang berbeda. API HeadHunter memiliki titik akhir GET /dictionaries berisi semua nilai yang telah ditentukan sebelumnya. Nilai tukar disajikan dalam bidang currency . Untuk kenyamanan, akan lebih baik untuk menempatkan daftar mereka dalam array asosiatif, di mana kuncinya adalah kode huruf mata uang:


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

Sekarang, selama pemrosesan, akan mudah untuk mengkonversi semua gaji menjadi satu mata uang:


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

Akuntansi pajak penghasilan pribadi


Di beberapa lowongan, gaji ditunjukkan sebelum pembayaran pajak penghasilan pribadi, dalam beberapa - setelah. Bidang gross berbicara tentang opsi tertentu: itu true dalam kasus pertama dan false dalam yang kedua.


Saya memutuskan untuk mentransfer semua gaji ke opsi setelah pajak:


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

Analisis Hasil


Dan sekarang saatnya untuk menunjukkan angkanya.


Pekerjaan jarak jauh


Mungkin, banyak dari mereka yang membaca posting ini ingin bekerja di situs yang jauh. Tapi seperti yang Anda lihat, pekerjaan dari rumah di negara kita belum dikutip. Gajinya jauh lebih rendah, jumlah lowongan jauh lebih sedikit. Dan jadi ada sedikit pilihan bagi pelamar.


Dan ini cukup aneh, karena di banyak profesi dan banyak perusahaan (sesuai dengan spesifik tugas) kehadiran seseorang di kantor tidak diperlukan sama sekali. Tetapi ini adalah argumen abadi.


NamaGaji rata-rataGaji minimumGaji maksimumNomor
Staf rumah11253610977130.00019
Teknologi Informasi, Internet, Telekomunikasi552251000300.0002828
Manajemen puncak476879474100.00023
Ekstraksi bahan baku46579200009089880
Instalasi dan layanan4543911874696009
Layanan publik, organisasi nirlaba449112000090.00019
Staf yang bekerja4421894996786037
Produksi423882372100.000236
Konstruksi, real estat3989670110000329
Transportasi, Logistik376629490100.000223


Pelamar Cacat


Namun, ada lebih sedikit jumlah lowongan - untuk para penyandang cacat. Dan ini benar-benar tidak masuk akal - meskipun pengusaha tidak ingin dipindahkan, tetapi di antara mereka yang siap untuk ini, mengapa begitu sedikit yang berpikir tentang penyandang cacat? Jika Anda tidak peduli apa orang itu dalam tiga zona waktu, apa bedanya bagi Anda, apakah dia bisa, misalnya, berjalan?


Banyak dari Anda mungkin akrab dengan penyandang cacat. Aku juga, dan aku bertanya-tanya betapa sulitnya bagi mereka untuk mencari pekerjaan, dan apa yang bisa mereka andalkan.


NamaGaji rata-rataGaji minimumGaji maksimumNomor
Layanan publik, organisasi nirlaba69675870090.0008
Manajemen puncak48705300008242515
Teknologi Informasi, Internet, Telekomunikasi453214350200.0001050
Sains, pendidikan45056315890.000376
Pengadaan4359115.00080.0009
Konstruksi, real estat4214822250000210
Produksi4096910.000130500189
Akuntansi, akuntansi manajemen, keuangan perusahaan363872610113100125
Pengacara343082610160.000131
Keamanan334142290.000178


Siswa


Kita semua mulai dengan sesuatu, yaitu dengan pencarian kerja, tanpa pengalaman. Saya memutuskan untuk menilai situasi dengan posisi terbuka untuk kandidat tersebut.


Jumlah lowongan mendorong untuk pekerjaan cepat. Dan saya tidak tahu betapa realistisnya untuk mendapatkan gaji maksimum, tetapi Anda bahkan dapat hidup dengan angka rata-rata.


NamaGaji rata-rataGaji minimumGaji maksimumNomor
Konseling6260115002218502504
Konstruksi, real estat55855209499896455
Manajemen puncak5082611310400.000111
Ekstraksi bahan baku381928000100.000328
Keamanan346173954100.0005844
Kedokteran, Farmasi34475450200.00011776
Transportasi, Logistik33600500150.0008000
Sains, pendidikan3142611001245101660
Penjualan304441350.00052566
Instalasi dan layanan30360826480.000381


Keseluruhan teratas


Dan sekarang yang paling menarik: siapa yang dibayar paling tinggi? Diurutkan semua lowongan ditemukan tanpa filter.


Tentu saja, ini manajemen puncak. Siapa yang akan meragukannya.


Fakta yang aneh: jika Anda memperhatikan gaji rata-rata di semua tabel, Anda dapat melihat bahwa itu tidak jauh berbeda.


NamaGaji rata-rataGaji minimumGaji maksimumNomor
Manajemen puncak787891502.000.0002408
Ekstraksi bahan baku616998000180.0002302
Konseling597971500500.0003762
Teknologi Informasi, Internet, Telekomunikasi527772668480425900
Konstruksi, real estat485872094998933229
Produksi42007126100027269
Staf yang bekerja4120325200.00043079
Bisnis mobil38555208242549269
Instalasi dan layanan3841225180.0002390
Pengadaan37846502610002658


Membersihkan wanita


Dan inilah cara termudah: mengapa belajar selama 5 tahun, jika Anda bisa mencuci kantor saja? Di bawah ini adalah hasil dari penyaringan lowongan teratas untuk permintaan "bersih *".


Bagaimana jika Anda masuk ke beberapa kantor dan datang di malam hari selama beberapa jam untuk membersihkan? Jadi kamu bisa hidup dengan cukup mewah. Kami akan menganggap ini hack kehidupan.


NamaGaji rata-rataGaji minimumGaji maksimumNomor
Manajemen puncak6300040.000870008
Pemasaran, periklanan, PR50.00050.00050.0006
Ekstraksi bahan baku4500045000450003
Manajemen SDM, pelatihan3324679088700058
Akuntansi, akuntansi manajemen, keuangan perusahaan320003000035.00010
Keamanan315072000070.0006
Penjualan29696473755.000159
Konstruksi, real estat2902441380.00073
Transportasi, Logistik24987109904500026
Bisnis mobil2446571244500061


Kota Teratas


Akhirnya, saya memutuskan untuk memeriksa jumlah lowongan terbuka berdasarkan kota. Tempat pertama tidak mengejutkan, tetapi kemudian ada posisi aneh dan bahkan tak terduga.


NamaNomor
Moskow31137
Saint Petersburg11745
Minsk7608
Almaty4386
Kiev3398
Ekaterinburg3182
Novosibirsk3097
Kazan3066
Ufa2980
Nizhny Novgorod2876


Repositori


Semua kode dari artikel, dengan perbaikan dan instruksi, tersedia di repositori .

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


All Articles