Skip to content

Información variada útil sobre el lenguaje Python y librerías/herramientas

Notifications You must be signed in to change notification settings

rubennj/python-info

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Información sobre Python

Table of contents generated with markdown-toc

El presente repositorio [https://github.com/isi-ies-group/python-info] contiene documentos útiles. Ver listados de fichero arriba.

GLOSARIO

Breve explicación de nombres relacionados con los proyectos que sostienen el mundo Científico-Python (SciPy) desde un punto de vista de una persona que realiza computación y/o conoce Matlab.

Es el lenguaje, a diferencia de otros conceptos del entorno Python que se detallan más adelante.

  • Es un lenguaje multiplataforma, más compacto, más legible, más fácil de depurar pero menos rápido, menos voluminoso y con menos control de la máquina respecto a C/C++.
  • El lenguaje y las librerías son libres y gratuitas. Las más importantes son ya estándares de facto y se actualizan rápido.
  • Es un lenguaje interpretado, basado en scripts. No se tiene que compilar para que se ejecute el código.
  • Se puede ejecutar un script en otro PC muy fácilmente y editarlo de forma instantánea. Especialmente conveniente para controlar tareas automáticas.
  • Se puede ejecutar de forma interactiva, lanzando python desde la línea de comando cmd sin ningún parámetro.
  • Se pueden crear ejecutables mediante librerías.

Python en 100 segundos (video)

Terminologia

https://realpython.com/lessons/scripts-modules-packages-and-libraries/#description

  • Un script es un archivo de Python destinado a ser ejecutado directamente. Cuando se ejecuta, debe hacer algo. Esto significa que los scripts contendrán a menudo código escrito fuera del ámbito de cualquier clase o función.
  • Un módulo es un archivo de Python destinado a ser importado en scripts u otros módulos. A menudo define miembros como clases, funciones y variables destinadas a ser utilizadas en otros archivos que lo importan.
  • Un paquete es una colección de módulos relacionados que trabajan juntos para proporcionar cierta funcionalidad. Estos módulos están contenidos en una carpeta y pueden ser importados como cualquier otro módulo. Esta carpeta contendrá a menudo un archivo especial init que indica a Python que es un paquete, que puede contener más módulos anidados en subcarpetas
  • Una biblioteca es un término paraguas que significa vagamente "un paquete de código". Estos pueden tener decenas o incluso cientos de módulos individuales que pueden proporcionar una amplia gama de funcionalidad.

Python vs Matlab

IDE - Spyder

Es un IDE (Integrated Development Environment), el programa para escribir/ejecutar scripts, manipular datos y depurar código.

Otros IDEs interesantes

IPython

Es una versión mejorada de la terminal de Python.

Conda

Gestor de librerías. Permite instalar, quitar, actualizar, listar. Mediante el comando conda install <libreria> desde cmd se instalan las librerías necesarias.

Canales

Es la fuente de donde vienen los paquetes. Existe un canal default que se toma por defecto y pertenece/actualiza Anaconda, pero que no siempre está actualizado al 100%.

Conda-forge

Es un canal estándar de facto mantenido por la comunidad que es actualizado por los propios desarrolladores de las librerías.

  • Usar este canal por defecto ejecutando estos comnados:
    conda config --add channels conda-forge
    conda config --set channel_priority strict

Miniconda

OPCIÓN RECOMENDADA
Conda vs Miniconda vs Anaconda https://ichi.pro/assets/images/max/724/1*O5Jgl-KFuvUyujAZhXHYlQ.png
Es una distribución de Python mínima, que solo instala Python + conda (gestor de librerias). https://docs.conda.io/en/latest/miniconda.html

  • Ver la última versión en la web!
  • Hay que elegir Python 2 o 3. Elegir 3, ya que la v. 2 está sin soporte.

Anaconda

Es una distribución de Python adecuada al mundo científico con muchas librerías. Resulta muy pesada, mejor usar miniconda. https://www.anaconda.com/distribution/

  • Es también el nombre de la empresa que crea y mantiene esta distribución.

CURSOS

TUTORIALES

  1. https://leportella.com/english/2018/07/22/10-tips-matlab-to-python.html
  2. https://hub.gke.mybinder.org/user/gestaltrevision-thon_for_visres-ones2sck/notebooks/Part3/Part3_Scientific_Python.ipynb
  3. https://www.enthought.com/wp-content/uploads/Enthought-MATLAB-to-Python-White-Paper.pdf

LENGUAJE - PECULIARIDADES

Variables

Estilo

PEP 8

Formateo texto

Bucles

Pythonic loops (olvídate de los loops con índice!)

Modismos (idioms)

Context manager & with

List comprehension

sentencia = "el rápido zorro marrón salta sobre el perro perezoso"
palabras = sentencia.split()
longitud_palabra = []
for palabra in palabras:
      if palabra != "el":
          longitud_palabra.append(len(palabra))

vs

longitud_palabras = [len(palabra) for palabra in palabras if palabra != "el"]

Zip - iteracion paralela

Funcion lambda

Decorador funciones

Operador ternario (condicional)

Generadores (yield)

args y kwargs

Redondeo

  • https://realpython.com/python-rounding/
  • Python redondea según el convenio tipico en computación según el IEEE 754: por proximidad unbiased, prefiriendo en el caso límite los resultados pares.
>>> round(7.5)
8
>>> round(8.5)
8

Excepciones

Clases

Break, continue y pass

Encadenamiento operadores comparacion

Underscore - uso sintactico

Acceso a variables de forma dinamica

LIBRERIAS

Para procesar, visualizar y representar datos existen librerías "científicas", como las de Matlab, aunque algunas son para obtener funcionalidades que vienen por defecto en Matlab.

  • Hay que importar al principio de cada script cada libreria explícitamente, para mantener un control de los nombres de cada librería (espacio de nombres).

No usar import * https://www.geeksforgeeks.org/why-import-star-in-python-is-a-bad-idea/

  • Si no están ya instaladas, se tienen que instalar desde la linea de comandos de Windows cmd con el comando conda install "nombre_libreria". Si no estuviera en los repositorios de Anaconda, habría que instalarlas mediante conda install conda-forge::"nombre_libreria" o finalmente con pip install "nombre_libreria". Si no existe como librería, se debería usar directamente como paquete de Python, en un fichero *.py
  • ACTUALIZACION! Usar canal conda-forge por defecto (ver Conda)
  • Control de librerias: Se pueden actualizar, instalar, desinstalar desde linea de comandos: 'cmd'.p. ej. 'conda update spyder'

Las más usuales son:

Scipy

Funciones de cálculo numérico, muchas tienen la misma sintáxis que en Matlab p. ej. trapz()

Implementa tipo de dato 'array' que permite operaciones vectoriales, tipo Matlab. No necesita la sintaxis con punto típica de Matlab (.*, ...). Una vez creado (o leido) el objeto Numpy la sintaxis es transparente. p. ej. a = b * c, donde b y c son vectores.

Matplotlib [cheatsheet]

Objetos y funciones para graficar, tiene sintaxis similar a Matlab. Aunque similar, algunas cosas son más claras.

Objetos tipo hoja_cálculo y métodos anexos. Especialmente útil para datos tipo tabla y aun más interesante para Series Temporales. Tiene una sintaxis muy intuitiva y simplificada, especialmente interesante para leer datos. p. ej.

  • Lee fichero .csv, delimitado por tabs, toma como índice de tabla las dos primeras columnas (fecha y hora) y los valores '-' son tomados como 'NaN'
mad11 = pd.read_csv(path + 'madrid2011.txt', delimiter='\t', date_parser=parserdatetime, parse_dates=[[0, 1]], index_col=0, na_values='-')
  • Lee varios ficheros y los concatena (one-liner)
pd.concat([pd.read_csv(name) for name in glob.glob("*.csv")])
  • Toma la variable B y Bmj de mad11 (valores minutales) y devuelve la suma resampleada a frecuencia mensual.
eff_esp11_men = mad11.Bmj.resample('M', how='sum') / mad11.B.resample('M', how='sum')

PIL-Pillow

Manipulación de imágenes.

HERRAMIENTAS PARA DATOS

Jupyter

  1. https://jupyter.org/
  2. https://mybinder.org/v2/gh/bloomberg/bqplot/1da9ae2fffcbe317b6b27f6ed4f6d6c8db283452 - Ejemplo en acción
  3. https://github.com/losc-tutorial/quickview - Repositorio con Jupyter notebook sobre gravitational waves
  4. https://github.com/jupyter/jupyter/wiki - Repositorio general

Binder

  • Crea espacio de trabajo en un servidor remoto para ejectuar en vivo Jupyter notebooks, sin necesidad de instalación local.
  • Un repositorio tipo GitHub se puede convertir en un espacio de trabajo ejecutable.
  1. https://jupyter.org/binder - Información
  2. https://mybinder.org/ - Web app para lanzarlo

Google Colab

JupyterHub

  • Permite crear tu propia nube para servir notebooks, como Binder en privado.
  • Muy interesante para clase, evita que los estudiantes se tengan que instalar nada.
  • Se puede alojar en recursos propios de nube o físicos: The Littlest JupyterHub
  • https://jupyter.org/hub

JupyterLite

Dash

Servidor web para generar un dashboard: permite presentar datos interactivamente (by Plot.ly) https://dash-gallery.plotly.host/Portal/ (Galería)

Streamlit

Similar a Dash pero más sencillo aunque menos complejo. https://streamlit.io/

Shiny

Similar a Streamlit, de los creadores de RStudio https://shiny.posit.co/py/

PyScript

Framework que permite a los usuarios crear aplicaciones ricas de Python en el navegador utilizando la interfaz de HTML (como PHP)

APP HOSTING

Permite correr las apps en la web. Streamlit Sharing lo permite para sus propias apps

Heroku

PythonAnywhere

Trinket

GRAPHING (Matplotlib)

La librería más potente y que permite crear gráficas bien acabadas para publicaciones es MATPLOTLIB (MPL):

PANDAS de hecho implementa métodos .plot() que llaman a MPL para visualizaciones rápidas de DF/Series. Para pulir la gráfica hay que llamar a métodos directamente de MPL.

HERRAMIENTAS PARA CODIGO

Linters - Code syle/quality

PEP8

Desde consola spyder: !autopep8 -i file.py o !autopep8 -i .

Documentation

PEP 257

Testing

Desde consola spyder: !pytest .

Refactoring

No es realmente una herramienta si no una buena práctica. La idea es limpiar y mejorar la legibilidad del código, muchas veces reordenándolo.
https://realpython.com/python-refactoring/

GitHub

Repositorio distribuido para código y datos usando protocolo git. Utilizar herramienta GitHub Desktop para sincronizar repositorio local y remoto.

pre-commit

Antes de formalizar un commit pre-commit ejecuta automáticamente tareas tales como un linter para formatear el código.

.gitignore

Para evitar sincronizar ciertos archivos hay que rellenar el fichero .gitignore. Ver https://swcarpentry.github.io/git-novice-es/06-ignore/ Si ya se han sincronizado previamente, usar git rm -r --cached [file]

GitHub Actions

Permite automatizar eventos dentro de GH. Ver https://www.adictosaltrabajo.com/2020/10/28/introduccion-a-github-actions-sintaxis-basica/

Argparse

Librería estándar para crear CLI (Command Line Interface)

Archivo Config

Archivo externo adicional que incluye información de configuración a leer (parsear) por una librería.

PACKAGING (crear librerias)

Generar paquetes de Python, para instalar desde pip

Archivo README

Consejos https://dbader.org/blog/write-a-great-readme-for-your-github-project

API

About

Información variada útil sobre el lenguaje Python y librerías/herramientas

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published