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

Цель этого эксперимента - найти наиболее яркое сообщение о статусе на этой странице с помощью всего одной команды Bash. Вы должны скачать данные снизу. Сохраним данные как facebookdata.csv.

wget https://www.scientificprogramming.io/datasets/facebookdata.csv

В предыдущем (часть I) уроке мы узнали, как команда csvcut может помочь нам вырезать заданный набор столбцов (например, 1,4,7–11). Обратите внимание, что мы не просматривали столбцы с номерами 2 и 3, которые являются более широкими столбцами и не поместятся должным образом на нашем экране предварительного просмотра выше!

Давайте теперь посчитаем, сколько записей для каждого из типов статуса в наборе данных. Типы состояний указаны в столбце 4. Чтобы извлечь column #4 из нашего файла, мы можем снова использовать csvcut следующим образом:

$ csvcut -c 4 facebookdata.csv | sort | uniq -c

Здесь параметр командной строки -c указывает, какой столбец извлечь (или вырезать). Обратите внимание, что, несмотря на свое название, команда cut не изменяет исходный файл, с которым работает. Теперь мы хотели бы подсчитать, сколько типов записей поступило от каждого типа статуса. Здесь нам нужна команда uniq -c для подсчета (отсюда -c) количества уникальных появлений каждого типа статуса. Однако uniq -c требует, чтобы ввод был «отсортирован», поэтому первым шагом было sort составление списка типов статуса.

Найдите самую популярную запись статуса!

Для эффективного проведения этого анализа мы будем использовать язык командной строки под названием awk, инструмент, который позволяет фильтровать, извлекать и преобразовывать файлы данных. awk - очень полезный инструмент, который можно добавить в свой набор хитростей. Для начала давайте посмотрим на очень простую программу awk для вывода каждой строки нашего facebook.csv файла, где мы указываем разделитель файла (запятую) с помощью параметра -F.

Поскольку набор данных содержит (”text”) ячеек, мы будем использовать csvcut для извлечения необходимых столбцов, например, мы хотим сначала извлечь столбец 1,8–15 в файл с именем fbreactions.csv.

csvcut -c 2,8-15 facebookdata.csv > fbreactons.csv

Идея состоит в том, чтобы суммировать все реакции: лайк, поделиться, любовь и т. Д. (Столбцы 8 + … + 15) по каждому статусу FB, а затем найти статус, у которого было максимальное количество реакций. Чтобы рассчитать общее количество реакций на каждую запись (статус), все, что нам нужно сделать, это сложить по горизонтали все числа из столбцов 8–15, и мы легко делаем это с помощью awk следующим образом:

$ awk -F "," '{ total = total + $2 + $3 + $4 + \  
 $5 + $6 +$7 +$8 +$9; print $1"," \
 total; total=0 }' fbreactons.csv |head

Обратим внимание на оператор awk, который не только суммирует столбцы рядом, но также выводит в каждой строке два вывода (status id и total количество реакций в этой строке). Наконец, в конце каждой итерации он обнуляет total=0.

Найдите статус с помощью #MAX реакций

Чтобы получить статус с максимальными реакциями, затем мы сортируем идентификаторы статуса на основе количества реакций (столбец 2) с помощью функции sort -n -r -t”,” -k 2, которая сообщает системе, что нужно отсортировать переданные по конвейеру (|) вывод в числовом виде (-n) в столбце 2 (-k 2), разделенном запятой (,):

$ awk -F "," '{ total = total \
  + $2 + $3 + $4 + $5 + $6 +$7 +$8 +$9; \
  print $1"," total; total=0 }' \
  fbreactons.csv | sort -n -r  -t"," -k 2 \
  | head -n 1

Окончательный вывод сообщает нам, что идентификатор состояния: 7331091005 .. имел максимальное количество реакций из общего числа 668121. Если мы теперь используем grep, мы можем легко найти сообщение, которое вызвало наибольшее количество реакций.

cat facebookdata.csv | grep 7331091005_10154089857531006

Таким образом вы найдете самое популярное сообщение на этой странице, которое было:

Леброн и кавалеристы устали от издевательств

Насколько это интересно?

[Этот проект является частью курса Обучение анализу данных в Bash Shell и Linux.]

Сопутствующие работы