{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Introducción\n", "\n", "> \"Sometimes I think, how lucky we are to live in this time, the first moment in human history when we are, in fact visiting other worlds and engaging in a deep reconnaissance of the cosmos\" — Carl Sagan\n", "\n", "Cuando aún resonaban los ecos de la «expulsión» de Plutón de nuestro sistema planetario (o más bien, de su descenso a la división de los planetas enanos), de repente dos científicos del Instituto de Tecnología de California (Caltech para los amigos) publican un artículo en el que **hipotetizan la existencia de un planeta más masivo que la Tierra mucho más allá de la órbita de Neptuno**. Batygin y Brown, los responsables de la investigación, han bautizado a su _aún no observado_ descubrimiento como **Planeta Nueve**. No he podido evitar acordarme de la cita de Carl Sagan mientras escribía este artículo :)\n", "\n", "Para los detalles de este fantástico avance y un análisis de sus implicaciones os remito a [los excelentes artículos de Daniel Marín en Eurekablog acerca del \"Planeta Nueve\"](http://danielmarin.naukas.com/2016/01/20/estrechando-el-cerco-alrededor-del-planeta-x/). En Pybonacci vamos a aportar nuestro granito de arena, y como apasionados de la astronomía y del software libre que somos, vamos a darle una pasada al [artículo original de Batygin y Brown](http://iopscience.iop.org/article/10.3847/0004-6256/151/2/22/pdf) (disponible libremente en PDF) y jugar con los datos que ofrece como más nos gusta: usando Python ;)\n", "\n", "**Nota**: El análisis que se plantea a continuación no tiene el debido rigor científico y en ningún caso debe tomarse como un punto de partida para una búsqueda seria del Planeta Nueve. Dicho lo cual, si alguien lo encuentra gracias a este artículo por lo menos que me invite a un café :D" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Python + Órbitas = poliastro\n", "\n", "Para este análisis vamos a utilizar [poliastro, una biblioteca Python para astrodinámica interplanetaria](http://poliastro.readthedocs.org/) que yo mismo estoy desarrollando. poliastro nos permitirá hacer cálculos con los elementos orbitales de los cuerpos que analicemos, y sus dependencias nos ayudarán en la tarea:\n", "\n", "* Gracias a [astropy](http://astropy.org/) podremos hacer conversiones entre sistemas de referencia, utilizar unidades físicas y manejar tiempos con rigor astronómico ([algo nada fácil](https://twitter.com/astrojuanlu/status/686168336330272768)).\n", "* La biblioteca [jplephem](https://pypi.python.org/pypi/jplephem) nos permitirá utilizar las efemérides del [Jet Propulsion Laboratory de la NASA](http://www.jpl.nasa.gov/) para localizar la posición de los planetas.\n", "\n", "Además, y como es natural utilizaremos NumPy, SciPy y matplotlib. Para instalar todo lo necesario solo necesitas ejecutar un comando:\n", "\n", " $ conda install poliastro --channel poliastro\n", "\n", "Y también usando pip (porque en el fondo me caéis bien):\n", "\n", " $ pip install numpy scipy matplotlib astropy jplephem poliastro\n", "\n", "(Nótese que numba es opcional)\n", "\n", "**Sin embargo**, escribiendo este artículo me he encontrado con cosas que no funcionaban y que he tenido que arreglar sobre la marcha, así que utilizaré una rama de desarrollo con algunos arreglos temporales:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fetching package metadata: ..........\n", "Solving package specifications: ............................................\n", "# All requested packages already installed.\n", "# packages in environment at /home/juanlu/.miniconda3/envs/planet9:\n", "#\n", "poliastro 0.4.3 py35_1 file:///home/juanlu/.miniconda3/conda-bld/linux-64/poliastro-0.4.3-py35_1.tar.bz2\n" ] } ], "source": [ "!conda install -qy poliastro --channel poliastro # Instala las dependencias con conda" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Uninstalling poliastro-0.5.dev0:\n", " Successfully uninstalled poliastro-0.5.dev0\n", "\u001b[33mYou are using pip version 8.0.1, however version 8.0.2 is available.\n", "You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n" ] } ], "source": [ "!pip uninstall poliastro -y" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collecting https://github.com/poliastro/poliastro/archive/planet9-fixes.zip\n", " Downloading https://github.com/poliastro/poliastro/archive/planet9-fixes.zip\n", "\u001b[K / 966kB 14.7MB/s\n", "Requirement already satisfied (use --upgrade to upgrade): numpy in /home/juanlu/.miniconda3/envs/planet9/lib/python3.5/site-packages (from poliastro==0.5.dev0)\n", "Requirement already satisfied (use --upgrade to upgrade): numba>=0.23 in /home/juanlu/.miniconda3/envs/planet9/lib/python3.5/site-packages (from poliastro==0.5.dev0)\n", "Requirement already satisfied (use --upgrade to upgrade): astropy>=1.0 in /home/juanlu/.miniconda3/envs/planet9/lib/python3.5/site-packages (from poliastro==0.5.dev0)\n", "Requirement already satisfied (use --upgrade to upgrade): matplotlib in /home/juanlu/.miniconda3/envs/planet9/lib/python3.5/site-packages (from poliastro==0.5.dev0)\n", "Requirement already satisfied (use --upgrade to upgrade): jplephem in /home/juanlu/.miniconda3/envs/planet9/lib/python3.5/site-packages (from poliastro==0.5.dev0)\n", "Requirement already satisfied (use --upgrade to upgrade): scipy in /home/juanlu/.miniconda3/envs/planet9/lib/python3.5/site-packages (from poliastro==0.5.dev0)\n", "Requirement already satisfied (use --upgrade to upgrade): llvmlite in /home/juanlu/.miniconda3/envs/planet9/lib/python3.5/site-packages (from numba>=0.23->poliastro==0.5.dev0)\n", "Requirement already satisfied (use --upgrade to upgrade): python-dateutil in /home/juanlu/.miniconda3/envs/planet9/lib/python3.5/site-packages (from matplotlib->poliastro==0.5.dev0)\n", "Requirement already satisfied (use --upgrade to upgrade): pytz in /home/juanlu/.miniconda3/envs/planet9/lib/python3.5/site-packages (from matplotlib->poliastro==0.5.dev0)\n", "Requirement already satisfied (use --upgrade to upgrade): cycler in /home/juanlu/.miniconda3/envs/planet9/lib/python3.5/site-packages (from matplotlib->poliastro==0.5.dev0)\n", "Requirement already satisfied (use --upgrade to upgrade): pyparsing!=2.0.4,>=1.5.6 in /home/juanlu/.miniconda3/envs/planet9/lib/python3.5/site-packages (from matplotlib->poliastro==0.5.dev0)\n", "Requirement already satisfied (use --upgrade to upgrade): six>=1.5 in /home/juanlu/.miniconda3/envs/planet9/lib/python3.5/site-packages (from python-dateutil->matplotlib->poliastro==0.5.dev0)\n", "Building wheels for collected packages: poliastro\n", " Running setup.py bdist_wheel for poliastro ... \u001b[?25l-\b \b\\\b \b|\b \bdone\n", "\u001b[?25h Stored in directory: /home/juanlu/.cache/pip/wheels/98/83/5a/a5215dd3aaeec3828aca873c4342bc05b4b53605e31c1d1d60\n", "Successfully built poliastro\n", "Installing collected packages: poliastro\n", "Successfully installed poliastro-0.5.dev0\n", "\u001b[33mYou are using pip version 8.0.1, however version 8.0.2 is available.\n", "You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n" ] } ], "source": [ "#!pip install -e /home/juanlu/Development/Python/poliastro.org/poliastro\n", "!pip install https://github.com/poliastro/poliastro/archive/planet9-fixes.zip # Instala la versión de desarrollo" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%load_ext version_information" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "application/json": { "Software versions": [ { "module": "Python", "version": "3.5.1 64bit [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]" }, { "module": "IPython", "version": "4.0.3" }, { "module": "OS", "version": "Linux 4.3.3 3 ARCH x86_64 with arch" }, { "module": "numpy", "version": "1.10.2" }, { "module": "astropy", "version": "1.1.1" }, { "module": "scipy", "version": "0.16.1" }, { "module": "matplotlib", "version": "1.5.1" }, { "module": "numba", "version": "0.23.1" }, { "module": "poliastro", "version": "0.5.dev0" } ] }, "text/html": [ "
Software | Version |
---|---|
Python | 3.5.1 64bit [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] |
IPython | 4.0.3 |
OS | Linux 4.3.3 3 ARCH x86_64 with arch |
numpy | 1.10.2 |
astropy | 1.1.1 |
scipy | 0.16.1 |
matplotlib | 1.5.1 |
numba | 0.23.1 |
poliastro | 0.5.dev0 |
Tue Jan 26 23:27:16 2016 CET |