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

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


In [5]:
!pwd


/Users/beangoben/Projects/HistoriaDatos_Higgs/Dia1

In [ ]:
print("hola bolivia")

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 [ ]:
un_str = "Cuanto es 2 x 4 ?"
resultado= 2 * 4

y usarlo en otra celda


In [ ]:
print(un_str)
print(resultado)
print("Magia!")

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(10)

Resetear

Puedes resetear usando el boton .

Python Basico

Lists and Arrays (Listas y arreglos)


In [ ]:
a_list = [ "vaca", "taco", "gato"] #list
print(a_list)

podemos agregar elementos


In [ ]:
a_list.append("pollo") # now part of the family
a_list

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


In [1]:
import numpy as np

# lista de numeros del 0 a 100, en incrementos de 1
numeros = np.arange(0,100,1) 
print(numeros)


[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99]

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


In [2]:
array_vacio = np.zeros((5,1))
array_vacio


Out[2]:
array([[ 0.],
       [ 0.],
       [ 0.],
       [ 0.],
       [ 0.]])

podemos cambiar valores usando [ indice ]:


In [3]:
array_vacio[2] = 8 # manipular el tercer elemento
array_vacio


Out[3]:
array([[ 0.],
       [ 0.],
       [ 8.],
       [ 0.],
       [ 0.]])

y que tal arreglos de numeros aleatorios?


In [4]:
integers = np.random.randint(low=1,high=10, size=100000)
integers


Out[4]:
array([6, 5, 2, ..., 6, 9, 3])

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 [5]:
print("Sortead :",np.sort(integers))
print("Max:",np.max(integers),", Min:",np.min(integers))
print("Max at:",np.argmax(integers),", Min at:",np.argmin(integers))
print("Mean:",np.mean(integers),", Std:",np.std(integers))


Sortead : [1 1 1 ..., 9 9 9]
Max: 9 , Min: 1
Max at: 34 , Min at: 12
Mean: 5.00228 , Std: 2.57757537263

For loops (Ciclos For)

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


In [ ]:
for i in range(2,10,2):
    print(i)

print("Fin!")

Doble!


In [ ]:
for i in a_list:
    for j in a_list:
        print i, j
print("Fin!")

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


In [ ]:
for index,item in enumerate(a_list):
    print(index,item)

print("Done!")

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 [ ]:
import random

random.sample(a_list,  2) # select 1

In [ ]:
random.sample(numeros,  10)

Que tal funciones?


In [ ]:
# La definimos..

def reordenar(lista):
    val=random.sample(lista,1)
    return val

# la llamamos 
print(reordenar(numeros))
print(reordenar(numeros))

Actividad 1 : Ejercicios de Programacion

Meta: Obtener confianza con Python.

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


In [ ]:

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


In [ ]:

1.c) Encapsula la funcion pasada en una funcion


In [ ]:

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

Para graficar histogramas usa plt.hist().


In [ ]:

Extra: Sumatoria de ondas


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