データ分析を行うためには、分析に使用するデータの事前準備・作成が必要です。
その際によくトラブルになる、BOMに関する考慮すべき点を記載します。
BOMとは
まず、BOMとは「Byte Order Mark(バイトオーダーマーク)」の略です。
Unicodeで保存する際に「エンディアンの区別ができない」といった問題への対策として考えられたものです。ファイル形式としてUnicodeで保存すると、ファイル形式に応じてBOMデータがデータ内の先頭に付与されます。
「エンディアン」とは「バイト単位でのデータの並び順」に関する規定のことで、データ作成とは無関係の内容であるためここでは割愛します。参考欄に記載の内容も合わせてご確認ください。
BOMが付与されるUnicode形式と、BOMデータの内容
BOMが付与されるUnicode形式、ならびにBOMデータは以下のとおりです。
Unicode形式 | 挿入されるBOMデータ |
UTF-7 |
0x2B 0x2F 0x76 ●● 上記●には0x2B、0x2F、0x38、0x39、のいずれかのデータが挿入 |
UTF-8 | 0xEF 0xBB 0xBF |
UTF-16 |
0xFE 0xFF(ビッグエンディアンの場合) 0xFF 0xFE(リトルエンディアンの場合) |
UTF-32 |
0x00 0x00 0xFE 0xFF(ビッグエンディアンの場合) 0xFF 0xFE 0x00 0x00(リトルエンディアンの場合) |
BOMの影響を受けるケース
代表的な例として、以下のような手順でデータを準備し分析用環境に投入し利用しようとすると、意図せずBOMの影響を受ける場合があります。
「Windows環境上でデータファイルをUnicode形式で保存する際、BOMが付与される場合が多いので意識しておく」のが良いです。
- Windows上で分析用データを作成する
- Windows以外の環境で生成した分析データをWindows環境で編集、保存する(元の分析データがBOM無しであったとしても、保存時にBOM有りの形式になる)
※WindowsUpdateやWindows上のツールの改善により、将来的にこのようなBOM問題が解消される可能性はあります
オリジナルのCSVデータを入手した後Excelで該当データを編集・保存した際は影響していると考えて良いです。
BOMの影響を受けた結果、起こりうる問題
一般的に分析データの準備段階ではUTF-8を利用することが多いと思います。UTF-8CSVデータの形式を例とし、BOMデータが存在することで以下のようにシステムが誤認することがあります。
【表面上のデータの見え方】
項目名1 | 項目名2 | 項目名3 | 項目名4 |
データ1 | データ2 | データ3 | データ4 |
データ5 | データ6 | データ7 | データ8 |
【実際のデータ】
0xEF 0xBB 0xBF項目名1 | 項目名2 | 項目名3 | 項目名4 |
データ1 | データ2 | データ3 | データ4 |
データ5 | データ6 | データ7 | データ8 |
「項目名1に合致する列を検索、自動判別する」等の処理をデータに対して行っても、その結果としては該当する列を見つけられないといったことが起こります。
その状況を認識できなかった場合、後々になり
システムの外部からCSVデータを投入したが、「項目名1」にのみ該当するデータの内容が反映されていない
という症状が発生します。
BOMへの対処方法について
対策としては、
「BOM有り」「BOM無し」を指定することが可能なファイルエディタ等を利用していれば、その際「BOM無し」を指定する
となります。ただ「BOM無し」形式でいったん保存したファイルを再度Windows上でファイルを開こうとすると、正常にデータを読み込みできず文字化けが発生します。この点には注意が必要です。(Windowsではなく「BOM無し」が一般的な環境であれば、正常に読み込み可能)
BOMは同じファイル形式(Unicode形式)でも付与される場合と付与されない場合があり、また、テキストエディタ上では確認できないことが多いといったことから、影響を忘れがちです。
データを準備する際やシステム間でデータの受け渡しをするといった際には、以下のことを常に気にするとともに、テストデータを事前に作成・投入し正常にデータを扱えているかを確認しましょう。
- 扱うデータのフォーマット形式、BOMの有無について(Windows上で稼働しているシステムからUTF-8データを抽出するのであれば、BOM有りのデータである可能性がある)
- データの手動編集を行うような作業が発生しうるかどうか、その場合は編集作業をどのような環境で実施するか(Windows上か、あるいは別の環境か)
- 準備するデータの投入先システムがどのようなフォーマット形式に対応しているか(Unicode形式が標準なのであれば、BOMの影響を受けるかどうか)