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