Напиши отчет по производственной практике в универ...

Создано: 16 августа 2025 г.

Отвечено с использованием GPT-5 Thinking от Chat01

Вопрос

Напиши отчет по производственной практике в университете на тему "Датасет для решения задачи или для хакатона по анализу данных". Итогом работы является датасет, который представляет из себя данные по IT-вакансиям с сайтов hh и хабр карьера. Задачей является предсказать значение salary по данным вакансии. Датасет загружен на платформу huggingface.

Отчет должен быть по структуре

  1. Титульный лист
  • Название вуза, кафедры
  • Тема отчета
  • ФИО студента, группа
  • ФИО руководителя практики
  • Место прохождения практики
  • Год
  1. Содержание

  2. Введение (1–2 стр.)

  • Актуальность практики – почему важно изучать данную тему.

  • Цель практики – что студент должен был достичь. + Вот это
    "Приобретение студентами первичных профессиональных навыков, практического опыта и расширение
    теоретических знаний по дисциплинам учебного плана. Закрепление знаний и умений, полученных в процессе
    обучения, и получение систематического представления о текущих и перспективных разработках вычислительных
    машин и систем, практических перспективах информатики, актуальных понятиях и технологиях обработки
    информации для решения аналитических задач. Практика является неотъемлемой частью образовательного
    процесса и выступает средством формирования у студентов профессиональных навыков и умений."

  • Задачи практики – конкретные шаги для достижения цели (например, изучение технологий, разработка ПО, тестирование и т. д.).

  • Место прохождения практики – краткое описание организации/кафедры.

  • Сроки практики – даты начала и окончания (те что у Вас указаны в договоре, чаще всего это 30.06.2025 - 27.07.2025.

  1. Теоретическая часть (3–5 стр.)
    3.1 Обзор предметной области
  • Какие технологии, методы, стандарты использовались.
  • Краткое описание библиотек, фреймворков, аппаратных решений.

3.2 Анализ существующих решений

  • Какие аналоги есть на рынке?
  • Почему выбран именно этот подход?
  1. Практическая часть (5–10 стр.)
    4.1 Описание выполненных задач
  • Какие работы проводились (настройка, разработка, тестирование и т. д.).
  • Какие инструменты и технологии применялись.

4.2 Примеры кода/настройки (если требуется)

  • Фрагменты программного кода, конфигурационные файлы, скриншоты интерфейсов.

4.3 Результаты тестирования и отладки

  • Какие проблемы возникли и как были решены.
  • Метрики производительности (если есть).
  1. Заключение (1 стр.)
  • Общие итоги практики.
  1. Список литературы
    (Оформляется по ГОСТ: книги, статьи, документация, сайты)

Мысль

Planning report structure

I need to create a report in Russian based on the specified structure. I won't need to browse, since this isn’t time-sensitive. I'll include placeholders for things like the university name, department, and other relevant details. The user’s name, Wayne Boyd, isn’t relevant here, so I’ll focus on Russian placeholder formats like Иванов И.И.

Preparing report with placeholders

It's easier to leave placeholders in square brackets so the user can fill them in later. The instruction says not to repeat questions already answered, and they didn’t provide personal details. For the report, I'll include relevant code examples like scraping with the requests/BeautifulSoup libraries, and handling data via APIs. I'll also suggest using models like LightGBM or CatBoost for predictive tasks and show sample metrics for evaluation.

Creating model pipeline and references

I’ll create a regression model pipeline with cross-validation results. For text processing, I’ll include TF-IDF or sentence-transformer embeddings (offline use). I'll add code examples with disclaimers and a dataset link placeholder. For references, I’ll list documentation sources, plus machine learning textbooks in Russian, formatted per GOST style.

Structuring the report

For the report, I’ll organize it with clear section headings: introduction (1-2 pages), theoretical part (3-5 pages), practical section (5-10 pages), and conclusion (1 page). While I can’t guarantee exact page counts, I’ll aim for suitable text lengths. I’ll include sample code blocks and SE pipelines, and use placeholders for the dates. I'll add a "Содержание" (Table of Contents), number the sections, but skip page numbers to keep it generic.

Thought for 42s

Ответ

Ниже — полностью готовый текст отчёта. Я оставил поля в квадратных скобках для ваших данных (вуз, ФИО и т. п.) — просто подставьте нужное.


1) Титульный лист

[Название вуза]
[Институт / факультет / кафедра]

ОТЧЁТ ПО УЧЕБНОЙ (ПРОИЗВОДСТВЕННОЙ) ПРАКТИКЕ
Тема: «Датасет для задачи/хакатона по анализу данных: IT-вакансии (hh.ru и Хабр Карьера)»

Студент(ка): [ФИО студента полностью], группа [№ группы]
Руководитель практики: [ФИО, должность]
Место прохождения практики: [Организация / кафедра, лаборатория]
Город: [Город]
Год: 2025


2) Содержание

  1. Титульный лист
  2. Содержание
  3. Введение
  4. Теоретическая часть
      4.1. Обзор предметной области
      4.2. Анализ существующих решений
  5. Практическая часть
      5.1. Описание выполненных задач
      5.2. Примеры кода и настроек
      5.3. Результаты тестирования и отладки
  6. Заключение
  7. Список литературы

3) Введение (1–2 стр.)

Актуальность

IT-рынок труда динамичен: технологии и стек меняются быстро, уровень оплаты зависит от локации, навыков, опыта и даже формулировок вакансии. Компании стремятся прогнозировать бюджет и сроки закрытия позиций, соискатели — понимать «рыночную» стоимость навыков. Модель, предсказывающая зарплату по данным вакансии, помогает:

  • автоматизировать разметку вакансий без явного указания зарплаты;
  • анализировать факторы, влияющие на компенсации;
  • проектировать стратегии найма и обучения;
  • формировать реалистичные ожидания соискателей.

Создание чистого, документированного датасета — необходимая основа для прозрачных и воспроизводимых исследований и соревнований (хакатонов).

Цель практики

Сформировать и опубликовать на платформе Hugging Face датасет по IT-вакансиям с hh.ru и Хабр Карьеры, пригодный для задачи регрессии salary по признакам вакансии; подготовить базовые бейзлайны и описание для участников хакатона.

Дополнительно (по заданию кафедры):

Приобретение студентами первичных профессиональных навыков, практического опыта и расширение теоретических знаний по дисциплинам учебного плана. Закрепление знаний и умений, полученных в процессе обучения, и получение систематического представления о текущих и перспективных разработках вычислительных машин и систем, практических перспективах информатики, актуальных понятиях и технологиях обработки информации для решения аналитических задач. Практика является неотъемлемой частью образовательного процесса и выступает средством формирования у студентов профессиональных навыков и умений.

Задачи практики

  1. Изучить источники данных (API/HTML hh.ru, Хабр Карьера) и юридические ограничения.
  2. Спроектировать схему датасета и правила нормализации (валюта, период, брутто/нетто).
  3. Реализовать сбор данных, дедупликацию и очистку.
  4. Подготовить признаки (текстовые, категориальные, числовые), зафиксировать сплиты.
  5. Сформировать Dataset Card и выгрузить релиз на Hugging Face.
  6. Подготовить бейзлайны (линейная модель, градиентный бустинг/CatBoost) и метрики.
  7. Описать пайплайн, результаты и ограничения в отчёте.

Место прохождения практики

[Краткое описание организации/кафедры: профиль, тематика работ, оборудование/ПО, роль в проекте].

Сроки практики

Согласно договору: 30.06.2025 — 27.07.2025.


4) Теоретическая часть (3–5 стр.)

4.1. Обзор предметной области

Источники и структура данных.
Вакансии содержат: должность, стек/навыки, обязанности, опыт, тип занятости/график, локацию (город/remote), компанию, вилку оплаты (from/to, валюта, gross/net). Важно унифицировать зарплату к единому периоду (месяц) и валюте (например, RUB по курсу на дату публикации).

Методы и технологии.

  • Сбор: REST API (hh.ru) + безопасный HTML-парсинг (Хабр Карьера) с учётом robots.txt, задержек и ретраев.
  • Хранение: JSONL/Parquet, схема валидируется (pydantic), версии фиксируются тегами релизов.
  • Обработка текста: токенизация (razdel/nltk), лемматизация (pymorphy2), нормализация.
  • Векторизация: TF-IDF как бейзлайн; опционально эмбеддинги (Sentence-BERT) для улучшения качества.
  • ML-модели: линейные (Ridge/Lasso), деревья (RandomForest), GBDT (LightGBM/CatBoost). CatBoost удобен для смешанных признаков и текстов.
  • Оценка: KFold, метрики MAE/RMSE/R², контроль ликов (например, по совпадениям company+title).

Стандарты и практики.
PEP 8, reproducibility (фиксированные сиды, версии зависимостей), лицензирование датасета (например, CC BY-NC 4.0 — при условии соответствия требованиям источников), хранение артефактов (Hugging Face Hub), Data Card.

4.2. Анализ существующих решений

Аналоги и датасеты.
Существуют наборы «Job Salary Prediction» (на Kaggle и др.), однако они часто англоязычные, без учёта российской специфики (валюта, налоги, должностные роли). Русскоязычные наборы фрагментарны и редко сопровождаются чистыми текстовыми признаками и карточкой датасета.

Выбор подхода.
Цель — сделать реплицируемый и практически применимый набор: прозрачный сбор, строгая нормализация зарплаты, чёткие сплиты и готовые бейзлайны. Микс TF-IDF + градиентного бустинга обеспечивает сильный старт, а хаб-хостинг (HF) упрощает доставку участникам.


5) Практическая часть (5–10 стр.)

5.1. Описание выполненных задач

  1. Исследование источников и правовых ограничений. Оценены условия использования данных и допустимые поля для публикации.

  2. Схема датасета. Выбраны поля:

    • 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.
  3. Сбор данных. Реализованы клиенты для hh API и парсера Хабр Карьеры с rate-limit, ретраями, логированием.

  4. Очистка и дедупликация.

    • удаление дублей по hash(title+company+city+published_date) и по нечеткому совпадению;
    • удаление вакансий без информативного текста;
    • фильтр аномалий (вилки > перцентиля 99.5).
  5. Нормализация зарплаты.

    • перевод почасовой/годовой в месячную;
    • конвертация валют к RUB по историческому курсу на дату публикации;
    • выбор таргета: медиана вилки либо salary_from при отсутствии to.
  6. Фичи и сплиты.

    • текст: TF-IDF(1–2-граммы) по title + skills + description;
    • категориальные: one-hot (city, employment_type, experience_level);
    • числовые: длина описания, число навыков, признак remote;
    • сплиты: стратификация по city и experience_level, фиксированный seed.
  7. Бейзлайны и оценка. Сравнены Ridge, LightGBM, CatBoost (текстовые фичи + категориальные).

  8. Публикация датасета. Загрузка на Hugging Face Datasets с dataset_card.md, указанием лицензии, версии, скрипта загрузки, примеров использования.

5.2. Примеры кода/настроек

Фрагменты показывают общий подход и могут быть использованы как стартовый шаблон.

(а) Клиент для hh.ru (пагинация и ретраи)

python
import 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) # вежливая задержка

(б) Нормализация зарплаты и таргета

python
import 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)

python
from 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 для смешанных и текстовых фич

python
from 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)

(д) Структура репозитория/релиза

text
dataset/ 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

5.3. Результаты тестирования и отладки

Возникшие проблемы и решения.

  • Анти-бот-механизмы и лимиты: добавлены задержки, ретраи, ограничение параллелизма; при необходимости — предварительное кеширование.
  • Дубликаты: использованы хэши и нечеткое сравнение (title/company/skills), группировка по dup_group.
  • Несогласованные валюты/периоды: единый таргет salary_month_rub, конвертация по историческому курсу на дату публикации.
  • Шум в тексте: очистка HTML, удаление списков вакансий «копия-в-копию» от агрегаторов.
  • Лики: контроль, чтобы одинаковые вакансии/компании не оказывались в разных сплитах (групповой сплит при необходимости).

Метрики бейзлайнов (иллюстративные).
На валидации 5-Fold (стратификация по уровню опыта) типичные ориентиры:

  • TF-IDF + Ridge: MAE ~ 25–35 тыс. RUB, RMSE ~ 40–55 тыс. RUB, R² ~ 0.55–0.65.
  • CatBoost (текст + категории): MAE ~ 22–30 тыс. RUB, RMSE ~ 36–48 тыс. RUB, R² ~ 0.60–0.70.
    Фактические значения зависят от версии данных, периода и доли вакансий без явной вилки.

Критерии готовности датасета.

  • ≥ N наблюдений после очистки;
  • ≥ 95 % записей с валидным salary_month_rub;
  • воспроизводимый скрипт загрузки (datasets.load_dataset(...));
  • фиксированы версии и контрольные суммы файлов;
  • Dataset Card с описанием полей, источников, лицензии, известных ограничений и примером кода.

6) Заключение (1 стр.)

В ходе практики собран и опубликован датасет IT-вакансий с hh.ru и Хабр Карьеры для задачи регрессии зарплаты. Разработан воспроизводимый пайплайн: сбор, очистка, нормализация зарплаты к месяцу в RUB, формирование признаков и сплитов. Подготовлены бейзлайны (TF-IDF + Ridge, CatBoost), демонстрирующие работоспособность постановки. Создана документация (Dataset Card) и структура релиза на Hugging Face, что позволяет использовать набор в учебных целях, на хакатонах и в исследовательских работах. Работа дала практические навыки по инженерии данных, обработке текстов, постановке и оценке ML-задач, а также по публикации и сопровождению открытых датасетов.


7) Список литературы (по ГОСТ)

  1. Bishop C. Pattern Recognition and Machine Learning. Springer, 2006. 738 p.
  2. Воронцов К. В. Машинное обучение. Лекции. М.: МФТИ, 2022. (электронный ресурс).
  3. Pedregosa F. et al. Scikit-learn: Machine Learning in Python // Journal of Machine Learning Research, 2011, 12: 2825–2830.
  4. Документация scikit-learn: Руководство пользователя и API. (электронный ресурс). Режим доступа: https://scikit-learn.org (дата обращения: 16.08.2025).
  5. CatBoost Documentation. (электронный ресурс). Режим доступа: https://catboost.ai (дата обращения: 16.08.2025).
  6. LightGBM Documentation. (электронный ресурс). Режим доступа: https://lightgbm.readthedocs.io (дата обращения: 16.08.2025).
  7. Hugging Face Datasets Documentation. (электронный ресурс). Режим доступа: https://huggingface.co/docs/datasets (дата обращения: 16.08.2025).
  8. HeadHunter API: Официальная документация. (электронный ресурс). Режим доступа: https://api.hh.ru (дата обращения: 16.08.2025).
  9. Хабр Карьера: Портал вакансий. (электронный ресурс). Режим доступа: https://career.habr.com (дата обращения: 16.08.2025).
  10. Маккинли У., Мейер Г. Python и анализ данных. СПб.: Питер, 2024.
  11. Журавлёв Ю. И., Орлов А. И. Прикладные задачи анализа данных. М.: Физматлит, 2019.
  12. PEP 8 — Style Guide for Python Code. (электронный ресурс). Режим доступа: https://peps.python.org/pep-0008/ (дата обращения: 16.08.2025).

Примечания для оформления и публикации

  • В титульном листе замените поля в скобках своими данными.
  • В Dataset Card на Hugging Face укажите: ссылку на источники, дату сбора, период, лицензию, версию релиза, подсчёт записей по сплитам и пример кода:
    python
    from datasets import load_dataset ds = load_dataset("your-nick/it-vacancies-ru", split="train")
  • При необходимости добавьте раздел «Приложения» с скриншотами интерфейсов, графиками распределений зарплат и примерами записей.

Если хотите, я могу преобразовать текст в оформленный DOCX или PDF в вашем стиле (шаблон кафедры, шрифты, поля).

Поделиться этим Q&A