# Lo primero que ejecutarás será 'Hola Jupyter'
print('Hola a Todos')

"""
Explanation: Bienvenid@s a Jupyter

Los cuadernos de Jupyter son una herramienta interactiva que te permite preparar documentos con código ejecutable, ecuaciones, texto, imágenes, videos, entre otros, que te ayuda a enriquecer o explicar la lógica detallada de tu código. 
Los cuadernos de jupyter son comúnmente usados en: ciencia, análisis de datos y educación. Eso no significa que son de uso exclusivo para esos casos, en mi experiencia los cuadernos me han ayudado a organizar mis pensamientos y visualizar mejor los datos que analizo.
Tal vez te preguntes ¿qué puede hacer Jupyter por mí? Bueno, aquí hay unas cuántas ventajas de usar Jupyter:


Trabajar en tu lenguaje preferido.

Jupyter tiene soporte para más de 40 lenguajes de programación, incluyendo los que son populares para el análisis de datos como Python (obviamente), R, Julia y Scala. Así que si por algún extraño motivo decides que no te gustó python (lo dudo :P) puedes seguir disfrutando las libretas de jupyter.



Compartir tus libretas con quien quieras.

En donde quieras y como quieras. Esto significa que puedes escribir tareas y reportes en tus libretas y mandarlos a alguien específico o subirlos a tu repositorio de Github y que todo el mundo sepa lo que hiciste. Esto es como reproducibilidad al máximo...



Convierte tus libretas a archivos de diferentas formatos.


Puedes convertir tus libretas a documentos estáticos como HTML, LaTeX, PDF, Markdown, reStructuredText,etc. La documentación está en este vínculo y la forma fácil de hacerlo es:


Click en "File"


Pon el cursos sobre "Download as"


Selecciona la opción que prefieras.






Widgets interactivos

Puedes crear salidas con videos, barras para cambiar valores... Exploraremos esto más adelante.



Ahora que ya sabes lo que Jupyter es, vamos a usarlo!!
Formato y ejecución de celdas
los cuadernos de Jupyter se manejan con celdas y es importante saber que cada celda puede ser de distintos tipos, unas van a ser de código (ya sea python, r, julia o el kernel deseado) y otras de markdown.
Lo primero que vas a hacer es dar click en la celda anterior y en esta para que notes que ambas son celdas de markdown.
Puedes notar que hay formas para que en el documento aparezcan enlaces, listas, palabras resaltadas en negritas, encabezados. Aunado a esto puedes insertar fórmulas en LaTex, código en HTML, imágenes, tablas y código no ejecutable pero resaltado con la sintaxis apropiada.
Ejemplos con estilos usados normalmente
Encabezados
Si escribes esto:
# Encabezado 1
## Encabezado 2
### Encabezado 3
... 
###### Encabezado 6

Obtienes esto:
Encabezado 1
Encabezado 2
Encabezado 3
...
Encabezado 6
Modificaciones en las letras
Puedes hacer que las letras se vean en negritas, cursivas o tachadas de la siguiente forma:
**Negritas** o __Negritas__
*Cursivas* o _Cursivas_
~~Tachado~~

Negrita, Negrita,
Cursiva, Cursiva,
~~Tachada~~
Listas
Puedes listar objetos ya sea con puntos o con números de la siguiente forma
- Objeto 1
    - Sub objeto
    - Otro sub objeto
- Objeto 2

1. Objeto 1
2. Objeto 2


Objeto 1
sub objeto
otro sub objeto



Objeto 2


Objeto

Objeto

Enlaces a páginas
Para insertar enlaces a páginas relevantes puedes hacerlo directamente copiando y pegando el url o puedes hacer que una palabra esté ligada a un vínculo de a siguiente forma
[palabra](dirección)

Cheatsheet de Markdown. En esta página puedes encontrar la forma de hacer muchas cosas más
Ejercicio 1
Crea una tabla que tenga como encabezados:

Miembro
Edad
Género

De todos los miembros de tu familia
Las celdas por default van a estar en modo de código pero puedes cambiarla de dos formas, una en la barra que está llena de íconos hay una parte que dice Code, esta nada más tienes que hacer un click y cambiarlo a Markdown. La seguna es usando el teclado y lo que debes de hacer es seleccionar tu celda, presionar la tecla Esc, presionar la letra m y presionar Enter para empezar a escribir...
Una vez que terminaste de escribir, puedes ejecutar cada celda ya sea presionando Shift + Enter o con el boton de "play" en la barra de herramientas
Ya que vimos la parte de Markdown veamos la parte de código.
Cada vez que creas una libreta nueva tu puedes decir en qué lenguaje quieres tu kernel, en nuestro caso sólo veremos python 3 porque no hemos instalado ningún otro kernel para jupyter pero si te interesa puedes ver cómo hacerlo aquí Así que el código que veremos a continuación es en python.
End of explanation
"""


sum?

max?

round?

mean?

"""
Explanation: Cada celda la puedes usar para escribir el código que tu quieras y si de repente se te olvida alguna función o tienes duda de si el nombre es correcto IPython es muy amable en ese sentido. 
Para saber acerca de una función, es decir cuál es su salida o los parámetros que necesita puedes usar el signo de interrogación al final del nombre de la función.
Ejercicio 2
En la siguiente celda busca las siguientes funciones: sum, max, round, mean. No olvides ejecutar la celda después de haber escrito las funciones.
End of explanation
"""


variable = 50
saludo = 'Hola'

"""
Explanation: Como te pudiste dar cuenta, cuando no encuentra la función te da un error...
En IPython, y por lo tanto en Jupyter, hay una utilidad de completar con Tab. Esto quiere decir que si tu empiezas a escribir el nombre de una variable, función o atributo, no tienes que escribirlo todo, puedes empezar con unas cuantas letras y automáticamente (si es lo único que empieza de esa forma) lo va a completar por ti. Todos los flojos y/o olvidadizos amamos esta herramienta. En caso de que haya varias opciones no se va a completar, pero si lo vuelves a oprimir te va a mostrar en la celda todas las opciones que tienes...
End of explanation
"""


vars?

"""
Explanation: Ejercicio 3
Empieza a escribir las primeras tres letras de cada elemento de la celda anterior y presiona tab para ver si se puede autocompletar
End of explanation
"""


%magic

"""
Explanation: También hay funciones mágicas que nos permitirán hacer diversas tareas como mostrar las gráficas que se produzcan en el código dentro de una celda, medir el tiempo de ejecución del código y cambiar del directorio de trabajo, entre otras.
para ver qué funciones mágicas hay en Jupyter sólo tienes que escribir
python
%magic
Todas las funciones "mágicas" empiezan con el signo de porcentaje %
End of explanation
"""


# Importa matplotlib (paquete para graficar) y numpy (paquete para arreglos).
# Fíjate en el la función mágica para que aparezca nuestra gráfica en la celda.
%matplotlib inline
import matplotlib.pyplot as plt 
import numpy as np

# Crea un arreglo de 30 valores para x que va de 0 a 5. 
x = np.linspace(0, 5, 30)
y = np.sin(x)

# grafica y versus x
fig, ax = plt.subplots(nrows=1, ncols=1)
ax.plot(x, y, color='red')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_title('A simple graph of $y=x^2$')

"""
Explanation: Gráficas
Ahora veremos unos ejemplos de gráficas y cómo hacerlas interactivas. Estos ejemplos fueron tomados de la libreta para demostración de nature
End of explanation
"""


# Importa matplotlib y numpy 
# con la misma "magia".
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

# Importa la función interactiva de IPython usada
# para construir los widgets interactivos
from IPython.html.widgets import interact

def plot_sine(frequency=4.0, grid_points=12, plot_original=True):
    """
    Grafica muestras discretas de una curva sinoidal en ``[0, 1]``.
    """
    x = np.linspace(0, 1, grid_points + 2)
    y = np.sin(2 * frequency * np.pi * x)

    xf = np.linspace(0, 1, 1000)
    yf = np.sin(2 * frequency * np.pi * xf)

    fig, ax = plt.subplots(figsize=(8, 6))
    ax.set_xlabel('x')
    ax.set_ylabel('signal')
    ax.set_title('Aliasing in discretely sampled periodic signal')

    if plot_original:
        ax.plot(xf, yf, color='red', linestyle='solid', linewidth=2)

    ax.plot(x,  y,  marker='o', linewidth=2)

# la función interactiva construye automáticamente una interfase de usuario para explorar
# la gráfica de la función de seno.
interact(plot_sine, frequency=(1.0, 22.0, 0.5), grid_points=(10, 16, 1), plot_original=True)

"""
Explanation: La gráfica que estás viendo sigue la siguiente ecuación $$y=x^2$$
Ejercicio 4
Edita el código de arriba y vuélvelo a correr pero ahora intenta reemplazar la expresión: 
y = x**2 
con:
y=np.sin(x)
Gráficas interactivas
End of explanation
"""


