テキストファイルは便利です。なにしろわかりやすい。単純明快。csv形式は最高のフォーマットの一つだと思います。あらゆるデータはできるだけcsvで残しておきたいものです。
人にわかりやすいテキスト、コンピュータにわかりやすいバイナリ
しかし人間にとってわかりやすいものはコンピュータにとってはわかりづらい。逆も又然り。コンピュータにテキストファイルを読み込ませるのは存外時間がかかる。もちろんそれが10kB程度のデータであれば何の問題もありませんが、100MBのテキストファイルとなるとどうか。昨今のコンピュータは非常に早いので、それでも問題ないかもしれませんが、やはり一瞬でというわけにはいきますまい。まして最近の小型化の流れ…Raspberry Piのような、そういった小型のコンピュータボードではどうか。なかなか厳しくなってきます。
Raspherry Pi に相応しいのは…
そんなわけでコンピュータに優しいバイナリでのデータ出力というものが必要なのはいまだに変わらず。最近Raspberry Pi(以下RPi)で4MB程度のcsvデータを読み込ませたのですが、PythonのNumPyを利用して13秒程度かかりました(RPi、というよりARMではPythonの実行速度がとりわけ遅いという報告もあるようです。実際Rでは3-4秒程度で読み込めた)。これはちょっと厳しい…。それをいったんバイナリデータに変換し(1.6MBになりました)、再度Pythonで読み込んでみると、こちらは60ms。瞬時。
これはバイナリにせざるを得ないなぁということで、バイナリとなるとデータフォーマットをどうしようか、という面倒臭い問題があります。可読性、汎用性を考えると、独自フォーマットはあまり気が進みません。
気象系のデータなのですが、気象系ではNetCDFというオープンなフォーマットがであるようなので、そういった標準のものを採用したいところですが、ニッチなジャンルだからか日本語の情報が少なく、調べていくとなかなかしんどそうです。主要な言語でライブラリがあるので、使うだけならすぐできそうですが、得体の知れないフォーマットを使いたくはありませんし、そうなると勉強しないと。float型でデータを吐き出すだけならフォーマットも何もなかろうしそれでもいいかな、とか、いやせっかくなのだからもうちょっと真面目に頑張ろう、とか、悩ましいところです。
コメント