Файл: Методические указания по выполнению лабораторных работ для студентов, обучающихся с применением.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 05.12.2023
Просмотров: 129
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)
Факультет дистанционного обучения (ФДО)
А. Я. Суханов
РАЗРАБОТКА ВЕБ-СЕРВИСОВ
ДЛЯ НАУЧНЫХ И ПРИКЛАДНЫХ ЗАДАЧ
Методические указания
по выполнению лабораторных работ
для студентов, обучающихся с применением
дистанционных образовательных технологий
Томск 2021
Корректор: А. Н. Миронова
Суханов А. Я.
Разработка веб-сервисов для научных и прикладных задач : ме- тодические указания по выполнению лабораторных работ для студен- тов, обучающихся с применением дистанционных образовательных технологий / А. Я. Суханов. – Томск : ФДО, ТУСУР, 2021. – 119 с.
©
Суханов А. Я., 2021
© Оформление.
ФДО, ТУСУР, 2021
3
ОГЛАВЛЕНИЕ
Введение ....................................................................................................................... 5 1 Основные возможности Python ............................................................................... 6 1.1 Кратко о языке Python ........................................................................................ 6 1.2
Начало работы .................................................................................................... 6 1.3 Установка Python и настройка environment ..................................................... 7 1.4 Настройка виртуальной среды ........................................................................ 12 1.5 Первые шаги в Python ...................................................................................... 17 1.6
Использование Python для работы с изображениями .................................. 25 1.7 Возможности Python для обработки данных ................................................ 37 1.7.1 Примеры ресурсов с открытыми данными ............................................. 38 1.7.2 Обработка Kaggle датасетов ..................................................................... 39 1.7.3 Изучение возможностей доступа к API сервиса data.gov.ru .................. 58 2 Лабораторная работа № 1 «Разработка веб-приложения на Python» ................ 65 2.1 Непрерывная интеграция для GitHub ............................................................ 65 2.2 Примеры веб-сервисов для непрерывной интеграции ................................. 66 2.3 Что такое YAML ............................................................................................... 67 2.4 Создание проекта веб-приложения на Flask ................................................. 68 2.5 Продолжение простейшего эксперимента с проектом Flask ....................... 70 2.5.1 Что такое WSGI .......................................................................................... 71 2.5.2 Примеры WSGI-серверов и Gunicorn ...................................................... 71 2.5.3 Запуск проекта с использованием Gunicorn ........................................... 72 2.5.4 Ремарка о тестировании ............................................................................ 74 2.6 Краткое знакомство с шаблонами Flask ......................................................... 74 2.7 Изучение шаблонов, форм .............................................................................. 76 2.8 Добавление нейронной сети для классификации ......................................... 80 2.9
Добавление капчи ............................................................................................ 82 2.10 Добавление возможности классификации изображения ........................... 82 2.11 Дополнительная возможность по возвращению разных документов в зависимости от шаблона .............................................................................. 86
4 2.12 Деплой на Heroku ........................................................................................... 89 2.13 Задание на лабораторную работу № 1 ......................................................... 92 3 Лабораторная работа № 2 «Разработка веб-сервиса» ......................................... 97 3.1 Создание отдельной среды окружения для проекта Flasgger и документирования Swagger ......................................................................... 97 3.2 Использование библиотеки flask_restplus для документирования веб-сервиса ..................................................................................................... 104 3.3 Задание на лабораторную работу № 2 ......................................................... 111 4 Требования к содержанию и оформлению отчета ............................................ 113
Литература ................................................................................................................ 114
Приложение А Примеры графиков ........................................................................ 115
Приложение Б Образец титульного листа ............................................................ 119
5
ВВЕДЕНИЕ
Данные методические указания разработаны с учетом требований ФГОС
ВО для направления подготовки 09.03.01 «Информатика и вычислительная тех- ника», они предназначены для выполнения лабораторных работ по дисциплине
«Разработка веб-сервисов для научных и прикладных задач».
Цель лабораторных работ: получение навыков разработки веб- приложений и веб-сервисов с использованием одного из фреймворков и типо- вых научных библиотек для решения простейших задач по обработке данных.
Лабораторные работы выполняются в соответствии с порядком, описан- ным в методических указаниях.
Выбор варианта лабораторной работы осуществляется по общим прави- лам с использованием следующей формулы:
V = (N × K) div 100, где V – искомый номер варианта,
N – общее количество вариантов,
K – код варианта, div – целочисленное деление.
При V = 0 выбирается максимальный вариант.
6
1
ОСНОВНЫЕ ВОЗМОЖНОСТИ PYTHON
1.1
Кратко о языке Python
Python является интерпретируемым языком, в силу этого многое можно выполнять в командной строке. Достоинством Python является достаточно простое написание кода, при этом код выглядит лаконичным. Программу или проект проще всего реализовать на Python, можно быстро получить первые ре- зультаты, потому язык изначально распространился в научной среде.
Для выделения исполнимых блоков используются отступы, обычно четы- ре пробела, нет необходимости в завершающих или выделяющих программный блок символах: {} или begin end. На Python реализовано множество пакетов об- работки данных, библиотек машинного обучения, нейронных сетей. Python яв- ляется третьим по популярности языком.
Наверное, основным недостатком Python является то, что код для выпол- нения простейших вычислительных задач, написанный без использования воз- можностей массивов numpy и других библиотек, будет уступать по скорости ис- полнения компилируемым языкам и JIT-компилируемым. Кроме того, интерпре- татор Python не обеспечивает распараллеливание потоков по ядрам процессора.
Для ускорения исполнения вы можете пользоваться версией JIT-компилятора
PyPy для Python. Для решения проблемы блокировки и возможности исполне- ния потоков на разных ядрах разрабатывается pypy-stm.
1.2
Начало работы
Перед началом работы с языком Python следует кратко изучить PEP8 –
руководство по написанию кода на Python (
https://pythonworld.ru/osnovy/pep-
8-rukovodstvo-po-napisaniyu-koda-na-python.html#id2
).
Некоторые IDE обеспечивают автоматическую проверку на PEP8. Реко- мендуется использовать, например, PyCharm, более простые IDE – Spyder, Idle.
Старайтесь при написании кода соблюдать нижеприведенные соглаше- ния.
7
Используйте четыре пробела для отступа (при выполнении лабораторных работ можно использовать и табуляцию, но этот способ не рекомендуется).
Длинные строки следует опускать ниже знаков: (, {, [, а следующие начинать после этих знаков сверху: foo = long_function_name(var_one, var_two, var_three, var_four) либо foo = long_function_name( var_one, var_two, var_three, var_four
)
Имена классов используют соглашение CapitalizedWords (слова с заглав- ными буквами, или CapWords, или CamelCase).
Замечание: когда вы используете аббревиатуры в таком стиле, пишите все буквы аббревиатуры заглавными – HTTPServerError.
Имена функций и переменных должны состоять из строчных букв, а слова разделяться символами подчеркивания: lower_case_with_underscores.
Это необходимо для удобочитаемости.
Константы следует представлять в формате
UPPERCASE_WITH_UNDERSCORES
(слова из заглавных букв с подчеркива- ниями).
1.3
Установка Python и настройка environment
Процедуры установки потребуют наличия операционной системы Linux либо установки виртуальной машины Linux на VirtualBox. Способы установки
VirtualBox можно найти на различных сайтах, дадим лишь краткое указание.
Прежде чем устанавливать VirtualBox в вашу систему Windows, зайдите в BIOS компьютера или ноутбука и в разделе «Настройки CPU» включите под- держку виртуализации. На странице загрузки официального сайта https://www.virtualbox.org/
выберите последнюю версию Oracle VM VirtualBox.
Например, VirtualBox для Windows и других платформ можно скачать по ссылке:
8 https://www.oracle.com/virtualization/technologies/vm/downloads/virtualbox- downloads.html
Дальше необходимо запустить установку и следовать указаниям.
Скачайте образ диска с операционной системой Linux. Предлагаем ска- чать десктоп-версию операционной системы Ubuntu. В частности, скачать ISO- образ операционной системы версии 20.04 можно на сайте: https://releases.ubuntu.com/20.04/
На базе скачанного образа создадим виртуальную машину. Выполним в VirtualBox «машина → создать».
Выберем папку для сохранения виртуальной машины и тип операционной системы. затем – «Создать новый виртуальный жесткий диск». Можно выбрать гораздо меньше оперативной памяти, например 2 или 4 Гб (рис. 1.1).
Рис. 1.1 – Установка размера оперативной памяти для ОС и создание виртуального жесткого диска
9
Далее появится окно создания виртуального диска. Можно выбрать VDI- диск, это родной для системы VirtualBox тип виртуальных дисков, указать раз- мер, например, 20 Гб, динамически расширяющийся.
В окошке созданных машин можно установить различные настройки
(
рис. 1.2).
Рис. 1.2 – Настройки виртуальной машины
Во вкладке «Общие папки» можно выбрать разделяемые с хостовой опе- рационной системой каталоги. Для этого следует нажать на папку с зеленым плюсом (рис. 1.3).
Рис. 1.3 – Добавление разделяемых папок
10
Во вкладке «Носители» можно добавить дисковый носитель, в частности наш скачанный ISO-образ для загрузки и установки операционной системы.
Для этого нажимаем на плюсик на фоне круглого диска (рис. 1.4).
Рис. 1.4 – Добавление устройства диска или другого носителя информации
Затем жмем «Добавить» (рис. 1.5) и выбираем скачанный нами ISO-образ.
Рис. 1.5 – Добавлении ISO-образа
После этого в окне VirtualBox выбираем нашу виртуальную машину и нажимаем «Запустить».
Далее появится окно установки операционной системы Ubuntu (рис. 1.6).
Следуйте указаниям установщика. Выберете стандартную установку, задайте имя и пароль пользователя.
11
Рис. 1.6 – Окно установки Ubuntu
После установки в меню устройства можно выбрать «Подключить образ диска дополнений гостевой ОС».
Ubuntu 20.04 и другие версии Debian Linux поставляются с предустанов- ленным Python 3. Чтобы посмотреть версию Python, в терминале Ubuntu запу- стите команду: python3 -V
Если установлена версия Python 3.8, то все нормально, можно продол- жить. Если Python не установлен, его нужно установить, причем именно вер- сию 3.8.
Если все-таки оказалось, что Python 3.8 не установлен или вы устанавли- ваете его не на виртуальной машине Ubuntu 20.04, то необходимо проделать следующие шаги:
•
Обновить список пакетов и установить необходимые библиотеки:
sudo apt update sudo apt install software-properties-common
•
Добавить репозиторий deadsnakes PPA в список источников вашей системы:
sudo add-apt-repository ppa:deadsnakes/ppa
12
•
При появлении запроса нажать Enter.
•
Установить Python 3.8.
sudo apt install python3.8
•
Для управления пакетами установим pip (pip3) – систему управле- ния пакетами Python.
Примеры: pip${version} install some-package-name pip install numpy. pip3.8 install numpy.
Установка для конкретной версии Python и установка numpy.
Выполним команду: sudo apt install -y python3-pip
После этого пройдет установка pip.
1.4
Настройка виртуальной среды
Виртуальные среды позволяют иметь на компьютере изолированное про- странство для проектов Python, гарантируя, что каждый из ваших проектов мо- жет иметь свой собственный набор зависимостей, который не нарушит ни один из других проектов.
Настройка среды программирования дает больший контроль над проек- тами Python и над тем, как обрабатываются разные версии пакетов. Это особен- но важно при работе со сторонними пакетами.
Можно настроить любое количество сред программирования Python.
Каждая среда – это отдельный каталог на вашем компьютере, в котором есть несколько сценариев, позволяющих выполняться приложению в этой отдельной среде.
Сначала нужно установить модуль *venv*, являющийся частью стандарт- ной библиотеки Python 3, чтобы можно было создавать виртуальные среды.
Установим venv, набрав: sudo apt-get install -y python3-venv
13
После установки настроим отдельную среду для нашего приложения.
Сначала создадим каталог, где мы будем размещать среды и зайдем в него. mkdir envs cd envs
Далее введем команду для создания виртуальной среды нашего приложе- ния, назовем среду proj1. python3 -m venv proj1
Перейдем в каталог и просмотрим его.
:/envs$ cd proj1
:/envs/proj1$ ls bin include lib lib64 pyvenv.cfg share
Совместная работа этих файлов обеспечивает изоляцию проектов, так что системные файлы и файлы проекта не смешиваются. Будет очень полезно ис- пользовать контроль версий и обеспечить каждому из проектов доступ к кон- кретным пакетам, которые ему необходимы. Python Wheels – это формат гото- вых пакетов для Python, который помогает ускорить разработку программного обеспечения за счет сокращения количества операций компиляции. Он нахо- дится в каталоге share в Ubuntu 20.04.
Чтобы использовать эту среду, ее нужно активировать. Для этого необхо- димо ввести команду, вызывающую скриптactivate (перед этим необходимо вернуться или зайти в папку со средами).
:$ cd ..
:/envs$ source proj1/bin/activate
Для выхода из среды окружения proj1 введите команду deactivate.
(proj1) :/envs$ deactivate
Далее можно опять активировать среду, создать свой первый проект и запустить программу на Python. Саму программу в принципе можно делать, используя любой текстовый редактор. Очевидно, это не совсем удобно, но можно сделать первый проект, используя простой редактор. Запустим терми- нал, если вы его еще не запустили, и создадим какой-нибудь каталог для наших проектов, например, progs.
$mkdir progs
$cd progs
14
Активируем среду.
$source ../envs/proj1/bin/activate
Создадим проект hello, находясь в окружении.
$mkdir hello
$cd hello
$nano hello.py
Внутри файла запишем строчку: print("Hello world")
Сохраним файл (Ctrl+O) и запустим его из командной строки интерпрета- тором Python.
$python hello.py.
Добавим в наш файл следующие строчки: import numpy as np print("Hello world") x = np.array([1,2,3,4]) print(x)
И запустим наш файл, при этом появится сообщение о том, что модуль numpy неизвестен. Его мы установим в нашем окружении с использованием pip.
$pip3 install numpy или
$pip install numpy
И вызов дает нам ожидаемый результат.
$python hello.py
Hello world
[1 2 3 4]
Конечно, писать код в подобном редакторе неудобно, поэтому установим
IDE
. К сожалению, в виртуальной машине IDE может работать медленно, но вы можете продолжить работать в текстовом редакторе либо использовать более легковесные IDE, а не предлагаемую нами далее среду PyCharm. Можете уста- новить свободно распространяемую версию PyCharm в установщике Ubuntu для обучения и изучения либо профессиональную версию.
Зайдем в центр приложений Ubuntu Software и выберем PyCharm EDU
(
рис. 1.7).
15
Рис. 1.7 – Выбор IDE PyCharm в Ubuntu Software
Запустим PyCharm (рис. 1.8) и зададим конфигурацию проекта.
Рис. 1.8 – Конфигурация, создание и открытие проекта
В меню Configure можно установить еще одну среду.
Configure
→ Settings → PythonIntepreter → Add
Можно выбрать и уже существующую среду, созданную нами (рис. 1.9,
1.10).
16
Рис. 1.9 – Выбор собственной среды окружения
Далее создадим свой проект с указанной средой окружения.
Рис. 1.10 – Создание проекта в указанной среде окружения
Вы можете выбрать другое название проекта и любую среду.
17
После создания проекта при выборе вкладки terminal в среде PyCharm отобразится командная строка с соответствующей средой proj1.
Выбрав File → Settings, можно посмотреть вкладку Project: PythonInter- preter
, здесь мы увидим установленные библиотеки, в том числе numpy и pip.
Выбрав File → New… и создав файл hello, опять запишем код print("Hello world"
) и запустим программу с помощью зеленого треугольника.
Выберем в окне IDE PyCharm терминал и в нашем окружении установим библиотеки, которые нам понадобятся для разработки веб-приложения.
1.5
Первые шаги в Python
Прежде чем приступать к лабораторной работе, связанной с веб- приложением, предлагается выполнить приведенные ниже задания. Подготови- тельная работа поможет при выполнении заданий по вариантам при создании веб-приложения.
В консоли попробуйте запустить представленные команды.
Информация о базовых операциях и типах.
#
Типы данных, int, float, bool, str
>>>
type
(
int
)
<
1 2 3 4 5 6 7
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)
Факультет дистанционного обучения (ФДО)
А. Я. Суханов
РАЗРАБОТКА ВЕБ-СЕРВИСОВ
ДЛЯ НАУЧНЫХ И ПРИКЛАДНЫХ ЗАДАЧ
Методические указания
по выполнению лабораторных работ
для студентов, обучающихся с применением
дистанционных образовательных технологий
Томск 2021
Корректор: А. Н. Миронова
Суханов А. Я.
Разработка веб-сервисов для научных и прикладных задач : ме- тодические указания по выполнению лабораторных работ для студен- тов, обучающихся с применением дистанционных образовательных технологий / А. Я. Суханов. – Томск : ФДО, ТУСУР, 2021. – 119 с.
©
Суханов А. Я., 2021
© Оформление.
ФДО, ТУСУР, 2021
3
ОГЛАВЛЕНИЕ
Введение ....................................................................................................................... 5 1 Основные возможности Python ............................................................................... 6 1.1 Кратко о языке Python ........................................................................................ 6 1.2
Начало работы .................................................................................................... 6 1.3 Установка Python и настройка environment ..................................................... 7 1.4 Настройка виртуальной среды ........................................................................ 12 1.5 Первые шаги в Python ...................................................................................... 17 1.6
Использование Python для работы с изображениями .................................. 25 1.7 Возможности Python для обработки данных ................................................ 37 1.7.1 Примеры ресурсов с открытыми данными ............................................. 38 1.7.2 Обработка Kaggle датасетов ..................................................................... 39 1.7.3 Изучение возможностей доступа к API сервиса data.gov.ru .................. 58 2 Лабораторная работа № 1 «Разработка веб-приложения на Python» ................ 65 2.1 Непрерывная интеграция для GitHub ............................................................ 65 2.2 Примеры веб-сервисов для непрерывной интеграции ................................. 66 2.3 Что такое YAML ............................................................................................... 67 2.4 Создание проекта веб-приложения на Flask ................................................. 68 2.5 Продолжение простейшего эксперимента с проектом Flask ....................... 70 2.5.1 Что такое WSGI .......................................................................................... 71 2.5.2 Примеры WSGI-серверов и Gunicorn ...................................................... 71 2.5.3 Запуск проекта с использованием Gunicorn ........................................... 72 2.5.4 Ремарка о тестировании ............................................................................ 74 2.6 Краткое знакомство с шаблонами Flask ......................................................... 74 2.7 Изучение шаблонов, форм .............................................................................. 76 2.8 Добавление нейронной сети для классификации ......................................... 80 2.9
Добавление капчи ............................................................................................ 82 2.10 Добавление возможности классификации изображения ........................... 82 2.11 Дополнительная возможность по возвращению разных документов в зависимости от шаблона .............................................................................. 86
4 2.12 Деплой на Heroku ........................................................................................... 89 2.13 Задание на лабораторную работу № 1 ......................................................... 92 3 Лабораторная работа № 2 «Разработка веб-сервиса» ......................................... 97 3.1 Создание отдельной среды окружения для проекта Flasgger и документирования Swagger ......................................................................... 97 3.2 Использование библиотеки flask_restplus для документирования веб-сервиса ..................................................................................................... 104 3.3 Задание на лабораторную работу № 2 ......................................................... 111 4 Требования к содержанию и оформлению отчета ............................................ 113
Литература ................................................................................................................ 114
Приложение А Примеры графиков ........................................................................ 115
Приложение Б Образец титульного листа ............................................................ 119
5
ВВЕДЕНИЕ
Данные методические указания разработаны с учетом требований ФГОС
ВО для направления подготовки 09.03.01 «Информатика и вычислительная тех- ника», они предназначены для выполнения лабораторных работ по дисциплине
«Разработка веб-сервисов для научных и прикладных задач».
Цель лабораторных работ: получение навыков разработки веб- приложений и веб-сервисов с использованием одного из фреймворков и типо- вых научных библиотек для решения простейших задач по обработке данных.
Лабораторные работы выполняются в соответствии с порядком, описан- ным в методических указаниях.
Выбор варианта лабораторной работы осуществляется по общим прави- лам с использованием следующей формулы:
V = (N × K) div 100, где V – искомый номер варианта,
N – общее количество вариантов,
K – код варианта, div – целочисленное деление.
При V = 0 выбирается максимальный вариант.
6
1
ОСНОВНЫЕ ВОЗМОЖНОСТИ PYTHON
1.1
Кратко о языке Python
Python является интерпретируемым языком, в силу этого многое можно выполнять в командной строке. Достоинством Python является достаточно простое написание кода, при этом код выглядит лаконичным. Программу или проект проще всего реализовать на Python, можно быстро получить первые ре- зультаты, потому язык изначально распространился в научной среде.
Для выделения исполнимых блоков используются отступы, обычно четы- ре пробела, нет необходимости в завершающих или выделяющих программный блок символах: {} или begin end. На Python реализовано множество пакетов об- работки данных, библиотек машинного обучения, нейронных сетей. Python яв- ляется третьим по популярности языком.
Наверное, основным недостатком Python является то, что код для выпол- нения простейших вычислительных задач, написанный без использования воз- можностей массивов numpy и других библиотек, будет уступать по скорости ис- полнения компилируемым языкам и JIT-компилируемым. Кроме того, интерпре- татор Python не обеспечивает распараллеливание потоков по ядрам процессора.
Для ускорения исполнения вы можете пользоваться версией JIT-компилятора
PyPy для Python. Для решения проблемы блокировки и возможности исполне- ния потоков на разных ядрах разрабатывается pypy-stm.
1.2
Начало работы
Перед началом работы с языком Python следует кратко изучить PEP8 –
руководство по написанию кода на Python (
https://pythonworld.ru/osnovy/pep-
8-rukovodstvo-po-napisaniyu-koda-na-python.html#id2
).
Некоторые IDE обеспечивают автоматическую проверку на PEP8. Реко- мендуется использовать, например, PyCharm, более простые IDE – Spyder, Idle.
Старайтесь при написании кода соблюдать нижеприведенные соглаше- ния.
7
Используйте четыре пробела для отступа (при выполнении лабораторных работ можно использовать и табуляцию, но этот способ не рекомендуется).
Длинные строки следует опускать ниже знаков: (, {, [, а следующие начинать после этих знаков сверху: foo = long_function_name(var_one, var_two, var_three, var_four) либо foo = long_function_name( var_one, var_two, var_three, var_four
)
Имена классов используют соглашение CapitalizedWords (слова с заглав- ными буквами, или CapWords, или CamelCase).
Замечание: когда вы используете аббревиатуры в таком стиле, пишите все буквы аббревиатуры заглавными – HTTPServerError.
Имена функций и переменных должны состоять из строчных букв, а слова разделяться символами подчеркивания: lower_case_with_underscores.
Это необходимо для удобочитаемости.
Константы следует представлять в формате
UPPERCASE_WITH_UNDERSCORES
(слова из заглавных букв с подчеркива- ниями).
1.3
Установка Python и настройка environment
Процедуры установки потребуют наличия операционной системы Linux либо установки виртуальной машины Linux на VirtualBox. Способы установки
VirtualBox можно найти на различных сайтах, дадим лишь краткое указание.
Прежде чем устанавливать VirtualBox в вашу систему Windows, зайдите в BIOS компьютера или ноутбука и в разделе «Настройки CPU» включите под- держку виртуализации. На странице загрузки официального сайта https://www.virtualbox.org/
выберите последнюю версию Oracle VM VirtualBox.
Например, VirtualBox для Windows и других платформ можно скачать по ссылке:
8 https://www.oracle.com/virtualization/technologies/vm/downloads/virtualbox- downloads.html
Дальше необходимо запустить установку и следовать указаниям.
Скачайте образ диска с операционной системой Linux. Предлагаем ска- чать десктоп-версию операционной системы Ubuntu. В частности, скачать ISO- образ операционной системы версии 20.04 можно на сайте: https://releases.ubuntu.com/20.04/
На базе скачанного образа создадим виртуальную машину. Выполним в VirtualBox «машина → создать».
Выберем папку для сохранения виртуальной машины и тип операционной системы. затем – «Создать новый виртуальный жесткий диск». Можно выбрать гораздо меньше оперативной памяти, например 2 или 4 Гб (рис. 1.1).
Рис. 1.1 – Установка размера оперативной памяти для ОС и создание виртуального жесткого диска
9
Далее появится окно создания виртуального диска. Можно выбрать VDI- диск, это родной для системы VirtualBox тип виртуальных дисков, указать раз- мер, например, 20 Гб, динамически расширяющийся.
В окошке созданных машин можно установить различные настройки
(
рис. 1.2).
Рис. 1.2 – Настройки виртуальной машины
Во вкладке «Общие папки» можно выбрать разделяемые с хостовой опе- рационной системой каталоги. Для этого следует нажать на папку с зеленым плюсом (рис. 1.3).
Рис. 1.3 – Добавление разделяемых папок
10
Во вкладке «Носители» можно добавить дисковый носитель, в частности наш скачанный ISO-образ для загрузки и установки операционной системы.
Для этого нажимаем на плюсик на фоне круглого диска (рис. 1.4).
Рис. 1.4 – Добавление устройства диска или другого носителя информации
Затем жмем «Добавить» (рис. 1.5) и выбираем скачанный нами ISO-образ.
Рис. 1.5 – Добавлении ISO-образа
После этого в окне VirtualBox выбираем нашу виртуальную машину и нажимаем «Запустить».
Далее появится окно установки операционной системы Ubuntu (рис. 1.6).
Следуйте указаниям установщика. Выберете стандартную установку, задайте имя и пароль пользователя.
11
Рис. 1.6 – Окно установки Ubuntu
После установки в меню устройства можно выбрать «Подключить образ диска дополнений гостевой ОС».
Ubuntu 20.04 и другие версии Debian Linux поставляются с предустанов- ленным Python 3. Чтобы посмотреть версию Python, в терминале Ubuntu запу- стите команду: python3 -V
Если установлена версия Python 3.8, то все нормально, можно продол- жить. Если Python не установлен, его нужно установить, причем именно вер- сию 3.8.
Если все-таки оказалось, что Python 3.8 не установлен или вы устанавли- ваете его не на виртуальной машине Ubuntu 20.04, то необходимо проделать следующие шаги:
•
Обновить список пакетов и установить необходимые библиотеки:
sudo apt update sudo apt install software-properties-common
•
Добавить репозиторий deadsnakes PPA в список источников вашей системы:
sudo add-apt-repository ppa:deadsnakes/ppa
12
•
При появлении запроса нажать Enter.
•
Установить Python 3.8.
sudo apt install python3.8
•
Для управления пакетами установим pip (pip3) – систему управле- ния пакетами Python.
Примеры: pip${version} install some-package-name pip install numpy. pip3.8 install numpy.
Установка для конкретной версии Python и установка numpy.
Выполним команду: sudo apt install -y python3-pip
После этого пройдет установка pip.
1.4
Настройка виртуальной среды
Виртуальные среды позволяют иметь на компьютере изолированное про- странство для проектов Python, гарантируя, что каждый из ваших проектов мо- жет иметь свой собственный набор зависимостей, который не нарушит ни один из других проектов.
Настройка среды программирования дает больший контроль над проек- тами Python и над тем, как обрабатываются разные версии пакетов. Это особен- но важно при работе со сторонними пакетами.
Можно настроить любое количество сред программирования Python.
Каждая среда – это отдельный каталог на вашем компьютере, в котором есть несколько сценариев, позволяющих выполняться приложению в этой отдельной среде.
Сначала нужно установить модуль *venv*, являющийся частью стандарт- ной библиотеки Python 3, чтобы можно было создавать виртуальные среды.
Установим venv, набрав: sudo apt-get install -y python3-venv
13
После установки настроим отдельную среду для нашего приложения.
Сначала создадим каталог, где мы будем размещать среды и зайдем в него. mkdir envs cd envs
Далее введем команду для создания виртуальной среды нашего приложе- ния, назовем среду proj1. python3 -m venv proj1
Перейдем в каталог и просмотрим его.
:/envs$ cd proj1
:/envs/proj1$ ls bin include lib lib64 pyvenv.cfg share
Совместная работа этих файлов обеспечивает изоляцию проектов, так что системные файлы и файлы проекта не смешиваются. Будет очень полезно ис- пользовать контроль версий и обеспечить каждому из проектов доступ к кон- кретным пакетам, которые ему необходимы. Python Wheels – это формат гото- вых пакетов для Python, который помогает ускорить разработку программного обеспечения за счет сокращения количества операций компиляции. Он нахо- дится в каталоге share в Ubuntu 20.04.
Чтобы использовать эту среду, ее нужно активировать. Для этого необхо- димо ввести команду, вызывающую скриптactivate (перед этим необходимо вернуться или зайти в папку со средами).
:$ cd ..
:/envs$ source proj1/bin/activate
Для выхода из среды окружения proj1 введите команду deactivate.
(proj1) :/envs$ deactivate
Далее можно опять активировать среду, создать свой первый проект и запустить программу на Python. Саму программу в принципе можно делать, используя любой текстовый редактор. Очевидно, это не совсем удобно, но можно сделать первый проект, используя простой редактор. Запустим терми- нал, если вы его еще не запустили, и создадим какой-нибудь каталог для наших проектов, например, progs.
$mkdir progs
$cd progs
14
Активируем среду.
$source ../envs/proj1/bin/activate
Создадим проект hello, находясь в окружении.
$mkdir hello
$cd hello
$nano hello.py
Внутри файла запишем строчку: print("Hello world")
Сохраним файл (Ctrl+O) и запустим его из командной строки интерпрета- тором Python.
$python hello.py.
Добавим в наш файл следующие строчки: import numpy as np print("Hello world") x = np.array([1,2,3,4]) print(x)
И запустим наш файл, при этом появится сообщение о том, что модуль numpy неизвестен. Его мы установим в нашем окружении с использованием pip.
$pip3 install numpy или
$pip install numpy
И вызов дает нам ожидаемый результат.
$python hello.py
Hello world
[1 2 3 4]
Конечно, писать код в подобном редакторе неудобно, поэтому установим
IDE
. К сожалению, в виртуальной машине IDE может работать медленно, но вы можете продолжить работать в текстовом редакторе либо использовать более легковесные IDE, а не предлагаемую нами далее среду PyCharm. Можете уста- новить свободно распространяемую версию PyCharm в установщике Ubuntu для обучения и изучения либо профессиональную версию.
Зайдем в центр приложений Ubuntu Software и выберем PyCharm EDU
(
рис. 1.7).
15
Рис. 1.7 – Выбор IDE PyCharm в Ubuntu Software
Запустим PyCharm (рис. 1.8) и зададим конфигурацию проекта.
Рис. 1.8 – Конфигурация, создание и открытие проекта
В меню Configure можно установить еще одну среду.
Configure
→ Settings → PythonIntepreter → Add
Можно выбрать и уже существующую среду, созданную нами (рис. 1.9,
1.10).
16
Рис. 1.9 – Выбор собственной среды окружения
Далее создадим свой проект с указанной средой окружения.
Рис. 1.10 – Создание проекта в указанной среде окружения
Вы можете выбрать другое название проекта и любую среду.
17
После создания проекта при выборе вкладки terminal в среде PyCharm отобразится командная строка с соответствующей средой proj1.
Выбрав File → Settings, можно посмотреть вкладку Project: PythonInter- preter
, здесь мы увидим установленные библиотеки, в том числе numpy и pip.
Выбрав File → New… и создав файл hello, опять запишем код print("Hello world"
) и запустим программу с помощью зеленого треугольника.
Выберем в окне IDE PyCharm терминал и в нашем окружении установим библиотеки, которые нам понадобятся для разработки веб-приложения.
1.5
Первые шаги в Python
Прежде чем приступать к лабораторной работе, связанной с веб- приложением, предлагается выполнить приведенные ниже задания. Подготови- тельная работа поможет при выполнении заданий по вариантам при создании веб-приложения.
В консоли попробуйте запустить представленные команды.
Информация о базовых операциях и типах.
#
Типы данных, int, float, bool, str
>>>
type
(
int
)
<
1 2 3 4 5 6 7
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)
Факультет дистанционного обучения (ФДО)
А. Я. Суханов
РАЗРАБОТКА ВЕБ-СЕРВИСОВ
ДЛЯ НАУЧНЫХ И ПРИКЛАДНЫХ ЗАДАЧ
Методические указания
по выполнению лабораторных работ
для студентов, обучающихся с применением
дистанционных образовательных технологий
Томск 2021
Корректор: А. Н. Миронова
Суханов А. Я.
Разработка веб-сервисов для научных и прикладных задач : ме- тодические указания по выполнению лабораторных работ для студен- тов, обучающихся с применением дистанционных образовательных технологий / А. Я. Суханов. – Томск : ФДО, ТУСУР, 2021. – 119 с.
©
Суханов А. Я., 2021
© Оформление.
ФДО, ТУСУР, 2021
3
ОГЛАВЛЕНИЕ
Введение ....................................................................................................................... 5 1 Основные возможности Python ............................................................................... 6 1.1 Кратко о языке Python ........................................................................................ 6 1.2
Начало работы .................................................................................................... 6 1.3 Установка Python и настройка environment ..................................................... 7 1.4 Настройка виртуальной среды ........................................................................ 12 1.5 Первые шаги в Python ...................................................................................... 17 1.6
Использование Python для работы с изображениями .................................. 25 1.7 Возможности Python для обработки данных ................................................ 37 1.7.1 Примеры ресурсов с открытыми данными ............................................. 38 1.7.2 Обработка Kaggle датасетов ..................................................................... 39 1.7.3 Изучение возможностей доступа к API сервиса data.gov.ru .................. 58 2 Лабораторная работа № 1 «Разработка веб-приложения на Python» ................ 65 2.1 Непрерывная интеграция для GitHub ............................................................ 65 2.2 Примеры веб-сервисов для непрерывной интеграции ................................. 66 2.3 Что такое YAML ............................................................................................... 67 2.4 Создание проекта веб-приложения на Flask ................................................. 68 2.5 Продолжение простейшего эксперимента с проектом Flask ....................... 70 2.5.1 Что такое WSGI .......................................................................................... 71 2.5.2 Примеры WSGI-серверов и Gunicorn ...................................................... 71 2.5.3 Запуск проекта с использованием Gunicorn ........................................... 72 2.5.4 Ремарка о тестировании ............................................................................ 74 2.6 Краткое знакомство с шаблонами Flask ......................................................... 74 2.7 Изучение шаблонов, форм .............................................................................. 76 2.8 Добавление нейронной сети для классификации ......................................... 80 2.9
Добавление капчи ............................................................................................ 82 2.10 Добавление возможности классификации изображения ........................... 82 2.11 Дополнительная возможность по возвращению разных документов в зависимости от шаблона .............................................................................. 86
4 2.12 Деплой на Heroku ........................................................................................... 89 2.13 Задание на лабораторную работу № 1 ......................................................... 92 3 Лабораторная работа № 2 «Разработка веб-сервиса» ......................................... 97 3.1 Создание отдельной среды окружения для проекта Flasgger и документирования Swagger ......................................................................... 97 3.2 Использование библиотеки flask_restplus для документирования веб-сервиса ..................................................................................................... 104 3.3 Задание на лабораторную работу № 2 ......................................................... 111 4 Требования к содержанию и оформлению отчета ............................................ 113
Литература ................................................................................................................ 114
Приложение А Примеры графиков ........................................................................ 115
Приложение Б Образец титульного листа ............................................................ 119
5
ВВЕДЕНИЕ
Данные методические указания разработаны с учетом требований ФГОС
ВО для направления подготовки 09.03.01 «Информатика и вычислительная тех- ника», они предназначены для выполнения лабораторных работ по дисциплине
«Разработка веб-сервисов для научных и прикладных задач».
Цель лабораторных работ: получение навыков разработки веб- приложений и веб-сервисов с использованием одного из фреймворков и типо- вых научных библиотек для решения простейших задач по обработке данных.
Лабораторные работы выполняются в соответствии с порядком, описан- ным в методических указаниях.
Выбор варианта лабораторной работы осуществляется по общим прави- лам с использованием следующей формулы:
V = (N × K) div 100, где V – искомый номер варианта,
N – общее количество вариантов,
K – код варианта, div – целочисленное деление.
При V = 0 выбирается максимальный вариант.
6
1
ОСНОВНЫЕ ВОЗМОЖНОСТИ PYTHON
1.1
Кратко о языке Python
Python является интерпретируемым языком, в силу этого многое можно выполнять в командной строке. Достоинством Python является достаточно простое написание кода, при этом код выглядит лаконичным. Программу или проект проще всего реализовать на Python, можно быстро получить первые ре- зультаты, потому язык изначально распространился в научной среде.
Для выделения исполнимых блоков используются отступы, обычно четы- ре пробела, нет необходимости в завершающих или выделяющих программный блок символах: {} или begin end. На Python реализовано множество пакетов об- работки данных, библиотек машинного обучения, нейронных сетей. Python яв- ляется третьим по популярности языком.
Наверное, основным недостатком Python является то, что код для выпол- нения простейших вычислительных задач, написанный без использования воз- можностей массивов numpy и других библиотек, будет уступать по скорости ис- полнения компилируемым языкам и JIT-компилируемым. Кроме того, интерпре- татор Python не обеспечивает распараллеливание потоков по ядрам процессора.
Для ускорения исполнения вы можете пользоваться версией JIT-компилятора
PyPy для Python. Для решения проблемы блокировки и возможности исполне- ния потоков на разных ядрах разрабатывается pypy-stm.
1.2
Начало работы
Перед началом работы с языком Python следует кратко изучить PEP8 –
руководство по написанию кода на Python (
https://pythonworld.ru/osnovy/pep-
8-rukovodstvo-po-napisaniyu-koda-na-python.html#id2
).
Некоторые IDE обеспечивают автоматическую проверку на PEP8. Реко- мендуется использовать, например, PyCharm, более простые IDE – Spyder, Idle.
Старайтесь при написании кода соблюдать нижеприведенные соглаше- ния.
7
Используйте четыре пробела для отступа (при выполнении лабораторных работ можно использовать и табуляцию, но этот способ не рекомендуется).
Длинные строки следует опускать ниже знаков: (, {, [, а следующие начинать после этих знаков сверху: foo = long_function_name(var_one, var_two, var_three, var_four) либо foo = long_function_name( var_one, var_two, var_three, var_four
)
Имена классов используют соглашение CapitalizedWords (слова с заглав- ными буквами, или CapWords, или CamelCase).
Замечание: когда вы используете аббревиатуры в таком стиле, пишите все буквы аббревиатуры заглавными – HTTPServerError.
Имена функций и переменных должны состоять из строчных букв, а слова разделяться символами подчеркивания: lower_case_with_underscores.
Это необходимо для удобочитаемости.
Константы следует представлять в формате
UPPERCASE_WITH_UNDERSCORES
(слова из заглавных букв с подчеркива- ниями).
1.3
Установка Python и настройка environment
Процедуры установки потребуют наличия операционной системы Linux либо установки виртуальной машины Linux на VirtualBox. Способы установки
VirtualBox можно найти на различных сайтах, дадим лишь краткое указание.
Прежде чем устанавливать VirtualBox в вашу систему Windows, зайдите в BIOS компьютера или ноутбука и в разделе «Настройки CPU» включите под- держку виртуализации. На странице загрузки официального сайта https://www.virtualbox.org/
выберите последнюю версию Oracle VM VirtualBox.
Например, VirtualBox для Windows и других платформ можно скачать по ссылке:
8 https://www.oracle.com/virtualization/technologies/vm/downloads/virtualbox- downloads.html
Дальше необходимо запустить установку и следовать указаниям.
Скачайте образ диска с операционной системой Linux. Предлагаем ска- чать десктоп-версию операционной системы Ubuntu. В частности, скачать ISO- образ операционной системы версии 20.04 можно на сайте: https://releases.ubuntu.com/20.04/
На базе скачанного образа создадим виртуальную машину. Выполним в VirtualBox «машина → создать».
Выберем папку для сохранения виртуальной машины и тип операционной системы. затем – «Создать новый виртуальный жесткий диск». Можно выбрать гораздо меньше оперативной памяти, например 2 или 4 Гб (рис. 1.1).
Рис. 1.1 – Установка размера оперативной памяти для ОС и создание виртуального жесткого диска
9
Далее появится окно создания виртуального диска. Можно выбрать VDI- диск, это родной для системы VirtualBox тип виртуальных дисков, указать раз- мер, например, 20 Гб, динамически расширяющийся.
В окошке созданных машин можно установить различные настройки
(
рис. 1.2).
Рис. 1.2 – Настройки виртуальной машины
Во вкладке «Общие папки» можно выбрать разделяемые с хостовой опе- рационной системой каталоги. Для этого следует нажать на папку с зеленым плюсом (рис. 1.3).
Рис. 1.3 – Добавление разделяемых папок
10
Во вкладке «Носители» можно добавить дисковый носитель, в частности наш скачанный ISO-образ для загрузки и установки операционной системы.
Для этого нажимаем на плюсик на фоне круглого диска (рис. 1.4).
Рис. 1.4 – Добавление устройства диска или другого носителя информации
Затем жмем «Добавить» (рис. 1.5) и выбираем скачанный нами ISO-образ.
Рис. 1.5 – Добавлении ISO-образа
После этого в окне VirtualBox выбираем нашу виртуальную машину и нажимаем «Запустить».
Далее появится окно установки операционной системы Ubuntu (рис. 1.6).
Следуйте указаниям установщика. Выберете стандартную установку, задайте имя и пароль пользователя.
11
Рис. 1.6 – Окно установки Ubuntu
После установки в меню устройства можно выбрать «Подключить образ диска дополнений гостевой ОС».
Ubuntu 20.04 и другие версии Debian Linux поставляются с предустанов- ленным Python 3. Чтобы посмотреть версию Python, в терминале Ubuntu запу- стите команду: python3 -V
Если установлена версия Python 3.8, то все нормально, можно продол- жить. Если Python не установлен, его нужно установить, причем именно вер- сию 3.8.
Если все-таки оказалось, что Python 3.8 не установлен или вы устанавли- ваете его не на виртуальной машине Ubuntu 20.04, то необходимо проделать следующие шаги:
•
Обновить список пакетов и установить необходимые библиотеки:
sudo apt update sudo apt install software-properties-common
•
Добавить репозиторий deadsnakes PPA в список источников вашей системы:
sudo add-apt-repository ppa:deadsnakes/ppa
12
•
При появлении запроса нажать Enter.
•
Установить Python 3.8.
sudo apt install python3.8
•
Для управления пакетами установим pip (pip3) – систему управле- ния пакетами Python.
Примеры: pip${version} install some-package-name pip install numpy. pip3.8 install numpy.
Установка для конкретной версии Python и установка numpy.
Выполним команду: sudo apt install -y python3-pip
После этого пройдет установка pip.
1.4
Настройка виртуальной среды
Виртуальные среды позволяют иметь на компьютере изолированное про- странство для проектов Python, гарантируя, что каждый из ваших проектов мо- жет иметь свой собственный набор зависимостей, который не нарушит ни один из других проектов.
Настройка среды программирования дает больший контроль над проек- тами Python и над тем, как обрабатываются разные версии пакетов. Это особен- но важно при работе со сторонними пакетами.
Можно настроить любое количество сред программирования Python.
Каждая среда – это отдельный каталог на вашем компьютере, в котором есть несколько сценариев, позволяющих выполняться приложению в этой отдельной среде.
Сначала нужно установить модуль *venv*, являющийся частью стандарт- ной библиотеки Python 3, чтобы можно было создавать виртуальные среды.
Установим venv, набрав: sudo apt-get install -y python3-venv
13
После установки настроим отдельную среду для нашего приложения.
Сначала создадим каталог, где мы будем размещать среды и зайдем в него. mkdir envs cd envs
Далее введем команду для создания виртуальной среды нашего приложе- ния, назовем среду proj1. python3 -m venv proj1
Перейдем в каталог и просмотрим его.
:/envs$ cd proj1
:/envs/proj1$ ls bin include lib lib64 pyvenv.cfg share
Совместная работа этих файлов обеспечивает изоляцию проектов, так что системные файлы и файлы проекта не смешиваются. Будет очень полезно ис- пользовать контроль версий и обеспечить каждому из проектов доступ к кон- кретным пакетам, которые ему необходимы. Python Wheels – это формат гото- вых пакетов для Python, который помогает ускорить разработку программного обеспечения за счет сокращения количества операций компиляции. Он нахо- дится в каталоге share в Ubuntu 20.04.
Чтобы использовать эту среду, ее нужно активировать. Для этого необхо- димо ввести команду, вызывающую скриптactivate (перед этим необходимо вернуться или зайти в папку со средами).
:$ cd ..
:/envs$ source proj1/bin/activate
Для выхода из среды окружения proj1 введите команду deactivate.
(proj1) :/envs$ deactivate
Далее можно опять активировать среду, создать свой первый проект и запустить программу на Python. Саму программу в принципе можно делать, используя любой текстовый редактор. Очевидно, это не совсем удобно, но можно сделать первый проект, используя простой редактор. Запустим терми- нал, если вы его еще не запустили, и создадим какой-нибудь каталог для наших проектов, например, progs.
$mkdir progs
$cd progs
14
Активируем среду.
$source ../envs/proj1/bin/activate
Создадим проект hello, находясь в окружении.
$mkdir hello
$cd hello
$nano hello.py
Внутри файла запишем строчку: print("Hello world")
Сохраним файл (Ctrl+O) и запустим его из командной строки интерпрета- тором Python.
$python hello.py.
Добавим в наш файл следующие строчки: import numpy as np print("Hello world") x = np.array([1,2,3,4]) print(x)
И запустим наш файл, при этом появится сообщение о том, что модуль numpy неизвестен. Его мы установим в нашем окружении с использованием pip.
$pip3 install numpy или
$pip install numpy
И вызов дает нам ожидаемый результат.
$python hello.py
Hello world
[1 2 3 4]
Конечно, писать код в подобном редакторе неудобно, поэтому установим
IDE
. К сожалению, в виртуальной машине IDE может работать медленно, но вы можете продолжить работать в текстовом редакторе либо использовать более легковесные IDE, а не предлагаемую нами далее среду PyCharm. Можете уста- новить свободно распространяемую версию PyCharm в установщике Ubuntu для обучения и изучения либо профессиональную версию.
Зайдем в центр приложений Ubuntu Software и выберем PyCharm EDU
(
рис. 1.7).
15
Рис. 1.7 – Выбор IDE PyCharm в Ubuntu Software
Запустим PyCharm (рис. 1.8) и зададим конфигурацию проекта.
Рис. 1.8 – Конфигурация, создание и открытие проекта
В меню Configure можно установить еще одну среду.
Configure
→ Settings → PythonIntepreter → Add
Можно выбрать и уже существующую среду, созданную нами (рис. 1.9,
1.10).
16
Рис. 1.9 – Выбор собственной среды окружения
Далее создадим свой проект с указанной средой окружения.
Рис. 1.10 – Создание проекта в указанной среде окружения
Вы можете выбрать другое название проекта и любую среду.
17
После создания проекта при выборе вкладки terminal в среде PyCharm отобразится командная строка с соответствующей средой proj1.
Выбрав File → Settings, можно посмотреть вкладку Project: PythonInter- preter
, здесь мы увидим установленные библиотеки, в том числе numpy и pip.
Выбрав File → New… и создав файл hello, опять запишем код print("Hello world"
) и запустим программу с помощью зеленого треугольника.
Выберем в окне IDE PyCharm терминал и в нашем окружении установим библиотеки, которые нам понадобятся для разработки веб-приложения.
1.5
Первые шаги в Python
Прежде чем приступать к лабораторной работе, связанной с веб- приложением, предлагается выполнить приведенные ниже задания. Подготови- тельная работа поможет при выполнении заданий по вариантам при создании веб-приложения.
В консоли попробуйте запустить представленные команды.
Информация о базовых операциях и типах.
#
Типы данных, int, float, bool, str
>>>
type
(
int
)
<
1 2 3 4 5 6 7
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)
Факультет дистанционного обучения (ФДО)
А. Я. Суханов
РАЗРАБОТКА ВЕБ-СЕРВИСОВ
ДЛЯ НАУЧНЫХ И ПРИКЛАДНЫХ ЗАДАЧ
Методические указания
по выполнению лабораторных работ
для студентов, обучающихся с применением
дистанционных образовательных технологий
Томск 2021
Корректор: А. Н. Миронова
Суханов А. Я.
Разработка веб-сервисов для научных и прикладных задач : ме- тодические указания по выполнению лабораторных работ для студен- тов, обучающихся с применением дистанционных образовательных технологий / А. Я. Суханов. – Томск : ФДО, ТУСУР, 2021. – 119 с.
©
Суханов А. Я., 2021
© Оформление.
ФДО, ТУСУР, 2021
3
ОГЛАВЛЕНИЕ
Введение ....................................................................................................................... 5 1 Основные возможности Python ............................................................................... 6 1.1 Кратко о языке Python ........................................................................................ 6 1.2
Начало работы .................................................................................................... 6 1.3 Установка Python и настройка environment ..................................................... 7 1.4 Настройка виртуальной среды ........................................................................ 12 1.5 Первые шаги в Python ...................................................................................... 17 1.6
Использование Python для работы с изображениями .................................. 25 1.7 Возможности Python для обработки данных ................................................ 37 1.7.1 Примеры ресурсов с открытыми данными ............................................. 38 1.7.2 Обработка Kaggle датасетов ..................................................................... 39 1.7.3 Изучение возможностей доступа к API сервиса data.gov.ru .................. 58 2 Лабораторная работа № 1 «Разработка веб-приложения на Python» ................ 65 2.1 Непрерывная интеграция для GitHub ............................................................ 65 2.2 Примеры веб-сервисов для непрерывной интеграции ................................. 66 2.3 Что такое YAML ............................................................................................... 67 2.4 Создание проекта веб-приложения на Flask ................................................. 68 2.5 Продолжение простейшего эксперимента с проектом Flask ....................... 70 2.5.1 Что такое WSGI .......................................................................................... 71 2.5.2 Примеры WSGI-серверов и Gunicorn ...................................................... 71 2.5.3 Запуск проекта с использованием Gunicorn ........................................... 72 2.5.4 Ремарка о тестировании ............................................................................ 74 2.6 Краткое знакомство с шаблонами Flask ......................................................... 74 2.7 Изучение шаблонов, форм .............................................................................. 76 2.8 Добавление нейронной сети для классификации ......................................... 80 2.9
Добавление капчи ............................................................................................ 82 2.10 Добавление возможности классификации изображения ........................... 82 2.11 Дополнительная возможность по возвращению разных документов в зависимости от шаблона .............................................................................. 86
4 2.12 Деплой на Heroku ........................................................................................... 89 2.13 Задание на лабораторную работу № 1 ......................................................... 92 3 Лабораторная работа № 2 «Разработка веб-сервиса» ......................................... 97 3.1 Создание отдельной среды окружения для проекта Flasgger и документирования Swagger ......................................................................... 97 3.2 Использование библиотеки flask_restplus для документирования веб-сервиса ..................................................................................................... 104 3.3 Задание на лабораторную работу № 2 ......................................................... 111 4 Требования к содержанию и оформлению отчета ............................................ 113
Литература ................................................................................................................ 114
Приложение А Примеры графиков ........................................................................ 115
Приложение Б Образец титульного листа ............................................................ 119
5
ВВЕДЕНИЕ
Данные методические указания разработаны с учетом требований ФГОС
ВО для направления подготовки 09.03.01 «Информатика и вычислительная тех- ника», они предназначены для выполнения лабораторных работ по дисциплине
«Разработка веб-сервисов для научных и прикладных задач».
Цель лабораторных работ: получение навыков разработки веб- приложений и веб-сервисов с использованием одного из фреймворков и типо- вых научных библиотек для решения простейших задач по обработке данных.
Лабораторные работы выполняются в соответствии с порядком, описан- ным в методических указаниях.
Выбор варианта лабораторной работы осуществляется по общим прави- лам с использованием следующей формулы:
V = (N × K) div 100, где V – искомый номер варианта,
N – общее количество вариантов,
K – код варианта, div – целочисленное деление.
При V = 0 выбирается максимальный вариант.
6
1
ОСНОВНЫЕ ВОЗМОЖНОСТИ PYTHON
1.1
Кратко о языке Python
Python является интерпретируемым языком, в силу этого многое можно выполнять в командной строке. Достоинством Python является достаточно простое написание кода, при этом код выглядит лаконичным. Программу или проект проще всего реализовать на Python, можно быстро получить первые ре- зультаты, потому язык изначально распространился в научной среде.
Для выделения исполнимых блоков используются отступы, обычно четы- ре пробела, нет необходимости в завершающих или выделяющих программный блок символах: {} или begin end. На Python реализовано множество пакетов об- работки данных, библиотек машинного обучения, нейронных сетей. Python яв- ляется третьим по популярности языком.
Наверное, основным недостатком Python является то, что код для выпол- нения простейших вычислительных задач, написанный без использования воз- можностей массивов numpy и других библиотек, будет уступать по скорости ис- полнения компилируемым языкам и JIT-компилируемым. Кроме того, интерпре- татор Python не обеспечивает распараллеливание потоков по ядрам процессора.
Для ускорения исполнения вы можете пользоваться версией JIT-компилятора
PyPy для Python. Для решения проблемы блокировки и возможности исполне- ния потоков на разных ядрах разрабатывается pypy-stm.
1.2
Начало работы
Перед началом работы с языком Python следует кратко изучить PEP8 –
руководство по написанию кода на Python (
https://pythonworld.ru/osnovy/pep-
8-rukovodstvo-po-napisaniyu-koda-na-python.html#id2
).
Некоторые IDE обеспечивают автоматическую проверку на PEP8. Реко- мендуется использовать, например, PyCharm, более простые IDE – Spyder, Idle.
Старайтесь при написании кода соблюдать нижеприведенные соглаше- ния.
7
Используйте четыре пробела для отступа (при выполнении лабораторных работ можно использовать и табуляцию, но этот способ не рекомендуется).
Длинные строки следует опускать ниже знаков: (, {, [, а следующие начинать после этих знаков сверху: foo = long_function_name(var_one, var_two, var_three, var_four) либо foo = long_function_name( var_one, var_two, var_three, var_four
)
Имена классов используют соглашение CapitalizedWords (слова с заглав- ными буквами, или CapWords, или CamelCase).
Замечание: когда вы используете аббревиатуры в таком стиле, пишите все буквы аббревиатуры заглавными – HTTPServerError.
Имена функций и переменных должны состоять из строчных букв, а слова разделяться символами подчеркивания: lower_case_with_underscores.
Это необходимо для удобочитаемости.
Константы следует представлять в формате
UPPERCASE_WITH_UNDERSCORES
(слова из заглавных букв с подчеркива- ниями).
1.3
Установка Python и настройка environment
Процедуры установки потребуют наличия операционной системы Linux либо установки виртуальной машины Linux на VirtualBox. Способы установки
VirtualBox можно найти на различных сайтах, дадим лишь краткое указание.
Прежде чем устанавливать VirtualBox в вашу систему Windows, зайдите в BIOS компьютера или ноутбука и в разделе «Настройки CPU» включите под- держку виртуализации. На странице загрузки официального сайта https://www.virtualbox.org/
выберите последнюю версию Oracle VM VirtualBox.
Например, VirtualBox для Windows и других платформ можно скачать по ссылке:
8 https://www.oracle.com/virtualization/technologies/vm/downloads/virtualbox- downloads.html
Дальше необходимо запустить установку и следовать указаниям.
Скачайте образ диска с операционной системой Linux. Предлагаем ска- чать десктоп-версию операционной системы Ubuntu. В частности, скачать ISO- образ операционной системы версии 20.04 можно на сайте: https://releases.ubuntu.com/20.04/
На базе скачанного образа создадим виртуальную машину. Выполним в VirtualBox «машина → создать».
Выберем папку для сохранения виртуальной машины и тип операционной системы. затем – «Создать новый виртуальный жесткий диск». Можно выбрать гораздо меньше оперативной памяти, например 2 или 4 Гб (рис. 1.1).
Рис. 1.1 – Установка размера оперативной памяти для ОС и создание виртуального жесткого диска
9
Далее появится окно создания виртуального диска. Можно выбрать VDI- диск, это родной для системы VirtualBox тип виртуальных дисков, указать раз- мер, например, 20 Гб, динамически расширяющийся.
В окошке созданных машин можно установить различные настройки
(
рис. 1.2).
Рис. 1.2 – Настройки виртуальной машины
Во вкладке «Общие папки» можно выбрать разделяемые с хостовой опе- рационной системой каталоги. Для этого следует нажать на папку с зеленым плюсом (рис. 1.3).
Рис. 1.3 – Добавление разделяемых папок
10
Во вкладке «Носители» можно добавить дисковый носитель, в частности наш скачанный ISO-образ для загрузки и установки операционной системы.
Для этого нажимаем на плюсик на фоне круглого диска (рис. 1.4).
Рис. 1.4 – Добавление устройства диска или другого носителя информации
Затем жмем «Добавить» (рис. 1.5) и выбираем скачанный нами ISO-образ.
Рис. 1.5 – Добавлении ISO-образа
После этого в окне VirtualBox выбираем нашу виртуальную машину и нажимаем «Запустить».
Далее появится окно установки операционной системы Ubuntu (рис. 1.6).
Следуйте указаниям установщика. Выберете стандартную установку, задайте имя и пароль пользователя.
11
Рис. 1.6 – Окно установки Ubuntu
После установки в меню устройства можно выбрать «Подключить образ диска дополнений гостевой ОС».
Ubuntu 20.04 и другие версии Debian Linux поставляются с предустанов- ленным Python 3. Чтобы посмотреть версию Python, в терминале Ubuntu запу- стите команду: python3 -V
Если установлена версия Python 3.8, то все нормально, можно продол- жить. Если Python не установлен, его нужно установить, причем именно вер- сию 3.8.
Если все-таки оказалось, что Python 3.8 не установлен или вы устанавли- ваете его не на виртуальной машине Ubuntu 20.04, то необходимо проделать следующие шаги:
•
Обновить список пакетов и установить необходимые библиотеки:
sudo apt update sudo apt install software-properties-common
•
Добавить репозиторий deadsnakes PPA в список источников вашей системы:
sudo add-apt-repository ppa:deadsnakes/ppa
12
•
При появлении запроса нажать Enter.
•
Установить Python 3.8.
sudo apt install python3.8
•
Для управления пакетами установим pip (pip3) – систему управле- ния пакетами Python.
Примеры: pip${version} install some-package-name pip install numpy. pip3.8 install numpy.
Установка для конкретной версии Python и установка numpy.
Выполним команду: sudo apt install -y python3-pip
После этого пройдет установка pip.
1.4
Настройка виртуальной среды
Виртуальные среды позволяют иметь на компьютере изолированное про- странство для проектов Python, гарантируя, что каждый из ваших проектов мо- жет иметь свой собственный набор зависимостей, который не нарушит ни один из других проектов.
Настройка среды программирования дает больший контроль над проек- тами Python и над тем, как обрабатываются разные версии пакетов. Это особен- но важно при работе со сторонними пакетами.
Можно настроить любое количество сред программирования Python.
Каждая среда – это отдельный каталог на вашем компьютере, в котором есть несколько сценариев, позволяющих выполняться приложению в этой отдельной среде.
Сначала нужно установить модуль *venv*, являющийся частью стандарт- ной библиотеки Python 3, чтобы можно было создавать виртуальные среды.
Установим venv, набрав: sudo apt-get install -y python3-venv
13
После установки настроим отдельную среду для нашего приложения.
Сначала создадим каталог, где мы будем размещать среды и зайдем в него. mkdir envs cd envs
Далее введем команду для создания виртуальной среды нашего приложе- ния, назовем среду proj1. python3 -m venv proj1
Перейдем в каталог и просмотрим его.
:/envs$ cd proj1
:/envs/proj1$ ls bin include lib lib64 pyvenv.cfg share
Совместная работа этих файлов обеспечивает изоляцию проектов, так что системные файлы и файлы проекта не смешиваются. Будет очень полезно ис- пользовать контроль версий и обеспечить каждому из проектов доступ к кон- кретным пакетам, которые ему необходимы. Python Wheels – это формат гото- вых пакетов для Python, который помогает ускорить разработку программного обеспечения за счет сокращения количества операций компиляции. Он нахо- дится в каталоге share в Ubuntu 20.04.
Чтобы использовать эту среду, ее нужно активировать. Для этого необхо- димо ввести команду, вызывающую скриптactivate (перед этим необходимо вернуться или зайти в папку со средами).
:$ cd ..
:/envs$ source proj1/bin/activate
Для выхода из среды окружения proj1 введите команду deactivate.
(proj1) :/envs$ deactivate
Далее можно опять активировать среду, создать свой первый проект и запустить программу на Python. Саму программу в принципе можно делать, используя любой текстовый редактор. Очевидно, это не совсем удобно, но можно сделать первый проект, используя простой редактор. Запустим терми- нал, если вы его еще не запустили, и создадим какой-нибудь каталог для наших проектов, например, progs.
$mkdir progs
$cd progs
14
Активируем среду.
$source ../envs/proj1/bin/activate
Создадим проект hello, находясь в окружении.
$mkdir hello
$cd hello
$nano hello.py
Внутри файла запишем строчку: print("Hello world")
Сохраним файл (Ctrl+O) и запустим его из командной строки интерпрета- тором Python.
$python hello.py.
Добавим в наш файл следующие строчки: import numpy as np print("Hello world") x = np.array([1,2,3,4]) print(x)
И запустим наш файл, при этом появится сообщение о том, что модуль numpy неизвестен. Его мы установим в нашем окружении с использованием pip.
$pip3 install numpy или
$pip install numpy
И вызов дает нам ожидаемый результат.
$python hello.py
Hello world
[1 2 3 4]
Конечно, писать код в подобном редакторе неудобно, поэтому установим
IDE
. К сожалению, в виртуальной машине IDE может работать медленно, но вы можете продолжить работать в текстовом редакторе либо использовать более легковесные IDE, а не предлагаемую нами далее среду PyCharm. Можете уста- новить свободно распространяемую версию PyCharm в установщике Ubuntu для обучения и изучения либо профессиональную версию.
Зайдем в центр приложений Ubuntu Software и выберем PyCharm EDU
(
рис. 1.7).
15
Рис. 1.7 – Выбор IDE PyCharm в Ubuntu Software
Запустим PyCharm (рис. 1.8) и зададим конфигурацию проекта.
Рис. 1.8 – Конфигурация, создание и открытие проекта
В меню Configure можно установить еще одну среду.
Configure
→ Settings → PythonIntepreter → Add
Можно выбрать и уже существующую среду, созданную нами (рис. 1.9,
1.10).
16
Рис. 1.9 – Выбор собственной среды окружения
Далее создадим свой проект с указанной средой окружения.
Рис. 1.10 – Создание проекта в указанной среде окружения
Вы можете выбрать другое название проекта и любую среду.
17
После создания проекта при выборе вкладки terminal в среде PyCharm отобразится командная строка с соответствующей средой proj1.
Выбрав File → Settings, можно посмотреть вкладку Project: PythonInter- preter
, здесь мы увидим установленные библиотеки, в том числе numpy и pip.
Выбрав File → New… и создав файл hello, опять запишем код print("Hello world"
) и запустим программу с помощью зеленого треугольника.
Выберем в окне IDE PyCharm терминал и в нашем окружении установим библиотеки, которые нам понадобятся для разработки веб-приложения.
1.5
Первые шаги в Python
Прежде чем приступать к лабораторной работе, связанной с веб- приложением, предлагается выполнить приведенные ниже задания. Подготови- тельная работа поможет при выполнении заданий по вариантам при создании веб-приложения.
В консоли попробуйте запустить представленные команды.
Информация о базовых операциях и типах.
#
Типы данных, int, float, bool, str
>>>
type
(
int
)
<
class
'type'
>
>>>
type
(
2+2
)
<
class
'int'
>
>>> str1 =
"Hello"
>>>
(str1)
Hello
>>> type
(str1)
<
class
'str'
>
>>> d = (
1
+2j)
>>> type
(d)
<
class
'complex'
>
>>> complex
(
2.0
)
(
2
+0j)
18
В Python, как вы уже, может быть, догадались, все переменные являются ссылками на объект. Если объект не используется, т. е. переменные не ссыла- ются на этот объект, то объект может быть удален из памяти, обычно сборщи- ком мусора. Например, CLR или JVM (являющиеся JIT-компиляторами, испол- няющими байт-код) выполняют эту работу.
При написании кода на Python для начала нужно соблюдать следующие простые правила.
В Python при именовании различаются заглавные и прописные символы.
В названиях переменных не использовать одиночные переменные 0, l.
Название переменных следует начинать знаком _ (например, _x_value), только если они используются как внутренние переменные модуля. Например, при подключении from mod1 import * не будет импортирована переменная
_x_value
, если, конечно, не использовать в модуле mod1 __all__ (позволяющий описать публичные объекты данного модуля).
C
оздайте модуль (Add file). Назовите его mod1.py.
Запишите туда код.
_x_value = 10 y_value = 10
__all__=['_x_value','y_value']
В файл основной программы main.py поместите такой код. import numpy from mod1 import * x = numpy.array([i for i in range(20)]) print(x) print(y_value) print(_x_value)
Попробуйте закомментировать строку с __all__ и посмотреть, что полу- чится.
Подчеркивание после имени переменной используется для отличия от ключевых слов Python. Например: class_, int_, len_, for_.
Попробуйте импортировать модуль mod1 без __all__.
19 import mod1 print(mod1._x_value)
Попробуйте импортировать модуль mod1 таким способом: import mod1 as md print(md._x_value)
Реализуйте примеры в консоли Python.
#
Операции
>>>
flag =
True
>>>
flag
True
>>>
flag+
True
2
>>>
flag
and
False
False
>>>
flag+
False
1
# Возведение в степень
>>>
x =
2
>>>
x
**
10 1024
#Деление нацело
>>>
x =
15
//
2
>>>
x
7
>>>
x =
15
/
2
>>>
x
7.5
#Остаток от деления
>>>
x =
15
%
2
>>>
x
1
#
Ввод строк
>>>
str
=
input
(
"Input any value: "
)
Input any value:
45
>>>
val=
int
(
input
(
"Input any value: "
))
Input any value:
45
20
>>>
str
'45'
>>>
val
45
#Форматный вывод (Оператор % для форматирования) строка с форматом % значения
>>>
(
"%03d:%10s %04d
\n
"
%
(
flag,
str
,val
))
001
:
45 0045
>>>
(
"%s:%15s %04d"
%
(
flag,
str
,val
))
True
:
45 0045
>>>
c=
41
>>>
f=
56.12
# 15 или 20 в примере – сколько всего отводится под вывод вещественного числа
>>>
(
"%c %15.3f %020.5e"
%
(
c,f,f
))
)
56.120 0000000005
.61200e
+01
>>>
str
=
"Hello world"
>>>
len
(
str
)
11
Метод формат
>>>
s =
"{}"
.format
(
str
)
>>>
s
'Hello world'
>>>
s =
"{0} {1} {2}"
.format
(
str
,
14.24
,
True
)
>>>
s
'Hello world 14.24 True'
>>>
(
"{1:10.2f} {2} {0}"
.format
(
str
,
14.24
,
True
))
14.24
True
Hello world
(
"{0:^15}
\n
"
.format
(
"*"
)
,
"{0:^14}
\n
"
.format
(
"***"
)
,
"{0:^14}"
.format
(
"*****"
))
*
***
*****
>>>
(
"{0:^15}
\n
{1:^15}
\n
{2:^15}"
.format
(
"*"
,
"***"
,
"*****"
))
*
21
***
*****
>>>
(
"{0:^15}
\n
{1:^15}
\n
{2:^15}"
.format
(
"*"
,
"*"
*
3
,
"*"
*
5
))
*
***
*****
# f-
строки Python 3.6+
join – склеивание списка в строку. split разбиение строки на элементы списка.
>>>
(
""
.join
([
f
"{'*'*(i*2+1):^15}
\n
"
for
i
in
range
(
5
)]))
*
***
*****
*******
*********
>>>
x =
9
>>>
(
""
.join
([
f
"{'*'*(i*2+1):^{x*2-1}}
\n
"
for
i
in
range
(
x
)]))
>>>
treg =
lambda
x,y:
""
if
x==
-1
else
treg
(
x
-1
,y
)
+f
"{'*'*(x*2+1):^{y}}
\n
"
(
treg
(
7
,
7
*
2+1
))
Реализуйте программу для работы с графиками.
Для отображения графиков при запуске проекта в PyCharm произведите установку (если ваша операционная система Linux):
#sudo apt install libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev gir1.2-gtk-3.0 sudo apt-get install pkg-config libcairo2-dev libgirepository1.0-dev pip3 install pycairo pip3 install PyGObject
Изучите внимательно код и что он делает.
import
numpy
as
np
import
matplotlib
.
pyplot
as
plt
from
math
import
*
(
"Hello world"
)
# константа обозначается заглавной буквой
N
=
100
22 x
=
np
.
array
([
i
for
i
in
range
(
N
)])
# массив из N элементов x
=
x
*
pi
/(
N
-
1
)
# вектор умножаем на скаляр
# создаем сетку от 0 до pi включительно с количеством элементов N
x1
=
np
.
linspace
(
0
,
pi
,
N
)
# используем для того же функцию
# В узлах сетки рассчитываем значения функций sin и cos y
=
np
.
sin
(
x
)
y1
=
np
.
cos
(
x1
)
ax
=
plt
.
gca
()
# ссылка на текущий объект axes plt
.
plot
(
x
,
y
)
# создаем обычный график sin plt
.
plot
(
x1
,
y1
)
# создаем обычный график cos ax
.
set_xlabel
(
"angle, rad"
)
ax
.
set_ylabel
(
"sin, cos function"
)
plt
.
show
()
x2
=
x1
-
x1
.
max
()/
2
y2
=
x2
*
x2 plt
.
plot
(
x2
,
y2
)
plt
.
show
()
y
=
y1 x_rol
=
np
.
zeros
(
N
)
# копируем срез со сдвигом
# данная операция нужна, если сетка неравномерная x_rol
[
0
:
N
-
1
]
=
x
[
1
:
N
]
xdif
=
x_rol
-
x xdif
[-
1
]=
0.0
#?? как еще можно решить эту проблему integral_rectangle
=
(
y
*
xdif
).
sum
()
y_rol
=
np
.
zeros
(
N
)
# для метода трапеций копируем в массив со сдвигом
# в данном случае это необязательно
# ведь можно реализовать сумму от 1 до N-1
# и добавить первый и последний элемент, так как
# промежуточные суммы все равно совпадают
# попробуйте это показать математически y_rol
[
0
:
N
-
1
]
=
y
[
1
:
N
]
y
[-
1
]
=
0.0
#?? как еще можно решить эту проблему y_sum
=
((
y
+
y_rol
)*
0.5
*
xdif
).
sum
()
integral_trapeze
=
y_sum
(
f"integral by rectangle {
integral_rectangle
}"
)
(
f"integral by trapeze {
integral_trapeze
}"
)
23
# пример работы с модулем time для учета времени работы
import
time t
=
time
.
time
()
y
= []
N
=
10000
z
=
[]
# добавление значений функции в список
for
i
in
range
(
N
):
y
=
y
+[
sin
(
i
*
pi
*
2
/
N
)]
z
.
append
(
y
[
i
])
(
y
)
(
z
)
dt
=
time
.
time
()-
t
(
f'Time {
dt
}'
)
import
numpy
as
np
import
matplotlib
.
pyplot
as
plt
from
math
import
*
(
"Hello world"
)
# константа обозначается заглавной буквой
N
=
100
x
=
np
.
array
([
i
for
i
in
range
(
N
)])
# массив из N элементов x
=
x
*
pi
/(
N
-
1
)
# вектор умножаем на скаляр
# создаем сетку от 0 до pi включительно с количеством элементов N
x1
=
np
.
linspace
(
0
,
pi
,
N
)
# используем для того же функцию
# В узлах сетки рассчитываем значения функций sin и cos y
=
np
.
sin
(
x
)
y1
=
np
.
cos
(
x1
)
ax
=
plt
.
gca
()
# ссылка на текущий объект axes plt
.
plot
(
x
,
y
)
# создаем обычный график sin plt
.
plot
(
x1
,
y1
)
# создаем обычный график cos ax
.
set_xlabel
(
"angle, rad"
)
ax
.
set_ylabel
(
"sin, cos function"
)
plt
.
show
()
x2
=
x1
-
x1
.
max
()/
2
y2
=
x2
*
x2 plt
.
plot
(
x2
,
y2
)
plt
.
show
()
y
=
y1 x_rol
=
np
.
zeros
(
N
)
24
# копируем срез со сдвигом
# данная операция нужна, если сетка неравномерная x_rol
[
0
:
N
-
1
]
=
x
[
1
:
N
]
xdif
=
x_rol
-
x xdif
[-
1
]=
0.0
#?? как еще можно решить эту проблему integral_rectangle
=
(
y
*
xdif
).
sum
()
y_rol
=
np
.
zeros
(
N
)
# для метода трапеций копируем в массив со сдвигом
# в данном случае это необязательно
# ведь можно реализовать сумму от 1 до N-1
# и добавить первый и последний элемент, так как
# промежуточные суммы все равно совпадают
# попробуйте это показать математически y_rol
[
0
:
N
-
1
]
=
y
[
1
:
N
]
y
[-
1
]
=
0.0
#
?? как еще можно решить эту проблему y_sum
=
((
y
+
y_rol
)*
0.5
*
xdif
).
sum
()
integral_trapeze
=
y_sum
(
f"integral by rectangle {
integral_rectangle
}"
)
(
f"integral by trapeze {
integral_trapeze
}"
)
# пример работы с модулем time для учета времени работы
import
time t
=
time
.
time
()
y
=[]
N
=
10000
z
=
[]
# добавление значений функции в список
for
i
in
range
(
N
):
y
=
y
+[
sin
(
i
*
pi
*
2
/
N
)]
z
.
append
(
y
[
i
])
(
y
)
(
z
)
dt
=
time
.
time
()-
t
(
f'Time {
dt
}'
)
Лучше оформить расчет интегралов в виде функций. Представим код реа- лизующий расчет: import time import numpy import math
25
# интеграл с использованием массивов numpy def integral_np
(
x
,
f
)
: return
((
f
[
0
:-
1
]
+
f
[
1
:
])
*
(
x
[
1
:
]
- x
[
0
:-
1
])
*
0.5
).
sum
()
# интеграл стандартным способом def integral
(
x
,
f
)
: s
=
0.0 for i in range
(
min
(
len
(
x
),
len
(
f
))
-
1
)
: s
= s
+
(
f
[
i
+
1
]
+
f
[
i
])
*
(
x
[
i
+
1
]
- x
[
i
])
*
0.5 return s
N
=
10000
# задаем функцию по которой ведется расчет x
= numpy array
([
i
*
math pi
/
N for i in range
(
N
)]) f
= numpy sin
(
x
)
# выводим значение интеграла и время расчета t
= time time
(
integral_np
(
x
,
f
)) dt
= time time
()
- t print
(
f"Время работы равно:
{
dt
}
"
)
# выводим значение интеграла и время расчета
# расчет интеграла обычным способом t
= time time
(
integral
(
x
,
f
)) dt
= time time
()
- t print
(
f"Время работы равно:
{
dt
}
"
)
1.6
Использование Python для работы с изображениями
Целью данного параграфа является знакомство с Google Colab и изучение основных возможностей numpy, простейших функций обработки изображений и использования графиков.
Изучение данного материала поможет вам освоить в дальнейшем совре- менные библиотеки машинного обучения, библиотеки для работы с нейронны- ми сетями на Python, а также реализовать веб-приложение по заданию.
Обычный текст, набранный черным шрифтом, следует выполнять после- довательно, изучая основные возможности инструментария.
Текст, выделенный бирюзовым цветом, – для самостоятельного освоения и принятия к сведению.
Текст, выделенный оранжевым цветом, – для самостоятельного исполне- ния и реализации.
26
Текст, отмеченный звездочкой, – для тех, кому хочется выполнить допол- нительное задание (опционально).
Зайдите на сайт https://colab.research.google.com/
(перед этим зарегистри- руйтесь, если необходимо, в Google). Затем в меню переименуйте текущий
NoteBook.
File
→ Rename
Назовите свой проект. Введите код в соответствующую ячейку для кода
(
рис. 1.11).
Рис. 1.11 – Ячейка Cell в Colab
В Runtime можно использовать Change Runtime type для смены вычисли- тельного устройства на GPU или TPU. Выберите Python2 или Python3.
Нажав + Code, можно создать новую ячейку (Cell), запустить код или ко- манды, в том числе запустить сам Python.
Можно установить непосредственно нужный пакет. Не забывайте перед командой ставить восклицательный знак (рис. 1.12).
Рис. 1.12 – Запуск команды из командной строки для установки пакета