<jupyter_start><jupyter_text>![banner](images/banner.png) Programar y Reprogramar Recursos para Docentes Fecha: 29 Octubre 2021, 15:00 a 17:00 hs.  <NAME>, <NAME>, <NAME>, <NAME>  Experiencia Práctica* Ejemplos prácticas de uso    * ¿Qué puedo hacer en forma interactiva con Jupyter y matemática?    * ¿Qué valores puedo cambiar en los gráficos para visualizar diferentes situaciones?    * ¿Cómo puedo agrupar los datos para visualizarlos mejor?* ¿Cómo puedo usar el entorno Jupyter?    * local    * remoto con servidor propio    * remoto en la nube: Binder - Colab* ¿Qué son los repositorios públicos colaborativos?         Áreas de aplicación del entorno de Jupyter Notebook* una de las más nombrada es matemática.* utilización en todas las areas de estudio* utilización de la herramienta en el campo de la industria  ¿En mi gráfica qué significa cuando cambio...?* Tipo de gráfico* La cantidad de números* El signo de la función* El exponente de la función ¿Para poder graficar en Python qué **librería** importamos?* librería: archivo de código que facilitan algunas funcionalidades* ¿cómo las usamos en nuestro código? **import librería**<jupyter_code>from matplotlib import pyplot as dibujo<jupyter_output><empty_output><jupyter_text>* La lirería es: [**matplotlib**](https://matplotlib.org/) (conjunto de módulos)* el módulo dentro de la librería es: **plot*** Renombro el módulo para utilizarlo como **dibujo** Supongamos que queremos comparar la temperatura media la Argentina entre dos años diferentes.Tomemos los datos de [temperatura media](https://climateknowledgeportal.worldbank.org/download-data) de los años 1991 y 2020.<jupyter_code>temp_1991 = [20.5,20.0,18.9,14.8,11.9,8.2,7.3,8.9,12.4,13.8,17.3,18.6]
temp_2020 = [21.5, 20.1, 20.0, 14.9,11.0,8.3,6.4,9.7,12.5,15.5,19.0,20.3]<jupyter_output><empty_output><jupyter_text>Los datos los guardamos en una **lista de números**:* tipos de datos en Python y su denominación en matemática* tipos de datos numéricos:    * int    * float    * complex: a=2+3j<jupyter_code>a = 2+3j
a<jupyter_output><empty_output><jupyter_text>Convierto entre tipos de datos<jupyter_code>a = 6
b = float(a)
a
b<jupyter_output><empty_output><jupyter_text>Volvamos a los valores de las temperaturas.Dibujemos los datos del año 1991<jupyter_code>dibujo.title("Temperaturas 1991")
dibujo.plot(temp_1991)

dibujo.xlabel("Mes")
dibujo.ylabel("Valor")

dibujo.show()
# ¿qué hace cada instrucción?<jupyter_output><empty_output><jupyter_text>Y ahora ¿cómo comparamos entre ambos años?<jupyter_code>dibujo.plot(temp_1991, linewidth=3, label='1991')
dibujo.plot(temp_2020, linestyle='dashed' , linewidth=3, label='2020')

dibujo.ylabel('Temperaturas')
dibujo.title('Comparativa de 1991 y 2020')
#dibujo.xticks(meses)
dibujo.xlabel('Mes')
dibujo.legend()
dibujo.grid(True)
dibujo.show()<jupyter_output><empty_output><jupyter_text>Pongamos los nombres de los meses en lugar de los números<jupyter_code>meses = ['Ene',  'Feb',  'Mar', 
         'Abr', 'May', 'Jun', 
         'Jul', 'Ago', 'Sep', 
         'Oct', 'Nov', 'Dic']<jupyter_output><empty_output><jupyter_text>* ¿qué tipo de datos es meses?* ¿qué tipo de datos contiene?<jupyter_code>dibujo.plot(meses, temp_1991, linewidth=3, label='1991')
dibujo.plot(meses, temp_2020, linestyle='dashed' , linewidth=3, label='2020')

dibujo.ylabel('Temperaturas')
dibujo.title('Comparativa de 1991 y 2020')
#dibujo.xticks(meses)
dibujo.xlabel('Mes')
dibujo.legend()
dibujo.grid(True)
dibujo.show()<jupyter_output><empty_output><jupyter_text>Notar:   * ¿cómo se agregaron las etiquetas?   * los tipos de [líneas](https://matplotlib.org/stable/gallery/lines_bars_and_markers/linestyles.htmlsphx-glr-gallery-lines-bars-and-markers-linestyles-py) para cada año    ¿Y si queremos graficar los datos con barras?<jupyter_code>import numpy as np<jupyter_output><empty_output><jupyter_text>* ¿Cuál es la librería?* ¿Con qué nombre lo voy a utilizar en mi código?<jupyter_code>ancho = 0.35
# cambiar ancho
x = np.arange(len(temp_1991))
fig, ax = dibujo.subplots()
rects1 = ax.bar(x - ancho/2, temp_1991, ancho, color = 'b',label='1991')
rects2 = ax.bar(x + ancho/2, temp_2020, ancho, color = 'g',label='2020')

ax.set_ylabel('Temperaturas')
ax.set_title('Comparativa')
ax.set_xticks(x)
ax.set_xticklabels(meses)
ax.legend()

#fig.tight_layout()

dibujo.show()<jupyter_output><empty_output><jupyter_text>Ejemplos de gráficos de barras:* [tutorial](https://www.tutorialspoint.com/matplotlib/matplotlib_bar_plot.htm)* [documentación oficial](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.bar.html)  Desafío 1:* Realizar un gráfico que compare las temperaturas de Argentina de tres años diferentes.Sitio con las temperaturas:  [temperatura media](https://climateknowledgeportal.worldbank.org/download-data)<jupyter_code>!ls data

temp_2000 = [21.2,19.4,17.0,14.5,10.1,8.1,5.6,8.9,10.8,14.9,16.3,19.6]<jupyter_output><empty_output><jupyter_text>Variación en la cantidad de números* La gráfica de una función como una secuencia de rectas<jupyter_code>x = np.linspace(-2, 2, 50)
# como puedo ver que contiene x?
y = x**2

dibujo.plot(x,y, 'ro')
#dibujo.plot(x,y)
dibujo.show()<jupyter_output><empty_output><jupyter_text>* Cambio 10 por 50, ¿qué se modifica en la gráfica?* Y si utilizamos la configuración 'ro'¿ qué cambia?* ¿qué otras [opciones](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html) hay para las líneas? Interactuamos en forma dinámica con algunos valores de nuestras funciones<jupyter_code>import ipywidgets as widgets
from ipywidgets import HBox, VBox
from IPython.display import display
#dominio
x = np.linspace(-50, 50)


@widgets.interact(n=(0, 9))
def p(n):
    y =  x**n #codominio con n variando entre 0 y 9
    dibujo.plot(x, y)
    dibujo.grid(True)
    dibujo.show()<jupyter_output><empty_output><jupyter_text>Desplazamientos verticales:<jupyter_code>x = np.linspace(-50, 50)


@widgets.interact(n=(0, 1000,250))
def p(n):
    y = n+x**2
    dibujo.plot(x, y)
    dibujo.grid(True)
    dibujo.show()<jupyter_output><empty_output><jupyter_text>Desplazamientos horizontales:<jupyter_code>@widgets.interact(n=(-20, 20))
def p(n):
    x = np.linspace(n-50, n+50)
    y = (x-n)**2
    dibujo.plot(x, y)
    dibujo.grid(True)
    dibujo.show()

x_2 = np.linspace(-5, 5)
x_1_4 = np.linspace(-10, 10)
x_4 = np.linspace(-2.5, 2.5)
dibujo.figure(figsize=(10,8))
dibujo.plot(x_2, x_2**2, linewidth=3, label='x^3')
dibujo.plot(x_1_4, 1/4*x_1_4**2, linestyle='dashed' , linewidth=3, label='1/4*x^2')
dibujo.plot(x_4, 4*x_4**2, linestyle='dotted' , linewidth=3, label='4*x^2')
dibujo.legend()
dibujo.grid(True)
dibujo.show()
@widgets.interact(grado=(0, 9), N_puntos=(5,35))
def mi_plot(grado=3, N_puntos=5):    
    x = np.linspace(-10, 10, N_puntos)
    y = x**grado
    dibujo.figure(figsize=(12,8))
    dibujo.plot(x, y, 'ro-')
    dibujo.grid(True)
    dibujo.show()<jupyter_output><empty_output><jupyter_text>Estudiantes, nuevas inscriptas y egresadas mujeres de carrerasde posgrado, según rama de estudios: [año 2018](https://www.argentina.gob.ar/sites/default/files/mujeres_en_el_sistema_universitario_argentino_-_estadisticas_2018-2019.pdf)<jupyter_code>est_mujeres = [10512,4774,16232,22904,36700]
eg_mujeres = [956,590,3362,1973,3360]
fig1, ax = plt.subplots()
ax.set_title('Estudiantes 2018 según área de estudio')
ax.axis('equal')
etiquetas = ['Ciencias Aplicadas', 'Ciencias Básicas ', 'Ciencias de la Salud', 'Ciencias Humanas', 'Ciencias Sociales']
ax.pie(est_mujeres, labels = etiquetas,autopct='%1.2f%%')
dibujo.show()<jupyter_output><empty_output><jupyter_text>Matplotlib gráfico de torta:* [Ejemplos tutoriales](https://www.tutorialspoint.com/matplotlib/matplotlib_pie_chart.htm)* [Documentación](https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_features.htmlsphx-glr-gallery-pie-and-polar-charts-pie-features-py)  ¿Cómo uso Jupyter Notebook como entorno de trabajo para mis clases?* Alternativas: local / VPS / binder / google colab* Almacenando en línea: github + otros* Módulos de contenido  ¿Cómo puedo usar el entorno Jupyter?* En mi computadora, de forma local.* En un servidor de la escuela.* Utilizando servicios en la nube:    * [Binder](https://mybinder.org/)    * Google colab  Uso del entorno en forma local   * Instalar la herramienta **pip** en nuestra computadora local. Guía en español de [pip](https://tecnonucleous.com/2018/01/28/como-instalar-pip-para-python-en-windows-mac-y-linux/).   * Opcional **recomendada**: Instalar [virtualenv](https://virtualenv.pypa.io/en/latest/). Guía en [español](https://rukbottoland.com/blog/tutorial-de-python-virtualenv/)   * Instalar [Jupyter](https://jupyter.org/install): ```console$pip install jupyter   ```   * [Guía de uso de Jupyter](https://nbviewer.org/github/ipython-books/minibook-2nd-code/blob/master/chapter1/13-nbui.ipynb)   * [Comandos avanzados de Jupyter](https://nbviewer.org/github/ipython-books/minibook-2nd-code/blob/master/chapter1/15-ten.ipynb)    * Ejecutar Jupyter* ¿En qué directorio? -> en el directorio donde tenemos nuestro proyecto* ¿Dónde? -> en una terminal o cmd```console       $jupyter notebook```                ¿Qué puedo hacer en forma local?* Ejecución en el navegador:    * archivos locales en el directorio donde se ejecutó    * formato archivos:  extensión 'ipynb'* Cambiar nombre* Crear subcarpetas  En un servidor remoto* Instalar una versión de Jupyter que permite usar en forma remota: [JupyterHub](https://jupyter.org/hub)    * administración de usuarios    * espacio de trabajo propio para cada usuario    * control de los recursos    * instalación según la cantidad de usuarios    * versión para una instalación pequeña: [The Littlest JupyterHub](https://tljh.jupyter.org/en/latest/index.html)    * [video](https://www.youtube.com/watch?v=P8w0OtG2Rdw&ab_channel=YamilJaskolowski) tutorial de instalación.    * Ejemplo: servidor Universidad de Salta* Opción para utilizar almacenamiento remoto:     * VPS: Servidor Privado Virtual    * pago por uso    * máquina virtual remoto  Herramientas remotas en la nube* [Binder](https://mybinder.org/)    * ejecución de cuadernos Jupyter en la nube    * conexión con archvios de Jupyter de repositorios github     * [Colab](https://colab.research.google.com/)    * creación de cuadernos Jupyter    * incluye algunas librerías, las más usadas de Python para este tipo de programas    * ejemplo de uso de Jupyter    * cargar archivos propios    * conexión con archivos en repositorios de github    * compartir         * Ejemplos:    * [Matemática diferencial](https://colab.research.google.com/github/ageron/handson-ml2/blob/master/math_differential_calculus.ipynb)    * [Matplotlib](https://colab.research.google.com/github/ageron/handson-ml2/blob/master/tools_matplotlib.ipynb)  Desafío 2: * Acceder al archivo compartido en [colab](https://colab.research.google.com/drive/1vcYRNgKaX_sHffhgJK_4F0kFAx_QqI7s?usp=sharing) y generar una copia propia. * Realizar el ejercicio propuesto con Jupyter. * Compartir el documento.  Almacenando en línea: github + otros  Github**Características*** Repositorios de código * Trabaja con la herramietna **git**, la conocen?* Sitio abierto y público: https://github.com/* Copia en computadora local**Permite*** Trabajar en grupo* Compartir**¿Diferencia con Drive?**  ¿Cómo lo uso?* Crear un usuario en [github](https://github.com/)* Configurar la clave [ssh](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent)* Crear mi primer proyecto Ejemplos de repositorios con Jupyter* [Introducción al lenguaje Python orientado a ingenierías y física](https://github.com/fiolj/intro-python-IB)* [Python científico](https://github.com/mgaitan/curso-python-cientifico)  Servicios similares a Github* [Gitlab](https://about.gitlab.com/)  ¿Cómo armo mi clase?* Cuadernos con autocontenido     * reutilizar    * ejemplos    * ejercicio    * un objetivo de conocimiento  Recursos multimedia en mi cuaderno:* video* Imagen* Gif<jupyter_code>from IPython.display import YouTubeVideo


YouTubeVideo('uIE-PpvS_Pw', width=800, height=600)<jupyter_output><empty_output><jupyter_text>![banner](images/banner.png) * Generar - mostrar un gif<jupyter_code>import random
from matplotlib import pyplot as plt
import gif

x = [random.randint(0, 100) for _ in range(100)]
y = [random.randint(0, 100) for _ in range(100)]

@gif.frame
def plot(i):
    xi = x[i*10:(i+1)*10]
    yi = y[i*10:(i+1)*10]
    plt.scatter(xi, yi)
    plt.xlim((0, 100))
    plt.ylim((0, 100))

frames = []
for i in range(10):
    frame = plot(i)
    frames.append(frame)

gif.save(frames, 'example-gif-01.gif', duration=100)
from IPython.display import Image
Image(url='example-gif-01.gif')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.129978049545312, 'fraction_numerical': 0.03582627783004076, 'mean_word_length': 5.318474492322932, 'pattern_counts': {'":': 0, '<': 77, '<?xml version=': 0, '>': 79, 'https://': 31, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '18', 'dir': 'jupyter-structured-clean-dedup', 'id': '350541', 'license': 'MIT', 'n_tokens_mistral': 5338, 'n_tokens_neox': 5033, 'n_words': 1098, 'path': 'Parte3-Sofia-Ejemplos.ipynb', 'repo_name': 'sebastiandres/pycon_ar', 'size': '12786'}