Перевод статьи «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]