1 Introduccion a IPython notebooks/ Jupyter

Que es exactamente?

Una libreta IPython/Jupyter es un ambiente interactivo para escribir y correr codigo de python. Es un historial completo y auto-contenido de un calculo y puede ser convertido a otros formatos para compartir con otros.

En particular es batante popular en la comunidad cientifica porque es una herramienta interactiva, iterativa para analisis de datos, visualizacion y contar historias.

Puedes combinar:

  • Codigo en vivo
  • Widgets Interactivos
  • Graficas
  • Texto Narrrativo
  • Ecuaciones
  • Imagenes
  • Video

Un poco mas...

El projecto Ipython reciente se expandio en la versio 3.0 para incluir otros kerneles de computo como R, Julia, C++ y Matlab. Para mas informacion/ideas checa los links abajo de este Ipython Notebook.

Vamos a empezar!

Corriendo codigo

Notas: Presionar shift + enter

Corre tu codido usando Shift-Enter o presionando el boton en la barra de herramientas arriba.


In [ ]:
print(  3*3 )

Computo Iterativo

El "kernel" mantiene un estado de todos los calculos del la libreta.

Por ejemplo puedes guardar el resultado de un calculo en una variable


In [ ]:
usuario = 32
x = 1000

y usarlo en otra celda


In [ ]:
usuario + x

Parar codigo

El codigo se corre en un proceso separado llamado el"kernel:". Este puede ser interumpido o reseteado. Trata de correr el siguiente codigo y dale al boton .


In [ ]:
import time
time.sleep(1000)

Resetear

Puedes resetear usando el boton .

Python Basico

Lists and Arrays (Listas y arreglos)


In [ ]:
lista = ['perro' ,'delfin','perezoso','leon','gato']
lista2 = [3,8,10,3]
print(lista)

podemos agregar elementos


In [ ]:
lista[1]

o podemos usar el modulo Numpy para arreglos numericos (Protip: quieres saber mas? dale click a la imagen)


In [ ]:
import numpy as np

array_1 = np.array([3,4,5]) 
array_2 = np.array([4,8,7]) 
array_1 + array_2

y que tal arreglos vacios? Aqui creamos un vector de 5 x 1


In [ ]:
array_1 = np.zeros(17304)
print(array_1)

podemos cambiar valores usando [ indice ]:


In [ ]:
array_1[1100]

y que tal arreglos de numeros aleatorios?


In [ ]:

Utilidades de Array

Tenemos muchas utilidades para trabajar con arreglos...

  • Sortear valores: entoces usamos np.sort(array)
  • Encontrar Maximo, Minimo: entoces usamos np.min(array), np.max(array)
  • Encontrar el indices del Maximo o Minimo: entoces usamos np.argmin(array), np.argmax(array)
  • Calcular medias o desviaciones estandar : usamos np.mean(array),np.std(array)

In [ ]:
arreglo = np.random.randint(1,10,500000)
np.mean(arreglo)

In [ ]:


In [ ]:

For loops (Ciclos For)

Un for loop va sobre cada elemento del ciclo, Ojo! nota el espaciamiento/indentacion justo despues del for!


In [ ]:
lista = ['perro' ,'delfin','perezoso','leon','gato']

for domesticos in lista:
    print(domesticos)
    print("Otro animal:")

Doble!


In [ ]:
lista = ['perro' ,'delfin','perezoso','leon','gato']

for domesticos in lista:
    for animal in lista:
        print(domesticos,animal)
        print(" nada")

un loop pero enumerado, te rergresa un indice y un elemento


In [ ]:
arreglo = np.random.randint(1,10,5000)

for indice,animal in enumerate(arreglo):
    print(indice,animal)
print("fin")

Y si quieres un elemento aleatorio de la lista?

El modulo random al rescate, corre varias veces la celda y checa si son aleatorios


In [ ]:


In [ ]:

Que tal funciones?


In [ ]:
def tienda(animalito):
    print("barato baratoooo")
    print(animalito)
    return

In [ ]:
for animal in lista:
    tienda(animal)

Actividad 1 : Ejercicios de Programacion

Meta: Obtener confianza con Python.

1.a) Usa un ciclo-for e imprime tus platillos bolivianos favoritos


In [ ]:
lista = ['mAJAdITO','picopas de pollo','quemacho','trancapechos']
for i in lista:
    print(i)

1.b) Crea un arreglo de numeros aleatorios de tamano $n$


In [ ]:
n =20
arreglo = np.random.randint(1,10,n)
print(arreglo)

1.c) Encapsula la funcion pasada en una funcion


In [ ]:
def mifuncion(n):
    arreglo = np.random.randint(1,10,n)
    return arreglo

mifuncion(66)

1.d) Grafica un histograma de numeros aleatorios con $n=10,50,100,1k,10k$

Para graficar histogramas usa plt.hist().


In [4]:
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

a = np.random.randint(1,10,10)
plt.hist(a)


Out[4]:
(array([ 2.,  0.,  0.,  2.,  0.,  1.,  0.,  0.,  4.,  1.]),
 array([ 3. ,  3.6,  4.2,  4.8,  5.4,  6. ,  6.6,  7.2,  7.8,  8.4,  9. ]),
 <a list of 10 Patch objects>)

Extra: Sumatoria de ondas

Aproximaremos la siguiente onda cuadrada: $$ f(x) = \sum^{\infty}_{n=1} \frac{ sin(2 \pi (2n-1) x)}{2n -1} $$ via la formula:

$$ f(x) = \sum^{N}_{n=1} \frac{ sin(2 \pi (2n-1) x)}{2n -1} $$

Pasos:

  1. Crear una onda sinosoidal y graficarla $sin(2 \pi x)$
  2. Crear una onda sumada de cuatro ondas sinosoidal (n=1,2,3,4) y graficarla.
  3. Lo mismo pero utilizando un ciclo para un numero arbitraio $n$
  4. Crear una funcion que para un numero $n$ crea una aproximacion a la onda cuadrada.
  5. Graficar para $n=4,8,12,16,50$

In [ ]:


In [ ]:


In [ ]:

Extra: Mas cosas para darle sabor

Celdas de Texto: Latex & Markdown

Celdas se crean por default como celdas de codigo, pero se pueden cambiar. Cell are by default created as code cells, can be but can be easily changed to text cells by cliking on the toolbar.

In text cells you can embed narrative text using Markdown, HTML code and LaTeX equations with inline dollar signs \$ *insert equation* \$ and new line as \$\$ insert equation \$\$.

For example: $$H\psi = E\psi$$

The code for this cell is:

### Text Cells: Latex & Markdown
Cell are by default created as code cells, can be but can be easily changed to text cells by cliking on the toolbar.
    ![text cell](TextCell.png)

In text cells you can embed narrative text using [Markdown](https://guides.github.com/features/mastering-markdown/), HTML code and LaTeX equations with inline dollar signs \$ *insert equation* \$ and new line as \$\$ *insert equation* \$\$.

For example: $$H\psi = E\psi$$

Images

We can work with images (JPEG, PNG) and SVG via the Image and SVG class.


In [ ]:
from IPython.display import Image
Image(filename='files/large-hadron-collider.jpg')

Videos?


In [ ]:
from IPython.display import YouTubeVideo
#https://www.youtube.com/watch?v=_6uKZWnJLCM
YouTubeVideo('_6uKZWnJLCM')

External Websites, HTML?


In [ ]:
from IPython.display import HTML
HTML('<iframe src=http://ipython.org/ width=700 height=350></iframe>')

Extra: Por si quieres leer mas