УДК 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) или веб-приложения, а затем на основе этих данных принимаем решение по бизнес-проблеме |
Рассмотрим этапы реализации проекта по анализу данных подробнее.
- Определение проблемы
Процесс анализа данных начинается с проблемы, которую необходимо сначала определить, а потом решить.
Определить проблему можно детально изучив функционирующую систему, ее механизмы или весь процесс. Для лучшего понимания функционирования системы необходимо исследование. Его лучше сделать так, чтобы выяснить принципы поведения и затем делать прогнозы.
Определение проблемы и планирование приводят к появлению директив, которым нужно следовать в течение всего проекта.
После определения проблемы и ее фиксирования, можно перейти к этапу планирования проекта.
Для максимально эффективного выполнения предписаний проекта, необходимо определить, какие ресурсы специалисты для этого понадобятся.
- Сбор данных
После определения проблемы, первое действие для анализа это – получение данных. Выбор данных – важный момент для качественного анализа. Данные должны максимально точно отражать функционирующую систему. Для сбора данных требуются необходимый опыт, знания и понимание природы и формы данных. Использование больших наборов неточных данных или, которые были собраны некорректно, приведут к неудаче.
Данные можно найти в открытых источниках или они могут быть предоставлены руководством с целью проанализировать их и сделать предсказание на их основе. Например, данные о фильмах (реестр прокатных удостоверений фильмов находится на Портале открытых данных Министерства Культуры РФ).
Эти данные хранятся в csv-файле. Этот файл можно скачать на компьютер, затем в среде реализации считать эти данные в виде Датафрейма. Пример кода приведён ниже:
import pandas as pd
data = pd.read_csv('C:/Users/User/Downloads/file.csv')
Можно проанализировать, что представляют данные, с помощью такой операции:
data.info()
- Подготовка данных
Подготовка данных требует большого количества времени и ресурсов. Данные обычно собираются из различных источников и могут быть в разном формате. Их нужно подготовить для анализа.
В подготовку данных входят следующие этапы: получение, обработка, нормализация, преобразование в оптимальный набор данных (обычно в форме таблиц).
Для проверки корректности типов данных поможет такой запрос, где можно определить, какой столбец не соответствует нужному типу данных:
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' : {'город Москва':'Москва'}})
- Обработка данных
У преобразованного Датафрейма есть качественные и количественные данные и данные даты и времени. В качественных данных в процессе подготовки нужно было устранить явные и неявные дубликаты и преобразовать данные в требуемый тип (текстовый формат с числами в численный).
С количественными данными ситуация другая, так как существуют выбросы значений, возможно связаны с тем, что при внесении данные ошибочно приписали цифру или имелась в виду другая величина, например, вместо рублей вписали копейки. Также по теории математической статистики по нормальному распределению в интервал (µ-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)
- Исследование данных
Изучение данных – анализ в графическом или статистическом виде с целью нахождения моделей или взаимосвязей. Для отображения подобных моделей используется такой инструмент как визуализация.
В последнее время визуализация данных вышла на новый уровень и стала отдельной дисциплиной. Многочисленные технологии применяются исключительно для репрезентации данных, а многие типы представления работают так, чтобы получать только наилучшую информацию из Датасета.
На этапе выбора диаграмм для наилучшего зрительного восприятия обязательно нужно учитывать то, какие данные требуется визуализировать и с какой целью. Рассмотрим несколько распространённых видов диаграмм.
Линейный график (или линейная диаграмма).
Самый наглядный способ изображения изменений количественных показателей с течением времени это линейный график. Для построения графика точки откладываются на координатной сетке и соединяются прямой линией. По вертикали чаще всего отмечают количественные значения, а по горизонтали – качественные (числа, часы, дни, месяцы и др.).
Линейную диаграмму используют для отображения роста прибыли, количество проданных товаров и многое другое.
Код программы:
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()
Столбчатые диаграммы.
Столбчатые диаграммы используют для сравнения большого массива данных.
Есть два вида диаграмм: вертикальные столбцы обычно используют для иллюстрации изменения показателей, например, какое было среднее количество покупок в месяц на протяжении года; горизонтальные – для анализа большого количества показателей и визуального представления явного превосходства одного из значений.
Код программы:
data.plot.bar(x=data.index, y='column', rot=0) #вертикальный график
data.plot.barh(x=data.index, y='column', rot=0) #горизонтальный график
Гистограммы.
Код программы:
data['column'].hist()
Гистограммы очень схожи со столбчатыми диаграммами, но используются по-разному. Гистограмма показывает значения числовых данных определенной группы и их изменения с течением времени. У каждого столбика в гистограмме свой отрезок времени на оси координат.
Основное отличие гистограмм от диаграмм в том, что нельзя столбцы менять местами, иначе нарушится последовательная логика.
Круговые диаграммы.
С помощью этой диаграммы можно нагляднее иллюстрировать доли каждой части одного целого. Круговая диаграмма дает моментальное представление о соотношении чисел. При небольшом количестве секторов и значительной разницы значений обеспечивает эффективное визуальное восприятие. Но если много секторов сложно делать анализ диаграммы, и она занимает много места в сравнении с информацией, которую демонстрирует.
Код программы:
data.groupby(['column']).sum().plot(kind='pie', y='column', autopct='%1.0f%%')
Точечная диаграмма (или диаграмма рассеяния).
Эти диаграммы используются для иллюстрации зависимости одной переменной от другой, например, связь прибыли и затрат на закупку товаров.
Если на диаграмме точки можно соединить линией, близкой к прямой, то взаимосвязь между наборами данных очень высокая. А если они расположены хаотично, то корреляция низкая или близка к нулю.
Код программы:
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-сфере, страховых компаниях, медицине, метеорологии, сфере продаж, на производстве и др.
Список литературы
- Как правильно визуализировать данные в работе: официальный сайт «SF Education» – URL: https://blog.sf.education/kak-pravilno-vizualizirovat-dannye-v-data-science/ (дата публикации 09.04.2020).
- Data Science для начинающих: обзор сферы и профессий: официальный сайт «Медиа нетологии» – URL: https://netology.ru/blog/03-2019-data-science-obzor/ (дата публикации 28.03.2019).
- Основные инструменты дата-сайентиста: официальный сайт «Tproger» – URL: https://tproger.ru/articles/osnovnye-instrumenty-data-sajentista/ (дата публикации 04.03.2021).
- Процесс анализа данных: официальный сайт «PythonRu» – URL: https://pythonru.com/baza-znanij/process-analiza-dannyh (дата обращения 01.04.2022).
- Методы, модели и алгоритмы принятия решений о состоянии здоровья студентов в зоне действия неблагоприятных экологический условий [Текст]: дис. канд. ист. наук: 05.13.01: защищена / Медникова Оксана Васильевна. – Курск, 2007. – 162 с.
- Применение блокчейн и умных контрактов в транспотных системах [Текст] / Каргина Л.А., Дмитриева Т.М.// Транспорт и логистика: стратегические приоритеты, технологические платформы и решения в глобализованной цифровой экономике. – Ростов-на-Дону, 2019. – С. 142-145.