Оценка возможностей csvkit для управления данными из командной строки

Столкнувшись с новым набором данных CSV для анализа, большинство из нас, специалистов по данным, мгновенно запускают нашу любимую среду IDE или редактор блокнотов и начинают с обычного импорта numpy и pandas.

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

Я буду использовать csvkit, инструмент, созданный специально для этой цели. Я также буду использовать в примерах набор данных Kaggle, который можно загрузить также из командной строки, как таковой:

pip install kaggle 
kaggle datasets download datafiniti/hotel-reviews 
unzip hotel-reviews.zip

Изучение набора данных

csvcut:

Мы мало что знаем об этом наборе данных, кроме как об отелях. Во-первых, мы хотели бы знать, какие столбцы там есть. Легкий:

csvcut -n Datafiniti_Hotel_Reviews.csv

csvlook:

Допустим, вы хотите взглянуть на первые несколько значений столбцов province и postalCode. В приведенном ниже коде мы выбираем подмножество столбцов с csvcut и помещаем его в качестве входных данных в csvlook:

csvcut -c country,province,postalCode Datafiniti_Hotel_Reviews.csv | csvlook --max-rows 10

В качестве альтернативы мы могли бы передать вывод csvlook команде head вместо использования параметра --max-rows.

csvstat:

Теперь, учитывая вышеприведенные выходные данные, мы могли бы проверить, что данные относятся только к США. Чтобы узнать больше о конкретных столбцах, мы можем использовать csvstat:

csvcut -c country,province,postalCode Datafiniti_Hotel_Reviews.csv | csvstat

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

Если вы хотите получить статистику по всем столбцам, вы, конечно, можете использовать csvstat напрямую, без конвейера:

csvstat Datafiniti_Hotel_Reviews.csv

csvsort:

Предположим, теперь мы хотим быстро взглянуть на самые последние обзоры вместе с городами. Мы можем попробовать сделать это с помощью csvsort:

csvcut -c reviews.date,city,reviews.title Datafiniti_Hotel_Reviews.csv | csvsort -c reviews.date -r | csvlook --max-rows 10

Замечание: в зависимости от выбранных столбцов я иногда получаю сообщение об ошибке типа Row has X values, but Table has Y columns. В этом случае добавление --snifflimit 0 устранило проблему.

csvgrep:

Чтобы завершить этап исследования, давайте поищем все заголовки отзывов, в которых упоминаются "тихие" или "тихие" отели. В приведенной ниже команде я добавляю номера строк с помощью флага -l. Обратной стороной команды csvgrep является то, что я не мог передать ее вывод другим командам.

csvcut -c name,reviews.title -l Datafiniti_Hotel_Reviews.csv | csvgrep -c reviews.title -r "(?i)(quiet|peaceful)

Запрос набора данных

Очень интересная особенность csvkit - это возможность запрашивать данные из командной строки с помощью SQL.

Например, давайте снова выполним поиск тихих отелей, но на этот раз выведем их город и название отеля:

csvsql --query "select city, name from Datafiniti_Hotel_Reviews where [reviews.text] LIKE '%quiet%' limit 10;" Datafiniti_Hotel_Reviews.csv

Выполнение этой команды дает следующий результат:

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

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

Вывод

В целом, идея csvkit показалась мне интересной, но медленная скорость выполнения запросов sql сильно разочаровала. Для меня ценностного предложения было недостаточно, чтобы отвлечь меня от pandas и jupyter, даже для исследования.