Анализ и оптимизация школьного расписания уроков с помощью языка программирования Python

XVII Международный конкурс научно-исследовательских и творческих работ учащихся
Старт в науке

Анализ и оптимизация школьного расписания уроков с помощью языка программирования Python

Лищенко А.В. 1
1МАОУ Гимназия №9 г. Королев Московская область
Кексина А.В. 1
1МАОУ Гимназия №9 г. Королев Московская область
Автор работы награжден дипломом победителя III степени
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Введение

Аналитическая деятельность неразрывно связана с процессом интеллектуального взросления человечества. Сегодня, когда информацию называют второй нефтью, сложно представить успешное предприятие без анализа текущих и будущих потребностей, определения наиболее выгодных направлений развития и оценки эффективности.

Один из важнейших организационных документов в школе – школьное расписание уроков. Анализ рациональности варианта расписания занятий способствует эффективной организации учебного процесса.

Гипотеза: школьное расписание уроков можно проанализировать и оптимизировать с помощью языка программирования Python.

Объект исследования: язык программировния Python.

Предмет исследования: программа, позволяющая составить оптимальное расписание уроков.

Цель проекта: проанализировать школьное расписание уроков, составить оптимальное расписание с помощью языка программирования Python.

Задачи:

Разработать алгоритм программы.

Спроектировать основные элементы программы.

На основании полученной программы составить оптимальное расписание уроков.

Методы исследования: работа с литературными и интернет-ресурсами, анализ, сравнение, программирование.

Теоретическая часть

Анализ данных – процесс проверки, очистки, преобразования и моделирования данных с целью обнаружения полезной информации, обоснования выводов и поддержки принятия решений.

Существуют различные инструменты, используемые для анализа данных: Python, Microsoft Excel, SaS и другие, но в своей работе я рассмотрю, как анализ данных выполняется в Python. Более конкретно, как это делается с библиотекой Python под названием Pandas.

Python появился еще в 1990 году, но начал приобретать популярность не так давно. В 2020 Python стал четвертым в списке самых используемых языков программирования после JavaScript, HTML/CSS и SQL — его используют 44,1% разработчиков.

Python — это широко применяемый язык программирования, который можно встретить в разных сферах, например:

в веб-разработке;

при разработке API;

при работе с искусственным интеллектом, нейросетями и машинным обучением;

в интернете вещей;

и др.

Поиск, обработка, моделирование (вместе с визуализацией) — 3 самых популярных сценария использования языка для анализа данных. И Python отлично работает на всех этих этапах анализа. В первую очередь в этом помогают различные библиотеки.

Библиотека в программировании — сборник подпрограмм или объектов, используемых для разработки программного обеспечения, это файлы с шаблонами кода. Их создали для того, чтобы люди не набирали каждый раз заново один и тот же код: достаточно открыть файл, вставить свои данные и получить результат.

Для анализа информации в Python применяются библиотеки NumPy и Pandas. При помощи этих библиотек очень сильно упрощается любая математическая обработка данных. Эти библиотеки качественно структурируют полученную информацию и дают очень гибкие инструменты воздействия на эту самую информацию.

Pandas — главная Python-библиотека для анализа данных. Она быстрая и мощная: в ней можно работать с таблицами, в которых миллионы строк.

В Pandas можно работать с данными трех структур:

последовательности (Series) — одномерные массивы данных;

фреймы (Data Frames) — объединение нескольких одномерных массивов в двумерный, то есть привычная таблица из строк и столбцов. Этот формат я буду использовать в своей работе;

панели (Panels) — трехмерная структура из нескольких фреймов.

Библиотека пригодится всем, кто работает с данными, особенно аналитикам. С помощью Pandas можно группировать таблицы, очищать и изменять данные, вычислять параметры и делать выборки.

У библиотеки открытый исходный код, она бесплатная, но недоступна в Python по умолчанию. Чтобы начать с ней работать, нужно ее импортировать с помощью этого кода:

importpandasaspd

В своей работе я буду использовать ряд ключевых слов.

Ключевые слова Python - это специальные зарезервированные слова, которые передают компилятору особый смысл. Каждое ключевое слово имеет особое значение и специфическую операцию.

import – используется для импорта модулей в текущий сценарий.

аs - используется для создания псевдонима имени. Он обеспечивает заданное пользователем имя при импорте модуля.

from – используется для импорта определенной функции.

for - используется для перебора последовательности элементов.

in – оператор, который проверяет, является ли значение частью какой-либо последовательности.

True – истина.

False – ложное значение.

if - вычисляет и оценивает выражения одно за другим, пока одно из них не окажется истинным, затем выполняется соответствующий блок кода.

and – логический оператор для проверки нескольких условий, означает «и то, и другое».

or – логический оператор, который возвращает истину, если одно из условий истинно.

continue - возвращает управление в начало цикла.

break - используется для завершения выполнения цикла и передачи управления в конец цикла.

except, try - используются для обработки исключений.

сolumns – список меток для полей.

index - возвращает положение первого совпавшего элемента.

return - если функция должна обработать какие-то данные и потом вернуть их, то для возвращения этих данных необходим этот оператор.

with - используется при обработке исключений, делает код чище и читабельнее.

def - это инструкция языка программирования Python, позволяющая создавать функцию.

Функция — это блок кода, который можно многократно вызывать на выполнение. Она является фундаментальной частью любого языка программирования.

Функция позволяет разделять программу на самостоятельные, но связанные части. Программисты используют функции, чтобы сделать программу модульной и избежать повторения кода.

Функция может использоваться для обработки данных, она получает на вход значения, обрабатывает его и возвращает результат в программу. Также она может не возвращать значение, а выводить его на экран или записывать в файл.

Программист может написать собственную функцию или использовать готовые решения языка, если они есть, конечно. Например, лучше самому не писать функцию для определения максимального числа, а воспользоваться стандартной max().

Создание функций происходит с помощью ключевого слова def, за ним идёт имя функции и круглые скобки (). Аргументы, передаваемые в функцию, должны находится в круглых скобках. Там же можно определить их значения по умолчанию, указав их после знака равно. Тело функции начинается после знака двоеточия.

В своей работе я создал четыре таких функции.

Практическая часть

Рассмотрим, как работает Python и библиотека Pandas на примере анализа и оптимизации школьного расписания уроков.

В качестве критерия возьмем сложность того или иного предмета и условие, что можно включить в расписание дня либо наиболее трудные предметы, либо в большем количестве средние и лёгкие, при этом нагрузка должна быть равномерно распределена на всю учебную пятидневную неделю.

В данную таблицу (рис. 1) я внес информацию обо всех предметах в 7 «о» классе, в котором я обучаюсь, и проставил количество уроков в неделю. Сложность каждого предмета буду определять на основании собственного мнения, данные значения не постоянны, могут меняться, и, в зависимости от этого, изменять расписание.

Рис. 1

Согласно таблице, суммарная сложность уроков за неделю составляет 110 единиц. Таким образом, при пятидневной учебной неделе средняя сложность одного дня равна 22 единицы. В своей работе я буду стремится именно к этому значению.

Как я уже говорил, при помощи функции def мною созданы четыре пользовательские функции:

Fill_table – посредством библиотеки Pandas данная функция обращается к таблице Excel, читает ее и предлагает нам заполнить таблицу, а именно внести данные о сложности каждого предмета, совершает проверку на наличие ошибок во входных данных, например, при использовании интервала сложности от 1 до 5 ошибочно можно ввести коэффициент сложности 6, и сохраняет полученные данные (рис. 2, рис. 3, рис. 4).

Для удобства пользователя при обнаружении ошибок программа не останавливается, а указывает на ошибку и просит ввести данные заново.

Рис. 2

Рис. 3

Рис. 4

Return_data_list – данная функция сортирует предметы по сложности от большего к меньшему для дальнейшего анализа (рис. 5).

Рис. 5

Average_difficulty – основная функция, позволяющая нам составить расписание. Ее работа состоит из нескольких циклов. Сначала функция перебирает построчно всю таблицу и определяет первый день, в котором суммарная сложность уроков минимальная. Так как таблица пока пустая, то этим днем будет понедельник. Далее функция ищет в исходном списке предмет с наибольшей сложностью и ставит его первым уроком в понедельник, одновременно с этим уменьшая число часов неделю на один в столбце B исходной таблицы (рис. 1). В нашем случае первым уроком в понедельник становится «Алгебра/геометрия», количество часов в неделю уменьшается с одного до нуля. Цикл запускается заново. Следующий день недели с наименьшей сложностью – вторник, предмет с наибольшей сложностью - «Геометрия», которая и станет первым уроком в этот день, при этом количество часов геометрии в неделю уменьшается с двух до одного. Таким образом программа анализирует и распределяет все предметы со сложностью «5», пока не закончатся их часы в неделю. В следующем цикле день с наименьшей сложностью – пятница, предмет с наибольшей сложностью – «Физика», которая станет вторым уроком. На данном этапе сложность понедельника, вторника, среды и четверга равна 10, сложность пятницы равна 9 (схематично на рис. 6), поэтому в расписание пятницы программа вставляет еще одну физику, как урок с наибольшей сложностью, уменьшая количество часов в неделю до нуля. Циклы продолжаются до тех пор, пока количество часов в неделю каждого предмета не будет сведено к нулю (рис. 7).

Рис. 6

Рис. 7

Processing_data_for_writing_to_table – служит для вывода готового расписания в Excel. Данная функция перебирается все дни, ищет день с максимальным количеством уроков, а в остальные дни добавляет ячейки, которым присваивает некое «пустое» значение. Далее к двумерному списку с готовым расписанием добавляются два столбца с номером и временем урока и «шапка» будущей таблицы. Полученный итоговый список с указанием номеров уроков, временем уроков, дней недели и самих предметов преобразуется в таблицу и выводится в файл Excel (рис. 8, рис. 9).

Рис. 8

Рис. 9

Следующая часть программы в определенном порядке вызывает вышеперечисленные функции для получения итогового результата (рис.10).

Рис. 10

Итоговое расписание уроков выглядит следующим образом:

Рис. 11

Как мы видим, учебная нагрузка распределена равномерно, сложность каждого дня равна 22 единицам, к чему я и стремился. Задача по составлению оптимального расписания уроков, в случае, когда в качестве критерия выступает сложность предмета, мною полностью выполнена.

Заключение

Выполнив работу по написанию данной программы, я сделал следующие выводы:

Для анализа и составления оптимального школьного расписания возможно применение языка программирования Python, так как он имеет ряд преимуществ: язык довольно легкий в изучении, гибкий, обладает большой системой с различными инструментами и библиотеками, постоянно обновляется и совершенствуется, имеет большое сообщество, где можно найти решение возникшей проблемы.

Сама задача нахождения оптимального расписания актуальна в любом учебном заведении, так как рационально составленное расписание занятий способствует эффективности учебно-воспитательного процесса, снижению и ликвидации перегрузок учащихся, повышению работоспособности обучающихся и преподавателей, оптимальному использованию кабинетов, мастерских и других учебных помещений школы.

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

Анализ данных с использованием Python (электронный ресурс) https://habr.com/ru/post/353050/

Анализ данных с помощью Python для чайника и начинающего программиста (электронный ресурс) https://codernet.ru/articles/drugoe/analiz_dannyix_s_pomoshhyu_python_dlya_chajnika_i_nachinayushhego_programmista/

Введение в анализ данных на Python для начинающих (электронный ресурс) https://itgap.ru/post/vvedenie-v-analiz-dannykh-na-python

Все о Python (электронный ресурс) https://all-python.ru/osnovy/yazyk-programmirovaniya.html?ysclid=l9cjlq6rv2695434106

Как анализировать данные в Pandas: первые шаги (электронный ресурс)

https://blog.skillfactory.ru/kak-nachat-analizirovat-dannye-v-pandas-pervye-shagi/

Как и зачем использовать Python для анализа данных

(электронный ресурс) https://pythonru.com/baza-znanij/python-dlya-analiza-dannyh

Программирование на Python (электронный ресурс)
https://pythonim.ru/

Расписание уроков как фактор эффективной организации образовательного процесса (электронный ресурс) https://nsportal.ru/shkola/administrirovanie-shkoly/library/2015/03/19/raspisanie-urokov-kak-faktor-effektivnoy?ysclid=l93uku33pt548830666

Самоучитель Python (электронный ресурс) https://forproger.ru/tutorial/samouchitel-python10

Просмотров работы: 406