{"id":1019,"date":"2021-03-13T15:33:35","date_gmt":"2021-03-13T13:33:35","guid":{"rendered":"http:\/\/www.joanillo.org\/?p=1019"},"modified":"2021-03-13T15:33:35","modified_gmt":"2021-03-13T13:33:35","slug":"graficos-interactivos-con-jupyter-notebooks-tiro-parabolico","status":"publish","type":"post","link":"https:\/\/www.joanillo.org\/?p=1019&lang=es","title":{"rendered":"Gr\u00e1ficos interactivos con Jupyter Notebooks: tiro parab\u00f3lico"},"content":{"rendered":"<p><iframe width=\"400\" height=\"300\" src=\"\/\/www.youtube.com\/embed\/NvJZQE6ZeKE?feature=player_detailpage\" frameborder=\"0\" allowfullscreen=\"\" class=\"aligncenter size-medium wp-image-1665\"><\/iframe>Ahora que ya he empezado a hacer pruebas con Jupyter Notebook, el siguiente paso que quiero probar es hacer gr\u00e1ficos interactivos. Pues ha resultado ser m\u00e1s f\u00e1cil y r\u00e1pido de lo que pensaba.<\/p>\n<p>Partimos de un script python que simula los datos experimentales de una trayectoria parab\u00f3lica, y calcula la par\u00e1bola que mejor se ajusta (regresi\u00f3n cuadr\u00e1tica). A partir de la ecuaci\u00f3n de la par\u00e1bola se puede deducir la constante <em>g (=9,81 m\/s2)<\/em>. Simulamos los datos experimentales introduciendo un error de ruido en los datos te\u00f3ricos. Pues bien, con mi gr\u00e1fico interactivo puedo jugar con el nivel de ruido y con el n\u00famero de puntos del muestreo, tal com se ve en el video. El c\u00f3digo queda de la siguiente forma:<\/p>\n<pre>%matplotlib inline\nfrom ipywidgets import interactive\nimport numpy as np\nimport pylab as plt\nfrom IPython.display import display, Math, Latex\n\n# tir parab\u00f2lic: y = vy*t - .5gt^2\nvy = 10 # 10m\/s\ng = 9.81 # m\/s^2\nt_max = 2*vy\/g\n\ndef f(nivell_soroll, num_punts):\n    t = np.linspace(0, t_max, num_punts)\n    y_or = vy*t - .5*g*t**2\n    noise = np.random.normal(0, nivell_soroll, num_punts) # simulem dades experimentals\n    y = y_or + noise\n\n    # ajustament a una par\u00e0bola\n    z = np.polyfit(t, y, 2)\n    g_exp = 2.0*z[0]\n\n    t_ = np.linspace(0, t_max, 100)\n    y_ = z[0]*t_**2 + z[1]*t_ + z[2]\n\n    fig, ax = plt.subplots()\n    plt.plot(t_, y_, t, y, 'bo')\n    plt.suptitle(\"Tir parab\u00f2lic. Regressi\u00f3 quadr\u00e0tica\")\n    plt.title(\"y = \" + str(round(z[0],3)) + \"t^2 + \" + str(round(z[1],3)) + \"t + \" + str(round(z[2],3)) + \" -&gt; g exp = \" + str(round(g_exp,3)) + \" m\/s^2\")\n    ax.set(xlabel='temps (s)', ylabel='y (m)')\n    ax.grid()\n    plt.show()\n    \ninteractive_plot = interactive(f, nivell_soroll=(0.0, 2.0),  num_punts=(10, 50))\ninteractive_plot\n<\/pre>\n<p>Otra cosa que me interesa es la manera de exportar estos Jupyter Notebooks a una web, conservando las gr\u00e1ficas y las f\u00f3rmulas en format Latex (aunque se pierda la interacci\u00f3 con las gr\u00e1ficas). Esto se consigue directamente exportando el Notebook a html:<\/p>\n<pre>$ jupyter nbconvert --execute tir_parabolic.ipynb --to html\n<\/pre>\n<p>e integrando este c\u00f3digo en una web donde haya m\u00e1s texto y explicaciones, y con la librer\u00eda Bootstrap.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ahora que ya he empezado a hacer pruebas con Jupyter Notebook, el siguiente paso que quiero probar es hacer gr\u00e1ficos interactivos. Pues ha resultado ser m\u00e1s f\u00e1cil y r\u00e1pido de lo que pensaba. Partimos de un script python que simula los datos experimentales de una trayectoria parab\u00f3lica, y calcula la par\u00e1bola que mejor se ajusta [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[314,160,324,320,176,192],"tags":[],"_links":{"self":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/1019"}],"collection":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1019"}],"version-history":[{"count":1,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/1019\/revisions"}],"predecessor-version":[{"id":1020,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/1019\/revisions\/1020"}],"wp:attachment":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1019"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1019"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1019"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}