1.2. Инструменты аналитика данных: командная строка

В этом параграфе мы сначала поговорим о командной строке — очень простом, но очень мощном инструменте, которым пользуются и аналитики данных, и программисты, и многие другие ИТ-специалисты.

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

Интерфейс командной строки

Вряд ли вы часто им пользуетесь — современные операционные системы (Windows, MacOS) взаимодействуют с пользователем с помощью графического интерфейса: окон, папок и файлов. Нужно запустить программу — кликаем два раза по ярлыку. Хотим посмотреть, что там в «Загрузках», — открываем соответствующее окно.

Всё это можно сделать и через командную строку. И даже больше: вспомните один из штампов Голливуда — когда герой с помощью интерфейса командной строки делает невероятные вещи: взламывает банк, или проникает в систему безопасности преступного синдиката, или подключается к камерам наблюдения. Обычно это выглядит как-то так:

bourne

Во всех популярных операционных системах (macOS, Linux, Windows) есть одна или даже несколько программ для работы с командной строкой. Вот они:

Программа cmd в Windows:

cmd

Программа PowerShell в Windows:

ps

Программа «Терминал», MacOS:

maczsh

Программа Bash, Ubuntu 22.04:

bash

Все они называются командными интерпретаторами. Они выполняют (интерпретируют) ваши команды.

С ними можно делать всё то же самое, что вы делаете с помощью графического интерфейса (его ещё называют GUI), — только гораздо быстрее. Вы убедитесь в этом ближе к концу параграфа, пока просто поверьте нам на слово.

Последнее, что важно тут сказать, — командная строка работает в цикле REPL (от англ. read-eval-print loop — «цикл „чтение — вычисление — вывод“»):

  • программа демонстрирует приглашение к вводу (например, C:\Users\bibilov>), показывая, что готова выполнить команду;
  • команда вместе с параметрами вводится с клавиатуры, в конце нажимается клавиша Enter;
  • на экране показывается результат работы программы и новое приглашение к вводу.

Несколько примеров для разогрева

Здесь и далее мы будем работать в Powershell, так как, по статистике, большая часть пользователей применяет Windows. Для счастливых обладателей MacOS или Linux/Ubuntu в конце главы мы поместили таблицу соответствия использованных команд. Итак, поехали!

Чтобы открыть Powershell, введите это название в окошко поисковой строки справа от кнопки «Пуск». Можно воспользоваться более хардкорным вариантом: нажать клавиши Win + R, ввести в открывшемся окне (оно называется «Выполнить») команду powershell и нажать Enter. Теперь мы можем поработать с командной строкой.

Допустим, нам нужно узнать время. Введём команду date, которая выведет текущую дату в нулевом часовом поясе (UTC+0):

C:\Users\bibilov> date
Sat Sep 24 05:46:47 PM UTC 2022

При вводе команды также можно передавать параметры — это опции, которые позволяют уточнять, какой результат мы хотим получить. Например, с параметром формата %d, команда выводит только текущий день месяца:

C:\Users\bibilov> date -Format "dd"
24

Почему командный интерпретатор не вымер

Потому что с его помощью удобно автоматизировать задачи. Если нам надо сделать что-то один раз, конечно, привычней это сделать с помощью графического интерфейса.

Но если нужно повторить что-то несколько сотен раз, выполнить на нескольких компьютерах одни и те же действия, повторять одинаковые действия каждые 5 минут — тратить бесценные часы живого человека нежелательно.

Можно записать подряд несколько текстовых команд в один файл — сценарий и заставить компьютер повторять его. А записывать текстом понятней и удобней всего.

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

Например, мы можем собрать несколько команд по созданию Word-документа (если он у вас установлен):

C:\Users\bibilov>
$w = New-Object -ComObject Word.Application # Получили доступ к установленному Word.
$doc = $w.Documents.Add() # Создаем новый документ.
$selection = $w.Selection # Объект, где находится курсор в данный момент.
$selection.TypeText("Part I") # Напечатаем текст.
$w.Visible = $True # Сделаем Word видимым, все манипуляции до этого велись в памяти, без запуска GUI.

create

Давайте напишем свой первый сценарий автоматизации.

Цепочки преобразований данных

У нас есть огромное количество «строительных блоков» — готовых компонентов, программ, команд, на основе которых можно писать сценарии. Мы можем настроить их совместную работу таким образом, чтобы выстраивался конвейер (цепочка, pipeline) — совсем как на заводе Ford, где каждую операцию производит узкий специалист, а результат работы передается следующему.

Представим такую задачу: нам нужно распознать тексты, которые написаны на мемах в интернете, чтобы посчитать среднее число слов в них. Конечно, можно посчитать их вручную — но это нереально, тут так и просится автоматизация.

Для этого нам нужно:

  1. создать папку для работы;
  2. скачать мемы, которые мы хотим распознать (поскольку задача учебная, ограничимся только одним);
  3. конвертировать изображение в подходящий для распознавания формат;
  4. извлечь текст со страницы;
  5. посчитать количество слов.

Для каждого из этих пунктов есть готовая программа с интерфейсом командной строки.

1. Создать папку для работы

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

C:\Users\bibilov> mkdir Data
    Каталог: C:\Users\bibilov\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        09.02.2023     10:20                Data

И сразу перейдем в неё:

C:\Users\bibilov> cd Data

2. Скачать мемы, которые мы хотим распознать (поскольку задача учебная, ограничимся только одним)

Нам потребуется программа wget, которая в самом простом случае принимает 1 параметр — ссылку на файл. Она уже установлена.

C:\Users\bibilov\Data> wget -O 01.webp https://img-9gag-fun.9cache.com/photo/aVbxpod_460swp.webp

После чего в папке будет сохранен 1 файл: 01.webp. Выглядит он так:

meme

3. Извлечь изображение со страницы

Преобразуем картинку в более привычный нам формат. Программа называется Image Magick. Скачать её можно тут. Вам нужна версия, которая называется ImageMagick-7.1.1-24-Q16-HDRI-x64-dll.exe. Установите её со стандартными настройками установки, дополнительно ничего изменять не нужно.

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

C:\Users\bibilov\Data> magick 01.webp 01.png

3. Распознать текст на картинке

Здесь нам поможет система распознавания текстов Tesseract. Установить её можно отсюда. Вам нужна версия tesseract-ocr-setup-3.02.02.exe. Установите её со стандартными настройками установки, дополнительно ничего изменять не нужно.

C:\Users\bibilov\Data> tesseract 01.png 01

Указываем исходный файл и текстовый файл, куда сохраним всё содержимое. В данном случае — 01.txt. Расширение txt не пишется в параметре команды.

Откроем этот файл в блокноте.

C:\Users\bibilov\Data> notepad.exe 01.txt

Примерное содержимое файла:

Harry didn’t cast a
single spell with
his wand in the 1st movie

Забавно. Никогда не задумывался об этом раньше.

4. Посчитать слова

Это тоже очень просто. Тут мы сначала открываем файл, а потом считаем слова в нём:

C:\Users\bibilov\Data> Get-Content 01.txt | Measure-Object -Word

Lines Words Characters Property
----- ----- ---------- --------
         13

5. Удаление папки

Вернёмся в исходную папку и удалим папку с результатами нашего эксперимента:

C:\Users\bibilov\Data> cd C:\Users\bibilov\
C:\Users\bibilov> Remove-Item –path Data –recurse

Итоговый сценарий для одного изображения

wget -O 01.webp https://img-9gag-fun.9cache.com/photo/aVbxpod_460swp.webp
magick 01.webp 01.png
tesseract 01.png 01
Get-Content 01.txt | Measure-Object -Word

Мы практически один в один воплотили изначальную идею:

1. скачать картинку;
2. распознать текст на картинке;
3. посчитать число слов.

Вот таблица соответствий, чтобы реализовать сценарий, если вы используете Linux или macOS.

Windows (powershell)

Linux (bash) или macOS (zsh)

date

Идентично

date -Format "dd"

date +'%d'

mkdir Data

Идентично

cd Data

Идентично

wget -O 01.webp https://img-9gag-fun.9cache.com/photo/aVbxpod_460swp.webp

Идентично

magick 01.webp 01.png

Идентично

tesseract 01.png 01

Идентично

notepad.exe 01.txt

open 01.txt

cd

Идентично

Remove-Item –path Data –recurse

rm -rf Data

Get-Content 01.txt \| Measure-Object -Word

wc -w 01.txt

Давайте чуть остановимся и сформулируем, что мы узнали:

  • сценарии автоматизации не сильно больше объяснения на русском языке;
  • мы оперируем высокоуровневыми программами, например Tesseract;
  • результаты действия одной программы передаются следующей — так и получается цепочка преобразований.
  • все приведённые программы бесплатны и свободны, что дополнительно приятно.

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

А пока переходите к следующему параграфу главы. В нём вы узнаете, как видит и хранит данные компьютер и почему это так похоже на Кощея и его иглу.

Отмечайте параграфы как прочитанные чтобы видеть свой прогресс обучения

Вступайте в сообщество хендбука

Здесь можно найти единомышленников, экспертов и просто интересных собеседников. А ещё — получить помощь или поделиться знаниями.
Вступить
Сообщить об ошибке
Предыдущий параграф1.1. Зачем вам этот учебник и как его читать
Следующий параграф1.3. О данных и информации