Загрузка данных
import sys
import os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
from backend.app import app
from backend.db import db
from backend.models import Candidate, Resume, Vacancy
def create_candidate(vk_user_id, full_name, email, phone):
candidate = Candidate(
vk_user_id=vk_user_id,
full_name=full_name,
email=email,
phone=phone,
)
db.session.add(candidate)
db.session.flush()
return candidate
def create_resume(candidate, vacancy, file_name, raw_text, parsed_json):
resume = Resume(
candidate_id=candidate.id,
vacancy_id=vacancy.id,
file_name=file_name,
raw_text=raw_text.strip(),
parsed_json=parsed_json,
)
db.session.add(resume)
db.session.flush()
return resume
with app.app_context():
vacancy = Vacancy(
title="Data Scientist (Middle)",
department="AI & Data Science",
description="""
Разработка ML-моделей;
Подготовка и обработка данных;
Построение предиктивной аналитики;
Обучение и тестирование моделей;
Работа с Python и ML-библиотеками;
Участие в продуктовой аналитике;
Оптимизация качества моделей.
""".strip(),
requirements="""
Опыт работы Data Scientist от 2 лет;
Уверенное знание Python;
Опыт работы с Pandas, NumPy, Scikit-learn;
Понимание ML-алгоритмов;
Навыки анализа данных;
Опыт работы с SQL;
Опыт работы с нейронными сетями будет преимуществом.
""".strip(),
skills=[
"Python",
"Machine Learning",
"Pandas",
"NumPy",
"Scikit-learn",
"SQL",
"Deep Learning",
"TensorFlow",
"PyTorch",
"Data Analysis"
],
is_active=True,
)
db.session.add(vacancy)
db.session.flush()
resumes_data = [
{
"vk_user_id": "500001",
"full_name": "Крылов Максим Сергеевич",
"level": "Middle",
"match_level": "high",
"experience_years": 3,
"skills": [
"Python",
"Pandas",
"Scikit-learn",
"SQL",
"Machine Learning"
],
"raw_text": """
Крылов Максим Сергеевич
Data Scientist
Опыт работы: 3 года.
Разрабатывал ML-модели для прогнозирования пользовательского поведения и анализа данных.
Навыки: Python, Pandas, Scikit-learn, SQL, Machine Learning.
"""
},
{
"vk_user_id": "500002",
"full_name": "Морозова Анна Дмитриевна",
"level": "Junior",
"match_level": "medium",
"experience_years": 1,
"skills": [
"Python",
"NumPy",
"Pandas"
],
"raw_text": """
Морозова Анна Дмитриевна
Junior Data Scientist
Опыт работы: 1 год.
Участвовала в анализе данных и обучении моделей классификации.
Навыки: Python, NumPy, Pandas.
"""
},
{
"vk_user_id": "500003",
"full_name": "Соловьев Илья Викторович",
"level": "Senior",
"match_level": "high",
"experience_years": 7,
"skills": [
"Python",
"TensorFlow",
"PyTorch",
"Deep Learning",
"SQL"
],
"raw_text": """
Соловьев Илья Викторович
Senior Data Scientist
Опыт работы: 7 лет.
Разрабатывал deep learning модели и рекомендательные системы для e-commerce платформ.
Навыки: Python, TensorFlow, PyTorch, Deep Learning, SQL.
"""
},
{
"vk_user_id": "500004",
"full_name": "Елисеева Полина Андреевна",
"level": "Middle",
"match_level": "high",
"experience_years": 4,
"skills": [
"Python",
"Scikit-learn",
"Pandas",
"Machine Learning"
],
"raw_text": """
Елисеева Полина Андреевна
ML Engineer
Опыт работы: 4 года.
Работала над задачами прогнозирования спроса и сегментации клиентов.
Навыки: Python, Scikit-learn, Pandas, Machine Learning.
"""
},
{
"vk_user_id": "500005",
"full_name": "Тарасов Никита Олегович",
"level": "Low",
"match_level": "low",
"experience_years": 2,
"skills": [
"Java",
"Spring",
"REST API"
],
"raw_text": """
Тарасов Никита Олегович
Java Developer
Опыт работы: 2 года.
Разрабатывал backend-сервисы на Java и Spring.
Навыки: Java, Spring, REST API.
"""
},
{
"vk_user_id": "500006",
"full_name": "Киселева Дарья Игоревна",
"level": "Middle",
"match_level": "high",
"experience_years": 3,
"skills": [
"Python",
"SQL",
"Pandas",
"NumPy"
],
"raw_text": """
Киселева Дарья Игоревна
Data Scientist
Опыт работы: 3 года.
Занималась обработкой данных и разработкой ML-моделей для финансового сектора.
Навыки: Python, SQL, Pandas, NumPy.
"""
},
{
"vk_user_id": "500007",
"full_name": "Беляев Артем Константинович",
"level": "Trainee",
"match_level": "medium",
"experience_years": 0.5,
"skills": [
"Python",
"Pandas",
"Jupyter"
],
"raw_text": """
Беляев Артем Константинович
Стажер Data Science
Опыт работы: 6 месяцев.
Проходил стажировку по анализу данных и построению ML-моделей.
Навыки: Python, Pandas, Jupyter.
"""
},
{
"vk_user_id": "500008",
"full_name": "Леонтьев Роман Евгеньевич",
"level": "Middle",
"match_level": "high",
"experience_years": 5,
"skills": [
"Python",
"Machine Learning",
"SQL",
"TensorFlow"
],
"raw_text": """
Леонтьев Роман Евгеньевич
Machine Learning Engineer
Опыт работы: 5 лет.
Разрабатывал ML-сервисы и модели прогнозирования для fintech-продуктов.
Навыки: Python, Machine Learning, SQL, TensorFlow.
"""
},
{
"vk_user_id": "500009",
"full_name": "Жукова Ольга Максимовна",
"level": "Low",
"match_level": "low",
"experience_years": 1,
"skills": [
"Excel",
"Accounting",
"1C"
],
"raw_text": """
Жукова Ольга Максимовна
Бухгалтер
Опыт работы: 1 год.
Работала с финансовой отчетностью и 1С.
Навыки: Excel, Accounting, 1C.
"""
},
{
"vk_user_id": "500010",
"full_name": "Фролов Денис Алексеевич",
"level": "Middle",
"match_level": "high",
"experience_years": 4,
"skills": [
"Python",
"PyTorch",
"Deep Learning",
"Pandas"
],
"raw_text": """
Фролов Денис Алексеевич
Data Scientist
Опыт работы: 4 года.
Разрабатывал нейронные сети и NLP-модели для обработки текстовых данных.
Навыки: Python, PyTorch, Deep Learning, Pandas.
"""
},
]
for item in resumes_data:
candidate = create_candidate(
vk_user_id=item["vk_user_id"],
full_name=item["full_name"],
email=f'{item["vk_user_id"]}@example.com',
phone="+375290000000",
)
create_resume(
candidate=candidate,
vacancy=vacancy,
file_name=f'{item["vk_user_id"]}_resume.txt',
raw_text=item["raw_text"],
parsed_json={
"full_name": item["full_name"],
"target_vacancy_id": vacancy.id,
"target_vacancy": vacancy.title,
"level": item["level"],
"match_level": item["match_level"],
"experience_years": item["experience_years"],
"skills": item["skills"],
}
)
db.session.commit()
print("✅ Data Scientist dataset added")
print("Vacancies:", Vacancy.query.count())
print("Candidates:", Candidate.query.count())
print("Resumes:", Resume.query.count())
print("New Vacancy ID:", vacancy.id)
print("Resume IDs:", [r.id for r in vacancy.resumes])