УДК 004

Как сделать свой проект по анализу больших массивов данных

Осипов Иван Александрович – студент Российского университета транспорта

Научный руководитель Медникова Оксана Васильевна – кандидат технических наук, доцент кафедры «Информационные системы цифровой экономики» Российского университета транспорта

Аннотация: В данной статье рассмотрено создание проекта по Data Science, проблемы, возникающие в ходе реализации проекта, а также способы и инструменты решения данных проблем. Также рассмотрены этапы анализа данных, где они подробно описаны: что конкретно требуется сделать и отобразить для успешной сдачи проекта своим заказчикам или работодателям.

Ключевые слова: Data Science, Big Data, Python, визуализация данных, машинное обучение.

Введение

Data Science (Наука о данных) – раздел науки, связанный с анализом больших массивов структурированных и неструктурированных данных и поиском оптимальных решений на их основе. Data Science это все, что связано с данными – от их сбора, подготовки и до обработки и анализа. Чтобы работать в этой области используют математику, статистику, машинное обучение и многое другое.

Data Science на сегодняшний день один из драйверов развития бизнеса, банковской сферы, медицины, транспортных компаний, химии, физики, астрономии, страховых компаний, сельского хозяйства, метеорологии и др.

Для исследования больших данных (Big Data) создаются проекты по анализу таких данных и ожидаемому прогнозу на основе этих данных.

Big Data – это огромные объемы разнообразных данных: разного формата, структурированные и неструктурированные.

Для работы с Big Data необходим специальный набор методик и инструментов, чтобы решать поставленные задачи.

Основная часть (методология, результаты)

Для проектов по анализу больших данных основным языком программирования является Python. Это самый распространенный язык в области Data Science. Python применяется для анализа, написания рабочего кода, создания моделей, проведения экспериментов и пр. Анализ данных также встречается на R и С++. В качестве среды тестирования («песочницы») используют инструмент Jupyter Notebook.

Для анализа данных и экспериментов программист определяет, что из себя представляют данные, строит диаграммы и различные графики, которые позволяют наглядно визуализировать данные.

Кроме анализа данных, в Jupyter Notebook удобно редактировать различные фрагменты кода, методы, классы. Этот формат подходит для создания сводок по аналитике. Таким образом, считается, что Jupyter Notebook – «рабочий стол» дата-сайентиста.

Для визуализации данных в виде сводных таблиц, диаграмм, графиков также можно использовать visual code и библиотеку streamlit.

В таблице представлен ход работы над проектом по анализу данных:

Название этапа

Описание

Проблематика

Для начала работы необходимо определить цели и проблемы, которые нужно будет решить, а также выяснить, что будет являться ответом, в зависимости от которого будут приниматься определенные решения

Сбор данных

Находим в открытом или предоставленном доступе данные, которые предстоит обработать

Подготовка данных

Приведение данных в корректный вид, устранение пропусков и дубликатов данных

Обработка данных

Категоризируем данные, учитываем данные без аномальных значений (например, для нормированного распределения характерно, что в интервал (µ-3σ; µ-3σ) попадают 99 % всех результатов, где µ – математическое ожидание, σ – среднеквадратическое отклонение)

Исследование данных

Используем методы математической статистики для анализа данных; оформляем сводные таблицы по выбранным столбцам; представляем визуализацию данных в виде графиков; проводим моделирование с помощью машинного обучения для предсказания результатов

Оформление данных и принятие решений

Приведенные данные оформляем в виде документа (блокнота Jupyter Notebook) или веб-приложения, а затем на основе этих данных принимаем решение по бизнес-проблеме

Рассмотрим этапы реализации проекта по анализу данных подробнее.

  1. Определение проблемы

Процесс анализа данных начинается с проблемы, которую необходимо сначала определить, а потом решить.

Определить проблему можно детально изучив функционирующую систему, ее механизмы или весь процесс. Для лучшего понимания функционирования системы необходимо исследование. Его лучше сделать так, чтобы выяснить принципы поведения и затем делать прогнозы.

Определение проблемы и планирование приводят к появлению директив, которым нужно следовать в течение всего проекта.

После определения проблемы и ее фиксирования, можно перейти к этапу планирования проекта. 

Для максимально эффективного выполнения предписаний проекта, необходимо определить, какие ресурсы специалисты для этого понадобятся.

  1. Сбор данных

После определения проблемы, первое действие для анализа это – получение данных. Выбор данных – важный момент для качественного анализа. Данные должны максимально точно отражать функционирующую систему. Для сбора данных требуются необходимый опыт, знания и понимание природы и формы данных. Использование больших наборов неточных данных или, которые были собраны некорректно, приведут к неудаче.

Данные можно найти в открытых источниках или они могут быть предоставлены руководством с целью проанализировать их и сделать предсказание на их основе. Например, данные о фильмах (реестр прокатных удостоверений фильмов находится на Портале открытых данных Министерства Культуры РФ).

Эти данные хранятся в csv-файле. Этот файл можно скачать на компьютер, затем в среде реализации считать эти данные в виде Датафрейма. Пример кода приведён ниже:

import pandas as pd

data = pd.read_csv('C:/Users/User/Downloads/file.csv')

Можно проанализировать, что представляют данные, с помощью такой операции:

data.info()

  1. Подготовка данных

Подготовка данных требует большого количества времени и ресурсов. Данные обычно собираются из различных источников и могут быть в разном формате. Их нужно подготовить для анализа.

В подготовку данных входят следующие этапы: получение, обработка, нормализация, преобразование в оптимальный набор данных (обычно в форме таблиц).

Для проверки корректности типов данных поможет такой запрос, где можно определить, какой столбец не соответствует нужному типу данных:

data.dtypes

Как правило, в некорректных столбцах хранится информация в текстовом формате. Преобразовать столбец в корректный тип в зависимости от содержимого можно так:

data['column'] = pd.to_datetime(data['column']) #дата

data['column'] = pd.to_numeric(data['column']) #число

 У данных могут быть дубликаты: явные и неявные. Явные дубликаты могут возникать при случайном добавлении одних и тех же данных из-за человеческого фактора или технических ошибок. Такие дубликаты можно проверить с помощи кода:

data.duplicated().sum()

Устранить данные дубликаты поможет drop_duplicates:

data.drop_duplicates()

Для устранения неявных дубликатов придётся проверить каждый столбец с текстовым форматом – object с помощью функции unique.

print(data['column'].unique())

Если видим, что данные дублируют друг друга, но записаны по- разному, например: город Москва и Москва, то можем заменить дублирующие значения с помощью встроенной функции replace:

data = data.replace({'column' : {'город Москва':'Москва'}})

  1. Обработка данных

У преобразованного Датафрейма есть качественные и количественные данные и данные даты и времени. В качественных данных в процессе подготовки нужно было устранить явные и неявные дубликаты и преобразовать данные в требуемый тип (текстовый формат с числами в численный).

С количественными данными ситуация другая, так как существуют выбросы значений, возможно связаны с тем, что при внесении данные ошибочно приписали цифру или имелась в виду другая величина, например, вместо рублей вписали копейки. Также по теории математической статистики по нормальному распределению в интервал (µ-3σ; µ-3σ) попадают 99 % всех результатов, где µ – математическое ожидание, σ – среднеквадратическое отклонение.

mean = data['column'].mean()

q = data['column'].var() ** (1/2)

data = data[data['column'] < mean + 3*q]

data = data[data['column'] > mean - 3*q]

Для анализа данных удобно распределить данные по категориям (‘A’ – 1-1000, ‘B’ – 1001-5000, ‘C’ – 5001 и больше). В этом случае придется создать вспомогательную функцию, которая будет обрабатывать в столбце каждую строку и возвращать значение – категорию. К этой категории относится исходное значение, функция apply запоминает все эти значения в виде серии, а после создаётся новый столбец из серии категорий от полученной значений функции. Пример кода предъявлен ниже.

#функция для категоризации данных

def func(row):

if row['column'] <= 1000:

val = 'A'

elif row['column'] <= 5000:

val = 'B'

elif row['column'] > 5000:

val = 'C'

return val

#добавление нового столбца

data['column2'] = data.apply(func, axis=1)

  1. Исследование данных

Изучение данных – анализ в графическом или статистическом виде с целью нахождения моделей или взаимосвязей. Для отображения подобных моделей используется такой инструмент как визуализация.

В последнее время визуализация данных вышла на новый уровень и стала отдельной дисциплиной. Многочисленные технологии применяются исключительно для репрезентации данных, а многие типы представления работают так, чтобы получать только наилучшую информацию из Датасета.

На этапе выбора диаграмм для наилучшего зрительного восприятия обязательно нужно учитывать то, какие данные требуется визуализировать и с какой целью. Рассмотрим несколько распространённых видов диаграмм.

image001

Линейный график (или линейная диаграмма).

Самый наглядный способ изображения изменений количественных показателей с течением времени это линейный график. Для построения графика точки откладываются на координатной сетке и соединяются прямой линией. По вертикали чаще всего отмечают количественные значения, а по горизонтали – качественные (числа, часы, дни, месяцы и др.).

Линейную диаграмму используют для отображения роста прибыли, количество проданных товаров и многое другое.

Код программы:

import pandas as pd

import matplotlib.pyplot as plt

plt.axis([xmin, xmax, ymin, ymax])

plt.plot(abs(xmax-xmin),data['column'])

plt.legend('column', loc=2)

plt.show()

image002

Столбчатые диаграммы.

Столбчатые диаграммы используют для сравнения большого массива данных.

Есть два вида диаграмм: вертикальные столбцы обычно используют для иллюстрации изменения показателей, например, какое было среднее количество покупок в месяц на протяжении года; горизонтальные – для анализа большого количества показателей и визуального представления явного превосходства одного из значений.

Код программы:

data.plot.bar(x=data.index, y='column', rot=0) #вертикальный график

data.plot.barh(x=data.index, y='column', rot=0) #горизонтальный график

image003

Гистограммы.

Код программы:

data['column'].hist()

Гистограммы очень схожи со столбчатыми диаграммами, но используются по-разному. Гистограмма показывает значения числовых данных определенной группы и их изменения с течением времени. У каждого столбика в гистограмме свой отрезок времени на оси координат.

Основное отличие гистограмм от диаграмм в том, что нельзя столбцы менять местами, иначе нарушится последовательная логика.

image004

Круговые диаграммы.

С помощью этой диаграммы можно нагляднее иллюстрировать доли каждой части одного целого. Круговая диаграмма дает моментальное представление о соотношении чисел. При небольшом количестве секторов и значительной разницы значений обеспечивает эффективное визуальное восприятие. Но если много секторов сложно делать анализ диаграммы, и она занимает много места в сравнении с информацией, которую демонстрирует.

Код программы:

data.groupby(['column']).sum().plot(kind='pie', y='column', autopct='%1.0f%%')

image005

Точечная диаграмма (или диаграмма рассеяния).

Эти диаграммы используются для иллюстрации зависимости одной переменной от другой, например, связь прибыли и затрат на закупку товаров.

Если на диаграмме точки можно соединить линией, близкой к прямой, то взаимосвязь между наборами данных очень высокая. А если они расположены хаотично, то корреляция низкая или близка к нулю.

Код программы:

data.plot.scatter(x="column1", y="column2")

Исследование данных это ознакомление с ними, которое нужно для понимания вида и значения собранных сведений. Категоризация этой информации определяет, какой метод анализа данных наиболее оптимальный для определения модели.

Этот раздел состоит из следующих пунктов: обобщение данных, группирование этих данных, изучение связей между разными атрибутами, определение моделей и трендов, разработка моделей регрессионного анализа, моделей классификации.

Анализ данных требует их обобщения, при котором количество данных для трактования уменьшается без потери важных сведений.

После обработки данных можно провести моделирование с помощью машинного обучения, которое позволяет предсказать данные в будущем. Модель машинного обучения «случайный лес» наиболее эффективна по сравнению с «деревом решений» и «логистическим решением».

Разбиение данных на обучающие (80% от исходных: в обучающих данных сами обучающие данные – 60% и валидационные – 20%) и тестовые (20%), т.е. в соотношении 4:1.

Разбиение обучающих данных на обучающие (75% или 60% от исходных) и валидационные (25% или 20% от исходных) в соотношении 3:1.

Код программы:

from sklearn.model_selection import train_test_split

target = data['column']

features = data.drop(['column'], axis=1)

features_train, features_test, target_train, target_test = train_test_split(features, target, test_size=.2, random_state=12345)

features_train, features_valid, target_train, target_valid = train_test_split(features_train, target_train, test_size=.25, random_state=12345)

Алгоритмы обучения чаще устроены сложнее, чем сама модель. В библиотеках Python доступны многие алгоритмы. Одна из
библиотек – scikit-learn, или sklearn. В sklearn много инструментов работы с данными и моделей, поэтому они разложены по подразделам.

Дерево решений

В машинном обучении, статистике и анализе данных с помощью метода дерева решений можно строить прогнозы, описывать данные, разделять их на группы и находить зависимости между ними.

Простая и популярная задача – это бинарная классификация. То есть разделение множества элементов на две группы, где, например:

  • 1 – успех, да, ответ верный;
  • 0 – неудача, нет, ответ неверный.

Код программы:

from sklearn.tree import DecisionTreeClassifier

model = DecisionTreeClassifier(random_state=12345)

model.fit(features_train, target_train)

predictions_valid = model.predict(features_valid)

Случайный лес

Случайный лес (random forest) обучает большое количество независимых друг от друга деревьев, а потом принимает решение на основе голосования. Случайный лес помогает улучшить результат предсказания и избежать переобучения. В библиотеке sklearn алгоритм случайного леса RandomForestClassifier находится в модуле sklearn.ensemble.

Чтобы управлять количеством деревьев в лесу, пропишем гиперпараметр n_estimators. Чем больше деревьев, тем дольше модель будет учиться, но результат станет лучше. Если сделать гиперпараметр n_estimators больше, модель начнёт разрастаться и медленно обучаться. Мало деревьев и результаты не лучше.

Код программы:

from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(random_state=12345, n_estimators=15, max_depth=5)

model.fit(features_train, target_train)

predictions_valid = model.predict(features_valid)

Логистическое решение

Ещё один алгоритм машинного обучения – логистическая регрессия – это алгоритм классификации (двоичной классификации).

Логистическая регрессия сначала вычисляет, к какому классу близок объект, и в зависимости от ответа выбирает нужный класс: если результат
вычисления положительный, то – «1»; отрицательный – «0».

Модель LogisticRegression лежит в модуле sklearn.linear_model
библиотеки sklearn:

from sklearn.linear_model import LogisticRegression

model = LogisticRegression(random_state=12345)

model.fit(features_train, target_train)

predictions_valid = model.predict(features_valid)

Для определения качества модели машинного обучения и выбора лучшей из них используется метрика f1_score, которая сочетает в себе два показателя: точность и полноту ответов. Чем выше f1-score, тем лучше.

Полнота выявляет, какую долю положительных среди всех ответов
выделила модель. Точность определяет, как много отрицательных ответов нашла модель, пока искала положительные.

Код программы:

from sklearn.metrics import f1_score

print(f1_score(target_valid, predictions_valid))

Оформление данных и принятие решений

Это заключительный шаг процесса анализа, цель которого – предоставить результаты анализа, то есть сделать выводы по полученным данным в виде конструктивных решений.

Развертывание – это применение результатов анализа данных на практике. Как правило, развертывание состоит из написания отчета для заказчика. В отчёте должны быть подробно разобраны следующие темы: результаты анализа, развертывание решения, анализ рисков, измерения влияния на бизнес.

Отчёт может быть в виде документа, например, блокнота, где помимо графиков представлен код и его подробное описание или небольшого веб-приложения, в котором представлены только таблицы и графики с описанием. Отчет направляется руководству для принятия решения.

Выводы и дальнейшие перспективы развития

В данной статье был рассмотрен план действий по созданию проекта «Анализ больших массивов данных» с целью принятия соответствующих решений на основе визуализированных данных.

Работу над проектом можно разбить на несколько этапов: проблематика, сбор, подготовка, обработка и исследование данных, оформление данных и принятие решений.

Процесс анализа данных начинается с проблемы, которую необходимо сначала определить, а затем решить.

Спрос на специалистов по анализу больших массивов данных растёт во всём мире. Стремительное развитие алгоритмов машинного обучения и построения на их основе прогнозов говорит о том, что у профессии есть огромный потенциал. Такие специалисты нужны в разных отраслях: банках, логистических компаниях, IT-сфере, страховых компаниях, медицине, метеорологии, сфере продаж, на производстве и др.

Список литературы

  1. Как правильно визуализировать данные в работе: официальный сайт «SF Education» – URL: https://blog.sf.education/kak-pravilno-vizualizirovat-dannye-v-data-science/ (дата публикации 09.04.2020).
  2. Data Science для начинающих: обзор сферы и профессий: официальный сайт «Медиа нетологии» – URL: https://netology.ru/blog/03-2019-data-science-obzor/ (дата публикации 28.03.2019).
  3. Основные инструменты дата-сайентиста: официальный сайт «Tproger» – URL: https://tproger.ru/articles/osnovnye-instrumenty-data-sajentista/ (дата публикации 04.03.2021).
  4. Процесс анализа данных: официальный сайт «PythonRu» – URL: https://pythonru.com/baza-znanij/process-analiza-dannyh (дата обращения 01.04.2022).
  5. Методы, модели и алгоритмы принятия решений о состоянии здоровья студентов в зоне действия неблагоприятных экологический условий [Текст]: дис. канд. ист. наук: 05.13.01: защищена / Медникова Оксана Васильевна. – Курск, 2007. – 162 с.
  6. Применение блокчейн и умных контрактов в транспотных системах [Текст] / Каргина Л.А., Дмитриева Т.М.// Транспорт и логистика: стратегические приоритеты, технологические платформы и решения в глобализованной цифровой экономике. – Ростов-на-Дону, 2019. – С. 142-145.

Интересная статья? Поделись ей с другими: