Напиши отчет по производственной практике в универ...
Создано: 16 августа 2025 г.
Отвечено с использованием GPT-5 Thinking от Chat01
Создано: 16 августа 2025 г.
Отвечено с использованием GPT-5 Thinking от Chat01
Напиши отчет по производственной практике в университете на тему "Датасет для решения задачи или для хакатона по анализу данных". Итогом работы является датасет, который представляет из себя данные по IT-вакансиям с сайтов hh и хабр карьера. Задачей является предсказать значение salary по данным вакансии. Датасет загружен на платформу huggingface.
Отчет должен быть по структуре
Содержание
Введение (1–2 стр.)
Актуальность практики – почему важно изучать данную тему.
Цель практики – что студент должен был достичь. + Вот это
"Приобретение студентами первичных профессиональных навыков, практического опыта и расширение
теоретических знаний по дисциплинам учебного плана. Закрепление знаний и умений, полученных в процессе
обучения, и получение систематического представления о текущих и перспективных разработках вычислительных
машин и систем, практических перспективах информатики, актуальных понятиях и технологиях обработки
информации для решения аналитических задач. Практика является неотъемлемой частью образовательного
процесса и выступает средством формирования у студентов профессиональных навыков и умений."
Задачи практики – конкретные шаги для достижения цели (например, изучение технологий, разработка ПО, тестирование и т. д.).
Место прохождения практики – краткое описание организации/кафедры.
Сроки практики – даты начала и окончания (те что у Вас указаны в договоре, чаще всего это 30.06.2025 - 27.07.2025.
3.2 Анализ существующих решений
4.2 Примеры кода/настройки (если требуется)
4.3 Результаты тестирования и отладки
Ниже — полностью готовый текст отчёта. Я оставил поля в квадратных скобках для ваших данных (вуз, ФИО и т. п.) — просто подставьте нужное.
[Название вуза]
[Институт / факультет / кафедра]
ОТЧЁТ ПО УЧЕБНОЙ (ПРОИЗВОДСТВЕННОЙ) ПРАКТИКЕ
Тема: «Датасет для задачи/хакатона по анализу данных: IT-вакансии (hh.ru и Хабр Карьера)»
Студент(ка): [ФИО студента полностью], группа [№ группы]
Руководитель практики: [ФИО, должность]
Место прохождения практики: [Организация / кафедра, лаборатория]
Город: [Город]
Год: 2025
IT-рынок труда динамичен: технологии и стек меняются быстро, уровень оплаты зависит от локации, навыков, опыта и даже формулировок вакансии. Компании стремятся прогнозировать бюджет и сроки закрытия позиций, соискатели — понимать «рыночную» стоимость навыков. Модель, предсказывающая зарплату по данным вакансии, помогает:
Создание чистого, документированного датасета — необходимая основа для прозрачных и воспроизводимых исследований и соревнований (хакатонов).
Сформировать и опубликовать на платформе Hugging Face датасет по IT-вакансиям с hh.ru и Хабр Карьеры, пригодный для задачи регрессии salary по признакам вакансии; подготовить базовые бейзлайны и описание для участников хакатона.
Дополнительно (по заданию кафедры):
Приобретение студентами первичных профессиональных навыков, практического опыта и расширение теоретических знаний по дисциплинам учебного плана. Закрепление знаний и умений, полученных в процессе обучения, и получение систематического представления о текущих и перспективных разработках вычислительных машин и систем, практических перспективах информатики, актуальных понятиях и технологиях обработки информации для решения аналитических задач. Практика является неотъемлемой частью образовательного процесса и выступает средством формирования у студентов профессиональных навыков и умений.
[Краткое описание организации/кафедры: профиль, тематика работ, оборудование/ПО, роль в проекте].
Согласно договору: 30.06.2025 — 27.07.2025.
Источники и структура данных.
Вакансии содержат: должность, стек/навыки, обязанности, опыт, тип занятости/график, локацию (город/remote), компанию, вилку оплаты (from/to, валюта, gross/net). Важно унифицировать зарплату к единому периоду (месяц) и валюте (например, RUB по курсу на дату публикации).
Методы и технологии.
JSONL/Parquet
, схема валидируется (pydantic), версии фиксируются тегами релизов.razdel
/nltk
), лемматизация (pymorphy2
), нормализация.company+title
).Стандарты и практики.
PEP 8, reproducibility (фиксированные сиды, версии зависимостей), лицензирование датасета (например, CC BY-NC 4.0 — при условии соответствия требованиям источников), хранение артефактов (Hugging Face Hub), Data Card.
Аналоги и датасеты.
Существуют наборы «Job Salary Prediction» (на Kaggle и др.), однако они часто англоязычные, без учёта российской специфики (валюта, налоги, должностные роли). Русскоязычные наборы фрагментарны и редко сопровождаются чистыми текстовыми признаками и карточкой датасета.
Выбор подхода.
Цель — сделать реплицируемый и практически применимый набор: прозрачный сбор, строгая нормализация зарплаты, чёткие сплиты и готовые бейзлайны. Микс TF-IDF + градиентного бустинга обеспечивает сильный старт, а хаб-хостинг (HF) упрощает доставку участникам.
Исследование источников и правовых ограничений. Оценены условия использования данных и допустимые поля для публикации.
Схема датасета. Выбраны поля:
id
, source
(hh/habr), published_at
title
, description
, skills
(нормализованный список)company
, city
, remote
(0/1), employment_type
, experience_level
salary_from
, salary_to
, salary_currency
, salary_gross
(0/1) — сырыеsalary_month_rub
— целевая переменная (сконвертированная к месяцу в RUB)hash
, dup_group
, dataset_split
(train/valid/test), version
.Сбор данных. Реализованы клиенты для hh API и парсера Хабр Карьеры с rate-limit, ретраями, логированием.
Очистка и дедупликация.
hash(title+company+city+published_date)
и по нечеткому совпадению;Нормализация зарплаты.
salary_from
при отсутствии to
.Фичи и сплиты.
title + skills + description
;city
, employment_type
, experience_level
);city
и experience_level
, фиксированный seed.Бейзлайны и оценка. Сравнены Ridge, LightGBM, CatBoost (текстовые фичи + категориальные).
Публикация датасета. Загрузка на Hugging Face Datasets с dataset_card.md
, указанием лицензии, версии, скрипта загрузки, примеров использования.
Фрагменты показывают общий подход и могут быть использованы как стартовый шаблон.
(а) Клиент для hh.ru (пагинация и ретраи)
pythonimport time, requests BASE = "https://api.hh.ru/vacancies" params = {"text": "IT OR разработчик OR data", "per_page": 100, "page": 0, "date_from": "2025-01-01"} items = [] for page in range(0, 20): params["page"] = page r = requests.get(BASE, params=params, timeout=30) if r.status_code == 429: # rate limit time.sleep(2); continue r.raise_for_status() chunk = r.json().get("items", []) if not chunk: break items.extend(chunk) time.sleep(0.3) # вежливая задержка
(б) Нормализация зарплаты и таргета
pythonimport pandas as pd def monthly_amount(amount, period): if pd.isna(amount): return None return { "hour": amount * 160, "day": amount * 21, "week": amount * 4.35, "month": amount, "year": amount / 12 }.get(period, amount) def convert_to_rub(amount, currency, rate_map): if amount is None: return None rate = rate_map.get(currency, 1.0) # 1.0 для RUB return amount * rate def target_salary(row, rate_map): lo, hi = row["salary_from"], row["salary_to"] period = row.get("salary_period", "month") cur = row.get("salary_currency", "RUR") base = None if pd.notna(lo) and pd.notna(hi): base = (lo + hi) / 2 else: base = lo if pd.notna(lo) else hi m = monthly_amount(base, period) return convert_to_rub(m, cur, rate_map) # rate_map должен формироваться по дате публикации (исторический курс)
(в) Бейзлайн-пайплайн (TF-IDF + Ridge)
pythonfrom sklearn.compose import ColumnTransformer from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.preprocessing import OneHotEncoder from sklearn.linear_model import Ridge from sklearn.pipeline import Pipeline from sklearn.model_selection import KFold, cross_val_score import numpy as np text_col = "text_all" # title + skills + description cat_cols = ["city", "employment_type", "experience_level"] num_cols = ["desc_len", "skills_cnt", "remote"] preprocess = ColumnTransformer([ ("tfidf", TfidfVectorizer(min_df=5, ngram_range=(1,2), max_features=150_000), text_col), ("cat", OneHotEncoder(handle_unknown="ignore"), cat_cols), ("num", "passthrough", num_cols), ]) model = Ridge(alpha=3.0, random_state=42) pipe = Pipeline([("prep", preprocess), ("model", model)]) cv = KFold(n_splits=5, shuffle=True, random_state=42) mae = -cross_val_score(pipe, X, y, cv=cv, scoring="neg_mean_absolute_error") rmse = np.sqrt(-cross_val_score(pipe, X, y, cv=cv, scoring="neg_mean_squared_error")) print("MAE:", mae.mean(), "±", mae.std()) print("RMSE:", rmse.mean(), "±", rmse.std())
(г) CatBoost для смешанных и текстовых фич
pythonfrom catboost import CatBoostRegressor, Pool text_features = ["title", "skills_str", "description"] cat_features = ["city", "employment_type", "experience_level"] train_pool = Pool( data=X_train, label=y_train, text_features=text_features, cat_features=cat_features ) params = dict( loss_function="MAE", depth=8, iterations=2000, learning_rate=0.03, eval_metric="RMSE", random_seed=42, early_stopping_rounds=100 ) model = CatBoostRegressor(**params) model.fit(train_pool, eval_set=Pool(X_valid, y_valid, text_features=text_features, cat_features=cat_features), verbose=100)
(д) Структура репозитория/релиза
textdataset/ data/train.parquet data/valid.parquet data/test.parquet README.md (Dataset Card) LICENSE dataset_infos.json loading_script.py baseline/ ridge_tfidf.py catboost_text.py requirements.txt
Возникшие проблемы и решения.
dup_group
.salary_month_rub
, конвертация по историческому курсу на дату публикации.Метрики бейзлайнов (иллюстративные).
На валидации 5-Fold (стратификация по уровню опыта) типичные ориентиры:
Критерии готовности датасета.
salary_month_rub
;datasets.load_dataset(...)
);В ходе практики собран и опубликован датасет IT-вакансий с hh.ru и Хабр Карьеры для задачи регрессии зарплаты. Разработан воспроизводимый пайплайн: сбор, очистка, нормализация зарплаты к месяцу в RUB, формирование признаков и сплитов. Подготовлены бейзлайны (TF-IDF + Ridge, CatBoost), демонстрирующие работоспособность постановки. Создана документация (Dataset Card) и структура релиза на Hugging Face, что позволяет использовать набор в учебных целях, на хакатонах и в исследовательских работах. Работа дала практические навыки по инженерии данных, обработке текстов, постановке и оценке ML-задач, а также по публикации и сопровождению открытых датасетов.
pythonfrom datasets import load_dataset ds = load_dataset("your-nick/it-vacancies-ru", split="train")
Если хотите, я могу преобразовать текст в оформленный DOCX или PDF в вашем стиле (шаблон кафедры, шрифты, поля).