Code Monkey home page Code Monkey logo

hukenovs / hh_research Goto Github PK

View Code? Open in Web Editor NEW
75.0 9.0 25.0 2.86 MB

Автоматизация поиска и исследования вакансий с сайта hh.ru (Headhunter) с помощью методов Python. Классификация данных, поиск статистических параметров.

License: GNU General Public License v3.0

Python 8.84% Jupyter Notebook 90.97% Dockerfile 0.19%
headhunter python pandas statistics json jupyter-notebook parser machine-learning data-mining numpy api http matplotlib nltk-python research development salary

hh_research's Introduction

Автоматизация поиска и анализа вакансий hh.ru

Идея: проект упрощает поиск, анализ и исследование особенностей вакансий на hh.ru. Скрипт использует API hh.ru для доступа к данным вакансий.

Общая информация

Title HeadHunter Find & Research
Author Alexander Kapitanov
Language Python (3+)
Release 14 Aug 2019
License GNU GPL 3.0

Example Data Frame


Requirements

Пример установки зависимостей для Python 3.9

git clone <repo.git>
cd <repo>

conda create -n venv python=3.9
conda activate venv

python researcher.py <options>

Command line arguments

usage: researcher.py [-h] [--text TEXT] [--professional_roles ROLE1 ROLE2 ...] [--num_workers MAX_WORKERS] [--refresh] [--save_result] [--update]

HeadHunter (hh.ru) vacancies researcher

optional arguments:
  -h, --help            show this help message and exit
  -t TEXT, --text TEXT  Search query text (e.g. "Machine learning")
  -p [PROFESSIONAL_ROLES ...], --professional_roles [PROFESSIONAL_ROLES ...]
                        Professional role filter (Possible roles can be found here https://api.hh.ru/professional_roles)
  -n NUM_WORKERS, --num_workers NUM_WORKERS
                        Number of workers for multithreading.
  -r, --refresh         Refresh cached data from HH API
  -s, --save_result     Save parsed result as DataFrame to CSV file.
  -u, --update          Save command line args to file in JSON format.

Config file

Все параметры находятся в конфигурационном файле, пример:

{
  "options": {
    "text": "Data Scientist",
    "area": 1,
    "per_page": 50,
    "professional_roles": [96, 10]
  },
  "refresh": false,
  "num_workers": 10,
  "save_result": false,
  "exchanges": ["RUB", "USD", "EUR", "UAH"]
}

Input data

Входные данные - словарь ключевых значений, формирующих запрос.

Основные параметры:

  • area - локация поискового запроса (пример: {area: 1} - Москва),
  • text - поисковой запрос для вакансий (пример: {text : Machine Learning} или {text: Java}),
  • per_page - количество вакансий на страницу, по умолчанию 50.
  • professional_roles - фильтр по роли в запросе (возможные значения)

и другие параметры (в зависимости от требуемого запроса).

Пример графика распределения зарплат:

Example Salary Distribution

Run

Для запуска скрипта необходимо задать обязательный параметр ключевого запроса поиска. В системах Windows ключевой запрос в двойных кавычках! Например: Machine Learning или JavaScript. Скрипт запускается из командной строки:

python researcher.py --text "Python Developer"

Можно задать параметр --refresh, который обновляет кешируемые данные о вакансиях. Для повторных запросов, отличающихся от первичного, это обязательный параметр.

python researcher.py --text "Data Mining" --refresh

Processing

  • Ответ от удаленного ресурса в виде json-массива для текущего курса валют: {RUR, USD, EUR, UAH}.
  • На базе словаря входных данных формируется URL для запроса данных с hh.ru через API,
  • Создается список всех id вакансий,
  • Парсинг JSON в ответ на запрос по всем id вакансий,
    • Анализ параметра salary для формирования словаря зарплат:
      • Для зарплат, указанных в USD и EUR производится пересчёт по текущему курсу рубля,
      • Для зарплат, указанных до вычета НДФЛ производится пересчёт на реальную зарплату "на руки",
      • Для отсутствующих зарплат - пропуск.
    • Создаётся словарь ключевых элементов таблицы,
      • Массив содержит поля: {колонки фрейма* - (см. ниже)},
      • Для полей From и To происходит перерасчет зарплаты,
      • Ключевые навыки формируются как перечисляемый список,
      • Описание вакансий очищается от HTML-тегов с помощью дополнительной функции.
    • Функция возвращает массив кортежей.
  • Преобразование сырых данных в DataFrame для дальнейшего анализа. Результат сохраняется на диск в виде csv файла.
  • Анализ DataFrame - поиск статстических параметров, поиск мат. ожидания, медианы и т.д от зарплат. Классификация по параметрам.
  • Предсказание зарплат для вакансий, у которых этот параметр не задан.
  • Построение информативных графиков.

Пример графика для указанных зарплат:

Example Salary Plot

Колонки фрейма:

Параметр Тип Описание
Ids str идентификатор вакансии (формирует ссылку на вакансию)
Employer str работодатель
Name str название вакансии
Salary bool указание зарплаты: True / False
From float нижний порог зарплаты
To float верхний порог зарплаты
Experience str опыт работы
Schedule str график работы
Keys list ключевые навыки
Description str описание вакансиии

Нижний и верхний порог зарплаты пересчитаны в рубли по текущему курсу валюты. Также для зарплат, указанных до вычета НДФЛ производится пересчёт на реальную зарплату "на руки".

Пример наиболее часто используемых ключевых значений:

Top words in Key / Description

Output data

Выходные данные - таблица в формате csv, созданная с помощью фреймворка pandas. Дополнительно к этой таблице проводится анализ: поиск мат. ожидания, медианы и т.д от зарплат в зависимости от остальных критериев в таблице (например, от опыта работы). Проводится классификация по различным параметрам.

Пример предсказанных зарплат:

Salaries predicted

Документация API HeadHunter hh.ru


Link:

Author:

  • Kapitanov Alexander

Release:

  • 2019/08/14.

License:

  • GNU GPL 3.0.

hh_research's People

Contributors

dependabot[bot] avatar gblssroman avatar hukenovs avatar pomidoroshev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hh_research's Issues

KeyError: 'salary'

Добрый вечер!
Спасибо большое за скрипт. Он работает, но иногда (и вот сейчас постоянно) выдает ошибку в консоли:

[root]# python3.6 researcher.py --text "Data scientists" --refresh --save_result
[INFO]: Get exchange rates: {'USD': 0.012641, 'EUR': 0.010831, 'UAH': 0.35902, 'RUR': 1}
[INFO]: Collect data from JSON. Create list of vacancies...
Get data via HH API:   0%|                                                  | 0/237 [00:00<?, ?it/s]
Traceback (most recent call last):
  File "researcher.py", line 97, in <module>
    hh_analyzer()
  File "researcher.py", line 82, in __call__
    query=self.settings.options, refresh=self.settings.refresh, max_workers=self.settings.max_workers
  File "/hh/src/data_collector.py", line 178, in collect_vacancies
    executor.map(self.get_vacancy, ids), desc="Get data via HH API", ncols=100, total=len(ids),
  File "/usr/local/lib/python3.6/site-packages/tqdm/std.py", line 1180, in __iter__
    for obj in iterable:
  File "/usr/lib64/python3.6/concurrent/futures/_base.py", line 586, in result_iterator
    yield fs.pop().result()
  File "/usr/lib64/python3.6/concurrent/futures/_base.py", line 432, in result
    return self.__get_result()
  File "/usr/lib64/python3.6/concurrent/futures/_base.py", line 384, in __get_result
    raise self._exception
  File "/usr/lib64/python3.6/concurrent/futures/thread.py", line 56, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/hh/src/data_collector.p", line 104, in get_vacancy
    salary = vacancy["salary"]
KeyError: 'salary'

В чём может быть причина?

KeyError: 'employer'

$ python researcher.py --text "Golang developer" --refresh
[INFO]: Get exchange rates: {'USD': 0.012641, 'EUR': 0.010831, 'UAH': 0.35902, 'RUR': 1}
[INFO]: Collect data from JSON. Create list of vacancies...
Get data via HH API:   0%|                                                  | 0/582 [00:00<?, ?it/s]
Traceback (most recent call last):
  File "/content/hh_research/researcher.py", line 97, in <module>
    hh_analyzer()
  File "/content/hh_research/researcher.py", line 81, in __call__
    vacancies = self.collector.collect_vacancies(
  File "/content/hh_research/src/data_collector.py", line 192, in collect_vacancies
    for vacancy in tqdm(
  File "/usr/local/lib/python3.10/site-packages/tqdm/std.py", line 1195, in __iter__
    for obj in iterable:
  File "/usr/local/lib/python3.10/concurrent/futures/_base.py", line 621, in result_iterator
    yield _result_or_cancel(fs.pop())
  File "/usr/local/lib/python3.10/concurrent/futures/_base.py", line 319, in _result_or_cancel
    return fut.result(timeout)
  File "/usr/local/lib/python3.10/concurrent/futures/_base.py", line 458, in result
    return self.__get_result()
  File "/usr/local/lib/python3.10/concurrent/futures/_base.py", line 403, in __get_result
    raise self._exception
  File "/usr/local/lib/python3.10/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/content/hh_research/src/data_collector.py", line 120, in get_vacancy
    vacancy["employer"]["name"],
KeyError: 'employer'

Работает только с Data mining

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.