cosmo/NASA_DATA_STRATEGY.md

343 lines
9.2 KiB
Markdown
Raw Normal View History

2025-12-08 10:55:38 +00:00
# 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