Нужно быстро выполнить операцию с большим набором данных, не запуская Python или R? Bash предлагает способ с его полезным набором команд.

Как специалисты по данным, мы хорошо разбираемся в Jupyter Notebooks и RStudio. От Pandas до Tidyverse беспорядочные данные обрабатываются очень эффективно и без усилий, чтобы предоставить входные данные алгоритмам машинного обучения для целей моделирования. Однако некоторые простые операции, такие как сортировка кадров данных и фильтрация строк по заданному условию, можно так же легко выполнить с помощью интерфейса командной строки Bash. Впервые выпущенный в 1989 году, Bash является неотъемлемой частью инструментария специалиста по данным, но его не преподают на учебных курсах по науке о данных, магистерских программах и даже онлайн-курсах.

Эта статья познакомит вас с удивительным миром Bash, помимо основных часто используемых команд, таких как печать рабочего каталога с помощью pwd,изменение каталогов с помощью cd, перечисление элементов в папке с помощью ls, копирование элементов с помощью cp, перемещение элементов с помощью mv, удаление элементов с помощью rmсреди прочего . После прочтения статьи вы познакомились со встроенными командами обработки данных, доступными в Bash, готовыми к вашему использованию.

Набор данных

Мы будем использовать два набора данных, первый из которых представляет собой 40-летнюю историю акций Apple с 1 января 1981 года по 31 декабря 2020 года, которую можно загрузить с Yahoo Finance здесь. Второй набор данных представляет собой пользовательский набор данных, как показано ниже.

Команды

Давайте теперь пройдемся по набору команд в Bash.

Команда wc:команда wcдля подсчета слов возвращает количество строк, количество слов и количество символов в файле в указанном порядке.

Если вы не хотите видеть путь к файлу в результате, вы можете использовать оператор перенаправления ввода ‹”.

Кроме того, используйте параметры -l, чтобы вернуть количество строк, -w, чтобы вернуть количество слов, и -m, чтобы вернуть количество символов. .

Команда head.Командаheadпо умолчанию возвращает первые 10 строк в файле.

Чтобы увидеть первые n строк, просто передайте параметр -n, указав количество строк.

Команда tail.Командаtailпо умолчанию возвращает последние 10 строк в файле.

Аналогично команде head, чтобы увидеть последние n строк, просто передайте параметр -n.

Команда cat:catдля конкатенации — это многоцелевая команда, используемая для создания файлов и просмотра содержимого файлов, а также для других целей.

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

Чтобы отслеживать номера строк, можно использовать параметр -n.

Чтобы создать новый файл, просто используйте оператор перенаправления вывода «›» после cat и укажите имя файла. Добавьте свой контент в отведенное место и нажмите CTRL+D, чтобы выйти из редактора.

Чтобы добавить к существующему файлу, используйте оператор добавления «››» после cat и укажите имя файла. Как и раньше, добавьте содержимое, которое нужно добавить, и нажмите CTRL+D, чтобы выйти из редактора.

Команда sort. Командаsortиспользуется для сортировки содержимого файла по порядку ASCII: сначала пробелы, затем цифры, затем прописные буквы, за которыми следуют строчные буквы. .

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

По умолчанию команда sort сортирует по возрастанию и лексикографически действует на первый символ в каждой строке набора данных, здесь это (I, 1, 7, 9, 2, 4). Лексикографическая сортировка означает, что «29» предшествует «4,5». Однако, поскольку у нас есть файл, разделенный запятыми, мы хотим, чтобы sort воздействовал на столбцы и по умолчанию воздействовал на первый столбец (ID, 1312, 7891, 9112, 2236, 4561). . Таким образом, мы передаем параметр разделителя -t вместе с разделителем-запятой.

Обратите внимание, что строка заголовка смещена в конец, поскольку буквы верхнего регистра идут после цифр в порядке ASCII. Для численной сортировки мы должны использовать опцию -n. Это гарантирует, что сортировка выполняется только в числовом, а не в лексикографическом порядке.

Обратите внимание, что строка заголовка осталась неизменной. Чтобы отсортировать набор данных в обратном порядке, передайте параметр -r. Результат является обратным выходу числовой сортировки.

Чтобы применить сортировку к определенному столбцу, передайте параметр -k с номером столбца. Здесь отсортируем по возрасту в порядке возрастания.

Давайте также посмотрим пример сортировки нечисловых столбцов, таких как последний столбец «основной».

Команду sort также можно использовать для сортировки столбцов месяца с помощью параметра -M, а также проверить, отсортирован ли столбец с помощью параметра -c. удалить дубликаты и отсортировать с помощью параметра -u.

Команда tr:Командаtrозначает «перевести» и используется для перевода и удаления символов. Он читает только из стандартного ввода и отображает вывод на стандартном выводе.

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

Чтобы преобразовать символы верхнего регистра в нижний, передайте первый аргумент как «[:upper:]», а второй аргумент как «[:lower:]», и наоборот. В качестве альтернативы, первый аргумент может быть «[A-Z]», а второй тогда будет «[a-z]».

Чтобы преобразовать файл, разделенный запятыми, в файл, разделенный табуляцией, просто используйте команду tr с первым аргументом как «, а вторым аргументом как «\t».

Чтобы удалить символ в файле, используйте параметр удаления -d с командой tr. Операция чувствительна к регистру.

Обратите внимание, что символ «S» удален из всего файла. Аналогично, чтобы удалить все заглавные буквы, используйте строку символов «[:upper:]», чтобы удалить все цифры, используйте строку символов «[:digit:]» и т. д.

Чтобы удалить все, кроме символа, используйте параметр дополнения -c вместе с параметром удаления -d с командой tr.

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

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

Команда paste. Командаpasteиспользуется для горизонтального соединения двух файлов с помощью разделителя табуляции по умолчанию.

Параметр -d можно использовать для указания пользовательского разделителя. Давайте объединим два набора данных с разделителем-запятой и посмотрим первые 6 строк, используя оператор вертикальной черты «|».

Команда uniq.Командаuniqиспользуется для обнаружения и фильтрации повторяющихся строк в файле.

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

Вот как сейчас выглядит набор данных.

Теперь давайте посмотрим количество строк с их количеством, используя опцию -c.

Обратите внимание, что при обнаружении повторяющихся записей учитывается регистр. Чтобы игнорировать регистр, используйте параметр -i.

Другие полезные параметры команды uniq включают параметр -u, который возвращает только уникальные позиции, и параметр -d, который возвращает только повторяющиеся позиции.

Команда grep:grepозначает «gлокальный rобычный e xpression print” и представляет собой встроенную в Bash утилиту для поиска позиций, соответствующих регулярному выражению.

Давайте найдем все строки, в которых есть «Джон», используя grep.

Поскольку grep чувствителен к регистру, мы можем использовать параметр -i, чтобы игнорировать регистр при сопоставлении.

Количество строк, содержащих имя «Джон», можно получить с помощью параметра подсчета -c.

Чтобы сопоставить целые слова вместо подстроки с помощью команды grep, используйте параметр слова -w. Для демонстрации давайте сначала добавим новую строку с помощью команды cat.

Давайте посмотрим на вывод по умолчанию команды grep.

Чтобы искать только целое слово «ohn», а не все подстроки, давайте теперь воспользуемся опцией слова -w.

Чтобы отслеживать номера строк позиций, возвращаемых командой grep, используйте параметр -n.

Команда cut.Командаcutиспользуется для вырезания и извлечения разделов из каждой строки файла.

Чтобы вернуть конкретный столбец, необходимо использовать параметр поля -f. Счетчик поля для опции начинается с 1, а не с 0 для первого столбца и далее.

Как мы видим, Bash не может идентифицировать столбцы, поэтому параметр разделителя -d должен использоваться вместе с ним.

Давайте рассмотрим более сложный пример команды cut с использованием набора данных о ценах на акции Apple. В частности, мы хотим увидеть столбцы — Date, High, Low, Volume — первых 10 строк данных в файле. Для этого мы сначала получаем первые 11 строк (включая заголовок), используя команду head в качестве стандартного вывода, и передаем их в команду cut. Обратите внимание, что параметр поля -f получает в качестве входных данных несколько номеров столбцов.

Другой полезный синтаксис.Специальный символ“!$”в Bash используется для обозначения последнего аргумента предыдущей команды. CTRL + Rиспользуется для обратного поиска команд в истории сеансов Bash.

Давайте рассмотрим пример символа “!$”, чтобы лучше понять его.

Теперь предположим, что мы хотим просмотреть только первые 3 строки в файле. Вместо повторного указания полного пути к файлу в моей новой команде я могу просто ввести “head -3 !$”. Специальный символ “!$” автоматически указывает путь.

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

Всю историю команд сеанса можно просмотреть с помощью команды history, если необходимо выполнить поиск вручную.

Подведение итогов

Командная строка Bash — очень полезный инструмент для быстрого анализа данных без запуска какой-либо интегрированной среды разработки. Все команды становятся более мощными инструментами в сочетании с перенаправлением ввода/вывода («‹», «›», «››») и утилитами канала («|») Bash. Поэкспериментируйте с этими утилитами и найдите эффективные способы обработки ваших данных. Не забудьте запачкать руки, чтобы использовать Bash для ваших нужд данных!