-
Notifications
You must be signed in to change notification settings - Fork 0
dangulod/PyCourse
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
# PyCourse ## ¿Qué es un programa? Son instrucciones que especifican cómo realizar un cálculo. Pero existen instrucciones generales que son comunes a cualquier programa, no importa cuan compliado sea. Siempre, subdimos en subtareas que se resumen en: ```{r} Leer --> Procesar --> Escribir ``` ## ¿Qué es Python? Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis que favorezca un código legible. Es administrado por la [Python Software Foundation](https://www.python.org/psf/) Python es un lenguaje de programación multiparadigma. Esto significa que más que forzar a los programadores a adoptar un estilo particular de programación, permite varios estilos: **programación orientada a objetos**, **programación imperativa** y **programación funcional** ### Tipos de datos Podemos resumir los tipos de datos en esta tabla: Tipo | Clase | Notas | Ejemplo -- | -- | -- | -- **str** | Cadena | Inmutable | 'Cadena' unicode | Cadena | Versión Unicode de str | u'Cadena' **list** | **Secuencia** | **Mutable, puede contener objetos de diversos tipos** | **[4.0, 'Cadena', True]** tuple | Secuencia | Inmutable, puede contener objetos de diversos tipos | (4.0, 'Cadena', True) set | Conjunto | Mutable, sin orden, no contiene duplicados | set([4.0, 'Cadena', True]) frozenset | Conjunto | Inmutable, sin orden, no contiene duplicados | frozenset([4.0, 'Cadena', True]) dict | Mapping | Grupo de pares clave:valor | {'key1': 1.0, 'key2': False} int | Número entero | Precisión fija, convertido en long en caso de overflow | 42 **float** | **Número decimal** | **Coma flotante de doble precisión** | **3.1415927** complex | Número complejo | Parte real y parte imaginaria j | (4.5 + 3j) **bool** | **Booleano** | **Valor booleano verdadero o falso** | **True o False** *Mutable*: si su contenido (o dicho valor) puede cambiarse en tiempo de ejecución *Inmutable*: si su contenido (o dicho valor) no puede cambiarse en tiempo de ejecución ### Librerias Instalar librerias ```{python} python -m pip install bt ``` Las librerias se importan aparte, cargaremos aquellas que vayamos a usar al principio del script, se pueden importar de varias formas: Cargar una libreria ```{python} import datetime as dt ``` Cargar todas las funciones de una libreria ```{python} from datetime import * ``` Cargar un modulo de una libreria ```{python} from datetime import date ``` ## Primeros pasos en Python Nuestra primera función *'Hello World!'*: ```{python} print('Hello World') ``` Como definimos una función con nuestra sentencia, ```{python} def hw(): print('Hello World!') ``` Y la llamamos: ```{python} hw() ``` Existen dos formas de crear una función en Python: ```{python} exponencial_1 = lambda x, y: x ** y exponencial_1(2, 3) def exponencial_2(x, y): return(x ** y) exponencial_2(2, 3) ``` Las funciones lambda, son funciones que no tienen nombre y que serán de utilidad más adelante El bucle **for** recorre un objeto iterable, como una lista, una tupla o un generador, y por cada elemento del iterable ejecuta el bloque de código interno ```{python} x = 0 for i in range(0, 10): if (i == 5): continue else: x += i x == 9 + 8 + 7 + 6 + 4 + 3 + 2 + 1 + 0 ``` El bucle **while** evalúa una condición y, si es verdadera, ejecuta el bloque de código interno. Continúa evaluando y ejecutando mientras la condición sea verdadera ```{python} i = 0 while i < 10: print(i) i += 1 ``` ### Introducción a las clases En informática, una clase es una plantilla para la **creación de objetos de datos según un modelo predefinido** Permiten abstraer los datos y sus operaciones asociadas al modo de una caja negra Las clases se componen de elementos, llamados genéricamente «miembros», de varios tipos: * **atributos**: almacenan el estado de la clase por medio de variables, estructuras de datos e incluso otras clases. * **métodos**: subrutinas de manipulación de dichos datos. El siguiente ejemplo muestra como crear una clase ```{python} class Person: ''' La clase persona es un objeto, que tiene 2 atributos (nombre, edad). Hemos encapsulado el codigo en la clase persona. Toda clase tiene un constructor que crea la clase ''' # Constructor ----------------------------------------------------- def __init__(self, nombre, edad): self.nombre = nombre self.edad = edad # Metodos (Funciones) --------------------------------------------- # Devuelve el atributo nombre def get_nombre(self): return(self.nombre) # Devuelve el atributo edad def get_edad(self): return(self.edad) # Modifica el atributo edad def set_edad(self, edad): self.edad = edad # Modifica el atributo nombre def set_nombre(self, nombre): self.nombre = nombre # Pasan x años def year(self, ano): self.set_edad(self.get_edad() + ano) ``` Ahora podemos usar la clase, para ello creamos un objeto de la clase *Person* a traves del **constructor** ```{python} x = Person("Adam", 30) dir(x) x.get_nombre() x.get_edad() x.year(10) x.get_edad() ``` [Ejemplo 1](https://github.com/jeffrey-liang/quantitative/blob/609d2ed816d1c3e23592a1805a29f1634097277e/quantitative/core/backtest.py) [Ejemplo 2](https://github.com/dangulod/DECT/blob/master/samples/scenario.py) ## Numpy **Enlaces de interés:** [Documentacion](https://docs.scipy.org/doc/numpy/reference/routines.html) [Quick Start](https://docs.scipy.org/doc/numpy-dev/user/quickstart.html) [NumPy for Matlab users](https://docs.scipy.org/doc/numpy-dev/user/numpy-for-matlab-users.html) ```{python} import numpy as np ``` Es la **libreria por escelencia de Python** de computacion, contiene entre otras cosas: * Arrays * Funciones para manipular arrays * Algebra lineal, generación de numeros aleatorios... ### Arrays El **el objeto principal de numpy** es el **array**. Es una tabla de elementos del mismo tipo, indexados por una tupla de enteros. Las dimensiones en en Numpy se llaman *axes* y el número de axes se llama *rank* Por ejemplo: 1. Un array de rank 1 ```{python} [1, 2, 3] ``` 2. Un array de rank 2. El primer axes tiene una longitud de 3 y el segundo tambien ```{python} [[1., 0., 3.], [5., 7., 1.]] ``` 3. Un array de rank 2. El primer axes tiene una longitud de 3, el segundo tambien, pero el tercer axes tiene una longitud de dos ```{python} [[1., 0., 3.], [5., 7., 1.], [7., 9.]] ``` #### Creación de arrays Existen muchas maneras de crear arrays (Revisar documentación). No obstante un error habitual es el siguiente: ```{python} a = np.array(1,2,3,4) # WRONG a = np.array([1,2,3,4]) # RIGHT ``` Se destacan: ```{python} np.arange( 10, 30, 5 ) np.arange( 0, 2, 0.3 ) np.linspace( 0, 2, 9 ) ``` #### Operaciones básicas Las operaciones básicas sobre un array se aplican **elemento a elemento** ```{python} a = np.array( [20,30,40,50] ) b = np.arange( 4 ) c = a-b ``` > array([20, 29, 38, 47]) #### Funciones universales Numpy provee funciones matemáticas, tales como *sin*, *cos*, *sqrt*, etc.. ```{python} a = np.array( [20,30,40,50] ) np.sqrt(a) np.sin(b) ``` #### Generación de números aleatorios [Documentacion](https://docs.scipy.org/doc/numpy-1.13.0/reference/routines.random.html) ## Pandas [Documentacion](http://pandas.pydata.org/pandas-docs/stable/) [Pandas en 10 minutos](http://pandas.pydata.org/pandas-docs/stable/10min.html) ```{python} import pandas as pd ``` Pandas provee a Python de estructuras rapidas y flexibles, diseñadas para trabajar con datos relacionales facil e intuitivamente a través del **DataFrame** El **DataFrame** es un objeto bidimensional, mutable, con datos hetereogeneos, estructurados y con etiquetas (filas y columnas). Puede ser visto como un contenedor de **series** [pandas.Series](http://pandas.pydata.org/pandas-docs/stable/api.html#series) [**pandas.DataFrame**](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html#pandas.DataFrame) ## Scipy [Documentacion](https://docs.scipy.org/doc/scipy/reference/)
About
No description, website, or topics provided.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published