Учебная практика (ознакомительная практика) относится к разделу Б2.О.01 блока «Практики» базового учебного плана основной профессиональной образовательной программы по направлению подготовки 09.03.03 «Прикладная информатика» и является видом учебной деятельности, направленной на ознакомление, формирование, закрепление, развитие практических навыков и компетенции в процессе выполнения определенных видов работ, связанных с будущей профессиональной деятельностью. Учебная практика проходила в Московском университете им. С.Ю. Витте (далее - Университете) на кафедре информационных систем
Цель практики
Приобрести начальные профессиональные навыки и практический опыт анализа данных с помощью языка программирования Python; применить, систематизировать и расширить теоретические знания по предметам учебной программы во время прохождения практики в университете.
Задачи практики
Применить теоретические основы как статистики, так и анализа данных на практике, выполнив указанное задание.
Исследование методов, используемых при генерации случайных чисел, и их использование в анализе данных.
Определение целей и задач выполнения анализа сгенерированных данных и структурирование процесса работы.
Обработка и визуализация данных с использованием языка программирования Python совместно с библиотеками Pandas, NumPy и Matplotlib.
Установить и настроить среду разработки PyCharm и установить необходимые библиотеки Python.
Написание и отладка кода Python для генерации данных, вычисления статистических показателей и визуализации результатов.
Анализ сгенерированного набора данных, сбор статистических свойств и визуальных закономерностей.
Выполнение математических операций и статистических расчетов с помощью библиотек Python.
Составление итогового отчета по заданию, включающего описание проведенной работы, полученных результатов и выводов, а также визуализацию данных.
Источниками информации явились открытые информационные базы, информационно-справочные документы, интернет-ресурсы, учебно-методические материалы, размещенные в Электронном Университете, а также информация, представленная на официальном сайте университета в разделе «Сведения об образовательной организации»: https://www.muiv.ru/sveden/.
ОСНОВНАЯ ЧАСТЬ
1 ВЫБОР ПЛАТФОРМЫ И ДАННЫХ
1.1 Выбор платформы разработки и необходимых библиотек
В этом разделе обосновывается выбор платформы разработки и библиотек, используемых для реализации индивидуального задания. Основная цель — обеспечить хорошо функционирующий код и предоставить необходимые возможности анализа и визуализации данных.
1.1.1 Обоснование выбора платформы интерпретатора языка рython
Python[9][12] был выбран в качестве основного языка программирования для разработки по ряду ключевых пунктов:
Простота и читаемость синтаксиса: рython имеет элегантный, лаконичный синтаксис, что помогает быстро писать и понимать код. Это очень важно в академической практике, где основное внимание уделяется пониманию концепций анализа данных, а не строгости программирования.
Широкий спектр библиотек для анализа данных: рython имеет широкий спектр библиотек, специально предназначенных для анализа данных, а также их обработки и визуализации. поэтому проще реализовать, пройдя через цели, что позволяет сосредоточиться на аналитической составляющей самого проекта.
Большое сообщество и поддержка: python имеет одно из самых активных сообществ разработчиков и пользователей, получающих множество учебных пособий, документации и примеров. Таким образом, будет легко решать проблемы и быстро учиться.
Мультипарадигменность: python поддерживает множество парадигм программирования — объектно-ориентированное, функциональное и процедурное программирование среди прочих. Таким образом, можно принять гибкий подход к использованию методов, наиболее подходящих для конкретного проекта, для решения проблем.
1.1.2 Выбор библиотек для анализа данных
Библиотеки, выбранные для эффективной работы над заданием, следующие: Pandas, NumPy, Matplotlib. Каждая из них обладает своими собственными возможностями, которые вместе составляют полный цикл анализа данных от генерации до визуализации.
Рandas
Библиотека Рandas[2] специально создана для работы с табличными данными. Вот некоторые из основных причин, по которым предпочтение отдано Pandas:
Структуры данных[10]: она предоставляет очень удобные структуры данных, такие как Series и DataFrame, с помощью которых очень легко хранить и обрабатывать данные.
Функциональность: подавляющее большинство функций, включающих фильтрацию, агрегацию, объединение и преобразование данных, делают Pandas незаменимым инструментом предварительной обработки.
Производительность: оптимизированные алгоритмы для обработки больших объемов данных обеспечивают невероятную скорость.
Интеграция: Рandas обеспечивает бесшовную интеграцию с другими библиотеками Рython, такими как NumPy и Matрlotlib и другими. Это обеспечивает бесшовную обработку данных для анализа и визуализации.
NumРy
NumРy[2] — это фундаментальная библиотека для научных вычислений на Python. Выбор NumРy стал возможным по следующим причинам:
Массивы и матрицы: NumРy предоставляет мощную структуру для многомерных массивов и матриц; это строительные блоки числовых вычислений.
Скорость: Векторизованные операции в NumPy значительно быстрее, чем сопоставимые традиционные циклические конструкции в Python по электрической скорости для математических вычислений.
Функции: Библиотека облегчает сложные вычисления благодаря большому количеству математических функций и инструментов для линейной алгебры, статистики и ряда других областей науки.
Совместимость: NumPy является основой многих других библиотек Python, из-за чего использование NymPy невероятно эффективно.
Matplotlib[5][6].
Matplotlib, это еще одна библиотека, которая в первую очередь фокусируется на визуализации данных в виде статического графика в Python. Причины использования Matplotlib включают:
Гибкость: Matplotlib предлагает богатый набор диаграмм или графиков, от простых линейных графиков до сложных 3D-визуализаций.
Настраиваемость: высокий уровень контроля над их элементами, цветами, метками и легендами может позволить создавать такие красивые визуальные эффекты.
Интеграция с Pandas и NumPy: эта функция позволяет Matplotlib легко взаимодействовать с данными из любых массивов Pandas Dataframe и NumPy, находящихся в эксплуатации, что делает визуализацию обработанных данных легкой.
Сообщество и документация: у данной библиоткеи очень обширная документация, а также активное сообщество; следовательно, существует очень большая поддержка и многочисленные примеры для реализации различных типов визуальных эффектов.
Получение данных
Предварительный анализ данных
В ходе выполнения индивидуальной работы под названием был выполнен анализ синтетического набора данных, созданного с 1000 случайных целых чисел в диапазоне от отрицательных до положительных в 10000. Основной целью анализа было вычисление некоторых ключевых статистических параметров и их последующая визуализация для понимания распределения данных и их закономерностей.
На первом этапе библиотека NumPy использовалась для случайной генерации целого числа. Функция numpy.random.randint создавала массив из 1000 целых чисел в определенном диапазоне. Впоследствии с помощью Pandas сгенерированные данные были преобразованы в объект Series, чтобы упростить работу с данными и получить доступ к встроенным методам анализа.
import numpy as np
import pandas as pd
# Генерация 1000 случайных целых чисел от -10000 до 10000
np.random.seed(42)
data = np.random.randint(-10000, 10001, 1000)
s = pd.Series(data)
1.2.2 Выбор формата хранения данных
Решение задачи потребовало хранения полученных случайных данных соответствующего формата.Таким образом, выбор правильного формата хранения данных очень важен для обеспечения эффективности обработки, анализа и надлежащей визуализации этой информации в будущем.
Было принято решение сохранять сгенерированные числовые данные в формате CSV (значения, разделенные запятыми). Основные преимущества выбора формата CSV[4]:
Читаемость: информация в формате CSV может быть прочитана и изменена любым текстовым редактором.
Простая интеграция: файлы CSV можно легко интегрировать в рабочие процессы анализа данных, что позволяет загружать и сохранять записи без сложных преобразований.
s.to_csv('data_series.csv', index=False, encoding='utf-8')
print("Данные успешно сохранены в файл 'data_series.csv'.")[4]
1.2.3 Очистка данных от цифрового мусора
Очистка данных от цифрового мусора представляет собой значительную предварительную обработку, направленную на повышение качества и надежности будущих результатов анализа. В рамках задания под цифровым мусором подразумеваются:
Дубликаты: это относится к таким повторяющимся значениям, которые имеют тенденцию искажать аналитическую статистику.
Точки выброса данных: чрезвычайно большие или малые числа, которые не вписываются в общее распределение данных.
Недопустимые данные: значения, выходящие за пределы соответствия предписанному диапазону вместе с ожидаемым типом.
Учитывая текущий анализируемый набор данных из 1000 случайно выбранных целых чисел в диапазоне от -10000 до 10000, наличие любого значимого выброса очень мало из-за равномерного распределения. Но возможность и частичное рассмотрение дубликатов уже были сделаны в разделе 1.2.1. Процесс очистки продемонстрирует обработку дубликатов и проверку аномалий в данных.
outliers = s_unique[(s_unique < lower_bound) | (s_unique > upper_bound)]
outlier_count = outliers.size
print(f"Количество аномальных значений: {outlier_count}")
s_cleaned = s_unique[(s_unique >= lower_bound) & (s_unique <= upper_bound)]
print(f"Размер набора данных после удаления аномальных значений: {s_cleaned.size}")
1.3 Выводы по разделу
Я считаю, что выбор плаформы является неотемлемой частью правильного и компактного кода. Ещё одним важным пунктом является выбор минимального количества нужных библиотек. Основываясь на информации в данном разделе можно сделать следующие выводы (табл.1.2).
Таблица 1.2
Выводы по разделу 1
количественный анализ данных
Получение данных Dataset (данные)
Чтобы проанализировать данные с помощью библиотеки Pandas, сначала необходимо получить и загрузить набор данных. Для индивидуального задания данные были сгенерированы с помощью библиотеки NumPy и сохранены в формате CSV для будущего использования. Ниже приведены шаги по получению и загрузке данных в среду анализа.
Рассчет стандартных числовых характеристик для набора данных Series[7]
В этом подразделе представлена попытка расчета основных статистических характеристик набора данных — попытка, то есть предоставление минимума и максимума, суммы всех чисел, а также стандартного отклонения и количества повторений относительно значений. Крайне необходимый обзор для получения представления о распределении и его вариации может быть получен из этих характеристик.
2.2.1 Минимальное значение[3]:
Минимальное значение в наборе данных определяет наименьшее число, которое можно найти в данных.
minimum_value = s.min()
print(f"Минимальное значение: {minimum_value}")
2.2.2 Подсчет количества повторяющихся элементов[3]:
Подсчет количества повторяющихся значений позволяет измерить, насколько данные уникальны, и найти возможные дубликаты, которые влияют на статистические показатели, определяя количество повторений значений в данных.
duplicate_count = s.duplicated(keep=False).sum()
print(f"Количество повторяющихся значений: {duplicate_count}")
2.2.3. Максимальное значение[3]:
Максимальное значение в наборе данных определяет наибольшее число, присутствующее в данных.
maximum_value = s.max()
print(f"Максимальное значение: {maximum_value}")
2.2.4. Сумма значений[3]:
Сумма всех чисел в наборе данных дает представление об общем объеме данных и может быть полезна для будущих расчетов и сравнений.
sum_value = s.sum()
print(f"Сумма всех значений: {sum_value}")
Выводы по разделу
Количественный анализ данных это неотъемлемая часть прохождения данной практики. Очень важно визуализировать, делать расчёты и выполнять другие преобразования информации при анализе данных. Основываясь на информации в данном разделе можно сделать следующие выводы (табл.2.1):
Таблица 2.1
Выводы по разделу 2
визуализация результатов количествнного анализа данных
Визуализация наборов данных с помощью стандартных библиотек по заданным критериям
Визуализация данных играет важную роль в анализе, позволяя визуализировать информацию, позволяя искать тенденции и закономерности и упрощая интерпретацию результатов. Стандартные библиотеки Python, такие как Matplotlib и Pandas, используются для индивидуального задания, предлагая довольно полный набор инструментов для построения графиков и диаграмм всех видов.
Линейный график
Линейный график — это графическое представление, в котором изменения значений данных определяются в соответствии с их индексом. Это показывает общие тенденции и нормальные колебания, а также возможные закономерности, по которым такие наборы данных могут обрабатываться. Для этой задачи был подготовлен линейный график, изображающий последовательность сгенерированных случайных чисел[7].
Рисунок 1. Линейный график
plt.figure(figsize=(10, 5))
plt.plot(s.index, s.values, label='Исходные данные', color='blue')
plt.title("Линейный график случайных данных")
plt.xlabel("Индекс")
plt.ylabel("Значение")
plt.legend()
plt.grid(True)
plt.show()
Гистограмма
Гистограмма представляет распределение данных, собранных в определенных диапазонах (ячейках). Для этой задачи гистограмма была создана с использованием округления значений до ближайшей сотни, чтобы сделать ее более понятной и информативной[7].
Рисунок 2. Гистограмма.
s_rounded = s.apply(lambda x: round(x, -2))
bins = range(-10000, 10001, 100)
plt.figure(figsize=(10, 5))
plt.hist(s_rounded, bins=bins, edgecolor='black', color='green')
plt.title("Гистограмма (значения, округлённые до сотен)")
plt.xlabel("Значение (округлённое до сотен)")
plt.ylabel("Частота")
plt.grid(True)
plt.show()
3.2 Формирование Dataframe из данных Series и добавление столбцов
Создание DataFrame из данных Series и добавление дополнительных столбцов станет важным шагом в подготовке данных для дальнейшего сложного анализа. Организованный в строки и столбцы, DataFrame предоставляет структурированную таблицу, над которой могут выполняться различные операции, такие как фильтрация, агрегация и визуализация.
import pandas as pd
s = pd.Series(data, name='Числа')
df = pd.DataFrame(s)
Сначала Series следует преобразовать в DataFrame, что можно сделать с помощью pd.DataFrame(), указав имя столбца для данных.
Добавление столбцов, содержащих отсортированные значения
После получения исходного DataFrame можно добавить больше столбцов, содержащих отсортированные данные, и сравнить различные порядки сортировки и, следовательно, их влияние на распределение данных.
sorted_asc = s.sort_values(ascending=True)
sorted_desc = s.sort_values(ascending=False)
df['По возрастанию'] = sorted_asc.values
df['По убыванию'] = sorted_desc.values
Экспорт DataFrame в файл
Данные также могут быть экспортированы в массовом или микромасштабе в виде файла для дальнейшей общей эксплуатации и анализа в нескольких форматах, включая CSV или Excel, что упрощает передачу данных другому пользователю или использование их в других приложениях.
# Сохранение DataFrame в файл CSV
df.to_csv('dataframe_sorted.csv', index=False, encoding='utf-8')
print("\nDataFrame успешно сохранен в файл 'dataframe_sorted.csv'.")
3.3 Визуализация данных полученные в результате промежуточного анализа
Визуализация данных, собранных в ходе промежуточного анализа, является важным шагом в понимании их распределения, выявлении тенденций и аномалий, а также предоставлении результатов в графическом виде. Здесь описываются методы визуализации данных, которые должны были использоваться в ходе анализа с использованием стандартных библиотек Python, таких как Matplotlib и Pandas.
Визуализация упорядоченных данных
После формирования DataFrame[1] с упорядоченными столбцами целесообразно визуализировать данные, чтобы сравнить их распределение и определить характеристики.
Упорядоченный линейный график данных
Линейный график упорядоченных данных в порядке возрастания и убывания показывает плавные переходы значений и сравнивает эти тенденции.
plt.figure(figsize=(12, 6))
plt.plot(df['По возрастанию'], label='По возрастанию', color='blue')
plt.plot(df['По убыванию'], label='По убыванию', color='red')
plt.title("Сравнение отсортированных данных по возрастанию и убыванию")
plt.xlabel("Индекс")
plt.ylabel("Значение")
plt.legend()
plt.grid(True)
plt.show()
Гистограмма отсортированных данных
Гистограмма отсортированных данных поясняет[11] распределение значений в процессе сортировки, что может быть полезно при анализе различий в плотности значений в разных диапазонах.
df['По возрастанию_округлённые'] = df['По возрастанию'].apply(lambda x: round(x, -2))
df['По убыванию_округлённые'] = df['По убыванию'].apply(lambda x: round(x, -2))
bins = range(-10000, 10001, 100)
plt.figure(figsize=(12, 6))
plt.hist(df['По возрастанию_округлённые'], bins=bins, alpha=0.5, label='По возрастанию', color='blue', edgecolor='black')
plt.hist(df['По убыванию_округлённые'], bins=bins, alpha=0.5, label='По убыванию', color='red', edgecolor='black')
plt.title("Гистограммы отсортированных данных по возрастанию и убыванию")
plt.xlabel("Значение (округлённое до сотен)")
plt.ylabel("Частота")
plt.legend()
plt.grid(True)
plt.show()
Выводы по разделу
Выводы по разделу представлены в таблице 3.1:
Таблица 3.1