Задача понята: нужно получить коды кадров (hr_code) для вакансий, размещённых за последнюю неделю, и посчитать количество вакансий по каждому коду.
Краткий план
- Определим период: последняя неделя включает даты за последние 7 дней, включая сегодня.
- Отфильтруем записи по дате размещения.
- Посчитаем количество вакансий для каждого кадрового кода (hr_code).
- Выведем результат в удобном виде (у кого нет hr_code — пропустим).
Ниже — несколько вариантов реализации. Выберите удобный вам язык/инструмент.
- Вариант на Python с использованием pandas (самый простой и надёжный для табличных данных)
Что понадобится:
- Библиотека pandas.
- Данные в DataFrame с как минимум столбцами: posting_date (дата размещения) и hr_code (код кадров).
Код (пример):
import pandas as pd
from datetime import datetime
def get_last_week_hr_codes(df, date_col='posting_date', hr_col='hr_code'):
# Приведём даты к типу datetime
df[date_col] = pd.to_datetime(df[date_col], errors='coerce')
# Определим диапазон: последние 7 дней (включая сегодня)
today = pd.Timestamp.today().normalize()
start = today - pd.Timedelta(days=6)
# Фильтрация по дате
mask = (df[date_col] >= start) & (df[date_col] <= today)
subset = df.loc[mask]
# Проверяем наличие колонки hr_code
if hr_col not in subset.columns:
raise KeyError(f"Колонка '{hr_col}' не найдена в данных.")
# Группировка и подсчёт
result = (
subset
.dropna(subset=[hr_col]) # исключим записи без hr_code
.groupby(hr_col)
.size()
.reset_index(name='count')
.sort_values('count', ascending=False)
)
return result
# Пример использования
data = [
{'posting_date': '2026-05-23', 'hr_code': 'A1', 'position': 'Engineer'},
{'posting_date': '2026-05-26', 'hr_code': 'A2', 'position': 'Analyst'},
{'posting_date': '2026-05-26', 'hr_code': 'A1', 'position': 'Engineer'},
{'posting_date': '2026-05-20', 'hr_code': 'A3', 'position': 'Designer'}, # вне диапазона
]
df = pd.DataFrame(data)
print(get_last_week_hr_codes(df))
Вывод будет что-то вроде: hr_code | count A1 | 2 A2 | 1 (A3 исключается, если дата вне диапазона)
- Вариант без зависимостей (чистый Python)
Если вы не можете использовать pandas, можно посчитать вручную по списку словарей.
from datetime import datetime, date, timedelta
def get_last_week_hr_codes_simple(records, date_col='posting_date', hr_col='hr_code'):
today = date.today()
start = today - timedelta(days=6)
counts = {}
for rec in records:
dt_str = rec.get(date_col)
hr = rec.get(hr_col)
if not dt_str or not hr:
continue
try:
dt = datetime.strptime(dt_str, '%Y-%m-%d').date()
except ValueError:
continue
if start <= dt <= today:
counts[hr] = counts.get(hr, 0) + 1
# Преобразуем в отсортированный список по убыванию
return sorted(counts.items(), key=lambda kv: kv[1], reverse=True)
# Пример использования
records = [
{'posting_date': '2026-05-23', 'hr_code': 'A1', 'position': 'Engineer'},
{'posting_date': '2026-05-26', 'hr_code': 'A2', 'position': 'Analyst'},
{'posting_date': '2026-05-26', 'hr_code': 'A1', 'position': 'Engineer'},
{'posting_date': '2026-05-20', 'hr_code': 'A3', 'position': 'Designer'},
]
print(get_last_week_hr_codes_simple(records))
- SQL-запрос (если данные хранятся в базе данных)
Если данные хранятся в таблице вакансий с колонками posting_date и hr_code:
SELECT hr_code, COUNT(*) AS count
FROM vacancies
WHERE posting_date >= CURRENT_DATE - INTERVAL '6 days'
GROUP BY hr_code
ORDER BY count DESC;
Дополнительные пояснения
- Последняя неделя: период от сегодня минус 6 дней до сегодня включительно. Если нужно иначе (например, "последняя 7-дневная неделя, считая с понедельника"), скажите — адаптирую.
- Обработку дат лучше делать с нормализацией по часовому поясу, чтобы не промахнуться на переходах даты.
- В данных могут встречаться записи без hr_code. В примерах я предлагаю игнорировать такие записи, но можно заменить на отдельную категорию "UNKNOWN" или включить их по желанию.
- Если в ваших данных есть разные форматы дат (например, виде '2026/05/23'), pandas будет справляться после указания соответствующего формата или позволить автоматическое преобразование.
Если хотите, можно адаптировать код под ваш конкрет формат данных и язык/среду разработки. Напишите, какие данные у вас есть (пример CSV/Excel/SQL-схема) — и я дам точный готовый скрипт под вашу задачу.
