fits文件读取与查看
fits文件的结构
一个fits文件包括多个HDU(两个以上),开头一个是Primary HDU,储存着类似于观测日期等的信息,剩下的是Bin HDU,储存着观测数据
每个HDU由header 和data组成,data中储存着数据,header表示相应的信息,储存着和Primary HDU一样的信息,并且描述第几列的数据是什么,类型是什么
TTYPE1=‘obsid’表示第一列的数据是obsid,TFORM1和TDISP1表示第一列的数据的格式(format)
python读取fits文件
使用astropy包读写fits文件(astropy需要下载)
from astropy.io import fits
#读取文件
lamost=fits.open('dr5_stellar.fits')
#查看HDU
lamost.info()
#查看第二个HDU的header
lamost[1].header
#查看第二个HDU的data
lamost[1].data
#按照关键字搜索第二个HDU的数据(例子中是查看lamost数据的赤经)
lamost[1].data.field('ra')
python关闭fits文件
及时关闭文件以减小内存消耗
lamost.close()
fits文件转DataFrame格式
pandas的DataFrame格式操作星表更加方便,然而你将各列数据从fits文件中提取出来再写成字典,再转成DataFrame格式很不方便,而且在后续使用中可能会出现Big-endian 和 little-endian 相关的报错,这里介绍另一种简单不出错的方法
from astropy.table import Table
lamost = Table.read('dr5_stellar.fits', hdu=1)
lamost = lamost.to_pandas()
这个方法需要你知道你的数据在哪个HDU里面,一些特殊的format格式可能无法识别,比如这个LAMOST DR5里面有一种format是J,就不识别了,会给你报warning,你需要看一下不识别的那一列是不是需要的数据,如果不是,那就不重要了。
topcat操作fits文件
当数据文件比较大,而你只需要其中的一部分数据时,可以使用topcat把文件切割一下
- 下载topcat,进入官网,根据提示下载,不同的系统不一样
topcat官网
注:topcat基于Java,需要先下载Java JRE,打开https://java.com/zh-CN/download/,下载默认版本即可 - 运行topcat,读取较大的fits文件
选择File,选择Load Table,选择Filestore Browser,然后找到你的fits文件,topcat支持很多种数据类型,比如CSV,ASCII,读取时选择相应的Table Format即可,如果是读取fits文件则不需要选择Table Format,读取fits文件特别快,几个G的文件也是一瞬间,读入后topcat都会认为他们是table - 查看数据
双击读入的文件,就可以查看全部的数据
如下图点击这里,可以查看所有列名
出来是这样的
可以看到第几列表示什么(具体的意义还是要看数据发布人的文档)勾选表示显示这列,不勾选表示不显示,比如我只需要他的ra,dec和teff,勾选这三项,然后双击数据文件打开,就只有这三项
-
保存文件
先选中,然后点击保存按钮,选中保存位置,写一个文件名即可保存,这样保存的数据就只有ra,dec和teff三列,保存文件的格式也是多样化的,取决于你的选择 -
查看文件的统计量
点击
会出现下图
可以很方便的看到每个量的平均值,最大值,最小值 -
将两个星表中的数据按照ra,dec进行交叉匹配
当你读取了两个以上的星表时,点击这个标志
会出现下图
选择table1,table2,在RA column和Dec column中选择你的赤经,赤纬,Max error就是你的交叉半径,一般是1角秒,Match Selection 和join Type都可以选择,一般默认就行,想要调整可以看一下topcat的官方文档 -
将自己的星表与服务器的星表进行交叉匹配
点击
会出现
VizieRTable ID/Alias选择你想要交叉的服务器星表,比如2MESS,Gaia DR2,Local Table选择你自己的星表,输入赤经赤纬即可,其他一般默认,最后一行的Block size指的是一次交叉多少行,把他调大可以减少交叉时间,但是如果网络波动导致中断,那么前面交叉的数据也传不回来,没有稳定的VPN建议不要动这个参数
更多topcat操作请参考topcat官网