10 herramientas de línea de comandos para análisis de datos en Linux

¿Por qué observar todo en una hoja de cálculo cuando la terminal puede ser más rápida, más potente y más fácil de escribir?

Muchas personas acostumbradas a trabajar en un entorno gráfico pueden usar de forma predeterminada una herramienta de hoja de cálculo, pero hay otra forma que podría ser más rápida y eficiente, con un poco más de esfuerzo.

Y no necesitas convertirte en un experto en un lenguaje de modelado estadístico o en un conjunto de herramientas de big data para aprovechar estas herramientas.

Análisis desde la terminal

Estoy hablando de la línea de comandos de Linux. Simplemente usando algunas herramientas que probablemente ya hayas instalado en tu computadora, puedes aprender mucho sobre un conjunto de datos sin tener que abandonar tu terminal.

Los usuarios de Linux desde hace mucho tiempo, por supuesto, se reirán: han estado utilizando muchas de estas herramientas durante años para analizar registros y comprender las herramientas de configuración.

Pero para el recién llegado a Linux, la revelación de que ya tiene todo un conjunto de herramientas de análisis de datos a su alcance puede ser una sorpresa bien recibida.

La mayoría de estas herramientas tampoco se limitan estrictamente a Linux. La mayoría se remonta a los días de Unix, y los usuarios de otros sistemas operativos similares a Unix probablemente ya los tengan instalados o puedan hacerlo con facilidad.

Muchos son parte del paquete GNU Coreutils, mientras que algunos se mantienen individualmente y, con algo de trabajo, incluso puedes usarlos en Windows.

¡Probemos algunas de las muchas herramientas simples de código abierto para el análisis de datos y veamos cómo funcionan!

Si desea seguir estos ejemplos, continúa y descarga este archivo de datos de muestra, de GitHub, que es una lista CSV (valores separados por comas) de artículos publicados en Opensource.com

1-2. Head y Tail

Primero, comencemos administrando el archivo. ¿Qué hay ahí dentro? ¿Cómo se ve su formato? Puedes usar el comando cat para mostrar un archivo en la terminal, pero eso no nos va a hacer mucho bien si estás trabajando con archivos de más de unas pocas docenas de líneas.

Entra a head y tail. Ambas son utilidades para mostrar un número específico de líneas desde la parte superior o inferior del archivo. Si no especificas el número de líneas que deseas ver, obtendrás 10. Probemos con nuestro archivo.

Mirando esas últimas tres líneas, puedo elegir una fecha, el nombre del autor, el título y algunas otras partes de información de inmediato. Pero no sé qué es cada columna.

Veamos la parte superior del archivo y veamos si tiene encabezados para explicar qué significa cada columna:

Bien, todo eso tiene sentido ahora. Parece que tenemos una lista de artículos con la fecha de publicación, el tipo de contenido para cada uno, el autor, el título, el número de comentarios, la URL relativa, las etiquetas que tiene cada artículo y el número de palabras.

2. wc

Eso es genial, pero ¿qué tan grande es este archivo? ¿Estamos hablando de docenas de artículos que queremos analizar, o cientos, o incluso miles?

El comando wc puede ayudar con eso. Abreviatura de “recuento de palabras – word count”, wc puede contar el número de bytes, caracteres, palabras o líneas en el archivo. En nuestro caso, queremos saber el número de líneas.

Y ahí está. 93 líneas en este archivo; Como sabemos que la primera fila contenía encabezados, podemos suponer que se trata de una lista de 92 artículos.

4. grep

Bien, ahora preguntémonos: de estos 92 artículos, ¿cuántos de ellos se referían a un tema de seguridad (security)? Para nuestros propósitos, digamos que estamos interesados ​​en artículos que mencionen la seguridad en cualquier parte de la entrada, ya sea en el título, la lista de etiquetas o en otro lugar.

La herramienta grep puede ayudarnos con eso. Con grep, puedes buscar en un archivo u otra entrada un patrón particular de caracteres.

grep es una herramienta increíblemente poderosa, gracias a las expresiones regulares que puedes construir para que coincida con patrones muy precisos. Pero por ahora, busquemos una cadena simple.

El formato que utilizamos fue grep, seguido del indicador -i (que le dice a grep que no distinga entre mayúsculas y minúsculas), seguido del patrón que queríamos buscar y luego el archivo en el que estábamos buscando.

Parece que tuvimos cuatro artículos relacionados con la seguridad el mes pasado. Pero imaginemos que tenemos una lista mucho más larga de la que podríamos contar fácilmente.

Usando una tubería, podríamos combinar grep con el comando wc que acabamos de aprender, para obtener un recuento de las líneas totales que mencionan la seguridad.

En este caso, wc tomó el resultado de nuestro comando grep y lo usó como entrada, sin tener que preocuparse por guardarlo en cualquier lugar primero.

Esta es la razón por la cual la entrada y salida de tuberías, en particular cuando se combina con un pequeño script de shell, hace que la terminal sea una herramienta tan poderosa para el análisis de datos.

5. tr

Un archivo CSV es un formato bastante útil para muchos escenarios de análisis, pero ¿qué sucede si necesitas convertir el archivo a un formato diferente para usarlo en una aplicación diferente?

Tal vez necesites tabulaciones lugar de comas, o tal vez desees cambiarlos a algo de HTML para poder usar la salida de datos en una tabla.

El comando tr puede ayudarte con eso, traduciendo de un tipo de caracter a otro. Al igual que los otros ejemplos, también puedes usar tuberías en este comando.

Probemos con otro ejemplo de varias partes, creando un archivo TSV (valores separados por tabulaciones) con solo los artículos que se publicaron el 20 de enero.

¿Qué está pasando aquí? Primero, buscamos la fecha en cuestión, usando grep.

Conectamos esta salida al comando tr, que usamos para reemplazar las comas con pestañas (denotadas con ‘\ t’ ). ¿Pero dónde está? Bueno, el caracter > redirigió la salida a nuestro nuevo archivo en lugar de la pantalla.

Todo esto funciona en una secuencia de comandos. Luego podemos verificar que el archivo jan20only.tsv contiene los datos que esperábamos.

6. sort

¿Qué pasaría si quisiéramos aprender más detalles sobre una columna en particular? ¿Qué artículo de nuestra nueva lista de artículos es el más largo? Construyámoslo sobre nuestro último ejemplo.

Ahora que tenemos una lista de artículos del 20 de enero podemos utilizar el comando sort para ordenar la columna por cantidad de palabras. Por supuesto, no estrictamente hablando necesitamos un archivo intermedio aquí; podríamos haber usado tubería del último comando. Pero a veces es simplemente más fácil dividir los pasos largos en pasos más pequeños en lugar de crear cadenas gigantescas de comandos.

7. sed

Es posible que desees seleccionar líneas específicas de un archivo. sed, abreviatura de stream editor, es una forma de hacer esto.

¿Qué pasaría si quisieras combinar varios archivos que tienen encabezados? Solo desearías que apareciera un conjunto de encabezados para todo el archivo, por lo que necesitarías una forma de eliminar los extras.

¿O qué pasaría si quisieras tomar solo un rango particular de líneas? sed es tu herramienta. También es una excelente manera de hacer una búsqueda masiva y reemplazar un archivo.

Creemos un nuevo archivo sin encabezados de nuestra lista de artículos, adecuado para combinar con otros archivos (si, por ejemplo, tuviera un archivo diferente para cada mes y quisiera juntarlos).

La opción ‘1 d’ le dice a sed que elimine la primera línea. sed es mucho más poderoso que esto.

8. cut

¿Qué sucede si, en lugar de querer eliminar una fila, quisiera eliminar una columna? ¿Qué pasa si quisiera elegir solo una columna? Creemos una nueva lista de autores para nuestro ejemplo que creamos anteriormente.

En este sencillo ejemplo, le dijimos a cut con -d’,’ que este es un archivo delimitado por comas, que queríamos la tercera columna (-f3), y que enviáramos la salida a un nuevo archivo llamado authors.txt.

9. uniq

Ese último ejemplo nos dejó con una lista de autores, pero, ¿cuántos autores únicos hay en esa lista? ¿Cuántos artículos escribió cada autor? Ingresa uniq. Con uniq, puede averiguarlo fácilmente.

Ordenemos el archivo, busquemos elementos únicos y luego generemos un archivo que cuente la cantidad de artículos escritos por cada autor.

Al echar un vistazo al archivo, ahora podemos ver cuántos artículos tenía cada autor. Veamos las últimas tres líneas para asegurarnos de que funcionó.

10. awk

awk es otra gran herramienta para el reemplazo, pero también mucho más. Volvamos al archivo TSV que hicimos anteriormente de solo los artículos del 20 de enero, y usémoslo para crear una nueva lista de los autores de esos artículos, junto con la cantidad de palabras que escribió cada autor.

¿Qué está pasando aqui? El -F “\ t” que pasamos a awk simplemente le dice que estamos trabajando con datos separados por tabuladores.

Dentro de las llaves, en realidad le estamos diciendo a awk que ejecute solo un poco de código. Le estamos diciendo que imprima la tercera columna con $3 , y luego la última columna con $NF (el “número de campos”), y coloque dos espacios entre ellos para que sea un poco más legible.

Conclusión

¿Y qué? ¿No podemos hacer todo esto más rápido en una hoja de cálculo, o simplemente mirando el archivo en algunos casos? ¡Seguro que podemos! Ahora detente e imagina que, en lugar de un archivo de 93 líneas, estábamos trabajando con un 93,000 o incluso uno mucho más grande.

¿Puede tu aplicación de hoja de cálculo mostrarlo sin fallar o ralentizarse significativamente? O imagina que, en lugar de un archivo con el valor de un mes de artículos, tenía un archivo diferente para cada mes de los últimos siete años.

De repente, una hoja de cálculo no es la mejor opción para procesar tus datos, pero aún no estás en el territorio donde necesitas una verdadera herramienta de big data para trabajar con tu conjunto de datos.

Con estas herramientas simples y una pequeña secuencia de comandos puedes trabajar con grandes cantidades de datos con facilidad.

Esta es solo una introducción a estas herramientas. Estas son mucho, mucho más poderosas de lo que permitirían estos simples ejemplos.