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

6сем / lab1_database

.docx
Скачиваний:
3
Добавлен:
27.08.2024
Размер:
208.06 Кб
Скачать

ГУАП

КАФЕДРА № 41

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

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

доц., канд. техн. наук

Е.Л.Турнецкая

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

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

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

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

Связь СУБД MySQL и Python. Визуализация данных в Python.

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

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

СТУДЕНТ ГР. №

4016

М.О. Жовтяк

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

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

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

  1. Цель работы

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

  1. Вариант работы

Вариант 14.

Библиотека в Хоббитонии есть библиотека «Башня Саурумана». Вы являетесь ее руководителем. Библиотека зарабатывает деньги, выдавая напрокат некоторые книги, имеющиеся в небольшом количестве экземпляров. Одной из задач разрабатываемой ИС является отслеживание финансовых показателей работы библиотеки. У каждой книги, выдаваемой в прокат, есть название, автор, жанр. В зависимости от ценности книги Вы определили для каждой из них залоговую стоимость (сумма, вносимая клиентом при взятии книги напрокат) и стоимость проката (сумма, которую клиент платит при возврате книги, получая назад залог). В библиотеку обращаются читатели. Все читатели регистрируются в картотеке, указывая свои персональные данные. Каждый читатель может обращаться в библиотеку несколько раз. Все обращения читателей фиксируются, при этом по каждому факту выдачи книги запоминаются дата выдачи и ожидаемая дата возврата. Стоимость проката книги должна зависеть не только от самой книги, но и от срока ее проката. Кроме того, необходимо добавить систему штрафов за вред, нанесенный книге и систему скидок для некоторых категорий читателей. Произведения авторов, составляющие библиотечный фонд, также можно разделить на различные категории, характеризующиеся собственным набором атрибутов: учебники, повести, романы, статьи, стихи, диссертации, рефераты, тезисы докладов и т.д. Сотрудники библиотеки, работающие в различных залах различных библиотек, ведут учет читателей, а также учет размещения и выдачи литературы.

На рисунке 1 представлена схема данных БД согласно индивидуальному варианту.

Рисунок 1 – Схема данных БД

  1. Ход работы

Создается запрос с построением графика о выручке от каждой книги. Запрос выглядит так:

SELECT books.title_book as 'Название книги',

appeals.total as 'Выручка'

FROM appeals, books

WHERE appeals.id_book = books.id_book

GROUP BY title_book;

Построенный график представлен на рисунке 2.

Рисунок 2 – График с выручкой каждой книги

По графику можно сделать вывод, что «Война и мир» принесла больше всего денег.

Создается запрос с построением графика о количестве выручке за определенную дату. Запрос выглядит так:

SELECT issue_date as 'Дата',

total as 'Выручка'

FROM appeals

GROUP BY issue_date;

Построенный график представлен на рисунке 3.

Рисунок 3 – График выручки по датам

По графику можно сказать, что максимальная выручка была 18 октября, а минимальная – 17-ого.

Создается запрос с построением графика о выручке по читателям в процентах. Запрос выглядит так:

SELECT books.title_book as 'Название книги',

appeals.total as 'Выручка'

FROM appeals, books

WHERE appeals.id_book = books.id_book

GROUP BY title_book;

Построенный график представлен на рисунке 4.

Рисунок 4 – Диаграмма выручки по клиентам

По графику можно сказать, что Иванова Лада Глебовна не жалеет денег на чтение.

  1. Вывод

В ходе лабораторной работы я произвел связь базы данных в MySQL и Python, извлёк данные из таблиц базы данных и выполнил анализ данных в БД с помощью визуализации в Python, создав 3 запроса к соединенной базе данных.

Приложение А

import pandas as pd

import pymysql.cursors

import matplotlib.pyplot as plt

def db_return(connection, sql):

with connection.cursor() as cursor:

cursor.execute(sql)

rows = cursor.fetchall()

df = pd.DataFrame(rows)

connection.close()

return df

connection = pymysql.connect(host='127.0.0.1',

user='root',

password='hellokitty',

db='my_library',

charset='utf8mb4',

cursorclass=pymysql.cursors.DictCursor)

# Запрос 1

sql1 = "SELECT books.title_book as 'Название книги',\

appeals.total as 'Выручка' \

FROM appeals, books \

WHERE appeals.id_book = books.id_book \

GROUP BY title_book;"

df = db_return(connection, sql1)

plt.figure()

plt.tick_params(axis='x', rotation=90)

plt.bar(df['Название книги'], df['Выручка'])

plt.xlabel('Название книг')

plt.ylabel('Выручка в рублях')

plt.title('Выручка каждой книги')

plt.show()

connection.ping()

# Запрос 2

sql2 = "SELECT issue_date as 'Дата', \

total as 'Выручка' \

FROM appeals \

GROUP BY issue_date;"

plt.figure()

plt.tick_params(axis='x', rotation=45)

df = db_return(connection, sql2)

plt.bar(df['Дата'], df['Выручка'])

plt.xlabel('Даты')

plt.ylabel('Выручка в рублях')

plt.title('Выручка по датам')

plt.show()

connection.ping()

# Запрос 3

sql3 = "SELECT readers.reader_FIO as 'Имя человека', \

appeals.total as 'Выручка' \

FROM appeals, readers \

WHERE readers.id_reader = appeals.id_reader \

GROUP BY readers.reader_FIO;"

df = db_return(connection, sql3)

plt.figure()

plt.pie(df['Выручка'], labels=df['Имя человека'], autopct='%1.2f%%')

plt.title('Выручка по клиентам в %')

plt.show()

Соседние файлы в папке 6сем