質問

データを HDF に保存することの主な利点は何ですか?そして、HDF が実際に適しており役立つ主なデータ サイエンス タスクは何でしょうか?

役に立ちましたか?

解決

おそらく質問を言い換えると、代替フォーマットと比較してどのような利点があるのか​​ということになるでしょう。

主な代替案は次のとおりだと思います。データベース、テキスト ファイル、または別のパック/バイナリ形式。

考慮すべきデータベース オプションは、おそらく、列指向ストアまたは NoSQL、あるいは小規模な自己完結型データセットの場合は SQLite です。データベースの主な利点は、メモリよりもはるかに大きなデータを操作できること、ランダムまたはインデックス付きアクセスができること、データを迅速に追加/追加/変更できることです。主な欠点は、データセット全体を読み込んで処理する必要がある問題に対して、HDF よりもはるかに遅いことです。もう 1 つの欠点は、SQLite のような埋め込み型データベースを除いて、データベースは単純な自己完結型のデータ ストアではなく、システム (管理、セットアップ、メンテナンスなどが必要) であることです。

テキスト ファイル形式のオプションは XML/JSON/CSV です。これらはクロスプラットフォーム/言語/ツールキットであり、自己記述的 (または明らか:) であるため、優れたアーカイブ形式です。非圧縮の場合、ファイルは巨大になります (10x ~ 100x HDF) が、圧縮するとかなりスペース効率が良くなります (圧縮された XML は HDF とほぼ同じです)。ここでも主な欠点は速度です。テキストの解析は HDF よりもはるかに遅くなります。

他のバイナリ形式 (npy/npz numpy ファイル、blz blaze ファイル、プロトコル バッファ、Avro など) は、あまり広くサポートされていないことを除けば、HDF と非常によく似たプロパティを持っています (1 つのプラットフォームのみに限定されている場合があります)。numpy)、その他の特定の制限がある場合があります。通常、それらは説得力のある利点を提供しません。

HDF はデータベースを補完するのに適しており、同じデータが複数回使用される場合は、クエリを実行してほぼメモリサイズのデータ​​セットを生成し、それを HDF にキャッシュすることが合理的である場合があります。データセットが固定されており、通常は全体として処理される場合、それを適切なサイズの HDF ファイルのコレクションとして保存することは悪い選択肢ではありません。頻繁に更新されるデータセットがある場合は、その一部を HDF ファイルとして定期的にステージングすると役立つ場合があります。

要約すると、HDF は、通常全体として読み取られる (または書き込まれる) データに適した形式です。これは、幅広いサポートと互換性があり、アーカイブ形式として適切で、非常に高速であるため、共通語または多くのアプリケーションで一般的または推奨される交換形式です。

追伸これに実際的なコンテキストを与えるために、HDF と代替案を比較した私の最近の経験では、特定の小さな (メモリサイズよりはるかに小さい) データセットを HDF として読み取るのに 2 秒かかりました (そして、このほとんどはおそらく Pandas からのオーバーヘッドです)。JSON からの読み取りに約 1 分。そして1 時間 データベースに書き込むため。確かにデータベースへの書き込みを高速化できる可能性はありますが、有能な DBA が必要です。箱から出してすぐに使えるのはこのようになります。

他のヒント

1つの利点は、C、Java、Perl、Python、およびRの幅広いサポートです。すべてHDF5バインディングがあります。

別の利点は速度です。私はそれがベンチマークされているのを見たことがありませんが、HDFはSQLデータベースよりも速くなるはずです。

科学データの大規模なセットと時系列データの両方で使用すると、ネットワーク監視、使用追跡などで使用すると非常に良いことを理解しています。

HDFファイルには規模の制限があるとは思いません(ただし、OSの制限はまだ適用されます。

追加するには、チェックしてください ASDF 特に彼らの論文 ASDF:天文学の新しいデータ形式; ASDFはHDF5を改善しようとし、論文ではHDF5形式のいくつかの欠点について説明します。

ライセンス: CC-BY-SA帰属
所属していません datascience.stackexchange
scroll top