Estructuras y Formatos de Datos
Datos estructurados
Estos se organizan por filas y columnas, donde todos los registros tienen el mismo tipo de dato (numérico, texto, booleano, etc.).
- Estructura de datos: dataframes.
- Formato de datos: CSV, XLSX, TXT, etc.
Datos semi-estructurados
En estos los registros tienen un conjunto distinto de características y pueden estar anidados, son más flexibles pero requieren más procesamiento para analizarlos.
- Estructura de datos: objetos, diccionarios, etc.
- Formato de datos: JSON, XML, etc.
Datos no estructurados
Estos no tienen un esquema definido y pueden ser de cualquier tipo, como texto, audio, video, etc. Pueden (o no) tener metadatos definidos, su análisis es más complejo.
- Estructura de datos: strings, binary, etc.
- Formato de datos: imágenes, videos, audios, etc.
Bases de datos
Colecciones de datos organizados y estructurados almacenada en una computadora.
Bases de datos relacionales (SQL)
Se basan en tuplas y relaciones entre tablas, donde cada tabla es un conjutno de campos (columnas) y registros (filas). Se establecen relaciones entre tablas a través de claves primarias y foráneas.
Utilizan SQL para la manipulación de datos.
Bases de datos no relacionales (NoSQL)
Estas manejan datos semi estructurados y no definen un esquema rígido. Se utilizan para almacenar grandes volúmenes de datos y son más flexibles que las bases de datos relacionales. Algunas utilizan documentos, grafos, pares clave-valor, etc.
Operaciones Pandas y SQL
Seleccionar columnas:
df[['columna1', 'columna2']]
SELECT columna1, columna2 FROM tabla;
Ordenar de forma ascendente o descendente:
df.sort_values(by=['columna1', 'columna2'], ascending=[True, False])
SELECT columna1, columna2
FROM tabla
ORDER BY
columna1 ASC
columna2 DESC;
Remolición de duplicados
df[['columna1', 'columna2']].drop_duplicates()
SELECT DISTINCT columna1, columna2 FROM tabla;
Filtrar filas
df[(df['columna1'] >= 5) & (df['columna1'] <= 10)][['columna1', 'columna2']]
-- Además de WHERE se utilizan operadores como: =, <, >, <=, >=, LIKE, BETWEEN x AND y
SELECT columna1, columna2
FROM tabla
WHERE columna1 BETWEEN 5 AND 10;
Limitar resultados
# Primeras 10 filas de un DataFrame
df.head(10)
# Seleccionar 10 filas desde la 30 hasta la 40
df[['columna1']].iloc[30:40]
-- LIMIT/OFFSET
-- Limitar cantidad / A partir de qué registro
SELECT columna1
FROM tabla
LIMIT 10 OFFSET 30
Agrupar resultados y aplicar función de agregación
# Agrupar por vendedor
df.groupby('vendedor')
# Agrupar por vendedor y sumar los montos
df.groupby('vendedor')['monto'].sum().reset_index(name='total_vendido')
-- Agrupar por vendedor
SELECT vendedor
FROM ventas
GROUP BY vendedor;
-- Agrupar por vendedor y sumar los montos
SELECT vendedor, SUM(monto) AS total_vendido
FROM ventas
GROUP BY vendedor;
Agrupar resultados con condición
df.groupby('vendedor')['monto'].sum().reset_index(name='total_vendido') \
.query('total_vendido > 10000')
SELECT vendedor, SUM(monto) AS total_vendido
FROM ventas
GROUP BY vendedor
HAVING SUM(monto) > 10000;
Combinaciones en base a tablas relacionadas
merged_df = pd.merge(albums, artists, on='artistId', how='inner')
result = merged_df[['title', 'song_year']]
-- Busca coincidencias entre campos de tablas mediante la palabra ON
-- Algunos tipos de uniones son: INNER, OUTER, LEFT, RIGHT, FULL OUTER, entre otras
SELECT title, song_year
FROM albums
INNER JOIN artists
ON artists.artistId = albums.artistId