HDF5形式のファイル (1) HDF5って? - ねるねるねるねをねらずにくうぜ

ねるねるねるねをねらずにくうぜ

C とかC++(予定)とかpythonとかgnuplotとかmatlabとかmathematicaとか書く予定ですが、最終的にはねるねるねるねをねらずに食うことを目標にしているブログです

HDF5形式のファイル (1) HDF5って?

HDF5とは

結論から言います。

  • HDF(Hierarchical Data Format)5形式とは、階層化されたデータ"群"を取り扱うファイル形式である

ナニソレ、イミワカンナイって人も、難しい話はオコトワリシメスって人も、まぁ落ち着いてください。 結構便利なんですよ。HDF5。 長文読みたくない?じゃあもっとわかりやすく言います。

  • HDF5ってのは、[フォルダ+データファイル]をひとまとめにしたファイルのこと

だと言っていいでしょう。あなたのフォルダの中にはたくさんのファイルがあるでしょ?HDF5を使うと、それが全部ひとまとめにされた”ファイル”になるんです。

何故HDF5か?

データをいじるときはね 誰にも邪魔されず自由で なんというかきれいな構造をしてなきゃあ

って思ったことありませんか?無いですか、そうですか。

あなたは学校の先生です。 2014年一学期期末テストの成績を記録せねばならなくなりました。 何も言われなければ、excel(csv形式)で"2014_1st_kimatsu.xlsx"というファイルを作って

出席番号 名前 点数 合否
1 井之頭一郎 1 「痛っイイ お…折れるう~~~」
2 井之頭二郎 2 「痛っイイ お…折れるう~~~」
5 井之頭五郎 5 うおォン 俺はまるで人間火力発電所だ」
: : :

みたいに記録するでしょう。 こういう成績は普通クラスごとに記録していくはずですので、複数のシートごとに、上のようなデータを書き込んでいくでしょう。

しかし、テストは年に何回もあります。これを同じファイルに記録していくのは使いにくそうです^1。 代わりに、普通だったら年度ごとにフォルダを作り、さらにその中にサブディレクトリを作って、テストごとに記録していくのではないでしょうか? つまり、[成績]というフォルダを作って、その下に


  • 成績
    • 2014
      • 一学期
        • 実力テスト
        • 中間テスト
        • 期末テスト
          • "2014_1st_kimatsu.xlsx"
      • 二学期
        • ...

といった具合で細かい分類フォルダを作って、成績のファイルを置くでしょう。

しかし、データの数が増えてくると、煩雑になりすぎてどれがどれだかわからない・・・ しかもディレクトリの作り方が適当だったり、ディレクトリが深すぎたりするともっと厄介。 更に、フォルダの中身は全部がexcel(csv)ファイルとは限りませんよね。試験問題と解答のwordファイルとかも一緒に突っ込むでしょうね。知らず知らずのうちに煩雑な構造が出来上がっていくことで、クソダルデータが出来上がるわけです。

しかしクソダルデータ構造化するのはどうしても避けられない・・・だったら、 せめて一つのファイルとしてこれらのデータをまとめられないの!? って思いませんか?(僕は思います。みなさんも思ってください)

そうです!この望みを叶えてくれるのがHDF5形式のファイルなのです!!

HDF5は、上に挙げた成績の一連のデータ、つまり、[成績]フォルダの中の階層構造をそのままに、ひとつのファイルとして保存してしまえるのです!!!

HDF5のすごいところは、 異なるデータの形式をひとまとめにできる点です。

例えば、先ほどの成績の例では、名前(string)、出席番号、成績(int or float)、合否(bool)のように複数データ形式を抱えていました。

これらに加えて、 画像ファイルもひとまとめにできます。

とまぁ、このように、HDF5ってのは、

  • 複数の種類のデータ・ファイルをディレクトリを伴ってまとめたファイル

ってことなんですね。 とりあえず今日は、理屈をこねてHDF5が何なのかをかいたところで終わりにします。

次回は多分pythonを使ってHDF5を読み書きする方法を紹介します。

補足
  • 特殊なデータ形式なので、閲覧・編集には、 HDF5viewer などの専用ビュワーが必要です。
  • zipやtar,rarなどと違って、圧縮はしません。データはでかくなりがちですが、そのままHDFviewerなどを使って編集ができます。
  • HDF4ってのも有ります。発想は同じですが、作り方が全く違うので、別物と考えていたほうがいいでしょう。