Un artefacto de datos pequeños en la era de los grandes datos - asqlcell

Desde que Google lanzó el documento clásico de MapReduce y Yahoo abrió la implementación de Hadoop, la palabra big data se ha convertido en un tema candente en la industria. Con la mejora continua del rendimiento de la máquina y la bendición de varios marcos de herramientas, el análisis de datos ha comenzado a cambiar del muestreo y la verificación en el pasado a un todo a gran escala. También ha surgido el valor de la información oculta que originalmente se descartó mediante el muestreo. y los propietarios de datos pueden descubrir otros nuevos. Asociar información, encontrar características de dimensiones más finas y hacer predicciones más precisas...

Cuando se trata de la construcción de un sistema de big data, varios conceptos de alto nivel naturalmente comienzan a volar por todo el cielo, como almacenes de datos, lagos de datos, integración de lagos y almacenes y términos de computación de flujo. Es cierto que para una gran empresa que genera ingentes cantidades de datos todos los días, estas infraestructuras son indispensables, e incluso es aceptable sacrificar cierta flexibilidad por la construcción del sistema. Pero para la mayoría de las pequeñas y medianas empresas, o los analistas de algunas grandes instituciones, ¿realmente necesitan un sistema tan grande?

Para la mayoría de los trabajadores de datos, este es el flujo de trabajo actual. Después de obtener los datos originales, puede importarlos a Excel para comenzar a trabajar o solicitar la importación de datos al almacén de datos y luego comenzar a trabajar en la plataforma de construcción propia de la empresa. El límite de datos procesados ​​simplemente con Excel no supera 1 millón de filas y el rendimiento más allá de eso es inaceptable. Además, Excel no es amigable para la ingeniería, y no es fácil encontrar y registrar varias operaciones incorrectas.Todavía hay grandes barreras para usar en el trabajo real para las habilidades de matar dragones, como la función VB. Para este último caso, depende de la velocidad de respuesta del proceso de la empresa, en algunas empresas el trabajo de análisis real puede completarse en menos de 30 minutos, pero lleva dos días pasar por el proceso de ingreso al almacén.

Aunque Python es muy popular ahora, y las herramientas de análisis y procesamiento de datos relacionadas están surgiendo en un flujo interminable, para la mayoría de los trabajadores de datos, SQL es un lenguaje con el que están familiarizados. En comparación con Python orientado a procesos, SQL es un lenguaje descriptivo. Solo necesita seguir la especificación y decirle al sistema lo que desea hacer, y el fondo completará automáticamente la ejecución de la tarea. Sin embargo, usar Python requiere que diseñe su propio algoritmo y dígale al sistema cómo ejecutarlo En contraste, el umbral de aprendizaje y la capacidad de expresión de SQL son mucho más fuertes que los de Python. La pregunta que la industria ha estado pensando es si existe una herramienta que nos permita combinar las ventajas de Python y SQL para analizar rápidamente los datos de origen.

Antes de seguir explorando esta pregunta, tenemos que responder ¿cuántos datos se consideran big data? Según la referencia de Baidu, los datos de toC son más de decenas de millones, y los datos de toB son aproximadamente 100.000. Aquí tomo una industria de publicidad fuera de línea que ha experimentado una transformación digital como ejemplo. La empresa tiene 1 millón de pantallas digitales fuera de línea, y la cantidad de datos publicados cada semana es de 1 millón de datos, y el tamaño de cada dato es alrededor de 20 K. Entonces, el volumen total de datos es de aproximadamente 20 GB. Para este nivel de datos, no es problema usar un motor de procesamiento de big data distribuido estándar, pero hoy en día, con la rápida caída de los precios del hardware, especialmente la memoria y el disco, es posible completar directamente el procesamiento de este nivel de volumen de datos. en una sola maquina?

La respuesta es sí, y estos son los pequeños datos de los que vamos a hablar hoy , es decir, una colección de datos que pueden ser cargados y procesados ​​por una sola computadora. Hoy, me gustaría recomendar un pequeño artefacto de procesamiento de datos, asqlcell , que es un complemento de jupyter lab, y se puede instalar rápidamente a través de " pip install asqlcell ". A través de este complemento, puede usar directamente archivos csv como fuente de datos, completar el análisis y procesamiento de datos a través de SQL, y también admitir la programación mixta de Python y SQL, aprovechar al máximo las fortalezas de diferentes lenguajes de programación, y mejorar la eficiencia de la resolución de problemas.

Veamos un ejemplo a continuación, descargue los datos de las elecciones estadounidenses de 2020 de Kaggle , abra jupyter lab, cree un nuevo cuaderno e importe el complemento asqlcell.

import asqlcell

Después de importar el complemento, la sintaxis para usar sql es la siguiente: la sintaxis %% significa que la entrada de esta celda es una instrucción sql.

Nombre del conjunto de datos %%sql

tu script sql

 A continuación, cargamos los datos de selección presidencial de cada condado en el conjunto de datos president_county_candidates, que es un tipo de marco de datos pandas y se puede usar para otras fuentes de entrada de sql.

%%sql president_county_candidates
select * from 'us2020/president_county_candidate.csv'

El resultado después de la ejecución es el siguiente: el tamaño del archivo csv es de aproximadamente 1,5 M, con más de 30 000 datos, y la carga se completa en 30 milisegundos. Y el conjunto de datos de resultados devuelto admite el cambio de página para una visualización completa. Y para columnas de tipo numérico, se agrega un diagrama de distribución numérica a la barra de título.

Lo que vamos a hacer a continuación es encontrar al candidato con más votos en cada estado según los resultados de cada condado y contar los votos. Para los estudiantes que no están particularmente familiarizados con SQL y Python, como yo, puede obtener el resultado deseado paso a paso siguiendo un enfoque paso a paso:

1. Agrupe los datos sin procesar por semana y candidato y cuente la información de voto de cada candidato

%%sql state_result
select state, candidate, sum(total_votes) as total
from president_county_candidates
group by state, candidate
order by state, total desc

2. De acuerdo con los resultados del paso anterior, realice una subconsulta para contar primero el número de votos del candidato con más votos cada semana y luego seleccione la consulta para que coincida con el número de votos.

%%sql state_winner
select * from state_result 
where (state, total) in (
    select (state, max(total)) 
    from state_result 
    group by state
)
order by total desc

3. También podemos usar el modo de programación mixta para fusionar el contenido de las dos celdas anteriores:

state_result = %sql select state, candidate, sum(total_votes) as total from president_county_candidates group by state, candidate order by state, total desc
state_winner = %sql select * from state_result where (state, total) in (select (state, max(total)) from state_result group by state) order by total desc
state_winner

 En comparación con el modo de procesamiento de datos tradicional, asqlcell tiene las siguientes ventajas:

  1. El tamaño de los datos procesados ​​solo está limitado por la memoria. Para las pequeñas y medianas empresas con negocios generales no en línea, un servidor es suficiente para almacenar todos los datos y procesarlos, y los datos se pueden usar de inmediato. .
  2. El bloque de velocidad de carga, un archivo csv con un tamaño de 100M y alrededor de 2,5 millones de filas de datos, se carga en 0,7 segundos. Si los datos sin procesar se preprocesan en formato parquet para la compresión de columnas, la carga tarda solo 0,2 segundos.
  3. El motor de análisis en segundo plano utiliza duckdb basado en la memoria , que es rápido, la sintaxis SQL de consulta OLAP es compatible y el umbral de aprendizaje es bajo.
  4. Admita la programación mixta de Python, reduzca los costos de aprendizaje y maximice las ventajas respectivas de Python y SQL.

A medida que los costos de hardware continúen disminuyendo, la escala de procesamiento de datos pequeños también continuará aumentando. Para las empresas comerciales generales que no están en línea, si se puede lograr el análisis listo para usar de los datos a nivel de GB, la eficiencia de producción mejorará en gran medida y los costos de construcción de infraestructura también se pueden reducir.

Dirección del código del proyecto: GitHub - datarho/asqlcell

Comentarios valiosos son bienvenidos. !

Supongo que te gusta

Origin blog.csdn.net/panda_lin/article/details/128993917
Recomendado
Clasificación