ESCRAPEANDO CON Rvest UNA BASE DE DATOS DE 6000 AÑOS DE PREDICCIONES DE ECLIPSES
- fjroar
- 28 abr 2024
- 4 Min. de lectura
Unas páginas sin duda interesantes si se quiere tener datos astronómicos tanto en riqueza como en calidad son las de Fred Espenak más conocido como Mr Eclipse.
En esta salida voy a explicar cómo hacer un scrapping muy sencillo para la construcción de una tabla utilizable a partir de los datos dados y siempre teniendo en cuenta que el uso de esta información es para fines puramente didácticos o de investigación y por tanto los códigos los cedo libremente para quién le pueda interesar.
Muchos dicen que python para esto de scrapping es mejor y quizás sea cierto, no tengo argumentos contundentes (como sí parece que los tienen algunos pythonistas para tal afirmación), pero es que la librería rvest por su sencillez y versatilidad soluciona bastante problemas y será sobre esta en la que se detalla cómo crear una base de datos a partir de la información existente en https://www.eclipsewise.com
El link anterior permite alcanzar la siguiente información, interesando por tanto tratar adecuadamente el dato a mayor nivel de desagregación que existe en la tabla que está más a la derecha:
Entonces ¿Cómo “leer” y pasar todos los datos a una estructura tabular que permita ser trabajada en aplicaciones posteriores que se quieran realizar? Pues bien, la respuesta a esta pregunta es de lo que va esta entrada.
Más que describir minuciosamente el cómo hago el scrapping que me llevaría a un texto muy largo, lo que voy a hacer es dejar mi github https://github.com/FJROAR/EclipsesDataAccess los códigos que lo realizan y que resultan ser los siguientes:
01_EclipsesScrapping_Lunar.R
01_EclipsesScrapping_Solar.R
Por tanto, lo que sí voy a hacer es comentar los pasos principales y por supuesto animo a que los ejecutéis en vuestro local, en menos de 3 minutos tendréis más de 14.000 de predicciones de Eclipses de Luna y de Sol realizados en un período de 6.000 años.
Obviamente, aunque los anteriores datos están disponibles fácilmente en RMoon, éstos se pueden obtener ya en R tecleando simplemente (si tenéis instalada RMoon claro está):
library(RMoon)
dfLuna <- LunarEclipsesDates
dfSol <- SolarEclipsesDates
No obstante, con los códigos proporcionados anteriormente, vosotros podéis realizar y descargar los datos y posteriormente podéis guardarlos en vuestro disco duro con cualquiera de las opciones que ofrece R. Así pues, con dichos códigos, lo que se hace es un scrapping muy parecido en cada uno de ellos perocon ligeras modificaciones por temas de homogeneización de la información. Los pasos seguidos son los siguientes:
Paso 0. Definición de las funciones de ayuda al scrapping, se distinguen 2 funciones en cada código, una para extraer los datos BC (Before Crist) y otra para los AC (After Crist) en cada caso, sus denominaciones son respectivamente, extraeSigloNegLunar() y extraeSigloPosLunar() y dado un año base inicio de un siglo, extrae los datos de los 100 restantes haciendo uso de la parte esencial del código que es donde su usa rvest:
# Leer las tablas de la página
tables <- url %>%
read_html() %>%
html_table()
Nótese que con una expresión anterior, se marca la url que se desea acceder y que también resulta esencial tenerla bien montada y que dependerá de la función a utilizar siendo, en caso de extraeSigloNegLunar() la siguiente:
url <- paste0("https://eclipsewise.com/lunar/LEcatalog/LE-",
yearbase2_aux,"--",yearbase_aux,".html")
Paso 1. Como los datos están cargados por siglos, se tiene que en cada uno se debe cambiar la url y por tanto hay que crear un bucle pero antes de ello hay que inicializarlo y para ello se toma lo que aquí se considera el año 0 y que en tiempos históricos sería el -1, por tanto como conjunto de datos inicial y por ser el más atípico, se crea un dataset inicial de nominado df con los datos del siglo I BC y que contiene al mencionado año 0
Paso 2. Se extraen todos los datos BC y se incorporan secuencialmente al dataset inicial df, nótese aquí el uso del vector sequencial siguiente que facilita enormemente la misión controlando los pasos del bucle:
seq(100, 2900, 100)
Paso 3. Se realiza lo mismo con los datos AC agregándose a los anteriores
Paso 4. Ahora comienza la limpieza y ordenación de más antiguo a más avanzado en el tiempo de los datos, nótese que el año 0000 que será en nuestra base de datos el -0001 se tiene que tratar independientemente.
Nótese que en esta parte del proceso el gran problema es la primera columna donde las fechas no tiene un formato muy adecuado para ser tratado por cualquier lenguaje y lo que se hace es:
Pasar de una estructura como esta: A otra estructura como la siguiente:
Donde los datos quedan mejor ordenados y ordenables evitando además problemas idiomáticos con las fechas al tenerlas todas en formato (-)yyyy-mm-dd
Para acabar una serie de conclusiones:
No he encontrado gran dificultad usando rvest, los resultados del scrapping los ofrecía en listas que permitían su consulta y así es fácil ver dónde está la información de interés y cómo seleccionarla, dado el gran trabajo de Mr Eclipse de “colgar los datos” de un modo bastante adecuado, el acceso a ellos ha sido bastante sencillo
Como se puede observar una gran parte del código ha ido a la limpieza y preparación de las fechas. Sobre el tema de fechas y calendarios ya lo he tratado en post anterior, no es un tema trivial si se tratan fecha antiguas, especialmente aquellas de tipo BC
Con los datos tabulados así tabulados, sí se pueden realizar trabajos estadísticos e incluso astronómicos, por ejemplo para el próximo eclipse solar que se producirá en España el día 12 de Agosto de 2026 se tiene que según Fred Espenak se producirá a las 17:47:06 el momento de máxima ocultación, mientras que si se aplica el algoritmo de Meeus implementado también en RMoon mediante SolarEclipses("2026-08-01") el resultado es 17:47:23 ¿Cuál será el verdadero valor? ¿Quién se aproxima más? Por el momento son estimaciones y la observación final puede corregirlo (hay que notar que según el caso del ejemplo dado en el libro Astronomial Algorithm del eclipse de 1993-05-21, el algoritmo Meeus es más de 30 segundos más certero que el usado por Fred)
Finalmente aunque pueda haber pequeñas discrepancias en algunos datos que se tienen que resolver por observación, animo a la comunidad de Data Scientist a ver si son capaces de mejorar las predicciones aquí dadas con una base de tiempo tan sumamente larga, claramente la potencia de un algoritmo matemático y el conocimiento profundo de los movimientos de la Luna parecen superar las modernas técnicas de predicción que por otro lado van enfocadas a resolver otros problemas










Comentarios