Введение
С появлением в образовательной системе электронного журнала и школьного портала ученикам и их родителям стало намного удобнее мониторить школьную успеваемость. Используя школьный портал, мы можем получить сведения о многих параметрах успеваемости, но не весь спектр, который мог бы быть. Некоторые функции либо отсутствуют, либо доступны только по платной подписке. В связи с этим у меня возникло идея разработать проект, дополняющий функционал школьного портала.
Данная работа представляет из себя программу-аналитик на языке Python 3.8, с помощью которой производятся обработка и визуализация данных об успеваемости ученика.
Объект исследования проекта:
Метод использования алгоритмов Data science и нестандартного подхода для прогнозирования результатов.
Предмет исследования проекта:
Использование возможностей языка и дополнительных библиотек при создании данного метода.
Цели проекта:
1. Реализация возможностей языка Python, а также методов Data science для обработки и визуализация данных об успеваемости ученика.
2. Обеспечение возможности практического применения данной программы учениками и их родителями, с использованием данных из школьного портала.
Задачи проекта:
1. Разработка алгоритмов для реализации анализа, обработки и прогнозирования успеваемости ученика.
2. Создание программы – аналитик на языке Python для обработки и визуализаций больших объёмов данных.
3. Усовершенствование навыков программирования и более глубокое изучение возможностей языка программирования Python с использованием дополнительных библиотек.
Метод, применяемый при создании данного проекта
Последовательная реализация функций, начиная с простой визуализаций данных и заканчивая сравнением и прогнозом успеваемости. Тестирование программы- аналитик учениками среднего и старшего звена.
II. Основная часть
До появления в нашей жизни информационных технологий, все данные об успеваемости ученика записывались в бумажном журнале. Для проведения какого-либо анализа необходимо было производить объёмные и непростые математические вычисления. С созданием приложений для образовательной системы этот процесс в корни изменился. Приложение « школьный портал» анализирует и обрабатывает данные учеников и выдает готовые результаты.
В данной работе разработана программа, которая расширяет функционал школьного портала и ее применение не имеет ограничения для пользователей. В неё входят такие функции как: динамика, статистика, прогноз успеваемости и сравнение успеваемости по двум различных предметов.
Рассмотрим последовательность работы функций, содержащихся в нашей программе –аналитик.
При выборе функций «динамика» программа в автоматическом режиме использует данные из загруженного в её системе пользователем файла и на основе этих данных выводит график изменения среднего балла на протяжения определённого периода.
Функция «прогноз» неординарна в своем исполнение. Программа запрашивает у ученика желаемый результат по определённому предмету. Также в автоматическом режиме обрабатывает полученные данные и выводит минимальное количество оценок необходимое для достижения целей. Неординарный метод работы данной функций заключается в приведения значения всех оценок к одному одинаковому значению.
Возьмём простой пример:
У ученика всего две оценки 5 и 3. Ученик хочет 5, значит ему необходимо получить ещё n оценок 5, чтобы средний балл стал 4.5. Посчитав всё мы выяснили, что чтобы «перекрыть» одну 3 нужно получить три 5. Аналогично с оценкой 2, одна 2 = пять 5. Следовательно мы к количеству четвёрок прибавляем 3*количество 3 + 5*количество 2. Чтобы в результате было количество пятёрок, которые нужно получить, необходимо из количества четвёрок вычесть количество пятёрок. Распишем данный пример по выше указанной формуле:
Оценка | Количество
5 1
4 0
3 1
2 0
Количество четвёрок = 0+3*1+5*0 = 3
Результат: 3-1 = 2
Необходимо ещё две пятёрки.
Работа программы (Оценки ученика: 5,4,3,2)
Выберите режим.
Прогноз
Введите предмет.
test
Какую оценку Вы хотите?
5
----------------------------------------
Вам нужно минимум: 8 5.
Похожем образом работают и функции «статистика» и «сравнение».
«Статистика» выводит такие показатели как max средний бал за определенный период, min средний бал за определенный период, текущий средний бал, количество оценок определённого значения, пропуски и опоздания.
Выберите режим.
Статистика
Введите предмет.
Алгебра
----------------------------------------
Статистика:
Максимальный средний балл: 5.0
Минимальный средний балл: 4.8
Текущий средний балл: 4.88
Количество 5: 7
Количество 4: 1
Количество 3: 0
Количество 2: 0
Количество пропусков: 2
Количество опоздание: 0
Функция «сравнение», поможет узнать по какому из двух предметов у ученика средний бал выше и выведет в виде графика динамику этих предметов.
Выберите режим.
Сравнение
Введите первый предмет.
Английский язык
Введите второй предмет.
Алгебра
----------------------------------------
Английский язык |
Алгебра |
|
Максимальный |
4.69 |
5.00 |
Минимальный |
3.50 |
4.80 |
Текущий |
4.69 |
4.88 |
По предмету: Алгебра,у Вас средний балл выше, чем по предмету: Английский язык.
III. Работа программы
При запуске программы открывается интерфейс программы в виде всплывающего окна-меню, где предлагается выбрать один из режимов работы программы.
В соответствии с выбранным режимом, программа просит ввести название одного или нескольких предметов и выдаёт результаты анализа и обработки данных пользователю.
Но для реализации такого интерфейса необходимо более мощное программное обеспечение (Windows 64-bit). Для устройств, которые не поддерживают такое программное обеспечение, была разработана “lite” версия.
IV. Заключение
В ходе работы над проектом были достигнуты поставленные цели и задачи по предоставлению пользователям школьного портала расширенного функционала без каких-либо ограничений. Используя данный продукт. пользователи имеют возможность получить необходимых результаты успеваемости используя личные данные.
Для решения задачи наглядности и удобства использовался язык программирования Python с дополнительными библиотеками и
методы Data science . Программное обеспечение представляет собой законченный продукт и может применяться в реальной жизни.
Актуальность программы- аналитик поддерживается спросом со стороны учителей, обучающихся и их родителей в ходе отслеживания результатов об успеваемости учеников.
Данный проект полезен еще и для тех учеников, кто желает углубить свои познания и получить навыки программирования на языке Python при создании программ для уроков информатики.
В качестве возможных путей дальнейшего развития разработанного программного продукта можно указать:
-усовершенствование архитектуры и возможность его использования не только для школьного портала
-увеличение количества функций
-разработка мобильной версий данной программы и ее дальнейшая оптимизация.
Список литературы:
1) Белова Г.В. Программирование в среде Python. Первые шаги. /Г.В.Белова -М.:Солон -Пресс- Москва, 2007. - 125 с.
2) Дронов В.Г Python 3 и PyQt 5. Разработка приложений/В.Г. Дронов-М.:BHV, 2010.-200 с.
3) Энциклопедический словарь юного программиста. Сост.А.П. Савин. – М.: педагогика, 1989.-352с.:ил.
4) https://matplotlib.org/stable/tutorials/index.html
5) https://numpy.org/doc/1.22/user/basics.html
6) https://pandas.pydata.org/docs/user_guide/index.html#user-guide
Справка об уникальности
Приложение 1
Текст программы, выполняющий функцию отображение интерфейса.
#Импортбиблиотек.
import turtle
from turtle import Turtle, Screen
#Настройкаокна.
turtle1 = turtle.Screen()
turtle1.bgcolor("black")
# Создание объектов.
turtle2 = turtle.Pen()
turtle3 = turtle.Pen()
turtle4 = turtle.Pen()
turtle5 = turtle.Pen()
turtle6 = turtle.Pen()
turtle7 = turtle.Pen()
turtle8 = turtle.Pen()
turtle9 = turtle.Pen()
#Добавлениекартиноквокно.
turtle.register_shape("Nazvanie.gif")
turtle.register_shape("Dinamika.gif")
turtle.register_shape("Statistika.gif")
turtle.register_shape("Statistika.gif")
turtle.register_shape("Prognoz.gif")
turtle.register_shape("Sravnenie.gif")
turtle2.penup()
turtle3.penup()
turtle4.penup()
turtle5.penup()
turtle6.penup()
turtle2.setpos(0,310)
turtle2.shape("Nazvanie.gif")
turtle3.setpos(0,170)
turtle3.shape("Dinamika.gif")
turtle4.setpos(0,0)
turtle4.shape("Statistika.gif")
turtle5.setpos(0,-150)
turtle5.shape("Prognoz.gif")
turtle6.setpos(0,-300)
turtle6.shape("Sravnenie.gif")
turtle9.color("white")
turtle9.penup()
turtle9.setpos(0,500)
Приложение 2
Текст программы выполняющий функцию «Динамика».
#Построение графика на основе массива со средними баллами.
print("----------------------------------------")
fun_sred_b(p['predmet_o'])
plt.plot(p['Data1']["Датаивремя"],p['sred_b_o'],'r')
plt.show()
Текст программы выполняющий функцию «Статистика».
p['sred_b_min'] = 5
fun_sred_b(p['predmet_o'])
fun_ozenki(p['predmet_o'])
print("----------------------------------------")
print("Статистика:")
#Вывод максимального средного балла.
print("Максимальный средний балл:", p['sred_b_o'].max())
#Выводминимальногосреднегобалла.
for i in range (len(p['Data1'].index)):
if (p['sred_b_o'][i] < p['sred_b_min']) and (p['sred_b_o'][i] != 0):
p['sred_b_min'] = p['sred_b_o'][i]
print("Минимальный средний балл:", p['sred_b_min'])
#Вывод количества 5,4,3,2.
print("Текущий средний балл:", p['sred_b_o'][len(p['Data1'].index)-1])
print("Количество 5:",p['piat'])
print("Количество 4:",p['chetire'])
print("Количество 3:",p['tri'])
print("Количество 2:",p['dva'])
#Подсчёт и вывод количества пропусков и опозданий.
for i in range (len(p['Data1'].index)):
if (p['Data1'].iloc[i,1] == "Пропуск") or (p['Data1'].iloc[i,1] == "Болезнь"):
p['d'] = p['d'] + 1
print("Количество пропусков:",p['d'])
p['d'] = 0
for i in range (len(p['Data1'].index)):
if p['Data1'].iloc[i,2] == "Опоздание":
p['d'] = p['d'] + 1
print("Количество опоздание:",p['d'])
Текст программы выполняющий функцию «Прогноз».
fun_ozenki(p['predmet_o'])
fun_sred_b(p['predmet_o'])
#Ввод желаемой оценки.
print("Какую оценку Вы хотите?")
p['c'] = int(input(""))
print("----------------------------------------")
if p['c'] == 5:
if p['sred_b_o'][len(p['Data1'].index)-1] >= 4.5:
print("У Вас и так выходит", p['c'])
if p['sred_b_o'][len(p['Data1'].index)-1] < 4.5:
p['chetire'] = p['chetire'] + 3*p['tri'] + 5*p['dva']
print("Вамнужноминимум:", p['chetire']-p['piat'], "5.")
if p['c'] == 4:
if p['sred_b_o'][len(p['Data1'].index)-1] >= 4.5:
print("У Вас и так выходит 5")
if (p['sred_b_o'][len(p['Data1'].index)-1] >= 3.5) and (p['sred_b_o'][len(p['Data1'].index)-1] < 4.5):
print("У Вас и так выходит 4")
if p['sred_b_o'][len(p['Data1'].index)-1] < 3.5:
p['tri'] = p['tri'] - 3*p['piat']
p['chetire'] = p['chetire'] - 3*p['dva']
print("Вамнужноминимум:", p['tri']-p['chetire'], "4.")
if p['c'] == 3:
if p['sred_b_o'][len(p['Data1'].index)-1] >= 4.5:
print("У Вас и так выходит 5")
if (p['sred_b_o'][len(p['Data1'].index)-1] >= 3.5) and (p['sred_b_o'][len(p['Data1'].index)-1] < 4.5):
print("У Вас и так выходит 4")
if (p['sred_b_o'][len(p['Data1'].index)-1] >= 2.5) and (p['sred_b_o'][len(p['Data1'].index)-1] < 3.5):
print("У Вас и так выходит 3")
if p['sred_b_o'][len(p['Data1'].index)-1] < 2.5:
p['dva'] = p['dva'] - 5*p['piat']
p['tri'] = p['tri'] + 3*p['chetire']
print("Вам нужно минимум:", p['dva']-p['tri'], "3.")
Текст программы выполняющий функцию «Сравнение».
# Ввод первого и второго предмета.
print("Введите первый предмет.")
p['predmet1'] = input("")
print("Введите второй предмет.")
p['predmet2'] = input("")
print("----------------------------------------")
#Создание массивов со средними баллами для обоих предмет.
fun_sred_b(p['predmet2'])
p['sred_b2'] = p['sred_b_o']
p['Data2'] = p['Data1']
fun_sred_b(p['predmet1'])
p['sred_b1'] = p['sred_b_o']
#Создание DataFrame для сравнения параметров по двум предметам.
p['sravnenie'] = pd.DataFrame([[0,0],[0,0],[0,0]],index = ["Максимальный","Минимальный","Текущий"],columns = (p['predmet1'],p['predmet2']))
p['sravnenie'].iloc[0,0] = p['sred_b1'].max()
p['sravnenie'].iloc[0,1] = p['sred_b2'].max()
p['sred_b_min'] = 5
for i in range (len(p['Data2'].index)):
if (p['sred_b1'][i] < p['sred_b_min']) and (p['sred_b1'][i] != 0):
p['sred_b_min'] = p['sred_b1'][i]
p['sravnenie'].iloc[1,0] = p['sred_b_min']
p['sred_b_min'] = 5
for i in range (len(p['Data1'].index)):
if (p['sred_b2'][i] < p['sred_b_min']) and (p['sred_b2'][i] != 0):
p['sred_b_min'] = p['sred_b2'][i]
p['sravnenie'].iloc[1,1] = p['sred_b_min']
p['sravnenie'].iloc[2,0] = p['sred_b1'][len(p['Data2'].index)-1]
p['sravnenie'].iloc[2,1] = p['sred_b2'][len(p['Data1'].index)-1]
#Построение графиков разных цветов и вывод результатов анализа.
p['okno'],p['osi'] = plt.subplots(1,2)
if p['sravnenie'].iloc[2,0] > p['sravnenie'].iloc[2,1]:
p['osi'][0].plot(p['Data2']["Датаивремя"],p['sred_b1'],'g')
p['osi'][1].plot(p['Data1']["Датаивремя"],p['sred_b2'],'r')
plt.show()
display(p['sravnenie'])
print ("По предмету:",p['predmet1'] + "," + "у Вас средний балл выше, чем по предмету:",p['predmet2'])
if p['sravnenie'].iloc[2,0] < p['sravnenie'].iloc[2,1]:
p['osi'][0].plot(p['sred_b1'],'r')
p['osi'][1].plot(p['sred_b2'],'g')
plt.show()
display(p['sravnenie'])
print ("По предмету:",p['predmet2'] + "," + "у Вас средний балл выше, чем по предмету:",p['predmet1'])