HeadHunter-Jobanalyse


Einmal wurde es für mich interessant, aber was ist, wenn Sie versuchen, die offenen Stellen zu analysieren und einige Spitzen zu erstellen? Finden Sie heraus, wer am meisten bezahlt wird, wer am gefragtesten ist und vieles mehr.


Als Datenquelle habe ich den bekannten HeadHunter verwendet. Jobs für diesen Mai wurden gesammelt und bearbeitet. Nur für einen Monat, da Sie mit der API nicht mehr erhalten können.


Datenerfassung


Die HeadHunter-API verfügt über eine hervorragende Dokumentation, die sich im Repository befindet . Anfragen sollten an die Domäne https://api.hh.ru/ mit installiertem User-Agent werden, vorzugsweise in der Form _/_ (__) (manchmal _/_ (__) andere Versionen des User-Agent , aber wenn dem Server etwas nicht gefällt, wird ein Fehler zurückgegeben )


Die Auflistungslogik ist sehr einfach, daher habe ich sie mit cURL und jq auf bash implementiert . Ich möchte jedoch einige Nuancen teilen.


Paginierung


Um nach verschiedenen Parametern nach offenen Stellen zu suchen, gibt es einen Endpunkt GET /vacancies .


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

Die Suchergebnisse werden in Seiten unterteilt, für die der Parameter per_page für die Größe verantwortlich ist (standardmäßig 20 und maximal 100). Sie können eine bestimmte Seite auswählen, indem Sie den page angeben (die Nummerierung beginnt bei 0).


Das Feld mit den mit offenen Stellen zurückgegebenen Serviceinformationen gibt die Gesamtzahl der Seiten des Ergebnisses an.


Mit dieser Funktion können Sie problemlos alle Seiten durchlaufen:


 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 

Vollständige Auftragsdaten


Die Suchergebnisse enthalten jedoch nur einen Teil der Auftragsdaten. Um alles zu erhalten, müssen Sie eine separate Anfrage für den Endpunkt des Formulars GET /vacancies/id_ .


Teilauftragsdaten befinden sich im Feld items der Suchergebnisse. Zuerst werden wir von ihnen die freie ID sammeln:


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

Dann fordern wir individuell vollständige Informationen zu den jeweiligen Stellenangeboten an:


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

Suchlimit-Bypass


Die HeadHunter-API verfügt über eine Funktion: Unabhängig davon, wie viele gefunden wurden, werden maximal 2000 zurückgegeben. In diesem Fall wird die tatsächlich gefundene Anzahl auch im Feld " found der Suchergebnisse zurückgegeben. So können Sie sicher wissen, ob Sie alle angeforderten Daten erhalten haben oder ob es Verluste gibt.


Um diese Einschränkung zu umgehen, habe ich mir Folgendes ausgedacht. Bei der Suche können Sie angeben, wie lange Stellen von Interesse veröffentlicht wurden (über die date_to date_from und date_to , die ein Datum im ISO 8601-Format akzeptieren). Sie können eine kleine Lücke schließen und alle Ergebnisse in solchen Stücken sortieren: Je kürzer das Zeitintervall, desto weniger Stellen können Sie dafür veröffentlichen.


Es ist zu beachten, dass nur im letzten Monat veröffentlichte Stellen zurückgegeben werden. Daher ist es nicht sinnvoll, den Bereich weiter einzustellen.


Um über Zeiträume zu iterieren, wird letzteres am besten als Unix-Zeit dargestellt:


 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 

Gehaltsabwicklung


Um Statistiken zu sammeln, mussten offene Stellen nach bestimmten Kriterien gruppiert werden. Bei Bash war das schon problematisch, also habe ich Python verwendet.


Die Erfassungslogik ist nichts Besonderes - die Akkumulation von Daten in einem assoziativen Array, Sortieren und Ausgeben in CSV. Allerdings nochmal ein paar Nuancen.


Gehaltsgabel


Es ist zu beachten, dass das Gehalt in Form von zwei Zahlen angegeben wird - der minimalen und der maximalen, und jede von ihnen kann fehlen.


Da für die Analyse eine Nummer erforderlich war, entschied ich mich für den unteren Rand und nur dann für den oberen Rand, wenn dieser fehlt.


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

Währungskurse


Gehälter in offenen Stellen können in verschiedenen Währungen angegeben werden und sie können unterschiedliche Sätze haben. Die HeadHunter-API verfügt über einen GET /dictionaries Endpunkt, der alle erforderlichen vordefinierten Werte enthält. Wechselkurse werden im currency . Der Einfachheit halber ist es besser, die Liste in ein assoziatives Array zu stellen, wobei der Schlüssel der Buchstabencode der Währung ist:


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

Während der Verarbeitung ist es jetzt einfach, alle Gehälter in eine Währung umzurechnen:


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

Persönliche Einkommensteuerbuchhaltung


In einigen offenen Stellen wird das Gehalt vor der Zahlung der Einkommensteuer angegeben, in einigen nach. Das gross spricht von einer bestimmten Option: Es ist im ersten Fall true und im zweiten false .


Ich habe beschlossen, alle Gehälter auf die Option nach Steuern zu übertragen:


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

Ergebnisanalyse


Und jetzt ist es Zeit, die Zahlen zu zeigen.


Fernarbeit


Wahrscheinlich möchten viele derjenigen, die diesen Beitrag lesen, an einem entfernten Standort arbeiten. Aber wie Sie sehen, ist die Arbeit von zu Hause in unserem Land noch nicht sehr zitiert. Das Gehalt ist viel niedriger, die Zahl der offenen Stellen ist deutlich geringer. Daher hatte der Antragsteller weniger Wahlmöglichkeiten.


Und das ist seltsam genug, denn in vielen Berufen und Unternehmen (entsprechend den Besonderheiten der Aufgaben) ist die Anwesenheit einer Person im Büro überhaupt nicht erforderlich. Dies ist jedoch ein ewiges Argument.


NameGehaltsdurchschnittMindestgehaltGehalt maximalNummer
Heimpersonal11253610977130.00019
Informationstechnologie, Internet, Telekommunikation552251000300.0002828
Top Management476879474100.00023
Rohstoffgewinnung46579200009089880
Installation und Service4543911874696009
Öffentlicher Dienst, gemeinnützige Organisationen449112000090.00019
Arbeitspersonal4421894996786037
Produktion423882372100.000236
Bau, Immobilien3989670110000329
Transport, Logistik376629490100.000223


Antragsteller für Behinderungen


Es gibt jedoch noch weniger offene Stellen - für Menschen mit Behinderungen. Und das ist völlig unlogisch - obwohl Arbeitgeber nicht entfernt werden wollen, aber unter denen, die dazu bereit sind, warum so wenige, die an Menschen mit Behinderungen denken? Wenn es Ihnen egal ist, was die Person in drei Zeitzonen ist, welchen Unterschied macht es für Sie, kann sie zum Beispiel laufen?


Viele von Ihnen kennen möglicherweise Menschen mit Behinderungen. Ich auch, und ich fragte mich, wie schwer es für sie war, einen Job zu finden, und worauf sie sich verlassen konnten.


NameGehaltsdurchschnittMindestgehaltGehalt maximalNummer
Öffentlicher Dienst, gemeinnützige Organisationen69675870090.0008
Top Management48705300008242515
Informationstechnologie, Internet, Telekommunikation453214350200.0001050
Wissenschaft, Bildung45056315890.000376
Beschaffung4359115.00080.0009
Bau, Immobilien4214822250000210
Produktion4096910.000130500189
Buchhaltung, Management Accounting, Unternehmensfinanzierung363872610113100125
Anwälte343082610160.000131
Sicherheit334142290.000178


Studenten


Wir alle beginnen mit etwas, nämlich mit einer Jobsuche, ohne Erfahrung. Ich beschloss, die Situation mit offenen Stellen für solche Kandidaten zu bewerten.


Die Zahl der offenen Stellen ist ermutigend für eine schnelle Beschäftigung. Und ich weiß nicht, wie realistisch es ist, das maximale Gehalt zu erreichen, aber man kann sogar irgendwie von durchschnittlichen Zahlen leben.


NameGehaltsdurchschnittMindestgehaltGehalt maximalNummer
Beratung6260115002218502504
Bau, Immobilien55855209499896455
Top Management5082611310400.000111
Rohstoffgewinnung381928000100.000328
Sicherheit346173954100.0005844
Medizin, Pharmazie34475450200.00011776
Transport, Logistik33600500150.0008000
Wissenschaft, Bildung3142611001245101660
Vertrieb304441350.00052566
Installation und Service30360826480.000381


Insgesamt top


Und jetzt das Interessanteste: Wer wird am meisten bezahlt? Sortiert alle gefundenen Stellen ohne Filter.


Dies ist natürlich das Top-Management. Wer würde es bezweifeln.


Eine merkwürdige Tatsache: Wenn Sie auf das Durchschnittsgehalt in allen Tabellen achten, können Sie sehen, dass es nicht so viel anders ist.


NameGehaltsdurchschnittMindestgehaltGehalt maximalNummer
Top Management787891502.000.0002408
Rohstoffgewinnung616998000180.0002302
Beratung597971500500.0003762
Informationstechnologie, Internet, Telekommunikation527772668480425900
Bau, Immobilien485872094998933229
Produktion42007126100027269
Arbeitspersonal4120325200.00043079
Autogeschäft38555208242549269
Installation und Service3841225180.0002390
Beschaffung37846502610002658


Putzfrau


Und hier ist der einfachste Weg: Warum 5 Jahre studieren, wenn man nur das Büro waschen kann? Unten sehen Sie das Ergebnis der Filterung der Top-Stellen für die Abfrage "Cleaner *".


Was ist, wenn Sie in mehrere Büros kommen und abends für ein paar Stunden zur Reinigung kommen? So können Sie ganz luxuriös leben. Wir werden dies als einen Lebenshack betrachten.


NameGehaltsdurchschnittMindestgehaltGehalt maximalNummer
Top Management6300040.000870008
Marketing, Werbung, PR50.00050.00050.0006
Rohstoffgewinnung4500045000450003
Personalmanagement, Schulungen3324679088700058
Buchhaltung, Management Accounting, Unternehmensfinanzierung320003000035.00010
Sicherheit315072000070.0006
Vertrieb29696473755.000159
Bau, Immobilien2902441380.00073
Transport, Logistik24987109904500026
Autogeschäft2446571244500061


Top Städte


Schließlich habe ich mich entschlossen, die Anzahl der offenen Stellen nach Stadt zu überprüfen. Die ersten Plätze sind nicht überraschend, aber dann gibt es merkwürdige und sogar unerwartete Positionen.


NameNummer
Moskau31137
Sankt Petersburg11745
Minsk7608
Almaty4386
Kiew3398
Jekaterinburg3182
Nowosibirsk3097
Kasan3066
Ufa2980
Nizhny Novgorod2876


Repository


Der gesamte Code aus dem Artikel mit Verbesserungen und Anweisungen ist im Repository verfügbar.

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


All Articles