Curso de PostgreSQL Aplicado a Ciencia de Datos - Yessica54/carrera-front-end GitHub Wiki

Breve historia de las bases de datos

Las bases de datos se guardan en plano anteriormente, luego se crean las base de datos relacionales

Puntos Fuertes de las RBD

  • Multipropósito
  • Ampliamente utilizadas
  • Información consistente
  • Flexible
  • Retrocompatible
  • Completamente programable

¿Qué es la ciencia de datos?

Un científico de datos entiende el negocio y sus necesidades para traducirlo a los demás equipos de datos. El científico de datos es el líder.Su trabajo da impacto a la organización

  • DBAs
  • Analistas
  • Ingenieros En muchas organizaciones va a haber una única persona que se encargue de todo el proceso de datos
  • Contar historias con los datos
  • Las habilidades siempre van a ser necesarias en cualquier organización

Aplicación de la ciencia de datos

  • Data Driven. Toma de decisiones basadas en datos e informada
  • Información significativa. Entender de que manera podemos aprovechar siertos datos para decir que cosa y cómo la vamos a presentar
  • ** Mostrar y presentar los datos** en el formato y estructura adecuada. Tabla, tendencias, Dashboards
  • Discriminación de datos para realizar modelos de ML
  • Contar una historia con los datos

Equipos orientados a datos

  • **DBA **(Dabta Base Administrator) Mantener y administrar el motor de base de datos
  • Data Warehouse (Almacén de datos). Guardar datos pensando a futuro para poder trabajarse
  • ETL/ Data Pipelines Llevar datos de un lado a otro
  • BI (Business Intelligence) Precursores del DataScience, empezar a extraer datos y entender los datos y sus repercusiones, encontrar patrones
  • Data Science Entender a la organización e impactarla de forma positiva
  • ML (Machine Learning) Técnica para clasificar información o realizar predicciones con datos historicos

Data science vs. Machine Learning

**ML **es un conjunto de ciencias, estrategias, disciplinas y algoritmos que nos van ayudar a tomar la capacidad de computo de las maquinas para resolver problemas de clasificación, de forma que se haga de forma automática, otro punto es realizar predicciones con base a patrones para generar tendencias acorde al comportamiento historico para predecir el futuro

**Data Science **Conoce a la organización y empresa a detalle para poder hacer algo al respecto. Toma todas las variables de la organización y herramientas disponibles para causar el mejor impacto

PLPGSQL: Stored procedures

Para crearla un procedures de sql

CREATE OR REPLACE PROCEDURE test_drpcreate_procedure()
LANGUAGE SQL
AS $$
	DROP TABLE IF EXISTS aaa;
	CREATE TABLE aaa (bbb char(5) CONSTRAINT fristkey PRIMARY KEY);
$$;

Para llamar el procedures

CALL test_drpcreate_procedure();

Para crear una función de postresql

CREATE OR REPLACE FUNCTION test_dropcreate_function()
RETURNS VOID 
LANGUAGE plpgsql
AS $$
	BEGIN
		DROP TABLE IF EXISTS aaa;
		CREATE TABLE aaa(bbb char(5)CONSTRAINT fristkey PRIMARY KEY, ccc char(5) );
		DROP TABLE IF EXISTS aaab;
		CREATE TABLE aaab(bbb char(5)CONSTRAINT secundkey PRIMARY KEY, ccc char(5) );
	END
$$;

// llamandola

SELECT test_dropcreate_function();

PLPGSQL: conteo, registro y triggers

CREATE OR REPLACE FUNCTION duplicate_records()
RETURNS trigger
LANGUAGE plpgsql
AS $$
	BEGIN
		INSERT INTO aaab(bbba, ccca)
		VALUES (NEW.bbb, NEW.ccc);
		RETURN NEW;
	END
$$;

CREATE TRIGGER aaa_changes
	BEFORE INSERT
	ON aaa
	FOR EACH ROW
	EXECUTE PROCEDURE duplicate_records();

Trabajando con objetos

Una caracteristica muy importante de PostgreSQL es su capacidad de trabajar con estructuras JSON.

JSON Texto plano - Es unicamente un string de texto. JSON Binary - Es más rápido de procesar ya que se guarda como un archivo binario. El uso de objetos nos dará más flexibilidad en el trabajo.

-- Inserción de datos
INSERT INTO  ordenes(info)
VALUES
('{"cliente":"Edna Moda", "items":{"producto":"Biberon", "cantidad":3}}'),
('{"cliente":"Juan Moda", "items":{"producto":"Carro", "cantidad":3}}');

-- Extrae los datos con formato JSON
SELECT info->'cliente' AS cliente FROM ordenes;

-- Extrae los datos con el tipo de dato asignado por Postgres
SELECT info->>'cliente' AS cliente FROM ordenes;

Agregando objetos

SELECT 
	SUM(
		-- Cambiando a tipo de dato entero
		CAST( info -> 'items' ->> 'cantidad' AS INTEGER)
	),
	MAX(
		CAST( info -> 'items' ->> 'cantidad' AS INTEGER)
	),
	AVG(
		CAST( info -> 'items' ->> 'cantidad' AS INTEGER)
	)
FROM ordenes;```

## Common table expressions

[https://platzi.com/tutoriales/1780-postgresql-datos/7204-common-table-expressions/](tutorial)

``` SQL
-- tabla temporal 1
WITH peliculas_rentadas AS (
	SELECT pelicula_id, COUNT(fecha_renta) AS rentas_acumuladas
	FROM inventarios
	JOIN  rentas
		ON inventarios.inventario_id = rentas.inventario_id
	GROUP BY inventarios.pelicula_id
	ORDER BY rentas_acumuladas DESC
), 

-- tabla temporal 2
peliculas_categoria_horror AS (
	SELECT pelicula_id, nombre
	FROM peliculas_categorias
	JOIN categorias 
		ON peliculas_categorias.categoria_id = categorias.categoria_id
	WHERE 
		categorias.nombre = 'Horror'
)

SELECT 
	peliculas.titulo,
	peliculas.clasificacion,
	peliculas_categoria_horror.nombre AS genero,
	peliculas_rentadas.rentas_acumuladas AS rentas_acumuladas,
	precio_renta * (peliculas_rentadas.rentas_acumuladas) AS monto_rentas_acumulado 
	
FROM peliculas
	JOIN peliculas_categoria_horror
		ON peliculas.pelicula_id = peliculas_categoria_horror.pelicula_id
	JOIN peliculas_rentadas
		ON peliculas.pelicula_id = peliculas_rentadas.pelicula_id

WHERE 
	peliculas.duracion > 100 and peliculas.precio_renta < 1 ;

Window functions

Las window function se ocupan para entender la relación que guarda un registro en particular con respecto al resto del dataset, ya sea una tabla, una partición o un query. Generalmente se encargan de hacer rankings

Particiones

**Particionado **- Dividir una tabla en segmentos lógicos. Es una practica común de los manejadores, pero no todos ofrecen la opción para los usuarios de administrar estas particiones. Resulta útil para optimizar las consultas de datos.

Observaciones:

  • No todas las tablas deben de ser particionadas, vale la pena hacerlo unicamente cuando hay muchos registros.
  • Permite optimizar algunas consultas al no tener que buscar dentro de toda una tabla sino unicamente en un segmento especifico.
  • El particionado altera la consistencia de la tablas
  • No existen los indices (llaves primarias) en las particiones, o mejor dicho, estos indices cambian basándose en la partición. e.g Si particionas una tabla por fechas, al buscar un dato especifico el primer criterio de búsqueda será la fecha

Usando rank y percent rank

DENSE_RANK: Rango por posición en la tabla. -> PERCENT_RANK: Rango por porcentaje

Visualizando datos con Tableau

Para ver los datos de forma grafica