Sabes qué es una celda, en qué orden se corren, dónde viven los archivos, cómo se sube uno, cómo se baja el resultado y qué hacer cuando algo se rompe. Y ya consultaste 6.000 líneas de facturas —sintéticas, construidas para el curso— sin haber instalado nada.
El notebook de esta clase: https://gaa1104.vercel.app/notebooks/clase-00.ipynb
Ing. en Administración · mención Finanzas · Prof. Tomás Fernández
Hoy se lee una tabla. El primer gráfico llega en la clase 3, y hay una razón: un gráfico que no sabes de dónde salió es una decoración.
La forma la decide el trabajo que hace el dato —magnitud, identidad, polaridad, cambio en el tiempo, distribución—, no el gusto. Regla del curso: un solo eje.
Un notebook es una hoja de trabajo que mezcla dos cosas:
| Tipo de celda | Qué hace | Cómo la reconoces |
|---|---|---|
| Texto | Explica. No se ejecuta | Es lo que estás leyendo |
| Código | Se ejecuta y muestra un resultado debajo | Tiene un ▶ a la izquierda |
El código no corre en tu computador: corre en un computador de Google que te prestan gratis mientras lo usas. Por eso da lo mismo si tu notebook es viejo, si tienes Mac o si el laboratorio de Duoc no te deja instalar nada.
Para correr una celda: haz clic en ella y aprieta Shift + Enter.
Ése es el 90 % de lo que hay que saber. Prueba con la de abajo.
# Tu primera celda. Shift + Enter.
2 + 2
Salió un 4 debajo, y a la izquierda apareció [1]. Ese número es el orden en que corriste las celdas, y va a ser importante en un minuto.
Las celdas comparten memoria. Lo que defines en una, existe en las siguientes. Por eso el orden importa, y el orden no es el que ves en pantalla: es el orden en que las corriste.
Entregas: nada, pero no sigas hasta que te haya pasado. 3 minutos.
name 'margen_bruto' is not defined. Ése es el error que más te va a pasar este semestre, y ahora ya sabes cómo se ve.[n] de la izquierda: ése es el orden real.margen_bruto = 0.2459 # 24,59 % ← el margen real de nuestro caso costo_capital = 0.12 # 12 % anual
# Esta celda usa lo que definió la anterior. Si la corres sin haber corrido # la de arriba, Python dice "name 'margen_bruto' is not defined". print(f"Margen bruto: {margen_bruto:.2%}") print(f"Costo de capital: {costo_capital:.2%}") print(f"Diferencia: {margen_bruto - costo_capital:.2%}")
Cuando te pierdas —y te vas a perder, a todos nos pasa— el arreglo es
siempre el mismo: Entorno de ejecución → Reiniciar y ejecutar todo. Eso
borra la memoria y corre el notebook completo de arriba abajo, que es como
tiene que quedar antes de entregarlo.
Esto no es un detalle de forma: es criterio de corrección. Un notebook que
sólo funciona en tu pantalla, con celdas corridas en desorden, no funciona. El
que corrige lo abre limpio.
Ahora la celda de verdad. Es la misma en todos los notebooks del semestre y va siempre primero. Hace tres cosas:
gaa1104.py, que es el arranque que preparó el profesor.Córrela. La primera vez demora; después es instantánea.
%pip -q install duckdb %matplotlib inline import os, urllib.request if not os.path.exists("gaa1104.py"): # si ya está, no se vuelve a bajar urllib.request.urlretrieve( "https://gaa1104.vercel.app/notebooks/gaa1104.py", "gaa1104.py") import gaa1104 as g bd = g.arrancar() D = str(bd.carpeta) # la carpeta donde quedaron los datos
Si dice «8 tablas cargadas, todas con el número de filas esperado», ya está.
Si dice «OJO — algo no calza», avísale al profesor antes de seguir: el arranque comprueba que cada tabla traiga las filas que corresponde, justamente para que te enteres ahora y no en medio de una evaluación.
Antes de consultar nada, mira qué tienes. Esto es oficio, no trámite: nadie consulta una base que no sabe qué contiene.
bd.tablas()
Ocho tablas. La que vas a usar casi todo el semestre es ventas: el libro de ventas de Austral Distribución SpA, 6.000 líneas de factura.
Cuando no te acuerdes de cómo se llama una columna —te va a pasar siempre— no adivines:
bd.columnas("ventas")
bd.ejemplo("ventas", 5)
Ahora sí. Esto es SQL, y es el idioma del curso desde la clase 2.
👀 Se mira — la consulta viene escrita. Córrela y quédate con el par de números que devuelve: los vas a necesitar en el ticket.
La pregunta: ¿cuántas líneas hay, y en cuántas facturas?
bd.sql("""
SELECT COUNT(*) AS lineas,
COUNT(DISTINCT numero_factura) AS facturas
FROM ventas
""")
6.000 líneas en 2.951 facturas. Divide: 2,03 líneas por factura.
Guárdate ese número, porque explica la mitad de los errores del semestre. Una factura de tres productos ocupa tres líneas, y el descuento de esa factura está escrito en las tres. Sumar la columna de descuento cuenta cada descuento más de dos veces.
Ésa es la trampa insignia del curso y se abre completa en la clase 9. Hoy sólo
hay que saber que está ahí.
A la izquierda hay un icono de carpeta. Ábrelo: eso es el disco de la máquina que Google te prestó.
Lo que tienes que saber, en tres líneas:
Cuando escribas un resultado, va a salidas/, nunca junto al dato original. Ésa es la primera regla de higiene del curso: el dato de origen no se toca jamás.
Entregas: el archivo mi_primera_salida.csv bajado a tu computador. 3 minutos.
Corre la celda de abajo. Después abre el panel de archivos (el icono de carpeta, a la izquierda), busca la carpeta salidas/ que acaba de aparecer, y baja el CSV con los tres puntos → Descargar. Ese ida y vuelta —el dato entra, el resultado sale— es todo lo que necesitas saber de archivos en Colab.
# 🔨 ACTIVIDAD · córrela, y después baja el CSV desde el panel de archivos. ruta = bd.guardar(""" SELECT segmento, COUNT(DISTINCT numero_factura) AS facturas, ROUND(SUM(cantidad * precio_unitario)) AS venta_bruta FROM ventas GROUP BY segmento ORDER BY venta_bruta DESC """, "mi_primera_salida") # Y para leerlo de vuelta: import pandas as pd pd.read_csv(ruta).head(10)
Mira el panel de archivos: apareció la carpeta salidas/ con tu CSV adentro. Para bajarlo a tu computador: los tres puntos al lado del archivo → Descargar.
Ojo con lo que acabas de ver. La consulta diceGROUP BY segmentoy
devolvió más filas de las que esperarías para una empresa con pocos
segmentos. No es un error de la consulta. Es el archivo, que escribe el mismo
segmento de varias formas. Eso se ataca en la clase 3.
Bajar ya lo hiciste. Falta el camino de vuelta, que vas a necesitar en la clase 12: ahí el archivo oficial de la asignatura lo bajas de klearning y lo subes acá a mano. Practícalo hoy, con algo que no importa si sale mal.
ventas_extracto.csv a tu computador.ventas_extracto.csv.Se borra al desconectarse. Lo que subes vive en la sesión, no en tu cuenta.
Si el entorno se reinicia, hay que subirlo de nuevo. Por eso el curso baja casi
todo por código: subir a mano es para lo que no tiene URL pública, como el
archivo de la institución.
# 🔨 ACTIVIDAD · corre esto DESPUÉS de subir el archivo. import os if os.path.exists("ventas_extracto.csv"): subido = pd.read_csv("ventas_extracto.csv") print(f"llegó: {len(subido):,} filas × {len(subido.columns)} columnas".replace(",", ".")) print("columnas:", ", ".join(subido.columns)) else: print("todavía no está. Súbelo con el panel de archivos y vuelve a correr esta celda.")
👀 Se mira — todo este bloque viene resuelto: es una demostración de que el dato público entra al notebook sin que tú tengas que bajar nada a mano.
El curso no trabaja sólo con el caso de la empresa. También usa datos públicos de verdad, y hay dos maneras de traerlos.
La primera: una API. Le pides el dato a un servidor y te contesta al instante. El Banco Mundial no cobra ni pide llave.
# PIB per cápita en dólares constantes, Chile y sus vecinos pib = bd.mundial("NY.GDP.PCAP.KD", "CHL;PER;COL;MEX", desde=2015) pib.pivot(index="year", columns="pais", values="valor").round(0)
La segunda: un archivo publicado. No todo tiene API. A veces la fuente publica una planilla y hay que bajarla, mirarla y entenderla antes de usarla.
El curso usa dos paneles académicos, ya filtrados por el profesor:
| Tabla | Qué es | Para qué sirve |
|---|---|---|
macro | Global Macro Data — 239 países, 1960–2030, 31 variables | Inflación, tasas, deuda, crisis |
paises | Penn World Table 10.0 — comparables por paridad de poder de compra | Productividad, horas trabajadas, capital humano |
Cita las dos por su nombre cada vez que uses una. De dónde salió el dato es parte del dato.
bd.macro()
bd.sql("""
SELECT year,
ROUND(infl, 1) AS inflacion_pct,
ROUND(cbrate, 2) AS tasa_politica_monetaria,
ROUND(govdebt_GDP, 1) AS deuda_pct_pib
FROM macro
WHERE ISO3 = 'CHL' AND year BETWEEN 2019 AND 2024
ORDER BY year
""")
Léelo despacio, porque es el ramo entero en una tabla:
Si tu empresa tomó un crédito a tasa variable en 2020, en 2022 estaba pagando veinte veces la tasa. Eso no es macroeconomía de libro: es la línea de gastos financieros del estado de resultados que vas a mirar en la clase 19.
Esto es lo que hace el curso: el dato de la empresa y el dato del país en
la misma pantalla, porque las decisiones se toman con los dos.
| Lo que ves | Qué pasó | Qué haces |
|---|---|---|
name 'bd' is not defined | No corriste la celda de arranque | Anda arriba y córrela |
Table with name X does not exist | La tabla no está cargada | bd.tablas(). Si es ven o fac, son archivos de Duoc: bd.oficial(...) |
Binder Error … column | Escribiste mal una columna | bd.columnas("ventas") te da los nombres exactos |
syntax error | Error de escritura, no un número malo | Una coma de más antes del FROM, o un paréntesis sin cerrar |
| Todo raro después de probar mucho | Memoria sucia | Reiniciar y ejecutar todo |
| No baja los datos | Tu red bloquea el dominio | Baja los CSV de /descargas/ y súbelos con el panel |
Si Colab se cae el día de la clase, el curso sigue. Existe consola-sql.py, que corre en cualquier computador, sin instalar nada y sin internet. El profesor la reparte. Nunca vas a quedarte sin poder trabajar porque una plataforma de otro se cayó.
Responde en la celda de abajo, y después haz los cuatro pasos de arriba. Esta clase no tiene nota, pero el hábito sí: así se entrega todo el semestre.
a) ¿Cuál es la diferencia entre una celda de texto y una de código? b) ¿Por qué importa el orden en que corres las celdas? c) La tabla ventas tiene 6.000 líneas en 2.951 facturas. ¿Por qué eso hace peligroso sumar la columna de descuento? d) Del 1 al 5, ¿cuán seguro estás de poder abrir un notebook y dejarlo corriendo, solo?
respuesta_a = "" # texto vs. código respuesta_b = "" # por qué importa el orden respuesta_c = "" # por qué sumar la columna de descuento es peligroso seguridad_d = 0 # del 1 al 5 print("Listo. Archivo → Descargar → .ipynb, y súbelo a klearning.")
Tres minutos. No suma nota. Sirve para armar la apertura de la próxima clase.
El notebook de esta clase:
https://gaa1104.vercel.app/notebooks/clase-00.ipynb