Учебная практика (ознакомительная практика) относится к разделу Б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 Обоснование выбора интерпретатора языка Python
Язык программирования, выбранный, а именно Python[9][12], в качестве основного инструмента разработки, основан на следующих основных аргументах:
Простой и читабельный синтаксис — элегантный и лаконичный — это делает написание и чтение кода очень простыми. Это будет важно в исследованиях, где основное внимание уделяется изучению концепций анализа данных, а не усложнению программирования.
Обширный репертуар библиотек для анализа данных: Python предоставляет обширный набор библиотек, ориентированных на анализ, обработку и визуализацию данных, тем самым облегчая реализацию таких целей, позволяя сосредоточиться на аналитическом сегменте проекта.
Активное сообщество и поддержка: Python имеет одно из самых активных сообществ разработчиков и пользователей, что означает, что тысячи людей смогут получить доступ к учебным материалам, документации и простым примерам. Такие аспекты сообщества будут полезны для быстрого и дружелюбного решения проблем во время обучения.
Мультипарадигма: Python поддерживает различные парадигмы программирования, такие как объектно-ориентированное, функциональное и императивное программирование. Такие аспекты помогут сформулировать решения на основе методов, более подходящих для определенного проекта и деятельности по решению проблем.
1.1.2 Выбор библиотек для анализа данных
Для эффективного выполнения задания были выбраны следующие библиотеки: Pandas, NumPy и Matplotlib. Каждая из них обладает своими особыми возможностями, которые в совокупности охватывают весь процесс анализа данных — от генерации до визуализации.
Pandas[2]:
Pandas[10] особенно подходит для работы с табличными данными. Среди наиболее выдающихся преимуществ применения библиотеки Pandas:
Структуры данных: предоставляет удобные структуры данных, такие как Series и DataFrame, которые делают хранение и обработку данных менее болезненными.
Функциональность: включает в себя множество функций для фильтрации, агрегации, объединения и преобразования данных, что делает Pandas незаменимым инструментом предварительной обработки.
Производительность: оптимизированные алгоритмы обеспечивают высокую скорость и эффективность при обработке больших объемов данных.
Интеграция: бесшовная интеграция с другими библиотеками Python, такими как NumPy и Matplotlib, упрощает процесс анализа и визуализации данных.
NumPy[2]:
NumPy — это базовая библиотека для научных вычислений на Python. Основанием для выбора NumPy является следующее:
Массивы и матрицы: Очень мощные функции массивов и матриц для многомерных массивов и матриц, краеугольный камень числовых вычислений.
Скорость: Векторизованные операции NumPy намного быстрее обычных циклов Python, где это важно для математических вычислений.
Функции: Предоставляет широкий спектр математических функций и инструментов для линейной алгебры, статистики и других научных исследований. Совместимость: Поддерживает многие другие библиотеки на основе Python, что делает NumPy высокоэффективным в использовании.
Matplotlib[5][6].
Matplotlib:
Matplotlib - небольшая библиотека, сосредоточенная на отрисовке статического графика на Python. Основные причины использования Matplotlib:
Гибкость: От простых линейных до сложных 3D-визуализаций, предлагает широкий ассортимент диаграмм и графиков.
Настраиваемость: Полный и детальный контроль над каждой частью графиков, цветами, метками и легендами для создания привлекательных визуальных эффектов.
Интеграция с Pandas и NumPy: Легкий способ получить данные из Pandas DataFrame и NumPy массивов.
Сообщество и документация: Имеет обширную документацию и активное сообщество с множества примеров им для различных типов визуализации.
Предварительный анализ данных
В рамках индивидуального задания был проведен анализ синтетической выборки данных из 1000 случайных целых чисел в диапазоне от -10000 до 10000. Основной целью анализа было вычисление основных статистических параметров и их визуализация для понимания распределения данных и выявления закономерностей.
Сначала для генерации случайных чисел использовался NumPy. Функция numpy.random.randint создавала массив из 1000 целых чисел в указанном диапазоне. Затем сгенерированные числа преобразовывались в объект Series с помощью Pandas, что упрощало обработку данных и доступ к встроенным методам анализа.
Придуман был формат для хранения CSV для всех рандомизированных данных. Он использует следующие преимущества:
Читабельность: чтение и редактирование с помощью любого текстового редактора файлов в форматах CSV. Простая интеграция: упрощенные интеграции в рабочие процессы с анализом данных через CSV при загрузке и сохранении записей без сложных преобразований.
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.
Простая интеграция: упрощенные интеграции в рабочие процессы с анализом данных через CSV при загрузке и сохранении записей без сложных преобразований.
s.to_csv('data_series.csv', index=False, encoding='utf-8')
print("Данные успешно сохранены в файл 'data_series.csv'.")[4]
1.2.3 Очистка данных от цифрового мусора
Очистка от цифрового мусора является важной ранней предварительной обработкой для анализа качества и точности результатов оценки. В этом задании под цифровым мусором подразумеваются:
Дубликаты: избыточные значения, искажающие аналитическую статистику.
Выпадающие точки данных: неоправданно высокие или низкие числа, которые не вписываются в общую схему распределения данных.
Недействительные: значения, выходящие за пределы предписанного диапазона или имеющие неверный тип данных
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 для будущих целей. Ниже приведены этапы получения и импорта данных в среду анализа.
Шаги для получения и загрузки данных:
Генерация данных с использованием NumPy:
Используйте numpy.random.randint для создания массива из 1000 случайных целых чисел от -10000 до 10000.
Преобразование данных в ряды Pandas:
Импортируйте массив NumPy в объект ряда для лучшей последующей обработки и анализа.
Экспортируйте данные в виде файла CSV:
Экспортируйте сгенерированные данные в файл 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