Saltar al contenido principal

Demographics Quick Start

🎯 Introducción

Esta guía te permitirá implementar y usar los analytics demográficos del CDP en menos de 5 minutos.

🚀 Implementación Rápida

1. Verificar API (30 segundos)

Confirma que tienes acceso al endpoint de demographics:

curl "https://nerdistan-datalake-production.up.railway.app/api/v2/cdp/analytics/demographics?tenant_id=22"

Respuesta esperada: JSON con datos demográficos del tenant 22.

2. Frontend Básico (2 minutos)

Crear un componente simple para mostrar demographics:

import React, { useState, useEffect } from 'react';
import { Card, CardContent, Typography, Grid } from '@mui/material';

const QuickDemographics = ({ tenantId }) => {
const [data, setData] = useState(null);

useEffect(() => {
fetch(`/api/v2/cdp/analytics/demographics?tenant_id=${tenantId}`)
.then(res => res.json())
.then(result => setData(result.data));
}, [tenantId]);

if (!data) return <div>Cargando...</div>;

return (
<Grid container spacing={2}>
<Grid item xs={12} sm={6} md={3}>
<Card>
<CardContent>
<Typography variant="h6">Total Clientes</Typography>
<Typography variant="h4">
{data.summary.total_customers.toLocaleString()}
</Typography>
</CardContent>
</Card>
</Grid>
<Grid item xs={12} sm={6} md={3}>
<Card>
<CardContent>
<Typography variant="h6">Edad Promedio</Typography>
<Typography variant="h4">
{data.summary.overall_avg_age} años
</Typography>
</CardContent>
</Card>
</Grid>
<Grid item xs={12} sm={6} md={3}>
<Card>
<CardContent>
<Typography variant="h6">Datos de Género</Typography>
<Typography variant="h4">
{data.summary.completion_rates.gender}%
</Typography>
</CardContent>
</Card>
</Grid>
<Grid item xs={12} sm={6} md={3}>
<Card>
<CardContent>
<Typography variant="h6">Datos de Ubicación</Typography>
<Typography variant="h4">
{data.summary.completion_rates.location}%
</Typography>
</CardContent>
</Card>
</Grid>
</Grid>
);
};

export default QuickDemographics;

3. Usar en tu App (1 minuto)

import QuickDemographics from './QuickDemographics';

function App() {
return (
<div>
<h1>Analytics Demográficos</h1>
<QuickDemographics tenantId={22} />
</div>
);
}

4. Ver Resultados (30 segundos)

Deberías ver 4 cards mostrando:

  • Total Clientes: 4,671
  • Edad Promedio: 32.3 años
  • Datos de Género: 97.37%
  • Datos de Ubicación: 100%

📊 Datos Disponibles

Endpoints Principales

EndpointDescripciónTiempo Respuesta
/api/v2/cdp/analytics/demographicsAnálisis completo~2-3s
/api/cdp/v2/customersClientes con demografía~1-2s
/api/v2/cdp/analytics/rfmRFM + demografía~2-3s

Datos Demográficos

  • Edad: 18.09% cobertura, calculada desde DNI
  • Género: 97.37% cobertura, inferido con IA
  • Ubicación: 100% cobertura, validada geográficamente

Segmentos Disponibles

SegmentoDescripciónCount Ejemplo
18-24Generación Z104 clientes
25-34Millennials233 clientes
35-44Millennials/Gen X89 clientes
MasculinoGénero M2,330 clientes
FemeninoGénero F2,218 clientes

🎯 Casos de Uso Inmediatos

Marketing Digital

# Segmentos para Facebook/Google Ads
curl "/api/v2/cdp/analytics/demographics?tenant_id=22" | jq '.data.marketing_segments'

Análisis de Audiencias

// Mostrar distribución por generación
const generations = data.age_analysis.map(item => ({
name: item.generation,
value: item.customer_count
}));

Exportación de Datos

// Exportar segmento específico
const exportSegment = (ageRange, gender) => {
const segment = data.marketing_segments.find(s =>
s.google_age_range === ageRange && s.gender === gender
);

const csv = `Age,Gender,Customers,Spend
${segment.google_age_range},${segment.gender},${segment.targetable_customers},${segment.avg_spent}`;

// Descargar CSV
const blob = new Blob([csv], { type: 'text/csv' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `segment_${ageRange}_${gender}.csv`;
a.click();
};

🔧 Troubleshooting

Problemas Comunes

Error 404 - Endpoint no encontrado

# Verificar URL base
curl "https://nerdistan-datalake-production.up.railway.app/health"

Sin datos demográficos

// Validar tenant
if (!data || !data.summary) {
console.log('Tenant sin datos demográficos procesados');
}

Performance lenta

// Implementar loading states
const [loading, setLoading] = useState(true);
// Mostrar skeleton mientras carga

📱 Mobile-First Tips

// Responsive grid
<Grid container spacing={{ xs: 1, sm: 2 }}>
<Grid item xs={12} sm={6} md={3}>
{/* Cards responsive */}
</Grid>
</Grid>

// Typography responsive
<Typography variant={{ xs: 'h6', md: 'h4' }}>
{value}
</Typography>

// Spacing responsive
<Box sx={{ p: { xs: 1, sm: 2, md: 3 } }}>
{content}
</Box>

🚀 Siguiente Nivel

Componentes Avanzados

API Completa

Casos de Uso Avanzados

✅ Checklist de Validación

  • ✅ API responde correctamente
  • ✅ Frontend muestra datos básicos
  • ✅ Responsive en mobile
  • ✅ Manejo de errores
  • ⚠️ Testing en múltiples tenants
  • ⚠️ Performance optimizada

Tiempo total: ~5 minutos Nivel: Principiante Prerrequisitos: React + Material-UI Próximo paso: Implementación completa