Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
2
Добавлен:
12.04.2025
Размер:
319.13 Кб
Скачать

ГУАП

КАФЕДРА № 41

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

старший преподаватель

Б.К. Акопян

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №7

ВИЗУАЛИЗАЦИЯ ДАННЫХ ИЗ СУБД POSTGRESQL В PYTHON

по курсу: БАЗЫ ДАННЫХ

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

4116

подпись, дата

инициалы, фамилия

Санкт-Петербург 2024

Цель работы:

Произвести связь базы данных в PostgreSQL и Python, изучить операции по манипулированию с данными БД, выполнить анализ данных в БД с помощью визуализации в Python.

Вариант 21 (1)

Ход работы:

Вариант задания представлен на рисунках 1-2.

Рисунок 1- Вариант задания

Рисунок 2 – Дополнительные задания

Рисунок 3- Модель данных

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

Листинг 1. Запрос на подсчет количества сотрудников у каждого менеджера и построение столбчатой диаграммы

cursor.execute("""

SELECT m.last_name || ' ' || m.first_name AS manager_name, COUNT(e.employee_id) AS employee_count

FROM employees e

JOIN employees m ON e.manager_id = m.employee_id

GROUP BY manager_name

ORDER BY employee_count DESC;

""")

data = cursor.fetchall()

df = pd.DataFrame(data, columns=['manager_name', 'employee_count'])

cursor.close()

connection.close()

plt.figure(figsize=(10, 8))

plt.bar(df['manager_name'], df['employee_count'],color='pink')

plt.ylabel('Количество сотрудников')

plt.xlabel('Менеджер')

plt.title('Количество сотрудников у каждого менеджера')

plt.xticks(rotation=45)

plt.tight_layout()

plt.show()

Рисунок 4 – Количество сотрудников у каждого менеджера

У менеджера Steven King больше всех сотрудников.

Написан запрос, вычисляющий среднюю зарплату сотрудника на определенной должности, результат визуализируется в виде столбчатой диаграммы (Рисунок 5).

Листинг 2. Запрос, вычисляющий среднюю зарплату сотрудника на определенной должности и построение столбчатой диаграммы

cursor.execute("""

SELECT j.job_title, AVG(e.salary) AS average_salary

FROM employees e

JOIN jobs j ON e.job_id = j.job_id

GROUP BY j.job_title

ORDER BY AVG(e.salary);

""")

results = cursor.fetchall()

df = pd.DataFrame(results, columns=['Job Title', 'Average Salary'])

cursor.close()

connection.close()

plt.figure(figsize=(10, 8))

plt.bar(df['Job Title'], df['Average Salary'], color='skyblue')

plt.ylabel('Средняя зарплата')

plt.xlabel('Должность')

plt.title('Средняя зарплата по должностям')

plt.xticks(rotation=80)

plt.tight_layout()

plt.show()

Рисунок 5 – Средняя зарплата по должностям

Самая низкая средняя зарплата у должности Purchasing Clerk, самая высокая у должности President.

В первый запрос добавлено условие, выводятся не все менеджеры, а только те, у которых больше трех сотрудников (Рисунок 6). Написана функция, managers, которая принимает на вход ограничение на количество сотрудников и на основе этого ограничения строит график. Для создания горизонтальной столбчатой диаграммы используется barh().

Листинг 3. Запрос на вывод менеджеров, у которых больше трех сотрудников

def managers(k):

connection = psycopg2.connect(

database="students",

user="postgres",

password="12345",

host="127.0.0.1",

port="5432"

)

cursor = connection.cursor()

cursor.execute(f"""

SELECT m.last_name || ' ' || m.first_name AS manager_name, COUNT(e.employee_id) AS employee_count

FROM employees e

JOIN employees m ON e.manager_id = m.employee_id

GROUP BY manager_name

HAVING COUNT(e.employee_id) > {k}

ORDER BY employee_count DESC;

"""

)

data = cursor.fetchall()

df = pd.DataFrame(data, columns=['manager_name', 'employee_count'])

cursor.close()

connection.close()

plt.figure(figsize=(10, 8))

plt.barh(df['manager_name'], df['employee_count'], color='green')

plt.xlabel('Количество сотрудников')

plt.ylabel('Менеджер')

plt.title(f'Количество сотрудников у каждого менеджера (более {k} сотрудников)')

plt.tight_layout()

plt.show()

managers(3)

Рисунок 6 – Менеджеры, у которых больше трех сотрудников

Во второй запрос добавлена возможность задавать диапазон зарплаты для вывода средней зарплаты для должностей. Также написана функции для построения графика для любого заданного числа. (Рисунок 7).

Листинг 4. Запрос на подсчет средней зарплаты по должностям, в диапазоне от 5000 до 15000

cursor.execute(f"""

SELECT j.job_title, AVG(e.salary) AS average_salary

FROM employees e

JOIN jobs j ON e.job_id = j.job_id

WHERE e.salary BETWEEN {min_salary} AND {max_salary}

GROUP BY j.job_title

ORDER BY AVG(e.salary);

""")

results = cursor.fetchall()

df = pd.DataFrame(results, columns=['Job Title', 'Average Salary'])

cursor.close()

connection.close()

plt.figure(figsize=(10, 8))

plt.barh(df['Job Title'], df['Average Salary'], color='indigo')

plt.xlabel('Средняя зарплата')

plt.ylabel('Должность')

plt.title(f'Средняя зарплата по должностям (от {min_salary} до {max_salary})')

plt.tight_layout()

plt.show()

av_salary(5000, 15000)

Рисунок 7 – Средняя зарплата по должностям в диапазоне от 1000 до 15000

Построена круговая диаграмма, которая отображает количество сотрудников по городам (Рисунок 8).

Листинг 5. Запрос на количество сотрудников по городам и построение круговой диаграммы

cursor.execute("""

SELECT l.city, COUNT(e.employee_id) AS number_of_employees

FROM employees e

JOIN locations l ON e.location_id = l.location_id

GROUP BY l.city;

""")

results = cursor.fetchall()

df = pd.DataFrame(results, columns=['City', 'Number of Employees'])

df['City with Employees'] = df['City'] + ' (' + df['Number of Employees'].astype(str) + ')'

cursor.close()

connection.close()

plt.figure(figsize=(10, 8))

plt.pie(df['Number of Employees'], labels=df['City with Employees'], autopct='%1.1f%%')

plt.title('Количество сотрудников по городам')

plt.show()

Рисунок 8 – Количество сотрудников по городам

Больше всего сотрудников в городах: Whitehorse, Southlake, Seattle.

Вывод:

В ходе выполнения лабораторной работы получен новый опыт использования Python и PostgreSQL. С помощью библиотеки matplotlib выполнена визуализация результатов запросов.

Список используемых источников:

1. A.В. Аграновский, В.В. Боженко, Е.Л. Турнецкая. - Учебно-методическое пособие «Разработка и администрирование базы данных с открытым исходным кодом» ‒ СПб.: ГУАП, 2022

3. Документация Python, URL: https://docs.python.org/3/

Соседние файлы в папке БД 3 курс весна