Время прочтения: 4 мин.

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

  1. формулируем вопрос, на который необходимо ответить с помощью данных;
  2. подготавливаем данные так, чтобы они отвечали на поставленный вопрос;
  3. проводим анализ данных, т.е. получаем ответ на заданный вопрос из массива данных;
  4. визуализируем данные;
  5. делаем выводы.

Рассмотрим подробнее каждые этапы.

Шаг 1. Формулировка вопроса помогает: определить какие данные нужны, придерживаться выбранного направления анализа, снизить риск отклонения от поставленной цели. Ошибка, допущенная на первом этапе, может привести к потере времени, «обнулить» результат работы всей команды.

Шаг 2. Подготовка данных практически всегда является сложным и трудоемким процессом, т.к. требует извлечение данных из исходных источников, их преобразование для работы и очистки от «грязных» данных. Мы извлекаем данные с web-сайтов, социальных сетей, из готовых баз данных, CSV-файлов, таблиц Excel. Подготовленные данные должны быть правильно отформатированы, учтены все отклонения (например, чрезмерно отклоняющиеся данные, отсутствие в данных).

Для работы с данными мы используем инструмент Python, а именно, некоторые методы, которые могут применять в работе не только IT специалисты, но и аудиторы, делающие только первые шаги в программировании на этом языке.

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

Для поиска пропусков в значениях (значения NaN в объекте DataFrame) мы используем библиотечный метод .isnull(). Значение «True» в наших данных после применения .isnull() означает, что в этой позиции элемент NaN.

Чтобы определить, что элемент не является пропущенным значением можно применить .notnull().

Чтобы вычислить количество NaN, мы используем метод .sum(), который принимает значение True =1, False=0.

Кроме того, можно воспользоваться методом  .count(): для объекта Series метод возвращает число непропущенных значений. Для DataFrame считает количество непропущенных значений в каждом столбце.

Также для обработки пропущенных данных мы используем простое их удаление из нашей выборки. В библиотеке Pandas есть для этого несколько методов. Один из них — это фильтрация по условию с использование результатов ранее примененных .isnull() и  .notnull().  Например, чтобы отобрать в столбце 3 нашей DataFrame (df) непропущенные значения используем код: df.c3[df.c3.notnull()], который извлечет все значения столбца 3, кроме NaN. Кроме того, мы используем метод .dropna(), который удаляет из объекта DataFrame строки, содержащие значения NaN. Для удаления только строк, в которых все значения неопределенны, используем параметр how = ‘all’: df.dropna(how=’all’). C помощью параметра how = ‘any’, удаляем столбцы, где есть хотя бы одно значение NaN.  А с помощью параметра thresh задаем необходимый минимум заполненных значений, для того чтобы не удалять строки столбцы, в которых есть пропуски.

В некоторых случаях пропущенные значения мы заполняем определенным значением, используя метод .fillna(). Пропущенные значения можно заполнить константой, или последним непропущенным значением как в прямом: .fillna(method = “ffill”), так и обратном порядке: .fillna(method = ‘bfill”). Или заполняем с помощью индексов: fill_values. Кроме того, мы применяем метод интерполяции пропущенных значений .interpolate().

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

Каждый из этих инструментов мы используем в следующих случаях:

— метод классификации, если нами заранее определено в какие группы будем объединять данные (ответы «да»/«нет»);

— метод кластеризации, когда группы заранее не известны. Например, будем делать оценку возрастной категории клиента, давшего тот или иной ответ;

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

Шаг 4. Переходя к визуализации данных, мы используем «две стороны одной монеты»: с одной стороны, мы визуализируем данные, чтобы изучить их, а с другой представить окружающим наши выводы и гипотезы. Визуальный анализ на этапе обработки данных помогает увидеть аномалии в данных, сделать обобщения результатов, выявить тенденции поведения групп данных и проверить отвечают ли наши данные на изначально заданный вопрос. Для этого мы используем пакет Seaborn для программ Python и ggplot2, и Shiny для R.

Визуализация данных для презентации результатов окружающим осуществляется с помощью программ PowerBI и Tableau. Данный этап также совмещает в себе подготовку выводов.

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