Главная страница
Навигация по странице:

  • 1 Основы Python и обзор среды программирования

  • 1.2 Преимущества и недостатки Python

  • 2 Практическое изучение языка Python

  • 2.1 Алгоритм k

  • 2.2 Алгоритм k _ NN

  • 2.3 Математическая статистика

  • Шифр подстановки

  • Шифрование/дешифрование исходных данных

  • Приложение А (справочное)Листинг алгоритма k - means

  • Приложение Б (справочное)Листинг алгоритма k _ NN

  • Приложение В (справочное)Листинг Математическая статистика

  • Приложение Г (справочное)Листинг Шифра A 1 Z 26

  • Список используемой литературы.

  • Документ. 1 Обзор среды программирования и введение в Python 4 1 Python 4


    Скачать 0.55 Mb.
    Название1 Обзор среды программирования и введение в Python 4 1 Python 4
    Дата28.06.2022
    Размер0.55 Mb.
    Формат файлаdocx
    Имя файлаДокумент.docx
    ТипРеферат
    #619393

    Содержание

    Введение 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.


    написать администратору сайта