Вы находитесь на странице: 1из 12

Федеральное государственное бюджетное образовательное учреждение

высшего образования
«Уфимский государственный авиационный технический университет»

Общенаучный факультет
Кафедра ВВТиС

ОТЧЕТ
по производственной практике

Группа МКН-314 Фамилия И.О. Подпись Дата Оценка

Студент Морозов И.К.

Руководитель
Ахметдинов Р.Ф.
от базы практики

Руководитель от
Ямилева А.М.
университета

Уфа 2021
Федеральное государственное бюджетное образовательное учреждение
высшего образования
«Уфимский государственный авиационный технический университет»
Кафедра высокопроизводительных вычислительных технологий и систем

ЗАДАНИЕ
на производственную практику

Студент: Морозов Илья Константинович Группа: МКН-314


Период практики: 28.06.2021 – 11.07.2021
База практики: Информационный центр МВД по РБ
Руководитель от базы практики: Ахметдинов Р.Ф.
Руководитель от университета: Ямилева А.М.

Тема практики
Параллельное вычисление на Phyton для обработки и анализа данных

Задачи исследования
1. Изучить библиотеку openpyxl Python, для обработки Excel файлов и
библиотеку multiprocessing Python для распараллеливания процесса.

Список рекомендуемой литературы


1. Демьянов, В. В. Геостатистика: теория и практика [Текст] : учебное
пособие/ В. В Демьянов, Е. А. Савельева; под ред. Р. В. Арутюняна; Ин-т
проблем безопасного развития атомной энергетики РАН. — Москва:
Наука, 2010. — 327 с.

Дата выдачи задания Дата окончания работы


28 июня 2021 г. 11 июля 2021 г.

Руководитель от базы практики _________________ Ахметдинов Р.Ф.


Руководитель от университета _________________ Ямилева А.М.
СОДЕРЖАНИЕ

Введение.....................................................................................................................10
1 Теоретическая часть...............................................................................................11
1.1 copenpyxl...........................................................................................................11
1.2 multiprocessing..................................................................................................11
2 Практическая часть................................................................................................12
Заключение................................................................................................................14
Список литературы...................................................................................................15
Приложение А............................................................................................................16
ВВЕДЕНИЕ

Известный инструмент Excel, для организации, анализа и хранения данных


в таблицах применяется и в data science. Вот почему разработчики Python
реализовали способы чтения, записи и управления этими файлами, на тот случай,
если придется иметь дело с этими таблицами.
Если сводная таблица будет ссылаться на большой диапазон ячеек строк,
хранящая результаты расчетов, которые могут быть очень большими, то такие
запросы могут занимать не малое время.
Зная заранее весь сценарий, который будет производиться можно повесить
его на более совершенный алгоритм действий, написанный на языке Phyton.
1 ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

1.1 COPENPYXL
Openpyxl - это библиотека Python для чтения и записи файлов Excel.
Библиотека предлагает вам высокую гибкость в отношении того, как вы
записываете свои данные в файлы Excel, изменяете стили ячеек или используете
режим только для записи. Это делает ее одной из тех библиотек, которую вам
точно необходимо знать, если вы часто работаете с электронными таблицами.

1.2 MULTIPROCESSING
Модуль multiprocessing позволяет вам создавать процессы таким же
образом, как при создании потоков при помощи модуля threading. Суть в том, что,
в связи с тем, что мы теперь создаем процессы, вы можете обойти GIL (Global
Interpreter Lock) и воспользоваться возможностью использования нескольких
процессоров на компьютере. Пакет multiprocessing также включает ряд API,
которых вообще нет в модуле threading. Например, есть очень удобный класс
Pool, который вы можете использовать для параллельного выполнения функции
между несколькими входами. Мы рассмотрим Pool немного позже.
2 ПРАКТИЧЕСКАЯ ЧАСТЬ

Реализована программа, которая одновременно обрабатывает пару файлов


Excel: грузит прайс-лист, получает список всех листов в файле и т.д.
После выполнения подготовительных операций выбираются две пары
сравниваемых столбцов (одинаковое количество), по которым будет идти поиск.
Программа должна найти совпадение по всем выбранным столбцам одной
строки. Первый файл является запросным и, как правило, содержит искомые
списки, поэтому его размер гораздо меньше второго файла – база, по которой
будет производиться поиск.
Каждый запрос помещается в Pool, то есть выполняется на первом
освободившемся ядре – это позволяет распараллелить программу и ускорить ее
выполнение. Если поиск успешен, то выбранные данные записываются в новый
(*.csv) файл.

Рисунок 1 Искомые данные

Рисунок 2 База данных


Рисунок 3 Результат поиска
ЗАКЛЮЧЕНИЕ

Научился пользоваться библиотекой Phyton, позволяющей работать с


данными, представленными в excel таблицах, обрабатывать эти данные и
записывать обратно.
Так же были освоены методы параллельного программирования на языке
Phyton и применены в практической задаче.
СПИСОК ЛИТЕРАТУРЫ

1. Использование Python и Excel для обработки и анализа данных


https://habr.com/ru/company/otus/blog/331998/
2. Модуль multiprocessing на примерах
http://python-3.ru/page/multiprocessing
3. Работа с Excel из Python: Полное руководство с примерами
https://codecamp.ru/blog/python-excel-tutorial/
ПРИЛОЖЕНИЕ А

#названия файлов
path_to_file = '1.xlsx'
path_to_file2 = '2.xlsx'
result_file = 'result.csv'
#номера листов в файле(начиная с нуля)
num_list = 0
num_list2 = 0
#сравниваемые столбцы
Columlist=["A","B","C"]
Columlist2=["A","B","C"]

import openpyxl
import re
import multiprocessing
from multiprocessing.pool import ThreadPool
from joblib import Parallel, delayed
import csv
from multiprocessing import Pool

num_cores = multiprocessing.cpu_count()
pool = ThreadPool(processes=2)
wb = pool.apply_async(openpyxl.load_workbook, (path_to_file,)) # Грузим наш
прайс-лист
wb2 = pool.apply_async(openpyxl.load_workbook, (path_to_file2,))
wb = wb.get()
wb2 = wb2.get()
sheets_list = wb.sheetnames # Получаем список всех листов в файле
sheets_list2 = wb2.sheetnames
sheet_active = wb[sheets_list[num_list]] # Начинаем работать с выбранным листом
sheet_active2 = wb2[sheets_list2[num_list2]]
row_max = sheet_active.max_row # Получаем количество столбцов
row_max2 = sheet_active2.max_row
column_max = sheet_active.max_column # Получаем количество строк
column_max2 = sheet_active2.max_column

print('В файле:', path_to_file, '\n Строк:', row_max, '\n Столбцов:', column_max)


print('В файле:', path_to_file2, '\n Строк:', row_max2, '\n Столбцов:',
column_max2)

def row_par(row):
word_cell = Columlist[0] + str(row)
data_from_cell = sheet_active[word_cell].value
for row2 in range(1, row_max2 + 1):
otvet = []
word_cell2 = Columlist2[0] + str(row2)
result = re.findall(str(data_from_cell),
str(sheet_active2[word_cell2].value))
if len(result):
for colum,colum2 in zip(Columlist,Columlist2):
word_cell = colum + str(row)
word_cell2 = colum2 + str(row2)
result = re.findall(str(sheet_active[word_cell].value),
str(sheet_active2[word_cell2].value))
if len(result): otvet+=result
else:
otvet=[]
break
if len(otvet):
csv_file = open(result_file, 'a', newline='\n')
writer = csv.writer(csv_file, delimiter=';')
writer.writerow(otvet)
csv_file.close()
#print(otvet)
break###???###

if len(Columlist) != len(Columlist2): print('Количество сравниваемых столбцов не


совпадает\n')
else: Parallel(n_jobs=num_cores)(delayed(row_par)(row) for row in range(1,
row_max+1))

Вам также может понравиться