Translate

Mostrando entradas con la etiqueta analisis. Mostrar todas las entradas
Mostrando entradas con la etiqueta analisis. Mostrar todas las entradas

martes, 13 de agosto de 2024

Python Polars mejorando el performance de pandas

Durante el último año cada vez más analista que trabajan con Big Data usan Polars frente a Panda para el análisis de datos.

Entre ambas librerías existe una gran diferencia que hace que sea posible que Polars tenga un performance mejor, frente a Pandas, la librería por excelencia.


Cómo está creado Polards frente a Pandas

Polars está escrita en un lenguaje a bajo nivel llamado Rust y además hace uso de forma más fácil del paralelismo en python. Esto provoca que consuma menos recursos.

Cómo usar esta libreria

Igual que usamos pd para importar la librería de pandas, para usar polars puedes usar lo siguiente:

import polars as pl

Para seleccionar columnas puedes usar select de la siguiente forma:

df.select(pl.all())

Y si quieres filtrar filas:
 
df.filter(pl.col("ref") == "c")


Si comparamos con pandas en cuanto a sintaxis puedes verla aquí que se similar pero necesitamos una chuleta ya que cambia. En comparación con pandas en más cercana al lenguaje natual, lo cual es de agradecer.

Eliminar filas con valores nulos:Pandas:
df.dropna()
Polars:
df.drop_nulls()


Visto todo esto para datasets grandes vale la pena medir el performance por si es tan grande la diferencia entre ambas librerias.


Más información


Y una comparación con pandas en cuanto a sintaxis :

viernes, 20 de enero de 2023

Framework para EDA y como automatizar en Python el análisis exploratorio

 Antes de ponernos a hacer algún modelo o análisis y más allá de las herramientas que vamos a utilizar nos va a tocar familiarizarnos con los datos y ver que tipo de modificiones debemos hacerle antes de tenerlos listos 
Para ello existe un tipo de análisis EDA: Análisis de datos exploratorio. 
Lo que podemos definir que entra dentro de este análisis va a depender de las necesidades del dataset y de las preguntas que tenga el negocio, Lo que si es cierto es que una vez hecho uno, podemos reutiliar formulas para aplicarlo al resto de análisis.Sobre todo la parte de visualización  
Así que podemos definir un framework para transformar esos datos

Framework para realizar el análisis exploratorio

Podemos así ver 5 fases que pueden ser iterativas:

Data Sourcing

De dónde vienen los datos, tenemos que modificar el tipo de variable o la codificación? 

Data Cleaning

Existen valores nulos? Debemos eliminar valores atípicos, valores duplicados.

Univariate analysis

Cómo se distribuye cada una de las variables? Valores máximos y mínimos, ...

Bivariate analysis

Existe correlación entre dos variables. Una variabe ayuda  a predecir a la otra?

Multivariate analysis

Y cómo se comportan estas variables en su conjunto? Podemos añadir nuevas variables a partir de las que ya tenemos?

Automatización del análisis exploratorio en Python

Pues visto así esto nos puedo llevar bastante tiempo, pero se irá una inversión a medio plazo. Como comentaba más arriba gran parte del análisis exploratorio para el análisis de datos se puede automatizar. 

df.describe()

Y sobre todo visualizando las variables usando numpy y pandas con seaborn

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt


Librerias para la automatización del EDA en Python

Hasta la fecha ya tengo en mi bookmark tres librerias que automatizan esta parte. Sobre todo a mi me parece útil para hacer visualización tras transformar datos o creas nuevos. Estas librerias también se puede utulizar para comparar los datos que tenemos en nuestros train dataset de forma muy rápida. 
Las tres librerias que comento aquí hacen uso de tan sólo 2-3 líneas de comando.

Por mi orden de preferencia:
  1. 1. Pandas profiling, que nos da un informe de spoiler como este. Aunque los comandos avanzados no son muy avanzados, aquí tienes como instalar esta librería en Python
  2. 2. Dataprep 
  3. 3. Sweetviz, que es más ligero de pandas profiling

Quiero saber más sobre EDA!!

lunes, 26 de septiembre de 2022

HOW-TO: SQL When to use USING instead of WHERE - SQL INTERMEDIATE

 Visto en Leetcode:

https://leetcode.com/

Problema: 

Dadas dos tablas con IDs de usuario queremos saber el nombre y el id de usuario con su id único.


Además queremos que aparezcan los nulls

Explicación:

En un primer momento lo más fácil sería pensar en usar un LEFT JOIN o un RIGHT JOIN

Sin embargo tenemos una claúsulas que nos puede ayudar a simplicar el código creada para estos casos concretos y sería USING

SELECT unique_id, name 

FROM Employees e

LEFT JOIN EmployeeUNI u ON e.id = u.id


Por qué usar USING en SQL

Using hace más legible el código y además nos ayuda a prevenir problemas más complejos.

Cómo usar USING en SQL

# Write your MySQL query statement below
SELECT unique_id,name
FROM Employees
LEFT JOIN EmployeeUNI
USING(id)

martes, 17 de agosto de 2021

TidyVerse y las condiciones del Tidy data que nos hacen la vida más fácil

ehhhh  (se pronuncia taidivers)
Hace ya varios año se dio un movimiento en la comunidad de R para que se utilizaran una serie de paquetes para unificar estos y que fuera más consistente el análisis de datos.
De aquí se crearon varios paquete cad auno con una funcionalidad diferente.
Para hacerlo más a menos aquí tienes un video directo al grano. 

Datos Tidy 

Ya sea en R, como en Python como en una hoja de cáculo tipo Google Drive o Excel antes de empezar a analizar nuestros datos tenemos que conseguir que los datos cumplan una determinada extructura. en resumen una forma de tabla o tabular. De no ser así algo puede salir mal y darnos unos resultados que los programas no van a comprender.
Condiciones que deben cumplir los datos Tidy
  1. - Cada columna es nua variable
  2. - Cada fila es una observación
  3. - Cada celda es un valor
Cumpliendo estos tres mmmm valores universales, podemos saber que estamos en el buen camino. Aunque muchas veces nos va a tocar transformar los datos para que tengan esta forma.

Paquete que nos ayudan a transformar datos para cumplir con el Data Tidy

Si usamos R, tenemos un paquete que se llama TidyR con su cheetshet
Si usamos Python, pandas cumple nuestro papel. Y para muestra esta cheetshet de pandas para data wrangling
Y para terminar un éxito de ventas de cuando esa joven de Tabular Bells (o algo así)

viernes, 1 de mayo de 2020

Segmentando clientes en Python usando el modelo RFM

 Ya en 2016 escribía un post sobre el modelo RFM de segmentación de clientes, para qué servía o qué preguntas podíamos responder y cómo se podía hacer una sencilla consulta en SQL para conseguirlo.
Cinco annos más tarde puedo decir ya con bastante más experiencia que estos datos 
  • 'Recency
  • Frecuency
  • Monetary Value
no se encuentran tan facilmente en las empresas en las bases de datos. Así que para empezar nos va a tocar pasar bastante tiempo limpiando los datos. El modelo sigue siendo utilizado para la segmentación de CRMs y nos va a dar buenas pistas de los usuarios en lo que debemos que poner más atención ya que son nuestros mejores usuarios. 
También podemos usar el mismo modelo para ver que clientes nos han abandonados o qué clientes están inactivos y potencialmente podemos volver a activar. Email Marketing preparado.
Para esto hay diferentes formas de hacerlo. Aquí voy a tirar del usor de percentiles ya que es una de las formas másfáciles de calcular ya que tenemos funciones para ello y además de las que mejor resultado tienen.

Qué formato tienen que tener nuestros datos

Para poder realizar este análisis vamos a necesitar datos de forma transaccional. Es decir por cada acción que haga nuestro usuario como por ejemplo una compra de ecommerce, vamos a tener una línea. Estas transacciones normalmente tienen un ID Además vamos a necesitar que al hacer esa transacción también se guarde un id de cliente. Siempre es más fácil trabajar con numeros y id que con nombres, pero esto último lo podemos arreglar al limpiar los datos antes del analísis. Así que no cunda el pánico.

Para no hace muy largo este post voy a poner un ejemplo con código de la parte de frecuency y recency para poner labels a nuestros usuarios en función de estas dos variables. Así podremos saber en qué fase están nuestros clientes inactivos, activos, engaged, nos abandonado (churn). Estos nos va a ayudar a crear algunas métricas como el churn rate. Qué porcentaje de clientes no vuelven a comprarnos.

Etiquetar a nuestros clientes

Un ejemplo de como podemos etiquetar a nuestros clientes es
- Activos - Active
- Inactivos - Inactive
- Abandonado - Churn


Para llevar acabo el analisis completo de RFM, aquí puedes acceder a un script donde la analista usa también los percentiles. Así que va más allá de lo explicado aquí con la creación de etiquetado.
En este Jupyter Notebook además comenta con bastante detalles que preguntas hay que hacerse para limpiar los datos y qué decisiones toma en base a como están los datos.





jueves, 27 de septiembre de 2018

Tipos de análisis descriptivo: modelos descriptivos, modelos predictivos y modelos prescriptivos

Recien acabado el curso de Customer Analytics A la hora de hacer un análisis de nuestros clientes nos encontramos que existen tres formas de abordarlos.

  • Análisis descriptivo ( descriptive analysis).

    El objetivo de este es explicar las relaciones que hay entre diferentes variables. Así que estariamos hablando de un análisis del pasado o nuestros cliente actuales. Con estos modelos queremos entender a nuestros clientes para ello se usan análisis como la segmentación de clientes. En términos de análisis estadístico aquí podríamos usar la regresión, análisis de cluster,...

  • Análisis predictivo (predictive analisis)

    Con este tipo de análisis lo que queremos es crear modelos para predecir el futuro. Podemos usar por ejemplo

  • Análisis prescriptivo (prescriptive analysis)

    , cuyo fin es tomar una acción. Este último tipo de análisis es especialmente interesante y complejo ya que tiene en cuenta muchas variables y va más allá de los dos anteriores. Para para poder sacarle un mayor partido hace uso de métodos econométricos y la teoría de juegos.

miércoles, 2 de marzo de 2016

Jugando con Tableau y los datos del banco Mundial

He estado jugando con Tableau y echándole un ojo a los datos de Banco Mundial.Total, que me he acordado del marido de una amiga que conocí en Leeds que es de Pakistan. Bueno, de él no, es que durante una cena nos contó que Pakistan era uno de los países más poblados del Mundo. Fijate tú, que en España, o al menos por las zonas que yo he vivido nunca había oído hablar de este país. Qué  si, que intuía que estaba por dónde todos los países que terminan en nosequéTAN y cerca del país de Borat. Y dicho sea de paso a mi me sirvió este conocimiento  para ganar un quesito en el trivial...

Total, que una cosa llevó a la otra y me he puesto a juguetear con los datos. Estaba interesada principalmente en los países más poblados,pero como la cabra siempre tira al monte he acabado creando un dashboard con datos de acceso a Internet y de mortalidad infantil.

La verdad es que ha quedado muy bonito y muy fácil de revisar el treemap más el mapa y el diagrama de cajas y bigotes que es cómo lo llamaba una profe mía en la Universidad (boxplot para los amigos), Yo siempre me imaginaba una caja llena de bigotes de los de Movember y eso que se puede decir que es mi gráfico favoito,.. En fin, mejor me acuesto





Lo he puesto para que filtre por el treemap y eso, muy chulo y útil.Desde luego Tableau nos das los gráficos mascaicos y sólo hay que ocuparse de encontrarle sentido a los datos Otra cosa son las métrica que he cogido...jeje Estaba pensando en intentar hacer una correlación de número de hijos y países más poblados. ¿Eso tiene que ser significativo no? ¿Y mortalidad infantil con estas dos? Pues eso, que más para otro día. Pero si andas interesado en saber como crear un Dashboard con Tableau este video lo explica rápidico rapidico.


miércoles, 3 de febrero de 2016

Segmentando con el modelo RFM con SQL : Recency, Frequency & Monetary value

Si contamos con una base de datos de clientes podemos aplicar un modelo bastante fácil y que ya lleva bastante rodaje en el Marketing Directo:el modelo RFM.

¿Qué es RFM?

El fin de este modelo es poder segmentar a nuestros clientes para saber cuales son los que mayor beneficio nos puede aportar. Así a esos clientes podemos mandarles códigos promocionales, por poner un ejemplo.

Descuartizando el modelo RFM

¿Qué significan cada una de esas letras?
  • Recency: que podríamos describir como recencia.
  • ¿Hace cuánto que compró el cliente? Si el cliente hace mucho que no ha comprado puede ser que se haya ido a la competencia.
  • Frecuency: Frecuencia
  • ¿Con qué frecuencia suele comprar?
  • Monetary Value: valor monetario
Cantidad de dinero que ha gastado de media. Si un cliente suele gastar más será más valioso que otro que suele hacer una compra pequeña.

Cómo definimos RFM en una sentencia de SQL

  • La recencia ("recency") viene definida por el día de la última compra: MIN(dias_desde_la_ultima_compra).
  • La frecuencia ("frequency") viene definida por el total de veces que el cliente ha comprado.
  • El valor monetario ("monetary value"), en este caso, lo vamos a definir como la media de la cantidad comprada de cada uno de los clientes.
Imaginando un CRM con un id por cliente podríamos definir la query como: SELECT cliente_id,
MIN(dias_desde_ultima_compra) AS 'recencia',
COUNT(*) AS 'frecuencia',
AVG(cantidad_comprada) AS 'valor monetario'
FROM data GROUP BY 1")
Al ser en SQL la podríamos usar tanto R como en Python, o cualquier otro lenguaje de programación.

viernes, 27 de marzo de 2015

Un paquete para actualizar R

Ufff tienes R desde hace mil y en un ataque de aburrim originalidad te ha dado por actualizarlo. Prepárate para volver a bajar el software, instalar los paquetes,.. ESPERA ESPERA que hay buenas noticias.

Tachán existe un paquete que te hace todo esto.

Instalar el paquete installr para actualizar R

1. Si usas la GUI debes ir a Paquetes y buscar installr que es el paquete que te instalará

2.Elegimos:  installr
en la lista
3.Ahora a por un poco de código (de copy-paste), para que no sé diga que si los que usan windows...
 library(installr)
 updateR()
4.Vamos, super simple: llamamos a la librería y actualizamos R

Instalando R

5. Nos pregunta que si queremos instalar la versión nueva. Bueno, pues sí, porque eso es lo que queremos.


6. Y se baja y se empieza a instalar...
7. Y una vez terminado, si estamos animado podemos actualizar los paquetes que tenemos, así ya de paso.

Documentación del paquete installr

8. La documentación sobre installr , el paquete para instalar R está por aquí http://cran.r-project.org/web/packages/installr/index.html. Incluso te avisa si no necesitas actualizar porque tienes la última versión del programa.

Así que aquí me hallo con mi flamante nueva versión, apuntico de salir la 2.0
R version 3.1.3 (2015-03-09) -- "Smooth Sidewalk"

P.D. La verdad que es un paquete muy cómodo y muy recomendable.

miércoles, 4 de marzo de 2015

Medir nuestra Target Keywords en todo nuestro dominio

Acabo de leer un artículo sobre Keyword Target en todo el dominio que me ha gustado tanto que la voy a poner una nueva métrica para medir en mis informes SEO a partir de ahora.

La idea la vi en un artículo del SEJ (Search Engine Journal) escrito por Neil Pratel que es el cofundador de Kissmetrics y Quick Sprout. Ambos blogs siempre cuentan con post super interesantes y en profundidad.

La idea me ha parecido super buena ya que lo que pretende es tener en cuenta las keyword que queremos que Google nos tenga en cuenta con el sitio, así podemos ver en que paginas aparecen. Así mismo podemos escribir las variaciones semánticas de esas keywords para crear las famosas entidades o Entities  semánticas ahora que Google es mucho más semántico.

Según Neil Pratel muchos SEOs (equivocadamente) creen que pueden rankear las keywords para una o dos páginas de un blog en vez de ponerlo para todo el dominio. Según el autor está bien que hagan esto, poner las palabras claves por los artículos del blog, pero deberían hacerlo en todo el site.

Cómo medirlo

  1. Para poder medir esto hay que poner: inurl:nombre_de_domino "target keyword"
  2. ver los resultados de Google
  3. Comparar nuestro site con nuestros competidores

Según este artículo de este crack, ha medido los sitewides para estas ocurrencias de keywords y  el ranking es mayor cuántas más ocurrencias hay de estas keywords. Esto no quiere decir que cuánto más uso de estas keywords mejor es el ranking, pero sin embargo si que parece que es un factor importante.

Extra: A la hora de buscar los resultados en Google es muy aconsejable mirar que hacemos una búsqueda anónima por si nos toma los resultados personalidazos o el historial.

Herramientas para contar palabras

Y buscando una forma de hacer esto más fácil me he encontrado con esta página
http://www.contadordepalabras.com/ que puede ayudar para hacer las auditorias de contenido.

Más información y fuente

Para ver el artículo entero : http://www.searchenginejournal.com/7-hood-optimization-techniques-will-rock-seo/124140/