Skip to article frontmatterSkip to article content

🐍 Fundamentos de Programación Científica con Python

🐍 Fundamentos de Programación Científica con Python


1. Introducción


Este cuaderno forma parte del libro interactivo Ciencia de Datos Hidrometeorológicos con Python, y está diseñado como una guía práctica para comenzar a programar con Python usando la plataforma JupyterLab. No necesitas experiencia previa en programación —solo curiosidad y ganas de experimentar.

Aprenderás los fundamentos de la programación, estructuras de datos básicas, lógica condicional, funciones, y una primera introducción al uso de bibliotecas científicas en Python.

📚 ¿Qué vas a aprender?

  • Qué es Python y por qué es tan usado en ciencia de datos
  • Los principales tipos de datos en Python
  • Operadores y estructuras básicas de control
  • Cómo escribir funciones propias
  • Una introducción práctica a las clases y objetos
  • Cómo importar librerías científicas populares

✅ Requisitos previos

ConceptosImportanciaNotas
Introducción a PythonÚtilInformación complementaria

⏱️ Tiempo estimado de aprendizaje: 30–45 minutos
✍️ Formato: interactivo, ejecuta y modifica el código a medida que avanzas


2. ¿Qué es Python?


Python es un lenguaje de programación de alto nivel, interpretado y de código abierto. Se caracteriza por su sintaxis clara, su gran comunidad, y su amplia adopción en áreas como análisis de datos, inteligencia artificial, climatología, y muchas más.

📌 En este libro lo usaremos como base para hacer ciencia de datos con datos hidrometeorológicos reales.

🧠 ¿Qué significa que es de “alto nivel”?

Un lenguaje de alto nivel como Python está diseñado para que las personas lo entiendan y escriban fácilmente. A diferencia de otros lenguajes como C o Fortran, con Python podemos hacer más con menos líneas de código.

# Esto imprime un mensaje en pantalla
print("Hola, mundo")

✅ Ventajas de usar Python

  • Sintaxis simple y legible: fácil de aprender para principiantes
  • 🧪 Ideal para ciencia y análisis de datos
  • 🌍 Gran comunidad científica: muchos paquetes útiles ya existen
  • 💻 Multiplataforma: funciona en Windows, Linux, Mac
  • 🔓 Código abierto: cualquiera puede contribuir

⚠️ Algunas desventajas

  • 🚀 Puede ser más lento que otros lenguajes compilados (como C)
  • 🧠 Requiere buena gestión de memoria con grandes volúmenes de datos
  • 🧩 A veces hay muchas formas de hacer lo mismo (puede confundir)

🌱 Python en la comunidad científica

Python ha sido adoptado por la comunidad científica como una herramienta clave para el procesamiento, visualización y análisis de datos. Gracias a esta comunidad, existen cientos de bibliotecas como:

  • numpy para cálculos numéricos
  • pandas para manipular datos en tablas
  • xarray para trabajar con datos multidimensionales
  • matplotlib y hvplot para visualización

En este libro, aprenderás a usar muchas de estas herramientas paso a paso.

3. Tipos de datos en Python


🔢 Números enteros (int) y decimales (float)

Los enteros (int) representan números sin parte decimal, mientras que los decimales (float) permiten representar números reales.

# Entero
a = 10
print("a:", a, "| tipo:", type(a))
a: 10 | tipo: <class 'int'>
# Decimal
pi = 3.1416
print("pi:", pi, "| tipo:", type(pi))
pi: 3.1416 | tipo: <class 'float'>

🔤 Cadenas de texto (str)

Las cadenas (str) son secuencias de caracteres encerradas entre comillas simples o dobles. Se usan para representar palabras, frases u otros textos.

mensaje = "Hola, mundo"
nombre = 'Python'

print(mensaje)
print("Nombre:", nombre)
print("Tipo:", type(nombre))
Hola, mundo
Nombre: Python
Tipo: <class 'str'>

🔘 Booleanos (bool)

Los booleanos son valores lógicos que solo pueden ser True (verdadero) o False (falso). Se utilizan para hacer comparaciones y estructuras de control.

es_mayor = 5 > 3
es_igual = (10 == 20)

print("5 > 3:", es_mayor)
print("10 == 20:", es_igual)
print("Tipo de es_mayor:", type(es_mayor))
5 > 3: True
10 == 20: False
Tipo de es_mayor: <class 'bool'>

📦 Listas (list)

Las listas son colecciones ordenadas y modificables. Se definen con corchetes y pueden contener distintos tipos de datos.

mi_lista = [1, "texto", 3.14, True]

print("Lista:", mi_lista)
print("Primer elemento:", mi_lista[0])
print("Tipo:", type(mi_lista))

# Modificar un valor
mi_lista[1] = "nuevo texto"
print("Lista modificada:", mi_lista)
Lista: [1, 'texto', 3.14, True]
Primer elemento: 1
Tipo: <class 'list'>
Lista modificada: [1, 'nuevo texto', 3.14, True]

🗂️ Diccionarios (dict)

Un diccionario es una colección no ordenada de pares clave: valor. Se define con llaves {} y permite acceder a cada valor por su clave.

info_persona = {
    "nombre": "Alfonso",
    "edad": 35,
    "ciudad": "Bogotá"
}

print("Nombre:", info_persona["nombre"])
print("Edad:", info_persona["edad"])
print("Diccionario completo:", info_persona)
print("Tipo:", type(info_persona))

# Agregar una nueva clave
info_persona["profesion"] = "Científico de datos"
print("Actualizado:", info_persona)
Nombre: Alfonso
Edad: 35
Diccionario completo: {'nombre': 'Alfonso', 'edad': 35, 'ciudad': 'Bogotá'}
Tipo: <class 'dict'>
Actualizado: {'nombre': 'Alfonso', 'edad': 35, 'ciudad': 'Bogotá', 'profesion': 'Científico de datos'}

🧱 Tuplas (tuple)

Las tuplas son similares a las listas, pero no se pueden modificar. Se definen con paréntesis () y son útiles para almacenar datos fijos.

coordenadas = (4.61, -74.07)

print("Tupla:", coordenadas)
print("Latitud:", coordenadas[0])
print("Longitud:", coordenadas[1])
print("Tipo:", type(coordenadas))

# Intentar modificar una tupla (esto generará un error)
try:
    coordenadas[0] = 0
except TypeError as e:
    print("Error:", e)
Tupla: (4.61, -74.07)
Latitud: 4.61
Longitud: -74.07
Tipo: <class 'tuple'>
Error: 'tuple' object does not support item assignment

🔘 Conjuntos (set)

Los conjuntos son colecciones no ordenadas que no permiten elementos duplicados. Se definen con set() o llaves {}.

valores = [1, 2, 2, 3, 4, 4, 5]
conjunto = set(valores)

print("Original:", valores)
print("Set sin duplicados:", conjunto)
print("Tipo:", type(conjunto))

# Agregar un nuevo elemento
conjunto.add(6)
print("Actualizado:", conjunto)
Original: [1, 2, 2, 3, 4, 4, 5]
Set sin duplicados: {1, 2, 3, 4, 5}
Tipo: <class 'set'>
Actualizado: {1, 2, 3, 4, 5, 6}

5. Operadores y estructuras de control


Python nos permite realizar operaciones matemáticas y tomar decisiones mediante estructuras de control como condicionales y bucles. Estas herramientas son fundamentales para crear programas dinámicos y útiles.

➕ Operadores aritméticos

Python permite usar operadores matemáticos básicos como suma, resta, multiplicación, división, y más.

# Suma
print("1 + 2 =", 1 + 2)
1 + 2 = 3
# Resta
print("5 - 3 =", 5 - 3)
5 - 3 = 2
# Multiplicación
print("4 * 3 =", 4 * 3)
4 * 3 = 12
# División
print("10 / 2 =", 10 / 2)
10 / 2 = 5.0
# División entera (sin decimales)
print("10 // 3 =", 10 // 3)
10 // 3 = 3
# Potenciación
print("2 ** 4 =", 2 ** 4)
2 ** 4 = 16
# Módulo (residuo)
print("10 % 3 =", 10 % 3)
10 % 3 = 1

🤔 Condicionales if, elif, else

Las estructuras condicionales permiten ejecutar bloques de código solo si se cumple una condición.

x = 10

if x > 0:
    print("x es positivo")
elif x == 0:
    print("x es cero")
else:
    print("x es negativo")
x es positivo

También podemos usarlas para comparar tipos o valores:

valor = True

if type(valor) == str:
    print("Es una cadena de texto")
elif type(valor) == int:
    print("Es un número entero")
elif type(valor) == float:
    print("Es un número decimal")
elif type(valor) == bool:
    print("Es un valor booleano")
Es un valor booleano

🔁 Bucle while

El bucle while repite un bloque de código mientras se cumpla una condición.

contador = 0

while contador < 3:
    print("Contador:", contador)
    contador += 1
Contador: 0
Contador: 1
Contador: 2

🔁 Bucle for

El bucle for se usa para recorrer elementos de una secuencia (como una lista o rango).

for i in range(5):
    print("Valor de i:", i)
Valor de i: 0
Valor de i: 1
Valor de i: 2
Valor de i: 3
Valor de i: 4

También se puede usar con listas directamente:

nombres = ["Alfonso", "Nicole", "Max"]

for nombre in nombres:
    print("Hola,", nombre)
Hola, Alfonso
Hola, Nicole
Hola, Max

6. Funciones en Python


Las funciones son bloques de código reutilizables que se definen una vez y se pueden ejecutar múltiples veces. Son ideales para automatizar tareas repetitivas y organizar mejor tu código.

🔧 ¿Qué es una función?

Una función se define usando la palabra clave def, seguida del nombre de la función, paréntesis con los argumentos, y dos puntos :. El cuerpo de la función va indentado.

# Esta función imprime un saludo
def saludar():
    print("Hola, bienvenid@ al curso")

# Llamamos la función
saludar()
Hola, bienvenid@ al curso

🧪 Funciones con argumentos

Puedes definir funciones que acepten uno o más parámetros para hacerlas más flexibles.

def saludar_persona(nombre):
    print(f"Hola, {nombre}!")

saludar_persona("Alfonso")
saludar_persona("Nicole")
Hola, Alfonso!
Hola, Nicole!

➕ Funciones con múltiples argumentos

Las funciones pueden aceptar varios argumentos, por ejemplo, para realizar operaciones matemáticas:

def sumar(a, b):
    resultado = a + b
    print("Resultado:", resultado)

sumar(3, 5)
sumar(10, -2)
Resultado: 8
Resultado: 8

🔁 Funciones que devuelven resultados (return)

Usamos return cuando queremos que la función nos entregue un valor para usarlo más adelante.

def area_triangulo(base, altura):
    return (base * altura) / 2
area = area_triangulo(3, 5)
print("Área del triángulo:", area)
Área del triángulo: 7.5

7. Clases y objetos en Python


En Python, una clase es como un molde o plantilla para crear objetos. Cada objeto puede tener sus propios atributos (datos) y métodos (funciones asociadas).

Este enfoque se conoce como Programación Orientada a Objetos (OOP) y es muy útil para organizar código complejo en estructuras lógicas.

🧱 ¿Qué es una clase?

Vamos a crear una clase llamada Figura que describe un objeto geométrico.

class Figura:
    def __init__(self, nombre, lados, color):
        self.nombre = nombre
        self.lados = lados
        self.color = color
  • __init__() es un constructor que se ejecuta cuando se crea un nuevo objeto.
  • self representa al propio objeto.

🧪 Crear una clase y usar objetos

Ahora instanciamos un objeto de tipo Figura:

Si queremos hacer la abstracción de un cuadrado podemos definirlo de la siguiente manera:

cuadrado = Figura(nombre="Cuadrado", lados=4, color="Rojo")

print("Nombre:", cuadrado.nombre)
print("Lados:", cuadrado.lados)
print("Color:", cuadrado.color)
Nombre: Cuadrado
Lados: 4
Color: Rojo

Cada objeto tiene su propio conjunto de atributos.

🛠️ Métodos dentro de una clase

También podemos definir funciones dentro de una clase que realicen acciones con los datos del objeto. A esto se les llama métodos.

class Figura:
    def __init__(self, nombre, lados, color):
        self.nombre = nombre
        self.lados = lados
        self.color = color

    def describir(self):
        print(f"{self.nombre} tiene {self.lados} lados y es de color {self.color}")

Usamos el método:

triangulo = Figura("Triángulo", 3, "Azul")
triangulo.describir()
Triángulo tiene 3 lados y es de color Azul

Esto imprimirá una descripción usando los datos del objeto.

8. Importar librerías en Python


Una librería (o módulo) es una colección de funciones y clases ya escritas que puedes reutilizar en tu código. Usarlas ahorra tiempo y permite hacer cosas complejas fácilmente.

Por ejemplo, existen librerías para matemáticas (numpy), manejo de datos (pandas), procesamiento de datos climáticos (xarray), visualización (matplotlib), y muchas más.

📦 ¿Cómo se importa una librería?

Usamos la palabra clave import para traer una librería a nuestro entorno de trabajo.

import numpy

Ahora podemos usar cualquier función dentro de numpy, como:

import numpy as np
import pandas as pd
import xarray as xr
numeros = numpy.array([1, 2, 3])
print(numeros)
[1 2 3]

🧩 Usar alias con as

Como algunas librerías tienen nombres largos, se suele usar un alias con la palabra clave as:

import numpy as np

Esto nos permite escribir:

a = np.array([1, 2, 3])
print(a * 10)
[10 20 30]

🧪 Librerías comunes en ciencia de datos

A continuación presentamos algunas de las librerías más utilizadas en análisis científico y de datos climáticos:

  • numpy → Permite realizar cálculos numéricos y operaciones con arrays de manera eficiente.
  • pandas → Ofrece estructuras de datos tipo tabla (DataFrames) ideales para manipular datos tabulados.
  • xarray → Diseñada para trabajar con datos multidimensionales, como series de tiempo o datos climáticos en grillas.

Estas librerías están optimizadas para el trabajo científico y forman la base de muchas herramientas modernas para la ciencia abierta y la climatología computacional.

import numpy as np
import pandas as pd
import xarray as xr

# Crear un array con numpy
arr = np.arange(5)
print("Array con numpy:", arr)

# Crear una tabla (DataFrame) con pandas
df = pd.DataFrame({
    "nombre": ["Ana", "Luis", "Camila"],
    "edad": [23, 34, 29]
})
print("\nTabla con pandas:")
print(df)

# Crear un dataset con xarray
ds = xr.Dataset({
    "temperatura": (("x",), [15.1, 17.3, 16.8])
})
print("\nDataset con xarray:")
print(ds)
Array con numpy: [0 1 2 3 4]

Tabla con pandas:
   nombre  edad
0     Ana    23
1    Luis    34
2  Camila    29

Dataset con xarray:
<xarray.Dataset> Size: 24B
Dimensions:      (x: 3)
Dimensions without coordinates: x
Data variables:
    temperatura  (x) float64 24B 15.1 17.3 16.8

✅ Conclusiones finales

En este capítulo aprendiste los fundamentos esenciales de la programación científica con Python:

  • Los principales tipos de datos (enteros, flotantes, texto, listas, diccionarios, etc.)
  • Cómo utilizar estructuras de control como condicionales y bucles
  • Cómo crear y reutilizar funciones y clases
  • Qué es y cómo se usa JupyterLab como entorno interactivo
  • Cómo importar y utilizar librerías externas en tus notebooks

Estas herramientas forman la base para trabajar con datos reales, desarrollar scripts reproducibles y automatizar análisis en ciencia de datos.

🎓 Programar es una habilidad que se fortalece con la práctica. No te preocupes por memorizar todo ahora, ¡vuelve a este capítulo cuando lo necesites!


👉 ¿Qué sigue?

En el próximo cuadernillo exploraremos en mayor profundidad tres de las librerías más utilizadas en ciencia climática:

  • numpy para trabajar con arreglos y álgebra lineal
  • pandas para manipular datos tabulares
  • xarray para manejar datos multidimensionales como los de satélites, modelos climáticos y observaciones atmosféricas

Prepárate para trabajar con datos reales y aprender nuevas herramientas prácticas. ¡Nos vemos allá! 🌎📊

Fuentes y referencias

References
  1. Rose, B., Kent, J., Tyle, K., Clyne, Banihirwe, A., Camron, D., Ford, R., Morley, J., Grover, M., Eroglu, O., Paul, K., May, R., Lkailynncar, Irving, D., Uieda, L., Ojaybee, Blain, P., & Moon, Z. (2023). ProjectPythia/pythia-foundations: v2023.05.01. Zenodo. 10.5281/ZENODO.7884572