data analysis for startups
TRANSCRIPT
Data Analysis for Startups
¿Quién es este impostor?
jbarreneche
@jbarreneche
Datos, datos y más datos…
Registro de operaciones
Sistemas para análisis de datos
Sistemas para análisis de datos
Sistemas para análisis de datos
20142013
20122011
20102009
Componentes principalesAplicaciones
de BIDatawarehouseSistema de ETL
Sistema de ETLs
ETL
ETL
ETL
ETL
ETL
ETL
ETL
Framework de ETL
Planificación de la ejecución • Latencia de información
• Agenda de ejecución
• Grafo de dependencias
• Ejecución en paralelo/serie
Framework de ETLTolerancia a fallas • Idempotencia
• Reinicio desde un checkpoint
Framework de ETLAbstracciones de fuentes y destinos de información
ETL
ETL
ETL
ETL
Framework de ETLTesteo • Completitud
• Correcta transformación
• Integridad del procesamiento
Data Warehouse• Base de datos relacional
• MySQL
• Postgresql
• MPP (Massive Parallel Processing)
• Redshift, BigQuery, Vertica
• Hadoop: Hive, Presto, Impala, Drill
• Spark: SparkSQL
Diseño del schema
“Atomic data that has not been aggregated is the most expressive data”
Ralph Kimball (2013) The Data Warehouse Toolkit
Diseño del schema
Modelado dimensional!
• Tablas de hechos
• Tablas de dimensiones
Tablas de hechos
• Relación 1 a 1 de eventos real con entrada en la tabla
• Columnas numéricas
• Relaciones con las tablas de dimensiones
• No registrar las no ocurrencias
Tablas de dimensiones
• Contienen el contexto asociado al evento medido
• Describen el “Qué, Quién, Cómo, Cuándo…”
• Normalmente poseen una clave única
• Fuente principal de los filtros, grupos y etiquetas en las consultas
¿Qué nos queda?Aplicaciones
de BIDatawarehouseSistema de ETL
Aplicaciones de BIOpen source
• re:dash
• Oculus
Aplicaciones de BI• Chart.io (SaaS)
Análisis con SQL
id Name1 Montevideo2 Buenos Aires
date units amount region_id
2014-10-01 2 30 1
2014-10-02 1 20 2
2014-10-02 3 15 1
Sales Regions
Análisis con SQLConsultas básicas
SELECT ! SUM(sales.units) AS `Total Units`!FROM ! sales
Total Units!-------------! 189593!
SELECT ! sales.units, COUNT(sales.units) AS `Sales Count`!FROM ! sales!GROUP BY! sales.units
Units | Sales Count!-------+-------------! 1 | 53323! 2 | 2343! 3 | 23
Análisis con SQLConsultas básicas
SELECT ! regions.name AS `Region Name`, SUM(sales.units) AS `Sales Total`!FROM sales!JOIN regions ON sales.region_id = regions.id!GROUP BY! regions.name
Region Name | Sales Total!---------------+-------------!Buenos Aires | 323!Montevideo | 53323!
Análisis con SQLConsultas de series de tiempo
select date(created_at) as day, count(1)!from sales!where created_at > now() - interval '30 day'!group by day order by day;
day | count!------------+-------! 2014-03-12 | 5! 2014-03-13 | 1! 2014-03-19 | 6! 2014-03-20 | 4! 2014-03-21 | 1! 2014-03-24 | 1! 2014-04-08 | 2! 2014-04-09 | 3!(8 rows)!
Análisis con SQLConsultas de series de tiempo
select date(d) as day, count(sales.id) !from generate_series(! current_date - interval '30 day', ! current_date, '1 day'!) d !left join sales on date(sales.created_at) = d !group by day order by day;
day | count!------------+-------! 2014-03-12 | 5! 2014-03-13 | 1! 2014-03-14 | 0! 2014-03-15 | 0! 2014-03-16 | 0! 2014-03-17 | 0! 2014-03-18 | 0! 2014-03-19 | 6! 2014-03-20 | 4! 2014-03-21 | 1! 2014-03-22 | 0! 2014-03-23 | 0! 2014-03-24 | 1!...!(31 rows)!
select dates.date as day, count(sales.id) !from dates!left join sales on date(sales.created_at) = date!group by day order by day;
Análisis con SQL
Window functions !
SELECT function() OVER ( ! [ PARTITION BY ... ]! [ ROWS|RANGE BETWEEN ... ] !)!
Análisis con SQL
SELECT ! regions.name, ! SUM(sales.units),! SUM(sales.units) / (SUM(sales.units) over ())::float AS "% of sales"!FROM sales!INNER JOIN regions ON sales.region_id = regions.id!GROUP BY 1!
Region Name | Sales Total | % of sales!---------------+-------------+-----------!Buenos Aires | 323 | 0.006!Montevideo | 53323 | 99.994
Window functions
Análisis con SQLCTE - Common Table Expresions
• CTEs son optimizadas por separado de la consulta
• Simplifican el armado de consultas en “etapas”
Más a hacer con SQL…
• Promedios acumulados
• Análisis de funnels
• Análisis de cohort
• Consultas sobre JSON data con HStore
¡¡Gracias!!