Usando SkyChoord para leer en múltiples coordenadas.

así que recientemente escribí un código básico para analizar la distancia entre dos puntos que se almacenan en dos archivos de Excel separados. Ahora que tengo ese código funcionando, es hora de aplicar el uso legítimo y usar este código para analizar no solo 2 dimensiones (x, y) sino tres (ra, dec, z). En las hojas de datos ahora he almacenado las coordenadas de dos galaxias separadas. Aquí está el código modificado a continuación:

import math
import pandas
file1 = pandas.read_excel('Book1.xlsx')
file2 = pandas.read_excel('Book2.xlsx')
file1['RA_diff'] = file2['RA'] - file1['RA']
file1['DEC_diff'] = file2['DEC'] - file1['DEC']
file1['Z_diff'] = file2['Z'] - file1['Z']
dist = file1.apply(lambda row: math.hypot(row['RA_diff'], row['DEC_diff', row['Z_diff']]),   axis=1)
if dist.values >= .5:
    print 'no match'
elif dist.values <= .5:
    print True, dist

Este código funciona muy bien solo con RA y DEC, pero no mucho con la Z agregada.

Mi esperanza es que alguien me dé algunos consejos sobre cómo acortar todo este proceso utilizando el método:

from astropy.coordinates import SkyCoord

Básicamente: ¿Cómo uso esta herramienta a mi favor al leer (de dos documentos de Excel separados) dos coordenadas separadas de (ra, dec, z) para determinar si los objetos tienen alguna proximidad entre sí?

Mi investigación ha resultado bastante infructuosa para analizar los puntos de esta manera específicamente, ya que en su mayoría simplemente no entiendo las páginas de ayuda. Este es mi primer proyecto de codificación, así que sea amable con sus consejos, recomendaciones, ayuda, comentarios o CUALQUIER otra cosa que pueda ofrecer. Gracias por adelantado.

Respuestas (1)

De la documentación

>>> c1 = SkyCoord(ra=10*u.degree, dec=9*u.degree, distance=10*u.pc, frame='icrs')
>>> c2 = SkyCoord(ra=11*u.degree, dec=10*u.degree, distance=11.5*u.pc, frame='icrs')
>>> c1.separation_3d(c2)  
<Distance 1.5228602415117989 pc>

El resto del código es solo leer los archivos de Excel e imprimir los resultados. Lo que tienes ahora es incorrecto, incluso sin la coordenada "z". No puedes calcular la separación de dos puntos en coordenadas esféricas por el teorema de Pitágoras: por ejemplo, (30*, 0*) y (30*, 359*) deberían estar muy cerca. Primero debe convertir a coordenadas cartesianas, que es lo que hace el módulo de astrología.

OK, gracias, ¿entonces lo que pusiste arriba es básicamente la conversión necesaria de coordenadas cartesianas a esféricas? Además, ¿sigues recomendando usar pandas para leer en el archivo de Excel, o hay una mejor manera en astrología?
El código de muestra calcula la distancia entre dos puntos dados en coordenadas polares esféricas. Los puntos son (10*, 9*, 10 parsecs) y (11*, 10*, 11,5 parsecs). No sé el formato exacto de sus archivos de Excel, pero lo anterior debería ser suficiente para comenzar. Astropy no puede leer archivos de Excel, así que si pandas funciona para ti, úsalo.
Bien, lo que encontré en una búsqueda rápida es que pandas no maneja tablas multidimensionales, así que ahora estoy un poco desanimado porque todo mi código está mal. Pero seguiré desconectando, ¿hay una mejor opción que los pandas para leer y comparar datos de varias tablas en astrología que pueda usar para que esta primera parte funcione?
No sé cómo son tus tablas, ni por qué hay dos libros de trabajo. ¿Puedes poner todos tus datos en un archivo csv? De todos modos, esta sería una pregunta de stackoverflow, si no puede hacer que funcione usted mismo
@JustinT Como dice James, su pregunta sobre la lectura de archivos debe estar en el desbordamiento de la pila, pero diré que debe considerar diferentes formatos para su archivo. Coloque sus datos en un archivo de texto (simple como copiar y pegar de Excel a un archivo de texto) y use algo como numpy.genfromtxtpara leerlo.
@zephyr ¡Gracias por el consejo! Además, JamesK. Seguiré buscando cosas de astrología, ¡gracias por un punto en la dirección correcta!