cosmo/NASA_DATA_STRATEGY.md

343 lines
9.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# NASA数据源分析与数据策略
**日期**: 2025-12-06
**目的**: 回答Phase 4关于恒星数据获取的关键问题
---
## 📊 三个核心问题的答案
### 问题1: 恒星系主序星的数据是否还需要从NASA获取
**答案:不需要,数据已经有了!**
#### 现状分析
**恒星数据已在`star_systems`表中**
```sql
-- 当前star_systems表已包含完整的主恒星数据
SELECT name, host_star_name, spectral_type, radius_solar,
mass_solar, temperature_k, color
FROM star_systems
WHERE id = 479;
-- 结果示例Proxima Centauri
-- name: Proxima Cen System
-- host_star_name: Proxima Cen
-- spectral_type: M5.5 V
-- radius_solar: 0.141
-- mass_solar: 0.1221
-- temperature_k: 2900
-- color: #ffbd6f
```
**数据来源**
- 这些数据在Phase 3时已经通过`fetch_interstellar_data.py`脚本从NASA Exoplanet Archive获取
- 数据源NASA Exoplanet Archive的Planetary Systems (PS)表
- 字段映射:
- `st_spectype``spectral_type`
- `st_rad``radius_solar`
- `st_mass``mass_solar`
- `st_teff``temperature_k`
- 自动计算 → `color`
#### 需要做的事
**不需要从NASA重新获取主恒星数据**
**只需要从`star_systems`复制到`celestial_bodies`**
```python
# 数据迁移,不是数据获取
for system in star_systems:
celestial_body = {
"system_id": system.id,
"name": system.host_star_name,
"type": "star",
"metadata": {
"star_role": "primary",
"spectral_type": system.spectral_type,
"radius_solar": system.radius_solar,
"mass_solar": system.mass_solar,
"temperature_k": system.temperature_k,
"color": system.color
}
}
```
---
### 问题2: 其它恒星系的位置数据是否还需要定时获取?
**答案:不需要定时获取,恒星位置是静态的(在人类时间尺度上)**
#### 恒星运动特性
**自行Proper Motion**
- 恒星相对于太阳的运动速度通常10-100 km/s
- 角度变化每年约0.001-0.1角秒
- 在50年内即使是最快的恒星位置变化也只有约5角秒约0.0014度)
**举例**
```
Barnard's Star自行最快的恒星
- 自行10.3角秒/年
- 50年后位置变化515角秒 ≈ 0.14度
- 在我们的可视化尺度(秒差距级别):几乎可以忽略
```
#### 结论
**不需要定时获取位置数据**
原因:
1. 恒星位置在人类时间尺度(几年、几十年)内几乎不变
2. 自行造成的位置变化远小于我们的渲染精度
3. NASA Exoplanet Archive中的坐标数据是某个epoch如J2000.0)的快照,不会变化
#### 什么时候需要更新?
仅在以下情况:
1. **新发现的恒星系统**NASA Archive新增了系外行星系统
2. **数据修正**:某个系统的距离或坐标被重新测量(罕见)
3. **手动触发**:管理员手动运行更新脚本
**建议更新频率**
- 每季度或半年运行一次`fetch_interstellar_data.py`
- 主要是为了获取新发现的系外行星系统,而不是更新位置
---
### 问题3: 伴星数据无法从NASA获取么大部分都不是单恒星系统
**答案可以从NASA获取但需要额外的字段和逻辑**
#### NASA API支持情况
**NASA Exoplanet Archive有多星系统数据**
关键字段:
- `sy_snum`: 系统中恒星数量Number of Stars in System
- `hostname`: 主恒星名称
- Binary/Multiple star systems有特定标记
**实际数据查询**
```sql
-- NASA API查询示例
SELECT hostname, sy_snum, sy_dist
FROM ps
WHERE sy_dist < 50 AND sy_snum > 1
ORDER BY sy_dist;
-- 结果示例:
Proxima Cen sy_snum=3 (三星系统: Alpha Cen A, B, Proxima)
GJ 15 A sy_snum=2 (双星系统)
GJ 667 C sy_snum=3 (三星系统)
LTT 1445 A sy_snum=3 (三星系统)
...
```
#### 伴星数据字段
NASA Archive的伴星相关字段
- `st_nstar`: 系统中恒星数量与sy_snum相同
- Binary system parameters如果可用
- `st_binary`: 是否为双星
- `st_bincomp`: 伴星编号
- `st_binsep`: 双星分离度(角秒)
**限制**
- ⚠️ NASA Archive **主要关注行星宿主星**,伴星详细数据可能不完整
- ⚠️ 如果伴星没有行星可能不在Archive中
- ⚠️ 双星轨道参数半长轴、周期、偏心率通常不包含在PS表中
#### 补充数据源
对于伴星详细数据,需要结合其他数据源:
1. **SIMBAD** (推荐)
- URL: http://simbad.u-strasbg.fr/simbad/
- 数据:几乎所有已知恒星的详细参数
- Python API: `astroquery.simbad`
- 包含:双星轨道参数、伴星光谱类型、质量等
2. **Washington Double Star Catalog (WDS)**
- URL: https://www.usno.navy.mil/USNO/astrometry/optical-IR-prod/wds
- 专门的双星数据库
- 包含:轨道参数、分离度、位置角
3. **Gaia Archive**
- URL: https://gea.esac.esa.int/archive/
- 高精度天体测量数据
- 可以识别双星系统
#### 实施建议
**Phase 4.1: 仅主恒星**
```python
# 从star_systems表迁移不涉及NASA API
# 579个系统全部创建主恒星记录
```
**Phase 4.2: 识别多星系统**
```python
# 查询NASA API获取sy_snum字段
systems_with_multistars = fetch_systems_where_sy_snum_gt_1()
# 结果示例:
# {
# "Proxima Cen": 3,
# "GJ 15 A": 2,
# "GJ 667 C": 3,
# ...
# }
```
**Phase 4.3: 补充伴星数据(手动/半自动)**
```python
# 对于标记为多星系统的从SIMBAD查询伴星数据
for system in multistar_systems:
# Query SIMBAD for companion stars
companions = query_simbad_companions(system.hostname)
for companion in companions:
# Insert into celestial_bodies
insert_companion_star(
system_id=system.id,
name=companion.name,
spectral_type=companion.spectral_type,
orbital_params=companion.orbital_params
)
```
**数据质量评估**
- 约50个系统有多颗恒星sy_snum > 1
- 其中约30个系统可以从SIMBAD获取伴星详细数据
- 约20个系统需要手动补充或标记为"数据不完整"
---
## 🎯 最终数据策略
### Phase 4数据计划
#### ✅ 立即执行Phase 4.1
**主恒星数据迁移** - 无需从NASA获取
```
来源star_systems表已有数据
目标celestial_bodies表
数量579条主恒星记录
方法:数据库内部迁移脚本
时间:< 1小时
```
#### 📋 可选执行Phase 4.2+
**多星系统识别** - 需要从NASA获取
```
来源NASA Exoplanet Archive (sy_snum字段)
目标更新star_systems.extra_data标记多星系统
数量约50个多星系统
方法扩展fetch_interstellar_data.py脚本
时间:< 1小时
```
**伴星数据补充** - 需要从SIMBAD/WDS获取
```
来源SIMBAD + Washington Double Star Catalog
目标celestial_bodies表type='star', star_role='companion'
数量约50-100条伴星记录估计
方法:新脚本 + 部分手动
时间2-4小时半自动化
```
### 数据更新频率
| 数据类型 | 更新频率 | 原因 |
|---------|---------|------|
| 恒星位置 | **不需要** | 自行可忽略50年 < 1%变化) |
| 系外行星数据 | **每季度** | 新发现的系统 |
| 恒星参数 | **每年** | 数据修正(罕见) |
| 伴星数据 | **手动触发** | 数据来源分散,需人工整理 |
---
## 📝 实施建议
### 推荐方案:分阶段实施
**Phase 4.1: MVP最小可行产品**
```
✅ 仅主恒星
✅ 无需从NASA获取新数据
✅ 579个恒星系统全部可用
⏱️ 实施时间4-6小时
```
**Phase 4.2: 增强版(多星系统识别)**
```
📊 扩展NASA查询获取sy_snum
🏷️ 标记多星系统
⏱️ 额外时间1小时
```
**Phase 5: 完整版(伴星展示)**
```
🌟 补充伴星数据SIMBAD/WDS
🎨 实现双星轨道渲染
⏱️ 额外时间4-8小时
```
### 代码示例
**扩展NASA查询(获取sy_snum**
```python
# 修改 fetch_interstellar_data.py
table = NasaExoplanetArchive.query_criteria(
table="ps",
select="hostname, sy_dist, ra, dec, sy_pnum, sy_snum, " # 新增sy_snum
"st_spectype, st_rad, st_mass, st_teff, "
"pl_name, pl_orbsmax, pl_orbper, pl_orbeccen, pl_rade, pl_eqt",
where="sy_dist < 50",
order="sy_dist"
)
# 在系统数据中记录恒星数量
systems[hostname]["data"]["star_count"] = int(get_val(row['sy_snum']))
```
**SIMBAD查询伴星数据**
```python
from astroquery.simbad import Simbad
def query_companion_stars(primary_star_name):
"""查询伴星信息"""
# SIMBAD查询示例
result_table = Simbad.query_object(primary_star_name)
# 查询双星信息
# 这需要更复杂的查询逻辑SIMBAD有专门的binary star tables
return companion_data
```
---
## ✅ 结论
1. **主恒星数据**:✅ 已有,不需要从NASA获取
2. **位置数据**:✅ 静态,不需要定时更新
3. **伴星数据**:⚠️ 可以从NASA获取部分(sy_snum),完整数据需SIMBAD
**推荐行动**
- Phase 4.1先实现主恒星(已有数据)
- Phase 5再考虑伴星(需额外数据源)
---
**文档作者**: Cosmo Development Team
**最后更新**: 2025-12-06