Datos tabulares

Usando VS Code para Datos tabulares en pyret

VS Code

Bajen e instalen VS Code de la pagina de Microsoft. Vayan a los extensions (las cajitas en el margen de la izquierda) y busquen pyret. El proceso esta descrito en el libro.

Leyendo datos tabulares en VS Code

En clase y en el libro vimos varias maneras de trabajar con datos tabulares en pyret. Esta vez vamos a intentar leerlos con VS Code. Verifiqen las instrucciones en el libro (la seccion que dice "Load from a CSV file on your computer:").

En este documento, daré un ejemplo utilizando los datos que el gobierno de Puerto Rico publica sobre el tren urbano.

Datos

Los datos que utilizaré de ejemplo son este conjunto.

Si exploran el conjunto, aparece un enlace para descargar el archivo .csv. Este archivo es problematico porque ponen "," dentro de numeros mayores a 1000, y tiene varios datos en blanco.

Reparando los datos

Bajé el archivo tabla-patrocinio-tren-urbano.csv y usé sed para reparar las columnas:

sed -E 's/"([[:digit:]]+),([[:digit:]]{3})"/\1\2/g' tabla-patrocinio-tren-urbano.csv | sed -E 's/"([[:digit:]]),([[:digit:]]{3}),([[:digit:]]{3})"/\1\2\3/g' > tabla-patrocinio-tren-urbano-num.csv

(NOTA No espero que puedan reproducir esto. Lo estoy dejando documentado para la proxima vez que dé la clase. sed es otro lenguage de programacion, y hay libros enteros de como utilizarlo.)

Los datos corregido estan en el siguiente enlace. Los pueden bajar a su computadora y guardar junto con su programa.

https://ccom.uprrp.edu/~humberto/pages/teaching/ccom3030-f2025/tabla-patrocinio-tren-urbano-num.csv

Importando los datos a pyret

Siguiendo los ejemplos del libro y de la documentacion de pyret podemos leer los datos. Recuerden cambiar el contexto a dcic2024.

include csv
include data-source # for sanitizers

fun num-or-empty-sanitizer(A, col, row) -> Number:
  doc: "Convert a (possibly empty) cell to a Number. Empty cells are assigned a 0 value."
  if string-sanitizer(A, col, row) == "":
    # cell was empty
    0
  else:
    # not empty, try converting to number
    num-sanitizer(A, col, row)
  end
end

path = "tabla-patrocinio-tren-urbano-num.csv"

tren-data =
  load-table: Month, Bayamon-entradas, Deportivo-entradas, Jardines-entradas, Torrimar-entradas, Martinez-Nadal-entradas, Las-Lomas-entradas, San-Francisco-entradas, Centro-Medico-entradas, Cupey-entradas, Rio-Piedras-entradas, Universidad-entradas, Pinero-entradas, Domenech-entradas, Roosevelt-entradas, Hato-Rey-entradas, Sagrado-Corazon-entradas,Total-entradas , Bayamon-salidas, Deportivo-salidas, Jardines-salidas, Torrimar-salidas, Martinez-Nadal-salidas, Las-Lomas-salidas, San-Francisco-salidas, Centro-Medico-salidas, Cupey-salidas, Rio-Piedras-salidas, Universidad-salidas, Pinero-salidas, Domenech-salidas, Roosevelt-salidas, Hato-Rey-salidas, Sagrado-Corazon-salidas,Total-salidas
    source: csv-table-file(path, default-options)
      sanitize Total-entradas using num-or-empty-sanitizer
      sanitize Total-salidas using num-or-empty-sanitizer
  end

Graficando los datos

bar-chart(tren-data, "Month", "Total-salidas")

Salidas totales por mes

Ejercício de práctica

Crea una gráfica de el total de salidas por mes el 2015 en pyret. Pueden utilizar filter-with para encontrar filas que contienen "2015" en la columna "Month" (con la funcion string-contains). Hay un ejemplo de filter-with en el libro.

Adjunto el programa completo para leer y graficar los datos de arriba. Enlace al programa .arr completo