統一ファイル読み書きインタフェース¶
astropy
異なるフォーマットのデータを読み書きするための統一されたインターフェースを提供する。多くの一般的な場合、これは、ファイルI/Oプロセスを簡略化し、すべてのI/Oパケットの個々の詳細情報を把握する必要を低減する。 astropy
それがそうです。実現の詳細については,参照のこと I/Oレジストリ (astropy.io.registry ) それがそうです。
イメージI/O入門¶
統一I/Oインタフェースでの画像データの読み書きをサポート CCDData
FITSファイルフォーマットを使用して初期化:
>>> # Read CCD image
>>> ccd = CCDData.read('image.fits')
>>> # Write back CCD image
>>> ccd.write('new_image.fits')
なお、このユニットは BUNIT
保存時にタイトル中のキーワードは、タイトル中にそのキーワードが存在すれば、タイトルからそのキーワードを読み取る。
読み出しや書き込みに利用可能なキーワードパラメータの詳細な支援については,通過可能である. help()
方法は以下のとおりである.
>>> CCDData.read.help('fits') # Get help on the CCDData FITS reader
>>> CCDData.writer.help('fits') # Get help on the CCDData FITS writer
表I/O入門¶
♪the Table
クラスには2つの方法があります read()
そして write()
これにより、ファイルの読み出しおよび書き込みが可能となる。様々なフォーマットが自動的にサポートされています(参照 Built-in table readers/writers )、新しいファイルフォーマットおよび拡張子を登録することができます Table
類(参照) I/Oレジストリ (astropy.io.registry ) )。
実例.¶
このインタフェースをご利用の場合は、まず導入してください Table
クラス、そして呼び出します Table
read()
方法、例えば、ファイル名およびファイルフォーマットを使用する 'ascii.daophot'
:
>>> from astropy.table import Table
>>> t = Table.read('photometry.dat', format='ascii.daophot')
URLを使用してInternetからテーブルを直接ロードすることができます。例えば、CDSフォーマットのテーブルは、Vizierディレクトリからダウンロードされる。 ('ascii.cds'
):
>>> t = Table.read("ftp://cdsarc.u-strasbg.fr/pub/cats/VII/253/snrs.dat",
... readme="ftp://cdsarc.u-strasbg.fr/pub/cats/VII/253/ReadMe",
... format="ascii.cds")
いくつかのファイルフォーマットの場合、フォーマットを自動的に検出することができ、例えば、ファイル拡張子:
>>> t = Table.read('table.tex')
ライトテーブルの場合、フォーマットを明示的に指定することができる:
>>> t.write(filename, format='latex')
そこまでは read()
方法は、場合によってはフォーマットを自動的に識別することができる。
下位ファイル処理プログラムはまた、様々な圧縮データフォーマットを自動的に検出し、Pythonインストールサポートの範囲で透明に解凍します(参照 get_readable_fileobj()
)。
作成については、関係を指定することもできます Table serialization methods 通過する. serialize_method
キーワードパラメータ。これは、例えば、ISOフォーマットの時間列を、一対のJD 1/JD 2浮動小数点値(フル解像度のために)またはフォーマットされたISO日付文字列として書くなど、いくつかの列が書かれる方法を細かく制御することを可能にする。
読者や著者の助けを得る¶
各ファイルフォーマットは、特定のリーダまたはライタによって処理され、各関数は、自身のパラメータのセットを有する。この点の例については小節を参照されたい Built-in table readers/writers それがそうです。本節では,以下のオプションの完全リストも提供する format
論争する。
各フォーマットに関する利用可能なパラメータを取得するための助けは、ご利用ください help()
方法 read
あるいは…。 write
方法:研究方法。各呼び出しは、汎用的な読み書き文書(どの呼び出しも共通)とフォーマット固有の文書との2つの部分に分割された長いヘルプ文書を印刷する。ASCII表では,フォーマット固有の文書には汎用が含まれている astropy.io.ascii
パケットインターフェースは、次いで、特定のASCIIサブフォーマットを記述する。
以下の例では、長い出力は表示されていない。
>>> Table.read.help('fits')
>>> Table.read.help('ascii')
>>> Table.read.help('ascii.latex')
>>> Table.write.help('hdf5')
>>> Table.write.help('csv')
命令行ユーティリティ¶
便宜のために道具を命令する showtable
統一I/Oインタフェースによってサポートされるフォーマットのフォーム内容を印刷するために使用することができる。
例を引く¶
コマンドラインで表の内容を見るには、以下の操作を実行してください。
$ showtable astropy/io/fits/tests/data/table.fits
target V_mag
------- -----
NGC1001 11.1
NGC1002 12.3
NGC1003 15.2
用法や利用可能なオプションに関する完全文書を取得するには、以下の操作を実行してください showtable --help
それがそうです。
表リーダ/ライタを内蔵する¶
The Table
class has built-in support for various input
and output formats including ASCII形式,
-FITS, HDF 5, ジャイアントパンダ.,
and VO表.
次の表にサポートされているフォーマットと対応するクラスの完全リストを示す.♪the Write
列は書き込み機能をサポートするフォーマットを示します Suffix
列は、特定のフォーマットを示すファイル名接尾辞を示します。もし…。 Suffix
はい。 auto
すると,ファイル自体からそのフォーマットが自動的に検出される.すべてのフォーマットが自動検出をサポートしているわけではない。
格式. |
書く. |
接尾辞 |
説明する. |
---|---|---|---|
アズ! |
はい、そうです。 |
サポートされているフォーマットのASCII表(推測を使用) |
|
ascii.aastex |
はい、そうです。 |
|
|
ascii.basic |
はい、そうです。 |
|
|
ascii.cds |
違います。 |
|
|
ascii.commented_header |
はい、そうです。 |
|
|
ascii.csv |
はい、そうです。 |
.csv |
|
ascii.daophot |
違います。 |
|
|
ascii.ecsv |
はい、そうです。 |
.ecsv |
|
ascii.fixed_width |
はい、そうです。 |
|
|
ascii.fixed_width_no_header |
はい、そうです。 |
|
|
ascii.fixed_width_two_line |
はい、そうです。 |
|
|
ascii.html |
はい、そうです。 |
html |
|
ascii.ipac |
はい、そうです。 |
|
|
ascii.latex |
はい、そうです。 |
.tex |
|
ascii.no_header |
はい、そうです。 |
|
|
ascii.rdb |
はい、そうです。 |
.rdb |
|
ascii.rst |
はい、そうです。 |
.rst |
|
ascii.sextractor |
違います。 |
|
|
ascii.tab |
はい、そうです。 |
|
|
コンビネーション |
はい、そうです。 |
自動的に |
|
HDF 5 |
はい、そうです。 |
自動的に |
HDF 5:階層データフォーマットバイナリファイル |
pandas.csv |
はい、そうです。 |
周囲の包装紙 |
|
pandas.fwf |
違います。 |
周囲の包装紙 |
|
pandas.html |
はい、そうです。 |
周囲の包装紙 |
|
pandas.json |
はい、そうです。 |
周囲の包装紙 |
|
投票可能な |
はい、そうです。 |
自動的に |
|
ASCII形式¶
♪the read()
そして write()
方法は、読み取りおよび書き込みに使用することができます astropy.io.ascii
それがそうです。
使用 format='ascii'
汎型に接続するために read()
そして write()
関数は astropy.io.ascii
それがそうです。表を読み取る際には,入力の解析に成功するために,サポートするASCII表形式をすべて試みることを意味する.
実例.¶
サポートされているフォーマットの読み込みと書き込みは、以下の操作を実行してください astropy.io.ascii
:
>>> t = Table.read('astropy/io/ascii/tests/t/latex1.tex', format='ascii')
>>> print(t)
cola colb colc
---- ---- ----
a 1 2
b 3 4
表を作成する際に format='ascii'
出力は基本的な文字区切りファイルであり,1つの見出し行のみが列名を含む.
すべての追加パラメータは astropy.io.ascii
read()
そして write()
機能します。詳細についてはご参照ください パラメータ read() そして パラメータ write() それがそうです。たとえば,列デリミタの和を変更する場合 colc
列使用:
>>> t.write(sys.stdout, format='ascii', delimiter='|', formats={'colc': '%0.2f'})
cola|colb|colc
a|1|2.00
b|3|4.00
注釈
統一インタフェースを用いてASCII表フォーマットを指定する場合,フォーマット名はプレフィックスとなる. ascii
このフォーマットをASCIIベースのフォーマットとして識別するために。上の表と astropy.io.ascii
明細書. supported formats プレフィックスは不要である.したがって,以下は等価である.
>>> dat = ascii.read('file.dat', format='daophot')
>>> dat = Table.read('file.dat', format='ascii.daophot')
For compatibility with ``astropy`` version 0.2 and earlier, the following
format values are also allowed in ``Table.read()``: ``daophot``, ``ipac``,
``html``, ``latex``, and ``rdb``.
注意
ECSVのご利用がおすすめです
表データ,タイプ,メタデータを完全に複製するように表をASCIIに書き込む(すなわち,表は“往復”する),利用を強く提案する. ECSVフォーマット それがそうです。これは、スペースで区切られた形式で実際のデータに書き込まれます( basic
フォーマット)は、どのASCIIテーブルリーダも解析可能であるが、ソース列を完全に再構成することを可能にする注釈ブロックにおいて符号化されたメタデータも含む。これには支援も含まれています 混合柱 (例えば、 SkyCoord
あるいは…。 Time
)と 遮蔽柱. それがそうです。
FITS¶
中で読んで記入表を書く FITS サポートのフォーマット format='fits'
それがそうです。多くの場合,ファイルヘッダから既存のFITSファイルを自動的に認識すべきであるが,そうでなければ,ディスクに書き込む場合にはフォーマットを明示的に指定すべきである.
本を読む¶
FITSフォームファイルが単一のフォームのみを含む場合、以下のコマンドを使用してフォームを読み出すことができる。
>>> from astropy.table import Table
>>> t = Table.read('data.fits')
ファイルに複数のテーブルが存在する場合、以下のようにHDUを選択することができます。
>>> t = Table.read('data.fits', hdu=3)
この場合もし hdu
パラメータが省略されると、見つかった最初のテーブルが読み出され、警告が発せられる:
>>> t = Table.read('data.fits')
WARNING: hdu= was not specified but multiple tables are present, reading in first available table (hdu=1) [astropy.io.fits.connect]
メモリ内のFITSファイルのHDUからテーブルを読み取ることもできます。これは何でも往復します 混合柱 HDUに書き込まれ、ヘッダ情報を使用して再構成される:
>>> hdulist = astropy.io.fits.open('data.fits')
>>> t = Table.read(hdulist[1])
文章を書く¶
表を書くには、以下の操作を実行してください t
新しいファイルに追加:
>>> t.write('new_table.fits')
ファイルがすでに存在していて、それをカバーしたい場合は、 overwrite
キーワード:
>>> t.write('existing_table.fits', overwrite=True)
既存のファイルに表を追加する場合は、 append
キーワード:
>>> t.write('existing_table.fits', append=True)
あるいは、便利な機能もご利用いただけます table_to_hdu()
単一のバイナリテーブルHDUを作成し、既存のものに挿入または追加する HDUList
それがそうです。
自分から. astropy
バージョン3.0では、以下を含むテーブルの書き込みをサポート 混合柱 例えば Time
あるいは…。 SkyCoord
それがそうです。この使用配合 COMMENT
FITSからの読み出し時に混合列を完全に再構成するために必要な付加情報を取り込むためのカード.この情報はPythonです dict
アーキテクチャは,YAMLを用いて直列化される.
キーワード¶
HDU表に関連するFITキーワードは meta
対象の秩序辞書属性 Table それがそうです。表を読んだ後、以下のコマンドを使用して、利用可能なキーワードを読み取り可能なフォーマットで表示することができます。
>>> for key, value in t.meta.items():
... print(f'{key} = {value}')
This does not include the "internal" FITS keywords that are required to specify
the FITS table properties (e.g., NAXIS
, TTYPE1
). HISTORY
and
COMMENT
keywords are treated specially and are returned as a list of
values.
逆に,表にユーザキー値を設定した例を以下に示す. t
:
>>> t.meta['MY_KEYWD'] = 'my value'
>>> t.meta['COMMENT'] = ['First comment', 'Second comment', 'etc']
>>> t.write('my_table.fits', overwrite=True)
キーワード名(例えば、 MY_KEYWD
)は、書き込む前に自動的に大文字になります。
この時には meta
属性の属性。 Table
クラスは順序辞書であり,FITSヘッダの構造を完全に表すわけではない(たとえば,キーワードアノテーションを削除する).
TDISPnキーワード¶
TDISPn FITSキーワードは Column
format
表示フォーマットがPython表示フォーマットと相互に変換できる場合。次は2つの方向転換のためのルールである.
TDISPn転送Python形式文字列¶
TDISPnフォーマット文字は次の表で定義する.
格式. |
説明する. |
---|---|
アウェイ! |
性格 |
LW |
論理的な |
Iw.m |
整型. |
Bw.m |
バイナリ、整数に限られています |
Ow.m |
8進制は整数に限られている |
Zw.m |
16進制で、整数に限られています |
Fw.d |
浮き点·固定小数記法 |
Ew.dEe |
浮動小数点·指数表現法 |
ENw.d |
工程.指数倍数3のEフォーマット |
ESw.d |
科学的である;ENと同じであるが、ゼロでなければ、ゼロのプリアンブルではない |
Gw.dEe |
一般に,重要度が失われていなければF,Eと表示される |
Dw.dEe |
浮動小数点、指数表現法、倍精度 |
ここでwは値を示す文字幅,mは表示の最小桁,dは小数の右辺の桁,eは指数中の桁である..mフィールドおよびEEフィールドは任意である。
A(文字)、L(論理)、F(浮動小数点)、G(通常)表示フォーマットは、Python形式の文字列に直接変換することができます。他のフォーマットはPython表示フォーマットに一致するように修正する必要があります。
整数フォーマット(I、B、O、Z)の場合、幅(W)値は、列値の左側にスペースパッドを追加するために使用される。最小数字(M)の値は用いない.E,G,D,ENとESフォーマット(浮動小数点指数)については,幅(W)と精度(D)を併用するが,指数(E)は用いない.
Python形式文字列をTDISPnに変換する¶
Python形式文字列からTDISPnに戻すのは少し複雑です。
Python形式文字列に右スペースパッドが含まれていない場合、Python文字列はTDISPフォーマットAにマッピングされます。それは左側のスペース充填を受けるだろう。これは論理フォーマットLにも同様に適用される.
整数フォーマット(10進整数、バイナリ、8進、16進数)は、それぞれI、B、O、およびZ TDISPフォーマットにマッピングされる。整数フォーマットは、ゼロ記入されたフォーマット文字列または左パディングを定義していないフォーマット文字列(整数フォーマットのTDISPフォーマット標準要件幅)を受け入れない。
すべての浮動小数点値と指数値については,ゼロパディングは受け付けない.少なくとも幅や精度を定義しなければならない.幅のみを定義すれば,TDISPnフォーマットに精度を設定することはない.精度のみを定義すれば,幅はフォーマットタイプに応じて精度に追加のパディング値を加え,両者ともTDISPn形式で設定する.そうでなければ,幅と精度がともに存在すれば,TDISPnフォーマットに設定する.1本の巨漢. f
あるいは…。 F
TDISP F形式にマッピングします。巨漢. g
あるいは…。 G
TDISP G形式にマッピングします。巨漢. e
そして E
TDISP E形式にマッピングします。
遮蔽柱.¶
以下を含む表 MaskedColumn
列は適切な位置に書き込むことができる.デフォルトの場合、これは、FITS規格に従ってマスクされたデータ要素を特定の前哨値に置き換える:
NaN
浮動柱に使います。の価値
TNULLn
全型列については,列で定義される.fill_value
属性です。文字列の空文字列(現在実現されていない)
ファイルを読み返す際には、これらの要素は戻りテーブルにマスクと表記されていますが、参照されたい issue #4708 3つのケースのすべての問題です
FITS規格にはいくつかの制限がある。
すべてのデータタイプがサポートされているわけではない(例えば、論理/ブール型)。
整数列は、NULLインジケータとして1つの値を選択する必要がある。すべての可能な値が有効データで表される場合(例えば、全256個の可能な値を有効データに含む符号なし整数列)である場合、失われたデータを表すことができない。
マスクされたデータ値は永久的に失われ,後でこれらの値をマスクする可能性は排除される.
astropy
ユーザが使用を選択することができるこの制限を解決する方法を提供する。重要なのは serialize_method='data_mask'
表を書く際のキーワードパラメータ。これはFITSコンパイラが各マスク列を2つの別個の列に分割し,1つをデータ,もう1つをマスクに分割することを伝える.それが読み取られると、プロセスは逆になり、2つの列は1つのシールド列に統合される。
>>> from astropy.table.table_helpers import simple_table
>>> t = simple_table(masked=True)
>>> t['d'] = [False, False, True]
>>> t['d'].mask = [True, False, False]
>>> t
<Table masked=True length=3>
a b c d
int64 float64 str1 bool
----- ------- ---- -----
-- 1.0 c --
2 2.0 -- False
3 -- e True
>>> t.write('data.fits', serialize_method='data_mask', overwrite=True)
>>> Table.read('data.fits')
<Table masked=True length=3>
a b c d
int64 float64 bytes1 bool
----- ------- ------ -----
-- 1.0 c --
2 2.0 -- False
3 -- e True
警告
このオプションは、失われたデータを表すための既定のFITS規格を超えているので、ユーザは、特に他の(Asterpy´‘)ユーザがファイルを読み取る場合には、特に気をつけなければならない。舞台裏では ``astropy
マスク列は、2つの異なるデータ列およびマスク列に変換され、その後、メタデータが書き込まれる。 COMMENT
カードは元のデータを再構成することができます。
astropy
ネイティブオブジェクト(Mixin列)¶
It is possible to store not only standard Column
objects to a
FITS table HDU, but also any astropy
native objects
(混合柱) within a Table
or
QTable
. This includes Time
,
Quantity
, SkyCoord
, and many others.
一般に、MIXIN列は、複数のデータコンポーネントおよび標準列属性以外のオブジェクト属性を含むことができる。 format
あるいは…。 description
それがそうです。FITS規格で設定されたルールを遵守するには,これらのデータコンポーネントとオブジェクト属性を適切なFITSテーブル列とキーワードにマッピングする必要がある.そこで、オブジェクトがデータや属性を失うことなくファイル内で“往復”することを可能にしながら、これらの混合列を適切に格納することを可能にするために、良好な定義プロトコルが開発されている。
量¶
A Quantity
中のMixin列 QTable
FITS表で使用する TUNITn
マッチング列キーワードは,数を含む単位属性である.例えば:
>>> from astropy.table import QTable
>>> import astropy.units as u
>>> t = QTable([[1, 2] * u.angstrom)])
>>> t.write('my_table.fits', overwrite=True)
>>> qt = QTable.read('my_table.fits')
>>> qt
<QTable length=2>
col0
Angstrom
float64
--------
1.0
2.0
時間です。¶
astropy
以下の読み書き機能を提供する Time
:
書くことと読むこと astropy
時間欄.¶
デフォルトの場合、1つは Time
中のMixin列 Table
あるいは…。 QTable
完全に正確なサイズに書かれますこれは,FITS時間基準を用いて必要なFITSヘッダキーワードを設定することで行われる.
FITフォームを読み込み Table
歴史的にはすべての配合列を Column
オブジェクト,これらのオブジェクトは非常にマッチする属性を持つ.しかし,ある列に対してCloser Nativeは astropy
表示は可能で、あなたは伝達することができます astropy_native=True
(後方互換性のため、デフォルトではこの動作は実行されません)。これはFITS時間基準を満たす列を変換する. Time
事例は,任意の精度損失を回避する.
例を引く¶
適切なテーブルを読み込むには、以下の操作を実行してください Table
:
>>> from astropy.time import Time
>>> from astropy.table import Table
>>> from astropy.coordinates import EarthLocation
>>> t = Table()
>>> t['a'] = Time([100.0, 200.0], scale='tt', format='mjd',
... location=EarthLocation(-2446354, 4237210, 4077985, unit='m'))
>>> t.write('my_table.fits', overwrite=True)
>>> tm = Table.read('my_table.fits', astropy_native=True)
>>> tm['a']
<Time object: scale='tt' format='jd' value=[ 2400100.5 2400200.5]>
>>> tm['a'].location
<EarthLocation (-2446354., 4237210., 4077985.) m>
>>> all(tm['a'] == t['a'])
True
同様の方法は QTable
それがそうです。
In addition to binary table columns, various global time informational FITS
keywords are treated specially with astropy_native=True
. In particular,
the keywords DATE
, DATE-*
(ISO 8601 datetime strings), and the MJD-*
(MJD date values) will be returned as Time
objects in the Table meta
.
For more details regarding the FITS time paper and the implementation,
refer to 表を時間列に合わせる.
すべてのFITSリーダがFITS時間基準を使用できるわけではないため,格納も可能である. Time
instances using the _ time_format `. For this case, none of the special header keywords associated with the FITS time standard will be set. When reading this back into ``astropy`
, the column will be an ordinary Column instead of a Time
object. See the Details 以下の節で一例を示す.
バイナリテーブルに適合する標準を満たす時間座標列を読み取る.¶
FITS時間規格に準拠したFITSファイルの読み込みをサポート astropy
標準的に規定された様々な規則と慣行に従う。この基準は,時間座標を明確かつ網羅的に記述し,その複数の用例に柔軟性を提供するために設計されている.したがって,FITSに該当するファイル中の時間座標列を読み込む際には,基準の複数の側面を考慮する必要がある.
時間座標列厳密に基準を満たす二重ベクトルJdサブセット(ここで Details 部分)は自機と捉えることができる Time
物体です。この標準の他のサブセットもサポートされています astropy
FITS標準時間に関するキーワードを徹底的にチェックし,それに応じて時間データを解釈する.
この基準は、時間仕様における様々な構成要素を記述する。
時間座標フレーム
時間単位.
訂正、誤りなど。
期間
時間を指定するためのキーワードは,これらのコンポーネントを定義する.これらのキーワードを用いて、時間座標列が識別されて読み取られる Time
物体です。参考までに 表を時間列に合わせる これらのキーワードの説明とその説明については参照されたい.
この基準には、それらを処理する際に微妙な点が関連しているので、特に注意が必要な2つの側面がある。これらは
Time(時間単位付き)という列
既存のFITSファイルの一般的な約束の1つは、FITSバイナリテーブル列である TTYPEn = ‘TIME’
時間座標列を表す.多くの天文データファイルは、主要天文台の公式データ製品を含め、この朝FITS標準の約束に従っている。FITS時間基準は、そのような列がグローバル時間参照フレームキーワードによって制御され、これが依然として本規格に適合することを規定する。
この基準に組み込まれた約束を使用して astropy
このようなFITテーブルのすべての時間座標列をネイティブとして読み取ることができます Time
物体です。この約束に従ったFITファイルの一般的な例は、Chandra、XMM、およびHSTファイルである。
実例.¶
以下にChandraイベントリストのタイトル抽出例を示す.
COMMENT ---------- Globally valid key words ----------------
DATE = '2016-01-27T12:34:24' / Date and time of file creation
TIMESYS = 'TT ' / Time system
MJDREF = 5.0814000000000E+04 / [d] MJD zero point for times
TIMEUNIT= 's ' / Time unit
TIMEREF = 'LOCAL ' / Time reference (barycenter/local)
COMMENT ---------- Time Column -----------------------
TTYPE1 = 'time ' / S/C TT corresponding to mid-exposure
TFORM1 = '1D ' / format of field
TUNIT1 = 's '
When reading such a FITS table with astropy_native=True
, astropy
checks
whether the name of a column is "TIME"/ "time" (TTYPEn = ‘TIME’
) and
whether its unit is a FITS recognized time unit (TUNITn
is a time unit).
例えば、上述したタイトルおよび時間座標列を有するChandraイベントリストを読み出す time
として [1, 2]
与えられます:
>>> from astropy.table import Table
>>> from astropy.time import Time, TimeDelta
>>> from astropy.utils.data import get_pkg_data_filename
>>> chandra_events = get_pkg_data_filename('data/chandra_time.fits',
... package='astropy.io.fits.tests')
>>> native = Table.read(chandra_events, astropy_native=True)
>>> native['time']
<Time object: scale='tt' format='mjd' value=[57413.76033393 57413.76033393]>
>>> non_native = Table.read(chandra_events)
>>> # MJDREF = 5.0814000000000E+04, TIMESYS = 'TT'
>>> ref_time = Time(non_native.meta['MJDREF'], format='mjd',
... scale=non_native.meta['TIMESYS'].lower())
>>> # TTYPE1 = 'time', TUNIT1 = 's'
>>> delta_time = TimeDelta(non_native['time'])
>>> all(ref_time + delta_time == native['time'])
True
デフォルトの場合、FITテーブル列は標準として読み出されます。 Column
対象は,FITS時間基準を考慮しない.
ISO 8601日時フォーマットの文字列時間列
Date−xxxのようないくつかの時間関連キーワードの場合、FITSは、ISO 8601のサブセット(それ自体が特定の時間スケールを意味するわけではない)を使用する。FITS規格では,その値は文字列の形で以下のものを記入しなければならない datetime
フォーマット:
[+/-C]CCYY-MM-DD[Thh:mm:ss[.s...]]
この時間表現法を用いて時間座標列を構築することができる.以下にISO 8601の例を示す datetime
フォーマット時間列:
TIME
----
1999-01-01T00:00:00
1999-01-01T00:00:40
1999-01-01T00:01:06
.
.
.
1999-01-20T01:10:00
ISO 8601フォーマットの時間座標列を識別する基準は以下のとおりである。
上述したように、時間座標フレームキーワードを用いて時間列を識別する 表を時間列に合わせる それがそうです。それが識別されると、その表示フォーマットを決定するために、そのデータタイプがチェックされる。ISO 8601以来 datetime
フォーマットは時間的に一意の文字列表現形式であり、文字列データタイプを有する時間座標列は自動的に読み出される Time
以下の内容を持つ対象 format='fits'
(‘FITS’はFITS ISO 8601形式を表す)。
このフォーマットは、特定の時間スケールを暗黙的に含まないため、タイトル内の時間スケールキーワードを使用して決定される。 (TCTYP
あるいは…。 TIMESYS
)またはデフォルト値。時間座標フレームキーワードを用いて他の時間座標情報も同様に決定する。すべてのISO 8601時間は、全世界で公認されている零点(年0は紀元前1 BCEに対応する)に対して、参照時間キーワード(MJDREF、JDREFまたはDATEREF)とは無関係である。したがって、ISO 8601タイム列を処理する際には、これらのキーワードは無視される。
注釈
時間座標列に適したファイルを読み込む may 失敗しました。 astropy
これらのファイルのサブセットの大部分はサポートされているが、いくつかのFITSファイルは、この規格のいかなる態様にも適合していない。もしあなたがこのような書類を持っていたら、迷わず私たちに知らせてください(開くことで issue tracker )。
また読書は TTYPEn = ‘TIME’
として Time
以下の場合には失敗する TUNITn
この列は認識に適した時間単位ではないからである.
細かい点¶
時間は天文データの1つの次元としてFITSファイルにおける表示に挑戦している.したがって、この基準は厳格な説明に拡張された。 World Coordinate System
フレームワーク。参考までに FITS WCS paper IV もっと細かいことを知っています。
許す Time
したがって,FITSテーブルに時間座標列として書き込む列は,保持精度を確保するように時間値を格納し,関連するメタデータを関連するFITSキーワードにマッピングすることに関連する.
この基準によれば(この基準はバイナリテーブルでペアのダブルスを使用できることに規定されている)。 astropy
このような表には,時間列が2つの倍精度ベクトルの形で書き込まれている (TFORMn = ‘2D’) (jd1, jd2)
どこだ? JD = jd1 + jd2
それがそうです。これは、時間値を倍精度にコピーし、“非破壊”バージョンであり、バイナリテーブルが提供するより高い精度を利用する。注意してください jd1
常に半整数または整数であり、 abs(jd2) < 1
それがそうです。“往復”です astropy
-時間座標列を含む書き込みされたFITバイナリテーブルは、選択されたメタデータをマッピングすることによって部分的に実現されている。 scale
和単数 location
の Time
対応するキーワードに追加します。中で許可されている任意のメタデータに注意してください Table
対象中の対象 meta
辞書は書面ではないので、紛失します。
実例.¶
以下の時間列を考えてください。
>>> t['a'] = Time([100.0, 200.0], scale='tt', format='mjd')
FITS規格では,追加の変換層が必要なフォーマットに戻る必要がある.“時間”欄 t['a']
翻訳を受けます Astropy Time --> FITS --> Astropy Time
フォーマット変換に対応しています mjd --> (jd1, jd2) --> jd
それがそうです。最終的には (jd1, jd2)
FITS時間基準に完全に適合したソフトウェアが実施される必要がある.
この点を考慮して,時間表示値を指定されたフォーマットで格納することで,/からFITへの読み出し/書き込み時間の機能を明示的にオフにすることができる. format
属性の属性。 Time
column, instead of the (jd1, jd2)
format, with no extra metadata in the header. This is the "lossy" version, but can help with portability. For the above example, the FITS column corresponding to t['a']
will then store [100.0 200.0]
instead of [[ 2400100.5, 0. ], [ 2400200.5, 0. ]]
. This is done by setting the Table serialization methods 書き込み時の時間列については,次の例を示す.
>>> from astropy.time import Time
>>> from astropy.table import Table
>>> from astropy.coordinates import EarthLocation
>>> t = Table()
>>> t['a'] = Time([100.0, 200.0], scale='tt', format='mjd')
>>> t.write('my_table.fits', overwrite=True,
... serialize_method={Time: 'formatted_value'})
>>> tm = Table.read('my_table.fits')
>>> tm['a']
<Column name='a' dtype='float64' length=2>
100.0
200.0
>>> all(tm['a'] == t['a'].value)
True
デフォルトの場合、 serialize_method
FOR TIME COLUMNS等しい 'jd1_jd2'
すなわち,時間列は全精度で書き込まれる.
注釈
♪the astropy
Time
オブジェクトはFITS時間基準に正確にマッピングできない.
FORMAT
FITSフォーマットは、ISO 8601、JD、MJDの3つのフォーマットのみを考慮する。
astropy
時間は他の多くのフォーマットを許可しますunix
あるいは…。cxcsec
値を表すために用いられる。だから、
format
時間属性は格納されていません。FITSから読み込むと、ユーザはformat
あなたの望み通りです。LOCATION
FITS規格では,時間座標の参照位置はキーワードで表されるスカラーである.しかしながら、ベクトル化の基準位置または位置は、 Green Bank Keyword Convention これは登録されたFITS条約だ。はい。
astropy
時間、位置は、時間値にブロードキャスト可能な配列であってもよい。したがってベクトル化は
location
時間属性の記憶と読み出しはこの約束に従う.
HDF 5¶
読む/書く/読む/書く HDF5 書類支持 format='hdf5'
(これには h5py インストール待ち)。しかし、 .hdf5
ファイルを書き込む際にはファイル拡張子が自動的に識別され,読み込み時(ファイルの最初のバイトを用いてフォーマットを識別する)はHDF 5ファイルを自動的に識別する(異なる拡張子を用いても)ため,多くの場合,明示的に指定する必要はない. format='hdf5'
それがそうです。
HDF 5ファイルは複数のテーブルを含むことができるので、通過すべきである path=
読んで書くときに議論をします。
実例.¶
名前を読むには data
名前のHDF 5ファイルから observations.hdf5
以下の動作を実行することができます。
>>> t = Table.read('observations.hdf5', path='data')
HDF 5ファイルにグループに埋め込まれたテーブルを読み出すには、以下の動作を実行することができる。
>>> t = Table.read('observations.hdf5', path='group/data')
新しいファイルに表を書き込むには、パスも指定しなければなりません:
>>> t.write('new_file.hdf5', path='updated_data')
以下のコマンドを使用して既存のファイルにテーブルを書き込むこともできます append=True
**
>>> t.write('observations.hdf5', path='updated_data', append=True)
他のフォーマットと同様に overwrite=True
パラメータは既存のファイルをカバーすることをサポートします。複数のデータセットを持つHDF 5ファイルの単一のテーブルのみを上書きするには、使用してください both ♪the overwrite=True
そして append=True
論争する。
最後に、HDF 5ファイルを書き込む際には、 compression=
データがディスク上で圧縮されることを保証するためにパラメータを使用することができる:
>>> t.write('new_file.hdf5', path='updated_data', compression=True)
メタデータとMixin列¶
astropy
tables can contain metadata, both in the table meta
attribute
(which is an ordered dictionary of arbitrary key/value pairs), and within the
columns, which each have attributes unit
, format
, description
,
and meta
.
デフォルトの場合、テーブルをHDF 5に書き込む場合、コードは各キー/値ペアをテーブルに格納しようと試みる。 meta
表データ集合であるHDF 5属性.もし…。 meta
HDF 5属性として格納可能なオブジェクトではありません。さらに、格納されるテーブル列が上に記載された任意の列属性の定義値を有する場合、これらのメタデータは not 保存され、警告されるだろう。
serialize_meta¶
すべての表メタデータと列メタデータをHDF 5ファイルに格納することを有効にするには、呼び出してください write()
方法: serialize_meta=True
それがそうです。これにより、メタデータは、名前の同じファイルに含まれる別個のHDF 5データセットに格納される。 <path>.__table_column_meta__
それがそうです。ここ、ここ path
呼び出しで提供されるパラメータです write()
**
>>> t.write('observations.hdf5', path='data', serialize_meta=True)
属性はYAML中のメタデータを後直列化し,表メタデータを文字列のデータセットとして格納する. ECSV header format 定義する。常用言語の多くはYAML解析器を持つため,非AsterpyアプリケーションでHDF 5を読み込むと,表メタデータに容易にアクセスして利用することができる.
自分から. astropy
3.0指定による serialize_meta=True
以下を含むテーブルをHDF 5に格納することもできる 混合柱 例えば Time
あるいは…。 SkyCoord
柱です。
ジャイアントパンダ.¶
astropy
Table
supports the ability to read or write tables using some of the I/O methods 以下の範囲でご利用いただけます pandas. したがって、このインターフェースは、以下の関数/方法のための便利なラッパを提供する。
書式名. |
データ記述 |
読者.読者 |
作家.作家 |
---|---|---|---|
|
|||
|
|||
|
|||
|
固定幅. |
注意事項 :
固定幅のライタは含まれていない pandas.
HTMLを読むには BeautifulSoup4 そして html5lib インストールします。
テーブルの読み出しまたは書き込みの際に、除算する format
例えばパンダにファイル名を伝えています
>>> t.write('data.csv', format='pandas.csv', sep=' ', header=False)
>>> t2 = Table.read('data.csv', format='pandas.csv', sep=' ', names=['a', 'b', 'c'])
JSViewer¶
表を提供するインタラクティブなHTML導出 HTML
編集器ですが使用しています DataTables ライブラリは、HTML表(列ランキング、検索、およびページ分けを有する)をインタラクティブに可視化することを可能にする。
例を引く¶
表を書くには、以下の操作を実行してください t
新しいファイルに追加:
>>> t.write('new_table.html', format='jsviewer')
いくつかの追加パラメータを使用することができる:
VO表¶
読む/書く/読む/書く VO table 書類支持 format='votable'
それがそうです。多くの場合、既存のVOテーブルは、ファイルヘッダから自動的に識別されるべきであるが、そうでない場合、またはディスクに書き込まれる場合には、フォーマットが明示的に指定されるべきである。
実例.¶
VOテーブルファイルが1つのテーブルのみを含む場合、以下のように使用することができる。
>>> t = Table.read('aj285677t3_votable.xml')
ファイルに複数のテーブルが存在する場合、通過しない限りエラーが発生する table_id=
論拠::
>>> t = Table.read('catalog.xml')
Traceback (most recent call last):
...
ValueError: Multiple tables found: table id should be set via the table_id= argument. The available tables are twomass, spitzer
>>> t = Table.read('catalog.xml', table_id='twomass')
新しいファイルを書き込むには、テーブルのIDも指定しなければなりません( t.meta['ID']
定義済み)::
>>> t.write('new_catalog.xml', table_id='updated_table', format='votable')
文章を書く際には compression=True
パラメータは、ディスク上のデータを強制的に圧縮するために使用されてもよい。 overwrite=True
パラメータは、既存のファイルをカバーするために使用することができる。
直列化方法¶
astropy
リストに列挙(直列化)する方式の細粒度制御をサポートする.例えば、ISOフォーマットの時間列をECSV ASCIIテーブルファイルに書き込む場合には、フル解像度(完璧な“往復”)を達成するために、ペアのJD 1/JD 2浮動小数点値に書き込む必要がある場合があり、または、他のアプリケーションがこれらの値を容易に読み取ることができるように、フォーマットされたISO日付文字列に書き込む必要がある場合がある。
直列化のデフォルトメソッドはフォーマット(FITS,ECSV,HDF 5)に依存する.例えば、HDF 5はバイナリフォーマットであるため、時間オブジェクトをJD 1/JD 2として格納することは意味があり、ECSVはプレーンASCIIフォーマットであり、通常、時間オブジェクトと同じフォーマットで日付を見ることが望ましい。デフォルト設定はまた,以下のような互換性を最大限に削減しようとしていることを反映している. astropy
バージョンです。例えば、JD 1/JD 2ペアの前のバージョンに書き込むことができる場合には、時間列をフォーマット文字列としてECSVに書き込むことができるので、ECSVの現在のデフォルト設定は、フォーマットされた文字列を書き込むことである。
構成可能な直列化手法を持つ2つのクラスは Time
and MaskedColumn
. See the sections on Time Details そして Masked columns より多くの情報を得ることができます以下に各フォーマットのデフォルト値を示す:
格式. |
時間です。 |
MaskedColumn |
---|---|---|
FITS |
|
|
ECSV |
|
|
HDF 5 |
|
|
YAML |
|
--- |
実例.¶
まず、時間列およびマスク列を含むテーブルを作成する:
>>> import sys
>>> from astropy.time import Time
>>> from astropy.table import Table, MaskedColumn
>>> t = Table(masked=True)
>>> t['tm'] = Time(['2000-01-01', '2000-01-02'])
>>> t['mc1'] = MaskedColumn([1.0, 2.0], mask=[True, False])
>>> t['mc2'] = MaskedColumn([3.0, 4.0], mask=[False, True])
>>> t
<Table masked=True length=2>
tm mc1 mc2
object float64 float64
----------------------- ------- -------
2000-01-01 00:00:00.000 -- 3.0
2000-01-02 00:00:00.000 2.0 --
今ご希望のすべてを指定します Time
JD 1/JD 2と書かれた列の和 mc1
データ/マスク対として書き込まれた列としてECSV:
>>> serialize_method = {Time: 'jd1_jd2', 'mc1': 'data_mask'}
>>> t.write(sys.stdout, format='ascii.ecsv', serialize_method=serialize_method)
# %ECSV 0.9
...
# schema: astropy-2.0
tm.jd1 tm.jd2 mc1 mc1.mask mc2
2451544.0 0.5 1.0 True 3.0
2451546.0 -0.5 2.0 False ""
(明確にするためにスペースを追加)
気がつく tm
列はすでに置換されている tm.jd1
そして tm.jd2
列も同じ新しい列です mc1.mask
すでに発生しており、それは明示的にマスク値を含む。使用すべきである. ascii.ecsv
リーダは,オリジナル列を再構成する.
♪the serialize_method
2つの異なる方法でパラメータを設定することができる:
単一文字列としては,以下のようになる
data_mask
それがそうです。その後、この値は、各列に適用され、時間列のないマスクテーブルにとって便利なポリシーである。一人として
dict
ここで、キーは、単一の列名であってもよいし、クラス(上の例に示すように)であってもよく、値は、対応する直列化方法である。