Документ. 1 Обзор среды программирования и введение в Python 4 1 Python 4
Скачать 0.55 Mb.
|
Содержание Введение 3 1 Обзор среды программирования и введение в Python 4 1.1 Python 4 1.2 Преимущества и недостатки Python 5 2 Практическое изучение языка Python 8 2.1 Алгоритм k-means 8 2.2 Алгоритм k_NN 9 2.3 Математическая статистика 9 2.4 Шифр A1Z26 11 Вывод 13 Приложение А (справочное) Листинг реализации алгоритма k-means 14 Приложение Б (справочное) Листинг реализации алгоритма k_NN 15 Приложение В (справочное) Листинг Математическая статистика 17 Приложение Г (справочное) Листинг реализации шифра A1Z26 20 Приложение Д (справочное) Библиографический список 21 Введение 2 #run.py 14 import numpy as np import matplotlib.pyplot as plt from k_means import kmeans X = np.array([ [4, 4], [3, 3], [5, 3], [2, 3], [5, 5], [3, 2], [2, 4], [4, 5], [5, 4], [2, 2]]) m, n= X.shape ans = kmeans(2, X) print(ans) plt.plot(X[:,0], X[:,1], 'bx', ans[:,0], ans[:,1], 'r*', markersize=20) plt.grid() plt.show() 14 Введение Учебная практика дает студентам получить новые практические и теоретические знания, которые могут помочь в дальнейшем учебном процессе. На этой практике будет изучен язык программирования Python, ориентированный на повышение производительности разработчика и читаемости кода. Целью учебной практики является изучение основ языка программирования Python путем разработки приложений и реализации криптографического алгоритма. Python – высокоуровневый язык программирования, используемый в различных сферах IT для разработки приложений самого разнообразного назначения. 1 Основы Python и обзор среды программирования Различные языки программирования обычно доминируют в какой-то отрасли, для работы в которой они хорошо подходят. Но это не значит, что программист ограничен использовать строго определённый инструмент, поэтому любой язык общего назначения, такой как Python, может применять для создания чего-угодно. Но данный язык имеет несколько различных сред разработки, например PyCharm, PyDev, Geany и Spyder. 1.1 Python Python – современный язык программирования высокого уровня. Он представляет собой интерпретируемый объектно-ориентированный язык и интерактивную среду для разработки программ. С его помощью можно разрабатывать приложения с графическим интерфейсом, работать с базами данных, создавать Web-сайты. Python может использоваться для написания прикладных приложений, машинного обучения и многого другого. Язык программирования Python обладает ясным и понятным синтаксисом и хорош для программирования математических вычислений. Python реализован практически во всех операционных системах и большинство его модулей распространяется бесплатно. Python начал разрабатываться во второй половине 80-х гг. прошлого века. Автором Питона стал программист из Нидерландов по имени Гвидо ван Россум. Изначально язык должен был стать объектно-ориентированным. Фактически, это был язык сценариев (скриптовый язык). В феврале 1991 года Россум опубликовал исходный код языка в одной из новостных групп. Основными факторами успеха Python стали удачный выбор места презентации в популярном и массовом профессиональном сообществе в сочетании с действительно простым кодом и широкими возможностями. Впоследствии Гвидо создал специализированный портал PEP, где идет регулярное обсуждение по развитию и улучшению продукта. В 2008 года появилось большое обновление языка – Python 3.0. В этой версии были устранены многие ключевые недоработки в архитектуре ядра. Что было важно – новая версия продукта сохранила полную совместимость с более старыми вариантами. Описания типов переменных в Python нет. Это означает, что при присваивании переменной значения интерпретатор автоматически относит переменную к одному из типов данных. Python содержит такие структуры данных как: 1) Список (list) – похожи на одномерные массивы (список, включающий списки – многомерный массив). 2) Кортеж (tuple) – неизменяемый список. 3) "Массивы" в Python могут содержать данные любого типа, то есть в одном массиве может могут находиться числовые, строковые и другие типы данных [1]. 1.2 Преимущества и недостатки Python Рассмотрим преимущества и недостатки языка программирования Python: 1) В Python не надо заранее объявлять тип переменной, что очень удобно при разработке 2) Хорошая поддержка модульности. Вы можете легко написать свой модуль и использовать его в других программах. 3) Встроенная поддержка Unicode в строках. В Python необязательно писать всё на английском языке, в программах вполне может использоваться ваш родной язык. 4) Поддержка объектно-ориентированного программирования. При этом его реализация в Python является одной из самых понятных. 5) Автоматическая сборка мусора, отсутствие утечек памяти. 6) Интеграция с C/C++, если возможностей Python недостаточно. 7) Понятный синтаксис, способствующий ясному отображению кода. Система функций позволяет создавать код, в котором будет легко разобраться другому человеку в случае необходимости. Также вы сможете научиться читать программы и модули, написанные другими людьми. 8) Огромное количество модулей Python3. В некоторых случаях для написания программы достаточно найти подходящие модули и правильно их скомбинировать. Таким образом, можно работать с уже готовыми элементами, выполняющими различные действия. 2 Практическое изучение языка Python Язык Python на сегодняшний день считается самым универсальным языком программирования. Используя Python, можно программировать почти все. На нём активно программирует большинство IT-компаний. 2.1 Алгоритм k-means Предположим, требуется сформировать две группы студентов (УТ-11 и УТ-12) для обучения на специальности. Известны оценки абитуриентов за тесты по физике и математике. Требуется реализовать алгоритм k-means, с помощью которого выделить два кластера, описывающих формируемые группы студентов. Алгоритм k-means: 1. Задается количество кластеров k, которые требуется обнаружить. 2. Центры кластеров изначально инициализируются случайным образом. 3. Каждый из объектов приписывается к ближайшему кластеру. 4. На основании объектов, вошедших в каждый кластер, центры кластеров пересчитываются. 5. Шаги 3 и 4 повторяются до тех пор, пока центры кластеров не стабилизируются, то есть на очередной итерации объекты будут принадлежать тем же кластерам, что и до этого. Листинг программы представлен в приложении А. Результат работы программы предоставлен на рисунке 1. Рисунок 1– решение первого задания 2.2 Алгоритм k_NN В задании по введенным данным роста и веса определить к какому виду относится особь. Каждый вид характеризуется определенным средним значением роста и веса. В основе kNN лежит следующее правило: объект считается принадлежащим тому классу, к которому относится большинство его ближайших соседей. Под «соседями» здесь понимаются объекты, близкие к исследуемому в том или ином смысле. Для применения метода kNN в пространстве признаков объектов должна быть введена некоторая функция расстояния. Работа программы – классификация особей с помощью реализованного алгоритма предоставлена на рисунке 2. Рисунок 2 – решение второго задания Листинг программы представлен в приложении Б. 2.3 Математическая статистика В задании нужно выполнить несколько заданий представленных ниже: 1) Создать в Python переменную, массив, матрицу с заданными, случайными целочисленными, нулевыми, единичными значениями. 2) Импортировать переменную (матрицу) из текстового структурированного файла (файл создать вручную: разделители столбцов – пробелы). 3) Загрузить одномерные данные из каталога data/1D из файла с расширением .mat согласно варианту. Оценить параметры одномерной случайной величины. Команды сохранить в скрипт. 4) Вывести графики одномерных случайных величин и их плотности распределения. Команды сохранить в скрипт. Подобрать вид распределения одномерной случайной величины и его параметры. На одном графике отобразить случайную величину, уровень среднего значения и дисперсию. 5) Построить и вывести на графике автокорреляцию заданной одномерной случайной величины. Команды сохранить в скрипт. 6) Импортировать из каталога data/NDфайл *.mat с многомерными данными согласно варианта. Первые 5 столбцов считать входными значениями, последний 6 столбец – выходная величина, для которой требуется установить зависимость от входных величин. 7) Построить матрицу корреляции для всех входных и выходных величин. Сделать выводы о зависимости/независимости выходной величины от каждой из входных компонент. Отобразить точечный график для случайных величин, коэффициент корреляции для которых по модулю больше 0.8. На рисунке 3 представлены графики, которые были получены по окончанию выполнения задания, а на рисунке 4 представлен результат работы программы. Листинг программы представлен в приложении В. Рисунок 3 – Графики, полученные в ходе работы Рисунок 4 – Результат работы программы 2.4 Шифр A1Z26 Задание: Реализовать криптографический алгоритм (Шифр A1Z26) при помощи языка Python, не используя библиотечные функции связанные непосредственно с шифрованием. Разработанная программа должна осуществлять шифрование и дешифрование текста в соответствии с вариантом. В приложении должна быть возможность ввода текста (вручную или загрузка из файла – на усмотрение разработчика), ключа (если этого требует алгоритм) и зашифрованного текста. Шифр подстановки— это метод шифрования, в котором элементы исходного открытого текста заменяются зашифрованным текстом в соответствии с некоторым правилом. Элементами текста могут быть отдельные символы (самый распространённый случай), пары букв, тройки букв, комбинирование этих случаев и так далее. Шифрование/дешифрование исходных данных Алгоритм шифрования: каждая буква заменяется своим порядковым номером в алфавите. Процесс расшифрования: нужно прописывать цифры таким образом, чтобы они были отделены друг от друга чертой, дефисом или пробелом, главное, чтобы не были слитные цифры. Листинг индивидуального задания представлен в приложении Г. Номера букв латинского алфавита представлены на рисунке 5. Рисунок 5 – Нумерация латинского алфавита Вывод Данная практическая работа сыграла огромную роль в приобретении практических навыков. В ходе выполнения практики был изучен такой язык программирования, как Python. Он оказался прост в применении и понимание, что облегчило выполнение практической работы. Также были закреплены все полученные теоретические знания по изученной дисциплине, что пригодится в дальнейшем. В ходе летней учебной практики были выполнены следующие задачи: 1) Ознакомление со средой разработки. 2) Изучение базовых возможностей языка программирования Python. 3) Изучение алгоритмов k-means, k_NN, основные программные свойства и методы Математической статистики. 4) Разработка криптографического алгоритма шифрования. 5) Повторение основ оформления научно-исследовательских работ в соответствии с СТП ВятГУ 101-2004 [2]. Приложение А (справочное) Листинг алгоритма k-means # k_means.py import numpy as np def dist(A, B): V = A - B V2 = np.power(V, 2) r = np.sqrt(np.sum(V2)) return r def class_of_each_point(X, centers): m = len(X) k = len(centers) distances = np.zeros((m, k)) for i in range(m): for j in range(k): distances[i, j] = dist(centers[j], X[i]) return np.argmin(distances, axis=1) def kmeans(k, X): m, n = X.shape curr_iteration = prev_iteration = np.zeros(m) centers = np.random.random((k, n)) centers = centers * (np.max(X, axis=0) - np.min(X, axis=0)) + + np.min(X, axis=0) curr_iteration = class_of_each_point(X, centers) while True: prev_iteration = curr_iteration for i in range(k): sub_X = X[curr_iteration == i, :] if len(sub_X) > 0: centers[i, :] = np.mean(sub_X, axis=0) curr_iteration = class_of_each_point(X, centers) if np.all(prev_iteration == curr_iteration): break return centers #run.py import numpy as np import matplotlib.pyplot as plt from k_means import kmeans X = np.array([ [4, 4], [3, 3], [5, 3], [2, 3], [5, 5], [3, 2], [2, 4], [4, 5], [5, 4], [2, 2]]) m, n= X.shape ans = kmeans(2, X) print(ans) plt.plot(X[:,0], X[:,1], 'bx', ans[:,0], ans[:,1], 'r*', markersize=20) plt.grid() plt.show() Приложение Б (справочное) Листинг алгоритма k_NN # kNN.py import numpy as np import math def k_nearest(X, k, obj): Xn = X[:, 0:-1] Xnstd = np.std(Xn,axis=0) Xn = (Xn-Xnmean)/Xnstd objn = (obj-Xnmean)/Xnstd dist_arr =[dist(x, objn) for x in Xn] dist_arr =np.argsort(dist_arr) nearest_classes = X[dist_arr[:k], -1] unique, counts = np.unique(nearest_classes, return_counts=True) object_class = unique[np.argmax(counts)] return object_class def dist(p1, p2): return math.sqrt(sum((p1 - p2)**2)) # run.py import numpy as np from kNN import k_nearest X = np.array([ [33, 21, 1], [43, 13, 1], [18, 22, 1], [38, 34, 1], [62, 118, 2], [59, 137, 2], [95, 131, 2], [83, 110, 2], [185, 155, 3], [193, 129, 3], [164, 135, 3], [205, 131, 3], [145, 55, 4], [168, 35, 4], [135, 47, 4], [138, 66, 4] ]) height = int(input("Введите рост:")) weight = int(input("Введите вес:")) obj = np.array([height, weight]) k = 3 object_class = k_nearest(X, k, obj) monkeys = {1: 'lemur', 2: 'schimpanze', 3: 'gorilla', 4: 'orangutan'} print(monkeys[object_class]) Приложение В (справочное) Листинг Математическая статистика #script.py import numpy as np import matplotlib.pyplot as plt import scipy.io import pprint def task_1(): a = 10 print(a) b = [1, 2, 3] print(b) c = np.array([[1, 2, 3], [4, 5, 6]]) print(c) d = np.random.randint(2, 6, (5, 5)) print(d) e = np.zeros((2, 2)) print(e) f = np.ones((2, 3)) print(f) def task_2(): array = np.loadtxt('C:/Users/m0t0s/test.txt', dtype=np.int32) pprint.pprint(array) def task_3(): data=scipy.io.loadmat ('C:/Users/m0t0s/Practice_Day_Three_Edition/data/1D/var5.mat') data = data['n'] print(np.max(data)) print(np.min(data)) print(np.median(data)) print(np.mean(data)) print(np.var(data)) print(np.std(data)) return data def task_4(data): plt.plot(data) plt.show() mean = np.mean(data) * np.ones(len(data)) var = np.var(data) * np.ones(len(data)) plt.plot(data, 'b-', mean, 'r-', mean-var, 'g--', mean+var, 'g--') plt.grid() plt.show() plt.hist(data, bins=20) plt.grid() plt.show() def autocorrelate(a): n = len(a) cor = [] for i in range(n//2, n//2+n): a1 = a[:i+1] if i< n else a[i-n+1:] a2 = a[n-i-1:] if i< n else a[:2*n-i-1] cor.append(np.corrcoef(a1, a2)[0, 1]) return(cor) def task_5(data): print(data.shape) data = np.ravel(data) print(data.shape) # (1000, ) cor = autocorrelate(data) plt.plot(cor) plt.show() def task_67(): data = scipy.io.loadmat ('C:/Users/m0t0s/Practice_Day_Three_Edition/data/ND/var3.mat') data = data['mn'] n = data.shape[1] corr_matrix = np.zeros((n,n)) for i in range(n): for j in range(n): column1 = data[:,i] column2 = data[:,j] corr_matrix[i, j] = np.corrcoef(column1, column2)[0, 1] np.set_printoptions(precision=2) print(corr_matrix) plt.plot(data[:, 2], data[:, 5], 'b.') plt.grid() plt.show() if __name__ == '__main__': print('Задание #1') task_1() print('Задание #2') task_2() print('Задание #3') data = task_3() print('Задание #4') task_4(data) print('Задание #5') task_5(data) print('Задание #6 и #7') task_67() Приложение Г (справочное) Листинг Шифра A1Z26 def A1Z26_code(codestring): rezult = "" codestring = codestring.lower() codestring = "".join(codestring.split()) for x in range(0, len(codestring)): char = ord(codestring[x]) - 96 if char > 0 and char <= 26: rezult += str(char) + " " return rezult def A1Z26_decode(decodestring): rezult = "" data = decodestring.split() for char in data: char = chr(int(char) + 96) rezult += char return rezult select= input("Введите 0 если хотите зашифровать или 1 для расшифровки:") if select == '0': codestring = input("Введите текст на английском, цифры и пробелы будут проигнорированы:") print("Результат шифрования:") print(A1Z26_code(codestring)) if select == '1': decodestring = input("Введите зашифрованную фразу разделяя цифры пробелами:") print("Результат расшифровки:") print(A1Z26_decode(decodestring)) Список используемой литературы. 1) Доля П.Г. Введение в научный Phyton [Текст]: учебное пособие/П.Г. Доля – Харьков: Харьковский Национальный Университет, 2017. – 43с. 2)Гэддис Т. Начинаем программировать на Python. – 4-е изд.: Пер. с англ. – СПб.: БХВ-Петербург, 2019. – 768 с. 3) СТП ВятГУ 101-2017 Общие требования к оформлению текстовых документов// Киров: ВятГУ, 2017. |