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 principales
Aplicaciones de BIDatawarehouseSistema de
ETL
Sistema de ETLs
ETL
ETL
ETL
ETL
ETL
ETL
ETL
Framework de ETLPlanificació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_id2014-10-
01 2 30 12014-10-
02 1 20 22014-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 salesGROUP 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 salesJOIN regions ON sales.region_id = regions.idGROUP BY regions.name
Region Name | Sales Total---------------+-------------Buenos Aires | 323Montevideo | 53323
Análisis con SQLConsultas de series de tiempo
select date(created_at) as day, count(1)from saleswhere 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 tiemposelect 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 datesleft join sales on date(sales.created_at) = dategroup by day order by day;
Análisis con SQL
Window functions
SELECT function() OVER ( [ PARTITION BY ... ] [ ROWS|RANGE BETWEEN ... ] )
Análisis con SQLSELECT regions.name, SUM(sales.units), SUM(sales.units) / (SUM(sales.units) over ())::float AS "% of sales"FROM salesINNER JOIN regions ON sales.region_id = regions.idGROUP BY 1
Region Name | Sales Total | % of sales---------------+-------------+-----------Buenos Aires | 323 | 0.006Montevideo | 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!!