
🐍 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¶
Conceptos | Importancia | Notas |
---|---|---|
Introducción a Python | Útil | Informació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éricospandas
para manipular datos en tablasxarray
para trabajar con datos multidimensionalesmatplotlib
yhvplot
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 linealpandas
para manipular datos tabularesxarray
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¶
- Rose, B. E. J., Kent, J., Tyle, K., Clyne, J., Banihirwe, A., Camron, D., May, R., Grover, M., Ford, R. R., Paul, K., Morley, J., Eroglu, O., Kailyn, L., & Zacharias, A. (2023). Pythia Foundations (Version v2023.05.01) [Rose et al. (2023)]
- Abernathey R. (2022) An Introduction to Earth and Environmental Data Science. [https://
earth -env -data -science .github .io /intro .html] - JupyterLab Documentation [https://
jupyterlab .readthedocs .io /en /stable /index .html]
- 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