10 основных команд Linux для специалистов по анализу данных

Если вы только начинаете свой путь в науке о данных, вам может показаться, что всё дело в библиотеках Python, блокнотах Jupyter и сложных алгоритмах машинного обучения. И хотя всё это, безусловно, важно, есть мощный набор инструментов, который часто упускают из виду: скромная командная строка.
Мы более десяти лет работаем с системами Linux и можем сказать, что освоение этих инструментов командной строки значительно облегчит вам жизнь. Они быстрые, эффективные и зачастую являются самым быстрым способом просмотреть данные, очистить файлы или автоматизировать повторяющиеся задачи.
Чтобы сделать эту статью практическим и наглядным, в этой статье мы будем использовать пример набора данных о продажах в сфере электронной коммерции. Сначала мы покажем вам, как его создать, а затем мы изучим его с помощью всех 10 инструментов.
Создайте файл с примером:
cat > sales_data.csv << 'EOF' order_id,date,customer_name,product,category,quantity,price,region,status 1001,2014-03-05,AndreyEx Ex,telefon,Destroyes,1,12345.67,Moscow,completed ... EOF
Теперь давайте изучим этот файл с помощью наших 10 основных инструментов!
1. grep — ваш инструмент для поиска по шаблону
Думайте о команде grep как о своём детекторе данных, который просматривает файлы и находит строки, соответствующие заданным вами шаблонам. Это невероятно полезно при работе с большими файлами журналов или текстовыми наборами данных.
Пример 1: Найдите все заказы от Джона Смита.
grep "AndreyEx Ex" sales_data.csv
Пример 2: посчитайте, сколько у нас заказов на ноутбуки.
grep -c "telefon" sales_data.csv
Пример 3: Найдите все незавершенные заказы.
grep -v "completed" sales_data.csv | grep -v "order_id"
Пример 4: Найдите заказы по номерам строк.
grep -n "Electronics" sales_data.csv | head -5
2. awk – Универсальный инструмент для обработки текста
Команда awk — это своего рода мини-язык программирования, предназначенный для обработки текста. Он идеально подходит для извлечения определённых столбцов, выполнения вычислений и преобразования данных на лету.
Пример 1: извлеките только названия товаров и цены.
awk -F',' '{print $4, $7}' sales_data.csv | head -6
Пример 2: рассчитайте общую выручку от всех заказов.
awk -F',' 'NR>1 {sum+=$7} END {print "Общий доход: $" sum}' sales_data.csv
Пример 3: Показать ордера, цена которых превышает 100 долларов.
awk -F',' 'NR>1 && $7>100 {print $1, $4, $7}' sales_data.csv
Пример 4: Рассчитайте среднюю цену по категориям.
awk -F',' 'NR>1 { category[$5]+=$7 count[$5]++ } END { for (cat in category) printf "%s: $%.2f\n", cat, category[cat]/count[cat] }' sales_data.csv
3. sed — потоковый редактор для быстрого внесения изменений
Команда sed — это ваш незаменимый инструмент для поиска и замены, а также преобразования текста. Это похоже на «поиск и замену» в текстовом редакторе, только выполняется из командной строки и гораздо быстрее.
Пример 1: замените значения NULL на «Неизвестно».
sed 's/NULL/Unknown/g' sales_data.csv | grep "Unknown"
Пример 2: удалите строку заголовка.
sed '1d' sales_data.csv | head -3
Пример 3: замените «завершено» на «сделано».
sed 's/completed/DONE/g' sales_data.csv | tail -5
Пример 4: добавьте знак доллара перед всеми ценами.
sed 's/,\([0-9]*\.[0-9]*\),/,$,/g' sales_data.csv | head -4
4. cut — простое извлечение данных из столбца
Несмотря на широкие возможности awk
, иногда вам может понадобиться что-то простое и быстрое. В таких случаях на помощь приходит команда cut, которая специально разработана для извлечения столбцов из файлов с разделителями.
Пример 1: извлечение имён клиентов и названий товаров.
cut -d',' -f3,4 sales_data.csv | head -6
Пример 2: извлеките только столбец с регионами.
cut -d',' -f8 sales_data.csv | head -8
Пример 3: получение идентификатора заказа, товара и статуса.
cut -d',' -f1,4,9 sales_data.csv | head -6
5. Сортировка — упорядочивание данных
Сортировка данных необходима для анализа, и команда sort делает это невероятно эффективно, даже с файлами, которые слишком велики, чтобы поместиться в памяти.
Пример 1: отсортируйте клиентов по алфавиту.
sort -t',' -k3 sales_data.csv | head -6
Пример 2: отсортируйте по цене (от самой высокой к самой низкой).
sort -t',' -k7 -rn sales_data.csv | head -6
Пример 3: отсортируйте по региону, затем по цене.
sort -t',' -k8,8 -k7,7rn sales_data.csv | grep -v "order_id" | head -8
6. uniq — поиск и подсчёт уникальных значений
Команда uniq помогает определять уникальные значения, подсчитывать вхождения и находить дубликаты. Это упрощённая версия value_counts()
.
uniq
работает только с отсортированными данными, поэтому обычно вы используете pipe
его с помощью sort
.
Пример 1: подсчитайте количество заказов по регионам.
cut -d',' -f8 sales_data.csv | tail -n +2 | sort | uniq -c
Пример 2: подсчитайте количество заказов по категориям товаров.
cut -d',' -f5 sales_data.csv | tail -n +2 | sort | uniq -c | sort -rn
Пример 3: определите, какие клиенты совершили несколько покупок.
cut -d',' -f3 sales_data.csv | tail -n +2 | sort | uniq -c | sort -rn
Пример 4: Показать заказанные уникальные товары.
cut -d',' -f4 sales_data.csv | tail -n +2 | sort | uniq
7. wc — подсчёт слов (и не только)
Пусть вас не вводит в заблуждение название: команда wc (подсчёт слов) полезен не только для подсчёта слов, но и для быстрой обработки статистических данных.
Пример 1: подсчитайте общее количество заказов (без учёта заголовка).
wc -l sales_data.csv
Пример 2: посчитайте, сколько заказов на электронику.
grep «Electronics» sales_data.csv | wc -l
Пример 3: подсчитайте общее количество символов в файле.
wc -c sales_data.csv
Пример 4: одновременный просмотр нескольких показателей.
wc sales_data.csv
8. Заголовок и подвал — предварительный просмотр данных
Вместо того чтобы открывать большой файл, используйте команду head, чтобы просмотреть первые несколько строк, или tail
, чтобы просмотреть последние несколько строк.
Пример 1: просмотрите первые 5 заказов.
head -6 sales_data.csv
Пример 2: просмотрите только заголовки столбцов.
head -1 sales_data.csv
Пример 3: просмотрите последние 5 заказов.
tail -5 sales_data.csv
Пример 4: пропустите заголовок и просмотрите данные
tail -n +2 sales_data.csv | head -3
9. find — поиск файлов в разных каталогах
При работе над проектами часто приходится искать файлы, разбросанные по разным каталогам, и команда find невероятно эффективна для этого.
Для начала давайте создадим реалистичную структуру каталогов:
mkdir -p data_project/{raw,processed,reports} cp sales_data.csv data_project/raw/ cp sales_data.csv data_project/processed/sales_cleaned.csv echo "Сводный отчет" > data_project/reports/summary.txt
Пример 1: найдите все файлы CSV.
find data_project -name "*.csv"
Пример 2: найдите файлы, изменённые за последнюю минуту.
find data_project -name "*.csv" -mmin -1
Пример 3: найдите и посчитайте количество строк во всех CSV-файлах.
find data_project -name «*.csv» -exec wc -l {} \;
Пример 4: найдите файлы размером более 1 КБ.
find data_project -type f -size +1k
10. jq — выдающийся процессор JSON
В современной науке о данных большая часть информации поступает из API, которые обычно отправляют данные в формате JSON — структурированном способе организации информации.
Такие инструменты, как grep
, awk
, и sed
, отлично подходят для поиска и обработки обычного текста, но jq
создан специально для работы с данными в формате JSON.
sudo apt install jq # Ubuntu/Debian sudo yum install jq # CentOS/RHEL
Давайте сначала преобразуем некоторые данные в формат JSON:
cat > sales_sample.json << 'EOF' { "orders": [ { "order_id": 1001, "customer": "AndreyEx Ex", "product": "telefon", "price": 899.99, "region": "North", "status": "completed" }, { "order_id": 1002, "customer": "Sarah Johnson", "product": "Mouse", "price": 24.99, "region": "South", "status": "completed" }, { "order_id": 1006, "customer": "Sarah Johnson", "product": "telefon", "price": 899.99, "region": "South", "status": "pending" } ] } EOF
Пример 1: форматирование JSON.
jq '.' sales_sample.json
Пример 2: извлеките все имена клиентов.
jq '.orders[].customer' sales_sample.json
Пример 3: отфильтруйте заказы на сумму более 100 долларов.
jq '.orders[] | select(.price > 100)' sales_sample.json
Пример 4: преобразование в формат CSV.
jq -r '.orders[] | [.order_id, .customer, .product, .price] | @csv' sales_sample.json
Бонус: сочетание инструментов с трубами
Вот где начинается настоящее волшебство: вы можете объединять эти инструменты с помощью пайпов (|)
для создания мощных конвейеров обработки данных.
Пример 1: найдите 10 самых распространённых слов в текстовом файле.
cat article.txt | tr '[:upper:]' '[:lower:]' | tr -s ' ' '\n' | sort | uniq -c | sort -rn | head -10
Пример 2: анализ журналов веб-сервера
cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20
Пример 3: Быстрое изучение данных:
cut -d',' -f3 sales.csv | tail -n +2 | sort -n | uniq -c
Практический Пример рабочего процесса
Позвольте мне показать вам, как эти инструменты работают вместе в реальной ситуации. Представьте, что у вас есть большой CSV-файл с данными о продажах и вы хотите:
- Удалите заголовок.
- Выделите столбцы с названием товара и ценой.
- Найдите 10 самых дорогих товаров.
Вот вам однострочник:
tail -n +2 sales.csv | cut -d',' -f2,5 | sort -t',' -k2 -rn | head -10
Здесь:
tail -n +2
: Пропустите строку заголовка.cut -d',' -f2,5
: Извлеките столбцы 2 и 5.sort -t',' -k2 -rn
: Сортировка по второму полю в порядке убывания.head -10
: Показать 10 лучших результатов.
Заключение
Эти 10 инструментов командной строки — как швейцарский армейский нож для работы с данными. Они быстрые, эффективные, и как только вы освоите их, то будете постоянно к ним обращаться, даже когда будете работать над проектами на Python.
Начните с основ: head
, tail
, wc
, и grep
. Когда вы освоите их, добавьте в свой арсенал cut
, sort
, и uniq
. Наконец, переходите на новый уровень с помощью awk
, sed
, и jq
.
Помните, что вам не нужно запоминать всё. Сохраните эту статью в закладках и обращайтесь к нему, когда вам понадобится конкретный инструмент. Со временем эти команды станут для вас привычными.
Редактор: AndreyEx