{ "metadata": { "name": "", "signature": "sha256:e4513bdb84005269853d97f869178f2ee1c04a39ff4c77fdb29dfbe15878f897" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Como acceder con Python mediante SQL al Sloan Digital Sky Survey (SDSS)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Autor: [Eduardo Mart\u00edn Calleja](http://balbuceosastropy.blogspot.com.es/)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En esta entrada vamos a ver un m\u00e9todo muy sencillo de ejecutar sentencias SQL sobre el servidor del Sloan Digital Sky Survey (SDSS). De esta manera podremos obtener una gran cantidad de datos acerca de todo tipo de objetos celestes.\n", "\n", "Este post est\u00e1 escrito \u00edntegramente utilizando el Notebook de IPython. Tambi\u00e9n se utilizar\u00e1 el m\u00f3dulo [mechanize](https://pypi.python.org/pypi/mechanize/) de Python para navegar por la web y ejecutar de forma interactiva formularios HTML. Ir\u00e9 explicando en detalle cada uno de los pasos, y al final har\u00e9 un resumen para evitar que nos perdamos en los detalles y mostrar la facilidad de utilizaci\u00f3n del m\u00e9todo utilizado." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Importaciones y referencias" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para una introducci\u00f3n a la ejecuci\u00f3n de peticiones SQL sobre el SDSS no se me ocurre mejor recurso que su propio [tutorial](http://skyserver.sdss3.org/dr10/en/help/howto/search/searchhowtohome.aspx), junto con su complemento de ejemplos: [Sample SQL Queries](http://skyserver.sdss3.org/dr10/en/help/docs/realquery.aspx)\n", "\n", "Para ver que tablas y vistas existen en la base de datos, y qu\u00e9 informaci\u00f3n hay disponible en cada una de ellas, una herramienta imprescindible ser\u00e1: [Schema Browser](http://skyserver.sdss3.org/dr10/en/help/browser/browser.aspx)\n", "\n", "Y, para ejecutar de forma interactiva un SQL contra la base de datos del SDSS, accedase a la p\u00e1gina: [SQL Search](http://skyserver.sdss3.org/dr10/en/tools/search/sql.aspx)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "\n", "from __future__ import division\n", "\n", "import numpy as np\n", "import pandas as pd\n", "import mechanize\n", "from StringIO import StringIO # Para leer un string como si fuera un fichero\n", "\n", "# Generar un cuadro con versiones de las librer\u00edas utilizadas en este notebook\n", "#https://github.com/jrjohansson/version_information\n", "%load_ext version_information\n", "%version_information numpy, pandas, StringIO" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
SoftwareVersion
Python2.7.9 64bit [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]
IPython2.3.1
OSLinux 3.13.0 44 generic x86_64 with debian jessie sid
numpy1.9.1
pandas0.15.2
StringIOStringIO
Fri Jan 23 12:06:07 2015 CET
" ], "json": [ "{\"Software versions\": [{\"version\": \"2.7.9 64bit [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]\", \"module\": \"Python\"}, {\"version\": \"2.3.1\", \"module\": \"IPython\"}, {\"version\": \"Linux 3.13.0 44 generic x86_64 with debian jessie sid\", \"module\": \"OS\"}, {\"version\": \"1.9.1\", \"module\": \"numpy\"}, {\"version\": \"0.15.2\", \"module\": \"pandas\"}, {\"version\": \"StringIO\", \"module\": \"StringIO\"}]}" ], "latex": [ "\\begin{tabular}{|l|l|}\\hline\n", "{\\bf Software} & {\\bf Version} \\\\ \\hline\\hline\n", "Python & 2.7.9 64bit [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] \\\\ \\hline\n", "IPython & 2.3.1 \\\\ \\hline\n", "OS & Linux 3.13.0 44 generic x86\\_64 with debian jessie sid \\\\ \\hline\n", "numpy & 1.9.1 \\\\ \\hline\n", "pandas & 0.15.2 \\\\ \\hline\n", "StringIO & StringIO \\\\ \\hline\n", "\\hline \\multicolumn{2}{|l|}{Fri Jan 23 12:06:07 2015 CET} \\\\ \\hline\n", "\\end{tabular}\n" ], "metadata": {}, "output_type": "pyout", "prompt_number": 1, "text": [ "Software versions\n", "Python 2.7.9 64bit [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]\n", "IPython 2.3.1\n", "OS Linux 3.13.0 44 generic x86_64 with debian jessie sid\n", "numpy 1.9.1\n", "pandas 0.15.2\n", "StringIO StringIO\n", "Fri Jan 23 12:06:07 2015 CET" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "# URL de la p\u00e1gina de b\u00fasquedas de la base de datos DR10\n", "url = \"http://skyserver.sdss3.org/dr10/en/tools/search/sql.aspx\"" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Preparaci\u00f3n del SQL" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Antes de comenzar a interactuar desde Python con la p\u00e1gina web del SDSS que nos permite enviar una sentencia SQL a su base de datos, vamos a preparar un SQL de prueba en una variable de tipo string. En este SQL buscaremos 10 objetos (\u00a1se trata de una prueba!) de tipo 6 = 'STAR', con fotometr\u00eda l\u00edmpia y color azul, en una regi\u00f3n del cielo determinada. Eso si, debemos omitir las l\u00edneas con comentarios en el SQL (aquellas precedidas de doble gui\u00f3n --) al crear el fichero.\n", "\n", "**Nota**: En una pr\u00f3xima entrada en este blog, se ver\u00e1 cuales son las tablas (o vistas) y campos m\u00e1s \u00fatiles para construir nuestras SELECT." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Como el string a generar ocupa m\u00e1s de una l\u00ednea\n", "#Utilizamos par\u00e9ntesis para concatenar autom\u00e1ticamente las l\u00edneas\n", "\n", "s = ('SELECT TOP 10 '\n", " 'objID, ra, dec, modelMag_u, modelMag_g '\n", "'FROM '\n", " 'PhotoPrimary '\n", "'WHERE '\n", " 'ra BETWEEN 140 and 141 '\n", " 'AND dec BETWEEN 20 and 21 '\n", " 'AND type = 6 '\n", " 'AND clean = 1 '\n", " 'AND modelMag_u - modelMag_g < 0.5')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "# Comprobaci\u00f3n:\n", "s" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ "'SELECT TOP 10 objID, ra, dec, modelMag_u, modelMag_g FROM PhotoPrimary WHERE ra BETWEEN 140 and 141 AND dec BETWEEN 20 and 21 AND type = 6 AND clean = 1 AND modelMag_u - modelMag_g < 0.5'" ] } ], "prompt_number": 4 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Navegaci\u00f3n con el m\u00f3dulo mechanize" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El primer paso para utilizar *mechanize* ser\u00e1 crear un objeto tipo Browser para poder hacer la navegaci\u00f3n utilizando sus m\u00e9todos" ] }, { "cell_type": "code", "collapsed": false, "input": [ "br = mechanize.Browser()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "A continuaci\u00f3n, debemos abrir una sesi\u00f3n con el url que apunta a la p\u00e1gina web del SDSS que nos permite hacer las b\u00fasquedas SQL:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "resp = br.open(url)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "resp.info()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ "" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cuando se desea interactuar con una p\u00e1gina web, estaremos interesados en conocer los formularios HTML que contiene. Un formulario HTML es una secci\u00f3n del documento comprendida entre las etiquetas:\n", "\n", "
y
\n", "\n", "Un formulario contiene una serie de objetos especiales denominados controles, tales como checkboxes, radio buttons, menus, etc. y labels de estos objetos. El usuario interactua con la p\u00e1gina modificando un control, por ejemplo seleccionando una opci\u00f3n, introduciendo un texto en un campo, etc. y haciendo un env\u00edo de dicho form al servidor.\n", "\n", "Cada form en la p\u00e1gina tiene un nombre, si bien este puede en algunos casos estar vac\u00edo. Para listar estos nombres de los formularios existentes en la p\u00e1gina podemos escribir:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for f in br.forms():\n", " print f.name" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "sql\n" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Es decir, en este caso hay un \u00fanico form en la p\u00e1gina, de nombre \"sql\"\n", "\n", "A su vez, cada formulario posee una lista de controles, que tambien poseen un nombre, el cual tambi\u00e9n puede estar en blanco. Para listar los formularios en la p\u00e1gina, junto con sus controles y tipo de cada control, podemos hacer lo siguiente:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for f in br.forms():\n", " print f.name\n", " for c in f.controls:\n", " print '\\t',c.name, '\\t', c.type" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "sql\n", "\tclear \tbutton\n", "\tcmd \ttextarea\n", "\tNone \tsubmit\n", "\tsyntax \tcheckbox\n", "\tformat \tradio\n", "\treset \treset\n" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Centraremos nuestra atenci\u00f3n en el control \"cmd\" que es un control de texto en el cual debemos escribir nuestro SQL, y el control \"format\" que, tal como se puede ver en la p\u00e1gina web en el navegador, permite controlar el tipo de salida deseada: HTML, XML, CSV, etc. Para poder acceder a estos controles debemos seleccionar previamente el formulario al cual pertenecen:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "br.select_form(name=\"sql\")" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "A continuaci\u00f3n, modificaremos el control 'cmd' para introducir nuestro SQL, y el control 'format', para seleccionar la salida en formato csv. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "br['cmd'] = s # El string con el sql\n", "br['format']=['csv'] # formato de salida de los datos\n", "response = br.submit()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "El contenido del fichero csv con la respuesta del sql podemos obtenerlo como un string con el m\u00e9todo get_data()" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print response.get_data()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "#Table1\n", "objID,ra,dec,modelMag_u,modelMag_g\n", "1237667293189833237,140.000264887516,20.3528168302492,23.27699,23.07312\n", "1237667293189833455,140.001621936922,20.4298007848266,23.79515,24.28631\n", "1237667293189832757,140.003651871714,20.2546305174986,24.7036,24.82169\n", "1237667430093553674,140.004909940259,20.1719995965921,24.04017,24.81654\n", "1237667430093488938,140.009035667549,20.0174593142685,23.4923,23.47844\n", "1237667430093488288,140.010686497758,20.0781480229235,19.89794,19.64356\n", "1237667209974448712,140.011074894392,20.9763084088396,22.70029,22.85815\n", "1237667430093554008,140.012379856521,20.1469377004989,23.12733,22.86493\n", "1237667209974448933,140.013140656439,20.9086701836405,23.96772,24.16748\n", "1237667430093488949,140.013238349062,20.0312906376057,24.73975,25.34514\n", "\n" ] } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pero, \u00a1atenci\u00f3n!, el m\u00e9todo submit() cierra la sesi\u00f3n, por lo que, para enviar otro SQL habr\u00e1 que repetir el br.open() y el br.select()\n", "\n", "A continuaci\u00f3n, y con el fin de poder tratar los datos con m\u00e1s facilidad, lo m\u00e1s aconsejable es generar un dataframe de Pandas. Observemos que la primera l\u00ednea debe ser descartada, y la segunda fila contiene los nombres de las columnas, por lo que la mantendremos en el dataframe" ] }, { "cell_type": "code", "collapsed": false, "input": [ "file_like = StringIO(response.get_data())\n", "df =pd.read_csv(file_like, skiprows = 1) # saltamos la primera l\u00ednea\n", "df" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
objIDradecmodelMag_umodelMag_g
0 1237667293189833237 140.000265 20.352817 23.27699 23.07312
1 1237667293189833455 140.001622 20.429801 23.79515 24.28631
2 1237667293189832757 140.003652 20.254631 24.70360 24.82169
3 1237667430093553674 140.004910 20.172000 24.04017 24.81654
4 1237667430093488938 140.009036 20.017459 23.49230 23.47844
5 1237667430093488288 140.010686 20.078148 19.89794 19.64356
6 1237667209974448712 140.011075 20.976308 22.70029 22.85815
7 1237667430093554008 140.012380 20.146938 23.12733 22.86493
8 1237667209974448933 140.013141 20.908670 23.96772 24.16748
9 1237667430093488949 140.013238 20.031291 24.73975 25.34514
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ " objID ra dec modelMag_u modelMag_g\n", "0 1237667293189833237 140.000265 20.352817 23.27699 23.07312\n", "1 1237667293189833455 140.001622 20.429801 23.79515 24.28631\n", "2 1237667293189832757 140.003652 20.254631 24.70360 24.82169\n", "3 1237667430093553674 140.004910 20.172000 24.04017 24.81654\n", "4 1237667430093488938 140.009036 20.017459 23.49230 23.47844\n", "5 1237667430093488288 140.010686 20.078148 19.89794 19.64356\n", "6 1237667209974448712 140.011075 20.976308 22.70029 22.85815\n", "7 1237667430093554008 140.012380 20.146938 23.12733 22.86493\n", "8 1237667209974448933 140.013141 20.908670 23.96772 24.16748\n", "9 1237667430093488949 140.013238 20.031291 24.73975 25.34514" ] } ], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "A partir de aqu\u00ed podr\u00edamos renombrar las columnas dandoles un nombre m\u00e1s a nuestro gusto, y calcular una nueva columna como diferencia de las columnas u y g, la cual nos indicar\u00e1 el color del astro." ] }, { "cell_type": "code", "collapsed": false, "input": [ "df.columns = ['objID','ra','dec','u','g']\n", "df['u-g'] = df['u']-df['g']\n", "df" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
objIDradecugu-g
0 1237667293189833237 140.000265 20.352817 23.27699 23.07312 0.20387
1 1237667293189833455 140.001622 20.429801 23.79515 24.28631-0.49116
2 1237667293189832757 140.003652 20.254631 24.70360 24.82169-0.11809
3 1237667430093553674 140.004910 20.172000 24.04017 24.81654-0.77637
4 1237667430093488938 140.009036 20.017459 23.49230 23.47844 0.01386
5 1237667430093488288 140.010686 20.078148 19.89794 19.64356 0.25438
6 1237667209974448712 140.011075 20.976308 22.70029 22.85815-0.15786
7 1237667430093554008 140.012380 20.146938 23.12733 22.86493 0.26240
8 1237667209974448933 140.013141 20.908670 23.96772 24.16748-0.19976
9 1237667430093488949 140.013238 20.031291 24.73975 25.34514-0.60539
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 14, "text": [ " objID ra dec u g u-g\n", "0 1237667293189833237 140.000265 20.352817 23.27699 23.07312 0.20387\n", "1 1237667293189833455 140.001622 20.429801 23.79515 24.28631 -0.49116\n", "2 1237667293189832757 140.003652 20.254631 24.70360 24.82169 -0.11809\n", "3 1237667430093553674 140.004910 20.172000 24.04017 24.81654 -0.77637\n", "4 1237667430093488938 140.009036 20.017459 23.49230 23.47844 0.01386\n", "5 1237667430093488288 140.010686 20.078148 19.89794 19.64356 0.25438\n", "6 1237667209974448712 140.011075 20.976308 22.70029 22.85815 -0.15786\n", "7 1237667430093554008 140.012380 20.146938 23.12733 22.86493 0.26240\n", "8 1237667209974448933 140.013141 20.908670 23.96772 24.16748 -0.19976\n", "9 1237667430093488949 140.013238 20.031291 24.73975 25.34514 -0.60539" ] } ], "prompt_number": 14 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Resumen" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Una vez visto el fundamento de la utilizaci\u00f3n del m\u00f3dulo mechanize y la creaci\u00f3n de un dataframe de Pandas, podemos definir una funci\u00f3n para agilizar el proceso de nuevos SQL" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def SDSS_select(sql):\n", " '''input: string con una sentencia SQL v\u00e1lida\n", " output: un dataframe de Pandas\n", " '''\n", " br.open(url)\n", " br.select_form(name=\"sql\")\n", " br['cmd'] = sql\n", " br['format']=['csv']\n", " response = br.submit()\n", " file_like = StringIO(response.get_data())\n", " return pd.read_csv(file_like, skiprows=1)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Los pasos a seguir ser\u00e1n los siguientes:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Las instrucciones siguientes se ejecutar\u00e1n solo la primera vez:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# URL de la p\u00e1gina de b\u00fasquedas de la base de datos DR10\n", "url = \"http://skyserver.sdss3.org/dr10/en/tools/search/sql.aspx\"" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Preparamos un string con nuestro SQL" ] }, { "cell_type": "code", "collapsed": false, "input": [ "sql = ('SELECT TOP 10 '\n", "'objID, ra, dec, modelMag_u, modelMag_g, modelMag_r, modelMag_i, modelMag_z '\n", "'FROM Star '\n", "'WHERE ra BETWEEN 150 and 152 AND dec BETWEEN 30 and 31 AND clean = 1')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Llamamos a la funci\u00f3n, obteniendo un dataframe de Pandas como retorno" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df = SDSS_select(sql)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Y ya tenemos listo nuestro dataframe" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
objIDradecmodelMag_umodelMag_gmodelMag_rmodelMag_imodelMag_z
0 1237664869216289142 150.000355 30.732103 23.06350 22.79704 21.60797 21.22958 21.32821
1 1237665099003593049 150.000483 30.591703 22.71077 22.14142 21.63762 21.84505 21.44720
2 1237665098466656334 150.000711 30.105872 20.72021 18.12753 16.79675 16.08280 15.69484
3 1237665098466656330 150.000754 30.097463 22.66031 19.98154 18.61721 17.61466 17.07129
4 1237664869216289439 150.000985 30.748886 25.00283 23.08974 22.20838 21.99796 21.30983
5 1237664869216288905 150.001134 30.829336 21.41318 20.29182 19.80290 19.55658 19.49337
6 1237665129067840138 150.001698 30.483674 23.61431 22.05697 20.63076 20.13519 19.81597
7 1237665098466657196 150.002180 30.248386 25.05051 23.19651 21.70999 20.04427 19.07293
8 1237665129067840349 150.002215 30.429241 23.51003 24.00885 21.71184 21.25962 20.59406
9 1237665098466656342 150.002250 30.174147 20.84485 18.57332 17.56038 17.15493 16.93803
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 19, "text": [ " objID ra dec modelMag_u modelMag_g \\\n", "0 1237664869216289142 150.000355 30.732103 23.06350 22.79704 \n", "1 1237665099003593049 150.000483 30.591703 22.71077 22.14142 \n", "2 1237665098466656334 150.000711 30.105872 20.72021 18.12753 \n", "3 1237665098466656330 150.000754 30.097463 22.66031 19.98154 \n", "4 1237664869216289439 150.000985 30.748886 25.00283 23.08974 \n", "5 1237664869216288905 150.001134 30.829336 21.41318 20.29182 \n", "6 1237665129067840138 150.001698 30.483674 23.61431 22.05697 \n", "7 1237665098466657196 150.002180 30.248386 25.05051 23.19651 \n", "8 1237665129067840349 150.002215 30.429241 23.51003 24.00885 \n", "9 1237665098466656342 150.002250 30.174147 20.84485 18.57332 \n", "\n", " modelMag_r modelMag_i modelMag_z \n", "0 21.60797 21.22958 21.32821 \n", "1 21.63762 21.84505 21.44720 \n", "2 16.79675 16.08280 15.69484 \n", "3 18.61721 17.61466 17.07129 \n", "4 22.20838 21.99796 21.30983 \n", "5 19.80290 19.55658 19.49337 \n", "6 20.63076 20.13519 19.81597 \n", "7 21.70999 20.04427 19.07293 \n", "8 21.71184 21.25962 20.59406 \n", "9 17.56038 17.15493 16.93803 " ] } ], "prompt_number": 19 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Aqu\u00ed finalizo este post, pero el m\u00e9todo de acceso a la base de datos del SDSS que hemos visto aqu\u00ed lo utilizar\u00e9 en futuras entradas para analizar, en base a datos reales, diversas propiedades de los objetos celestes." ] } ], "metadata": {} } ] }