├── images ├── edos.png ├── ntsb.jpg ├── time.jpg ├── cover.png ├── birrete.png ├── course1.png ├── elevator.png ├── fortran_1.png ├── interview.jpg ├── meeting1.png ├── poster1.png ├── poster2.jpg ├── projects.jpg ├── pycanas.jpg ├── pycanas2.jpg ├── s3_logo.png ├── s3_poster.jpg ├── safety_1.png ├── safety_2.png ├── safety_3.png ├── safety_4.png ├── safety_5.png ├── take_off.jpg ├── antigravity.png ├── conferences.jpg ├── pyfme_logo.png ├── who_we_are.png ├── conferences2.jpg ├── data-scientist.png ├── hidden_figures.jpg ├── poliastro_logo.png ├── aeropython_logo.png ├── perfil_yukovski.png ├── problem_solving.jpg ├── programming-lang.jpg ├── transf_yukovski.png ├── longitudinal_modes1.png ├── longitudinal_modes2.png ├── longitudinal_modes3.png ├── entrada-etsiae-alumnos.jpg └── PyConES-2014-Pybonacci-LD-3.jpg ├── styles ├── FluxBold.ttf └── style.css ├── environment.yml ├── README.md ├── LICENSE ├── .gitignore └── slides.ipynb /images/edos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/edos.png -------------------------------------------------------------------------------- /images/ntsb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/ntsb.jpg -------------------------------------------------------------------------------- /images/time.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/time.jpg -------------------------------------------------------------------------------- /images/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/cover.png -------------------------------------------------------------------------------- /images/birrete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/birrete.png -------------------------------------------------------------------------------- /images/course1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/course1.png -------------------------------------------------------------------------------- /images/elevator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/elevator.png -------------------------------------------------------------------------------- /images/fortran_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/fortran_1.png -------------------------------------------------------------------------------- /images/interview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/interview.jpg -------------------------------------------------------------------------------- /images/meeting1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/meeting1.png -------------------------------------------------------------------------------- /images/poster1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/poster1.png -------------------------------------------------------------------------------- /images/poster2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/poster2.jpg -------------------------------------------------------------------------------- /images/projects.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/projects.jpg -------------------------------------------------------------------------------- /images/pycanas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/pycanas.jpg -------------------------------------------------------------------------------- /images/pycanas2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/pycanas2.jpg -------------------------------------------------------------------------------- /images/s3_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/s3_logo.png -------------------------------------------------------------------------------- /images/s3_poster.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/s3_poster.jpg -------------------------------------------------------------------------------- /images/safety_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/safety_1.png -------------------------------------------------------------------------------- /images/safety_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/safety_2.png -------------------------------------------------------------------------------- /images/safety_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/safety_3.png -------------------------------------------------------------------------------- /images/safety_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/safety_4.png -------------------------------------------------------------------------------- /images/safety_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/safety_5.png -------------------------------------------------------------------------------- /images/take_off.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/take_off.jpg -------------------------------------------------------------------------------- /styles/FluxBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/styles/FluxBold.ttf -------------------------------------------------------------------------------- /images/antigravity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/antigravity.png -------------------------------------------------------------------------------- /images/conferences.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/conferences.jpg -------------------------------------------------------------------------------- /images/pyfme_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/pyfme_logo.png -------------------------------------------------------------------------------- /images/who_we_are.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/who_we_are.png -------------------------------------------------------------------------------- /images/conferences2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/conferences2.jpg -------------------------------------------------------------------------------- /images/data-scientist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/data-scientist.png -------------------------------------------------------------------------------- /images/hidden_figures.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/hidden_figures.jpg -------------------------------------------------------------------------------- /images/poliastro_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/poliastro_logo.png -------------------------------------------------------------------------------- /images/aeropython_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/aeropython_logo.png -------------------------------------------------------------------------------- /images/perfil_yukovski.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/perfil_yukovski.png -------------------------------------------------------------------------------- /images/problem_solving.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/problem_solving.jpg -------------------------------------------------------------------------------- /images/programming-lang.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/programming-lang.jpg -------------------------------------------------------------------------------- /images/transf_yukovski.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/transf_yukovski.png -------------------------------------------------------------------------------- /images/longitudinal_modes1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/longitudinal_modes1.png -------------------------------------------------------------------------------- /images/longitudinal_modes2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/longitudinal_modes2.png -------------------------------------------------------------------------------- /images/longitudinal_modes3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/longitudinal_modes3.png -------------------------------------------------------------------------------- /images/entrada-etsiae-alumnos.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/entrada-etsiae-alumnos.jpg -------------------------------------------------------------------------------- /images/PyConES-2014-Pybonacci-LD-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AeroPython/charla_s3_2017/master/images/PyConES-2014-Pybonacci-LD-3.jpg -------------------------------------------------------------------------------- /environment.yml: -------------------------------------------------------------------------------- 1 | name: talk_s3_2017 2 | channels: 3 | - damianavila82 4 | - conda-forge 5 | - anaconda-fusion 6 | - defaults 7 | dependencies: 8 | - bokeh 9 | - ipywidgets 10 | - jupyter 11 | - matplotlib 12 | - notebook 13 | - numpy 14 | - pandas 15 | - python=3.6 16 | - scikit-learn 17 | - scipy 18 | - tqdm 19 | - rise 20 | 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # [AeroPython: programando en Ingeniería Aeroespacial](http://s3.leem.es/#schedule) 2 | ## Viernes 24 de noviembre de 2017 - 16:00-16:45 h - Madrid, España 3 | 4 | ### Equipo AeroPython 5 | 6 | - Mabel Delgado 7 | - Jesús Martos 8 | - Siro Moreno 9 | - Alex Saez 10 | 11 | ## Descripción 12 | Aprovechando la oportunidad que nos brinda el IX Congreso Spanish Space Students (S3), desde AeroPython presentamos una pequeña introducción a la programación científica en Python dentro del ámbito aeronáutico así como distintos proyectos en los que estamos embarcados. 13 | 14 | ## [Diapositivas](http://nbviewer.jupyter.org/format/slides/github/AeroPython/charla_s3_2017/blob/master/slides.ipynb#/) 15 | 16 | ![poster](./images/s3_poster.jpg) 17 | 18 | ![aeropython_logo](./images/aeropython_logo.png) 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 AeroPython 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | 49 | # Translations 50 | *.mo 51 | *.pot 52 | 53 | # Django stuff: 54 | *.log 55 | local_settings.py 56 | 57 | # Flask stuff: 58 | instance/ 59 | .webassets-cache 60 | 61 | # Scrapy stuff: 62 | .scrapy 63 | 64 | # Sphinx documentation 65 | docs/_build/ 66 | 67 | # PyBuilder 68 | target/ 69 | 70 | # Jupyter Notebook 71 | .ipynb_checkpoints 72 | 73 | # pyenv 74 | .python-version 75 | 76 | # celery beat schedule file 77 | celerybeat-schedule 78 | 79 | # SageMath parsed files 80 | *.sage.py 81 | 82 | # dotenv 83 | .env 84 | 85 | # virtualenv 86 | .venv 87 | venv/ 88 | ENV/ 89 | 90 | # Spyder project settings 91 | .spyderproject 92 | .spyproject 93 | 94 | # Rope project settings 95 | .ropeproject 96 | 97 | # mkdocs documentation 98 | /site 99 | 100 | # mypy 101 | .mypy_cache/ 102 | -------------------------------------------------------------------------------- /styles/style.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 112 | 128 | -------------------------------------------------------------------------------- /slides.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "slideshow": { 7 | "slide_type": "slide" 8 | } 9 | }, 10 | "source": [ 11 | " \n", 12 | "# Programando en Ingeniería Aeroespacial\n", 13 | "\n", 14 | "
\n", 15 | "\n", 16 | "###### Mabel Delgado, Jesús Martos, Siro Moreno, Alejandro Sáez" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": { 22 | "slideshow": { 23 | "slide_type": "slide" 24 | } 25 | }, 26 | "source": [ 27 | "# ¿Quiénes somos?\n", 28 | "\n", 29 | "
" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": { 35 | "slideshow": { 36 | "slide_type": "subslide" 37 | } 38 | }, 39 | "source": [ 40 | "# ¿Quiénes somos?\n", 41 | "\n", 42 | "* Ingenieros ~~aeronáuticos~~ la mayoría aeronáuticos\n", 43 | "* Con pasión por:\n", 44 | " - la programación científica\n", 45 | " - el análisis de datos\n", 46 | " - la simulación\n", 47 | "* Con ganas de seguir formando una comunidad\n", 48 | "* Con la predisposición a ayudarte y enseñarte" 49 | ] 50 | }, 51 | { 52 | "cell_type": "markdown", 53 | "metadata": { 54 | "slideshow": { 55 | "slide_type": "subslide" 56 | } 57 | }, 58 | "source": [ 59 | "# ¿Cómo empezó todo?\n", 60 | "\n", 61 | "
" 62 | ] 63 | }, 64 | { 65 | "cell_type": "markdown", 66 | "metadata": { 67 | "slideshow": { 68 | "slide_type": "subslide" 69 | } 70 | }, 71 | "source": [ 72 | "
" 73 | ] 74 | }, 75 | { 76 | "cell_type": "markdown", 77 | "metadata": { 78 | "slideshow": { 79 | "slide_type": "subslide" 80 | } 81 | }, 82 | "source": [ 83 | "## FORTRAN\n", 84 | "
" 85 | ] 86 | }, 87 | { 88 | "cell_type": "markdown", 89 | "metadata": { 90 | "slideshow": { 91 | "slide_type": "subslide" 92 | } 93 | }, 94 | "source": [ 95 | "## Un caso real\n", 96 | "
" 97 | ] 98 | }, 99 | { 100 | "cell_type": "markdown", 101 | "metadata": { 102 | "slideshow": { 103 | "slide_type": "subslide" 104 | } 105 | }, 106 | "source": [ 107 | "### Existe la necesidad de programar\n" 108 | ] 109 | }, 110 | { 111 | "cell_type": "markdown", 112 | "metadata": { 113 | "slideshow": { 114 | "slide_type": "fragment" 115 | } 116 | }, 117 | "source": [ 118 | "## no tenemos la herramienta adecuada" 119 | ] 120 | }, 121 | { 122 | "cell_type": "markdown", 123 | "metadata": { 124 | "slideshow": { 125 | "slide_type": "fragment" 126 | } 127 | }, 128 | "source": [ 129 | "# hacen falta alternativas" 130 | ] 131 | }, 132 | { 133 | "cell_type": "markdown", 134 | "metadata": { 135 | "slideshow": { 136 | "slide_type": "subslide" 137 | } 138 | }, 139 | "source": [ 140 | "## ¿cuál es la opción adecuada?\n", 141 | "
" 142 | ] 143 | }, 144 | { 145 | "cell_type": "markdown", 146 | "metadata": { 147 | "slideshow": { 148 | "slide_type": "subslide" 149 | } 150 | }, 151 | "source": [ 152 | "## ¿Por qué Python?\n", 153 | "\n", 154 | "* **Libre y gratuito**:\n", 155 | " - Posibilidad de estudiar su funcionamiento y corregirlo o mejorarlo\n", 156 | " - Sin restricciones para su uso o distribución, incluso para uso comercial\n", 157 | "\n", 158 | "* **Propósito general** pero con un ecosistema científico muy desarrollado\n", 159 | "\n", 160 | "* **Comunidad**\n", 161 | "\n", 162 | "* **Fácil de aprender**" 163 | ] 164 | }, 165 | { 166 | "cell_type": "markdown", 167 | "metadata": { 168 | "slideshow": { 169 | "slide_type": "subslide" 170 | } 171 | }, 172 | "source": [ 173 | "Puede parecer una tontería, pero... \"Hola mundo\" es simplemente:" 174 | ] 175 | }, 176 | { 177 | "cell_type": "code", 178 | "execution_count": 5, 179 | "metadata": { 180 | "slideshow": { 181 | "slide_type": "fragment" 182 | } 183 | }, 184 | "outputs": [ 185 | { 186 | "name": "stdout", 187 | "output_type": "stream", 188 | "text": [ 189 | "Hola mundo\n" 190 | ] 191 | } 192 | ], 193 | "source": [ 194 | "print('Hola mundo')" 195 | ] 196 | }, 197 | { 198 | "cell_type": "markdown", 199 | "metadata": { 200 | "slideshow": { 201 | "slide_type": "subslide" 202 | } 203 | }, 204 | "source": [ 205 | "```java\n", 206 | "// My first program in Java\n", 207 | "public class HelloWorld {\n", 208 | "\n", 209 | " public static void main(String[] args) {\n", 210 | " // Prints \"Hello, World\" to the terminal window.\n", 211 | " System.out.println(\"Hello, World\");\n", 212 | " }\n", 213 | "\n", 214 | "}\n", 215 | "```" 216 | ] 217 | }, 218 | { 219 | "cell_type": "markdown", 220 | "metadata": { 221 | "slideshow": { 222 | "slide_type": "subslide" 223 | } 224 | }, 225 | "source": [ 226 | "```c++\n", 227 | "// my first program in C++\n", 228 | "#include \n", 229 | "\n", 230 | "int main()\n", 231 | "{\n", 232 | " std::cout << \"Hello World!\";\n", 233 | "}\n", 234 | "```" 235 | ] 236 | }, 237 | { 238 | "cell_type": "markdown", 239 | "metadata": { 240 | "slideshow": { 241 | "slide_type": "subslide" 242 | } 243 | }, 244 | "source": [ 245 | "```FORTRAN\n", 246 | "! My first program in Fortran\n", 247 | "program hello\n", 248 | " print *, \"Hello World!\"\n", 249 | "end program hello\n", 250 | "```" 251 | ] 252 | }, 253 | { 254 | "cell_type": "markdown", 255 | "metadata": { 256 | "slideshow": { 257 | "slide_type": "subslide" 258 | } 259 | }, 260 | "source": [ 261 | "## y nos pusimos manos a la obra\n", 262 | "
" 263 | ] 264 | }, 265 | { 266 | "cell_type": "markdown", 267 | "metadata": { 268 | "slideshow": { 269 | "slide_type": "subslide" 270 | } 271 | }, 272 | "source": [ 273 | "
" 274 | ] 275 | }, 276 | { 277 | "cell_type": "markdown", 278 | "metadata": { 279 | "slideshow": { 280 | "slide_type": "subslide" 281 | } 282 | }, 283 | "source": [ 284 | "
" 285 | ] 286 | }, 287 | { 288 | "cell_type": "markdown", 289 | "metadata": { 290 | "slideshow": { 291 | "slide_type": "subslide" 292 | } 293 | }, 294 | "source": [ 295 | "
" 296 | ] 297 | }, 298 | { 299 | "cell_type": "markdown", 300 | "metadata": { 301 | "slideshow": { 302 | "slide_type": "subslide" 303 | } 304 | }, 305 | "source": [ 306 | "# Y empezaron los primeros proyectos" 307 | ] 308 | }, 309 | { 310 | "cell_type": "markdown", 311 | "metadata": { 312 | "slideshow": { 313 | "slide_type": "fragment" 314 | } 315 | }, 316 | "source": [ 317 | "## y siguieron los cursos" 318 | ] 319 | }, 320 | { 321 | "cell_type": "markdown", 322 | "metadata": { 323 | "slideshow": { 324 | "slide_type": "fragment" 325 | } 326 | }, 327 | "source": [ 328 | "
" 329 | ] 330 | }, 331 | { 332 | "cell_type": "markdown", 333 | "metadata": { 334 | "slideshow": { 335 | "slide_type": "subslide" 336 | } 337 | }, 338 | "source": [ 339 | "## y empezaron las pycañas\n", 340 | "
" 341 | ] 342 | }, 343 | { 344 | "cell_type": "markdown", 345 | "metadata": { 346 | "slideshow": { 347 | "slide_type": "subslide" 348 | } 349 | }, 350 | "source": [ 351 | "## y seguimos trabajando\n", 352 | "
" 353 | ] 354 | }, 355 | { 356 | "cell_type": "markdown", 357 | "metadata": { 358 | "slideshow": { 359 | "slide_type": "subslide" 360 | } 361 | }, 362 | "source": [ 363 | "## y nos fuimos de conferencias de Python\n", 364 | "
\n", 365 | "## y conocimos a más ingenieros inquietos" 366 | ] 367 | }, 368 | { 369 | "cell_type": "markdown", 370 | "metadata": { 371 | "slideshow": { 372 | "slide_type": "subslide" 373 | } 374 | }, 375 | "source": [ 376 | "## pero sin olvidar que es lo que nos gusta\n", 377 | "
" 378 | ] 379 | }, 380 | { 381 | "cell_type": "markdown", 382 | "metadata": { 383 | "slideshow": { 384 | "slide_type": "subslide" 385 | } 386 | }, 387 | "source": [ 388 | "## y crecieron las pycañas...\n", 389 | "
\n" 390 | ] 391 | }, 392 | { 393 | "cell_type": "markdown", 394 | "metadata": { 395 | "slideshow": { 396 | "slide_type": "subslide" 397 | } 398 | }, 399 | "source": [ 400 | "## En definitiva\n", 401 | "\n", 402 | "* Hemos dado cursos:\n", 403 | " - para estudiantes de Ingeniería Aeroespacial en UPM, UC3M, URJC\n", 404 | " - para Ingenieros Químicos en Universidad de Alicante\n", 405 | " - en Intitutos de Investigación: Harbour Research Lab (UPM), Instituto de Hidráhulica de Cantabria.\n", 406 | " - en empresas\n", 407 | " " 408 | ] 409 | }, 410 | { 411 | "cell_type": "markdown", 412 | "metadata": { 413 | "slideshow": { 414 | "slide_type": "fragment" 415 | } 416 | }, 417 | "source": [ 418 | "* Vamos a conferencias y Meetups" 419 | ] 420 | }, 421 | { 422 | "cell_type": "markdown", 423 | "metadata": { 424 | "slideshow": { 425 | "slide_type": "fragment" 426 | } 427 | }, 428 | "source": [ 429 | " * Desarrollamos proyectos relacionados con temas aeroespaciales" 430 | ] 431 | }, 432 | { 433 | "cell_type": "markdown", 434 | "metadata": { 435 | "slideshow": { 436 | "slide_type": "subslide" 437 | } 438 | }, 439 | "source": [ 440 | "# ¡y nos encanta todo esto!" 441 | ] 442 | }, 443 | { 444 | "cell_type": "markdown", 445 | "metadata": { 446 | "slideshow": { 447 | "slide_type": "fragment" 448 | } 449 | }, 450 | "source": [ 451 | "### pero...\n", 452 | "## ¿por qué debería interesarte a ti la programación?" 453 | ] 454 | }, 455 | { 456 | "cell_type": "markdown", 457 | "metadata": { 458 | "slideshow": { 459 | "slide_type": "slide" 460 | } 461 | }, 462 | "source": [ 463 | "# La programación para un Ingeniero/a Aeroespacial" 464 | ] 465 | }, 466 | { 467 | "cell_type": "markdown", 468 | "metadata": { 469 | "slideshow": { 470 | "slide_type": "subslide" 471 | } 472 | }, 473 | "source": [ 474 | "\"Engineering is the application of mathematics, science, economics, and social and practical knowledge to invent, \n", 475 | "innovate, design, build, maintain, research, and improve structures, machines, tools, systems, components, materials, processes, \n", 476 | "solutions, and organizations.\"\n", 477 | "
__Fuente:__ _Wikipedia_" 478 | ] 479 | }, 480 | { 481 | "cell_type": "markdown", 482 | "metadata": { 483 | "slideshow": { 484 | "slide_type": "fragment" 485 | } 486 | }, 487 | "source": [ 488 | "
" 489 | ] 490 | }, 491 | { 492 | "cell_type": "markdown", 493 | "metadata": { 494 | "slideshow": { 495 | "slide_type": "subslide" 496 | } 497 | }, 498 | "source": [ 499 | "## ¿Cómo puede ayudarte la programación durante la carrera?" 500 | ] 501 | }, 502 | { 503 | "cell_type": "markdown", 504 | "metadata": { 505 | "slideshow": { 506 | "slide_type": "fragment" 507 | } 508 | }, 509 | "source": [ 510 | "
" 511 | ] 512 | }, 513 | { 514 | "cell_type": "markdown", 515 | "metadata": { 516 | "slideshow": { 517 | "slide_type": "subslide" 518 | } 519 | }, 520 | "source": [ 521 | "* Conceptos teóricos." 522 | ] 523 | }, 524 | { 525 | "cell_type": "markdown", 526 | "metadata": { 527 | "slideshow": { 528 | "slide_type": "fragment" 529 | } 530 | }, 531 | "source": [ 532 | "* Trabajos." 533 | ] 534 | }, 535 | { 536 | "cell_type": "markdown", 537 | "metadata": { 538 | "slideshow": { 539 | "slide_type": "fragment" 540 | } 541 | }, 542 | "source": [ 543 | "* Prácticas." 544 | ] 545 | }, 546 | { 547 | "cell_type": "markdown", 548 | "metadata": { 549 | "slideshow": { 550 | "slide_type": "fragment" 551 | } 552 | }, 553 | "source": [ 554 | "* Planteamiento y resolución de problemas." 555 | ] 556 | }, 557 | { 558 | "cell_type": "markdown", 559 | "metadata": { 560 | "slideshow": { 561 | "slide_type": "subslide" 562 | } 563 | }, 564 | "source": [ 565 | "### Perfil de Yukovski" 566 | ] 567 | }, 568 | { 569 | "cell_type": "markdown", 570 | "metadata": { 571 | "slideshow": { 572 | "slide_type": "fragment" 573 | } 574 | }, 575 | "source": [ 576 | "
\n", 577 | "\n", 578 | "
__Fuente:__ _Aerodinámica básica, Meseguer Ruiz, J., Sanz Andrés, A._" 579 | ] 580 | }, 581 | { 582 | "cell_type": "markdown", 583 | "metadata": { 584 | "slideshow": { 585 | "slide_type": "fragment" 586 | } 587 | }, 588 | "source": [ 589 | "
" 590 | ] 591 | }, 592 | { 593 | "cell_type": "code", 594 | "execution_count": 2, 595 | "metadata": { 596 | "slideshow": { 597 | "slide_type": "skip" 598 | } 599 | }, 600 | "outputs": [ 601 | { 602 | "name": "stderr", 603 | "output_type": "stream", 604 | "text": [ 605 | "C:\\Users\\mabel\\mytools\\Anaconda3\\envs\\talk_s3_2017\\lib\\site-packages\\IPython\\html.py:14: ShimWarning: The `IPython.html` package has been deprecated since IPython 4.0. You should import from `notebook` instead. `IPython.html.widgets` has moved to `ipywidgets`.\n", 606 | " \"`IPython.html.widgets` has moved to `ipywidgets`.\", ShimWarning)\n" 607 | ] 608 | } 609 | ], 610 | "source": [ 611 | "%matplotlib inline\n", 612 | "import numpy as np\n", 613 | "import matplotlib.pyplot as plt\n", 614 | "from IPython.html.widgets import interact" 615 | ] 616 | }, 617 | { 618 | "cell_type": "code", 619 | "execution_count": 3, 620 | "metadata": { 621 | "slideshow": { 622 | "slide_type": "skip" 623 | } 624 | }, 625 | "outputs": [], 626 | "source": [ 627 | "def transf_yukovski(a, t):\n", 628 | " \"\"\"Dado el punto t (complejo) y el parámetro a\n", 629 | " a de la transformación proporciona el punto\n", 630 | " tau (complejo) en el que se transforma t.\"\"\"\n", 631 | " tau = t + a ** 2 / t\n", 632 | " return tau" 633 | ] 634 | }, 635 | { 636 | "cell_type": "code", 637 | "execution_count": 4, 638 | "metadata": { 639 | "slideshow": { 640 | "slide_type": "skip" 641 | } 642 | }, 643 | "outputs": [], 644 | "source": [ 645 | "def transformacion_geometrica(a, landa, delta, N_perfil=100):\n", 646 | " #punto del plano complejo\n", 647 | " t0 = a * (-landa + delta * 1j)\n", 648 | " #valor del radio de la circunferencia\n", 649 | " R = a * np.sqrt((1 + landa)**2 + delta**2)\n", 650 | " #se barre un ángulo de 0 a 2 pi\n", 651 | " theta = np.linspace(0, 2*np.pi, N_perfil)\n", 652 | " #se crean las coordenadas del los puntos\n", 653 | " #de la circunferencia\n", 654 | " Xc = - a * landa + R * np.cos(theta)\n", 655 | " Yc = a * delta + R * np.sin(theta)\n", 656 | " #se crean las coordenadas del los puntos\n", 657 | " #del perfil\n", 658 | " Puntos_perfil = transf_yukovski(a, Xc+Yc*1j)\n", 659 | " Xp, Yp = np.real(Puntos_perfil) , np.imag(Puntos_perfil)\n", 660 | " \n", 661 | " #Se pintan la cirunferencia y el perfil\n", 662 | " fig, ax = plt.subplots(1,2)\n", 663 | " fig.set_size_inches(15,15)\n", 664 | " p_c = plt.Polygon(list(zip(Xc, Yc)), color=\"#cccccc\", zorder=1)\n", 665 | " ax[0].add_patch(p_c)\n", 666 | " ax[0].plot(Xc,Yc)\n", 667 | " ax[0].set_aspect(1)\n", 668 | " ax[0].set_xlim(-3, 3)\n", 669 | " ax[0].set_ylim(-2,2)\n", 670 | " ax[0].grid()\n", 671 | " \n", 672 | " p_p = plt.Polygon(list(zip(Xp, Yp)), color=\"#cccccc\", zorder=1)\n", 673 | " ax[1].add_patch(p_p)\n", 674 | " ax[1].plot(Xp,Yp)\n", 675 | " ax[1].set_aspect(1)\n", 676 | "\n", 677 | " ax[1].set_xlim(-3, 3)\n", 678 | " ax[1].set_ylim(-2,2)\n", 679 | " ax[1].grid()\n", 680 | " \n", 681 | " plt.show()" 682 | ] 683 | }, 684 | { 685 | "cell_type": "code", 686 | "execution_count": 5, 687 | "metadata": { 688 | "slideshow": { 689 | "slide_type": "subslide" 690 | } 691 | }, 692 | "outputs": [ 693 | { 694 | "data": { 695 | "application/vnd.jupyter.widget-view+json": { 696 | "model_id": "2d8dd9f8e59049dba7e8018e3ad52029", 697 | "version_major": 2, 698 | "version_minor": 0 699 | }, 700 | "text/html": [ 701 | "

Failed to display Jupyter Widget of type interactive.

\n", 702 | "

\n", 703 | " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", 704 | " that the widgets JavaScript is still loading. If this message persists, it\n", 705 | " likely means that the widgets JavaScript library is either not installed or\n", 706 | " not enabled. See the Jupyter\n", 707 | " Widgets Documentation for setup instructions.\n", 708 | "

\n", 709 | "

\n", 710 | " If you're reading this message in another frontend (for example, a static\n", 711 | " rendering on GitHub or NBViewer),\n", 712 | " it may mean that your frontend doesn't currently support widgets.\n", 713 | "

\n" 714 | ], 715 | "text/plain": [ 716 | "interactive(children=(FloatSlider(value=1.0, description='a', max=2.0), FloatSlider(value=0.0, description='landa', max=1.0, min=-1.0, step=0.01), FloatSlider(value=0.0, description='delta', max=1.0, min=-1.0, step=0.01), IntSlider(value=100, description='N_perfil', max=200, min=4), Output()), _dom_classes=('widget-interact',))" 717 | ] 718 | }, 719 | "metadata": {}, 720 | "output_type": "display_data" 721 | } 722 | ], 723 | "source": [ 724 | "w = interact(transformacion_geometrica, landa=(-1.,1, 0.01), delta=(-1.,1,0.01), \n", 725 | " a=(0,2.,0.1), N_perfil=(4, 200) );" 726 | ] 727 | }, 728 | { 729 | "cell_type": "code", 730 | "execution_count": 6, 731 | "metadata": { 732 | "slideshow": { 733 | "slide_type": "skip" 734 | } 735 | }, 736 | "outputs": [], 737 | "source": [ 738 | "def flujo_perfil_circunferencia(landa, delta, alfa, U=1, N_malla = 100):\n", 739 | " N_perfil=100\n", 740 | " a=1\n", 741 | " #punto del plano complejo\n", 742 | " t0 = a * (-landa + delta * 1j)\n", 743 | " #valor del radio de la circunferencia\n", 744 | " R = a * np.sqrt((1 + landa)**2 + delta**2)\n", 745 | "\n", 746 | " #se barre un ángulo de 0 a 2 pi\n", 747 | " theta = np.linspace(0, 2*np.pi, N_perfil)\n", 748 | " #se crean las coordenadas del los puntos\n", 749 | " #de la circunferencia\n", 750 | " Xc = - a * landa + R * np.cos(theta)\n", 751 | " Yc = a * delta + R * np.sin(theta)\n", 752 | " \n", 753 | " #se crean las coordenadas del los puntos\n", 754 | " #del perfil\n", 755 | " Puntos_perfil = transf_yukovski(a, Xc+Yc*1j)\n", 756 | " Xp, Yp = np.real(Puntos_perfil) , np.imag(Puntos_perfil)\n", 757 | " \n", 758 | " #se crea la malla donde se va pintar la función de corriente\n", 759 | "\n", 760 | " # Dirección radial\n", 761 | " N_R = 50 # Número de puntos en la dirección radial\n", 762 | " R_min = R\n", 763 | " R_max = 10\n", 764 | "\n", 765 | " # Dirección tangencial\n", 766 | " N_T = 180 # Número de puntos en la dirección tangencial\n", 767 | "\n", 768 | " R_ = np.linspace(R_min, R_max, N_R)\n", 769 | " T_ = np.linspace(0, 2*np.pi , N_T)\n", 770 | "\n", 771 | " # El menos en la XX es para que el borde de ataque del perfil esté en la izquierda\n", 772 | " XX = - (R_ * np.cos(T_).reshape((-1, 1)) - np.real(t0))\n", 773 | " YY = R_ * np.sin(T_).reshape((-1, 1)) + np.imag(t0)\n", 774 | " \n", 775 | " tt = XX + YY * 1j\n", 776 | " \n", 777 | " alfa = np.deg2rad(alfa)\n", 778 | " # Circulación que hay que añadir al cilindro para\n", 779 | " # que se cumpla la hipótesis de Kutta en el perfil\n", 780 | " T = 4 * np.pi * a * U * (delta + (1+landa) * alfa)\n", 781 | " #Potencial complejo\n", 782 | " f = U * ( (tt - t0) * np.exp(-alfa *1j) + R**2 / (tt - t0) * np.exp(alfa * 1j) )\n", 783 | " f += 1j * T / (2* np.pi) * np.log(tt - t0)\n", 784 | " #Función de corriente\n", 785 | " psi = np.imag(f) \n", 786 | "\n", 787 | " Puntos_plano_tau = transf_yukovski(a, tt)\n", 788 | " XX_tau, YY_tau = np.real(Puntos_plano_tau) , np.imag(Puntos_plano_tau)\n", 789 | " \n", 790 | " #Se pinta\n", 791 | " fig, ax = plt.subplots(1,2)\n", 792 | " #lineas de corriente\n", 793 | " fig.set_size_inches(15,15)\n", 794 | " \n", 795 | " ax[0].contour(XX, YY, psi, np.linspace(-10,10,50), colors = ['blue', 'blue'])\n", 796 | " ax[0].grid()\n", 797 | " ax[0].set_aspect(1)\n", 798 | " p = plt.Polygon(list(zip(Xc, Yc)), color=\"#cccccc\", zorder=10)\n", 799 | " ax[0].add_patch(p)\n", 800 | " ax[0].set_xlim(-5, 5)\n", 801 | " ax[0].set_ylim(-2,2)\n", 802 | " \n", 803 | " ax[1].contour(XX_tau, YY_tau, psi, np.linspace(-10,10,50), colors = ['blue', 'blue'])\n", 804 | " ax[1].grid()\n", 805 | " ax[1].set_aspect(1)\n", 806 | " p = plt.Polygon(list(zip(Xp, Yp)), color=\"#cccccc\", zorder=10)\n", 807 | " ax[1].add_patch(p)\n", 808 | " ax[1].set_xlim(-5, 5)\n", 809 | " ax[1].set_ylim(-2,2)\n", 810 | " \n", 811 | " plt.show()" 812 | ] 813 | }, 814 | { 815 | "cell_type": "code", 816 | "execution_count": 7, 817 | "metadata": { 818 | "slideshow": { 819 | "slide_type": "subslide" 820 | } 821 | }, 822 | "outputs": [ 823 | { 824 | "data": { 825 | "application/vnd.jupyter.widget-view+json": { 826 | "model_id": "3768be30396244d1bb5aef568e842b0e", 827 | "version_major": 2, 828 | "version_minor": 0 829 | }, 830 | "text/html": [ 831 | "

Failed to display Jupyter Widget of type interactive.

\n", 832 | "

\n", 833 | " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", 834 | " that the widgets JavaScript is still loading. If this message persists, it\n", 835 | " likely means that the widgets JavaScript library is either not installed or\n", 836 | " not enabled. See the Jupyter\n", 837 | " Widgets Documentation for setup instructions.\n", 838 | "

\n", 839 | "

\n", 840 | " If you're reading this message in another frontend (for example, a static\n", 841 | " rendering on GitHub or NBViewer),\n", 842 | " it may mean that your frontend doesn't currently support widgets.\n", 843 | "

\n" 844 | ], 845 | "text/plain": [ 846 | "interactive(children=(FloatSlider(value=0.5, description='landa', max=1.0), FloatSlider(value=0.5, description='delta', max=1.0), IntSlider(value=15, description='alfa', max=30), IntSlider(value=1, description='U', max=10), IntSlider(value=100, description='N_malla', max=300, min=-100), Output()), _dom_classes=('widget-interact',))" 847 | ] 848 | }, 849 | "metadata": {}, 850 | "output_type": "display_data" 851 | } 852 | ], 853 | "source": [ 854 | "p = interact(flujo_perfil_circunferencia, landa=(0.,1), delta=(0.,1), alfa=(0, 30), U=(0,10));" 855 | ] 856 | }, 857 | { 858 | "cell_type": "code", 859 | "execution_count": 8, 860 | "metadata": { 861 | "slideshow": { 862 | "slide_type": "skip" 863 | } 864 | }, 865 | "outputs": [], 866 | "source": [ 867 | "def cp_perfil_circunferencia(landa, delta, alfa, U=1, N_malla = 100):\n", 868 | " N_perfil=100\n", 869 | " a=1\n", 870 | " #punto del plano complejo\n", 871 | " t0 = a * (-landa + delta * 1j)\n", 872 | " #valor del radio de la circunferencia\n", 873 | " R = a * np.sqrt((1 + landa)**2 + delta**2)\n", 874 | "\n", 875 | " #se barre un ángulo de 0 a 2 pi\n", 876 | " theta = np.linspace(0, 2*np.pi, N_perfil)\n", 877 | " #se crean las coordenadas del los puntos\n", 878 | " #de la circunferencia\n", 879 | " Xc = - a * landa + R * np.cos(theta)\n", 880 | " Yc = a * delta + R * np.sin(theta)\n", 881 | " \n", 882 | " #se crean las coordenadas del los puntos\n", 883 | " #del perfil\n", 884 | " Puntos_perfil = transf_yukovski(a, Xc+Yc*1j)\n", 885 | " Xp, Yp = np.real(Puntos_perfil) , np.imag(Puntos_perfil)\n", 886 | " \n", 887 | " #se crea la malla donde se va pintar la función de corriente\n", 888 | "\n", 889 | " # Dirección radial\n", 890 | " N_R = 50 # Número de puntos en la dirección radial\n", 891 | " R_min = R\n", 892 | " R_max = 10\n", 893 | "\n", 894 | " # Dirección tangencial\n", 895 | " N_T = 180 # Número de puntos en la dirección tangencial\n", 896 | "\n", 897 | " R_ = np.linspace(R_min, R_max, N_R)\n", 898 | " T_ = np.linspace(0, 2*np.pi, N_T)\n", 899 | "\n", 900 | " # El menos en la XX es para que el borde de ataque del perfil esté en la izquierda\n", 901 | " XX = - (R_ * np.cos(T_).reshape((-1, 1)) - np.real(t0))\n", 902 | " YY = R_ * np.sin(T_).reshape((-1, 1)) + np.imag(t0)\n", 903 | " \n", 904 | " tt = XX + YY * 1j\n", 905 | " \n", 906 | " alfa = np.deg2rad(alfa)\n", 907 | " # Circulación que hay que añadir al cilindro para\n", 908 | " # que se cumpla la hipótesis de Kutta en el perfil\n", 909 | " T = 4 * np.pi * a * U * (delta + (1+landa) * alfa)\n", 910 | " \n", 911 | " #Velocidad conjugada\n", 912 | " dfdt = U * ( 1 * np.exp(-alfa * 1j) - R**2 / (tt - t0)**2 * np.exp(alfa * 1j) )\n", 913 | " dfdt = dfdt + 1j * T / (2*np.pi) * 1 / (tt - t0)\n", 914 | " #coeficiente de presion\n", 915 | " cp = 1 - np.abs(dfdt)**2 / U**2\n", 916 | "\n", 917 | " Puntos_plano_tau = transf_yukovski(a, tt)\n", 918 | " XX_tau, YY_tau = np.real(Puntos_plano_tau) , np.imag(Puntos_plano_tau)\n", 919 | " \n", 920 | " #Se pinta\n", 921 | " fig, ax = plt.subplots(1,2)\n", 922 | " \n", 923 | " #coeficiente de presión\n", 924 | " fig.set_size_inches(15,15)\n", 925 | " \n", 926 | " ax[0].contourf(XX, YY, cp, 200, cmap=plt.cm.RdBu)\n", 927 | " ax[0].grid()\n", 928 | " ax[0].set_aspect(1)\n", 929 | " p = plt.Polygon(list(zip(Xc, Yc)), color=\"#cccccc\", zorder=10)\n", 930 | " ax[0].add_patch(p)\n", 931 | " ax[0].set_xlim(-5, 5)\n", 932 | " ax[0].set_ylim(-3,3)\n", 933 | " \n", 934 | " ax[1].contourf(XX_tau, YY_tau, cp, 200, cmap=plt.cm.RdBu)\n", 935 | " ax[1].grid()\n", 936 | " ax[1].set_aspect(1)\n", 937 | " p = plt.Polygon(list(zip(Xp, Yp)), color=\"#cccccc\", zorder=10)\n", 938 | " ax[1].add_patch(p)\n", 939 | " ax[1].set_xlim(-5, 5)\n", 940 | " ax[1].set_ylim(-3,3)\n", 941 | " \n", 942 | " plt.show()" 943 | ] 944 | }, 945 | { 946 | "cell_type": "code", 947 | "execution_count": 9, 948 | "metadata": { 949 | "slideshow": { 950 | "slide_type": "subslide" 951 | } 952 | }, 953 | "outputs": [ 954 | { 955 | "data": { 956 | "application/vnd.jupyter.widget-view+json": { 957 | "model_id": "e8bcd9f54105466fa569f19f54372aa6", 958 | "version_major": 2, 959 | "version_minor": 0 960 | }, 961 | "text/html": [ 962 | "

Failed to display Jupyter Widget of type interactive.

\n", 963 | "

\n", 964 | " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", 965 | " that the widgets JavaScript is still loading. If this message persists, it\n", 966 | " likely means that the widgets JavaScript library is either not installed or\n", 967 | " not enabled. See the Jupyter\n", 968 | " Widgets Documentation for setup instructions.\n", 969 | "

\n", 970 | "

\n", 971 | " If you're reading this message in another frontend (for example, a static\n", 972 | " rendering on GitHub or NBViewer),\n", 973 | " it may mean that your frontend doesn't currently support widgets.\n", 974 | "

\n" 975 | ], 976 | "text/plain": [ 977 | "interactive(children=(FloatSlider(value=0.5, description='landa', max=1.0), FloatSlider(value=0.5, description='delta', max=1.0), IntSlider(value=15, description='alfa', max=30), IntSlider(value=1, description='U', max=10), IntSlider(value=100, description='N_malla', max=300, min=-100), Output()), _dom_classes=('widget-interact',))" 978 | ] 979 | }, 980 | "metadata": {}, 981 | "output_type": "display_data" 982 | } 983 | ], 984 | "source": [ 985 | "interact(cp_perfil_circunferencia, landa=(0.,1), delta=(0.,1), alfa=(0, 30), U=(0,10));" 986 | ] 987 | }, 988 | { 989 | "cell_type": "markdown", 990 | "metadata": { 991 | "slideshow": { 992 | "slide_type": "subslide" 993 | } 994 | }, 995 | "source": [ 996 | "## ¿Cómo puede ayudarte la programación para encontrar trabajo?" 997 | ] 998 | }, 999 | { 1000 | "cell_type": "markdown", 1001 | "metadata": { 1002 | "slideshow": { 1003 | "slide_type": "fragment" 1004 | } 1005 | }, 1006 | "source": [ 1007 | "
" 1008 | ] 1009 | }, 1010 | { 1011 | "cell_type": "markdown", 1012 | "metadata": { 1013 | "slideshow": { 1014 | "slide_type": "subslide" 1015 | } 1016 | }, 1017 | "source": [ 1018 | "* Perfil más fuerte." 1019 | ] 1020 | }, 1021 | { 1022 | "cell_type": "markdown", 1023 | "metadata": { 1024 | "slideshow": { 1025 | "slide_type": "fragment" 1026 | } 1027 | }, 1028 | "source": [ 1029 | "* Diferentes sectores." 1030 | ] 1031 | }, 1032 | { 1033 | "cell_type": "markdown", 1034 | "metadata": { 1035 | "slideshow": { 1036 | "slide_type": "fragment" 1037 | } 1038 | }, 1039 | "source": [ 1040 | "* Diferentes trabajos." 1041 | ] 1042 | }, 1043 | { 1044 | "cell_type": "markdown", 1045 | "metadata": { 1046 | "slideshow": { 1047 | "slide_type": "fragment" 1048 | } 1049 | }, 1050 | "source": [ 1051 | "* Visibilidad." 1052 | ] 1053 | }, 1054 | { 1055 | "cell_type": "markdown", 1056 | "metadata": { 1057 | "slideshow": { 1058 | "slide_type": "subslide" 1059 | } 1060 | }, 1061 | "source": [ 1062 | "## Y una vez que tengo trabajo..." 1063 | ] 1064 | }, 1065 | { 1066 | "cell_type": "markdown", 1067 | "metadata": { 1068 | "slideshow": { 1069 | "slide_type": "fragment" 1070 | } 1071 | }, 1072 | "source": [ 1073 | "
" 1074 | ] 1075 | }, 1076 | { 1077 | "cell_type": "markdown", 1078 | "metadata": { 1079 | "slideshow": { 1080 | "slide_type": "subslide" 1081 | } 1082 | }, 1083 | "source": [ 1084 | "* Automatización de tareas." 1085 | ] 1086 | }, 1087 | { 1088 | "cell_type": "markdown", 1089 | "metadata": { 1090 | "slideshow": { 1091 | "slide_type": "fragment" 1092 | } 1093 | }, 1094 | "source": [ 1095 | "* Manejo de datos." 1096 | ] 1097 | }, 1098 | { 1099 | "cell_type": "markdown", 1100 | "metadata": { 1101 | "slideshow": { 1102 | "slide_type": "fragment" 1103 | } 1104 | }, 1105 | "source": [ 1106 | "* Visualización." 1107 | ] 1108 | }, 1109 | { 1110 | "cell_type": "markdown", 1111 | "metadata": { 1112 | "slideshow": { 1113 | "slide_type": "fragment" 1114 | } 1115 | }, 1116 | "source": [ 1117 | "* Optimización." 1118 | ] 1119 | }, 1120 | { 1121 | "cell_type": "markdown", 1122 | "metadata": { 1123 | "slideshow": { 1124 | "slide_type": "fragment" 1125 | } 1126 | }, 1127 | "source": [ 1128 | "* Tests." 1129 | ] 1130 | }, 1131 | { 1132 | "cell_type": "markdown", 1133 | "metadata": { 1134 | "slideshow": { 1135 | "slide_type": "subslide" 1136 | } 1137 | }, 1138 | "source": [ 1139 | "## En conclusión" 1140 | ] 1141 | }, 1142 | { 1143 | "cell_type": "markdown", 1144 | "metadata": { 1145 | "slideshow": { 1146 | "slide_type": "fragment" 1147 | } 1148 | }, 1149 | "source": [ 1150 | "
" 1151 | ] 1152 | }, 1153 | { 1154 | "cell_type": "markdown", 1155 | "metadata": { 1156 | "slideshow": { 1157 | "slide_type": "subslide" 1158 | } 1159 | }, 1160 | "source": [ 1161 | "```PYTHON\n", 1162 | "import antigravity\n", 1163 | "```" 1164 | ] 1165 | }, 1166 | { 1167 | "cell_type": "markdown", 1168 | "metadata": { 1169 | "slideshow": { 1170 | "slide_type": "fragment" 1171 | } 1172 | }, 1173 | "source": [ 1174 | "
\n", 1175 | "\n", 1176 | "
__Fuente:__ _XKCD_" 1177 | ] 1178 | }, 1179 | { 1180 | "cell_type": "markdown", 1181 | "metadata": { 1182 | "slideshow": { 1183 | "slide_type": "slide" 1184 | } 1185 | }, 1186 | "source": [ 1187 | "# ¿Qué hacemos en AeroPython?" 1188 | ] 1189 | }, 1190 | { 1191 | "cell_type": "markdown", 1192 | "metadata": { 1193 | "slideshow": { 1194 | "slide_type": "subslide" 1195 | } 1196 | }, 1197 | "source": [ 1198 | "\n", 1199 | "
" 1200 | ] 1201 | }, 1202 | { 1203 | "cell_type": "markdown", 1204 | "metadata": { 1205 | "slideshow": { 1206 | "slide_type": "subslide" 1207 | } 1208 | }, 1209 | "source": [ 1210 | "Poliastro es un paquete de Python programado principalmente por Juan Luis Cano, el Aeropythonero Primigenio. \n", 1211 | "\n", 1212 | "El objetivo es tener un paquete totalmente en Python capaz de hacer cálculos astrodinámicos en un tiempo razonable.\n", 1213 | "\n", 1214 | "Podemos echar un vistazo a su documentación... http://docs.poliastro.space/en/latest/\n", 1215 | "\n", 1216 | "Además, este año participó en el Summer of Code de la Agencia Espacial Europea (SOCIS), un programa parecido al de Google que otorga becas a estudiantes para desarrollar código abierto en verano." 1217 | ] 1218 | }, 1219 | { 1220 | "cell_type": "markdown", 1221 | "metadata": { 1222 | "slideshow": { 1223 | "slide_type": "slide" 1224 | } 1225 | }, 1226 | "source": [ 1227 | "## Analizando una base de datos de seguridad aérea" 1228 | ] 1229 | }, 1230 | { 1231 | "cell_type": "markdown", 1232 | "metadata": { 1233 | "slideshow": { 1234 | "slide_type": "subslide" 1235 | } 1236 | }, 1237 | "source": [ 1238 | "Python dispone de numerosas herramientas para analizar, modelizar y representar datos:\n", 1239 | "\n", 1240 | "- Pandas\n", 1241 | "- Matplotlib\n", 1242 | "- Bokeh\n", 1243 | "- Scikit-learn\n", 1244 | "- ..." 1245 | ] 1246 | }, 1247 | { 1248 | "cell_type": "markdown", 1249 | "metadata": { 1250 | "slideshow": { 1251 | "slide_type": "subslide" 1252 | } 1253 | }, 1254 | "source": [ 1255 | "
" 1256 | ] 1257 | }, 1258 | { 1259 | "cell_type": "markdown", 1260 | "metadata": { 1261 | "slideshow": { 1262 | "slide_type": "subslide" 1263 | } 1264 | }, 1265 | "source": [ 1266 | "
" 1267 | ] 1268 | }, 1269 | { 1270 | "cell_type": "markdown", 1271 | "metadata": { 1272 | "slideshow": { 1273 | "slide_type": "subslide" 1274 | } 1275 | }, 1276 | "source": [ 1277 | "
" 1278 | ] 1279 | }, 1280 | { 1281 | "cell_type": "markdown", 1282 | "metadata": { 1283 | "slideshow": { 1284 | "slide_type": "subslide" 1285 | } 1286 | }, 1287 | "source": [ 1288 | "
" 1289 | ] 1290 | }, 1291 | { 1292 | "cell_type": "markdown", 1293 | "metadata": { 1294 | "slideshow": { 1295 | "slide_type": "subslide" 1296 | } 1297 | }, 1298 | "source": [ 1299 | "
" 1300 | ] 1301 | }, 1302 | { 1303 | "cell_type": "markdown", 1304 | "metadata": { 1305 | "slideshow": { 1306 | "slide_type": "subslide" 1307 | } 1308 | }, 1309 | "source": [ 1310 | "
" 1311 | ] 1312 | }, 1313 | { 1314 | "cell_type": "markdown", 1315 | "metadata": { 1316 | "slideshow": { 1317 | "slide_type": "slide" 1318 | } 1319 | }, 1320 | "source": [ 1321 | "## `PyFME`\n", 1322 | ".\n", 1323 | "\n", 1324 | "
" 1325 | ] 1326 | }, 1327 | { 1328 | "cell_type": "markdown", 1329 | "metadata": { 1330 | "slideshow": { 1331 | "slide_type": "subslide" 1332 | } 1333 | }, 1334 | "source": [ 1335 | "# Python Flight Mechanics Engine\n", 1336 | "\n", 1337 | "Objetivos:\n", 1338 | "\n", 1339 | "* Desarrollar un motor de Dinámica de Vuelo\n", 1340 | "* Que incluya múltiples aeronaves con diferenctes modelos aerodinámicos\n", 1341 | "* Que permita utilizar distintos sistemas dinámicos\n", 1342 | "* Estudios numéricos\n", 1343 | "* Teoría de Control: AP, SAS...\n", 1344 | "* Interactuar con algún motor gráfico" 1345 | ] 1346 | }, 1347 | { 1348 | "cell_type": "markdown", 1349 | "metadata": { 1350 | "slideshow": { 1351 | "slide_type": "subslide" 1352 | } 1353 | }, 1354 | "source": [ 1355 | "### De momento\n", 1356 | "\n", 1357 | "Sentando unas bases sólidas y validadas" 1358 | ] 1359 | }, 1360 | { 1361 | "cell_type": "markdown", 1362 | "metadata": { 1363 | "slideshow": { 1364 | "slide_type": "fragment" 1365 | } 1366 | }, 1367 | "source": [ 1368 | "
" 1369 | ] 1370 | }, 1371 | { 1372 | "cell_type": "markdown", 1373 | "metadata": { 1374 | "slideshow": { 1375 | "slide_type": "subslide" 1376 | } 1377 | }, 1378 | "source": [ 1379 | "
" 1380 | ] 1381 | }, 1382 | { 1383 | "cell_type": "markdown", 1384 | "metadata": { 1385 | "slideshow": { 1386 | "slide_type": "subslide" 1387 | } 1388 | }, 1389 | "source": [ 1390 | "
" 1391 | ] 1392 | }, 1393 | { 1394 | "cell_type": "markdown", 1395 | "metadata": { 1396 | "slideshow": { 1397 | "slide_type": "subslide" 1398 | } 1399 | }, 1400 | "source": [ 1401 | "
" 1402 | ] 1403 | }, 1404 | { 1405 | "cell_type": "markdown", 1406 | "metadata": { 1407 | "slideshow": { 1408 | "slide_type": "slide" 1409 | } 1410 | }, 1411 | "source": [ 1412 | "### Si te ha gustado todo esto" 1413 | ] 1414 | }, 1415 | { 1416 | "cell_type": "markdown", 1417 | "metadata": { 1418 | "slideshow": { 1419 | "slide_type": "fragment" 1420 | } 1421 | }, 1422 | "source": [ 1423 | "## te motiva tener más herramientas y oportunidades a tu alcance" 1424 | ] 1425 | }, 1426 | { 1427 | "cell_type": "markdown", 1428 | "metadata": { 1429 | "slideshow": { 1430 | "slide_type": "fragment" 1431 | } 1432 | }, 1433 | "source": [ 1434 | "# ¡anímate a participar!" 1435 | ] 1436 | }, 1437 | { 1438 | "cell_type": "markdown", 1439 | "metadata": { 1440 | "slideshow": { 1441 | "slide_type": "subslide" 1442 | } 1443 | }, 1444 | "source": [ 1445 | "# ¿Qué necesitas?\n", 1446 | "\n", 1447 | "* Interés por la programación (no hacen falta conocimiento previos de Python)\n", 1448 | "* Ganas poner en práctica tus conocimientos de Ingeniería" 1449 | ] 1450 | }, 1451 | { 1452 | "cell_type": "markdown", 1453 | "metadata": { 1454 | "slideshow": { 1455 | "slide_type": "subslide" 1456 | } 1457 | }, 1458 | "source": [ 1459 | "# ¿En qué podría ayudaros si todavía no sé mucho?\n", 1460 | "\n", 1461 | "* Organiza un curso, habla con tu delegación, háznoslo saber\n", 1462 | "* En los proyectos:\n", 1463 | " - casos de test\n", 1464 | " - documentación\n", 1465 | " - artículos de blog\n", 1466 | " - implementación de modelos sencillos\n", 1467 | " - ¿tienes una idea? nuevos proyectos " 1468 | ] 1469 | }, 1470 | { 1471 | "cell_type": "markdown", 1472 | "metadata": { 1473 | "slideshow": { 1474 | "slide_type": "slide" 1475 | } 1476 | }, 1477 | "source": [ 1478 | "# Contacto\n", 1479 | "\n", 1480 | "* Telegram: https://t.me/AeroPython\n", 1481 | "* Twitter: https://twitter.com/aeropython\n", 1482 | "* GitHub: https://github.com/aeropython\n", 1483 | "* Email: aeropython@gmail.com\n", 1484 | "* ¡Acércate y pregúntanos!" 1485 | ] 1486 | }, 1487 | { 1488 | "cell_type": "markdown", 1489 | "metadata": { 1490 | "slideshow": { 1491 | "slide_type": "slide" 1492 | } 1493 | }, 1494 | "source": [ 1495 | " \n", 1496 | "# ¡Muchas gracias!\n", 1497 | "\n", 1498 | "
\n", 1499 | "\n", 1500 | "###### Mabel Delgado, Jesús Martos, Siro Moreno, Alejandro Sáez" 1501 | ] 1502 | }, 1503 | { 1504 | "cell_type": "code", 1505 | "execution_count": 1, 1506 | "metadata": { 1507 | "slideshow": { 1508 | "slide_type": "skip" 1509 | } 1510 | }, 1511 | "outputs": [ 1512 | { 1513 | "data": { 1514 | "text/html": [ 1515 | "\n", 1516 | "\n", 1517 | "\n", 1518 | "\n", 1626 | "\n" 1642 | ], 1643 | "text/plain": [ 1644 | "" 1645 | ] 1646 | }, 1647 | "execution_count": 1, 1648 | "metadata": {}, 1649 | "output_type": "execute_result" 1650 | } 1651 | ], 1652 | "source": [ 1653 | "# preserve\n", 1654 | "from IPython.core.display import HTML\n", 1655 | "css_file = 'styles/style.css'\n", 1656 | "HTML(open(css_file, \"r\").read())" 1657 | ] 1658 | } 1659 | ], 1660 | "metadata": { 1661 | "celltoolbar": "Slideshow", 1662 | "kernelspec": { 1663 | "display_name": "Python 3", 1664 | "language": "python", 1665 | "name": "python3" 1666 | }, 1667 | "language_info": { 1668 | "codemirror_mode": { 1669 | "name": "ipython", 1670 | "version": 3 1671 | }, 1672 | "file_extension": ".py", 1673 | "mimetype": "text/x-python", 1674 | "name": "python", 1675 | "nbconvert_exporter": "python", 1676 | "pygments_lexer": "ipython3", 1677 | "version": "3.6.3" 1678 | } 1679 | }, 1680 | "nbformat": 4, 1681 | "nbformat_minor": 2 1682 | } 1683 | --------------------------------------------------------------------------------