Применение инструментов командной строки Linux в анализе данных

Перевод статьи «Linux command line utils for Data Scientist».

Ни для кого, наверное, не секрет, что наука о данных всегда ассоциируется с R, Excel, SQL и, чаще всего, с Python и его многочисленными библиотеками (например, pandas, numpy и пр.). Но что, если я скажу, что довольно полный и информативный анализ данных можно осуществлять и без всего вышеперечисленного?

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

1. Вывод данных

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

head /tail

Это простые утилиты, с помощью которых можно выводить определенные строки файла (head — с начала файла, tail — с конца, — прим. ред.).

head -n 5 example_data.csv — вывести первые 5 строк.
head -n -15 example_data.csv — вывести все строки, кроме последних 15.
tail -n 15 example_data.csv — вывести 15 последних строк файла.
tail -n +15 example_data.csv — вывести все строки, начиная с 15-й.

column

Если мы хотим увидеть данные в виде отформатированной таблицы, мы можем применить команду column.

column -s"," -t example_data.csv

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

col1  col2  col3
 0     1     D
 1     0     C
 2     0     C
 3     1     C

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

head -n 5 example_data.csv | column -s"," -t

cut

Предыдущие команды работают со всеми столбцами одновременно. Как насчет отделения столбцов? Давайте рассмотрим еще одну команду:

cut -d"," -f2,5 example_data.csv

Эта команда позволяет выбрать 2-й и 5-й столбцы из файла, где разделителем служит запятая (разделитель указывается при помощи опции -d). Вы можете выбрать один столбец или несколько, а затем перенаправить вывод, чтобы проанализировать его.

Также можно выводить столбцы при помощи команды csvcut из набора csvkit suit.

csvcut -n example_data.csv — возвращает список
столбцов.
csvcut -c -1 example_data.csv — возвращает все
значения первого столбца.

csvlook

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

head -4 example_data.csv | csvlook

Вывод этой команды будет таким:

|-------+-------+-------|
|  COL1 |  COL2 |  COL3 |
|-------+-------+-------|
|  0    |  1    |  'D'  |
|  1    |  0    |  'C'  |
|  2    |  0    |  'C'  |
|  3    |  1    |  'C'  |
|-------+-------+-------|

2. Очистка данных

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

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

Тут надо идти от противного, т. е., выбирать не те столбцы, которые хотите удалить, а те, которые вам нужны. Самый простой способ это сделать — использовать команду cut. Таким образом, при помощи перенаправления вывода, вы сможете вывести нужные столбцы в новый набор данных:

cut -d»,» -f2,5 example_data.csv > new_example_data.csv

Фильтрация при помощи grep

Команда grep позволяет задействовать всю мощь регулярных выражений. Как по мне, это самый удобный инструмент для анализа данных. Например:

grep -n ‘C’ example_data.csv > filtered_data.csv

Эта команда найдет все строки с символом «C», вычленит их, добавит номер строки и запишет в новый файл:

3:1,0,C
4:2,0,C
5:3,1,C

Можно добавить опцию -v, чтобы инвертировать поиск, т. е., получить все строки, где нет символа «C». Также можно добавить опцию -i для игнорирования регистра при поиске.

Команду grep можно сочетать в конвейере с командой cut. Это позволит проверять отдельные столбцы, получать индексы отфильтрованных строк и выбирать эти строки при помощи команд sed или awk.

awk и sed

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

Сортировка

Давайте разберем следующую команду:

tail -n +1 example_data.csv | sort -t"," -k1,1g -k2,2gr
-k2,2

Что здесь происходит? Мы берем данные без заголовков, указываем, что столбцы в файле разделены запятой (опция -t), и сортируем данные по первым трем столбцам: первый столбец — в числовом порядке (опция -g), второй — тоже в числовом, но в обратном порядке (добавлена опция -r), а последний — в принятом по умолчанию лексикографическом порядке. Число столбцов, которые нужно отсортировать, можно изменять. Номера столбцов служат ключами сортировки (опция -k); можно использовать и диапазон столбцов.

3. Базовый анализ

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

Подсчет слов (символов)

Для подсчета служит простая команда wc:

wc example_data.csv

Таким образом мы получим число строк, слов и байтов в файле. Число байтов также можно считать числом символов в файле с кодировкой ASCII. Эта команда также имеет опцию -m для использования кодировки консоли.

Уникальные элементы

В Linux для этого есть специальная утилита:

uniq -u example_data.csv 

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

cut -d"," -f2 example_data.csv | uniq -u 

Этот конвейер команд выведет все уникальные значения во втором столбце файла.

Статистические значения

Для общих подсчетов в выбранных столбцах (минимальное, максимальное значение, сумма, медианное значение, среднее значение) есть специальный инструмент — csvstat. Он входит в набор csvkit suit.

csvcut -c 1 example_data.csv | csvstat

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

4. Выборка

Давайте представим, что наши данные очищены и подготовлены для статистического анализа или построения модели. Каким будет следующий шаг? В большинстве случаев это взятие выборки данных. Мы можем легко сделать это в консоли Linux при помощи команды shuf (от shuffle — «перемешать, перетасовать»).

shuf -n 4 example_data.csv 
— выведет 4 строки файла, выбранные случайным образом.

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

tail -n +1 example_data.csv | shuf -n 4

Не забывайте, что вы можете использовать перенаправление вывода, чтобы записать его в отдельный файл.

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

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

[customscript]techrocks_custom_after_post_html[/customscript]

[customscript]techrocks_custom_script[/customscript]

Оставьте комментарий

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

Прокрутить вверх