天体数据库:数据准备(第 2 部分)
我需要使用 PostgreSQL 创建一个天体数据库 这个 freeCodeCamp 项目 .如果您对“天体”一词不熟悉,它指的是在太空中发现的行星、恒星、卫星和其他自然事物。而且,毫无疑问,创建具有多个表的数据库的第一步是数据准备。
在本文中,我将演示如何在开始编写 SQL 查询之前准备数据。我将构建的表格中的每一条信息都是从互联网上收集的,因此非常感谢对此处提供的信息进行任何更正。
请 点击这里 读书 天体数据库:数据准备(第 1 部分) 如果你还没有。
现在我们将继续创建下一个表:行星表。
让我们首先查看与之前的月球表相对应的行星名称列表。请记住,每个卫星都应该有一个指向行星表行之一的外键。因此,我们必须确保行星表包含这个行星列表。
must_have_planets = df_moon.planet.unique()
打印(must_have_planets)
现在,让我们使用网络抓取来获取行星表 这个网站 .
有几个专栏,但我只会使用我特别感兴趣的专栏。
现在我对这张桌子感觉很舒服,让我们看看它是否包含地球上的每个行星 must_have_planets
列表。如果没有,我们将不得不包括表中缺少的行星信息。
对于 must_have_planets 中的行星名称:
如果planet_name 不在df_planet.name.values 中:
打印(行星名称) ## 输出:
# 五层龙
#瓦尔达
您可以从上面的代码中看到行星的数据 五层龙 和 瓦尔达 尚未包含在表中。所以,我们将包括它。
我们可以更新 行星
月亮表中的列与 行星编号
现在我们已经完成了所有行星的名称并为每个行星分配了一个行星的 ID。
创建第一个表:月球表(最终)
创建星座和星表
由于每个行星都应该有一个外键来引用星表中的一行,我们可能要开始考虑如何连接行星表和星表之间的点。
我能想出的最佳解决方案是使用星座表。可以定位行星所在的星座。由于行星在平面内绕太阳运行,它们比背景恒星更靠近我们,并且似乎只在某些星座中移动( 资源 ),因此是双引号。当我说背景星星时,我指的是星座,它们是天空中有意义的星星图案。最亮的恒星也出现在每个星座中。因此,我们可以在行星表中添加一列,指示行星所在星座中最亮的恒星。
[1] 天空直播, 太阳系主要天体 , https://theskylive.com/planets
[2] 天空直播, 小行星 , https://theskylive.com/asteroids-and-dwarf-planets
[3] 50000夸尔 . https://usuaris.tinet.cat/klunn/quaoar.html
[4] 维基百科, 225088共工 , https://en.wikipedia.org/wiki/225088_Gonggong
地球、奥库斯和瓦尔达是我无法找到有关其星座的任何信息的三颗行星。然而,根据 本文 ,离地球最近的恒星都在半人马座,所以我将半人马座作为地球星座放在表中。 Orcus 也被称为 Plutino,所以我认为将人马座指定为它的星座可能不会错。此外,瓦尔达是双星跨海王星小行星,因此我给它一个与海王星相同的星座,也就是水瓶座。
我们可以再次使用网络抓取 这个维基百科页面 获取星座表。
出于实用性,我想将星号栏在其记录中使用的希腊字母更改为我们的字母表。如果你进一步检查,星星的名字也包含[8],所以我也会省略它们。
df_constellation.star.values
df_constellation.star.values
现在可以使用星座表获得每个行星的恒星名称,然后我们可以通过省略我们不使用的星座名称来尝试使星座表尽可能简单。我决定以这种方式处理这个项目。但是,您可以选择保留每个星座的名称。
keep_constellation = df_planet_constellation.constellation.unique()
保持星座
df_constellation = df_constellation[df_constellation.name.isin(keep_constellation)] df_constellation = df_constellation.reset_index(drop=True)
df_星座
现在我们有了包含星名的星座表,我们可以从中创建星表。这表明我们将使用的恒星是Sadalsuud、Hamal、Arcturus、Deneb Algedi、Rigil Kentaurus、Diphda、Beta Comae Berenices、Regulus、Rasalhague、Enif、Kaus Australis、Aldebaran 和 Spica。
如果你记得 ” 小天文学 ,”我们可以使用两个链接来构建星表。实际上,它是由许多明星名单组成的。虽然我已经努力从网站上收集数据,但这样做比简单地手动收集我们想要的每个星星的数据需要更多的工作。因此,我将创建一篇关于用于从该网站收集星表的网络抓取过程的单独文章。暂时,我将创建一个字典,我们以后可以将它变成一个星表。
我们还需要记住,每颗星都应该有一个外键来引用星系表中的一行。不过Little Astronomy并没有提供每颗恒星的星系信息,所以我得查一下 这个网站 .不要忘记包括 星号
列也是如此。
我们可以添加一个 星号
现在我们已经(几乎)完成了星表的列到行星表。稍后,我们还将替换 星系
此星表中的列与 星系ID
.
创建行星表(最终)
创建星座表(最终)
同样的程序也可以应用到星座表中,用每个星星的 id 替换星星列。
创建最后一个表:galaxy table (final)
我们现在将继续使用与以前相同的网络抓取方法来创建下表,即星系表。
该表共包含 37 个星系。此外,它还包含一个星座列。因此,为了简单起见,我只想在表格中保留一些星系的名称。我将只使用上一个星座表中列出的星座的星系名称来实现这一点。
我将使用肉眼可见的星系细节 这个网站 再创建一列。如果可以用肉眼看到一个星系,则将其设置为 True;否则,它将被设置为 False。我这样做是因为在这个数据库中至少有两列必须使用 BOOLEAN 数据类型。为了满足要求,让我们在这个galaxy 表中添加一列,因为我们已经在planet 表中有一个列。
现在是时候添加星系的 id 并替换 星座
列及其 ID 号。
创建星表(最终)
您可能还想返回查看星表,以确保我们表上的每颗星都属于银河系。根据银河表,它的 ID 号是 11。因此,我们可以简单地删除之前的星系列,并添加一个带有银河系 id 的新列。
df_star['galaxy_id'] = [11] * len(df_star)
df_star = df_star.drop(columns='galaxy')
df_star
我相信工作已经完成。现在有五张关于月球、行星、恒星、星系和星座的表格。我们已遵守所有要求。下面是我们构建的每张桌子的图片。
moon table (there are actually 50 rows)
planet table
star table
galaxy table
constellation table
自然地,我们可以开始编写 SQL 命令,因为这样做的主要目的是编译表,以便我们可以使用 PostgreSQL 构建天体数据库。但是,我不会写一篇关于它的文章,而是会继续写下去 我的 GitHub .因此,请随时查看 我的 GitHub 如果你需要任何关于如何去做的想法。
谢谢阅读!
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明
本文链接:https://www.qanswer.top/37410/19381802
标签:df,数据库,表中,我们,准备,星座,行星,constellation,天体 From: https://www.cnblogs.com/amboke/p/16704089.html