Clase 1 — Introducción a Python#
Python y Políticas Públicas
Contenidos#
¿Qué es Python y por qué usarlo en políticas públicas?
Entorno de trabajo: Anaconda y Jupyter Notebooks
Tipos de datos básicos
Operaciones y expresiones
Estructuras de control:
if,for,whileEjercicios
1. ¿Qué es Python y por qué usarlo en políticas públicas?#
Python es un lenguaje de programación de propósito general, de alto nivel y open source. Fue creado por Guido van Rossum y su primera versión pública data de 1991. Hoy es uno de los lenguajes más populares del mundo.
¿Por qué Python para políticas públicas?
Acceso a datos abiertos: Python permite consumir APIs de portales de datos del gobierno (datos.gob.ar, World Bank, CEPAL) directamente desde el código.
Análisis reproducible: a diferencia de Excel, en Python cada paso del análisis queda documentado y es reproducible por cualquier persona.
Visualización: con unas pocas líneas se pueden generar gráficos de calidad para informes y presentaciones.
Escala: Python puede procesar millones de registros con facilidad — algo imposible en Excel.
Comunidad y gratuidad: es gratuito, tiene una comunidad enorme y miles de librerías especializadas.
Algunos ejemplos de uso en el sector público:
Análisis de ejecución presupuestaria
Monitoreo de indicadores sociales
Análisis de licitaciones y contrataciones
Mapas de cobertura de servicios públicos
Evaluación de impacto de programas sociales
2. Entorno de trabajo#
Anaconda#
Recomendamos instalar Anaconda: una distribución de Python que incluye el intérprete, Jupyter Notebooks, y las principales librerías para análisis de datos (numpy, pandas, matplotlib, etc.).
Descargar desde: https://www.anaconda.com/download
Jupyter Notebooks#
Jupyter Notebooks es el entorno que usaremos durante el curso. Sus características principales:
Celdas de código: donde escribimos y ejecutamos Python.
Celdas de texto (Markdown): donde escribimos explicaciones, como esta celda.
Ejecución interactiva: podemos ejecutar una celda a la vez y ver el resultado inmediatamente.
Atajos de teclado útiles:
Acción |
Atajo |
|---|---|
Ejecutar celda |
|
Nueva celda abajo |
|
Nueva celda arriba |
|
Cambiar a Markdown |
|
Cambiar a código |
|
Borrar celda |
|
3. Tipos de datos básicos#
Python tiene cuatro tipos de datos primitivos que usaremos constantemente:
# Enteros (int)
poblacion = 45_000_000
print(type(poblacion), poblacion)
# Flotantes (float)
tasa_pobreza = 38.9
print(type(tasa_pobreza), tasa_pobreza)
# Strings (str)
provincia = "Buenos Aires"
print(type(provincia), provincia)
# Booleanos (bool)
es_capital = True
print(type(es_capital), es_capital)
<class 'int'> 45000000
<class 'float'> 38.9
<class 'str'> Buenos Aires
<class 'bool'> True
import matplotlib as mpl
import matplotlib.pyplot as plt
# --- Paleta de identidad del curso ---
C = ['#2A6496', '#E07B3F', '#3D9970', '#8E5EA2', '#C0A830', '#637A8A']
mpl.rcParams.update({
'figure.figsize' : (10, 5),
'font.size' : 11,
'axes.titlesize' : 12,
'axes.titleweight' : 'normal',
'axes.spines.top' : False,
'axes.spines.right' : False,
'legend.frameon' : False,
'axes.prop_cycle' : mpl.cycler(color=C),
'figure.dpi' : 110,
})
def tit(ax, t, **kw):
"""Título sin negrita, alineado a la izquierda."""
ax.set_title(t, loc='left', fontweight='normal', **kw)
# Operaciones con strings
nombre = "Ministerio"
area = "Educación"
# Concatenación
print(nombre + " de " + area)
# f-strings (forma moderna y recomendada)
presupuesto = 1_250_000
print(f"El {nombre} de {area} tiene un presupuesto de ${presupuesto:,}")
# Métodos de strings útiles
texto = " buenos aires "
print(texto.strip()) # elimina espacios
print(texto.strip().title()) # capitaliza
Ministerio de Educación
El Ministerio de Educación tiene un presupuesto de $1,250,000
buenos aires
Buenos Aires
4. Operaciones y expresiones#
# Operaciones aritméticas
suma = 10 + 3 # 13
resta = 10 - 3 # 7
producto = 10 * 3 # 30
division = 10 / 3 # 3.333...
div_entera = 10 // 3 # 3
modulo = 10 % 3 # 1
potencia = 10 ** 3 # 1000
print(suma, resta, producto, division, div_entera, modulo, potencia)
13 7 30 3.3333333333333335 3 1 1000
# Ejemplo aplicado: calcular tasa de cobertura
ninos_en_edad_escolar = 8_500_000
ninos_matriculados = 7_820_000
tasa_cobertura = (ninos_matriculados / ninos_en_edad_escolar) * 100
print(f"Tasa de cobertura escolar: {tasa_cobertura:.1f}%")
Tasa de cobertura escolar: 92.0%
# Operadores de comparación (devuelven True o False)
x = 5
print(x > 3) # True
print(x == 5) # True (igualdad, no asignación)
print(x != 4) # True
print(x <= 4) # False
# Operadores lógicos
print(x > 3 and x < 10) # True
print(x > 10 or x < 3) # False
print(not (x > 10)) # True
True
True
True
False
True
False
True
5. Estructuras de control#
5.1 if / elif / else#
Permiten ejecutar código de forma condicional.
# Ejemplo: clasificar nivel de pobreza
tasa_pobreza = 42.7
if tasa_pobreza < 20:
nivel = "bajo"
elif tasa_pobreza < 40:
nivel = "medio"
else:
nivel = "alto"
print(f"Con una tasa de {tasa_pobreza}%, el nivel de pobreza es: {nivel}")
Con una tasa de 42.7%, el nivel de pobreza es: alto
5.2 for#
Itera sobre una secuencia de elementos.
# Iterar sobre una lista de provincias
provincias = ["Buenos Aires", "Córdoba", "Santa Fe", "Mendoza"]
for provincia in provincias:
print(f"Procesando datos de {provincia}...")
Procesando datos de Buenos Aires...
Procesando datos de Córdoba...
Procesando datos de Santa Fe...
Procesando datos de Mendoza...
# range() genera una secuencia de números
for i in range(5):
print(f"Año {2020 + i}: ejecutando análisis...")
Año 2020: ejecutando análisis...
Año 2021: ejecutando análisis...
Año 2022: ejecutando análisis...
Año 2023: ejecutando análisis...
Año 2024: ejecutando análisis...
# enumerate() da índice y valor
ministerios = ["Educación", "Salud", "Economía", "Obras Públicas"]
for i, ministerio in enumerate(ministerios, start=1):
print(f"{i}. Ministerio de {ministerio}")
1. Ministerio de Educación
2. Ministerio de Salud
3. Ministerio de Economía
4. Ministerio de Obras Públicas
5.3 while#
Repite un bloque de código mientras se cumpla una condición.
# Ejemplo: simular acumulación de presupuesto
presupuesto_acumulado = 0
meta = 1_000_000
mes = 1
transferencia_mensual = 320_000
while presupuesto_acumulado < meta:
presupuesto_acumulado += transferencia_mensual
print(f"Mes {mes}: presupuesto acumulado = ${presupuesto_acumulado:,}")
mes += 1
print(f"\nSe alcanzó la meta en el mes {mes - 1}")
Mes 1: presupuesto acumulado = $320,000
Mes 2: presupuesto acumulado = $640,000
Mes 3: presupuesto acumulado = $960,000
Mes 4: presupuesto acumulado = $1,280,000
Se alcanzó la meta en el mes 4
5.4 List comprehensions (bonus)#
Una forma concisa de construir listas con un for en una sola línea.
# Tasas en porcentaje -> convertir a decimal
tasas_pct = [38.9, 42.1, 35.7, 40.2]
tasas_decimal = [t / 100 for t in tasas_pct]
print(tasas_decimal)
# Solo las provincias que empiezan con 'S'
todas = ["Salta", "Buenos Aires", "Santiago del Estero", "Córdoba", "Santa Cruz"]
provincias_s = [p for p in todas if p.startswith("S")]
print(provincias_s)
[0.389, 0.42100000000000004, 0.35700000000000004, 0.402]
['Salta', 'Santiago del Estero', 'Santa Cruz']
6. Ejercicios#
Ejercicio 1#
Tenés los siguientes datos de tres municipios:
Municipio |
Población |
Hogares con acceso a agua potable |
|---|---|---|
A |
120.000 |
98.400 |
B |
85.000 |
59.500 |
C |
200.000 |
174.000 |
Calculá la tasa de cobertura de agua potable para cada municipio e imprimí un mensaje que diga si es «alta» (≥ 90%), «media» (entre 70% y 90%) o «baja» (< 70%).
# Tu solución aquí
municipios = [
{"nombre": "A", "poblacion": 120_000, "con_agua": 98_400},
{"nombre": "B", "poblacion": 85_000, "con_agua": 59_500},
{"nombre": "C", "poblacion": 200_000, "con_agua": 174_000},
]
# Completá el código...
Ejercicio 2#
Escribí un programa que, dado un presupuesto inicial de $500.000 y un gasto mensual de $80.000, imprima cuántos meses dura el presupuesto y en qué mes se agota.
# Tu solución aquí
Ejercicio 3#
Tenés esta lista de nombres de programas sociales (con errores de formato):
programas = [" plan trabajar", "PROGRESAR ", "asignación universal", " BECAS PROGRESAR"]
Usá una list comprehension para limpiarlos (sin espacios y con formato título).
programas = [" plan trabajar", "PROGRESAR ", "asignación universal", " BECAS PROGRESAR"]
# Tu solución aquí
Soluciones#
# Solución Ejercicio 1
municipios = [
{"nombre": "A", "poblacion": 120_000, "con_agua": 98_400},
{"nombre": "B", "poblacion": 85_000, "con_agua": 59_500},
{"nombre": "C", "poblacion": 200_000, "con_agua": 174_000},
]
for m in municipios:
tasa = (m["con_agua"] / m["poblacion"]) * 100
if tasa >= 90:
nivel = "alta"
elif tasa >= 70:
nivel = "media"
else:
nivel = "baja"
print(f"Municipio {m['nombre']}: cobertura {tasa:.1f}% — nivel {nivel}")
Municipio A: cobertura 82.0% — nivel media
Municipio B: cobertura 70.0% — nivel media
Municipio C: cobertura 87.0% — nivel media
# Solución Ejercicio 2
presupuesto = 500_000
gasto_mensual = 80_000
mes = 0
while presupuesto > 0:
presupuesto -= gasto_mensual
mes += 1
if presupuesto > 0:
print(f"Mes {mes}: quedan ${presupuesto:,}")
else:
print(f"Mes {mes}: presupuesto agotado (déficit de ${abs(presupuesto):,})")
Mes 1: quedan $420,000
Mes 2: quedan $340,000
Mes 3: quedan $260,000
Mes 4: quedan $180,000
Mes 5: quedan $100,000
Mes 6: quedan $20,000
Mes 7: presupuesto agotado (déficit de $60,000)
# Solución Ejercicio 3
programas = [" plan trabajar", "PROGRESAR ", "asignación universal", " BECAS PROGRESAR"]
programas_limpios = [p.strip().title() for p in programas]
print(programas_limpios)
['Plan Trabajar', 'Progresar', 'Asignación Universal', 'Becas Progresar']