UNIDAD 2 - Parte 1
Los datos son piezas de información de algún tema o área en particular.
Pueden venir en tres formas diferentes según su estructura:
Estructurados
No estructurados
Semiestructurados
Los datos estructurados tienen un formato estandarizado o definido que permite tanto al software como a las personas acceder a la información de una manera eficiente. Por lo general, suelen organizarse en forma de tablas con filas y columnas.
Cada campo o atributo tiene un tipo de dato y un formato claro.
Atributos definibles
Los datos estructurados tienen los mismos atributos para los diferentes registros.
Atributos relacionales
Las tablas de datos estructurados tienen información común que permite vincular entre sí diferentes conjuntos de datos.
Almacenamiento
Se pueden almacenar datos estructurados de manera conveniente en una base de datos relacional y administrarlos y consultarlos en forma sencilla con lenguajes como SQL (Structured Query Language).
Los datos no estructurados son información sin un modelo de datos establecido o son datos que no están ordenados de una manera predefinida. Generalmente no pueden representarse con filas y columnas.
Ejemplos: correos electrónicos, chats, documentos de texto, imágenes, audio y video.
Facilidad de análisis Es mucho más difícil organizar, limpiar y analizar datos que no tengan un modelo de datos predefinido y muy pocas herramientas disponibles en el mercado pueden hacer esto.
Capacidad de búsqueda Es fácil hacer búsquedas en los datos estructurados ya que siguen diversas reglas predefinidas.
Flexibilidad Los datos no estructurados tienen menos restricciones en su estructura, por lo que es más fácil agregar nueva información en comparación con un conjunto de datos estructurados.
Representan una categoría intermedia entre los datos estructurados y los no estructurados.
Tienen cierta organización interna, pero no siguen un esquema rígido como las tablas de una base de datos relacional.
Ejemplos típicos son los archivos XML, YAML o JSON, que utilizan etiquetas (tags) o pares clave-valor para dar estructura, pero permiten flexibilidad en el formato y en los tipos de datos que contienen.
Está basado en texto, lo que lo hace fácil de leer para humanos y computadoras.
El siguiente código representa el registro de una persona. ¿Qué información contiene?
XML utiliza tags para darles forma a los datos, los cuales pueden ser:
Elementos, como <First Name>
.
Atributos, como Age='23'
.
A su vez, los elementos pueden tener elementos secundarios o hijos que permiten expresar relaciones, como Hobby
dentro del elemento Hobbies
.
Es un formato de archivo liviano que se utiliza para almacenar e intercambiar datos y se basa en el lenguaje de programación JavaScript.
Utiliza una estructura clave-valor para representar datos y soporta el manejo de listas y jerarquías.
JSON usa llaves {}
para indicar la estructura de los datos.
Ejemplo conocido…
YAML Ain’t Markup Language (YAML) es un lenguaje de serialización con una gran legibilidad.
La estructura de los datos se da por la separación de las líneas y la indentación (se elimina la dependencia de caracteres especiales).
XML. Formato basado en etiquetas. Muy verboso y complejo para la legibilidad humana. Usado históricamente en la integración de sistemas.
JSON. Formato ligero basado en pares clave-valor y listas. Estándar actual para intercambio de datos en la web y APIs.
YAML. Formato basado en indentación y pares clave-valor muy legible para humanos. Ampliamente usado en archivos de configuración.
Se estima que más del 80% de los datos generados a nivel mundial son no estructurados, y gran parte de ellos son datos textuales, como e-mails, posteos en redes sociales, artículos de noticias, etc.
Aunque la gran mayoría de los datos generados en el mundo real son no estructurados, en el análisis de datos es común encontrarnos con datos representados en un formato tabular (compuestos por filas y columnas).
Este será el tipo de datos con el que trabajaremos principalmente a lo largo de esta asignatura.
Para almacenar datos tabulares se pueden usar diferentes tipos de archivos: .csv, .json, .txt, .html, .parquet.
ORIENTADOS A FILAS
Los datos se organizan en registros y todos los datos asociados a un registro se guardan juntos en la memoria. Por lo tanto, realizar consultas sobre el valor de un atributo para diferentes registros resulta ineficiente ya que se debe cargar todo el registro con datos innecesarios.
ORIENTADOS A COLUMNAS
Los datos se organizan por columna/campo/variable y todos los datos de la columna se guardan juntos en la memoria. Por lo tanto, cuando queremos consultar los valores de una columna, sólo necesitamos cargar esa columna sin necesidad de leer todo el archivo.
Además, al ser todos los datos de una misma columna del mismo tipo, la compresión del archivo es mejor.
Supongamos que tenemos la siguiente tabla:
dni | nombre | apellido | anio_nacimiento |
---|---|---|---|
40576890 | Pedro | Aguirre | 1995 |
32492645 | Julia | Martinez | 1988 |
¿Qué forma tendrá el archivo si dicha información se guarda orientada a filas?
¿Y si se guarda orientada a columnas?
Si la info se guarda orientada a filas:
row | value |
---|---|
row 1 | 40576890 |
Pedro | |
Aguirre | |
1995 | |
row 2 | 32492645 |
Julia | |
Martinez | |
1988 |
Si la info se guarda orientada a columnas:
column | value |
---|---|
dni | 40576890 |
32492645 | |
nombre | Pedro |
Julia | |
apellido | Aguirre |
Martinez | |
año_nacimiento | 1995 |
1988 |
A continuación, veremos diferentes formatos de archivos para almacenar datos tabulares, con los que trabajaremos a lo largo del semestre:
.csv
.json
.txt
.html
.parquet
Los diferentes registros (las filas) se separan entre sí mediante saltos de líneas, mientras que los atributos/variables (las columnas) se separan usando la coma (también se pueden usar otros caracteres como el punto y coma o el tab). Hoy en día es uno de los formatos más utilizados en el análisis de datos.
Name, Age, Gender
John, 25, Male
Jane, 30, Female
Bob, 40, Male
Para tener en cuenta:
Los archivos .csv son archivos poseen un formato de almacenamiento orientado a filas.
Los archivos .csv no guardan información acerca del tipo de dato de su contenido puesto que todo se guarda en texto simple.
Es uno de los formatos más simples y ampliamente utilizados para el almacenamiento de datos.
Cuando se almacenan datos tabulares, los archivos TXT suelen ser muy similares a los CSV.
Aplicaciones: se utiliza comúnmente para almacenar grandes conjuntos de datos de texto, como documentos, transcripciones, registros de chat, mensajes de correo electrónico, etc. También se utiliza en el procesamiento de lenguaje natural (NLP) para almacenar y analizar conjuntos de texto, como textos médicos, noticias, redes sociales, entre otros.
Es un formato para el almacenamiento de datos tabulares orientado a columnas y está optimizado para grandes cargas de datos. Es de uso común en sistemas de procesamiento de Big Data basados en Hadoop, como Hive, Impala y Spark. Fue desarrollado por Cloudera y Twitter en 2013 como un proyecto de código abierto.
Parquet se basa en una representación de datos en columnas comprimidas, lo que lo hace muy eficiente para consultas analíticas que involucran grandes cantidades de datos. Es un formato popular para el procesamiento de Big Data.
El formato HTML (Lenguaje de Marcado de Hipertexto o HyperText Markup Language) es un lenguaje utilizado principalmente para crear páginas web y documentos de hipertexto.
En el campo de la ciencia de datos, se puede utilizar como un formato de almacenamiento de datos estructurados y no estructurados.
Este es un ejemplo de una tabla escrita en HTML:
<html>
<head></head>
<body>
<table id="customers">
<tbody>
<tr>
<th>Company</th>
<th>Contact</th>
<th>Country</th>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Centro comercial Moctezuma</td>
<td>Francisco Chang</td>
<td>Mexico</td>
</tr>
</tbody>
</table>
</body>
</html>
HTML (al igual que XML) utiliza tags para estructurar el contenido:
📌 Elementos clave de la sintaxis:
<table>: define el inicio y el fin de la tabla.
<tr> (table row): representa una fila.
<th> (table header): representa una celda de encabezado.
<td> (table data): representa una celda de datos.
A esto se lo llama sintaxis de marcado, porque las etiquetas “marcan” o delimitan parte del contenido.
PANDAS es una librería de Python para el análisis y manipulación de datos. Proporciona estructuras de datos eficientes para almacenar y organizar información, y un conjunto de funciones que permiten realizar una gran variedad de operaciones, como filtrar, transformar, agrupar o resumir datos, entre muchas otras.
Pandas proporciona dos estructuras principales para trabajar con datos:
Series
: una serie de Pandas es una matriz unidimensional capaz de contener cualquier tipo de dato: números enteros, cadenas de texto, números decimales, objetos de Python, etc. Cada elemento de la serie posee un identificador único llamado índice (index
).
DataFrame
: un DataFrame es una estructura bidimensional tabular formada por filas y columnas. Cada fila está identificada por un índice, y las distintas columnas pueden almacenar datos de diferente tipo.
LIBRERÍA PANDAS Con pandas
podemos leer archivos .csv, .txt, .xlsx o .xls, .parquet y .json
pd.read_csv()
también permite leer archivos .txt.LIBRERÍA PANDAS
read_excel()
nos permite leer archivos .xlsx o .xls. Si el archivo en cuestión tiene más de una hoja, se debe especificar el nombre de la hoja con la que se quiere trabajar en el argumento sheet_name
.LIBRERÍA PANDAS
pandas
cuenta con la función read_json()
que posibilita la lectura/importación de archivos JSON al entorno de trabajo. Esta función convierte automáticamente los datos en un objeto pd.DataFrame
.LIBRERÍA JSON
json
en Python proporciona herramientas para trabajar con datos JSON. Para leer un archivo .json, primero se debe abrir el archivo en modo de lectura y luego utilizar la función load()
de la librería json
para cargar los datos en un objeto Python.LIBRERÍA PANDAS
pandas
cuenta con la función read_parquet()
para la lectura de archivos con este formato. El parámetro engine
nos permite seleccionar la librería específica de parquet para leer el archivo: io.parquet.engine (auto
), pyarrow
, fastparquet
.¿Cómo guardamos nuestros datos en distintos formatos de archivos usando pandas
?
int
: para representar valores enteros. En general, el tipo de dato entero puede ser byte, short, int o long, y cada uno se corresponde con el volumen de memoria que puede ocupar el dato: 8, 16, 32 o 64 bits respectivamente. A partir de Python 3, todos los enteros son de formato long
, es decir que ocupan 64 bits de memoria.
float
: para representar valores reales de coma flotante. Existe el float
single precision (32 bits) y el double precision (64 bits).
str
: sirve para representar texto.
bool
: para representar valores booleanos de True/False
NaN/None
object
vs. str
En pandas
, las columnas que contienen valores de texto se representan como el tipo de datos object
en lugar del tipo de datos str
de Python. Esto se debe a que str
es un tipo de datos específico en Python que sólo puede contener caracteres alfanuméricos y algunos caracteres especiales, mientras que object
puede contener cualquier tipo de objeto de Python, incluyendo cadenas de texto.
Además, las columnas de texto en un DataFrame de pandas
pueden contener valores faltantes (por ejemplo, NaN), y object
es un tipo de datos compatible con este tipo de datos.
El módulo datetime
de Python nos provee clases para manipular fechas y horas. Los objetos de fecha y hora pueden ser categorizados como aware o naive, dependiendo de si incluyen o no información sobre el huso horario.
Un objeto de fecha y hora de tipo aware contiene información sobre la zona horaria, lo que lo hace inequívoco en cuanto a la representación de un momento específico en el tiempo. De esta forma, para crear este tipo de objetos es necesaria la ayuda de la librería pytz
.
Ejemplo de creación de un objeto de fecha y hora de tipo aware
from datetime import datetime
import pytz
zona_horaria = pytz.timezone('America/Argentina/Buenos_Aires')
fecha_aware = datetime(2025, 8, 25, 18, 00, 0, tzinfo = zona_horaria)
print('Horario de la clase virtual de Fundamentos:', fecha_aware)
Horario de la clase virtual de Fundamentos: 2025-08-25 18:00:00-03:54
La lista de husos horarios incluida dentro del módulo pytz
puede consultarse en el siguiente link.
Por el contrario, un objeto de fecha y hora naive no contiene información sobre el huso horario. Representa una fecha y hora determinadas, pero no está claro a qué zona horaria se refiere.
🤓 ¡Manos a la obra! - PARTE I
Leé el archivo lista_personas.csv
.
¿Cuántas filas y columnas tiene el dataset?
¿Hay alguna columna que contenga datos faltantes?
Observá los nombres de las columnas. ¿Detectás alguna inconsistencia?
¿Qué tipo de dato contiene cada columna? ¿Es el esperado en cada caso?
¿Cuántos nombres diferentes de personas hay en el dataset? ¿Observás algún error?
.rename()
. Útil para renombrar columnas o índices.
.str.replace()
. Útil para reemplazar caracteres o cadenas dentro de una columna de texto.
.str.strip()
. Elimina espacios en blanco al inicio y al final de las cadenas.
.str.lower()
/.str.upper()
. Convierte cadenas de texto a minúsculas o mayúsculas, respectivamente.
.astype(tipo)
. Convierte el tipo de dato de una columna.
.isnull()
/ isna()
/ .notnull()
. Son útiles para detectar valores faltantes. Aplicados sobre una columna de un DataFrame, devuelven una Serie booleana.
.unique()
. Devuelve un array con los valores únicos presentes en una columna.
.value_counts()
. Devuelve una Serie con las frecuencias de los valores únicos en una columna.
pandas
Si nuestros datos están en un archivo .csv (que no guarda info sobre el tipo de dato contenido en cada columna), y el mismo posee un campo que contiene fechas, podemos usar el método pd.to_datetime()
para indicarlo.
Como resultado, transformarmos esa información en datos de tipo datetime64
.
🤓 ¡Manos a la obra! - PARTE II
Considerando el dataset lista_personas.csv
:
¿Quién es la persona de mayor edad entre las personas del dataset?
Extraer el mes de nacimiento de cada persona en una nueva columna. ¿Cuál fue el mes con mayor cantidad de nacimientos?
datetime64
datetime64
es un tipo de datos numérico que se representa internamente como un número entero de 64 bits.
Cada unidad de fecha y hora (año, mes, día, hora, minuto, segundo, nanosegundo) se convierte en un número entero que representa la cantidad de esa unidad desde una fecha de referencia, que es el 1 de enero de 1970. Esta fecha de referencia se utiliza como base para el cálculo de todas las demás fechas y horas.
La precisión de datetime64
se puede controlar mediante los modificadores de unidades de tiempo. Por ejemplo, datetime64[s]
representa una fecha y hora con precisión de segundos, datetime64[ms]
con precisión de milisegundos y datetime64[us]
con precisión de microsegundos.