Clase 1 — Introducción a Python#

Python y Políticas Públicas


Contenidos#

  1. ¿Qué es Python y por qué usarlo en políticas públicas?

  2. Entorno de trabajo: Anaconda y Jupyter Notebooks

  3. Tipos de datos básicos

  4. Operaciones y expresiones

  5. Estructuras de control: if, for, while

  6. Ejercicios


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

Shift + Enter

Nueva celda abajo

B (en modo comando)

Nueva celda arriba

A (en modo comando)

Cambiar a Markdown

M (en modo comando)

Cambiar a código

Y (en modo comando)

Borrar celda

DD (en modo comando)


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']