
6сем / lab1_database
.pdfГУАП
КАФЕДРА № 41
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
доц., канд. техн. наук |
|
|
|
Е.Л.Турнецкая |
|
|
|
|
|
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №1
Связь СУБД MySQL и Python. Визуализация данных в Python.
по курсу: БАЗЫ ДАННЫХ
РАБОТУ ВЫПОЛНИЛ |
|
|
|
|
|
|
СТУДЕНТ ГР. № |
4016 |
|
|
|
М.О. Жовтяк |
|
|
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2023
1.Цель работы
Произвести связь базы данных в MySQL и Python, извлечь данные из таблиц базы данных и выполнить анализ данных в БД с помощью визуализации в Python.
2.Вариант работы
Вариант 14.
Библиотека в Хоббитонии есть библиотека «Башня Саурумана». Вы являетесь ее руководителем. Библиотека зарабатывает деньги, выдавая напрокат некоторые книги, имеющиеся в небольшом количестве экземпляров. Одной из задач разрабатываемой ИС является отслеживание финансовых показателей работы библиотеки. У каждой книги, выдаваемой в прокат, есть название, автор, жанр. В зависимости от ценности книги Вы определили для каждой из них залоговую стоимость (сумма, вносимая клиентом при взятии книги напрокат) и стоимость проката (сумма, которую клиент платит при возврате книги, получая назад залог). В библиотеку обращаются читатели. Все читатели регистрируются в картотеке, указывая свои персональные данные. Каждый читатель может обращаться в библиотеку несколько раз. Все обращения читателей фиксируются, при этом по каждому факту выдачи книги запоминаются дата выдачи и ожидаемая дата возврата. Стоимость проката книги должна зависеть не только от самой книги, но и от срока ее проката. Кроме того, необходимо добавить систему штрафов за вред, нанесенный книге и систему скидок для некоторых категорий читателей. Произведения авторов, составляющие библиотечный фонд, также можно разделить на различные категории, характеризующиеся собственным набором атрибутов: учебники, повести, романы, статьи, стихи,
диссертации, рефераты, тезисы докладов и т.д. Сотрудники библиотеки,
работающие в различных залах различных библиотек, ведут учет читателей,
а также учет размещения и выдачи литературы.

На рисунке 1 представлена схема данных БД согласно индивидуальному варианту.
Рисунок 1 – Схема данных БД
3.Ход работы
Создается запрос с построением графика о выручке от каждой книги.
Запрос выглядит так:
SELECT books.title_book as 'Название книги', appeals.total as 'Выручка'
FROM appeals, books
WHERE appeals.id_book = books.id_book
GROUP BY title_book;
Построенный график представлен на рисунке 2.
Рисунок 2 – График с выручкой каждой книги
3

По графику можно сделать вывод, что «Война и мир» принесла больше всего денег.
Создается запрос с построением графика о количестве выручке за определенную дату. Запрос выглядит так:
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

Рисунок 4 – Диаграмма выручки по клиентам По графику можно сказать, что Иванова Лада Глебовна не жалеет денег
на чтение.
4.Вывод
В ходе лабораторной работы я произвел связь базы данных в MySQL и Python, извлѐк данные из таблиц базы данных и выполнил анализ данных в БД с помощью визуализации в Python, создав 3 запроса к соединенной базе данных.
5

Приложение А
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()
6

# Запрос 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()
7