发布于 2026-01-06 7 阅读
0

我如何利用NASA的数据构建一个交互式小行星仪表盘

我如何利用NASA的数据构建一个交互式小行星仪表盘

前几天我在浏览 Instagram 时偶然看到了一个短视频。

创建者列出了“你不应该错过的 API”,而第一个就是?NASA。

我停顿了一下。美国宇航局。太空。数据。
这些就足以让我一头扎进这个兔子洞里。

我深入研究了他们的NeoWs API,不知不觉中,我萌生了一个想法:为什么不创建一个仪表盘来跟踪近地小行星,突出显示风险,并对所有这些太空数据进行分析呢?

原本只是随意浏览网页,结果却演变成了一个完整的数据科学和分析项目。

您可以亲自查看该项目:https://astroscope.streamlit.app/
GitHub 代码库:https://github.com/ArjunCodess/astroscope

以下是仪表盘的简要演示:

一些截图:

图像

图像

图像 图像

分解

第一步:规划我想要的东西

在编写任何一行代码之前,我必须先弄清楚这个项目究竟应该做什么:

  • 从NASA获取真实的小行星数据。
  • 显示每颗小行星的大小、速度以及与地球的距离。
  • 重点指出哪些小行星可能存在风险。
  • 将所有内容可视化为图表和表格,而不是一堆 JSON 代码。
  • 使其足够流畅,能够在台式机和移动设备上同时运行。

这为我提供了工具、功能和项目结构的蓝图。


步骤 2:从 NASA 的 NeoWs API 拉取数据

NeoWs功能强大,但也有局限性。
一次最多只能获取7天的数据。

所以我不得不:

  • 将总时长(例如 30 天)分成 7 天的小段。
  • 按顺序调用每个数据块的 API。
  • 将所有结果保存到本地,这样我就不会一直攻击 NASA 的服务器了。

所有这些都是在data_fetcher.py文件中使用 Python库处理的requests
我添加了重试机制和错误处理,因为 API 调用总是失败。


步骤三:清理NASA的原始数据

NASA发送的JSON文件非常庞大,其中大部分都是无用信息。
我只需要最基本的信息:

  • ID、名称、尺寸
  • 接近日期
  • 速度
  • 错过距离
  • 危险旗

我编写了data_processing.py 脚本,用于将所有数据整理成整齐的表格。pandas它承担了大部分繁重的计算工作。
我还转换了单位(例如将速度转换为公里/小时),并将清理后的数据保存为 CSV 文件,以便后续更快地加载。


第四步:理解它

数据清洗完毕后,我想赋予它意义。在analysis.py 文件中,我构建了一个风险评分系统:

  • 结合大小、速度和距离的风险评分
  • 高风险小行星的阈值(默认值为 0.6)。
  • 用时间序列图展示风险随时间的变化情况。
  • “最接近”天数排名。

这让我能够突出显示异常值,比如比平时飞得更近的巨石。
pandas这让一切都变得简单了。


第五步:构建仪表盘

我使用Streamlit是因为它允许你用 Python 构建 Web 应用程序,而无需像传统框架那样麻烦。

以下是我添加的内容:

  • 日期选择器风险滑块用于筛选。
  • GitHub 风格的热图,显示每日平均风险评分(越亮 = 风险越高)。
  • 十大近距离接近事件详情表。
  • 小行星大小、速度和风险分布图。
  • 适用于手机和笔记本电脑的响应式布局。

我以前还会plotly制作交互式且美观的图表。


步骤 6:配置和设置

我通过一个文件保持了应用程序的灵活性.env

NASA_API_KEY=""
DATA_FETCH_DAYS=30
DATA_DIR="data"
API_CHUNK_SIZE=7
RISK_THRESHOLD=0.6
Enter fullscreen mode Exit fullscreen mode

这样可以保护 API 密钥等敏感信息的安全,并允许轻松更改项目参数。


步骤七:整合所有内容

运行应用程序时:

  1. 它会检查所选日期的数据是否已保存。
  2. 如果找不到,就从NASA获取。
  3. 然后它对数据进行处理和分析。
  4. 最后,它还用于仪表盘。

我还实现了单独运行各个步骤以进行调试和测试的功能。

以下是该应用程序的大致工作流程:

图像


最后想说的话

难以置信,一个 15 秒的视频片段竟然让我启动了一个完整的数据项目。

这个控制面板是我了解这个空间的窗口。
它并不完美,但它能用,可以扩展,而且探索起来很有趣。

如果你是程序员或者只是个太空迷,不妨尝试自己搭建一个模型。
从小规模开始,用真实数据进行测试,然后逐步深入。
宇宙浩瀚无垠,变幻莫测,充满了惊喜。

感谢阅读!

文章来源:https://dev.to/arjuncodess/how-i-built-an-interactive-asteroid-dashboard-with-nasas-data-12li