Добавил:
t.me Установите расширение 'SyncShare' для решения тестов в LMS (Moodle): https://syncshare.naloaty.me/ . На всякий лучше отключить блокировщик рекламы с ним. || Как пользоваться ChatGPT в России: https://habr.com/ru/articles/704600/ || Также можно с VPNом заходить в bing.com через Edge браузер и общаться с Microsoft Bing Chat, но в последнее время они форсят Copilot и он мне меньше нравится. || Студент-заочник ГУАП, группа Z9411. Ещё учусь на 5-ом курсе 'Прикладной информатики' (09.03.03). || Если мой материал вам помог - можете написать мне 'Спасибо', мне будет очень приятно :) Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 курс 1 семестр / Лабораторные / Z9411_КафкаРС_БД_ЛР8.docx
Скачиваний:
8
Добавлен:
24.10.2023
Размер:
299 Кб
Скачать
    1. Функция, которая позволит строить графики для любого числа в условии.

Листинг 5 - Функция, которая позволит строить графики для любого числа в условии

import psycopg2

import pandas as pd

import matplotlib.pyplot as plt

def graph_column(column_name):

# Connect to the database

conn = psycopg2.connect(database="students", user="postgres", password="123", host="127.0.0.1", port="5432")

cursor = conn.cursor()

# Run the SQL query

query = "SELECT e.department_id, MIN(e.{}) as min_value, m.last_name as manager_last_name " \

"FROM employees e " \

"JOIN employees m ON e.manager_id = m.employee_id " \

"GROUP BY e.department_id, m.last_name ".format(column_name)

cursor.execute(query)

# Fetch the result and store it in a Pandas dataframe

result = cursor.fetchall()

df = pd.DataFrame(result, columns=["department_id", "min_value", "manager_last_name"])

# Plot the data

plt.bar(df["manager_last_name"], df["min_value"])

plt.xlabel("Manager Last Name")

plt.ylabel("Minimum {}".format(column_name))

plt.title("Minimum {} by Manager".format(column_name))

plt.show()

# Close the cursor and connection

cursor.close()

conn.close()

graph_column('salary')

Эта функция принимает аргумент column_name, который является именем столбца, по которому вы хотите построить график. Затем функция создает SQL-запрос, который извлекает минимальное значение для этого столбца, сгруппированное по отделам и менеджерам. Результат запроса сохраняется в рамке данных Pandas, а затем выводится в виде гистограммы.

Рисунок 6 – Функция, которая позволит строить графики для любого числа в условии

    1. Построить любой график, используя locations

Написал код для вывода средней зарплаты по городу, представлен в листинге 6. Результат представлен на рисунке 7.

Листинг 7 – Вывод средней зарплаты по городу

import psycopg2

import pandas as pd

import matplotlib.pyplot as plt

# Connect to the database

conn = psycopg2.connect(database="students", user="postgres", password="123", host="127.0.0.1", port="5432")

cursor = conn.cursor()

# Run the SQL query

query = "SELECT l.city, AVG(e.salary) as avg_salary " \

"FROM employees e " \

"JOIN locations l ON e.location_id = l.location_id " \

"GROUP BY l.city"

cursor.execute(query)

# Fetch the result and store it in a Pandas dataframe

result = cursor.fetchall()

df = pd.DataFrame(result, columns=["city", "avg_salary"])

# Plot the data

plt.bar(df["city"], df["avg_salary"])

plt.xlabel("Город")

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

plt.title("Средняя зарплата по городу")

plt.show()

# Close the cursor and connection

cursor.close()

conn.close()

Этот код представляет собой сценарий на языке Python, который подключается к базе данных PostgreSQL, выполняет SQL-запрос, извлекает результат запроса, сохраняет результат в рамке данных Pandas, строит результат в виде гистограммы с помощью matplotlib и закрывает курсор и соединение с базой данных.

Выполненный SQL-запрос объединяет таблицу сотрудников и таблицу мест по столбцу location_id, группирует данные по городам и вычисляет среднюю зарплату для каждого города. Полученные данные хранятся во фрейме данных Pandas с колонками "city" и "avg_salary".

Наконец, сценарий строит график данных с помощью matplotlib, создавая гистограмму с названиями городов по оси x и средней зарплатой по оси y. Ось x обозначена как "Город", а ось y - как "Средняя зарплата". Заголовок диаграммы - "Средняя зарплата по городу".

Рисунок 7 – Вывод средней зарплаты по городу

Соседние файлы в папке Лабораторные