Recursos Python

Esta página indica algunos recursos en lenguaje Python asociados a contenidos docentes.

Documentos Google Colaboratory

En algunos los casos en los que no se requiera interacción con hardware, la mayor parte de los recursos se pueden probar y usar sin necesitar tener Python instalado. Es por ello que este documento incluye algunos vínculos a documentos de Google Colaboratory que permiten la ejecución de código Python en máquinas virtuales propiedad de Google.

Adicionalmente, la ETSETB dispone ahora de una máquina virtual PyhonMachine que los usuarios de la escuela pueden utilizar para practicar la programación Python. Esta máquina corresponde al proyecto PyJupyter que está disponible en este vínculo y que se explica más adelate en este documento.

Los módulos y librerias empleados en algunos casos son son parte de las librerias disponibles en las distribuciones Python.

En otros casos forman parte de un conjunto propio de módulos Python Bits alojado en GitHub. En concreto se trata de los módulos:

  • calc : Módulo para cálculos y gráficas
  • mmVars : Módulo para cálculos con máximos, mínimos y el método de montecarlo
  • units : Módulo para trabajar con valores asociados a unidades
  • circuit : Módulo de resolución de circuitos por el método nodal
Estos módulos llevan poco tiempo en desarrollo por lo que no se garantiza que no puedan tener errores en su código. Se muestran aquí básicamente como ejemplo de las posibilidades de extender Python para usos específicos.

Sin más, estos son los recursos agrupados por categorías:

Matemáticas

Las librerías de SciPy dotan al lenguaje Python de una alta capacidad para realizar cálculos matemáticos. Los principales componentes de este paquete de librerias son:
  • Numpy : Herramienta de cálculo basada en arrays multidimensionales
  • SciPy Library: Libreria de funciones que incluye integración y optimización
  • Matplotlib: Libreria de generación de gráficas
  • SymPy: Libreria de cáculo simbólico
  • Pandas: Libreria de análsis de datos
Estas libreriás son las más genéricas para cálculos matemáticos, pero existen muchas más para aplicaciones más específicas.

Esta sección describe algunos módulos, todos ellos disponibles en GitHub, que se apoyan en las librerías anteriores para simplificar o expandir algunas de sus funcionalidades:

Calc

El módulo calc, descrito en este documento de Google Colaboratory, incluye algunas funciones para simplificar el dibujo de gráficas tanto usando Python desde la línea de comandos como usando cuadernos Jupyter tanto de manera local como dentro de Google Colaboratory.
El módulo también incluye algunos algorítmos específicos como los métodos de solución de ecuaciones diferenciales de Euler y Runge-Kutta y algunas funciones de presentación de datos.
Es, por tanto, un módulo ad-hoc para simplificar algunos usos repetitivos de las librerias de SciPy.


mmVars

El módulo mmVars, descrito en este documento de Google Colaboratory, define una clase de objeto mmVar. Este objeto está definido por un valor máximo, un valor mínimo y opcionalmente un valor típico. Es posible operar con estos objetos para obtener los valores máximos y mínimos de expresiones complejas o una cota para éstos.
Para cada objeto definido es posible definir una distribución uniforme o gausiana de manera que, empleando el método de montecarlo es posible hallar el histograma de la distribución de una función arbitraria.


units

El módulo units, descrito en este documento de Google Colaboratory, define un tipo de objeto uVar que une un valor numérico, o un array numpy de valores, asociado a una unidad de medida particular. Es posible operar con estos objetos de manera que se detecten errores de incompatibiliad de unidades o se realicen conversiones automáticas de unidades compatibles.
Adicionalmente el módulo permite la generación automática de nombres de variables y  rótulos de unidades en gráficas.


Resolución de circuitos

Resolución de circuitos mediante Python

Este documento disponible en castellano en el blog AIM65 y en inglés en el blog R6500 contiene una breve explicación sobre como resolver circuitos de manera más o menos automatizada usando código Python.



Los detalles más concretos se hallan en dos documentos de Google Colaboratory:

Solving circuits with Sympy

Este documento demuestra de manera práctica como resolver circuitos mediante distintos métodos empleando la librria Python SymPy.

Module Circuit

Este documento describe el módulo Python circuit que permite resolver circuitos de manera automatizada usando el método nodal.

Common Emitter

Este documento de Google Colaboratory describe un amplificador basado en un transistor NPN en configuración de emisor común. El documento sirve como ejemplo de como se pueden juntar explicaciones y cálculos dentro de un documento Jupyter interactivo.

Linear Module

Este documento de Google Colaboratory describe el módulo Python linear. Este módulo, disponible en GitHub, define una clase linblk que encapsula un bloque lineal. A partir de esta clase es posible analizar el comportamiento de sistemas lineales incluyendo el uso de realimentación y la realización de diagramas de bode.


Simulaciones físicas

Los siguientes documentos de Google Colaboratory explican sistemas físicos modelados mediante código Python. En algunos de los casos se describe también la interacción de estos sistemas con elementos de control. Estos documentos, al ser interactivos, permiten modificar el sistema para observar su funcionamiento cambiando las condiciones de operación.



Pendulum

Este documento describe un péndulo y lo modela mediante ecuaciones. A partir de las ecuaciones se realiza una simulación de su comportamiento considerando casos con y sin fricción. Adicionalmente se comprueba la validez de la simplificación del moviemiento para ángulos pequeños.

DC Motor

Este documento describe el funcionamiento de un motor de contínua y lo modela mediante ecuaciones. Se calculan los parámetros de un motor a partir de sus especificaciones y se obtienen las curvas de Par, Potencia y Eficiencia en función de la velocidad. Adicionalmente se simula el motor a nivel dinámico durante el arranque.

Inverted Pendulum

Este documento describe un péndulo invertido y cómo puede ser controlado mediante un motor usando un algoritmo de control PID. El documento incluye la simulación numérica del comportamiento dinámico del sistema usando el método Runge-Kutta de cuarto orden.


Audio

Este document documento de Google Colaboratory muestra como se pueden generar formas de onda de audio sintéticas y como se pueden leer ficheros wav. En ambos casos los datos de audio pueden ser procesados mediante numpy y los resultados pueden ser oidos en el altavoz del ordenador.










Markdown

Los documentos Jupyter incluyen texto y código por lo que los hace altamente interactivos. Estos documentos, cuando el código se halla en lenguaje Python, pueden ser ejecutados en una instalación local on en las máquinas virtuales de Google usando Colaboratory.
Los campos de texto de los documentos Jupyter se halla escritos en lenguaje Markdown. Este documento muestra los ejemplos más típicos del uso de este lenguaje en un documento Jupyter.




Proyecto PyJupyter

El proyecto PyJupyter consiste en un conjunto de documentos Jupyter diseñados con el objetivo de enseñar/demostrar el uso de Python para aplicaciones de Ciencia e Ingeniería.

Ejemplo de notebook


Estos documentos se distribuyen en forma de un conjunto de ficheros que pueden ser instalados en cualquier máquina que tenga Python3 y Jupyter instalados. Varios de los ejemplos proporcionados son los mismos disponibles en los documentos google colaboratory mencionados anteriormente.

Para simplificar el acceso al sistema se proporcionan manuales de instalación del software requerido en Windows y Linux.

Adicionalmente se proporciona la máquina virtual PythonMachine que los usuarios de la ETSETB pueden emplear para trabajar dentro de éste proyecto con un mínimo de instalación de software y que está disponible para Windows, Linux y OS X.

Para más información, este link permite acceder a la página asociada a este proyecto.

Sistema SLab

El sistema SLab es un proyecto basado en usar una placa de demostración de microcontrolador de bajo coste como núcleo para un sistema de instrumentación de bajo coste. Empleando dos salidas DAC y cuatro entradas ADC en el microcontrolador es posible, usando un pequeño circuito de intefaz basado en operacionales interactuar con circuitos electrónicos simples de baja frecuencia.

SLab measurement of a RC circuit

La placa interactúa con un PC a través de una conexión serie bajo protocolo USB dentro de un paradigma cliente-servidor. El servidor está implementado por el firmware de la placa de desarrollo, implementado en lenguaje C mientras que el cliente está implementado con código Python en el PC.

El hecho de que la instrumentación se halle bajo el control de código Python hace fácil realizar medidas automatizadas y comparar los resultados con cálculos usando modelos con distintos niveles de complejidad.

El sistema SLab se halla descrito, en primera versión pública 1.2, en castellano en el blog AIM65 y en inglés en el blog R6500
La versión actual 2.0 se ofrece en forma de kit en un proyecto piloto descrito en esta página.

El proyecto actualmente incluye:
  • Firmware del Servidor para placas de demostración ST-Nucleo
  • Software Cliente en Python
  • Documentos Jupyter Notebook 
    • Tutoriales sobre circuitos
    • Ficheros de referencia
Los documentos Jupyter son similares a los del proyecto PyJupyer. La principal diferencia es que el uso de una placa de hardware permite asociar los resultados a medidas reales realizadas en circuitos bajo test.

Todos los ficheros públicos del proyecto se hallan en GitHub.


Bibliografia

Existe abundante bibliografía sobre Python. Es por ello que en este apartado sólo se indicará una parte de la que es directamente accesible en la red.

A Byte of Python (Link)
Tutorial de Python para principiantes, en inglés. Parece haber una traducción en curso.

Automate the boring stuff with Python (Link)
Uno de los típicos usos de la informática a nivel de usuario es automatizar tareas repetitivas. Este libro va sobre eso.

Think Python (Link)
Libro bastante completo que incluye conceptos avanzados como las clases.

Dive into Python
Libro sobre Python para programadores experimentados.
Hay una versión en inglés pero también está traducido al castellano
Está especialmente orientado hacia Python 2 pero existe una libro específico para Python 3

Python for Education (Link)
Libro sobre uso de Python en ciencias y matemáticas. Incluye la implementación de métodos numéricos en Python.

Python for Everybody : Exploring data in Python 3 (Link)

Libro sobre Python especialmente focalizado en anàlisis de datos
Está en inglés pero hay una traducción parcial al castellano

Problem Solving with Algorithms and Data Structures using Python (Link)
Este libro aborda la programación en Python desde un punto de vista más formal y algo más orientado hacia la algorítmica.

Python for Science (Link)
Libro especialmente orientado a SciPy, el paquete de liberías científicas de Python. Incluye procesado de datos, gráficas, estadística y machine learning entre otras cosas.














No hay comentarios:

Publicar un comentario