# 2. СБОР ДАННЫХ, ИНСТРУМЕНТЫ ПО СБОРУ И ОБРАБОТКЕ ДАННЫХ

[назад](README.md)

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

В настоящее время существует множество программных инструментов для сбора данных. Многие ведущие компании мира, такие как IBM, Oracle, Microsoft и другие имеют свои решения в 
этой области. Из свободных и сравнительно недорогих чаще всего используются следующие продукты: 
- 1010data; 
- Apache Hadoop; 
- Apache Ambari; 
- Jaspersoft; 
- LixisNexis Risj Sokutions HPCC Systems; 
- Revolution Analytics (на базе языка R для мат. статистики); 
- Hortonworks; 
- Biginsights; 
- Cloudera; 
- Teradata и др. 

Многие из них имеют модули для работы с данными социальных сетей. К примеру, используя решения от Apache Ambari, IBM Biginsights, Hortonworks, либо Cloudera можно довольно просто организовать потоковый on-line сбор данных социальной сети Twitter в режиме реального времени по любой выбранной геолокации. 

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

Так как источник может передавать события на несколько каналов, потоки могут направляться на несколько узлов назначения. Это наглядно показано на рис. 6: Агент считывает  событие в два канала (Канал 1 и Канал 2), и затем передает их в независимые стоки.

![Рис. 6. Схема работы потока в модуле Flume](images/2021-09-04_20-48-34.png)
Рис. 6. Схема работы потока в модуле Flume

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

![Рис. 7. Схема взаимодействия компонентов при объединении потоков в модуле](images/2021-09-04_20-49-24.png)
Рис. 7. Схема взаимодействия компонентов при объединении потоков в модуле

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

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

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

![Рис. 8. Схема обработки ошибок в модуле Flume](images/2021-09-04_20-50-31.png)
Рис. 8. Схема обработки ошибок в модуле Flume

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

В социальной сети Twitter собранные текстовые данные состоят из сведений о шрифтах, размерах текста, ссылок на профиль пользователя и многих других. Однако, для анализа зачастую требуются лишь некоторые из них, а именно, поля sentiment, location, text, language и, возможно, некоторые другие. В этой связи обработку данных с целью извлечения необходимой информации можно организовать как на уровне сбора этих данных, наложив определенные фильтры на каналы передачи данных, так и после на этапе обработки. 

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

Общее количество «твиттов» $`𝐾_j`$ для каждой $`L`$ локации (географической зоны):
```math
K_j = \sum_i (k_i \in L),
```
где $`𝑘_j`$ – каждый следующий твитт из обрабатываемого потока. 

Частота употребления $`Count(w)`$ каждого уникального слова 𝑤 определяется из общего множества $`S`$ текстовых данных: 
```math
Count(w) = \sum_i(w_i \in S).
```

Настроение каждого твитта $`sp(w, d)`$ определяется из словаря – $`d`$, в котором прописано настроение (отношение): 
```math
sp(w, d) = \begin{cases}
   0, &\text{если w имеет негативный окрас}, \\
   1, &\text{если w имеет нейтральный окрас}, \\
   2, &\text{если w имеет положительный окрас}.
\end{cases}
```

Ряд рекомендаций по сбору и обработке данных приводится в лабораторной работе 1 (в конце данного учебного пособия).

[назад](README.md)
