Una buena herramienta + la disponibilidad de habilidades para trabajar con ella, que se logra a través de la práctica, le permite resolver de manera fácil y elegante muchas tareas atípicas "similares". A continuación hay un par de ejemplos similares. Estoy seguro de que muchos pueden ampliar esta lista.
Es una continuación de publicaciones anteriores .
Application Log Analytics
Muy popular es la tarea de realizar cálculos analíticos basados en registros de aplicaciones. Por ejemplo, realice un análisis de las acciones del usuario y calcule indicadores de pronóstico, o pruebe hipótesis. Puede seguir la versión clásica y aumentar la pila ELK o similar (recientemente, Splunk ha abandonado los sistemas disponibles en Rusia). Pero puede pensar un poco y rápidamente hacer todo en R. Rápidamente en todos los sentidos, tanto en la implementación como en el tiempo de procesamiento.
Pero hay una serie de características al resolver un problema similar:
- Normalmente, los archivos de registro se escriben en el formato clásico
log4j
: marca de tiempo, importancia, tipo de subsistema, cuerpo del mensaje. - La marca de tiempo puede contener eventos con una resolución de milisegundos, que deben conservarse para la precisión de los análisis posteriores. Milisegundos pueden escribir sin cumplir con ISO 8601.
- El cuerpo del mensaje es una entidad prácticamente desestructurada. Los desarrolladores escriben allí todo lo que consideren necesario, sin limitarse a ningún formato de presentación.
- A veces, el cuerpo del mensaje es multilínea, por ejemplo, la salida de la pila de llamadas de Java o el paquete de intercambio intersistema xml. Es necesario reconstruir grabaciones de varias líneas en una (un marcador de marca de tiempo es un signo del comienzo de la grabación).
- Un número de atriutes puede ser externo al contenido y deben obtenerse de una manera diferente, por ejemplo, la identificación del objeto puede codificarse en el nombre del archivo de registro.
- Los registros en forma de archivos pueden ser de varios megabytes o cientos de gigabytes.
- La tarea es muy paralela.
De hecho, la tarea se puede dividir en 2 pasos:
- preprocesamiento de datos sin procesar;
- análisis posteriores
El contenido del último paso está determinado por el área temática y las tareas comerciales, R es ideal para este paso. Muchas personas no lo saben, pero el primer paso también se puede resolver con bastante facilidad con R. Además, dependiendo del tamaño de los archivos de registro, se puede agregar un resultado de preprocesamiento parcialmente estructurado adecuado para un análisis posterior a los archivos, así como a la base de datos. Los terabytes muelen uno o dos.
Solo un código de ejemplo: library(readr) library(tidyverse) library(magrittr) library(stringi) library(fs) library(glue) library(RClickhouse) library(DBI) library(anytime) library(tictoc) library(iterators) library(foreach) library(doParallel) library(futile.logger) library(re2r) library(data.table) library(future) library(doFuture) common_logname <- "DEV_log_parser.log" table_name <- "DEV_LOGS" flog.appender(appender.file(common_logname)) flog.threshold(INFO) flog.info("Start batch processing") oneTimeProcessing <- function(f_iter, log_type = c("app", "system")) { log_type <- match.arg(log_type) checkmate::assertNames(names(f_iter), permutation.of = c("fname", "short_fname", "location", "wk", "size", "id")) cfg <- list(app = list(db_table = "DEV_APP_LOGS"), system = list(db_table = "DEV_LOGS"))
Este ejemplo de código contiene conceptos básicos como la paralelización, el tiempo de procesamiento teniendo en cuenta milisegundos, el almacenamiento en la base de datos, la contabilidad de registros de varias líneas, el resumen de los resultados del trabajo, el uso de atributos externos, la evaluación comparativa preliminar y la elección de las funciones y paquetes re2r
( re2r
, por ejemplo; esto La biblioteca de Google para trabajar con las regulares es la más rápida y se usa mucho donde, tome la misma ClickHouse mencionada en el código { bencmark , algunos operadores pueden tener ILV cerrado}). Pero el código no pretende ser ideal, ya que es solo una acción única en el preprocesamiento de datos. Lo hace rápida y correctamente, bueno, está bien. Para otra tarea similar, corregimos, teniendo en cuenta resp. datos de entrada
¿Será sorprendentemente más rápido en términos de tiempo obtener el resultado final en otros idiomas? La pregunta está abierta. Las versiones paralelas con python
, perl
, awk
no mostraron diferencias notables. Es posible que el gurú en python
logre mejores resultados, pero no olvide que esto es solo una tarea periódica "única".
Restaurando el orden en fotos
Después de un viaje con varios dispositivos a mano, debe recopilar todas las fotos juntas y organizarlas de alguna manera antes de continuar con el procesamiento. Una de las mejores opciones es nombrar los archivos por la fecha de disparo ( YYYY-MM-DD hh_mm_ss
), asegurando así el orden de la foto en la flecha de tiempo. Los atributos Exif ayudan a resolver este problema en un solo paso.
Y esto también se puede hacer usando R en un "par de líneas". exifr
y exifr
para ayudar.
- hizo una lista de archivos;
- sacó atributos;
- archivos copiados con cambio de nombre acc. con los atributos correctos.
De hecho, la tarea se redujo a la anterior, solo los atributos se recopilan no por el nombre del archivo, sino por sus atributos exif, y en el procesamiento simplemente se copia el archivo con el cambio de nombre. El esqueleto del guión y la lógica del trabajo permanecen sin cambios.
Ejemplo de código de mano rápida: library(tidyverse) library(magrittr) library(stringi) library(lubridate) library(stringi) library(fs) library(glue) library(futile.logger) library(anytime) library(tictoc) library(bench) library(exifr) library(tictoc) input_path <- "S:/ " %>% fs::path_real()
¿Por qué exifr
? Porque es un contenedor para la potente herramienta multiplataforma ExifTool
.
Tal vez la tarea parezca sintética, lo cual es difícil de discutir, ya que hay muchas utilidades e GUI diferentes para trabajar con Exif y renombrar, pero hay un matiz. No todos los dispositivos pueden seleccionar la zona horaria modificada y ajustar la hora (cámaras, por ejemplo, ¿con qué frecuencia el usuario de la cámara establece la hora exacta en ella?), Por lo que durante el cambio de nombre también debe cambiar las marcas de tiempo en función de la fuente.
Finalización
Hay muchos problemas similares, muchos de ellos pueden resolverse con la ayuda de R también.
Publicación anterior - "Niños, Matemáticas y R" .