Python-Jlab-logo

Fundamentos de Python y JupyterLab


Introducción

En este cuadernillo (Notebook) aprenderemos:

  1. Introducción a Python y JupyterLab

  2. Tipos de Variables

  3. Operadores lógicos

  4. Funciones y métodos

Prerequisitos

Conceptos

Importancia

Notas

Introducción a Python

Útil

Información complementaria

Introducción a Jupyter Lab

Útil

Información complementaria

  • Tiempo de aprendizaje: 30 minutos


1. Python

Python es un lenguaje de programación de alto nivel interpretado y orientado a objetos, similar a otros lenguajes pero con la ventaja que es gratuito y de código abierto.

Lenguajes de alto nivel

Al igual que otros lenguajes como MatLab, IDL y NCL, Python es un lenguaje de alto nivel que tiene funciones autocontenidas, estructura de datos y otras utilidades que permiten mayor productividad usando menos líneas de código comparado con otros lenguajes de programacion como C, C++ o Fortran.

Ventajas:

  • Menos líneas de código

  • Facilidad de programación

Desventajas:

  • Menos velocidad de procesamiento

  • Aumento en el consumo de recursos de memoria

Código abierto

Python es un lenguaje desarrollado por una comunidad científica. Cualquier persona con conocimientos en programación puede realizar aportes y contribuir con la implementación de nuevas herramientas. El termino código abierto implica que Python es versátil y puede adaptarse a cualquier necesidad de la comunidad. En general la comunidad científica ha desarrollado una gran cantidad de paquetes que lo hacen aún mas útil y robusto.

2. JupyterLab

Es un projecto, ademas de una comunidad, cuyo objetivo es “desarrollar software de código abierto, estándares abiertos y servicios para informática interactiva en docenas de lenguajes de programación”.

Componentes principales:

  1. Jupyter Notebooks

  2. Jupyter Kernels

  3. Jupyter Lab

  4. Jupyter Hub

La ejecución de Jupyter puede llevarse a acabo de manera remota o local usando Cuadernillos (Notebooks) (archivos .ipynb). Estos cuadernillos nos permiten ejecutar código, ecuaciones en \(\LaTeX\), visualización de gráficos e imagenes y texto. Jupyter permite ejecución de múltiples lenguajes de programación de Julia, Python y R.

2.1 Interfaz de JupyterLab

JupyterLab es un entorno modular interactivo de programación.

Sus principales componentes son:

  • Barra de menús en la parte superior

  • Explorador de archivos en la izquierda

  • Area de trabajo en la parte derecha

Y, una de sus mayores ventajas es la visualización inmediata de los resultados de la ejecución de un código, pues no se debe compilar o ejecutar desde la línea de comandos en la terminal.

Jlab-logo

En general hay una excelente documentación en la página web de JupyterLab. A continuación, compartimos algunos links útiles para complementar y no duplicar la información:

2.2 Ejecución de comandos en JupyterLab

  • Botón “Play” en la bandeja superior.

  • Ctrl + Enter - solo ejecuta la celda actual

  • Shift+Enter - ejecuta la celda + mueve a la celda inferior

  • Esc / Enter - transición entre la función de edición y la navegación en el entorno

  • D + D - eliminar la celda seleccionada

  • A - agregar nueva celda en la parte superior

  • B - agregar nueva celda abajo

  • Tab - autocompletado / descripción del método

  • Shift + Up / Down - selección de celdas múltiples

  • Shift + M - fusionar celdas seleccionadas

  • M / Y cambia la celda de modo markdown / code

Para información sobre más comandos en JupyterLab puedes hacer click acá.

2.3 Acceso a documentación

import numpy as np

En general, es posible visualizar la descripción de cada comando utilizando el carácter ? justo al final del mismo.

np?
# np.arange?

2.4 Gráficos y figuras dentro del entorno

Podemos generar y visualizar gráficos usando nuestros datos.

import matplotlib.pyplot as plt

x = np.arange(-10, 11)
plt.plot(x, x**2)
plt.show()
../../_images/ae6acaed207bcfe143b7841f042c954968a0e95c29783e1a0cb936182265d609.png

También podemos incluir imágenes externas y visalizarlas en celdas.

random_fig

2.5 Lineas de comando

Los cuadernillos/Notebooks nos permiten interactuar con la teminal y ejecutar lineas de comando usando !

# !dir
# !ls

2.6 \(\LaTeX\)

Podemos renderizar texto usando formato \(\LaTeX\)

\[ P(A \mid B) = \frac{P(B \mid A) \, P(A)}{P(B)} \]

3. Programacion científica con JupyterLab y Python

En Python, un programa puede ser una sola línea de código

print("Hola mundo!")
Hola mundo!

3.1 Tipos de variables en python

Flotante/Decimal (float)

Tiene una notación decimal

pi = 3.1416
type(pi)
float

Enteros (int)

Números que no tienen parte decimal.

a = -14
print(type(a))
<class 'int'>

Caracter (str)

Corresponden a variables que estan compuestas por cadenas de carácteres denotados por comillas sencillas ' o dobles "

my_string = "mi mamá me mima"
type(my_string)
str

Booleano (Bool)

Son variables que únicamente toman el valor de falso (False) o verdadero (True).

a = True
print(type(a))
<class 'bool'>
x = 123
z = 123.0
type(x) == type(z)
False

Listas

Una lista es un contenedor de objetos indicados por corchetes cuadrados:

my_list = [1, "mi mamá me mima", 1 + 0.5j, 3.1416, -1e3]
my_list
[1, 'mi mamá me mima', (1+0.5j), 3.1416, -1000.0]

Podemos acceder a los elementos en una lista usando el índice del uno o varios elementos. En python el índice inicia en 0 y finaliza en la longitud de la lista menos 1, es decir, si la lista tiene n elmentos, entonces el último será el elemento n-1.

my_list[1]
'mi mamá me mima'

De igual modo podemos reasignar nuevos valores

my_list[2] = "nuevo item"
my_list
[1, 'mi mamá me mima', 'nuevo item', 3.1416, -1000.0]

En caso que desee saber más detalles sobre el uso de las listas, puede visitar la siguiente documentación.

Diccionarios

Un diccionario es una colección de objetos etiquetados que se asignan en pares clave:valor. Python usa llaves {} para crear diccionarios:

arctic = {
    "animales": "oso polar, morsas, pinguinos y mas",
    "tamaño": 13985000,
    "unidades": "km2",
    "temperatura": "Muy frio",
}

Para acceder a los datos dentro de una lista debemos usar la etiqueta como se muestra a continuación:

arctic["animales"]
'oso polar, morsas, pinguinos y mas'

Podemos agregar nuevos elementos a la lista de usando etiquetas nuevas

arctic["ubicacion"] = "Polo Norte"
arctic
{'animales': 'oso polar, morsas, pinguinos y mas',
 'tamaño': 13985000,
 'unidades': 'km2',
 'temperatura': 'Muy frio',
 'ubicacion': 'Polo Norte'}

En caso que desee saber más sobre diccionarios puede visitar la documentación.

Tuplas

Se asignan usando paréntesis () en Python y, una vez definidas, no se pueden modificar.

my_tuple = (1.0, 2, 3, 4)
my_tuple
(1.0, 2, 3, 4)
try:
    my_tuple[1] = 0
except TypeError as e:
    print(e)
'tuple' object does not support item assignment

Sets

Los sets en Python retornan una “listas” cuyos elementos son únicos, es decir, no existe la repetición.

my_list2 = [1, 2, 2, 3, 4, 5]
my_list2
[1, 2, 2, 3, 4, 5]
my_set = set(my_list2)
my_set
{1, 2, 3, 4, 5}

Para agregar un nuevo ítem al set debemos utilizar el método add

my_set.add(6)
my_set
{1, 2, 3, 4, 5, 6}

3.2 Operadores lógicos

Operadores aritméticos

Dentro de esta categoria tenemos la suma, resta, multiplicación, división, potenciación, entre otros.

# suma
1 + 50.3
51.3
# resta
50 - 20
30
# multiplicación
2 * 5
10
# división
10 / 8
1.25
# potenciación
2**6
64
# división entera
10 // 3
3
# modulo o residuo
10 % 3
1

3.3 Flujos de control

Condicional if (Si)

Declaración para decisiones lógicas

x = 10
mod = x % 2
if mod == 0:
    print(f"{x} es un número par")
else:
    print(f"{x} es un número impar")
10 es un número par

podemos tener múltiples condicionales usando elif

w = True
if type(w) == str:
    print(f"w es una cadena de caracteres")
elif type(w) == int:
    print(f"{x} es un número entero")
elif type(w) == float:
    print(f"{x} es un número flotante")
elif type(w) == bool:
    print(f"{x} es un boleano")
10 es un boleano

While (Mientras)

EL condicional while ejecuta un bloque de código siempre y cuando se cumpla la condición determinada.

i = 0
while i < 3:
    print(i)
    i = i + 1
0
1
2

For loop (bucle)

Es un bucle que se utiliza para iterar sobre los elementos de una secuencia (puede ser una lista, una tupla, un diccionario o un string). Uno de sus usos más frecuentes es llevar a cabo un conjunto de tareas n veces.

i = 5

for i in range(i):
    print(i)
0
1
2
3
4

3.4 Funciones

Son bloques de código que se corren llamando a la función. Dependiendo de la construcción de la función, de pueden pasar datos a la misma para llamarla.

Por ejemplo, vamos a crear una función que calcula el área de un tríangulo siguiendo la fórmula:

\[ area = \frac{b * h}{2}\]
def area_triangulo(b, h):
    area = b * h / 2
    return area

En este caso, se definió la función area_triangulo que requiere de dos parámetros para llamarla: b que es la longitud de la base del triángulo y h su altura.

Ahora, usamos la función para calcular el área de un triángulo con los siguientes datos: \(b=3\) y \(h=5\)

area_triangulo(b=3, h=5)
7.5

3.5 Clases

Las clases proveen una forma de describir un objeto en programación. Por ejemplo, vamos a describir un objeto figura usando la siguiente clase:

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

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

objeto = Figura(nombre="Cuadrado", num_lados=4, color="rojo", tamanio="grande")

Para acceder a cada una de las propiedades de este objeto simplemente utilizamos . y llamamos el atributo

objeto.nombre
'Cuadrado'
objeto.num_lados
4
objeto.tamanio
'grande'

Las clases también pueden tener métodos que representan básicamente funciones que pertenecen al objeto

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

    # método o funcion que pertenece al objeto
    def imprimir_todo(self):
        print(f"nombre = {self.nombre}")
        print(f"número de lados = {self.num_lados}")
        print(f"color = {self.color}")
        print(f"tamaño = {self.tamanio}")
objeto = Figura(nombre="Cuadrado", num_lados=4, color="rojo", tamanio="grande")
objeto.imprimir_todo()
nombre = Cuadrado
número de lados = 4
color = rojo
tamaño = grande

3.6 Importar librerias

Python es muy popular dentro de la comunidad científica pues utiliza y permite crear paquetes que amplían el lenguaje base de muchas maneras útiles. Para importar librerias en nuestro código en python, solo debemos utilizar la palabra reservada del sistema import seguido de la libreria que queremos utilizar.

import numpy

Muchas veces las librerías tienen nombres difíciles de deletrear, por lo que es conveniente usar un sobrenombre o un alias cuando escribimos el código. Eso lo logramos usando la palabra reservada del sistema as.

Dentro de la comunidad de usuarios y desarrolladores de python se ha establecido una convención general de abreviaturas para la importación de las librerías.

En el caso de Numpy, se utiliza np, para Pandas se utiliza pd y, para Xarray se utiliza xr.

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

Conclusiones

En este cuadernillo aprendimos aspectos básicos de la programación usando Python y la versatilidad que podemos obtener cuando usamos herramientas como JupyterLab. Resaltamos la importancia y el uso de los diferentes tipos de variables, operadores lógicos y flujos de control, así como la manera de usar funciones y clases. También aprendimos a importar librerías usando un alias para identificarlas.

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) [https://doi.org/10.5281/zenodo.7884572]

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