Нужно быстро выполнить операцию с большим набором данных, не запуская 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 для ваших нужд данных!