Задание для студента-аналитика данных (Python + SQL)
Цель: Проанализировать данные из базы test_db, сделать выводы о структуре компании, зарплатах, сотрудниках и динамике изменений.
1. Подключение к базе данных
Установите соединение с MySQL-сервером через Python (используйте
mysql.connectorилиsqlalchemy).Выведите список таблиц в базе
test_dbи количество записей в каждой.
2. Исследование структуры данных
Изучите связи между таблицами (например,
employees,salaries,departments,dept_emp).Напишите SQL-запросы для вывода:
10 сотрудников с самой высокой текущей зарплатой.
Отделы с наибольшим количеством сотрудников.
3. Анализ зарплат
Рассчитайте:
Среднюю, минимальную и максимальную зарплату по компании.
Среднюю зарплату по каждому отделу (актуальную на текущий момент).
Динамику изменения средней зарплаты по годам (используйте данные из
salaries).
Визуализируйте результаты с помощью
matplotlib/seaborn(например, линейный график для динамики зарплат).
4. Анализ сотрудников
Определите:
Количество сотрудников, работающих в компании на текущий момент.
Процентное соотношение мужчин и женщин.
Текучесть кадров: сколько сотрудников уволилось за последний год (если данные позволяют).
Постройте гистограмму распределения стажа сотрудников (на основе
hire_date).
5. Дополнительные задачи
Рекомендации для HR:
Есть ли связь между стажем и зарплатой? Постройте scatter plot.
В каком отделе самая высокая текучесть кадров?
Оптимизация:
Сравните скорость выполнения SQL-запроса через Python и напрямую в MySQL. Сделайте выводы.
6. Итоговый отчет
Оформите решение в Jupyter Notebook:
Код с комментариями.
Визуализации.
Выводы по каждому пункту.
Укажите, какие гипотезы можно проверить на этих данных дополнительно.
Советы:
Используйте
pandasдля работы с результатами SQL-запросов.Проверьте данные на пропуски и аномалии (например, отрицательные зарплаты).
Для работы с датами преобразуйте столбцы в тип
datetime.
Пример SQL-запроса для вдохновения:
SELECT d.dept_name, AVG(s.salary) as avg_salary
FROM salaries s
JOIN dept_emp de ON s.emp_no = de.emp_no
JOIN departments d ON de.dept_no = d.dept_no
WHERE s.to_date > NOW()
GROUP BY d.dept_name;
Удачи! 🚀